[{"data":1,"prerenderedAt":173526},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch10-css-gui-fan-yu-xue-cheng-zai-xian-an-li":3,"wiki-doc-nav":725},{"id":4,"title":5,"body":6,"description":717,"extension":718,"meta":719,"navigation":720,"path":721,"seo":722,"stem":723,"__hash__":724},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":8,"toc":705},"minimark",[9,13,18,47,109,113,118,123,167,174,185,193,196,199,202,205,212,226,230,233,263,267,270,284,288,291,320,324,327,353,357,362,404,409,437,441,458,507,513,557,575,692,701],[10,11,5],"h1",{"id":12},"_10-css规范与学成在线案例",[14,15,17],"h2",{"id":16},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[19,20,21,29,35,41],"ol",{},[22,23,24,28],"li",{},[25,26,27],"strong",{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[22,30,31,34],{},[25,32,33],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[22,36,37,40],{},[25,38,39],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[22,42,43,46],{},[25,44,45],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[48,49,54],"pre",{"className":50,"code":51,"language":52,"meta":53,"style":53},"language-Css shiki shiki-themes github-light github-dark","\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n","Css","",[55,56,57,66,77,103],"code",{"__ignoreMap":53},[58,59,62],"span",{"class":60,"line":61},"line",1,[58,63,65],{"class":64},"sJ8bj","\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[58,67,69,73],{"class":60,"line":68},2,[58,70,72],{"class":71},"s9eBZ","div",[58,74,76],{"class":75},"sVt8B"," {\n",[58,78,80,84,87,90,94,97,100],{"class":60,"line":79},3,[58,81,83],{"class":82},"sj4cs","  border",[58,85,86],{"class":75},": ",[58,88,89],{"class":82},"1",[58,91,93],{"class":92},"szBVR","px",[58,95,96],{"class":82}," solid",[58,98,99],{"class":82}," #ccc",[58,101,102],{"class":75},";\n",[58,104,106],{"class":60,"line":105},4,[58,107,108],{"class":75},"}\n",[14,110,112],{"id":111},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[114,115,117],"h3",{"id":116},"_1021-header头部制作","10.2.1 header头部制作",[119,120],"img",{"style":121,"src":122},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[124,125,126,133,140,147,154,161],"ul",{},[22,127,128,129,132],{},"1号是版心盒子 ",[25,130,131],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[22,134,135,136,139],{},"版心盒子 里面包含 2号盒子 ",[25,137,138],{},"logo"," 图标",[22,141,142,143,146],{},"版心盒子 里面包含 3号盒子 ",[25,144,145],{},"nav"," 导航栏",[22,148,149,150,153],{},"版心盒子 里面包含 4号盒子 ",[25,151,152],{},"search"," 搜索框",[22,155,156,157,160],{},"版心盒子 里面包含 5号盒子 ",[25,158,159],{},"user"," 个人信息",[22,162,163,164],{},"注意，要求里面的 ",[25,165,166],{},"4个子盒子 必须都浮动",[19,168,169],{},[22,170,171],{},[25,172,173],{},"导航栏注意点:",[175,176,177,178,181,182],"p",{},"实际开发中， ",[25,179,180],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[25,183,184],{},"用 li 包含链接(li+a)的做法",[124,186,187,190],{},[22,188,189],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[22,191,192],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[175,194,195],{},"注意：",[175,197,198],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[175,200,201],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[175,203,204],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[19,206,207],{"start":68},[22,208,209],{},[25,210,211],{},"4号盒子search的细节：",[124,213,214,217,220],{},[22,215,216],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[22,218,219],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[22,221,222,225],{},[55,223,224],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[114,227,229],{"id":228},"_1022-banner制作","10.2.2 banner制作",[119,231],{"style":121,"src":232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[124,234,235,242,249,256],{},[22,236,237,238,241],{},"1号盒子是通栏的大盒子 ",[25,239,240],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[22,243,244,245,248],{},"2号盒子是版心 ",[25,246,247],{},"w"," ， 要水平居中对齐",[22,250,251,252,255],{},"3号盒子版心内，左对齐 ",[25,253,254],{},"subnav"," 侧导航栏",[22,257,258,259,262],{},"4号盒子版心内，右对齐 ",[25,260,261],{},"course"," 课程",[114,264,266],{"id":265},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[119,268],{"style":121,"src":269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[124,271,272,275,278,281],{},[22,273,274],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[22,276,277],{},"1号盒子是标题 H3 左侧浮动",[22,279,280],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[22,282,283],{},"3号盒子 右浮动 mod 修改",[114,285,287],{"id":286},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[119,289],{"style":121,"src":290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[124,292,293,300,307,314,317],{},[22,294,295,296,299],{},"1号盒子为最大的盒子 ",[25,297,298],{},"box"," 版心水平居中对齐",[22,301,302,303,306],{},"2号盒子为上面部分 ",[25,304,305],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[22,308,309,310,313],{},"3号盒子为底下部分 ",[25,311,312],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[22,315,316],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[22,318,319],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[114,321,323],{"id":322},"_1025-底部模块制作","10.2.5 底部模块制作",[119,325],{"style":121,"src":326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[124,328,329,336,339,346],{},[22,330,331,332,335],{},"1号盒子通栏大盒子 底部 ",[25,333,334],{},"footer"," 给高度 底色是白色",[22,337,338],{},"2号盒子版心水平居中",[22,340,341,342,345],{},"3号盒子版权 ",[25,343,344],{},"copyright"," 左对齐",[22,347,348,349,352],{},"4号盒子 链接组 ",[25,350,351],{},"links"," 右对齐",[114,354,356],{"id":355},"_1026-代码模块","10.2.6 代码模块",[19,358,359],{},[22,360,361],{},"html部分",[48,363,367],{"className":364,"code":365,"language":366,"meta":53,"style":53},"language-Html shiki shiki-themes github-light github-dark","\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n","Html",[55,368,369],{"__ignoreMap":53},[58,370,371,374,377,381,384,388,391,393,396,399,401],{"class":60,"line":61},[58,372,373],{"class":75},"\u003C",[58,375,376],{"class":71},"a",[58,378,380],{"class":379},"sScJk"," href",[58,382,383],{"class":75},"=",[58,385,387],{"class":386},"sZZnC","\"https:\u002F\u002Fexample.com\"",[58,389,390],{"class":379}," target",[58,392,383],{"class":75},[58,394,395],{"class":386},"\"_blank\"",[58,397,398],{"class":75},">链接文字\u003C\u002F",[58,400,376],{"class":71},[58,402,403],{"class":75},">\n",[19,405,406],{"start":68},[22,407,408],{},"css部分",[48,410,411],{"className":364,"code":365,"language":366,"meta":53,"style":53},[55,412,413],{"__ignoreMap":53},[58,414,415,417,419,421,423,425,427,429,431,433,435],{"class":60,"line":61},[58,416,373],{"class":75},[58,418,376],{"class":71},[58,420,380],{"class":379},[58,422,383],{"class":75},[58,424,387],{"class":386},[58,426,390],{"class":379},[58,428,383],{"class":75},[58,430,395],{"class":386},[58,432,398],{"class":75},[58,434,376],{"class":71},[58,436,403],{"class":75},[114,438,440],{"id":439},"_1027-收获","10.2.7 收获",[19,442,443,446,449,452,455],{},[22,444,445],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[22,447,448],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[22,450,451],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[22,453,454],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[22,456,457],{},"遗忘代码",[48,459,461],{"className":50,"code":460,"language":52,"meta":53,"style":53},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[55,462,463,486,491,503],{"__ignoreMap":53},[58,464,465,467,470,472,474,476,478,480,482,484],{"class":60,"line":61},[58,466,72],{"class":71},[58,468,469],{"class":75},", ",[58,471,175],{"class":71},[58,473,469],{"class":75},[58,475,10],{"class":71},[58,477,469],{"class":75},[58,479,124],{"class":71},[58,481,469],{"class":75},[58,483,22],{"class":71},[58,485,76],{"class":75},[58,487,488],{"class":60,"line":68},[58,489,490],{"class":64},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[58,492,493,496,498,501],{"class":60,"line":79},[58,494,495],{"class":82},"  display",[58,497,86],{"class":75},[58,499,500],{"class":82},"block",[58,502,102],{"class":75},[58,504,505],{"class":60,"line":105},[58,506,108],{"class":75},[19,508,510],{"start":509},6,[22,511,512],{},"html引css的程序",[48,514,515],{"className":50,"code":460,"language":52,"meta":53,"style":53},[55,516,517,539,543,553],{"__ignoreMap":53},[58,518,519,521,523,525,527,529,531,533,535,537],{"class":60,"line":61},[58,520,72],{"class":71},[58,522,469],{"class":75},[58,524,175],{"class":71},[58,526,469],{"class":75},[58,528,10],{"class":71},[58,530,469],{"class":75},[58,532,124],{"class":71},[58,534,469],{"class":75},[58,536,22],{"class":71},[58,538,76],{"class":75},[58,540,541],{"class":60,"line":68},[58,542,490],{"class":64},[58,544,545,547,549,551],{"class":60,"line":79},[58,546,495],{"class":82},[58,548,86],{"class":75},[58,550,500],{"class":82},[58,552,102],{"class":75},[58,554,555],{"class":60,"line":105},[58,556,108],{"class":75},[19,558,560,563,566,569,572],{"start":559},7,[22,561,562],{},"浮动的盒子不会有外边距合并问题",[22,564,565],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[22,567,568],{},"ctrl+g快速定位行；shift+alt多个光标",[22,570,571],{},"学习上方各个模块的选择器起名方法，以后就这样用",[22,573,574],{},"在写选择器时尽量写全一些，例如",[48,576,578],{"className":50,"code":577,"language":52,"meta":53,"style":53},"\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",[55,579,580,585,604,609,625,631,647,652,669,675],{"__ignoreMap":53},[58,581,582],{"class":60,"line":61},[58,583,584],{"class":64},"\u002F* 静态定位（默认） *\u002F\n",[58,586,587,590,593,596,598,601],{"class":60,"line":68},[58,588,589],{"class":379},".static",[58,591,592],{"class":75}," { ",[58,594,595],{"class":82},"position",[58,597,86],{"class":75},[58,599,600],{"class":82},"static",[58,602,603],{"class":75},"; }\n",[58,605,606],{"class":60,"line":79},[58,607,608],{"class":64},"\u002F* 相对定位 *\u002F\n",[58,610,611,614,616,618,620,623],{"class":60,"line":105},[58,612,613],{"class":379},".relative",[58,615,592],{"class":75},[58,617,595],{"class":82},[58,619,86],{"class":75},[58,621,622],{"class":82},"relative",[58,624,603],{"class":75},[58,626,628],{"class":60,"line":627},5,[58,629,630],{"class":64},"\u002F* 绝对定位 *\u002F\n",[58,632,633,636,638,640,642,645],{"class":60,"line":509},[58,634,635],{"class":379},".absolute",[58,637,592],{"class":75},[58,639,595],{"class":82},[58,641,86],{"class":75},[58,643,644],{"class":82},"absolute",[58,646,603],{"class":75},[58,648,649],{"class":60,"line":559},[58,650,651],{"class":64},"\u002F* 固定定位 *\u002F\n",[58,653,655,658,660,662,664,667],{"class":60,"line":654},8,[58,656,657],{"class":379},".fixed",[58,659,592],{"class":75},[58,661,595],{"class":82},[58,663,86],{"class":75},[58,665,666],{"class":82},"fixed",[58,668,603],{"class":75},[58,670,672],{"class":60,"line":671},9,[58,673,674],{"class":64},"\u002F* 粘性定位 *\u002F\n",[58,676,678,681,683,685,687,690],{"class":60,"line":677},10,[58,679,680],{"class":379},".sticky",[58,682,592],{"class":75},[58,684,595],{"class":82},[58,686,86],{"class":75},[58,688,689],{"class":82},"sticky",[58,691,603],{"class":75},[19,693,695,698],{"start":694},12,[22,696,697],{},"一定要用好注释",[22,699,700],{},"浮动的盒子不会有外边距合并的问题",[702,703,704],"style",{},"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":53,"searchDepth":68,"depth":68,"links":706},[707,708],{"id":16,"depth":68,"text":17},{"id":111,"depth":68,"text":112,"children":709},[710,711,712,713,714,715,716],{"id":116,"depth":79,"text":117},{"id":228,"depth":79,"text":229},{"id":265,"depth":79,"text":266},{"id":286,"depth":79,"text":287},{"id":322,"depth":79,"text":323},{"id":355,"depth":79,"text":356},{"id":439,"depth":79,"text":440},null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":5,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",[726,5808,6916,8336,11324,12675,14163,15252,24014,24026,24625,24651,24775,25016,25081,25099,25112,25159,25283,25452,25651,25831,26036,26172,26267,26304,26317,26627,27368,28076,28097,29117,30748,30899,30912,30924,31225,51037,51052,51069,51102,53968,77309,93452,93473,93586,93707,94477,95140,95501,95539,95645,95745,95788,95814,95875,97529,97630,97655,98146,98646,99726,100009,100751,101253,101265,103281,104945,106448,108146,110063,111982,114004,117474,117906,118369,119118,122062,122410,122432,122788,126095,126107,126510,126533,126680,126847,127051,127350,127907,128562,130490,132084,132595,134089,135520,136755,138449,140201,142611,142727,143662,143873,144758,145993,146221,146234,147389,149801,152169,155490,157967,159611,161388,163401,166453,168633,171160,173354],{"id":727,"title":728,"body":729,"description":53,"extension":718,"meta":5803,"navigation":720,"path":5804,"seo":5805,"stem":5806,"__hash__":5807},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":730,"toc":5775},[731,734,738,741,745,756,760,764,767,770,773,776,779,807,811,814,817,820,823,873,877,895,897,911,914,922,925,1783,1790,1806,1810,1896,1900,1906,1991,1995,2033,2037,2101,2105,2109,2115,2126,2130,2135,2139,2144,2148,2153,2157,2161,2166,2434,2439,2577,2582,2838,2841,2849,2853,2858,2961,2964,3270,3279,3380,3383,3386,3389,3392,3652,3657,3797,3800,3979,3982,4110,4113,4265,4269,4274,4277,4288,4296,4299,4406,4410,4414,4419,4469,4474,4479,4503,4508,4561,4564,4569,4746,4751,5036,5041,5438,5442,5447,5504,5509,5517,5520,5660,5663,5772],[10,732,728],{"id":733},"_1基础入门",[14,735,737],{"id":736},"_11注释","1.1注释",[175,739,740],{},"\u002F\u002F或者\u002F* *\u002F",[14,742,744],{"id":743},"_12命名","1.2命名",[19,746,747,750,753],{},[22,748,749],{},"字母数字下划线",[22,751,752],{},"开头必须是字母或_",[22,754,755],{},"不能使用关键词",[14,757,759],{"id":758},"_13数据类型","1.3数据类型",[114,761,763],{"id":762},"_131整形","1.3.1整形",[175,765,766],{},"short 短整形 2",[175,768,769],{},"int 整形 4",[175,771,772],{},"long 长整形 win4 linux32位4 linux64位8",[175,774,775],{},"long long 长长整形 8",[175,777,778],{},"利用sizeof可以求数据类型占用的内存空间大小",[48,780,784],{"className":781,"code":782,"language":783,"meta":53,"style":53},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[55,785,786,800],{"__ignoreMap":53},[58,787,788,791,794,797],{"class":60,"line":61},[58,789,790],{"class":92},"sizeof",[58,792,793],{"class":75},"(",[58,795,796],{"class":92},"int",[58,798,799],{"class":75},")\n",[58,801,802,804],{"class":60,"line":68},[58,803,790],{"class":92},[58,805,806],{"class":75},"(num)\n",[114,808,810],{"id":809},"_132浮点型","1.3.2浮点型",[175,812,813],{},"float 单精度 4节 7位有效数字",[175,815,816],{},"double 双精度 8节 15-16有效数字",[175,818,819],{},"默认情况下，输出一个小数，会显示6位有效数字",[175,821,822],{},"注意点：",[48,824,826],{"className":781,"code":825,"language":783,"meta":53,"style":53},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[55,827,828,850],{"__ignoreMap":53},[58,829,830,833,836,838,841,844,847],{"class":60,"line":61},[58,831,832],{"class":92},"float",[58,834,835],{"class":75}," f1",[58,837,383],{"class":92},[58,839,840],{"class":82},"3.14",[58,842,843],{"class":92},"f",[58,845,846],{"class":75},";",[58,848,849],{"class":64}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[58,851,852,854,857,859,862,865,868,870],{"class":60,"line":68},[58,853,832],{"class":92},[58,855,856],{"class":75}," f2",[58,858,383],{"class":92},[58,860,861],{"class":82},"3",[58,863,864],{"class":92},"e",[58,866,867],{"class":82},"2",[58,869,846],{"class":75},[58,871,872],{"class":64}," \u002F\u002F科学记数法\n",[114,874,876],{"id":875},"_133字符型","1.3.3字符型",[48,878,880],{"className":781,"code":879,"language":783,"meta":53,"style":53},"char ch='a'\n",[55,881,882],{"__ignoreMap":53},[58,883,884,887,890,892],{"class":60,"line":61},[58,885,886],{"class":92},"char",[58,888,889],{"class":75}," ch",[58,891,383],{"class":92},[58,893,894],{"class":386},"'a'\n",[175,896,822],{},[19,898,899,902,905,908],{},[22,900,901],{},"在显示字符型变量时，只能单引号，双引号x",[22,903,904],{},"单引号内只能一个字符，不能字符串",[22,906,907],{},"c和c++字符型变量只占用一个字符",[22,909,910],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[175,912,913],{},"ASCII码大致由以下两部分组成：",[19,915,916,919],{},[22,917,918],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[22,920,921],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[175,923,924],{},"ASCII码表格：",[926,927,928,971],"table",{},[929,930,931],"thead",{},[932,933,934,941,946,950,955,959,963,967],"tr",{},[935,936,937,940],"th",{},[25,938,939],{},"ASCII","值",[935,942,943],{},[25,944,945],{},"控制字符",[935,947,948,940],{},[25,949,939],{},[935,951,952],{},[25,953,954],{},"字符",[935,956,957,940],{},[25,958,939],{},[935,960,961],{},[25,962,954],{},[935,964,965,940],{},[25,966,939],{},[935,968,969],{},[25,970,954],{},[972,973,974,1001,1025,1050,1075,1101,1126,1151,1177,1202,1228,1254,1280,1305,1331,1357,1383,1407,1432,1457,1482,1507,1532,1557,1581,1606,1631,1657,1682,1706,1731,1757],"tbody",{},[932,975,976,980,983,986,989,992,995,998],{},[977,978,979],"td",{},"0",[977,981,982],{},"NUT",[977,984,985],{},"32",[977,987,988],{},"(space)",[977,990,991],{},"64",[977,993,994],{},"@",[977,996,997],{},"96",[977,999,1000],{},"、",[932,1002,1003,1005,1008,1011,1014,1017,1020,1023],{},[977,1004,89],{},[977,1006,1007],{},"SOH",[977,1009,1010],{},"33",[977,1012,1013],{},"!",[977,1015,1016],{},"65",[977,1018,1019],{},"A",[977,1021,1022],{},"97",[977,1024,376],{},[932,1026,1027,1029,1032,1035,1038,1041,1044,1047],{},[977,1028,867],{},[977,1030,1031],{},"STX",[977,1033,1034],{},"34",[977,1036,1037],{},"\"",[977,1039,1040],{},"66",[977,1042,1043],{},"B",[977,1045,1046],{},"98",[977,1048,1049],{},"b",[932,1051,1052,1054,1057,1060,1063,1066,1069,1072],{},[977,1053,861],{},[977,1055,1056],{},"ETX",[977,1058,1059],{},"35",[977,1061,1062],{},"#",[977,1064,1065],{},"67",[977,1067,1068],{},"C",[977,1070,1071],{},"99",[977,1073,1074],{},"c",[932,1076,1077,1080,1083,1086,1089,1092,1095,1098],{},[977,1078,1079],{},"4",[977,1081,1082],{},"EOT",[977,1084,1085],{},"36",[977,1087,1088],{},"$",[977,1090,1091],{},"68",[977,1093,1094],{},"D",[977,1096,1097],{},"100",[977,1099,1100],{},"d",[932,1102,1103,1106,1109,1112,1115,1118,1121,1124],{},[977,1104,1105],{},"5",[977,1107,1108],{},"ENQ",[977,1110,1111],{},"37",[977,1113,1114],{},"%",[977,1116,1117],{},"69",[977,1119,1120],{},"E",[977,1122,1123],{},"101",[977,1125,864],{},[932,1127,1128,1131,1134,1137,1140,1143,1146,1149],{},[977,1129,1130],{},"6",[977,1132,1133],{},"ACK",[977,1135,1136],{},"38",[977,1138,1139],{},"&",[977,1141,1142],{},"70",[977,1144,1145],{},"F",[977,1147,1148],{},"102",[977,1150,843],{},[932,1152,1153,1156,1159,1162,1165,1168,1171,1174],{},[977,1154,1155],{},"7",[977,1157,1158],{},"BEL",[977,1160,1161],{},"39",[977,1163,1164],{},",",[977,1166,1167],{},"71",[977,1169,1170],{},"G",[977,1172,1173],{},"103",[977,1175,1176],{},"g",[932,1178,1179,1182,1185,1188,1190,1193,1196,1199],{},[977,1180,1181],{},"8",[977,1183,1184],{},"BS",[977,1186,1187],{},"40",[977,1189,793],{},[977,1191,1192],{},"72",[977,1194,1195],{},"H",[977,1197,1198],{},"104",[977,1200,1201],{},"h",[932,1203,1204,1207,1210,1213,1216,1219,1222,1225],{},[977,1205,1206],{},"9",[977,1208,1209],{},"HT",[977,1211,1212],{},"41",[977,1214,1215],{},")",[977,1217,1218],{},"73",[977,1220,1221],{},"I",[977,1223,1224],{},"105",[977,1226,1227],{},"i",[932,1229,1230,1233,1236,1239,1242,1245,1248,1251],{},[977,1231,1232],{},"10",[977,1234,1235],{},"LF",[977,1237,1238],{},"42",[977,1240,1241],{},"*",[977,1243,1244],{},"74",[977,1246,1247],{},"J",[977,1249,1250],{},"106",[977,1252,1253],{},"j",[932,1255,1256,1259,1262,1265,1268,1271,1274,1277],{},[977,1257,1258],{},"11",[977,1260,1261],{},"VT",[977,1263,1264],{},"43",[977,1266,1267],{},"+",[977,1269,1270],{},"75",[977,1272,1273],{},"K",[977,1275,1276],{},"107",[977,1278,1279],{},"k",[932,1281,1282,1285,1288,1291,1293,1296,1299,1302],{},[977,1283,1284],{},"12",[977,1286,1287],{},"FF",[977,1289,1290],{},"44",[977,1292,1164],{},[977,1294,1295],{},"76",[977,1297,1298],{},"L",[977,1300,1301],{},"108",[977,1303,1304],{},"l",[932,1306,1307,1310,1313,1316,1319,1322,1325,1328],{},[977,1308,1309],{},"13",[977,1311,1312],{},"CR",[977,1314,1315],{},"45",[977,1317,1318],{},"-",[977,1320,1321],{},"77",[977,1323,1324],{},"M",[977,1326,1327],{},"109",[977,1329,1330],{},"m",[932,1332,1333,1336,1339,1342,1345,1348,1351,1354],{},[977,1334,1335],{},"14",[977,1337,1338],{},"SO",[977,1340,1341],{},"46",[977,1343,1344],{},".",[977,1346,1347],{},"78",[977,1349,1350],{},"N",[977,1352,1353],{},"110",[977,1355,1356],{},"n",[932,1358,1359,1362,1365,1368,1371,1374,1377,1380],{},[977,1360,1361],{},"15",[977,1363,1364],{},"SI",[977,1366,1367],{},"47",[977,1369,1370],{},"\u002F",[977,1372,1373],{},"79",[977,1375,1376],{},"O",[977,1378,1379],{},"111",[977,1381,1382],{},"o",[932,1384,1385,1388,1391,1394,1396,1399,1402,1405],{},[977,1386,1387],{},"16",[977,1389,1390],{},"DLE",[977,1392,1393],{},"48",[977,1395,979],{},[977,1397,1398],{},"80",[977,1400,1401],{},"P",[977,1403,1404],{},"112",[977,1406,175],{},[932,1408,1409,1412,1415,1418,1420,1423,1426,1429],{},[977,1410,1411],{},"17",[977,1413,1414],{},"DCI",[977,1416,1417],{},"49",[977,1419,89],{},[977,1421,1422],{},"81",[977,1424,1425],{},"Q",[977,1427,1428],{},"113",[977,1430,1431],{},"q",[932,1433,1434,1437,1440,1443,1445,1448,1451,1454],{},[977,1435,1436],{},"18",[977,1438,1439],{},"DC2",[977,1441,1442],{},"50",[977,1444,867],{},[977,1446,1447],{},"82",[977,1449,1450],{},"R",[977,1452,1453],{},"114",[977,1455,1456],{},"r",[932,1458,1459,1462,1465,1468,1470,1473,1476,1479],{},[977,1460,1461],{},"19",[977,1463,1464],{},"DC3",[977,1466,1467],{},"51",[977,1469,861],{},[977,1471,1472],{},"83",[977,1474,1475],{},"S",[977,1477,1478],{},"115",[977,1480,1481],{},"s",[932,1483,1484,1487,1490,1493,1495,1498,1501,1504],{},[977,1485,1486],{},"20",[977,1488,1489],{},"DC4",[977,1491,1492],{},"52",[977,1494,1079],{},[977,1496,1497],{},"84",[977,1499,1500],{},"T",[977,1502,1503],{},"116",[977,1505,1506],{},"t",[932,1508,1509,1512,1515,1518,1520,1523,1526,1529],{},[977,1510,1511],{},"21",[977,1513,1514],{},"NAK",[977,1516,1517],{},"53",[977,1519,1105],{},[977,1521,1522],{},"85",[977,1524,1525],{},"U",[977,1527,1528],{},"117",[977,1530,1531],{},"u",[932,1533,1534,1537,1540,1543,1545,1548,1551,1554],{},[977,1535,1536],{},"22",[977,1538,1539],{},"SYN",[977,1541,1542],{},"54",[977,1544,1130],{},[977,1546,1547],{},"86",[977,1549,1550],{},"V",[977,1552,1553],{},"118",[977,1555,1556],{},"v",[932,1558,1559,1562,1565,1568,1570,1573,1576,1579],{},[977,1560,1561],{},"23",[977,1563,1564],{},"TB",[977,1566,1567],{},"55",[977,1569,1155],{},[977,1571,1572],{},"87",[977,1574,1575],{},"W",[977,1577,1578],{},"119",[977,1580,247],{},[932,1582,1583,1586,1589,1592,1594,1597,1600,1603],{},[977,1584,1585],{},"24",[977,1587,1588],{},"CAN",[977,1590,1591],{},"56",[977,1593,1181],{},[977,1595,1596],{},"88",[977,1598,1599],{},"X",[977,1601,1602],{},"120",[977,1604,1605],{},"x",[932,1607,1608,1611,1614,1617,1619,1622,1625,1628],{},[977,1609,1610],{},"25",[977,1612,1613],{},"EM",[977,1615,1616],{},"57",[977,1618,1206],{},[977,1620,1621],{},"89",[977,1623,1624],{},"Y",[977,1626,1627],{},"121",[977,1629,1630],{},"y",[932,1632,1633,1636,1639,1642,1645,1648,1651,1654],{},[977,1634,1635],{},"26",[977,1637,1638],{},"SUB",[977,1640,1641],{},"58",[977,1643,1644],{},":",[977,1646,1647],{},"90",[977,1649,1650],{},"Z",[977,1652,1653],{},"122",[977,1655,1656],{},"z",[932,1658,1659,1662,1665,1668,1670,1673,1676,1679],{},[977,1660,1661],{},"27",[977,1663,1664],{},"ESC",[977,1666,1667],{},"59",[977,1669,846],{},[977,1671,1672],{},"91",[977,1674,1675],{},"[",[977,1677,1678],{},"123",[977,1680,1681],{},"{",[932,1683,1684,1687,1690,1693,1695,1698,1700,1703],{},[977,1685,1686],{},"28",[977,1688,1689],{},"FS",[977,1691,1692],{},"60",[977,1694,373],{},[977,1696,1697],{},"92",[977,1699,1370],{},[977,1701,1702],{},"124",[977,1704,1705],{},"|",[932,1707,1708,1711,1714,1717,1719,1722,1725,1728],{},[977,1709,1710],{},"29",[977,1712,1713],{},"GS",[977,1715,1716],{},"61",[977,1718,383],{},[977,1720,1721],{},"93",[977,1723,1724],{},"]",[977,1726,1727],{},"125",[977,1729,1730],{},"}",[932,1732,1733,1736,1739,1742,1745,1748,1751,1754],{},[977,1734,1735],{},"30",[977,1737,1738],{},"RS",[977,1740,1741],{},"62",[977,1743,1744],{},">",[977,1746,1747],{},"94",[977,1749,1750],{},"^",[977,1752,1753],{},"126",[977,1755,1756],{},"`",[932,1758,1759,1762,1765,1768,1771,1774,1777,1780],{},[977,1760,1761],{},"31",[977,1763,1764],{},"US",[977,1766,1767],{},"63",[977,1769,1770],{},"?",[977,1772,1773],{},"95",[977,1775,1776],{},"_",[977,1778,1779],{},"127",[977,1781,1782],{},"DEL",[175,1784,1785,1786,1789],{},"ASCII 码大致由以下",[25,1787,1788],{},"两部分组","成：",[124,1791,1792,1799],{},[22,1793,1794,1795,1798],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[25,1796,1797],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[22,1800,1801,1802,1805],{},"ASCII 打印字符：数字 ",[25,1803,1804],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[114,1807,1809],{"id":1808},"_134转义字符","1.3.4转义字符",[48,1811,1813],{"className":781,"code":1812,"language":783,"meta":53,"style":53},"\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",[55,1814,1815,1820,1836,1850,1855,1868,1873],{"__ignoreMap":53},[58,1816,1817],{"class":60,"line":61},[58,1818,1819],{"class":64},"\u002F\u002F换行符\n",[58,1821,1822,1825,1828,1831,1833],{"class":60,"line":68},[58,1823,1824],{"class":75},"cout ",[58,1826,1827],{"class":92},"\u003C\u003C",[58,1829,1830],{"class":386},"\"hello world\u002Fn\"",[58,1832,846],{"class":75},[58,1834,1835],{"class":64}," \u002F\u002F就等同于如下：\n",[58,1837,1838,1840,1842,1845,1847],{"class":60,"line":79},[58,1839,1824],{"class":75},[58,1841,1827],{"class":92},[58,1843,1844],{"class":386},"\"hello world\"",[58,1846,1827],{"class":92},[58,1848,1849],{"class":75},"endl;\n",[58,1851,1852],{"class":60,"line":105},[58,1853,1854],{"class":64},"\u002F\u002F反斜杠\n",[58,1856,1857,1859,1861,1864,1866],{"class":60,"line":627},[58,1858,1824],{"class":75},[58,1860,1827],{"class":92},[58,1862,1863],{"class":386},"\"\u002F\u002F\"",[58,1865,1827],{"class":92},[58,1867,1849],{"class":75},[58,1869,1870],{"class":60,"line":509},[58,1871,1872],{"class":64},"\u002F\u002F水平制表符\n",[58,1874,1875,1877,1879,1882,1885,1888,1890,1893],{"class":60,"line":559},[58,1876,1824],{"class":75},[58,1878,1827],{"class":92},[58,1880,1881],{"class":386},"\"aaaa",[58,1883,1884],{"class":82},"\\t",[58,1886,1887],{"class":386},"helloworld\"",[58,1889,1827],{"class":92},[58,1891,1892],{"class":75},"endl;",[58,1894,1895],{"class":64}," \u002F\u002F输出窗口时有对齐效果\n",[114,1897,1899],{"id":1898},"_135字符串型","1.3.5字符串型",[175,1901,1902,1903,1905],{},"char 变量名",[58,1904],{},"=\"字符串值\"",[48,1907,1909],{"className":781,"code":1908,"language":783,"meta":53,"style":53},"\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",[55,1910,1911,1916,1921,1926,1931,1944,1957,1962,1967,1978],{"__ignoreMap":53},[58,1912,1913],{"class":60,"line":61},[58,1914,1915],{"class":64},"\u002F\u002Fc风格字符串\n",[58,1917,1918],{"class":60,"line":68},[58,1919,1920],{"class":64},"\u002F\u002F注意事项：\n",[58,1922,1923],{"class":60,"line":79},[58,1924,1925],{"class":64},"\u002F\u002F1.char字符串名[]\n",[58,1927,1928],{"class":60,"line":105},[58,1929,1930],{"class":64},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[58,1932,1933,1935,1938,1940,1942],{"class":60,"line":627},[58,1934,886],{"class":92},[58,1936,1937],{"class":75}," str[]",[58,1939,383],{"class":92},[58,1941,1844],{"class":386},[58,1943,102],{"class":75},[58,1945,1946,1948,1950,1953,1955],{"class":60,"line":509},[58,1947,1824],{"class":75},[58,1949,1827],{"class":92},[58,1951,1952],{"class":75},"str",[58,1954,1827],{"class":92},[58,1956,1849],{"class":75},[58,1958,1959],{"class":60,"line":559},[58,1960,1961],{"class":64},"\u002F\u002Fc++风格字符串\n",[58,1963,1964],{"class":60,"line":654},[58,1965,1966],{"class":64},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[58,1968,1969,1972,1974,1976],{"class":60,"line":671},[58,1970,1971],{"class":75},"string str2",[58,1973,383],{"class":92},[58,1975,1844],{"class":386},[58,1977,102],{"class":75},[58,1979,1980,1982,1984,1987,1989],{"class":60,"line":677},[58,1981,1824],{"class":75},[58,1983,1827],{"class":92},[58,1985,1986],{"class":75},"str2",[58,1988,1827],{"class":92},[58,1990,1849],{"class":75},[114,1992,1994],{"id":1993},"_136布尔类型bool","1.3.6布尔类型bool",[48,1996,1998],{"className":781,"code":1997,"language":783,"meta":53,"style":53},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[55,1999,2000,2015],{"__ignoreMap":53},[58,2001,2002,2005,2008,2010,2013],{"class":60,"line":61},[58,2003,2004],{"class":92},"bool",[58,2006,2007],{"class":75}," flag",[58,2009,383],{"class":92},[58,2011,2012],{"class":82},"true",[58,2014,102],{"class":75},[58,2016,2017,2020,2023,2026,2028,2030],{"class":60,"line":68},[58,2018,2019],{"class":75},"cout",[58,2021,2022],{"class":92},"\u003C\u003Csizeof",[58,2024,2025],{"class":75},"(flag)",[58,2027,1827],{"class":92},[58,2029,1892],{"class":75},[58,2031,2032],{"class":64}," \u002F\u002F查看布尔占内存空间\n",[14,2034,2036],{"id":2035},"_14键盘输入cin","1.4键盘输入cin",[48,2038,2040],{"className":781,"code":2039,"language":783,"meta":53,"style":53},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[55,2041,2042,2055,2072,2083],{"__ignoreMap":53},[58,2043,2044,2046,2049,2051,2053],{"class":60,"line":61},[58,2045,796],{"class":92},[58,2047,2048],{"class":75}," a",[58,2050,383],{"class":92},[58,2052,979],{"class":82},[58,2054,102],{"class":75},[58,2056,2057,2059,2061,2064,2066,2068,2070],{"class":60,"line":68},[58,2058,2019],{"class":75},[58,2060,1827],{"class":92},[58,2062,2063],{"class":386},"\"请给整型变量a赋值\"",[58,2065,1827],{"class":92},[58,2067,376],{"class":75},[58,2069,1827],{"class":92},[58,2071,1849],{"class":75},[58,2073,2074,2077,2080],{"class":60,"line":79},[58,2075,2076],{"class":75},"cin ",[58,2078,2079],{"class":92},">>",[58,2081,2082],{"class":75}," a;\n",[58,2084,2085,2087,2089,2092,2095,2097,2099],{"class":60,"line":105},[58,2086,1824],{"class":75},[58,2088,1827],{"class":92},[58,2090,2091],{"class":386}," \"整型变量a=\"",[58,2093,2094],{"class":92}," \u003C\u003C",[58,2096,376],{"class":75},[58,2098,1827],{"class":92},[58,2100,1849],{"class":75},[14,2102,2104],{"id":2103},"_15运算符","1.5运算符",[114,2106,2108],{"id":2107},"_151算术运算符","1.5.1算术运算符",[175,2110,2111,2114],{},[119,2112],{"alt":53,"src":2113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[19,2116,2117,2120,2123],{},[22,2118,2119],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[22,2121,2122],{},"两个小数不可以做取模运算",[22,2124,2125],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[114,2127,2129],{"id":2128},"_152赋值运算符","1.5.2赋值运算符",[175,2131,2132],{},[119,2133],{"alt":53,"src":2134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[114,2136,2138],{"id":2137},"_153比较运算符","1.5.3比较运算符",[175,2140,2141],{},[119,2142],{"alt":53,"src":2143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[114,2145,2147],{"id":2146},"_154逻辑运算符","1.5.4逻辑运算符",[175,2149,2150],{},[119,2151],{"alt":53,"src":2152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,2154,2156],{"id":2155},"_16程序流程结构","1.6程序流程结构",[114,2158,2160],{"id":2159},"_161选择结构","1.6.1选择结构",[19,2162,2163],{},[22,2164,2165],{},"if语句\n单行、多行、多条件if语句",[48,2167,2169],{"className":781,"code":2168,"language":783,"meta":53,"style":53},"\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",[55,2170,2171,2176,2191,2196,2210,2214,2219,2228,2241,2245,2258,2263,2268,2273,2287,2292,2298,2319,2324,2338,2343,2372,2377,2394,2399,2404,2409,2423,2428],{"__ignoreMap":53},[58,2172,2173],{"class":60,"line":61},[58,2174,2175],{"class":64},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[58,2177,2178,2181,2184,2186,2189],{"class":60,"line":68},[58,2179,2180],{"class":92},"if",[58,2182,2183],{"class":75},"(score",[58,2185,1744],{"class":92},[58,2187,2188],{"class":82},"600",[58,2190,799],{"class":75},[58,2192,2193],{"class":60,"line":79},[58,2194,2195],{"class":75},"{\n",[58,2197,2198,2201,2203,2206,2208],{"class":60,"line":105},[58,2199,2200],{"class":75},"    cout",[58,2202,1827],{"class":92},[58,2204,2205],{"class":386},"'这是单行if语句'",[58,2207,1827],{"class":92},[58,2209,1849],{"class":75},[58,2211,2212],{"class":60,"line":627},[58,2213,108],{"class":75},[58,2215,2216],{"class":60,"line":509},[58,2217,2218],{"class":64},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[58,2220,2221,2223,2225],{"class":60,"line":559},[58,2222,2076],{"class":75},[58,2224,2079],{"class":92},[58,2226,2227],{"class":75}," score\n",[58,2229,2230,2232,2234,2237,2239],{"class":60,"line":654},[58,2231,2180],{"class":92},[58,2233,2183],{"class":75},[58,2235,2236],{"class":92},"\u003C=",[58,2238,2188],{"class":82},[58,2240,799],{"class":75},[58,2242,2243],{"class":60,"line":671},[58,2244,2195],{"class":75},[58,2246,2247,2249,2251,2254,2256],{"class":60,"line":677},[58,2248,2200],{"class":75},[58,2250,2079],{"class":92},[58,2252,2253],{"class":386},"\"小于等于600\"",[58,2255,1827],{"class":92},[58,2257,1849],{"class":75},[58,2259,2261],{"class":60,"line":2260},11,[58,2262,108],{"class":75},[58,2264,2265],{"class":60,"line":694},[58,2266,2267],{"class":92},"else\n",[58,2269,2271],{"class":60,"line":2270},13,[58,2272,2195],{"class":75},[58,2274,2276,2278,2280,2283,2285],{"class":60,"line":2275},14,[58,2277,2200],{"class":75},[58,2279,2079],{"class":92},[58,2281,2282],{"class":386},"\"大于600\"",[58,2284,2079],{"class":92},[58,2286,1849],{"class":75},[58,2288,2290],{"class":60,"line":2289},15,[58,2291,108],{"class":75},[58,2293,2295],{"class":60,"line":2294},16,[58,2296,2297],{"class":64},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[58,2299,2301,2303,2306,2308,2310,2313,2315,2317],{"class":60,"line":2300},17,[58,2302,2180],{"class":92},[58,2304,2305],{"class":75}," (",[58,2307,979],{"class":82},[58,2309,373],{"class":92},[58,2311,2312],{"class":75},"num",[58,2314,373],{"class":92},[58,2316,1097],{"class":82},[58,2318,799],{"class":75},[58,2320,2322],{"class":60,"line":2321},18,[58,2323,2195],{"class":75},[58,2325,2327,2329,2331,2334,2336],{"class":60,"line":2326},19,[58,2328,2200],{"class":75},[58,2330,1827],{"class":92},[58,2332,2333],{"class":386},"\"小于100\"",[58,2335,1827],{"class":92},[58,2337,1849],{"class":75},[58,2339,2341],{"class":60,"line":2340},20,[58,2342,108],{"class":75},[58,2344,2346,2349,2352,2355,2358,2360,2363,2365,2367,2370],{"class":60,"line":2345},21,[58,2347,2348],{"class":92},"else",[58,2350,2351],{"class":92}," if",[58,2353,2354],{"class":75}," (nmu",[58,2356,2357],{"class":92},">=",[58,2359,1097],{"class":82},[58,2361,2362],{"class":92},"&&",[58,2364,2312],{"class":75},[58,2366,373],{"class":92},[58,2368,2369],{"class":82},"200",[58,2371,799],{"class":75},[58,2373,2375],{"class":60,"line":2374},22,[58,2376,2195],{"class":75},[58,2378,2380,2382,2384,2387,2389,2391],{"class":60,"line":2379},23,[58,2381,2200],{"class":75},[58,2383,1827],{"class":92},[58,2385,2386],{"class":386},"\"不小于100且小于200\"",[58,2388,1827],{"class":92},[58,2390,1892],{"class":75},[58,2392,2393],{"class":64}," \u002F\u002F可以无限else if,python中是elif：\n",[58,2395,2397],{"class":60,"line":2396},24,[58,2398,108],{"class":75},[58,2400,2402],{"class":60,"line":2401},25,[58,2403,2267],{"class":92},[58,2405,2407],{"class":60,"line":2406},26,[58,2408,2195],{"class":75},[58,2410,2412,2414,2416,2419,2421],{"class":60,"line":2411},27,[58,2413,2200],{"class":75},[58,2415,1827],{"class":92},[58,2417,2418],{"class":386},"\"不小于200\"",[58,2420,1827],{"class":92},[58,2422,1849],{"class":75},[58,2424,2426],{"class":60,"line":2425},28,[58,2427,108],{"class":75},[58,2429,2431],{"class":60,"line":2430},29,[58,2432,2433],{"class":64},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[19,2435,2436],{"start":68},[22,2437,2438],{},"三目运算符",[48,2440,2442],{"className":781,"code":2441,"language":783,"meta":53,"style":53},"\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",[55,2443,2444,2449,2454,2480,2502,2519,2524,2547,2562],{"__ignoreMap":53},[58,2445,2446],{"class":60,"line":61},[58,2447,2448],{"class":64},"\u002F\u002F创建三个变量a,b,c\n",[58,2450,2451],{"class":60,"line":68},[58,2452,2453],{"class":64},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[58,2455,2456,2458,2460,2462,2464,2467,2469,2471,2474,2476,2478],{"class":60,"line":79},[58,2457,796],{"class":92},[58,2459,2048],{"class":75},[58,2461,383],{"class":92},[58,2463,1486],{"class":82},[58,2465,2466],{"class":75},",b",[58,2468,383],{"class":92},[58,2470,1232],{"class":82},[58,2472,2473],{"class":75},",c",[58,2475,383],{"class":92},[58,2477,979],{"class":82},[58,2479,102],{"class":75},[58,2481,2482,2484,2486,2489,2491,2493,2495,2497,2499],{"class":60,"line":105},[58,2483,1074],{"class":75},[58,2485,383],{"class":92},[58,2487,2488],{"class":75},"(a",[58,2490,1744],{"class":92},[58,2492,1049],{"class":75},[58,2494,1770],{"class":92},[58,2496,376],{"class":75},[58,2498,1644],{"class":92},[58,2500,2501],{"class":75},"b)\n",[58,2503,2504,2506,2508,2511,2513,2515,2517],{"class":60,"line":627},[58,2505,2019],{"class":75},[58,2507,1827],{"class":92},[58,2509,2510],{"class":386},"\"c=\"",[58,2512,1827],{"class":92},[58,2514,1074],{"class":75},[58,2516,1827],{"class":92},[58,2518,1849],{"class":75},[58,2520,2521],{"class":60,"line":509},[58,2522,2523],{"class":64},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[58,2525,2526,2528,2530,2532,2534,2536,2538,2541,2543,2545],{"class":60,"line":559},[58,2527,2488],{"class":75},[58,2529,1744],{"class":92},[58,2531,1049],{"class":75},[58,2533,1770],{"class":92},[58,2535,376],{"class":75},[58,2537,1644],{"class":92},[58,2539,2540],{"class":75},"b)",[58,2542,383],{"class":92},[58,2544,1097],{"class":82},[58,2546,102],{"class":75},[58,2548,2549,2551,2553,2555,2557,2559],{"class":60,"line":654},[58,2550,2019],{"class":75},[58,2552,1827],{"class":92},[58,2554,376],{"class":75},[58,2556,1827],{"class":92},[58,2558,1892],{"class":75},[58,2560,2561],{"class":64}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[58,2563,2564,2566,2568,2570,2572,2574],{"class":60,"line":671},[58,2565,2019],{"class":75},[58,2567,1827],{"class":92},[58,2569,1049],{"class":75},[58,2571,1827],{"class":92},[58,2573,1892],{"class":75},[58,2575,2576],{"class":64}," \u002F\u002F10   a>b,b还是原值\n",[19,2578,2579],{"start":79},[22,2580,2581],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[48,2583,2585],{"className":781,"code":2584,"language":783,"meta":53,"style":53},"\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",[55,2586,2587,2592,2600,2613,2623,2627,2641,2654,2664,2672,2677,2702,2723,2745,2766,2788,2809,2829,2834],{"__ignoreMap":53},[58,2588,2589],{"class":60,"line":61},[58,2590,2591],{"class":64},"\u002F\u002F案例-电影打分\n",[58,2593,2594,2597],{"class":60,"line":68},[58,2595,2596],{"class":92},"#include",[58,2598,2599],{"class":386},"\u003Ciostream>\n",[58,2601,2602,2605,2608,2611],{"class":60,"line":79},[58,2603,2604],{"class":92},"using",[58,2606,2607],{"class":92}," namespace",[58,2609,2610],{"class":379}," std",[58,2612,102],{"class":75},[58,2614,2615,2617,2620],{"class":60,"line":105},[58,2616,796],{"class":92},[58,2618,2619],{"class":379}," main",[58,2621,2622],{"class":75},"()\n",[58,2624,2625],{"class":60,"line":627},[58,2626,2195],{"class":75},[58,2628,2629,2632,2635,2637,2639],{"class":60,"line":509},[58,2630,2631],{"class":92},"    int",[58,2633,2634],{"class":75}," score",[58,2636,383],{"class":92},[58,2638,979],{"class":82},[58,2640,102],{"class":75},[58,2642,2643,2645,2647,2650,2652],{"class":60,"line":559},[58,2644,2200],{"class":75},[58,2646,1827],{"class":92},[58,2648,2649],{"class":386},"\"电影打分：\"",[58,2651,1827],{"class":92},[58,2653,1849],{"class":75},[58,2655,2656,2659,2661],{"class":60,"line":654},[58,2657,2658],{"class":75},"    cin",[58,2660,2079],{"class":92},[58,2662,2663],{"class":75},"score;\n",[58,2665,2666,2669],{"class":60,"line":671},[58,2667,2668],{"class":92},"    switch",[58,2670,2671],{"class":75},"(score)\n",[58,2673,2674],{"class":60,"line":677},[58,2675,2676],{"class":75},"    {\n",[58,2678,2679,2682,2685,2688,2690,2693,2695,2697,2700],{"class":60,"line":2260},[58,2680,2681],{"class":92},"        case",[58,2683,2684],{"class":82}," 10",[58,2686,2687],{"class":75},":cout",[58,2689,1827],{"class":92},[58,2691,2692],{"class":386},"\"经典\"",[58,2694,1827],{"class":92},[58,2696,1892],{"class":75},[58,2698,2699],{"class":92},"break",[58,2701,102],{"class":75},[58,2703,2704,2706,2709,2711,2713,2715,2717,2719,2721],{"class":60,"line":694},[58,2705,2681],{"class":92},[58,2707,2708],{"class":82}," 9",[58,2710,2687],{"class":75},[58,2712,1827],{"class":92},[58,2714,2692],{"class":386},[58,2716,1827],{"class":92},[58,2718,1892],{"class":75},[58,2720,2699],{"class":92},[58,2722,102],{"class":75},[58,2724,2725,2727,2730,2732,2734,2737,2739,2741,2743],{"class":60,"line":2270},[58,2726,2681],{"class":92},[58,2728,2729],{"class":82}," 8",[58,2731,2687],{"class":75},[58,2733,1827],{"class":92},[58,2735,2736],{"class":386},"\"非常好\"",[58,2738,1827],{"class":92},[58,2740,1892],{"class":75},[58,2742,2699],{"class":92},[58,2744,102],{"class":75},[58,2746,2747,2749,2752,2754,2756,2758,2760,2762,2764],{"class":60,"line":2275},[58,2748,2681],{"class":92},[58,2750,2751],{"class":82}," 7",[58,2753,2687],{"class":75},[58,2755,1827],{"class":92},[58,2757,2736],{"class":386},[58,2759,1827],{"class":92},[58,2761,1892],{"class":75},[58,2763,2699],{"class":92},[58,2765,102],{"class":75},[58,2767,2768,2770,2773,2775,2777,2780,2782,2784,2786],{"class":60,"line":2289},[58,2769,2681],{"class":92},[58,2771,2772],{"class":82}," 6",[58,2774,2687],{"class":75},[58,2776,1827],{"class":92},[58,2778,2779],{"class":386},"\"一般\"",[58,2781,1827],{"class":92},[58,2783,1892],{"class":75},[58,2785,2699],{"class":92},[58,2787,102],{"class":75},[58,2789,2790,2792,2795,2797,2799,2801,2803,2805,2807],{"class":60,"line":2294},[58,2791,2681],{"class":92},[58,2793,2794],{"class":82}," 5",[58,2796,2687],{"class":75},[58,2798,1827],{"class":92},[58,2800,2779],{"class":386},[58,2802,1827],{"class":92},[58,2804,1892],{"class":75},[58,2806,2699],{"class":92},[58,2808,102],{"class":75},[58,2810,2811,2814,2816,2818,2821,2823,2825,2827],{"class":60,"line":2300},[58,2812,2813],{"class":92},"        default",[58,2815,2687],{"class":75},[58,2817,1827],{"class":92},[58,2819,2820],{"class":386},"\"烂片\"",[58,2822,1827],{"class":92},[58,2824,1892],{"class":75},[58,2826,2699],{"class":92},[58,2828,102],{"class":75},[58,2830,2831],{"class":60,"line":2321},[58,2832,2833],{"class":75},"    }\n",[58,2835,2836],{"class":60,"line":2326},[58,2837,108],{"class":75},[175,2839,2840],{},"if和switch区别：",[124,2842,2843,2846],{},[22,2844,2845],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[22,2847,2848],{},"switch优点：结构清晰，执行效率高",[114,2850,2852],{"id":2851},"_162循环结构","1.6.2循环结构",[19,2854,2855],{},[22,2856,2857],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[48,2859,2861],{"className":781,"code":2860,"language":783,"meta":53,"style":53},"\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",[55,2862,2863,2868,2876,2880,2893,2907,2911,2931,2941,2945,2957],{"__ignoreMap":53},[58,2864,2865],{"class":60,"line":61},[58,2866,2867],{"class":64},"\u002F\u002F打印0-9数字\n",[58,2869,2870,2872,2874],{"class":60,"line":68},[58,2871,796],{"class":92},[58,2873,2619],{"class":379},[58,2875,2622],{"class":75},[58,2877,2878],{"class":60,"line":79},[58,2879,2195],{"class":75},[58,2881,2882,2884,2887,2889,2891],{"class":60,"line":105},[58,2883,2631],{"class":92},[58,2885,2886],{"class":75}," num",[58,2888,383],{"class":92},[58,2890,979],{"class":82},[58,2892,102],{"class":75},[58,2894,2895,2898,2901,2903,2905],{"class":60,"line":627},[58,2896,2897],{"class":92},"    while",[58,2899,2900],{"class":75},"(num",[58,2902,373],{"class":92},[58,2904,1232],{"class":82},[58,2906,799],{"class":75},[58,2908,2909],{"class":60,"line":509},[58,2910,2676],{"class":75},[58,2912,2913,2916,2919,2921,2923,2925,2928],{"class":60,"line":559},[58,2914,2915],{"class":379},"       std",[58,2917,2918],{"class":75},"::cout",[58,2920,1827],{"class":92},[58,2922,2312],{"class":75},[58,2924,1827],{"class":92},[58,2926,2927],{"class":379},"std",[58,2929,2930],{"class":75},"::endl;\n",[58,2932,2933,2936,2939],{"class":60,"line":654},[58,2934,2935],{"class":75},"        num",[58,2937,2938],{"class":92},"++",[58,2940,102],{"class":75},[58,2942,2943],{"class":60,"line":671},[58,2944,2833],{"class":75},[58,2946,2947,2950,2952,2955],{"class":60,"line":677},[58,2948,2949],{"class":379},"    system",[58,2951,793],{"class":75},[58,2953,2954],{"class":386},"\"pause\"",[58,2956,799],{"class":75},[58,2958,2959],{"class":60,"line":2260},[58,2960,108],{"class":75},[175,2962,2963],{},"注意：写好循环条件，避免死循环情况",[48,2965,2967],{"className":781,"code":2966,"language":783,"meta":53,"style":53},"\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",[55,2968,2969,2974,2981,2988,2998,3006,3010,3015,3042,3047,3052,3060,3087,3092,3097,3110,3120,3124,3134,3139,3152,3157,3171,3176,3191,3195,3208,3212,3217,3221,3235,3243,3248,3254,3260,3265],{"__ignoreMap":53},[58,2970,2971],{"class":60,"line":61},[58,2972,2973],{"class":64},"\u002F\u002F循环结构-猜数字\n",[58,2975,2976,2978],{"class":60,"line":68},[58,2977,2596],{"class":92},[58,2979,2980],{"class":386}," \u003Ciostream>\n",[58,2982,2983,2985],{"class":60,"line":79},[58,2984,2596],{"class":92},[58,2986,2987],{"class":386}," \u003Cctime>\n",[58,2989,2990,2992,2994,2996],{"class":60,"line":105},[58,2991,2604],{"class":92},[58,2993,2607],{"class":92},[58,2995,2610],{"class":379},[58,2997,102],{"class":75},[58,2999,3000,3002,3004],{"class":60,"line":627},[58,3001,796],{"class":92},[58,3003,2619],{"class":379},[58,3005,2622],{"class":75},[58,3007,3008],{"class":60,"line":509},[58,3009,2195],{"class":75},[58,3011,3012],{"class":60,"line":559},[58,3013,3014],{"class":64},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[58,3016,3017,3020,3023,3026,3029,3031,3034,3036,3039],{"class":60,"line":654},[58,3018,3019],{"class":379},"    srand",[58,3021,3022],{"class":75},"((",[58,3024,3025],{"class":92},"unsigned",[58,3027,3028],{"class":92}," int",[58,3030,1215],{"class":75},[58,3032,3033],{"class":379},"time",[58,3035,793],{"class":75},[58,3037,3038],{"class":82},"NULL",[58,3040,3041],{"class":75},"));\n",[58,3043,3044],{"class":60,"line":671},[58,3045,3046],{"emptyLinePlaceholder":720},"\n",[58,3048,3049],{"class":60,"line":677},[58,3050,3051],{"class":64},"    \u002F\u002F1.系统生成随机数\n",[58,3053,3054,3057],{"class":60,"line":2260},[58,3055,3056],{"class":64},"    \u002F\u002Frand()%100",[58,3058,3059],{"class":64}," \u002F\u002F生成0-99的随机数\n",[58,3061,3062,3064,3066,3068,3071,3074,3076,3078,3080,3082,3084],{"class":60,"line":694},[58,3063,2631],{"class":92},[58,3065,2886],{"class":75},[58,3067,383],{"class":92},[58,3069,3070],{"class":379},"rand",[58,3072,3073],{"class":75},"()",[58,3075,1114],{"class":92},[58,3077,1097],{"class":82},[58,3079,1267],{"class":92},[58,3081,89],{"class":82},[58,3083,846],{"class":75},[58,3085,3086],{"class":64}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[58,3088,3089],{"class":60,"line":2270},[58,3090,3091],{"class":64},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[58,3093,3094],{"class":60,"line":2275},[58,3095,3096],{"class":64},"    \u002F\u002F2.玩家猜测\n",[58,3098,3099,3101,3104,3106,3108],{"class":60,"line":2289},[58,3100,2631],{"class":92},[58,3102,3103],{"class":75}," val",[58,3105,383],{"class":92},[58,3107,979],{"class":82},[58,3109,102],{"class":75},[58,3111,3112,3114,3116,3118],{"class":60,"line":2294},[58,3113,2897],{"class":92},[58,3115,2305],{"class":75},[58,3117,89],{"class":82},[58,3119,799],{"class":75},[58,3121,3122],{"class":60,"line":2300},[58,3123,2676],{"class":75},[58,3125,3126,3129,3131],{"class":60,"line":2321},[58,3127,3128],{"class":75},"        cin",[58,3130,2079],{"class":92},[58,3132,3133],{"class":75},"val;\n",[58,3135,3136],{"class":60,"line":2326},[58,3137,3138],{"class":64},"        \u002F\u002F3.判断玩家猜测\n",[58,3140,3141,3144,3147,3149],{"class":60,"line":2340},[58,3142,3143],{"class":92},"        if",[58,3145,3146],{"class":75},"(val",[58,3148,373],{"class":92},[58,3150,3151],{"class":75},"num) \n",[58,3153,3154],{"class":60,"line":2345},[58,3155,3156],{"class":75},"        {\n",[58,3158,3159,3162,3164,3167,3169],{"class":60,"line":2374},[58,3160,3161],{"class":75},"            cout",[58,3163,1827],{"class":92},[58,3165,3166],{"class":386},"\"猜小了！\"",[58,3168,1827],{"class":92},[58,3170,1849],{"class":75},[58,3172,3173],{"class":60,"line":2379},[58,3174,3175],{"class":75},"        }\n",[58,3177,3178,3181,3183,3186,3188],{"class":60,"line":2396},[58,3179,3180],{"class":92},"        else",[58,3182,2351],{"class":92},[58,3184,3185],{"class":75}," (val",[58,3187,1744],{"class":92},[58,3189,3190],{"class":75},"num)\n",[58,3192,3193],{"class":60,"line":2401},[58,3194,3156],{"class":75},[58,3196,3197,3199,3201,3204,3206],{"class":60,"line":2406},[58,3198,3161],{"class":75},[58,3200,1827],{"class":92},[58,3202,3203],{"class":386},"\"猜大了！\"",[58,3205,1827],{"class":92},[58,3207,1849],{"class":75},[58,3209,3210],{"class":60,"line":2411},[58,3211,3175],{"class":75},[58,3213,3214],{"class":60,"line":2425},[58,3215,3216],{"class":92},"        else\n",[58,3218,3219],{"class":60,"line":2430},[58,3220,3156],{"class":75},[58,3222,3224,3226,3228,3231,3233],{"class":60,"line":3223},30,[58,3225,3161],{"class":75},[58,3227,1827],{"class":92},[58,3229,3230],{"class":386},"\"猜对了！\"",[58,3232,1827],{"class":92},[58,3234,1849],{"class":75},[58,3236,3238,3241],{"class":60,"line":3237},31,[58,3239,3240],{"class":92},"            break",[58,3242,102],{"class":75},[58,3244,3246],{"class":60,"line":3245},32,[58,3247,3175],{"class":75},[58,3249,3251],{"class":60,"line":3250},33,[58,3252,3253],{"class":64},"        \u002F\u002F猜对 退出游戏\n",[58,3255,3257],{"class":60,"line":3256},34,[58,3258,3259],{"class":64},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[58,3261,3263],{"class":60,"line":3262},35,[58,3264,2833],{"class":75},[58,3266,3268],{"class":60,"line":3267},36,[58,3269,108],{"class":75},[19,3271,3272],{"start":68},[22,3273,3274,3275,3278],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[25,3276,3277],{},"do...while会先执行一次循环语句","，在判断循环语句",[48,3280,3282],{"className":781,"code":3281,"language":783,"meta":53,"style":53},"\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",[55,3283,3284,3289,3297,3301,3313,3321,3325,3342,3349,3353,3366,3376],{"__ignoreMap":53},[58,3285,3286],{"class":60,"line":61},[58,3287,3288],{"class":64},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[58,3290,3291,3293,3295],{"class":60,"line":68},[58,3292,796],{"class":92},[58,3294,2619],{"class":379},[58,3296,2622],{"class":75},[58,3298,3299],{"class":60,"line":79},[58,3300,2195],{"class":75},[58,3302,3303,3305,3307,3309,3311],{"class":60,"line":105},[58,3304,2631],{"class":92},[58,3306,2886],{"class":75},[58,3308,383],{"class":92},[58,3310,979],{"class":82},[58,3312,102],{"class":75},[58,3314,3315,3318],{"class":60,"line":627},[58,3316,3317],{"class":92},"    do",[58,3319,3320],{"class":75}," \n",[58,3322,3323],{"class":60,"line":509},[58,3324,2676],{"class":75},[58,3326,3327,3330,3332,3334,3336,3338,3340],{"class":60,"line":559},[58,3328,3329],{"class":379},"        std",[58,3331,2918],{"class":75},[58,3333,1827],{"class":92},[58,3335,2312],{"class":75},[58,3337,1827],{"class":92},[58,3339,2927],{"class":379},[58,3341,2930],{"class":75},[58,3343,3344,3346],{"class":60,"line":654},[58,3345,2935],{"class":75},[58,3347,3348],{"class":92},"++\n",[58,3350,3351],{"class":60,"line":671},[58,3352,2833],{"class":75},[58,3354,3355,3357,3359,3361,3363],{"class":60,"line":677},[58,3356,2897],{"class":92},[58,3358,2900],{"class":75},[58,3360,373],{"class":92},[58,3362,1232],{"class":82},[58,3364,3365],{"class":75},");\n",[58,3367,3368,3370,3372,3374],{"class":60,"line":2260},[58,3369,2949],{"class":379},[58,3371,793],{"class":75},[58,3373,2954],{"class":386},[58,3375,3365],{"class":75},[58,3377,3378],{"class":60,"line":694},[58,3379,108],{"class":75},[175,3381,3382],{},"案例-水仙花数",[175,3384,3385],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[175,3387,3388],{},"例如：1^3+5^3+3^3=153",[175,3390,3391],{},"请用do...while语句，求出所有3位数的水仙花数",[48,3393,3395],{"className":781,"code":3394,"language":783,"meta":53,"style":53},"#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",[55,3396,3397,3403,3413,3421,3425,3430,3442,3448,3452,3457,3473,3489,3505,3520,3539,3554,3602,3606,3618,3622,3630,3634,3648],{"__ignoreMap":53},[58,3398,3399,3401],{"class":60,"line":61},[58,3400,2596],{"class":92},[58,3402,2980],{"class":386},[58,3404,3405,3407,3409,3411],{"class":60,"line":68},[58,3406,2604],{"class":92},[58,3408,2607],{"class":92},[58,3410,2610],{"class":379},[58,3412,102],{"class":75},[58,3414,3415,3417,3419],{"class":60,"line":79},[58,3416,796],{"class":92},[58,3418,2619],{"class":379},[58,3420,2622],{"class":75},[58,3422,3423],{"class":60,"line":105},[58,3424,2195],{"class":75},[58,3426,3427],{"class":60,"line":627},[58,3428,3429],{"class":64},"    \u002F\u002F1.先打印所有三位数字\n",[58,3431,3432,3434,3436,3438,3440],{"class":60,"line":509},[58,3433,2631],{"class":92},[58,3435,2886],{"class":75},[58,3437,383],{"class":92},[58,3439,1097],{"class":82},[58,3441,102],{"class":75},[58,3443,3444,3446],{"class":60,"line":559},[58,3445,3317],{"class":92},[58,3447,3320],{"class":75},[58,3449,3450],{"class":60,"line":654},[58,3451,2676],{"class":75},[58,3453,3454],{"class":60,"line":671},[58,3455,3456],{"class":64},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[58,3458,3459,3462,3464,3466,3468,3470],{"class":60,"line":677},[58,3460,3461],{"class":92},"        int",[58,3463,2048],{"class":75},[58,3465,383],{"class":92},[58,3467,979],{"class":82},[58,3469,846],{"class":75},[58,3471,3472],{"class":64}," \u002F\u002F个位\n",[58,3474,3475,3477,3480,3482,3484,3486],{"class":60,"line":2260},[58,3476,3461],{"class":92},[58,3478,3479],{"class":75}," b",[58,3481,383],{"class":92},[58,3483,979],{"class":82},[58,3485,846],{"class":75},[58,3487,3488],{"class":64}," \u002F\u002F十位\n",[58,3490,3491,3493,3496,3498,3500,3502],{"class":60,"line":694},[58,3492,3461],{"class":92},[58,3494,3495],{"class":75}," c",[58,3497,383],{"class":92},[58,3499,979],{"class":82},[58,3501,846],{"class":75},[58,3503,3504],{"class":64}," \u002F\u002F百位\n",[58,3506,3507,3510,3512,3514,3516,3518],{"class":60,"line":2270},[58,3508,3509],{"class":75},"        a",[58,3511,383],{"class":92},[58,3513,2312],{"class":75},[58,3515,1114],{"class":92},[58,3517,1232],{"class":82},[58,3519,102],{"class":75},[58,3521,3522,3525,3527,3529,3531,3533,3535,3537],{"class":60,"line":2275},[58,3523,3524],{"class":75},"        b",[58,3526,383],{"class":92},[58,3528,2312],{"class":75},[58,3530,1370],{"class":92},[58,3532,1232],{"class":82},[58,3534,1114],{"class":92},[58,3536,1232],{"class":82},[58,3538,102],{"class":75},[58,3540,3541,3544,3546,3548,3550,3552],{"class":60,"line":2289},[58,3542,3543],{"class":75},"        c",[58,3545,383],{"class":92},[58,3547,2312],{"class":75},[58,3549,1370],{"class":92},[58,3551,1097],{"class":82},[58,3553,102],{"class":75},[58,3555,3556,3558,3560,3562,3564,3566,3568,3570,3572,3574,3576,3578,3580,3582,3584,3586,3588,3590,3593,3596,3599],{"class":60,"line":2294},[58,3557,3143],{"class":92},[58,3559,2488],{"class":75},[58,3561,1241],{"class":92},[58,3563,376],{"class":75},[58,3565,1241],{"class":92},[58,3567,376],{"class":75},[58,3569,1267],{"class":92},[58,3571,1049],{"class":75},[58,3573,1241],{"class":92},[58,3575,1049],{"class":75},[58,3577,1241],{"class":92},[58,3579,1049],{"class":75},[58,3581,1267],{"class":92},[58,3583,1074],{"class":75},[58,3585,1241],{"class":92},[58,3587,1074],{"class":75},[58,3589,1241],{"class":92},[58,3591,3592],{"class":75},"c ",[58,3594,3595],{"class":92},"==",[58,3597,3598],{"class":75}," num)",[58,3600,3601],{"class":64}," \u002F\u002F如果是水仙花数，才打印\n",[58,3603,3604],{"class":60,"line":2300},[58,3605,3156],{"class":75},[58,3607,3608,3610,3612,3614,3616],{"class":60,"line":2321},[58,3609,3161],{"class":75},[58,3611,1827],{"class":92},[58,3613,2312],{"class":75},[58,3615,1827],{"class":92},[58,3617,1849],{"class":75},[58,3619,3620],{"class":60,"line":2326},[58,3621,3175],{"class":75},[58,3623,3624,3626,3628],{"class":60,"line":2340},[58,3625,2935],{"class":75},[58,3627,2938],{"class":92},[58,3629,102],{"class":75},[58,3631,3632],{"class":60,"line":2345},[58,3633,2833],{"class":75},[58,3635,3636,3638,3641,3643,3646],{"class":60,"line":2374},[58,3637,2897],{"class":92},[58,3639,3640],{"class":75}," (num ",[58,3642,373],{"class":92},[58,3644,3645],{"class":82}," 1000",[58,3647,3365],{"class":75},[58,3649,3650],{"class":60,"line":2379},[58,3651,108],{"class":75},[19,3653,3654],{"start":79},[22,3655,3656],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[48,3658,3660],{"className":781,"code":3659,"language":783,"meta":53,"style":53},"\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",[55,3661,3662,3667,3696,3700,3712,3716,3721,3732,3739,3743,3757,3761,3768,3772,3784,3793],{"__ignoreMap":53},[58,3663,3664],{"class":60,"line":61},[58,3665,3666],{"class":64},"\u002F\u002F从数字0-9打印\n",[58,3668,3669,3672,3674,3676,3679,3681,3683,3686,3688,3690,3692,3694],{"class":60,"line":68},[58,3670,3671],{"class":92},"for",[58,3673,793],{"class":75},[58,3675,796],{"class":92},[58,3677,3678],{"class":75}," i",[58,3680,383],{"class":92},[58,3682,979],{"class":82},[58,3684,3685],{"class":75},";i",[58,3687,373],{"class":92},[58,3689,1232],{"class":82},[58,3691,3685],{"class":75},[58,3693,2938],{"class":92},[58,3695,799],{"class":75},[58,3697,3698],{"class":60,"line":79},[58,3699,2195],{"class":75},[58,3701,3702,3704,3706,3708,3710],{"class":60,"line":105},[58,3703,2200],{"class":75},[58,3705,1827],{"class":92},[58,3707,1227],{"class":75},[58,3709,1827],{"class":92},[58,3711,1849],{"class":75},[58,3713,3714],{"class":60,"line":627},[58,3715,108],{"class":75},[58,3717,3718],{"class":60,"line":509},[58,3719,3720],{"class":64},"\u002F\u002F上式可以进行拆分\n",[58,3722,3723,3725,3727,3729],{"class":60,"line":559},[58,3724,796],{"class":92},[58,3726,3678],{"class":75},[58,3728,383],{"class":92},[58,3730,3731],{"class":82},"0\n",[58,3733,3734,3736],{"class":60,"line":654},[58,3735,3671],{"class":92},[58,3737,3738],{"class":75},"(;;;)\n",[58,3740,3741],{"class":60,"line":671},[58,3742,2195],{"class":75},[58,3744,3745,3748,3751,3753,3755],{"class":60,"line":677},[58,3746,3747],{"class":92},"    if",[58,3749,3750],{"class":75},"(i",[58,3752,2357],{"class":92},[58,3754,1232],{"class":82},[58,3756,799],{"class":75},[58,3758,3759],{"class":60,"line":2260},[58,3760,2676],{"class":75},[58,3762,3763,3766],{"class":60,"line":694},[58,3764,3765],{"class":92},"        break",[58,3767,102],{"class":75},[58,3769,3770],{"class":60,"line":2270},[58,3771,2833],{"class":75},[58,3773,3774,3776,3778,3780,3782],{"class":60,"line":2275},[58,3775,2200],{"class":75},[58,3777,1827],{"class":92},[58,3779,1227],{"class":75},[58,3781,1827],{"class":92},[58,3783,1849],{"class":75},[58,3785,3786,3789,3791],{"class":60,"line":2289},[58,3787,3788],{"class":75},"    i",[58,3790,2938],{"class":92},[58,3792,102],{"class":75},[58,3794,3795],{"class":60,"line":2294},[58,3796,108],{"class":75},[175,3798,3799],{},"小练习",[48,3801,3803],{"className":781,"code":3802,"language":783,"meta":53,"style":53},"#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",[55,3804,3805,3811,3821,3829,3833,3838,3843,3871,3875,3880,3885,3926,3930,3943,3947,3951,3955,3967,3971,3975],{"__ignoreMap":53},[58,3806,3807,3809],{"class":60,"line":61},[58,3808,2596],{"class":92},[58,3810,2599],{"class":386},[58,3812,3813,3815,3817,3819],{"class":60,"line":68},[58,3814,2604],{"class":92},[58,3816,2607],{"class":92},[58,3818,2610],{"class":379},[58,3820,102],{"class":75},[58,3822,3823,3825,3827],{"class":60,"line":79},[58,3824,796],{"class":92},[58,3826,2619],{"class":379},[58,3828,2622],{"class":75},[58,3830,3831],{"class":60,"line":105},[58,3832,2195],{"class":75},[58,3834,3835],{"class":60,"line":627},[58,3836,3837],{"class":64},"    \u002F\u002F敲桌子案例\n",[58,3839,3840],{"class":60,"line":509},[58,3841,3842],{"class":64},"    \u002F\u002F1.先输出1-100的数字\n",[58,3844,3845,3848,3850,3852,3854,3856,3858,3861,3863,3865,3867,3869],{"class":60,"line":559},[58,3846,3847],{"class":92},"    for",[58,3849,793],{"class":75},[58,3851,796],{"class":92},[58,3853,3678],{"class":75},[58,3855,383],{"class":92},[58,3857,89],{"class":82},[58,3859,3860],{"class":75},"; i",[58,3862,2236],{"class":92},[58,3864,1097],{"class":82},[58,3866,3860],{"class":75},[58,3868,2938],{"class":92},[58,3870,799],{"class":75},[58,3872,3873],{"class":60,"line":654},[58,3874,2676],{"class":75},[58,3876,3877],{"class":60,"line":671},[58,3878,3879],{"class":64},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[58,3881,3882],{"class":60,"line":677},[58,3883,3884],{"class":64},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[58,3886,3887,3889,3891,3893,3895,3897,3899,3902,3904,3906,3908,3910,3912,3914,3916,3918,3920,3922,3924],{"class":60,"line":2260},[58,3888,3143],{"class":92},[58,3890,3750],{"class":75},[58,3892,1114],{"class":92},[58,3894,1155],{"class":82},[58,3896,3595],{"class":92},[58,3898,979],{"class":82},[58,3900,3901],{"class":92}," ||",[58,3903,3678],{"class":75},[58,3905,1114],{"class":92},[58,3907,1232],{"class":82},[58,3909,3595],{"class":92},[58,3911,1155],{"class":82},[58,3913,3901],{"class":92},[58,3915,3678],{"class":75},[58,3917,1370],{"class":92},[58,3919,1232],{"class":82},[58,3921,3595],{"class":92},[58,3923,1155],{"class":82},[58,3925,799],{"class":75},[58,3927,3928],{"class":60,"line":694},[58,3929,3156],{"class":75},[58,3931,3932,3934,3936,3939,3941],{"class":60,"line":2270},[58,3933,3161],{"class":75},[58,3935,1827],{"class":92},[58,3937,3938],{"class":386},"\"敲桌子\"",[58,3940,1827],{"class":92},[58,3942,1849],{"class":75},[58,3944,3945],{"class":60,"line":2275},[58,3946,3175],{"class":75},[58,3948,3949],{"class":60,"line":2289},[58,3950,3216],{"class":92},[58,3952,3953],{"class":60,"line":2294},[58,3954,3156],{"class":75},[58,3956,3957,3959,3961,3963,3965],{"class":60,"line":2300},[58,3958,3161],{"class":75},[58,3960,1827],{"class":92},[58,3962,1227],{"class":75},[58,3964,1827],{"class":92},[58,3966,1849],{"class":75},[58,3968,3969],{"class":60,"line":2321},[58,3970,3175],{"class":75},[58,3972,3973],{"class":60,"line":2326},[58,3974,2833],{"class":75},[58,3976,3977],{"class":60,"line":2340},[58,3978,108],{"class":75},[175,3980,3981],{},"嵌套实现星图",[48,3983,3985],{"className":781,"code":3984,"language":783,"meta":53,"style":53},"#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",[55,3986,3987,3993,4003,4011,4015,4041,4045,4074,4078,4089,4093,4102,4106],{"__ignoreMap":53},[58,3988,3989,3991],{"class":60,"line":61},[58,3990,2596],{"class":92},[58,3992,2599],{"class":386},[58,3994,3995,3997,3999,4001],{"class":60,"line":68},[58,3996,2604],{"class":92},[58,3998,2607],{"class":92},[58,4000,2610],{"class":379},[58,4002,102],{"class":75},[58,4004,4005,4007,4009],{"class":60,"line":79},[58,4006,796],{"class":92},[58,4008,2619],{"class":379},[58,4010,2622],{"class":75},[58,4012,4013],{"class":60,"line":105},[58,4014,2195],{"class":75},[58,4016,4017,4019,4021,4023,4025,4027,4029,4031,4033,4035,4037,4039],{"class":60,"line":627},[58,4018,3847],{"class":92},[58,4020,2305],{"class":75},[58,4022,796],{"class":92},[58,4024,3678],{"class":75},[58,4026,383],{"class":92},[58,4028,979],{"class":82},[58,4030,3685],{"class":75},[58,4032,373],{"class":92},[58,4034,1232],{"class":82},[58,4036,3685],{"class":75},[58,4038,2938],{"class":92},[58,4040,799],{"class":75},[58,4042,4043],{"class":60,"line":509},[58,4044,2676],{"class":75},[58,4046,4047,4050,4052,4054,4057,4059,4061,4064,4066,4068,4070,4072],{"class":60,"line":559},[58,4048,4049],{"class":92},"        for",[58,4051,2305],{"class":75},[58,4053,796],{"class":92},[58,4055,4056],{"class":75}," j",[58,4058,383],{"class":92},[58,4060,979],{"class":82},[58,4062,4063],{"class":75},";j",[58,4065,373],{"class":92},[58,4067,1232],{"class":82},[58,4069,4063],{"class":75},[58,4071,2938],{"class":92},[58,4073,799],{"class":75},[58,4075,4076],{"class":60,"line":654},[58,4077,3156],{"class":75},[58,4079,4080,4082,4084,4087],{"class":60,"line":671},[58,4081,3161],{"class":75},[58,4083,1827],{"class":92},[58,4085,4086],{"class":386},"\"*\"",[58,4088,102],{"class":75},[58,4090,4091],{"class":60,"line":677},[58,4092,3175],{"class":75},[58,4094,4095,4098,4100],{"class":60,"line":2260},[58,4096,4097],{"class":75},"        cout",[58,4099,1827],{"class":92},[58,4101,1849],{"class":75},[58,4103,4104],{"class":60,"line":694},[58,4105,2833],{"class":75},[58,4107,4108],{"class":60,"line":2270},[58,4109,108],{"class":75},[175,4111,4112],{},"乘法口诀表",[48,4114,4116],{"className":781,"code":4115,"language":783,"meta":53,"style":53},"#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",[55,4117,4118,4124,4134,4142,4146,4172,4176,4201,4205,4245,4249,4257,4261],{"__ignoreMap":53},[58,4119,4120,4122],{"class":60,"line":61},[58,4121,2596],{"class":92},[58,4123,2980],{"class":386},[58,4125,4126,4128,4130,4132],{"class":60,"line":68},[58,4127,2604],{"class":92},[58,4129,2607],{"class":92},[58,4131,2610],{"class":379},[58,4133,102],{"class":75},[58,4135,4136,4138,4140],{"class":60,"line":79},[58,4137,796],{"class":92},[58,4139,2619],{"class":379},[58,4141,2622],{"class":75},[58,4143,4144],{"class":60,"line":105},[58,4145,2195],{"class":75},[58,4147,4148,4150,4152,4154,4156,4158,4160,4162,4164,4166,4168,4170],{"class":60,"line":627},[58,4149,3847],{"class":92},[58,4151,793],{"class":75},[58,4153,796],{"class":92},[58,4155,3678],{"class":75},[58,4157,383],{"class":92},[58,4159,89],{"class":82},[58,4161,3685],{"class":75},[58,4163,373],{"class":92},[58,4165,1232],{"class":82},[58,4167,3685],{"class":75},[58,4169,2938],{"class":92},[58,4171,799],{"class":75},[58,4173,4174],{"class":60,"line":509},[58,4175,2676],{"class":75},[58,4177,4178,4180,4182,4184,4186,4188,4190,4192,4194,4197,4199],{"class":60,"line":559},[58,4179,4049],{"class":92},[58,4181,793],{"class":75},[58,4183,796],{"class":92},[58,4185,4056],{"class":75},[58,4187,383],{"class":92},[58,4189,89],{"class":82},[58,4191,4063],{"class":75},[58,4193,2236],{"class":92},[58,4195,4196],{"class":75},"i;j",[58,4198,2938],{"class":92},[58,4200,799],{"class":75},[58,4202,4203],{"class":60,"line":654},[58,4204,3156],{"class":75},[58,4206,4207,4209,4211,4213,4215,4217,4219,4221,4223,4226,4228,4230,4232,4234,4236,4239,4241,4243],{"class":60,"line":671},[58,4208,3161],{"class":75},[58,4210,1827],{"class":92},[58,4212,1253],{"class":75},[58,4214,1827],{"class":92},[58,4216,4086],{"class":386},[58,4218,1827],{"class":92},[58,4220,1227],{"class":75},[58,4222,1827],{"class":92},[58,4224,4225],{"class":386},"\"=\"",[58,4227,1827],{"class":92},[58,4229,1227],{"class":75},[58,4231,1241],{"class":92},[58,4233,1253],{"class":75},[58,4235,1827],{"class":92},[58,4237,4238],{"class":386},"'",[58,4240,1884],{"class":82},[58,4242,4238],{"class":386},[58,4244,102],{"class":75},[58,4246,4247],{"class":60,"line":677},[58,4248,3175],{"class":75},[58,4250,4251,4253,4255],{"class":60,"line":2260},[58,4252,4097],{"class":75},[58,4254,1827],{"class":92},[58,4256,1849],{"class":75},[58,4258,4259],{"class":60,"line":694},[58,4260,2833],{"class":75},[58,4262,4263],{"class":60,"line":2270},[58,4264,108],{"class":75},[114,4266,4268],{"id":4267},"_163跳出语句","1.6.3跳出语句",[19,4270,4271],{},[22,4272,4273],{},"break语句\n作用：用于跳出选择结构或者循环结构",[175,4275,4276],{},"break使用时机：",[124,4278,4279,4282,4285],{},[22,4280,4281],{},"出现在switch条件语句中，作用是终止case并跳出switch",[22,4283,4284],{},"出现在循环结构中，作用是跳出当前的循环结构",[22,4286,4287],{},"出现在嵌套循环中，跳出最近的内层循环语句",[19,4289,4290,4293],{"start":68},[22,4291,4292],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[22,4294,4295],{},"goto语句\n语法：goto 标记;",[175,4297,4298],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[48,4300,4302],{"className":781,"code":4301,"language":783,"meta":53,"style":53},"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",[55,4303,4304,4312,4316,4329,4339,4352,4365,4378,4386,4402],{"__ignoreMap":53},[58,4305,4306,4308,4310],{"class":60,"line":61},[58,4307,796],{"class":92},[58,4309,2619],{"class":379},[58,4311,2622],{"class":75},[58,4313,4314],{"class":60,"line":68},[58,4315,2195],{"class":75},[58,4317,4318,4320,4322,4325,4327],{"class":60,"line":79},[58,4319,2200],{"class":75},[58,4321,1827],{"class":92},[58,4323,4324],{"class":386},"\"1\"",[58,4326,1827],{"class":92},[58,4328,1849],{"class":75},[58,4330,4331,4334,4337],{"class":60,"line":105},[58,4332,4333],{"class":92},"    goto",[58,4335,4336],{"class":379}," FLAG",[58,4338,102],{"class":75},[58,4340,4341,4343,4345,4348,4350],{"class":60,"line":627},[58,4342,2200],{"class":75},[58,4344,1827],{"class":92},[58,4346,4347],{"class":386},"\"2\"",[58,4349,1827],{"class":92},[58,4351,1849],{"class":75},[58,4353,4354,4356,4358,4361,4363],{"class":60,"line":509},[58,4355,2200],{"class":75},[58,4357,1827],{"class":92},[58,4359,4360],{"class":386},"\"3\"",[58,4362,1827],{"class":92},[58,4364,1849],{"class":75},[58,4366,4367,4369,4371,4374,4376],{"class":60,"line":559},[58,4368,2200],{"class":75},[58,4370,1827],{"class":92},[58,4372,4373],{"class":386},"\"4\"",[58,4375,1827],{"class":92},[58,4377,1849],{"class":75},[58,4379,4380,4383],{"class":60,"line":654},[58,4381,4382],{"class":379},"    FLAG",[58,4384,4385],{"class":75},":\n",[58,4387,4388,4390,4392,4395,4397,4399],{"class":60,"line":671},[58,4389,2200],{"class":75},[58,4391,1827],{"class":92},[58,4393,4394],{"class":386},"\"5\"",[58,4396,1827],{"class":92},[58,4398,1892],{"class":75},[58,4400,4401],{"class":64},"\u002F\u002F跳过了2,3,4,直接到5\n",[58,4403,4404],{"class":60,"line":677},[58,4405,108],{"class":75},[14,4407,4409],{"id":4408},"_17数组","1.7数组",[114,4411,4413],{"id":4412},"_171一维数组","1.7.1一维数组",[19,4415,4416],{},[22,4417,4418],{},"一维数组定义方式",[926,4420,4421,4431],{},[929,4422,4423],{},[932,4424,4425,4428],{},[935,4426,4427],{},"方式",[935,4429,4430],{},"注意事项",[972,4432,4433,4447,4457],{},[932,4434,4435,4441],{},[977,4436,4437,4438,846],{},"数据类型 数组名",[58,4439,4440],{},"数组长度",[977,4442,4443,4444,4446],{},"这种方式是先定义再arr",[58,4445,1227],{},"赋值",[932,4448,4449,4454],{},[977,4450,4437,4451,4453],{},[58,4452,4440],{},"={值1,值2....};",[977,4455,4456],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[932,4458,4459,4463],{},[977,4460,4437,4461,4453],{},[58,4462],{},[977,4464,4465,4466,4468],{},"int arr",[58,4467],{},";这是不正确的，按照这样的方式定义必须有初始长度",[19,4470,4471],{"start":68},[22,4472,4473],{},"一维数组数组名\n用途：",[124,4475,4476],{},[22,4477,4478],{},"1.可以统计整个数组在内存中的长度：",[48,4480,4482],{"className":781,"code":4481,"language":783,"meta":53,"style":53},"sizeof(arr);\nsizeof(arr[0]);\n",[55,4483,4484,4491],{"__ignoreMap":53},[58,4485,4486,4488],{"class":60,"line":61},[58,4487,790],{"class":92},[58,4489,4490],{"class":75},"(arr);\n",[58,4492,4493,4495,4498,4500],{"class":60,"line":68},[58,4494,790],{"class":92},[58,4496,4497],{"class":75},"(arr[",[58,4499,979],{"class":82},[58,4501,4502],{"class":75},"]);\n",[124,4504,4505],{},[22,4506,4507],{},"2.可以获取数组在内存中的首地址:",[48,4509,4511],{"className":781,"code":4510,"language":783,"meta":53,"style":53},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[55,4512,4513,4518,4531,4536],{"__ignoreMap":53},[58,4514,4515],{"class":60,"line":61},[58,4516,4517],{"class":64},"\u002F\u002F查看16进制的首地址\n",[58,4519,4520,4522,4524,4527,4529],{"class":60,"line":68},[58,4521,2019],{"class":75},[58,4523,1827],{"class":92},[58,4525,4526],{"class":75},"arr",[58,4528,1827],{"class":92},[58,4530,1849],{"class":75},[58,4532,4533],{"class":60,"line":79},[58,4534,4535],{"class":64},"\u002F\u002F看10进制数\n",[58,4537,4538,4540,4542,4544,4546,4548,4550,4553,4555,4557,4559],{"class":60,"line":105},[58,4539,2019],{"class":75},[58,4541,1827],{"class":92},[58,4543,793],{"class":75},[58,4545,796],{"class":92},[58,4547,1215],{"class":75},[58,4549,1139],{"class":92},[58,4551,4552],{"class":75},"arr[",[58,4554,979],{"class":82},[58,4556,1724],{"class":75},[58,4558,1827],{"class":92},[58,4560,1849],{"class":75},[175,4562,4563],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[124,4565,4566],{},[22,4567,4568],{},"1️⃣五只小猪称体重",[48,4570,4572],{"className":781,"code":4571,"language":783,"meta":53,"style":53},"#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",[55,4573,4574,4580,4590,4598,4602,4642,4655,4681,4685,4697,4701,4711,4715,4719,4732,4742],{"__ignoreMap":53},[58,4575,4576,4578],{"class":60,"line":61},[58,4577,2596],{"class":92},[58,4579,2599],{"class":386},[58,4581,4582,4584,4586,4588],{"class":60,"line":68},[58,4583,2604],{"class":92},[58,4585,2607],{"class":92},[58,4587,2610],{"class":379},[58,4589,102],{"class":75},[58,4591,4592,4594,4596],{"class":60,"line":79},[58,4593,796],{"class":92},[58,4595,2619],{"class":379},[58,4597,2622],{"class":75},[58,4599,4600],{"class":60,"line":105},[58,4601,2195],{"class":75},[58,4603,4604,4606,4609,4611,4613,4615,4617,4620,4622,4625,4627,4629,4631,4634,4636,4639],{"class":60,"line":627},[58,4605,2631],{"class":92},[58,4607,4608],{"class":75}," arr[",[58,4610,1105],{"class":82},[58,4612,1724],{"class":75},[58,4614,383],{"class":92},[58,4616,1681],{"class":75},[58,4618,4619],{"class":82},"300",[58,4621,1164],{"class":75},[58,4623,4624],{"class":82},"350",[58,4626,1164],{"class":75},[58,4628,2369],{"class":82},[58,4630,1164],{"class":75},[58,4632,4633],{"class":82},"400",[58,4635,1164],{"class":75},[58,4637,4638],{"class":82},"250",[58,4640,4641],{"class":75},"};\n",[58,4643,4644,4646,4649,4651,4653],{"class":60,"line":509},[58,4645,2631],{"class":92},[58,4647,4648],{"class":75}," tmp",[58,4650,383],{"class":92},[58,4652,979],{"class":82},[58,4654,102],{"class":75},[58,4656,4657,4659,4661,4663,4665,4667,4669,4671,4673,4675,4677,4679],{"class":60,"line":559},[58,4658,3847],{"class":92},[58,4660,2305],{"class":75},[58,4662,796],{"class":92},[58,4664,3678],{"class":75},[58,4666,383],{"class":92},[58,4668,979],{"class":82},[58,4670,3685],{"class":75},[58,4672,373],{"class":92},[58,4674,1105],{"class":82},[58,4676,3685],{"class":75},[58,4678,2938],{"class":92},[58,4680,799],{"class":75},[58,4682,4683],{"class":60,"line":654},[58,4684,2676],{"class":75},[58,4686,4687,4689,4692,4694],{"class":60,"line":671},[58,4688,3143],{"class":92},[58,4690,4691],{"class":75},"(tmp",[58,4693,373],{"class":92},[58,4695,4696],{"class":75},"arr[i])\n",[58,4698,4699],{"class":60,"line":677},[58,4700,3156],{"class":75},[58,4702,4703,4706,4708],{"class":60,"line":2260},[58,4704,4705],{"class":75},"            tmp",[58,4707,383],{"class":92},[58,4709,4710],{"class":75},"arr[i];\n",[58,4712,4713],{"class":60,"line":694},[58,4714,3175],{"class":75},[58,4716,4717],{"class":60,"line":2270},[58,4718,2833],{"class":75},[58,4720,4721,4723,4725,4728,4730],{"class":60,"line":2275},[58,4722,2200],{"class":75},[58,4724,1827],{"class":92},[58,4726,4727],{"class":75},"tmp",[58,4729,1827],{"class":92},[58,4731,1849],{"class":75},[58,4733,4734,4737,4740],{"class":60,"line":2289},[58,4735,4736],{"class":92},"    return",[58,4738,4739],{"class":82}," 0",[58,4741,102],{"class":75},[58,4743,4744],{"class":60,"line":2294},[58,4745,108],{"class":75},[124,4747,4748],{},[22,4749,4750],{},"2️⃣数组元素逆置",[48,4752,4754],{"className":781,"code":4753,"language":783,"meta":53,"style":53},"\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",[55,4755,4756,4761,4767,4777,4785,4789,4824,4840,4872,4885,4890,4895,4907,4917,4927,4932,4941,4951,4956,4961,4988,4992,5008,5012,5023,5032],{"__ignoreMap":53},[58,4757,4758],{"class":60,"line":61},[58,4759,4760],{"class":64},"\u002F\u002F元素逆置\n",[58,4762,4763,4765],{"class":60,"line":68},[58,4764,2596],{"class":92},[58,4766,2599],{"class":386},[58,4768,4769,4771,4773,4775],{"class":60,"line":79},[58,4770,2604],{"class":92},[58,4772,2607],{"class":92},[58,4774,2610],{"class":379},[58,4776,102],{"class":75},[58,4778,4779,4781,4783],{"class":60,"line":105},[58,4780,796],{"class":92},[58,4782,2619],{"class":379},[58,4784,2622],{"class":75},[58,4786,4787],{"class":60,"line":627},[58,4788,2195],{"class":75},[58,4790,4791,4794,4796,4798,4800,4802,4804,4806,4808,4810,4812,4814,4816,4818,4820,4822],{"class":60,"line":509},[58,4792,4793],{"class":92},"   int",[58,4795,4608],{"class":75},[58,4797,1105],{"class":82},[58,4799,1724],{"class":75},[58,4801,383],{"class":92},[58,4803,1681],{"class":75},[58,4805,89],{"class":82},[58,4807,1164],{"class":75},[58,4809,867],{"class":82},[58,4811,1164],{"class":75},[58,4813,861],{"class":82},[58,4815,1164],{"class":75},[58,4817,1079],{"class":82},[58,4819,1164],{"class":75},[58,4821,1105],{"class":82},[58,4823,4641],{"class":75},[58,4825,4826,4828,4831,4833,4835,4837],{"class":60,"line":559},[58,4827,4793],{"class":92},[58,4829,4830],{"class":75}," start",[58,4832,383],{"class":92},[58,4834,979],{"class":82},[58,4836,846],{"class":75},[58,4838,4839],{"class":64},"\u002F\u002F起始下标\n",[58,4841,4842,4844,4847,4850,4853,4856,4858,4860,4863,4865,4867,4869],{"class":60,"line":654},[58,4843,4793],{"class":92},[58,4845,4846],{"class":75}," end",[58,4848,4849],{"class":92},"=sizeof",[58,4851,4852],{"class":75},"(arr)",[58,4854,4855],{"class":92},"\u002Fsizeof",[58,4857,4497],{"class":75},[58,4859,979],{"class":82},[58,4861,4862],{"class":75},"])",[58,4864,1318],{"class":92},[58,4866,89],{"class":82},[58,4868,846],{"class":75},[58,4870,4871],{"class":64},"\u002F\u002F结束下标\n",[58,4873,4874,4877,4880,4882],{"class":60,"line":671},[58,4875,4876],{"class":92},"   while",[58,4878,4879],{"class":75}," (start",[58,4881,373],{"class":92},[58,4883,4884],{"class":75},"end)\n",[58,4886,4887],{"class":60,"line":677},[58,4888,4889],{"class":75},"   {\n",[58,4891,4892],{"class":60,"line":2260},[58,4893,4894],{"class":64},"    \u002F\u002F实现元素互换代码\n",[58,4896,4897,4899,4902,4904],{"class":60,"line":694},[58,4898,2631],{"class":92},[58,4900,4901],{"class":75}," temp",[58,4903,383],{"class":92},[58,4905,4906],{"class":75},"arr[start];\n",[58,4908,4909,4912,4914],{"class":60,"line":2270},[58,4910,4911],{"class":75},"    arr[start]",[58,4913,383],{"class":92},[58,4915,4916],{"class":75},"arr[end];\n",[58,4918,4919,4922,4924],{"class":60,"line":2275},[58,4920,4921],{"class":75},"    arr[end]",[58,4923,383],{"class":92},[58,4925,4926],{"class":75},"temp;\n",[58,4928,4929],{"class":60,"line":2289},[58,4930,4931],{"class":64},"    \u002F\u002F下标更新\n",[58,4933,4934,4937,4939],{"class":60,"line":2294},[58,4935,4936],{"class":75},"    start",[58,4938,2938],{"class":92},[58,4940,102],{"class":75},[58,4942,4943,4946,4949],{"class":60,"line":2300},[58,4944,4945],{"class":75},"    end",[58,4947,4948],{"class":92},"--",[58,4950,102],{"class":75},[58,4952,4953],{"class":60,"line":2321},[58,4954,4955],{"class":75},"   }\n",[58,4957,4958],{"class":60,"line":2326},[58,4959,4960],{"class":64},"   \u002F\u002F输出逆置后的数组\n",[58,4962,4963,4966,4968,4970,4972,4974,4976,4978,4980,4982,4984,4986],{"class":60,"line":2340},[58,4964,4965],{"class":92},"   for",[58,4967,2305],{"class":75},[58,4969,796],{"class":92},[58,4971,3678],{"class":75},[58,4973,383],{"class":92},[58,4975,979],{"class":82},[58,4977,3685],{"class":75},[58,4979,373],{"class":92},[58,4981,1105],{"class":82},[58,4983,3685],{"class":75},[58,4985,2938],{"class":92},[58,4987,799],{"class":75},[58,4989,4990],{"class":60,"line":2345},[58,4991,4889],{"class":75},[58,4993,4994,4996,4998,5001,5003,5006],{"class":60,"line":2374},[58,4995,2200],{"class":75},[58,4997,1827],{"class":92},[58,4999,5000],{"class":75},"arr[i]",[58,5002,1827],{"class":92},[58,5004,5005],{"class":386},"\" \"",[58,5007,102],{"class":75},[58,5009,5010],{"class":60,"line":2379},[58,5011,4955],{"class":75},[58,5013,5014,5017,5019,5021],{"class":60,"line":2396},[58,5015,5016],{"class":379},"   system",[58,5018,793],{"class":75},[58,5020,2954],{"class":386},[58,5022,3365],{"class":75},[58,5024,5025,5028,5030],{"class":60,"line":2401},[58,5026,5027],{"class":92},"   return",[58,5029,4739],{"class":82},[58,5031,102],{"class":75},[58,5033,5034],{"class":60,"line":2406},[58,5035,108],{"class":75},[124,5037,5038],{},[22,5039,5040],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[48,5042,5044],{"className":781,"code":5043,"language":783,"meta":53,"style":53},"\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",[55,5045,5046,5051,5057,5067,5075,5079,5131,5144,5170,5174,5188,5192,5197,5202,5232,5236,5241,5275,5279,5284,5304,5309,5321,5337,5352,5357,5361,5365,5378,5404,5408,5422,5426,5434],{"__ignoreMap":53},[58,5047,5048],{"class":60,"line":61},[58,5049,5050],{"class":64},"\u002F\u002F冒泡排序,升序\n",[58,5052,5053,5055],{"class":60,"line":68},[58,5054,2596],{"class":92},[58,5056,2599],{"class":386},[58,5058,5059,5061,5063,5065],{"class":60,"line":79},[58,5060,2604],{"class":92},[58,5062,2607],{"class":92},[58,5064,2610],{"class":379},[58,5066,102],{"class":75},[58,5068,5069,5071,5073],{"class":60,"line":105},[58,5070,796],{"class":92},[58,5072,2619],{"class":379},[58,5074,2622],{"class":75},[58,5076,5077],{"class":60,"line":627},[58,5078,2195],{"class":75},[58,5080,5081,5083,5085,5087,5090,5092,5095,5097,5099,5101,5103,5105,5107,5109,5111,5113,5115,5117,5119,5121,5123,5125,5127,5129],{"class":60,"line":509},[58,5082,2631],{"class":92},[58,5084,4608],{"class":75},[58,5086,1206],{"class":82},[58,5088,5089],{"class":75},"] ",[58,5091,383],{"class":92},[58,5093,5094],{"class":75}," {",[58,5096,1079],{"class":82},[58,5098,1164],{"class":75},[58,5100,867],{"class":82},[58,5102,1164],{"class":75},[58,5104,1181],{"class":82},[58,5106,1164],{"class":75},[58,5108,979],{"class":82},[58,5110,1164],{"class":75},[58,5112,1105],{"class":82},[58,5114,1164],{"class":75},[58,5116,1155],{"class":82},[58,5118,1164],{"class":75},[58,5120,89],{"class":82},[58,5122,1164],{"class":75},[58,5124,861],{"class":82},[58,5126,1164],{"class":75},[58,5128,1206],{"class":82},[58,5130,4641],{"class":75},[58,5132,5133,5135,5137,5140,5142],{"class":60,"line":559},[58,5134,2200],{"class":75},[58,5136,1827],{"class":92},[58,5138,5139],{"class":386},"\"排序前：\"",[58,5141,1827],{"class":92},[58,5143,1849],{"class":75},[58,5145,5146,5148,5150,5152,5154,5156,5158,5160,5162,5164,5166,5168],{"class":60,"line":654},[58,5147,3847],{"class":92},[58,5149,2305],{"class":75},[58,5151,796],{"class":92},[58,5153,3678],{"class":75},[58,5155,383],{"class":92},[58,5157,979],{"class":82},[58,5159,3685],{"class":75},[58,5161,373],{"class":92},[58,5163,1206],{"class":82},[58,5165,3685],{"class":75},[58,5167,2938],{"class":92},[58,5169,799],{"class":75},[58,5171,5172],{"class":60,"line":671},[58,5173,2676],{"class":75},[58,5175,5176,5178,5180,5182,5184,5186],{"class":60,"line":677},[58,5177,4097],{"class":75},[58,5179,1827],{"class":92},[58,5181,5000],{"class":75},[58,5183,1827],{"class":92},[58,5185,5005],{"class":386},[58,5187,102],{"class":75},[58,5189,5190],{"class":60,"line":2260},[58,5191,2833],{"class":75},[58,5193,5194],{"class":60,"line":694},[58,5195,5196],{"class":64},"    \u002F\u002F开始冒泡排序\n",[58,5198,5199],{"class":60,"line":2270},[58,5200,5201],{"class":64},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[58,5203,5204,5206,5208,5210,5212,5214,5216,5218,5220,5222,5224,5226,5228,5230],{"class":60,"line":2275},[58,5205,3847],{"class":92},[58,5207,2305],{"class":75},[58,5209,796],{"class":92},[58,5211,3678],{"class":75},[58,5213,383],{"class":92},[58,5215,979],{"class":82},[58,5217,3685],{"class":75},[58,5219,373],{"class":92},[58,5221,1206],{"class":82},[58,5223,1318],{"class":92},[58,5225,89],{"class":82},[58,5227,3685],{"class":75},[58,5229,2938],{"class":92},[58,5231,799],{"class":75},[58,5233,5234],{"class":60,"line":2289},[58,5235,2676],{"class":75},[58,5237,5238],{"class":60,"line":2294},[58,5239,5240],{"class":64},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[58,5242,5243,5245,5247,5249,5251,5253,5255,5257,5259,5261,5263,5265,5267,5269,5271,5273],{"class":60,"line":2300},[58,5244,4049],{"class":92},[58,5246,2305],{"class":75},[58,5248,796],{"class":92},[58,5250,4056],{"class":75},[58,5252,383],{"class":92},[58,5254,979],{"class":82},[58,5256,4063],{"class":75},[58,5258,373],{"class":92},[58,5260,1206],{"class":82},[58,5262,1318],{"class":92},[58,5264,1227],{"class":75},[58,5266,1318],{"class":92},[58,5268,89],{"class":82},[58,5270,4063],{"class":75},[58,5272,2938],{"class":92},[58,5274,799],{"class":75},[58,5276,5277],{"class":60,"line":2321},[58,5278,3156],{"class":75},[58,5280,5281],{"class":60,"line":2326},[58,5282,5283],{"class":64},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[58,5285,5286,5289,5292,5294,5297,5299,5301],{"class":60,"line":2340},[58,5287,5288],{"class":92},"            if",[58,5290,5291],{"class":75},"(arr[j]",[58,5293,1744],{"class":92},[58,5295,5296],{"class":75},"arr[j",[58,5298,1267],{"class":92},[58,5300,89],{"class":82},[58,5302,5303],{"class":75},"])\n",[58,5305,5306],{"class":60,"line":2345},[58,5307,5308],{"class":75},"            {\n",[58,5310,5311,5314,5316,5318],{"class":60,"line":2374},[58,5312,5313],{"class":92},"                int",[58,5315,4901],{"class":75},[58,5317,383],{"class":92},[58,5319,5320],{"class":75},"arr[j];\n",[58,5322,5323,5326,5328,5330,5332,5334],{"class":60,"line":2379},[58,5324,5325],{"class":75},"                arr[j]",[58,5327,383],{"class":92},[58,5329,5296],{"class":75},[58,5331,1267],{"class":92},[58,5333,89],{"class":82},[58,5335,5336],{"class":75},"];\n",[58,5338,5339,5342,5344,5346,5348,5350],{"class":60,"line":2396},[58,5340,5341],{"class":75},"                arr[j",[58,5343,1267],{"class":92},[58,5345,89],{"class":82},[58,5347,1724],{"class":75},[58,5349,383],{"class":92},[58,5351,4926],{"class":75},[58,5353,5354],{"class":60,"line":2401},[58,5355,5356],{"class":75},"            }\n",[58,5358,5359],{"class":60,"line":2406},[58,5360,3175],{"class":75},[58,5362,5363],{"class":60,"line":2411},[58,5364,2833],{"class":75},[58,5366,5367,5369,5371,5374,5376],{"class":60,"line":2425},[58,5368,2200],{"class":75},[58,5370,1827],{"class":92},[58,5372,5373],{"class":386},"\"排序后：\"",[58,5375,1827],{"class":92},[58,5377,1849],{"class":75},[58,5379,5380,5382,5384,5386,5388,5390,5392,5394,5396,5398,5400,5402],{"class":60,"line":2430},[58,5381,3847],{"class":92},[58,5383,2305],{"class":75},[58,5385,796],{"class":92},[58,5387,3678],{"class":75},[58,5389,383],{"class":92},[58,5391,979],{"class":82},[58,5393,3685],{"class":75},[58,5395,373],{"class":92},[58,5397,1206],{"class":82},[58,5399,3685],{"class":75},[58,5401,2938],{"class":92},[58,5403,799],{"class":75},[58,5405,5406],{"class":60,"line":3223},[58,5407,2676],{"class":75},[58,5409,5410,5412,5414,5416,5418,5420],{"class":60,"line":3237},[58,5411,4097],{"class":75},[58,5413,1827],{"class":92},[58,5415,5000],{"class":75},[58,5417,1827],{"class":92},[58,5419,5005],{"class":386},[58,5421,102],{"class":75},[58,5423,5424],{"class":60,"line":3245},[58,5425,2833],{"class":75},[58,5427,5428,5430,5432],{"class":60,"line":3250},[58,5429,4736],{"class":92},[58,5431,4739],{"class":82},[58,5433,102],{"class":75},[58,5435,5436],{"class":60,"line":3256},[58,5437,108],{"class":75},[114,5439,5441],{"id":5440},"_172二维数组","1.7.2二维数组",[19,5443,5444],{},[22,5445,5446],{},"二维数组的四种定义方式",[926,5448,5449,5458],{},[929,5450,5451],{},[932,5452,5453,5456],{},[935,5454,5455],{},"序号",[935,5457,4427],{},[972,5459,5460,5470,5479,5488,5497],{},[932,5461,5462,5464],{},[977,5463,89],{},[977,5465,5466,5467,846],{},"数据类型 数组名[行数]",[58,5468,5469],{},"列数",[932,5471,5472,5474],{},[977,5473,867],{},[977,5475,5466,5476,5478],{},[58,5477,5469],{},"={ {数据1,数据2}，{数据3，数据4}... }",[932,5480,5481,5483],{},[977,5482,861],{},[977,5484,5466,5485,5487],{},[58,5486,5469],{},"={数据1,数据2,数据3...}",[932,5489,5490,5492],{},[977,5491,1079],{},[977,5493,5494,5495,5487],{},"数据类型 数组名[]",[58,5496,5469],{},[932,5498,5499,5502],{},[977,5500,5501],{},"注意：不能只省略列数",[977,5503],{},[19,5505,5506],{"start":68},[22,5507,5508],{},"二维数组数组名",[124,5510,5511,5514],{},[22,5512,5513],{},"1.查看二维数组所占内存空间",[22,5515,5516],{},"2.获取二维数组首地址",[175,5518,5519],{},"已知二维数组，求二维数组的行数与列数",[48,5521,5523],{"className":781,"code":5522,"language":783,"meta":53,"style":53},"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",[55,5524,5525,5533,5537,5555,5559,5577,5593,5598,5623,5656],{"__ignoreMap":53},[58,5526,5527,5529,5531],{"class":60,"line":61},[58,5528,796],{"class":92},[58,5530,2619],{"class":379},[58,5532,2622],{"class":75},[58,5534,5535],{"class":60,"line":68},[58,5536,2195],{"class":75},[58,5538,5539,5541,5543,5545,5548,5550,5552],{"class":60,"line":79},[58,5540,2631],{"class":92},[58,5542,4608],{"class":75},[58,5544,867],{"class":82},[58,5546,5547],{"class":75},"][",[58,5549,861],{"class":82},[58,5551,1724],{"class":75},[58,5553,5554],{"class":92},"=\n",[58,5556,5557],{"class":60,"line":105},[58,5558,2676],{"class":75},[58,5560,5561,5564,5566,5568,5570,5572,5574],{"class":60,"line":627},[58,5562,5563],{"class":75},"        {",[58,5565,89],{"class":82},[58,5567,1164],{"class":75},[58,5569,867],{"class":82},[58,5571,1164],{"class":75},[58,5573,861],{"class":82},[58,5575,5576],{"class":75},"},\n",[58,5578,5579,5581,5583,5585,5587,5589,5591],{"class":60,"line":509},[58,5580,5563],{"class":75},[58,5582,1079],{"class":82},[58,5584,1164],{"class":75},[58,5586,1105],{"class":82},[58,5588,1164],{"class":75},[58,5590,1130],{"class":82},[58,5592,108],{"class":75},[58,5594,5595],{"class":60,"line":559},[58,5596,5597],{"class":75},"    };\n",[58,5599,5600,5602,5604,5607,5609,5611,5613,5615,5617,5619,5621],{"class":60,"line":654},[58,5601,2200],{"class":75},[58,5603,1827],{"class":92},[58,5605,5606],{"class":386},"\"二维数组的行数\"",[58,5608,2022],{"class":92},[58,5610,4852],{"class":75},[58,5612,4855],{"class":92},[58,5614,4497],{"class":75},[58,5616,979],{"class":82},[58,5618,4862],{"class":75},[58,5620,1827],{"class":92},[58,5622,1849],{"class":75},[58,5624,5625,5627,5629,5632,5634,5636,5638,5640,5642,5644,5646,5648,5650,5652,5654],{"class":60,"line":671},[58,5626,2200],{"class":75},[58,5628,1827],{"class":92},[58,5630,5631],{"class":386},"\"二维数组的列数\"",[58,5633,2022],{"class":92},[58,5635,4497],{"class":75},[58,5637,979],{"class":82},[58,5639,4862],{"class":75},[58,5641,4855],{"class":92},[58,5643,4497],{"class":75},[58,5645,979],{"class":82},[58,5647,5547],{"class":75},[58,5649,979],{"class":82},[58,5651,4862],{"class":75},[58,5653,1827],{"class":92},[58,5655,1849],{"class":75},[58,5657,5658],{"class":60,"line":677},[58,5659,108],{"class":75},[175,5661,5662],{},"查看二维数组首地址",[48,5664,5666],{"className":781,"code":5665,"language":783,"meta":53,"style":53},"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",[55,5667,5668,5685,5711,5736],{"__ignoreMap":53},[58,5669,5670,5672,5674,5677,5679,5681,5683],{"class":60,"line":61},[58,5671,2019],{"class":75},[58,5673,1827],{"class":92},[58,5675,5676],{"class":386},"\"二维数组首地址：\"",[58,5678,1827],{"class":92},[58,5680,4526],{"class":75},[58,5682,1827],{"class":92},[58,5684,1849],{"class":75},[58,5686,5687,5689,5691,5694,5696,5698,5700,5703,5705,5707,5709],{"class":60,"line":68},[58,5688,2019],{"class":75},[58,5690,1827],{"class":92},[58,5692,5693],{"class":386},"\"二维数组第一行的首地址：\"",[58,5695,1827],{"class":92},[58,5697,793],{"class":75},[58,5699,796],{"class":92},[58,5701,5702],{"class":75},")arr[",[58,5704,979],{"class":82},[58,5706,1724],{"class":75},[58,5708,1827],{"class":92},[58,5710,1849],{"class":75},[58,5712,5713,5715,5717,5720,5722,5724,5726,5728,5730,5732,5734],{"class":60,"line":79},[58,5714,2019],{"class":75},[58,5716,1827],{"class":92},[58,5718,5719],{"class":386},"\"二维数组第二行的首地址：\"",[58,5721,1827],{"class":92},[58,5723,793],{"class":75},[58,5725,796],{"class":92},[58,5727,5702],{"class":75},[58,5729,89],{"class":82},[58,5731,1724],{"class":75},[58,5733,1827],{"class":92},[58,5735,1849],{"class":75},[58,5737,5738,5740,5742,5745,5747,5749,5751,5753,5755,5757,5759,5761,5763,5765,5767,5769],{"class":60,"line":105},[58,5739,2019],{"class":75},[58,5741,1827],{"class":92},[58,5743,5744],{"class":386},"\"二维数组第一个元素的首地址:\"",[58,5746,1827],{"class":92},[58,5748,793],{"class":75},[58,5750,796],{"class":92},[58,5752,1215],{"class":75},[58,5754,1139],{"class":92},[58,5756,4552],{"class":75},[58,5758,979],{"class":82},[58,5760,5547],{"class":75},[58,5762,979],{"class":82},[58,5764,1724],{"class":75},[58,5766,1827],{"class":92},[58,5768,1892],{"class":75},[58,5770,5771],{"class":64},"\u002F\u002F对于数，要加取址符\n",[702,5773,5774],{},"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":53,"searchDepth":68,"depth":68,"links":5776},[5777,5778,5779,5787,5788,5794,5799],{"id":736,"depth":68,"text":737},{"id":743,"depth":68,"text":744},{"id":758,"depth":68,"text":759,"children":5780},[5781,5782,5783,5784,5785,5786],{"id":762,"depth":79,"text":763},{"id":809,"depth":79,"text":810},{"id":875,"depth":79,"text":876},{"id":1808,"depth":79,"text":1809},{"id":1898,"depth":79,"text":1899},{"id":1993,"depth":79,"text":1994},{"id":2035,"depth":68,"text":2036},{"id":2103,"depth":68,"text":2104,"children":5789},[5790,5791,5792,5793],{"id":2107,"depth":79,"text":2108},{"id":2128,"depth":79,"text":2129},{"id":2137,"depth":79,"text":2138},{"id":2146,"depth":79,"text":2147},{"id":2155,"depth":68,"text":2156,"children":5795},[5796,5797,5798],{"id":2159,"depth":79,"text":2160},{"id":2851,"depth":79,"text":2852},{"id":4267,"depth":79,"text":4268},{"id":4408,"depth":68,"text":4409,"children":5800},[5801,5802],{"id":4412,"depth":79,"text":4413},{"id":5440,"depth":79,"text":5441},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":728,"description":53},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5809,"title":5810,"body":5811,"description":53,"extension":718,"meta":6911,"navigation":720,"path":6912,"seo":6913,"stem":6914,"__hash__":6915},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5812,"toc":6903},[5813,5816,5820,5828,5836,5839,5905,5909,5912,5988,5992,5995,5998,6001,6214,6218,6223,6287,6292,6359,6364,6455,6458,6563,6567,6570,6576,6720,6724,6727,6741,6744,6789,6792,6900],[10,5814,5810],{"id":5815},"_2函数",[14,5817,5819],{"id":5818},"_21函数概述","2.1函数概述",[19,5821,5822,5825],{},[22,5823,5824],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[22,5826,5827],{},"语法：",[48,5829,5834],{"className":5830,"code":5832,"language":5833,"meta":53},[5831],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[55,5835,5832],{"__ignoreMap":53},[175,5837,5838],{},"小案例",[48,5840,5842],{"className":781,"code":5841,"language":783,"meta":53,"style":53},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[55,5843,5844,5849,5873,5877,5894,5901],{"__ignoreMap":53},[58,5845,5846],{"class":60,"line":61},[58,5847,5848],{"class":64},"\u002F\u002Fnum1,num2形参\n",[58,5850,5851,5853,5856,5858,5860,5864,5866,5868,5871],{"class":60,"line":68},[58,5852,796],{"class":92},[58,5854,5855],{"class":379}," add",[58,5857,793],{"class":75},[58,5859,796],{"class":92},[58,5861,5863],{"class":5862},"s4XuR"," num1",[58,5865,1164],{"class":75},[58,5867,796],{"class":92},[58,5869,5870],{"class":5862}," num2",[58,5872,799],{"class":75},[58,5874,5875],{"class":60,"line":79},[58,5876,2195],{"class":75},[58,5878,5879,5881,5884,5886,5889,5891],{"class":60,"line":105},[58,5880,2631],{"class":92},[58,5882,5883],{"class":75}," sum",[58,5885,383],{"class":92},[58,5887,5888],{"class":75},"num1",[58,5890,1267],{"class":92},[58,5892,5893],{"class":75},"num2;\n",[58,5895,5896,5898],{"class":60,"line":627},[58,5897,4736],{"class":92},[58,5899,5900],{"class":75}," sum;\n",[58,5902,5903],{"class":60,"line":509},[58,5904,108],{"class":75},[14,5906,5908],{"id":5907},"_22函数调用","2.2函数调用",[175,5910,5911],{},"调用刚刚写的求和函数",[48,5913,5915],{"className":781,"code":5914,"language":783,"meta":53,"style":53},"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",[55,5916,5917,5925,5929,5934,5946,5958,5967,5972,5984],{"__ignoreMap":53},[58,5918,5919,5921,5923],{"class":60,"line":61},[58,5920,796],{"class":92},[58,5922,2619],{"class":379},[58,5924,2622],{"class":75},[58,5926,5927],{"class":60,"line":68},[58,5928,2195],{"class":75},[58,5930,5931],{"class":60,"line":79},[58,5932,5933],{"class":64},"    \u002F\u002Fa,b实参\n",[58,5935,5936,5938,5940,5942,5944],{"class":60,"line":105},[58,5937,2631],{"class":92},[58,5939,2048],{"class":75},[58,5941,383],{"class":92},[58,5943,979],{"class":82},[58,5945,102],{"class":75},[58,5947,5948,5950,5952,5954,5956],{"class":60,"line":627},[58,5949,2631],{"class":92},[58,5951,3479],{"class":75},[58,5953,383],{"class":92},[58,5955,979],{"class":82},[58,5957,102],{"class":75},[58,5959,5960,5962,5964],{"class":60,"line":509},[58,5961,2658],{"class":75},[58,5963,2079],{"class":92},[58,5965,5966],{"class":75},"a,b;\n",[58,5968,5969],{"class":60,"line":559},[58,5970,5971],{"class":64},"    \u002F\u002F调用函数时，实参值传给了形参\n",[58,5973,5974,5976,5978,5981],{"class":60,"line":654},[58,5975,2200],{"class":75},[58,5977,1827],{"class":92},[58,5979,5980],{"class":379},"add",[58,5982,5983],{"class":75},"(a,b);\n",[58,5985,5986],{"class":60,"line":671},[58,5987,108],{"class":75},[14,5989,5991],{"id":5990},"_23值传递","2.3值传递",[175,5993,5994],{},"值传递就是函数调用时实参将数值传给形参",[175,5996,5997],{},"值传递时，如果形参发生任何改变，不会影响实参",[175,5999,6000],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[48,6002,6004],{"className":781,"code":6003,"language":783,"meta":53,"style":53},"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",[55,6005,6006,6028,6032,6045,6062,6080,6091,6100,6109,6122,6138,6154,6163,6167,6175,6179,6191,6203,6210],{"__ignoreMap":53},[58,6007,6008,6011,6014,6016,6018,6020,6022,6024,6026],{"class":60,"line":61},[58,6009,6010],{"class":92},"void",[58,6012,6013],{"class":379}," swap",[58,6015,793],{"class":75},[58,6017,796],{"class":92},[58,6019,5863],{"class":5862},[58,6021,1164],{"class":75},[58,6023,796],{"class":92},[58,6025,5870],{"class":5862},[58,6027,799],{"class":75},[58,6029,6030],{"class":60,"line":68},[58,6031,2195],{"class":75},[58,6033,6034,6036,6038,6041,6043],{"class":60,"line":79},[58,6035,2200],{"class":75},[58,6037,1827],{"class":92},[58,6039,6040],{"class":386},"\"交换前：\"",[58,6042,1827],{"class":92},[58,6044,1849],{"class":75},[58,6046,6047,6049,6051,6054,6056,6058,6060],{"class":60,"line":105},[58,6048,2200],{"class":75},[58,6050,1827],{"class":92},[58,6052,6053],{"class":386},"\"num1=\"",[58,6055,1827],{"class":92},[58,6057,5888],{"class":75},[58,6059,1827],{"class":92},[58,6061,1849],{"class":75},[58,6063,6064,6066,6068,6071,6073,6076,6078],{"class":60,"line":627},[58,6065,2200],{"class":75},[58,6067,1827],{"class":92},[58,6069,6070],{"class":386},"\"num2=\"",[58,6072,1827],{"class":92},[58,6074,6075],{"class":75},"num2",[58,6077,1827],{"class":92},[58,6079,1849],{"class":75},[58,6081,6082,6084,6086,6088],{"class":60,"line":509},[58,6083,2631],{"class":92},[58,6085,4901],{"class":75},[58,6087,383],{"class":92},[58,6089,6090],{"class":75},"num1;\n",[58,6092,6093,6096,6098],{"class":60,"line":559},[58,6094,6095],{"class":75},"    num1",[58,6097,383],{"class":92},[58,6099,5893],{"class":75},[58,6101,6102,6105,6107],{"class":60,"line":654},[58,6103,6104],{"class":75},"    num2",[58,6106,383],{"class":92},[58,6108,4926],{"class":75},[58,6110,6111,6113,6115,6118,6120],{"class":60,"line":671},[58,6112,2200],{"class":75},[58,6114,1827],{"class":92},[58,6116,6117],{"class":386},"\"交换后：\"",[58,6119,1827],{"class":92},[58,6121,1849],{"class":75},[58,6123,6124,6126,6128,6130,6132,6134,6136],{"class":60,"line":677},[58,6125,2200],{"class":75},[58,6127,1827],{"class":92},[58,6129,6053],{"class":386},[58,6131,1827],{"class":92},[58,6133,5888],{"class":75},[58,6135,1827],{"class":92},[58,6137,1849],{"class":75},[58,6139,6140,6142,6144,6146,6148,6150,6152],{"class":60,"line":2260},[58,6141,2200],{"class":75},[58,6143,1827],{"class":92},[58,6145,6070],{"class":386},[58,6147,1827],{"class":92},[58,6149,6075],{"class":75},[58,6151,1827],{"class":92},[58,6153,1849],{"class":75},[58,6155,6156,6158,6160],{"class":60,"line":694},[58,6157,4736],{"class":92},[58,6159,846],{"class":75},[58,6161,6162],{"class":64},"\u002F\u002F或者不写\n",[58,6164,6165],{"class":60,"line":2270},[58,6166,108],{"class":75},[58,6168,6169,6171,6173],{"class":60,"line":2275},[58,6170,796],{"class":92},[58,6172,2619],{"class":379},[58,6174,2622],{"class":75},[58,6176,6177],{"class":60,"line":2289},[58,6178,2195],{"class":75},[58,6180,6181,6183,6185,6187,6189],{"class":60,"line":2294},[58,6182,2631],{"class":92},[58,6184,2048],{"class":75},[58,6186,383],{"class":92},[58,6188,1232],{"class":82},[58,6190,102],{"class":75},[58,6192,6193,6195,6197,6199,6201],{"class":60,"line":2300},[58,6194,2631],{"class":92},[58,6196,3479],{"class":75},[58,6198,383],{"class":92},[58,6200,1486],{"class":82},[58,6202,102],{"class":75},[58,6204,6205,6208],{"class":60,"line":2321},[58,6206,6207],{"class":379},"    swap",[58,6209,5983],{"class":75},[58,6211,6212],{"class":60,"line":2326},[58,6213,108],{"class":75},[14,6215,6217],{"id":6216},"_24函数的常见形式","2.4函数的常见形式",[19,6219,6220],{},[22,6221,6222],{},"无参无返",[48,6224,6226],{"className":781,"code":6225,"language":783,"meta":53,"style":53},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[55,6227,6228,6237,6241,6254,6258,6266,6270,6275,6283],{"__ignoreMap":53},[58,6229,6230,6232,6235],{"class":60,"line":61},[58,6231,6010],{"class":92},[58,6233,6234],{"class":379}," test01",[58,6236,2622],{"class":75},[58,6238,6239],{"class":60,"line":68},[58,6240,2195],{"class":75},[58,6242,6243,6245,6247,6250,6252],{"class":60,"line":79},[58,6244,2200],{"class":75},[58,6246,1827],{"class":92},[58,6248,6249],{"class":386},"\"你好\"",[58,6251,1827],{"class":92},[58,6253,1849],{"class":75},[58,6255,6256],{"class":60,"line":105},[58,6257,108],{"class":75},[58,6259,6260,6262,6264],{"class":60,"line":627},[58,6261,796],{"class":92},[58,6263,2619],{"class":379},[58,6265,2622],{"class":75},[58,6267,6268],{"class":60,"line":509},[58,6269,2195],{"class":75},[58,6271,6272],{"class":60,"line":559},[58,6273,6274],{"class":64},"    \u002F\u002F函数调用\n",[58,6276,6277,6280],{"class":60,"line":654},[58,6278,6279],{"class":379},"    test01",[58,6281,6282],{"class":75},"();\n",[58,6284,6285],{"class":60,"line":671},[58,6286,108],{"class":75},[19,6288,6289],{"start":68},[22,6290,6291],{},"有参无返",[48,6293,6295],{"className":781,"code":6294,"language":783,"meta":53,"style":53},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[55,6296,6297,6312,6316,6328,6332,6340,6344,6355],{"__ignoreMap":53},[58,6298,6299,6301,6304,6306,6308,6310],{"class":60,"line":61},[58,6300,6010],{"class":92},[58,6302,6303],{"class":379}," test02",[58,6305,793],{"class":75},[58,6307,796],{"class":92},[58,6309,2048],{"class":5862},[58,6311,799],{"class":75},[58,6313,6314],{"class":60,"line":68},[58,6315,2195],{"class":75},[58,6317,6318,6320,6322,6324,6326],{"class":60,"line":79},[58,6319,2200],{"class":75},[58,6321,1827],{"class":92},[58,6323,6249],{"class":386},[58,6325,1827],{"class":92},[58,6327,1849],{"class":75},[58,6329,6330],{"class":60,"line":105},[58,6331,108],{"class":75},[58,6333,6334,6336,6338],{"class":60,"line":627},[58,6335,796],{"class":92},[58,6337,2619],{"class":379},[58,6339,2622],{"class":75},[58,6341,6342],{"class":60,"line":509},[58,6343,2195],{"class":75},[58,6345,6346,6349,6351,6353],{"class":60,"line":559},[58,6347,6348],{"class":379},"    test02",[58,6350,793],{"class":75},[58,6352,1097],{"class":82},[58,6354,3365],{"class":75},[58,6356,6357],{"class":60,"line":654},[58,6358,108],{"class":75},[19,6360,6361],{"start":79},[22,6362,6363],{},"无参有返",[48,6365,6367],{"className":781,"code":6366,"language":783,"meta":53,"style":53},"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",[55,6368,6369,6378,6382,6394,6403,6407,6415,6419,6432,6451],{"__ignoreMap":53},[58,6370,6371,6373,6376],{"class":60,"line":61},[58,6372,796],{"class":92},[58,6374,6375],{"class":379}," test03",[58,6377,2622],{"class":75},[58,6379,6380],{"class":60,"line":68},[58,6381,2195],{"class":75},[58,6383,6384,6386,6388,6390,6392],{"class":60,"line":79},[58,6385,2200],{"class":75},[58,6387,1827],{"class":92},[58,6389,6249],{"class":386},[58,6391,1827],{"class":92},[58,6393,1849],{"class":75},[58,6395,6396,6398,6401],{"class":60,"line":105},[58,6397,4736],{"class":92},[58,6399,6400],{"class":82}," 100",[58,6402,102],{"class":75},[58,6404,6405],{"class":60,"line":627},[58,6406,108],{"class":75},[58,6408,6409,6411,6413],{"class":60,"line":509},[58,6410,796],{"class":92},[58,6412,2619],{"class":379},[58,6414,2622],{"class":75},[58,6416,6417],{"class":60,"line":559},[58,6418,2195],{"class":75},[58,6420,6421,6423,6425,6427,6430],{"class":60,"line":654},[58,6422,2631],{"class":92},[58,6424,5863],{"class":75},[58,6426,383],{"class":92},[58,6428,6429],{"class":379},"test03",[58,6431,6282],{"class":75},[58,6433,6434,6436,6438,6440,6442,6444,6446,6448],{"class":60,"line":671},[58,6435,2200],{"class":75},[58,6437,1827],{"class":92},[58,6439,6053],{"class":386},[58,6441,1827],{"class":92},[58,6443,5888],{"class":75},[58,6445,1827],{"class":92},[58,6447,1892],{"class":75},[58,6449,6450],{"class":64}," \u002F\u002F100\n",[58,6452,6453],{"class":60,"line":677},[58,6454,108],{"class":75},[175,6456,6457],{},"4.有参有返",[48,6459,6461],{"className":781,"code":6460,"language":783,"meta":53,"style":53},"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",[55,6462,6463,6478,6482,6495,6501,6505,6514,6518,6530,6544,6559],{"__ignoreMap":53},[58,6464,6465,6467,6470,6472,6474,6476],{"class":60,"line":61},[58,6466,796],{"class":92},[58,6468,6469],{"class":379}," test04",[58,6471,793],{"class":75},[58,6473,796],{"class":92},[58,6475,2048],{"class":5862},[58,6477,799],{"class":75},[58,6479,6480],{"class":60,"line":68},[58,6481,2195],{"class":75},[58,6483,6484,6486,6488,6491,6493],{"class":60,"line":79},[58,6485,2200],{"class":75},[58,6487,1827],{"class":92},[58,6489,6490],{"class":386},"\"hello\"",[58,6492,1827],{"class":92},[58,6494,1849],{"class":75},[58,6496,6497,6499],{"class":60,"line":105},[58,6498,4736],{"class":92},[58,6500,2082],{"class":75},[58,6502,6503],{"class":60,"line":627},[58,6504,108],{"class":75},[58,6506,6507,6509,6512],{"class":60,"line":509},[58,6508,796],{"class":92},[58,6510,6511],{"class":379}," mian",[58,6513,2622],{"class":75},[58,6515,6516],{"class":60,"line":559},[58,6517,2195],{"class":75},[58,6519,6520,6522,6524,6526,6528],{"class":60,"line":654},[58,6521,2631],{"class":92},[58,6523,3479],{"class":75},[58,6525,383],{"class":92},[58,6527,89],{"class":82},[58,6529,102],{"class":75},[58,6531,6532,6534,6536,6538,6541],{"class":60,"line":671},[58,6533,2631],{"class":92},[58,6535,3495],{"class":75},[58,6537,383],{"class":92},[58,6539,6540],{"class":379},"test04",[58,6542,6543],{"class":75},"(b);\n",[58,6545,6546,6548,6550,6552,6554,6556],{"class":60,"line":677},[58,6547,2200],{"class":75},[58,6549,1827],{"class":92},[58,6551,1074],{"class":75},[58,6553,1827],{"class":92},[58,6555,1892],{"class":75},[58,6557,6558],{"class":64}," \u002F\u002F1\n",[58,6560,6561],{"class":60,"line":2260},[58,6562,108],{"class":75},[14,6564,6566],{"id":6565},"_25函数的声明","2.5函数的声明",[175,6568,6569],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[175,6571,6572,6573],{},"函数的",[25,6574,6575],{},"声明可以多次，但是函数的定义只能有一次",[48,6577,6579],{"className":781,"code":6578,"language":783,"meta":53,"style":53},"\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",[55,6580,6581,6586,6591,6616,6625,6629,6641,6653,6669,6673,6693,6697,6716],{"__ignoreMap":53},[58,6582,6583],{"class":60,"line":61},[58,6584,6585],{"class":64},"\u002F\u002F函数声明\n",[58,6587,6588],{"class":60,"line":68},[58,6589,6590],{"class":64},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[58,6592,6593,6595,6598,6600,6602,6604,6606,6608,6610,6613],{"class":60,"line":79},[58,6594,796],{"class":92},[58,6596,6597],{"class":379}," max",[58,6599,793],{"class":75},[58,6601,796],{"class":92},[58,6603,2048],{"class":5862},[58,6605,1164],{"class":75},[58,6607,796],{"class":92},[58,6609,3479],{"class":5862},[58,6611,6612],{"class":75},");",[58,6614,6615],{"class":64},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[58,6617,6618,6620,6622],{"class":60,"line":105},[58,6619,796],{"class":92},[58,6621,2619],{"class":379},[58,6623,6624],{"class":75},"() \n",[58,6626,6627],{"class":60,"line":627},[58,6628,2195],{"class":75},[58,6630,6631,6633,6635,6637,6639],{"class":60,"line":509},[58,6632,2631],{"class":92},[58,6634,2048],{"class":75},[58,6636,383],{"class":92},[58,6638,1232],{"class":82},[58,6640,102],{"class":75},[58,6642,6643,6645,6647,6649,6651],{"class":60,"line":559},[58,6644,2631],{"class":92},[58,6646,3479],{"class":75},[58,6648,383],{"class":92},[58,6650,1486],{"class":82},[58,6652,102],{"class":75},[58,6654,6655,6657,6659,6662,6665,6667],{"class":60,"line":654},[58,6656,2200],{"class":75},[58,6658,1827],{"class":92},[58,6660,6661],{"class":379},"max",[58,6663,6664],{"class":75},"(a,b)",[58,6666,1827],{"class":92},[58,6668,1849],{"class":75},[58,6670,6671],{"class":60,"line":671},[58,6672,108],{"class":75},[58,6674,6675,6677,6679,6681,6683,6685,6687,6689,6691],{"class":60,"line":677},[58,6676,796],{"class":92},[58,6678,6597],{"class":379},[58,6680,793],{"class":75},[58,6682,796],{"class":92},[58,6684,2048],{"class":5862},[58,6686,1164],{"class":75},[58,6688,796],{"class":92},[58,6690,3479],{"class":5862},[58,6692,799],{"class":75},[58,6694,6695],{"class":60,"line":2260},[58,6696,2195],{"class":75},[58,6698,6699,6701,6703,6705,6707,6709,6711,6713],{"class":60,"line":694},[58,6700,4736],{"class":92},[58,6702,2048],{"class":75},[58,6704,1744],{"class":92},[58,6706,1049],{"class":75},[58,6708,1770],{"class":92},[58,6710,376],{"class":75},[58,6712,1644],{"class":92},[58,6714,6715],{"class":75},"b;\n",[58,6717,6718],{"class":60,"line":2270},[58,6719,108],{"class":75},[14,6721,6723],{"id":6722},"_26函数的分文件编写","2.6函数的分文件编写",[175,6725,6726],{},"4个步骤：",[124,6728,6729,6732,6735,6738],{},[22,6730,6731],{},"1.创建后缀名为.h的头文件",[22,6733,6734],{},"2.创建后缀名为.cpp的源文件",[22,6736,6737],{},"3.在头文件中写函数的定义",[22,6739,6740],{},"4.在源文件中写函数的定义\n示例：",[175,6742,6743],{},"头文件：swap.h",[48,6745,6747],{"className":781,"code":6746,"language":783,"meta":53,"style":53},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[55,6748,6749,6755,6765,6769],{"__ignoreMap":53},[58,6750,6751,6753],{"class":60,"line":61},[58,6752,2596],{"class":92},[58,6754,2599],{"class":386},[58,6756,6757,6759,6761,6763],{"class":60,"line":68},[58,6758,2604],{"class":92},[58,6760,2607],{"class":92},[58,6762,2610],{"class":379},[58,6764,102],{"class":75},[58,6766,6767],{"class":60,"line":79},[58,6768,6585],{"class":64},[58,6770,6771,6773,6775,6777,6779,6781,6783,6785,6787],{"class":60,"line":105},[58,6772,6010],{"class":92},[58,6774,6013],{"class":379},[58,6776,793],{"class":75},[58,6778,796],{"class":92},[58,6780,2048],{"class":5862},[58,6782,1164],{"class":75},[58,6784,796],{"class":92},[58,6786,3479],{"class":5862},[58,6788,3365],{"class":75},[175,6790,6791],{},"源文件：swap.cpp",[48,6793,6795],{"className":781,"code":6794,"language":783,"meta":53,"style":53},"#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",[55,6796,6797,6804,6809,6829,6833,6844,6853,6862,6879,6896],{"__ignoreMap":53},[58,6798,6799,6801],{"class":60,"line":61},[58,6800,2596],{"class":92},[58,6802,6803],{"class":386}," \"swap.h\"\n",[58,6805,6806],{"class":60,"line":68},[58,6807,6808],{"class":64},"\u002F\u002F函数的定义\n",[58,6810,6811,6813,6815,6817,6819,6821,6823,6825,6827],{"class":60,"line":79},[58,6812,6010],{"class":92},[58,6814,6013],{"class":379},[58,6816,793],{"class":75},[58,6818,796],{"class":92},[58,6820,2048],{"class":5862},[58,6822,1164],{"class":75},[58,6824,796],{"class":92},[58,6826,3479],{"class":5862},[58,6828,799],{"class":75},[58,6830,6831],{"class":60,"line":105},[58,6832,2195],{"class":75},[58,6834,6835,6837,6839,6841],{"class":60,"line":627},[58,6836,2631],{"class":92},[58,6838,4901],{"class":75},[58,6840,383],{"class":92},[58,6842,6843],{"class":75},"a;\n",[58,6845,6846,6849,6851],{"class":60,"line":509},[58,6847,6848],{"class":75},"    a",[58,6850,383],{"class":92},[58,6852,6715],{"class":75},[58,6854,6855,6858,6860],{"class":60,"line":559},[58,6856,6857],{"class":75},"    b",[58,6859,383],{"class":92},[58,6861,4926],{"class":75},[58,6863,6864,6866,6868,6871,6873,6875,6877],{"class":60,"line":654},[58,6865,2200],{"class":75},[58,6867,1827],{"class":92},[58,6869,6870],{"class":386},"\"a=\"",[58,6872,1827],{"class":92},[58,6874,376],{"class":75},[58,6876,1827],{"class":92},[58,6878,1849],{"class":75},[58,6880,6881,6883,6885,6888,6890,6892,6894],{"class":60,"line":671},[58,6882,2200],{"class":75},[58,6884,1827],{"class":92},[58,6886,6887],{"class":386},"\"b=\"",[58,6889,1827],{"class":92},[58,6891,1049],{"class":75},[58,6893,1827],{"class":92},[58,6895,1849],{"class":75},[58,6897,6898],{"class":60,"line":677},[58,6899,108],{"class":75},[702,6901,6902],{},"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":53,"searchDepth":68,"depth":68,"links":6904},[6905,6906,6907,6908,6909,6910],{"id":5818,"depth":68,"text":5819},{"id":5907,"depth":68,"text":5908},{"id":5990,"depth":68,"text":5991},{"id":6216,"depth":68,"text":6217},{"id":6565,"depth":68,"text":6566},{"id":6722,"depth":68,"text":6723},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5810,"description":53},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6917,"title":6918,"body":6919,"description":6926,"extension":718,"meta":8331,"navigation":720,"path":8332,"seo":8333,"stem":8334,"__hash__":8335},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6920,"toc":8321},[6921,6924,6927,6931,7093,7097,7100,7103,7106,7109,7249,7253,7256,7259,7262,7327,7331,7336,7403,7406,7410,7413,7424,7429,7449,7452,7457,7476,7479,7483,7502,7505,7509,7744,7748,7751,7754,7757,7919,7922,7926,7929,7935,8318],[10,6922,6918],{"id":6923},"_3指针",[175,6925,6926],{},"通过指针保存一个地址，指针就是个地址",[14,6928,6930],{"id":6929},"_31定义指针","3.1定义指针",[48,6932,6934],{"className":781,"code":6933,"language":783,"meta":53,"style":53},"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",[55,6935,6936,6944,6948,6953,6965,6970,6978,6988,7006,7026,7030,7035,7040,7045,7059,7075,7089],{"__ignoreMap":53},[58,6937,6938,6940,6942],{"class":60,"line":61},[58,6939,796],{"class":92},[58,6941,2619],{"class":379},[58,6943,2622],{"class":75},[58,6945,6946],{"class":60,"line":68},[58,6947,2195],{"class":75},[58,6949,6950],{"class":60,"line":79},[58,6951,6952],{"class":64},"    \u002F\u002F1.定义指针\n",[58,6954,6955,6957,6959,6961,6963],{"class":60,"line":105},[58,6956,2631],{"class":92},[58,6958,2048],{"class":75},[58,6960,383],{"class":92},[58,6962,1232],{"class":82},[58,6964,102],{"class":75},[58,6966,6967],{"class":60,"line":627},[58,6968,6969],{"class":64},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[58,6971,6972,6975],{"class":60,"line":509},[58,6973,6974],{"class":92},"    int*",[58,6976,6977],{"class":75},"p;\n",[58,6979,6980,6983,6986],{"class":60,"line":559},[58,6981,6982],{"class":75},"    p",[58,6984,6985],{"class":92},"=&",[58,6987,6843],{"class":75},[58,6989,6990,6992,6994,6997,7000,7002,7004],{"class":60,"line":654},[58,6991,2200],{"class":75},[58,6993,1827],{"class":92},[58,6995,6996],{"class":386},"\"a的地址为：\"",[58,6998,6999],{"class":92},"\u003C\u003C&",[58,7001,376],{"class":75},[58,7003,1827],{"class":92},[58,7005,1849],{"class":75},[58,7007,7008,7010,7012,7015,7017,7019,7021,7023],{"class":60,"line":671},[58,7009,2200],{"class":75},[58,7011,1827],{"class":92},[58,7013,7014],{"class":386},"\"指针p为：\"",[58,7016,1827],{"class":92},[58,7018,175],{"class":75},[58,7020,1827],{"class":92},[58,7022,1892],{"class":75},[58,7024,7025],{"class":64},"\u002F\u002F指针p表示的就是a的地址\n",[58,7027,7028],{"class":60,"line":677},[58,7029,3046],{"emptyLinePlaceholder":720},[58,7031,7032],{"class":60,"line":2260},[58,7033,7034],{"class":64},"    \u002F\u002F2.使用指针\n",[58,7036,7037],{"class":60,"line":694},[58,7038,7039],{"class":64},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[58,7041,7042],{"class":60,"line":2270},[58,7043,7044],{"class":64},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[58,7046,7047,7050,7052,7054,7057],{"class":60,"line":2275},[58,7048,7049],{"class":92},"    *",[58,7051,175],{"class":75},[58,7053,383],{"class":92},[58,7055,7056],{"class":82},"1000",[58,7058,102],{"class":75},[58,7060,7061,7063,7066,7068,7070,7072],{"class":60,"line":2289},[58,7062,2200],{"class":75},[58,7064,7065],{"class":92},"\u003C\u003C*",[58,7067,175],{"class":75},[58,7069,1827],{"class":92},[58,7071,1892],{"class":75},[58,7073,7074],{"class":64},"\u002F\u002F1000\n",[58,7076,7077,7079,7081,7083,7085,7087],{"class":60,"line":2294},[58,7078,2200],{"class":75},[58,7080,1827],{"class":92},[58,7082,376],{"class":75},[58,7084,1827],{"class":92},[58,7086,1892],{"class":75},[58,7088,7074],{"class":64},[58,7090,7091],{"class":60,"line":2300},[58,7092,108],{"class":75},[14,7094,7096],{"id":7095},"_32指针所占的内存空间","3.2指针所占的内存空间",[175,7098,7099],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[175,7101,7102],{},"在32位操作系统下：占用4个字节空间",[175,7104,7105],{},"在64位操作系统下：占用8个字节空间",[175,7107,7108],{},"上方是不管啥数据类型的",[48,7110,7112],{"className":781,"code":7111,"language":783,"meta":53,"style":53},"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",[55,7113,7114,7122,7126,7131,7143,7148,7153,7158,7171,7193,7219,7245],{"__ignoreMap":53},[58,7115,7116,7118,7120],{"class":60,"line":61},[58,7117,796],{"class":92},[58,7119,2619],{"class":379},[58,7121,2622],{"class":75},[58,7123,7124],{"class":60,"line":68},[58,7125,2195],{"class":75},[58,7127,7128],{"class":60,"line":79},[58,7129,7130],{"class":64},"    \u002F\u002F指针所占内存空间\n",[58,7132,7133,7135,7137,7139,7141],{"class":60,"line":105},[58,7134,2631],{"class":92},[58,7136,2048],{"class":75},[58,7138,383],{"class":92},[58,7140,1232],{"class":82},[58,7142,102],{"class":75},[58,7144,7145],{"class":60,"line":627},[58,7146,7147],{"class":64},"    \u002F\u002Fint *p;\n",[58,7149,7150],{"class":60,"line":509},[58,7151,7152],{"class":64},"    \u002F\u002Fp=&a;\n",[58,7154,7155],{"class":60,"line":559},[58,7156,7157],{"class":64},"    \u002F\u002F上述可以写为以下：\n",[58,7159,7160,7162,7165,7167,7169],{"class":60,"line":654},[58,7161,2631],{"class":92},[58,7163,7164],{"class":92}," *",[58,7166,175],{"class":75},[58,7168,6985],{"class":92},[58,7170,6843],{"class":75},[58,7172,7173,7176,7178,7181,7183,7186,7188,7190],{"class":60,"line":671},[58,7174,7175],{"class":75},"    cout ",[58,7177,1827],{"class":92},[58,7179,7180],{"class":386},"\"sizeof(int *)\"",[58,7182,2022],{"class":92},[58,7184,7185],{"class":75},"(p)",[58,7187,1827],{"class":92},[58,7189,1892],{"class":75},[58,7191,7192],{"class":64},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[58,7194,7195,7197,7199,7201,7203,7205,7207,7209,7211,7213,7216],{"class":60,"line":677},[58,7196,7175],{"class":75},[58,7198,1827],{"class":92},[58,7200,7180],{"class":386},[58,7202,2022],{"class":92},[58,7204,793],{"class":75},[58,7206,796],{"class":92},[58,7208,7164],{"class":92},[58,7210,1215],{"class":75},[58,7212,1827],{"class":92},[58,7214,7215],{"class":75},"endl",[58,7217,7218],{"class":64},"  \u002F\u002F4字节(32位的话)\n",[58,7220,7221,7223,7225,7228,7230,7232,7234,7236,7238,7240,7242],{"class":60,"line":2260},[58,7222,7175],{"class":75},[58,7224,1827],{"class":92},[58,7226,7227],{"class":386},"\"sizeof(char *)\"",[58,7229,2022],{"class":92},[58,7231,793],{"class":75},[58,7233,886],{"class":92},[58,7235,7164],{"class":92},[58,7237,1215],{"class":75},[58,7239,1827],{"class":92},[58,7241,1892],{"class":75},[58,7243,7244],{"class":64}," \u002F\u002F4字节(32位的话)\n",[58,7246,7247],{"class":60,"line":694},[58,7248,108],{"class":75},[14,7250,7252],{"id":7251},"_33空指针","3.3空指针",[175,7254,7255],{},"空指针：指针变量指向内存中编号为0的空间",[175,7257,7258],{},"用途：初始化指针变量",[175,7260,7261],{},"注意：空指针指向的内存是不可以访问的",[48,7263,7265],{"className":781,"code":7264,"language":783,"meta":53,"style":53},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[55,7266,7267,7275,7279,7284,7298,7303,7318,7323],{"__ignoreMap":53},[58,7268,7269,7271,7273],{"class":60,"line":61},[58,7270,796],{"class":92},[58,7272,2619],{"class":379},[58,7274,2622],{"class":75},[58,7276,7277],{"class":60,"line":68},[58,7278,2195],{"class":75},[58,7280,7281],{"class":60,"line":79},[58,7282,7283],{"class":64},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[58,7285,7286,7288,7290,7292,7294,7296],{"class":60,"line":105},[58,7287,2631],{"class":92},[58,7289,7164],{"class":92},[58,7291,175],{"class":75},[58,7293,383],{"class":92},[58,7295,3038],{"class":82},[58,7297,102],{"class":75},[58,7299,7300],{"class":60,"line":627},[58,7301,7302],{"class":64},"    \u002F\u002F2.空指针不能进行访问\n",[58,7304,7305,7307,7309,7311,7313,7315],{"class":60,"line":509},[58,7306,7049],{"class":92},[58,7308,175],{"class":75},[58,7310,383],{"class":92},[58,7312,1097],{"class":82},[58,7314,846],{"class":75},[58,7316,7317],{"class":64},"\u002F\u002F直接报错，压根不能访问\n",[58,7319,7320],{"class":60,"line":559},[58,7321,7322],{"class":64},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[58,7324,7325],{"class":60,"line":654},[58,7326,108],{"class":75},[14,7328,7330],{"id":7329},"_34野指针","3.4野指针",[175,7332,7333],{},[25,7334,7335],{},"指针变量指向非法的内存空间",[48,7337,7339],{"className":781,"code":7338,"language":783,"meta":53,"style":53},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[55,7340,7341,7349,7353,7382,7387,7399],{"__ignoreMap":53},[58,7342,7343,7345,7347],{"class":60,"line":61},[58,7344,796],{"class":92},[58,7346,2619],{"class":379},[58,7348,2622],{"class":75},[58,7350,7351],{"class":60,"line":68},[58,7352,2195],{"class":75},[58,7354,7355,7357,7359,7361,7363,7365,7367,7369,7371,7374,7377,7379],{"class":60,"line":79},[58,7356,2631],{"class":92},[58,7358,7164],{"class":92},[58,7360,175],{"class":75},[58,7362,383],{"class":92},[58,7364,793],{"class":75},[58,7366,796],{"class":92},[58,7368,7164],{"class":92},[58,7370,1215],{"class":75},[58,7372,7373],{"class":92},"0x",[58,7375,7376],{"class":82},"1100",[58,7378,846],{"class":75},[58,7380,7381],{"class":64}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[58,7383,7384],{"class":60,"line":105},[58,7385,7386],{"class":64},"    \u002F\u002F访问野指针报错\n",[58,7388,7389,7391,7393,7395,7397],{"class":60,"line":627},[58,7390,2200],{"class":75},[58,7392,7065],{"class":92},[58,7394,175],{"class":75},[58,7396,1827],{"class":92},[58,7398,1849],{"class":75},[58,7400,7401],{"class":60,"line":509},[58,7402,108],{"class":75},[175,7404,7405],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,7407,7409],{"id":7408},"_35const修饰指针","3.5const修饰指针",[175,7411,7412],{},"三种情况：",[124,7414,7415,7418,7421],{},[22,7416,7417],{},"const修饰指针 常量指针",[22,7419,7420],{},"const修饰常量 指针常量",[22,7422,7423],{},"const即修饰指针，又修饰常量",[19,7425,7426],{},[22,7427,7428],{},"常量指针",[48,7430,7432],{"className":781,"code":7431,"language":783,"meta":53,"style":53},"const int *p=&a;\n",[55,7433,7434],{"__ignoreMap":53},[58,7435,7436,7439,7441,7443,7445,7447],{"class":60,"line":61},[58,7437,7438],{"class":92},"const",[58,7440,3028],{"class":92},[58,7442,7164],{"class":92},[58,7444,175],{"class":75},[58,7446,6985],{"class":92},[58,7448,6843],{"class":75},[175,7450,7451],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[19,7453,7454],{"start":68},[22,7455,7456],{},"指针常量",[48,7458,7460],{"className":781,"code":7459,"language":783,"meta":53,"style":53},"int *const p=&a;\n",[55,7461,7462],{"__ignoreMap":53},[58,7463,7464,7466,7469,7472,7474],{"class":60,"line":61},[58,7465,796],{"class":92},[58,7467,7468],{"class":92}," *const",[58,7470,7471],{"class":75}," p",[58,7473,6985],{"class":92},[58,7475,6843],{"class":75},[175,7477,7478],{},"指针的指向不可以改，指针指向的值可以改",[19,7480,7481],{"start":79},[22,7482,7423],{},[48,7484,7486],{"className":781,"code":7485,"language":783,"meta":53,"style":53},"const int *const p=&a;\n",[55,7487,7488],{"__ignoreMap":53},[58,7489,7490,7492,7494,7496,7498,7500],{"class":60,"line":61},[58,7491,7438],{"class":92},[58,7493,3028],{"class":92},[58,7495,7468],{"class":92},[58,7497,7471],{"class":75},[58,7499,6985],{"class":92},[58,7501,6843],{"class":75},[175,7503,7504],{},"指针的指向和指针指向的值都不可以改变",[14,7506,7508],{"id":7507},"_36指针和数组","3.6指针和数组",[48,7510,7512],{"className":781,"code":7511,"language":783,"meta":53,"style":53},"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",[55,7513,7514,7522,7526,7531,7585,7606,7622,7638,7649,7666,7671,7685,7711,7715,7727,7736,7740],{"__ignoreMap":53},[58,7515,7516,7518,7520],{"class":60,"line":61},[58,7517,796],{"class":92},[58,7519,2619],{"class":379},[58,7521,2622],{"class":75},[58,7523,7524],{"class":60,"line":68},[58,7525,2195],{"class":75},[58,7527,7528],{"class":60,"line":79},[58,7529,7530],{"class":64},"    \u002F\u002F利用指针访问数组中的元素\n",[58,7532,7533,7535,7537,7539,7541,7543,7545,7547,7549,7551,7553,7555,7557,7559,7561,7563,7565,7567,7569,7571,7573,7575,7577,7579,7581,7583],{"class":60,"line":105},[58,7534,2631],{"class":92},[58,7536,4608],{"class":75},[58,7538,1232],{"class":82},[58,7540,1724],{"class":75},[58,7542,383],{"class":92},[58,7544,1681],{"class":75},[58,7546,89],{"class":82},[58,7548,1164],{"class":75},[58,7550,867],{"class":82},[58,7552,1164],{"class":75},[58,7554,861],{"class":82},[58,7556,1164],{"class":75},[58,7558,1079],{"class":82},[58,7560,1164],{"class":75},[58,7562,1105],{"class":82},[58,7564,1164],{"class":75},[58,7566,1130],{"class":82},[58,7568,1164],{"class":75},[58,7570,1155],{"class":82},[58,7572,1164],{"class":75},[58,7574,1181],{"class":82},[58,7576,1164],{"class":75},[58,7578,1206],{"class":82},[58,7580,1164],{"class":75},[58,7582,1232],{"class":82},[58,7584,4641],{"class":75},[58,7586,7587,7589,7591,7594,7596,7598,7600,7602,7604],{"class":60,"line":627},[58,7588,2200],{"class":75},[58,7590,1827],{"class":92},[58,7592,7593],{"class":386},"\"数组的第一个元素为：\"",[58,7595,1827],{"class":92},[58,7597,4552],{"class":75},[58,7599,979],{"class":82},[58,7601,1724],{"class":75},[58,7603,1827],{"class":92},[58,7605,1849],{"class":75},[58,7607,7608,7610,7612,7614,7616,7619],{"class":60,"line":509},[58,7609,2631],{"class":92},[58,7611,7164],{"class":92},[58,7613,175],{"class":75},[58,7615,383],{"class":92},[58,7617,7618],{"class":75},"arr;",[58,7620,7621],{"class":64},"\u002F\u002F注意数才要加取地址符号&\n",[58,7623,7624,7626,7628,7630,7632,7634,7636],{"class":60,"line":559},[58,7625,2200],{"class":75},[58,7627,1827],{"class":92},[58,7629,7593],{"class":386},[58,7631,7065],{"class":92},[58,7633,175],{"class":75},[58,7635,1827],{"class":92},[58,7637,1849],{"class":75},[58,7639,7640,7642,7644,7646],{"class":60,"line":654},[58,7641,6982],{"class":75},[58,7643,2938],{"class":92},[58,7645,846],{"class":75},[58,7647,7648],{"class":64}," \u002F\u002F让指针向后偏移4个字节\n",[58,7650,7651,7653,7655,7658,7660,7662,7664],{"class":60,"line":671},[58,7652,2200],{"class":75},[58,7654,1827],{"class":92},[58,7656,7657],{"class":386},"\"数组的第二个元素为：\"",[58,7659,7065],{"class":92},[58,7661,175],{"class":75},[58,7663,1827],{"class":92},[58,7665,1849],{"class":75},[58,7667,7668],{"class":60,"line":677},[58,7669,7670],{"class":64},"    \u002F\u002F利用指针遍历数组\n",[58,7672,7673,7675,7677,7680,7682],{"class":60,"line":2260},[58,7674,2631],{"class":92},[58,7676,7164],{"class":92},[58,7678,7679],{"class":75},"p2",[58,7681,383],{"class":92},[58,7683,7684],{"class":75},"arr;\n",[58,7686,7687,7689,7691,7693,7695,7697,7699,7701,7703,7705,7707,7709],{"class":60,"line":694},[58,7688,3847],{"class":92},[58,7690,2305],{"class":75},[58,7692,796],{"class":92},[58,7694,3678],{"class":75},[58,7696,383],{"class":92},[58,7698,979],{"class":82},[58,7700,3685],{"class":75},[58,7702,373],{"class":92},[58,7704,1232],{"class":82},[58,7706,3685],{"class":75},[58,7708,2938],{"class":92},[58,7710,799],{"class":75},[58,7712,7713],{"class":60,"line":2270},[58,7714,2676],{"class":75},[58,7716,7717,7719,7721,7723,7725],{"class":60,"line":2275},[58,7718,4097],{"class":75},[58,7720,7065],{"class":92},[58,7722,7679],{"class":75},[58,7724,1827],{"class":92},[58,7726,1849],{"class":75},[58,7728,7729,7732,7734],{"class":60,"line":2289},[58,7730,7731],{"class":75},"        p2",[58,7733,2938],{"class":92},[58,7735,102],{"class":75},[58,7737,7738],{"class":60,"line":2294},[58,7739,2833],{"class":75},[58,7741,7742],{"class":60,"line":2300},[58,7743,108],{"class":75},[14,7745,7747],{"id":7746},"_37指针和函数","3.7指针和函数",[175,7749,7750],{},"利用指针做函数参数，可以修改实参的值",[175,7752,7753],{},"值传递：只改变形参，不改变实参",[175,7755,7756],{},"地址传递：",[48,7758,7760],{"className":781,"code":7759,"language":783,"meta":53,"style":53},"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",[55,7761,7762,7787,7791,7803,7814,7824,7828,7836,7840,7852,7864,7869,7885,7900,7915],{"__ignoreMap":53},[58,7763,7764,7766,7768,7770,7772,7774,7777,7779,7781,7783,7785],{"class":60,"line":61},[58,7765,6010],{"class":92},[58,7767,6013],{"class":379},[58,7769,793],{"class":75},[58,7771,796],{"class":92},[58,7773,7164],{"class":92},[58,7775,7776],{"class":5862},"p1",[58,7778,1164],{"class":75},[58,7780,796],{"class":92},[58,7782,7164],{"class":92},[58,7784,7679],{"class":5862},[58,7786,799],{"class":75},[58,7788,7789],{"class":60,"line":68},[58,7790,2195],{"class":75},[58,7792,7793,7795,7797,7800],{"class":60,"line":79},[58,7794,2631],{"class":92},[58,7796,4901],{"class":75},[58,7798,7799],{"class":92},"=*",[58,7801,7802],{"class":75},"p1;\n",[58,7804,7805,7807,7809,7811],{"class":60,"line":105},[58,7806,7049],{"class":92},[58,7808,7776],{"class":75},[58,7810,7799],{"class":92},[58,7812,7813],{"class":75},"p2;\n",[58,7815,7816,7818,7820,7822],{"class":60,"line":627},[58,7817,7049],{"class":92},[58,7819,7679],{"class":75},[58,7821,383],{"class":92},[58,7823,4926],{"class":75},[58,7825,7826],{"class":60,"line":509},[58,7827,108],{"class":75},[58,7829,7830,7832,7834],{"class":60,"line":559},[58,7831,796],{"class":92},[58,7833,2619],{"class":379},[58,7835,2622],{"class":75},[58,7837,7838],{"class":60,"line":654},[58,7839,2195],{"class":75},[58,7841,7842,7844,7846,7848,7850],{"class":60,"line":671},[58,7843,2631],{"class":92},[58,7845,2048],{"class":75},[58,7847,383],{"class":92},[58,7849,1232],{"class":82},[58,7851,102],{"class":75},[58,7853,7854,7856,7858,7860,7862],{"class":60,"line":677},[58,7855,2631],{"class":92},[58,7857,3479],{"class":75},[58,7859,383],{"class":92},[58,7861,1486],{"class":82},[58,7863,102],{"class":75},[58,7865,7866],{"class":60,"line":2260},[58,7867,7868],{"class":64},"    \u002F\u002F地址传递\n",[58,7870,7871,7873,7875,7877,7880,7882],{"class":60,"line":694},[58,7872,6207],{"class":379},[58,7874,793],{"class":75},[58,7876,1139],{"class":92},[58,7878,7879],{"class":75},"a,",[58,7881,1139],{"class":92},[58,7883,7884],{"class":75},"b);\n",[58,7886,7887,7889,7891,7893,7895,7897],{"class":60,"line":2270},[58,7888,2200],{"class":75},[58,7890,1827],{"class":92},[58,7892,376],{"class":75},[58,7894,1827],{"class":92},[58,7896,1892],{"class":75},[58,7898,7899],{"class":64},"\u002F\u002F20\n",[58,7901,7902,7904,7906,7908,7910,7912],{"class":60,"line":2275},[58,7903,2200],{"class":75},[58,7905,1827],{"class":92},[58,7907,1049],{"class":75},[58,7909,1827],{"class":92},[58,7911,1892],{"class":75},[58,7913,7914],{"class":64},"\u002F\u002F10\n",[58,7916,7917],{"class":60,"line":2289},[58,7918,108],{"class":75},[175,7920,7921],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,7923,7925],{"id":7924},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[175,7927,7928],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[175,7930,7931,7932,7934],{},"例如数组：int arr",[58,7933,1232],{},"={4,3,6,9,1,2,10,8,7,5}",[48,7936,7938],{"className":781,"code":7937,"language":783,"meta":53,"style":53},"#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",[55,7939,7940,7946,7956,7980,7984,8015,8019,8053,8057,8075,8079,8090,8105,8120,8124,8128,8132,8136,8140,8148,8152,8157,8211,8223,8235,8240,8248,8252,8257,8282,8286,8301,8310,8314],{"__ignoreMap":53},[58,7941,7942,7944],{"class":60,"line":61},[58,7943,2596],{"class":92},[58,7945,2599],{"class":386},[58,7947,7948,7950,7952,7954],{"class":60,"line":68},[58,7949,2604],{"class":92},[58,7951,2607],{"class":92},[58,7953,2610],{"class":379},[58,7955,102],{"class":75},[58,7957,7958,7960,7963,7965,7967,7969,7971,7973,7975,7978],{"class":60,"line":79},[58,7959,6010],{"class":92},[58,7961,7962],{"class":379}," bubbleSort",[58,7964,793],{"class":75},[58,7966,796],{"class":92},[58,7968,7164],{"class":92},[58,7970,175],{"class":5862},[58,7972,1164],{"class":75},[58,7974,796],{"class":92},[58,7976,7977],{"class":5862}," len",[58,7979,799],{"class":75},[58,7981,7982],{"class":60,"line":105},[58,7983,2195],{"class":75},[58,7985,7986,7988,7990,7992,7994,7996,7998,8000,8002,8005,8007,8009,8011,8013],{"class":60,"line":627},[58,7987,3847],{"class":92},[58,7989,793],{"class":75},[58,7991,796],{"class":92},[58,7993,3678],{"class":75},[58,7995,383],{"class":92},[58,7997,979],{"class":82},[58,7999,3685],{"class":75},[58,8001,373],{"class":92},[58,8003,8004],{"class":75},"len",[58,8006,1318],{"class":92},[58,8008,89],{"class":82},[58,8010,3685],{"class":75},[58,8012,2938],{"class":92},[58,8014,799],{"class":75},[58,8016,8017],{"class":60,"line":509},[58,8018,2676],{"class":75},[58,8020,8021,8023,8025,8027,8029,8031,8033,8035,8037,8039,8041,8043,8045,8047,8049,8051],{"class":60,"line":559},[58,8022,4049],{"class":92},[58,8024,793],{"class":75},[58,8026,796],{"class":92},[58,8028,4056],{"class":75},[58,8030,383],{"class":92},[58,8032,979],{"class":82},[58,8034,4063],{"class":75},[58,8036,373],{"class":92},[58,8038,8004],{"class":75},[58,8040,1318],{"class":92},[58,8042,1227],{"class":75},[58,8044,1318],{"class":92},[58,8046,89],{"class":82},[58,8048,4063],{"class":75},[58,8050,2938],{"class":92},[58,8052,799],{"class":75},[58,8054,8055],{"class":60,"line":654},[58,8056,3156],{"class":75},[58,8058,8059,8061,8064,8066,8069,8071,8073],{"class":60,"line":671},[58,8060,5288],{"class":92},[58,8062,8063],{"class":75},"(p[j]",[58,8065,1744],{"class":92},[58,8067,8068],{"class":75},"p[j",[58,8070,1267],{"class":92},[58,8072,89],{"class":82},[58,8074,5303],{"class":75},[58,8076,8077],{"class":60,"line":677},[58,8078,5308],{"class":75},[58,8080,8081,8083,8085,8087],{"class":60,"line":2260},[58,8082,5313],{"class":92},[58,8084,4901],{"class":75},[58,8086,383],{"class":92},[58,8088,8089],{"class":75},"p[j];\n",[58,8091,8092,8095,8097,8099,8101,8103],{"class":60,"line":694},[58,8093,8094],{"class":75},"                p[j]",[58,8096,383],{"class":92},[58,8098,8068],{"class":75},[58,8100,1267],{"class":92},[58,8102,89],{"class":82},[58,8104,5336],{"class":75},[58,8106,8107,8110,8112,8114,8116,8118],{"class":60,"line":2270},[58,8108,8109],{"class":75},"                p[j",[58,8111,1267],{"class":92},[58,8113,89],{"class":82},[58,8115,1724],{"class":75},[58,8117,383],{"class":92},[58,8119,4926],{"class":75},[58,8121,8122],{"class":60,"line":2275},[58,8123,5356],{"class":75},[58,8125,8126],{"class":60,"line":2289},[58,8127,3175],{"class":75},[58,8129,8130],{"class":60,"line":2294},[58,8131,2833],{"class":75},[58,8133,8134],{"class":60,"line":2300},[58,8135,108],{"class":75},[58,8137,8138],{"class":60,"line":2321},[58,8139,3046],{"emptyLinePlaceholder":720},[58,8141,8142,8144,8146],{"class":60,"line":2326},[58,8143,796],{"class":92},[58,8145,2619],{"class":379},[58,8147,2622],{"class":75},[58,8149,8150],{"class":60,"line":2340},[58,8151,2195],{"class":75},[58,8153,8154],{"class":60,"line":2345},[58,8155,8156],{"class":64},"    \u002F\u002F 1.创建数组\n",[58,8158,8159,8161,8163,8165,8167,8169,8171,8173,8175,8177,8179,8181,8183,8185,8187,8189,8191,8193,8195,8197,8199,8201,8203,8205,8207,8209],{"class":60,"line":2374},[58,8160,2631],{"class":92},[58,8162,4608],{"class":75},[58,8164,1232],{"class":82},[58,8166,1724],{"class":75},[58,8168,383],{"class":92},[58,8170,1681],{"class":75},[58,8172,1079],{"class":82},[58,8174,1164],{"class":75},[58,8176,861],{"class":82},[58,8178,1164],{"class":75},[58,8180,1130],{"class":82},[58,8182,1164],{"class":75},[58,8184,1206],{"class":82},[58,8186,1164],{"class":75},[58,8188,89],{"class":82},[58,8190,1164],{"class":75},[58,8192,867],{"class":82},[58,8194,1164],{"class":75},[58,8196,1232],{"class":82},[58,8198,1164],{"class":75},[58,8200,1181],{"class":82},[58,8202,1164],{"class":75},[58,8204,1155],{"class":82},[58,8206,1164],{"class":75},[58,8208,1105],{"class":82},[58,8210,4641],{"class":75},[58,8212,8213,8215,8217,8219,8221],{"class":60,"line":2379},[58,8214,2631],{"class":92},[58,8216,7977],{"class":75},[58,8218,383],{"class":92},[58,8220,1232],{"class":82},[58,8222,102],{"class":75},[58,8224,8225,8227,8229,8231,8233],{"class":60,"line":2396},[58,8226,2631],{"class":92},[58,8228,7164],{"class":92},[58,8230,175],{"class":75},[58,8232,383],{"class":92},[58,8234,7684],{"class":75},[58,8236,8237],{"class":60,"line":2401},[58,8238,8239],{"class":64},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[58,8241,8242,8245],{"class":60,"line":2406},[58,8243,8244],{"class":379},"    bubbleSort",[58,8246,8247],{"class":75},"(p,len);\n",[58,8249,8250],{"class":60,"line":2411},[58,8251,3046],{"emptyLinePlaceholder":720},[58,8253,8254],{"class":60,"line":2425},[58,8255,8256],{"class":64},"    \u002F\u002F 3.打印排序后的数组\n",[58,8258,8259,8261,8263,8265,8267,8269,8271,8273,8275,8278,8280],{"class":60,"line":2430},[58,8260,3847],{"class":92},[58,8262,2305],{"class":75},[58,8264,796],{"class":92},[58,8266,3678],{"class":75},[58,8268,383],{"class":92},[58,8270,979],{"class":82},[58,8272,3860],{"class":75},[58,8274,373],{"class":92},[58,8276,8277],{"class":75},"len; i",[58,8279,2938],{"class":92},[58,8281,799],{"class":75},[58,8283,8284],{"class":60,"line":3223},[58,8285,2676],{"class":75},[58,8287,8288,8290,8292,8294,8296,8299],{"class":60,"line":3237},[58,8289,4097],{"class":75},[58,8291,7065],{"class":92},[58,8293,175],{"class":75},[58,8295,1827],{"class":92},[58,8297,8298],{"class":386},"\"\"",[58,8300,102],{"class":75},[58,8302,8303,8306,8308],{"class":60,"line":3245},[58,8304,8305],{"class":75},"        p",[58,8307,2938],{"class":92},[58,8309,102],{"class":75},[58,8311,8312],{"class":60,"line":3250},[58,8313,2833],{"class":75},[58,8315,8316],{"class":60,"line":3256},[58,8317,108],{"class":75},[702,8319,8320],{},"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":53,"searchDepth":68,"depth":68,"links":8322},[8323,8324,8325,8326,8327,8328,8329,8330],{"id":6929,"depth":68,"text":6930},{"id":7095,"depth":68,"text":7096},{"id":7251,"depth":68,"text":7252},{"id":7329,"depth":68,"text":7330},{"id":7408,"depth":68,"text":7409},{"id":7507,"depth":68,"text":7508},{"id":7746,"depth":68,"text":7747},{"id":7924,"depth":68,"text":7925},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6918,"description":6926},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8337,"title":8338,"body":8339,"description":8346,"extension":718,"meta":11319,"navigation":720,"path":11320,"seo":11321,"stem":11322,"__hash__":11323},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8340,"toc":11310},[8341,8344,8347,8351,8354,8357,8368,8706,8709,8713,8716,8723,8978,8982,8985,8988,9143,9147,9150,9153,9359,9363,9366,9669,9671,9679,9683,9686,9837,9839,9850,9907,9911,9916,10573,10581,10584,10678,10681,11301,11307],[10,8342,8338],{"id":8343},"_4结构体",[175,8345,8346],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,8348,8350],{"id":8349},"_41结构体定义与使用","4.1结构体定义与使用",[175,8352,8353],{},"语法：struct 结构体名 {结构体成员列表}；",[175,8355,8356],{},"通过结构体创建变量的方式：",[124,8358,8359,8362,8365],{},[22,8360,8361],{},"struct 结构体名 变量名",[22,8363,8364],{},"struct 结构体名 变量名={成员1值，成员2值...}",[22,8366,8367],{},"定义结构体时顺便创建变量",[48,8369,8371],{"className":781,"code":8370,"language":783,"meta":53,"style":53},"#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",[55,8372,8373,8379,8389,8396,8401,8409,8413,8418,8422,8427,8432,8437,8444,8449,8456,8460,8467,8471,8475,8479,8483,8487,8491,8497,8501,8507,8515,8523,8527,8532,8537,8548,8553,8565,8576,8587,8592,8616,8621,8627,8654,8659,8665,8677,8689,8701],{"__ignoreMap":53},[58,8374,8375,8377],{"class":60,"line":61},[58,8376,2596],{"class":92},[58,8378,2599],{"class":386},[58,8380,8381,8383,8385,8387],{"class":60,"line":68},[58,8382,2604],{"class":92},[58,8384,2607],{"class":92},[58,8386,2610],{"class":379},[58,8388,102],{"class":75},[58,8390,8391,8393],{"class":60,"line":79},[58,8392,2596],{"class":92},[58,8394,8395],{"class":386},"\u003Cstring>\n",[58,8397,8398],{"class":60,"line":105},[58,8399,8400],{"class":64},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[58,8402,8403,8406],{"class":60,"line":627},[58,8404,8405],{"class":92},"struct",[58,8407,8408],{"class":379}," Student\n",[58,8410,8411],{"class":60,"line":509},[58,8412,2195],{"class":75},[58,8414,8415],{"class":60,"line":559},[58,8416,8417],{"class":64},"    \u002F\u002F成员列表\n",[58,8419,8420],{"class":60,"line":654},[58,8421,3046],{"emptyLinePlaceholder":720},[58,8423,8424],{"class":60,"line":671},[58,8425,8426],{"class":64},"    \u002F\u002F姓名\n",[58,8428,8429],{"class":60,"line":677},[58,8430,8431],{"class":75},"    string name;\n",[58,8433,8434],{"class":60,"line":2260},[58,8435,8436],{"class":64},"    \u002F\u002F年龄\n",[58,8438,8439,8441],{"class":60,"line":694},[58,8440,2631],{"class":92},[58,8442,8443],{"class":75}," age;\n",[58,8445,8446],{"class":60,"line":2270},[58,8447,8448],{"class":64},"    \u002F\u002F分数\n",[58,8450,8451,8453],{"class":60,"line":2275},[58,8452,2631],{"class":92},[58,8454,8455],{"class":75}," score;\n",[58,8457,8458],{"class":60,"line":2289},[58,8459,4641],{"class":75},[58,8461,8462,8464],{"class":60,"line":2294},[58,8463,8405],{"class":92},[58,8465,8466],{"class":379}," School\n",[58,8468,8469],{"class":60,"line":2300},[58,8470,2195],{"class":75},[58,8472,8473],{"class":60,"line":2321},[58,8474,8417],{"class":64},[58,8476,8477],{"class":60,"line":2326},[58,8478,3046],{"emptyLinePlaceholder":720},[58,8480,8481],{"class":60,"line":2340},[58,8482,8426],{"class":64},[58,8484,8485],{"class":60,"line":2345},[58,8486,8431],{"class":75},[58,8488,8489],{"class":60,"line":2374},[58,8490,8436],{"class":64},[58,8492,8493,8495],{"class":60,"line":2379},[58,8494,2631],{"class":92},[58,8496,8443],{"class":75},[58,8498,8499],{"class":60,"line":2396},[58,8500,8448],{"class":64},[58,8502,8503,8505],{"class":60,"line":2401},[58,8504,2631],{"class":92},[58,8506,8455],{"class":75},[58,8508,8509,8512],{"class":60,"line":2406},[58,8510,8511],{"class":75},"} s3;",[58,8513,8514],{"class":64}," \u002F\u002F创建结构体时就创建了变量\n",[58,8516,8517,8519,8521],{"class":60,"line":2411},[58,8518,796],{"class":92},[58,8520,2619],{"class":379},[58,8522,2622],{"class":75},[58,8524,8525],{"class":60,"line":2425},[58,8526,2195],{"class":75},[58,8528,8529],{"class":60,"line":2430},[58,8530,8531],{"class":64},"    \u002F\u002F2.通过学生类型创建具体学生\n",[58,8533,8534],{"class":60,"line":3223},[58,8535,8536],{"class":64},"    \u002F\u002F2.1 struct Student s1;\n",[58,8538,8539,8542,8545],{"class":60,"line":3237},[58,8540,8541],{"class":92},"    struct",[58,8543,8544],{"class":379}," Student",[58,8546,8547],{"class":75}," s1;\n",[58,8549,8550],{"class":60,"line":3245},[58,8551,8552],{"class":64},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[58,8554,8555,8558,8560,8563],{"class":60,"line":3250},[58,8556,8557],{"class":75},"    s1.name",[58,8559,383],{"class":92},[58,8561,8562],{"class":386},"\"张三\"",[58,8564,102],{"class":75},[58,8566,8567,8570,8572,8574],{"class":60,"line":3256},[58,8568,8569],{"class":75},"    s1.age",[58,8571,383],{"class":92},[58,8573,1436],{"class":82},[58,8575,102],{"class":75},[58,8577,8578,8581,8583,8585],{"class":60,"line":3262},[58,8579,8580],{"class":75},"    s1.score",[58,8582,383],{"class":92},[58,8584,1040],{"class":82},[58,8586,102],{"class":75},[58,8588,8589],{"class":60,"line":3267},[58,8590,8591],{"class":64},"    \u002F\u002F输出结果\n",[58,8593,8595,8597,8599,8602,8604,8607,8609,8612,8614],{"class":60,"line":8594},37,[58,8596,2200],{"class":75},[58,8598,1827],{"class":92},[58,8600,8601],{"class":75},"s1.name",[58,8603,1827],{"class":92},[58,8605,8606],{"class":75},"s1.age",[58,8608,1827],{"class":92},[58,8610,8611],{"class":75},"s1.score",[58,8613,1827],{"class":92},[58,8615,1849],{"class":75},[58,8617,8619],{"class":60,"line":8618},38,[58,8620,3046],{"emptyLinePlaceholder":720},[58,8622,8624],{"class":60,"line":8623},39,[58,8625,8626],{"class":64},"    \u002F\u002F2.2 struct Student s2={...}\n",[58,8628,8630,8632,8634,8637,8639,8641,8644,8646,8648,8650,8652],{"class":60,"line":8629},40,[58,8631,8541],{"class":92},[58,8633,8544],{"class":379},[58,8635,8636],{"class":75}," s2",[58,8638,383],{"class":92},[58,8640,1681],{"class":75},[58,8642,8643],{"class":386},"\"王五\"",[58,8645,1164],{"class":75},[58,8647,1436],{"class":82},[58,8649,1164],{"class":75},[58,8651,1040],{"class":82},[58,8653,4641],{"class":75},[58,8655,8657],{"class":60,"line":8656},41,[58,8658,3046],{"emptyLinePlaceholder":720},[58,8660,8662],{"class":60,"line":8661},42,[58,8663,8664],{"class":64},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[58,8666,8668,8671,8673,8675],{"class":60,"line":8667},43,[58,8669,8670],{"class":75},"    s3.name",[58,8672,383],{"class":92},[58,8674,4324],{"class":386},[58,8676,102],{"class":75},[58,8678,8680,8683,8685,8687],{"class":60,"line":8679},44,[58,8681,8682],{"class":75},"    s3.age",[58,8684,383],{"class":92},[58,8686,1436],{"class":82},[58,8688,102],{"class":75},[58,8690,8692,8695,8697,8699],{"class":60,"line":8691},45,[58,8693,8694],{"class":75},"    s3.score",[58,8696,383],{"class":92},[58,8698,1486],{"class":82},[58,8700,102],{"class":75},[58,8702,8704],{"class":60,"line":8703},46,[58,8705,108],{"class":75},[175,8707,8708],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8710,8712],{"id":8711},"_42结构体数组","4.2结构体数组",[175,8714,8715],{},"将自定义的结构体放入到数组中方便维护",[175,8717,8718,8719,8722],{},"语法：struct 结构体名 数组名",[58,8720,8721],{},"元素个数","={ {}，{},...{} };",[48,8724,8726],{"className":781,"code":8725,"language":783,"meta":53,"style":53},"#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",[55,8727,8728,8734,8744,8750,8755,8761,8765,8769,8775,8781,8785,8789,8797,8801,8806,8821,8825,8841,8857,8861,8866,8882,8897,8912,8917,8943,8947,8970,8974],{"__ignoreMap":53},[58,8729,8730,8732],{"class":60,"line":61},[58,8731,2596],{"class":92},[58,8733,2599],{"class":386},[58,8735,8736,8738,8740,8742],{"class":60,"line":68},[58,8737,2604],{"class":92},[58,8739,2607],{"class":92},[58,8741,2610],{"class":379},[58,8743,102],{"class":75},[58,8745,8746,8748],{"class":60,"line":79},[58,8747,2596],{"class":92},[58,8749,8395],{"class":386},[58,8751,8752],{"class":60,"line":105},[58,8753,8754],{"class":64},"\u002F\u002F1.定义结构体\n",[58,8756,8757,8759],{"class":60,"line":627},[58,8758,8405],{"class":92},[58,8760,8408],{"class":379},[58,8762,8763],{"class":60,"line":509},[58,8764,2195],{"class":75},[58,8766,8767],{"class":60,"line":559},[58,8768,8431],{"class":75},[58,8770,8771,8773],{"class":60,"line":654},[58,8772,2631],{"class":92},[58,8774,8443],{"class":75},[58,8776,8777,8779],{"class":60,"line":671},[58,8778,2631],{"class":92},[58,8780,8455],{"class":75},[58,8782,8783],{"class":60,"line":677},[58,8784,3046],{"emptyLinePlaceholder":720},[58,8786,8787],{"class":60,"line":2260},[58,8788,4641],{"class":75},[58,8790,8791,8793,8795],{"class":60,"line":694},[58,8792,796],{"class":92},[58,8794,2619],{"class":379},[58,8796,2622],{"class":75},[58,8798,8799],{"class":60,"line":2270},[58,8800,2195],{"class":75},[58,8802,8803],{"class":60,"line":2275},[58,8804,8805],{"class":64},"    \u002F\u002F2.创建结构体数组\n",[58,8807,8808,8810,8812,8815,8817,8819],{"class":60,"line":2289},[58,8809,8541],{"class":92},[58,8811,8544],{"class":379},[58,8813,8814],{"class":75}," stuArray[",[58,8816,867],{"class":82},[58,8818,1724],{"class":75},[58,8820,5554],{"class":92},[58,8822,8823],{"class":60,"line":2294},[58,8824,2676],{"class":75},[58,8826,8827,8829,8831,8833,8835,8837,8839],{"class":60,"line":2300},[58,8828,5563],{"class":75},[58,8830,8562],{"class":386},[58,8832,1164],{"class":75},[58,8834,1436],{"class":82},[58,8836,1164],{"class":75},[58,8838,1097],{"class":82},[58,8840,5576],{"class":75},[58,8842,8843,8845,8847,8849,8851,8853,8855],{"class":60,"line":2321},[58,8844,5563],{"class":75},[58,8846,4324],{"class":386},[58,8848,1164],{"class":75},[58,8850,1361],{"class":82},[58,8852,1164],{"class":75},[58,8854,1361],{"class":82},[58,8856,108],{"class":75},[58,8858,8859],{"class":60,"line":2326},[58,8860,2833],{"class":75},[58,8862,8863],{"class":60,"line":2340},[58,8864,8865],{"class":64},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[58,8867,8868,8871,8873,8876,8878,8880],{"class":60,"line":2345},[58,8869,8870],{"class":75},"    stuArray[",[58,8872,89],{"class":82},[58,8874,8875],{"class":75},"].name",[58,8877,383],{"class":92},[58,8879,4347],{"class":386},[58,8881,102],{"class":75},[58,8883,8884,8886,8888,8891,8893,8895],{"class":60,"line":2374},[58,8885,8870],{"class":75},[58,8887,89],{"class":82},[58,8889,8890],{"class":75},"].age",[58,8892,383],{"class":92},[58,8894,867],{"class":82},[58,8896,102],{"class":75},[58,8898,8899,8901,8903,8906,8908,8910],{"class":60,"line":2379},[58,8900,8870],{"class":75},[58,8902,89],{"class":82},[58,8904,8905],{"class":75},"].score",[58,8907,383],{"class":92},[58,8909,867],{"class":82},[58,8911,102],{"class":75},[58,8913,8914],{"class":60,"line":2396},[58,8915,8916],{"class":64},"    \u002F\u002F4.遍历结构体数组\n",[58,8918,8919,8921,8923,8925,8927,8929,8931,8933,8935,8937,8939,8941],{"class":60,"line":2401},[58,8920,3847],{"class":92},[58,8922,2305],{"class":75},[58,8924,796],{"class":92},[58,8926,3678],{"class":75},[58,8928,383],{"class":92},[58,8930,979],{"class":82},[58,8932,3685],{"class":75},[58,8934,373],{"class":92},[58,8936,867],{"class":82},[58,8938,3685],{"class":75},[58,8940,2938],{"class":92},[58,8942,799],{"class":75},[58,8944,8945],{"class":60,"line":2406},[58,8946,2676],{"class":75},[58,8948,8949,8951,8953,8956,8958,8961,8963,8966,8968],{"class":60,"line":2411},[58,8950,4097],{"class":75},[58,8952,1827],{"class":92},[58,8954,8955],{"class":75},"stuArray[i].name",[58,8957,1827],{"class":92},[58,8959,8960],{"class":75},"stuArray[i].age",[58,8962,1827],{"class":92},[58,8964,8965],{"class":75},"stuArray[i].score",[58,8967,1827],{"class":92},[58,8969,1849],{"class":75},[58,8971,8972],{"class":60,"line":2425},[58,8973,2833],{"class":75},[58,8975,8976],{"class":60,"line":2430},[58,8977,108],{"class":75},[14,8979,8981],{"id":8980},"_43结构体指针","4.3结构体指针",[175,8983,8984],{},"作用：通过指针访问结构体中的成员",[175,8986,8987],{},"利用操作符->可以通过结构体指针访问结构体属性",[48,8989,8991],{"className":781,"code":8990,"language":783,"meta":53,"style":53},"#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",[55,8992,8993,8999,9009,9015,9019,9025,9029,9033,9039,9045,9049,9057,9061,9066,9091,9096,9111,9116,9139],{"__ignoreMap":53},[58,8994,8995,8997],{"class":60,"line":61},[58,8996,2596],{"class":92},[58,8998,2599],{"class":386},[58,9000,9001,9003,9005,9007],{"class":60,"line":68},[58,9002,2604],{"class":92},[58,9004,2607],{"class":92},[58,9006,2610],{"class":379},[58,9008,102],{"class":75},[58,9010,9011,9013],{"class":60,"line":79},[58,9012,2596],{"class":92},[58,9014,8395],{"class":386},[58,9016,9017],{"class":60,"line":105},[58,9018,8754],{"class":64},[58,9020,9021,9023],{"class":60,"line":627},[58,9022,8405],{"class":92},[58,9024,8408],{"class":379},[58,9026,9027],{"class":60,"line":509},[58,9028,2195],{"class":75},[58,9030,9031],{"class":60,"line":559},[58,9032,8431],{"class":75},[58,9034,9035,9037],{"class":60,"line":654},[58,9036,2631],{"class":92},[58,9038,8443],{"class":75},[58,9040,9041,9043],{"class":60,"line":671},[58,9042,2631],{"class":92},[58,9044,8455],{"class":75},[58,9046,9047],{"class":60,"line":677},[58,9048,4641],{"class":75},[58,9050,9051,9053,9055],{"class":60,"line":2260},[58,9052,796],{"class":92},[58,9054,2619],{"class":379},[58,9056,2622],{"class":75},[58,9058,9059],{"class":60,"line":694},[58,9060,2195],{"class":75},[58,9062,9063],{"class":60,"line":2270},[58,9064,9065],{"class":64},"    \u002F\u002F创建学生结构体变量\n",[58,9067,9068,9070,9072,9075,9077,9079,9081,9083,9085,9087,9089],{"class":60,"line":2275},[58,9069,8541],{"class":92},[58,9071,8544],{"class":379},[58,9073,9074],{"class":75}," s",[58,9076,383],{"class":92},[58,9078,1681],{"class":75},[58,9080,8562],{"class":386},[58,9082,1164],{"class":75},[58,9084,1436],{"class":82},[58,9086,1164],{"class":75},[58,9088,2369],{"class":82},[58,9090,4641],{"class":75},[58,9092,9093],{"class":60,"line":2289},[58,9094,9095],{"class":64},"    \u002F\u002F通过指针指向结构体变量\n",[58,9097,9098,9100,9102,9104,9106,9108],{"class":60,"line":2294},[58,9099,8541],{"class":92},[58,9101,8544],{"class":379},[58,9103,7164],{"class":92},[58,9105,175],{"class":75},[58,9107,6985],{"class":92},[58,9109,9110],{"class":75},"s\n",[58,9112,9113],{"class":60,"line":2300},[58,9114,9115],{"class":64},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[58,9117,9118,9120,9122,9125,9127,9130,9132,9135,9137],{"class":60,"line":2321},[58,9119,2200],{"class":75},[58,9121,1827],{"class":92},[58,9123,9124],{"class":75},"p->name",[58,9126,1827],{"class":92},[58,9128,9129],{"class":75},"p->age",[58,9131,1827],{"class":92},[58,9133,9134],{"class":75},"p->score",[58,9136,1827],{"class":92},[58,9138,1849],{"class":75},[58,9140,9141],{"class":60,"line":2326},[58,9142,108],{"class":75},[14,9144,9146],{"id":9145},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[175,9148,9149],{},"作用：结构体中的成员可以是另一个结构体",[175,9151,9152],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[48,9154,9156],{"className":781,"code":9155,"language":783,"meta":53,"style":53},"#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",[55,9157,9158,9164,9174,9180,9185,9193,9197,9201,9207,9213,9217,9222,9229,9233,9240,9244,9250,9255,9259,9267,9271,9276,9281,9286,9297,9309,9320,9333,9344,9355],{"__ignoreMap":53},[58,9159,9160,9162],{"class":60,"line":61},[58,9161,2596],{"class":92},[58,9163,2599],{"class":386},[58,9165,9166,9168,9170,9172],{"class":60,"line":68},[58,9167,2604],{"class":92},[58,9169,2607],{"class":92},[58,9171,2610],{"class":379},[58,9173,102],{"class":75},[58,9175,9176,9178],{"class":60,"line":79},[58,9177,2596],{"class":92},[58,9179,8395],{"class":386},[58,9181,9182],{"class":60,"line":105},[58,9183,9184],{"class":64},"\u002F\u002F定义学生结构体\n",[58,9186,9187,9189,9191],{"class":60,"line":627},[58,9188,8405],{"class":92},[58,9190,8544],{"class":379},[58,9192,3320],{"class":75},[58,9194,9195],{"class":60,"line":509},[58,9196,2195],{"class":75},[58,9198,9199],{"class":60,"line":559},[58,9200,8431],{"class":75},[58,9202,9203,9205],{"class":60,"line":654},[58,9204,2631],{"class":92},[58,9206,8443],{"class":75},[58,9208,9209,9211],{"class":60,"line":671},[58,9210,2631],{"class":92},[58,9212,8455],{"class":75},[58,9214,9215],{"class":60,"line":677},[58,9216,108],{"class":75},[58,9218,9219],{"class":60,"line":2260},[58,9220,9221],{"class":64},"\u002F\u002F定义老师结构体\n",[58,9223,9224,9226],{"class":60,"line":694},[58,9225,8405],{"class":92},[58,9227,9228],{"class":379}," Teacher\n",[58,9230,9231],{"class":60,"line":2270},[58,9232,2195],{"class":75},[58,9234,9235,9237],{"class":60,"line":2275},[58,9236,2631],{"class":92},[58,9238,9239],{"class":75}," id;\n",[58,9241,9242],{"class":60,"line":2289},[58,9243,8431],{"class":75},[58,9245,9246,9248],{"class":60,"line":2294},[58,9247,2631],{"class":92},[58,9249,8443],{"class":75},[58,9251,9252],{"class":60,"line":2300},[58,9253,9254],{"class":75},"    Student stu;\n",[58,9256,9257],{"class":60,"line":2321},[58,9258,108],{"class":75},[58,9260,9261,9263,9265],{"class":60,"line":2326},[58,9262,796],{"class":92},[58,9264,2619],{"class":379},[58,9266,6624],{"class":75},[58,9268,9269],{"class":60,"line":2340},[58,9270,2195],{"class":75},[58,9272,9273],{"class":60,"line":2345},[58,9274,9275],{"class":64},"    \u002F\u002F结构体嵌套结构体\n",[58,9277,9278],{"class":60,"line":2374},[58,9279,9280],{"class":64},"    \u002F\u002F创建老师\n",[58,9282,9283],{"class":60,"line":2379},[58,9284,9285],{"class":75},"    Teacher t;\n",[58,9287,9288,9291,9293,9295],{"class":60,"line":2396},[58,9289,9290],{"class":75},"    t.id",[58,9292,383],{"class":92},[58,9294,1097],{"class":82},[58,9296,102],{"class":75},[58,9298,9299,9302,9304,9307],{"class":60,"line":2401},[58,9300,9301],{"class":75},"    t.name",[58,9303,383],{"class":92},[58,9305,9306],{"class":386},"\"老王\"",[58,9308,102],{"class":75},[58,9310,9311,9314,9316,9318],{"class":60,"line":2406},[58,9312,9313],{"class":75},"    t.age",[58,9315,383],{"class":92},[58,9317,1436],{"class":82},[58,9319,102],{"class":75},[58,9321,9322,9325,9327,9330],{"class":60,"line":2411},[58,9323,9324],{"class":75},"    t.stu.name",[58,9326,383],{"class":92},[58,9328,9329],{"class":386},"\"小王\"",[58,9331,9332],{"class":75},"；\n",[58,9334,9335,9338,9340,9342],{"class":60,"line":2425},[58,9336,9337],{"class":75},"    t.stu.age",[58,9339,383],{"class":92},[58,9341,1486],{"class":82},[58,9343,102],{"class":75},[58,9345,9346,9349,9351,9353],{"class":60,"line":2430},[58,9347,9348],{"class":75},"    t.stu.score",[58,9350,383],{"class":92},[58,9352,1130],{"class":82},[58,9354,102],{"class":75},[58,9356,9357],{"class":60,"line":3223},[58,9358,108],{"class":75},[14,9360,9362],{"id":9361},"_45结构体做函数参数","4.5结构体做函数参数",[175,9364,9365],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[48,9367,9369],{"className":781,"code":9368,"language":783,"meta":53,"style":53},"#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",[55,9370,9371,9377,9387,9393,9399,9403,9407,9413,9419,9423,9428,9433,9450,9454,9487,9491,9496,9515,9519,9550,9554,9562,9566,9575,9587,9599,9611,9624,9632,9645,9657,9665],{"__ignoreMap":53},[58,9372,9373,9375],{"class":60,"line":61},[58,9374,2596],{"class":92},[58,9376,2599],{"class":386},[58,9378,9379,9381,9383,9385],{"class":60,"line":68},[58,9380,2604],{"class":92},[58,9382,2607],{"class":92},[58,9384,2610],{"class":379},[58,9386,102],{"class":75},[58,9388,9389,9391],{"class":60,"line":79},[58,9390,2596],{"class":92},[58,9392,8395],{"class":386},[58,9394,9395,9397],{"class":60,"line":105},[58,9396,8405],{"class":92},[58,9398,8408],{"class":379},[58,9400,9401],{"class":60,"line":627},[58,9402,2195],{"class":75},[58,9404,9405],{"class":60,"line":509},[58,9406,8431],{"class":75},[58,9408,9409,9411],{"class":60,"line":559},[58,9410,2631],{"class":92},[58,9412,8443],{"class":75},[58,9414,9415,9417],{"class":60,"line":654},[58,9416,2631],{"class":92},[58,9418,8455],{"class":75},[58,9420,9421],{"class":60,"line":671},[58,9422,4641],{"class":75},[58,9424,9425],{"class":60,"line":677},[58,9426,9427],{"class":64},"\u002F\u002F打印学生信息的函数\n",[58,9429,9430],{"class":60,"line":2260},[58,9431,9432],{"class":64},"\u002F\u002F值传递\n",[58,9434,9435,9437,9440,9442,9444,9446,9448],{"class":60,"line":694},[58,9436,6010],{"class":92},[58,9438,9439],{"class":379}," printStudent1",[58,9441,793],{"class":75},[58,9443,8405],{"class":92},[58,9445,8544],{"class":379},[58,9447,9074],{"class":5862},[58,9449,799],{"class":75},[58,9451,9452],{"class":60,"line":2270},[58,9453,2195],{"class":75},[58,9455,9456,9458,9460,9463,9465,9468,9470,9473,9475,9477,9479,9482,9484],{"class":60,"line":2275},[58,9457,7175],{"class":75},[58,9459,1827],{"class":92},[58,9461,9462],{"class":75}," s.name ",[58,9464,1827],{"class":92},[58,9466,9467],{"class":386}," \" \"",[58,9469,2094],{"class":92},[58,9471,9472],{"class":75}," s.age ",[58,9474,1827],{"class":92},[58,9476,9467],{"class":386},[58,9478,2094],{"class":92},[58,9480,9481],{"class":75}," s.score ",[58,9483,1827],{"class":92},[58,9485,9486],{"class":75}," endl;\n",[58,9488,9489],{"class":60,"line":2289},[58,9490,108],{"class":75},[58,9492,9493],{"class":60,"line":2294},[58,9494,9495],{"class":64},"\u002F\u002F地址传递\n",[58,9497,9498,9500,9503,9505,9507,9509,9511,9513],{"class":60,"line":2300},[58,9499,6010],{"class":92},[58,9501,9502],{"class":379}," printStudent2",[58,9504,793],{"class":75},[58,9506,8405],{"class":92},[58,9508,8544],{"class":379},[58,9510,7164],{"class":92},[58,9512,1481],{"class":5862},[58,9514,799],{"class":75},[58,9516,9517],{"class":60,"line":2321},[58,9518,2195],{"class":75},[58,9520,9521,9523,9525,9528,9530,9532,9534,9537,9539,9541,9543,9546,9548],{"class":60,"line":2326},[58,9522,7175],{"class":75},[58,9524,1827],{"class":92},[58,9526,9527],{"class":75}," s->name ",[58,9529,1827],{"class":92},[58,9531,9467],{"class":386},[58,9533,2094],{"class":92},[58,9535,9536],{"class":75}," s->age ",[58,9538,1827],{"class":92},[58,9540,9467],{"class":386},[58,9542,2094],{"class":92},[58,9544,9545],{"class":75}," s->score ",[58,9547,1827],{"class":92},[58,9549,9486],{"class":75},[58,9551,9552],{"class":60,"line":2340},[58,9553,108],{"class":75},[58,9555,9556,9558,9560],{"class":60,"line":2345},[58,9557,796],{"class":92},[58,9559,2619],{"class":379},[58,9561,2622],{"class":75},[58,9563,9564],{"class":60,"line":2374},[58,9565,2195],{"class":75},[58,9567,9568,9570,9572],{"class":60,"line":2379},[58,9569,8541],{"class":92},[58,9571,8544],{"class":379},[58,9573,9574],{"class":75}," s;\n",[58,9576,9577,9580,9582,9585],{"class":60,"line":2396},[58,9578,9579],{"class":75},"    s.name ",[58,9581,383],{"class":92},[58,9583,9584],{"class":386}," \"张三\"",[58,9586,102],{"class":75},[58,9588,9589,9592,9594,9597],{"class":60,"line":2401},[58,9590,9591],{"class":75},"    s.age ",[58,9593,383],{"class":92},[58,9595,9596],{"class":82}," 20",[58,9598,102],{"class":75},[58,9600,9601,9604,9606,9609],{"class":60,"line":2406},[58,9602,9603],{"class":75},"    s.score ",[58,9605,383],{"class":92},[58,9607,9608],{"class":82}," 85",[58,9610,102],{"class":75},[58,9612,9613,9615,9617,9620,9622],{"class":60,"line":2411},[58,9614,2200],{"class":75},[58,9616,1827],{"class":92},[58,9618,9619],{"class":386},"\"值传递:\"",[58,9621,1827],{"class":92},[58,9623,1849],{"class":75},[58,9625,9626,9629],{"class":60,"line":2425},[58,9627,9628],{"class":379},"    printStudent1",[58,9630,9631],{"class":75},"(s);\n",[58,9633,9634,9636,9638,9641,9643],{"class":60,"line":2430},[58,9635,2200],{"class":75},[58,9637,1827],{"class":92},[58,9639,9640],{"class":386},"\"地址传递:\"",[58,9642,1827],{"class":92},[58,9644,1849],{"class":75},[58,9646,9647,9650,9652,9654],{"class":60,"line":3223},[58,9648,9649],{"class":379},"    printStudent2",[58,9651,793],{"class":75},[58,9653,1139],{"class":92},[58,9655,9656],{"class":75},"s); \n",[58,9658,9659,9661,9663],{"class":60,"line":3237},[58,9660,4736],{"class":92},[58,9662,4739],{"class":82},[58,9664,102],{"class":75},[58,9666,9667],{"class":60,"line":3245},[58,9668,108],{"class":75},[175,9670,195],{},[124,9672,9673,9676],{},[22,9674,9675],{},"1.先定义结构体，不要在函数中写结构体的定义",[22,9677,9678],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9680,9682],{"id":9681},"_46结构体中const使用场景","4.6结构体中const使用场景",[175,9684,9685],{},"用const防止误操作",[48,9687,9689],{"className":781,"code":9688,"language":783,"meta":53,"style":53},"#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",[55,9690,9691,9697,9707,9713,9718,9722,9726,9732,9738,9742,9758,9762,9785,9789,9797,9801,9822,9829,9833],{"__ignoreMap":53},[58,9692,9693,9695],{"class":60,"line":61},[58,9694,2596],{"class":92},[58,9696,2599],{"class":386},[58,9698,9699,9701,9703,9705],{"class":60,"line":68},[58,9700,2604],{"class":92},[58,9702,2607],{"class":92},[58,9704,2610],{"class":379},[58,9706,102],{"class":75},[58,9708,9709,9711],{"class":60,"line":79},[58,9710,2596],{"class":92},[58,9712,8395],{"class":386},[58,9714,9715],{"class":60,"line":105},[58,9716,9717],{"class":75},"sctuct Student\n",[58,9719,9720],{"class":60,"line":627},[58,9721,2195],{"class":75},[58,9723,9724],{"class":60,"line":509},[58,9725,8431],{"class":75},[58,9727,9728,9730],{"class":60,"line":559},[58,9729,2631],{"class":92},[58,9731,8443],{"class":75},[58,9733,9734,9736],{"class":60,"line":654},[58,9735,2631],{"class":92},[58,9737,8455],{"class":75},[58,9739,9740],{"class":60,"line":671},[58,9741,4641],{"class":75},[58,9743,9744,9746,9749,9751,9754,9756],{"class":60,"line":677},[58,9745,6010],{"class":92},[58,9747,9748],{"class":379}," printStudents",[58,9750,793],{"class":75},[58,9752,9753],{"class":379},"student",[58,9755,9074],{"class":5862},[58,9757,799],{"class":75},[58,9759,9760],{"class":60,"line":2260},[58,9761,2195],{"class":75},[58,9763,9764,9766,9768,9771,9773,9776,9778,9781,9783],{"class":60,"line":694},[58,9765,2200],{"class":75},[58,9767,1827],{"class":92},[58,9769,9770],{"class":75},"s.name",[58,9772,1827],{"class":92},[58,9774,9775],{"class":75},"s.age",[58,9777,1827],{"class":92},[58,9779,9780],{"class":75},"s.score",[58,9782,1827],{"class":92},[58,9784,1849],{"class":75},[58,9786,9787],{"class":60,"line":2270},[58,9788,108],{"class":75},[58,9790,9791,9793,9795],{"class":60,"line":2275},[58,9792,796],{"class":92},[58,9794,2619],{"class":379},[58,9796,6624],{"class":75},[58,9798,9799],{"class":60,"line":2289},[58,9800,2195],{"class":75},[58,9802,9803,9806,9808,9810,9812,9814,9816,9818,9820],{"class":60,"line":2294},[58,9804,9805],{"class":75},"    Student s",[58,9807,383],{"class":92},[58,9809,1681],{"class":75},[58,9811,8562],{"class":386},[58,9813,1164],{"class":75},[58,9815,1436],{"class":82},[58,9817,1164],{"class":75},[58,9819,1436],{"class":82},[58,9821,4641],{"class":75},[58,9823,9824,9827],{"class":60,"line":2300},[58,9825,9826],{"class":379},"    printStudent",[58,9828,9631],{"class":75},[58,9830,9831],{"class":60,"line":2321},[58,9832,3046],{"emptyLinePlaceholder":720},[58,9834,9835],{"class":60,"line":2326},[58,9836,108],{"class":75},[175,9838,195],{},[124,9840,9841,9844,9847],{},[22,9842,9843],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[22,9845,9846],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[22,9848,9849],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[48,9851,9853],{"className":781,"code":9852,"language":783,"meta":53,"style":53},"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",[55,9854,9855,9874,9878,9883,9903],{"__ignoreMap":53},[58,9856,9857,9859,9861,9863,9865,9868,9870,9872],{"class":60,"line":61},[58,9858,6010],{"class":92},[58,9860,9748],{"class":379},[58,9862,793],{"class":75},[58,9864,7438],{"class":92},[58,9866,9867],{"class":379}," student",[58,9869,7164],{"class":92},[58,9871,1481],{"class":5862},[58,9873,799],{"class":75},[58,9875,9876],{"class":60,"line":68},[58,9877,2195],{"class":75},[58,9879,9880],{"class":60,"line":79},[58,9881,9882],{"class":64},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[58,9884,9885,9887,9889,9891,9893,9895,9897,9899,9901],{"class":60,"line":105},[58,9886,2200],{"class":75},[58,9888,1827],{"class":92},[58,9890,9770],{"class":75},[58,9892,1827],{"class":92},[58,9894,9775],{"class":75},[58,9896,1827],{"class":92},[58,9898,9780],{"class":75},[58,9900,1827],{"class":92},[58,9902,1849],{"class":75},[58,9904,9905],{"class":60,"line":627},[58,9906,108],{"class":75},[14,9908,9910],{"id":9909},"_47案例","4.7案例",[19,9912,9913],{},[22,9914,9915],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[48,9917,9919],{"className":781,"code":9918,"language":783,"meta":53,"style":53},"#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",[55,9920,9921,9927,9937,9943,9950,9954,9960,9964,9969,9975,9981,9985,9989,9995,9999,10004,10009,10022,10026,10031,10057,10061,10073,10100,10104,10116,10126,10130,10135,10164,10168,10180,10189,10216,10227,10237,10241,10245,10249,10254,10278,10282,10306,10310,10329,10355,10359,10384,10407,10431,10436,10441,10446,10455,10460,10466,10487,10493,10507,10513,10540,10549,10555,10563,10568],{"__ignoreMap":53},[58,9922,9923,9925],{"class":60,"line":61},[58,9924,2596],{"class":92},[58,9926,2599],{"class":386},[58,9928,9929,9931,9933,9935],{"class":60,"line":68},[58,9930,2604],{"class":92},[58,9932,2607],{"class":92},[58,9934,2610],{"class":379},[58,9936,102],{"class":75},[58,9938,9939,9941],{"class":60,"line":79},[58,9940,2596],{"class":92},[58,9942,8395],{"class":386},[58,9944,9945,9947],{"class":60,"line":105},[58,9946,2596],{"class":92},[58,9948,9949],{"class":386},"\u003Cctime>\n",[58,9951,9952],{"class":60,"line":627},[58,9953,9184],{"class":64},[58,9955,9956,9958],{"class":60,"line":509},[58,9957,8405],{"class":92},[58,9959,8408],{"class":379},[58,9961,9962],{"class":60,"line":559},[58,9963,2195],{"class":75},[58,9965,9966],{"class":60,"line":654},[58,9967,9968],{"class":75},"    string sName;\n",[58,9970,9971,9973],{"class":60,"line":671},[58,9972,2631],{"class":92},[58,9974,8443],{"class":75},[58,9976,9977,9979],{"class":60,"line":677},[58,9978,2631],{"class":92},[58,9980,8455],{"class":75},[58,9982,9983],{"class":60,"line":2260},[58,9984,4641],{"class":75},[58,9986,9987],{"class":60,"line":694},[58,9988,9221],{"class":64},[58,9990,9991,9993],{"class":60,"line":2270},[58,9992,8405],{"class":92},[58,9994,9228],{"class":379},[58,9996,9997],{"class":60,"line":2275},[58,9998,2195],{"class":75},[58,10000,10001],{"class":60,"line":2289},[58,10002,10003],{"class":75},"    string tName;\n",[58,10005,10006],{"class":60,"line":2294},[58,10007,10008],{"class":64},"    \u002F\u002F学生数组\n",[58,10010,10011,10013,10015,10018,10020],{"class":60,"line":2300},[58,10012,8541],{"class":92},[58,10014,8544],{"class":379},[58,10016,10017],{"class":75}," sArray[",[58,10019,1105],{"class":82},[58,10021,5336],{"class":75},[58,10023,10024],{"class":60,"line":2321},[58,10025,4641],{"class":75},[58,10027,10028],{"class":60,"line":2326},[58,10029,10030],{"class":64},"\u002F\u002F给老师和学生赋值的函数\n",[58,10032,10033,10035,10038,10040,10042,10045,10048,10051,10053,10055],{"class":60,"line":2340},[58,10034,6010],{"class":92},[58,10036,10037],{"class":379}," allocateSpace",[58,10039,793],{"class":75},[58,10041,8405],{"class":92},[58,10043,10044],{"class":379}," Teacher",[58,10046,10047],{"class":5862}," tArray",[58,10049,10050],{"class":75},"[],",[58,10052,796],{"class":92},[58,10054,7977],{"class":5862},[58,10056,799],{"class":75},[58,10058,10059],{"class":60,"line":2345},[58,10060,2195],{"class":75},[58,10062,10063,10066,10068,10071],{"class":60,"line":2374},[58,10064,10065],{"class":75},"    string nameSeed",[58,10067,383],{"class":92},[58,10069,10070],{"class":386},"\"ABCDE\"",[58,10072,102],{"class":75},[58,10074,10075,10077,10079,10081,10084,10086,10088,10091,10093,10096,10098],{"class":60,"line":2379},[58,10076,3847],{"class":92},[58,10078,2305],{"class":75},[58,10080,796],{"class":92},[58,10082,10083],{"class":75}," i ",[58,10085,383],{"class":92},[58,10087,4739],{"class":82},[58,10089,10090],{"class":75},"; i ",[58,10092,373],{"class":92},[58,10094,10095],{"class":75}," len; i",[58,10097,2938],{"class":92},[58,10099,799],{"class":75},[58,10101,10102],{"class":60,"line":2396},[58,10103,2676],{"class":75},[58,10105,10106,10109,10111,10114],{"class":60,"line":2401},[58,10107,10108],{"class":75},"        tArray[i].tName ",[58,10110,383],{"class":92},[58,10112,10113],{"class":386}," \"Teacher_\"",[58,10115,102],{"class":75},[58,10117,10118,10120,10123],{"class":60,"line":2406},[58,10119,10108],{"class":75},[58,10121,10122],{"class":92},"+=",[58,10124,10125],{"class":75},"nameSeed[i];\n",[58,10127,10128],{"class":60,"line":2411},[58,10129,3046],{"emptyLinePlaceholder":720},[58,10131,10132],{"class":60,"line":2425},[58,10133,10134],{"class":64},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[58,10136,10137,10139,10141,10143,10146,10148,10150,10153,10155,10157,10160,10162],{"class":60,"line":2430},[58,10138,4049],{"class":92},[58,10140,2305],{"class":75},[58,10142,796],{"class":92},[58,10144,10145],{"class":75}," j ",[58,10147,383],{"class":92},[58,10149,4739],{"class":82},[58,10151,10152],{"class":75},"; j ",[58,10154,373],{"class":92},[58,10156,2794],{"class":82},[58,10158,10159],{"class":75},"; j",[58,10161,2938],{"class":92},[58,10163,799],{"class":75},[58,10165,10166],{"class":60,"line":3223},[58,10167,3156],{"class":75},[58,10169,10170,10173,10175,10178],{"class":60,"line":3237},[58,10171,10172],{"class":75},"            tArray[i].sArray[j].sName ",[58,10174,383],{"class":92},[58,10176,10177],{"class":386}," \"Student_\"",[58,10179,102],{"class":75},[58,10181,10182,10184,10186],{"class":60,"line":3245},[58,10183,10172],{"class":75},[58,10185,10122],{"class":92},[58,10187,10188],{"class":75}," nameSeed[j];\n",[58,10190,10191,10194,10197,10199,10201,10203,10205,10207,10209,10211,10213],{"class":60,"line":3250},[58,10192,10193],{"class":92},"            int",[58,10195,10196],{"class":75}," random",[58,10198,383],{"class":92},[58,10200,3070],{"class":379},[58,10202,3073],{"class":75},[58,10204,1114],{"class":92},[58,10206,1692],{"class":82},[58,10208,1267],{"class":92},[58,10210,1187],{"class":82},[58,10212,846],{"class":75},[58,10214,10215],{"class":64},"\u002F\u002F40~99\n",[58,10217,10218,10221,10223,10225],{"class":60,"line":3256},[58,10219,10220],{"class":75},"            tArray[i].sArray[j].age ",[58,10222,383],{"class":92},[58,10224,9596],{"class":82},[58,10226,102],{"class":75},[58,10228,10229,10232,10234],{"class":60,"line":3262},[58,10230,10231],{"class":75},"            tArray[i].sArray[j].score ",[58,10233,383],{"class":92},[58,10235,10236],{"class":75}," random;\n",[58,10238,10239],{"class":60,"line":3267},[58,10240,3175],{"class":75},[58,10242,10243],{"class":60,"line":8594},[58,10244,2833],{"class":75},[58,10246,10247],{"class":60,"line":8618},[58,10248,108],{"class":75},[58,10250,10251],{"class":60,"line":8623},[58,10252,10253],{"class":64},"\u002F\u002F打印所有信息的函数\n",[58,10255,10256,10258,10261,10263,10265,10267,10269,10272,10274,10276],{"class":60,"line":8629},[58,10257,6010],{"class":92},[58,10259,10260],{"class":379}," printInfo",[58,10262,793],{"class":75},[58,10264,8405],{"class":92},[58,10266,10044],{"class":379},[58,10268,10047],{"class":5862},[58,10270,10271],{"class":75},"[], ",[58,10273,796],{"class":92},[58,10275,7977],{"class":5862},[58,10277,799],{"class":75},[58,10279,10280],{"class":60,"line":8656},[58,10281,2195],{"class":75},[58,10283,10284,10286,10288,10290,10292,10294,10296,10298,10300,10302,10304],{"class":60,"line":8661},[58,10285,3847],{"class":92},[58,10287,2305],{"class":75},[58,10289,796],{"class":92},[58,10291,10083],{"class":75},[58,10293,383],{"class":92},[58,10295,4739],{"class":82},[58,10297,10090],{"class":75},[58,10299,373],{"class":92},[58,10301,10095],{"class":75},[58,10303,2938],{"class":92},[58,10305,799],{"class":75},[58,10307,10308],{"class":60,"line":8667},[58,10309,2676],{"class":75},[58,10311,10312,10315,10317,10320,10322,10325,10327],{"class":60,"line":8679},[58,10313,10314],{"class":75},"        cout ",[58,10316,1827],{"class":92},[58,10318,10319],{"class":386}," \"Teacher: \"",[58,10321,2094],{"class":92},[58,10323,10324],{"class":75}," tArray[i].tName ",[58,10326,1827],{"class":92},[58,10328,9486],{"class":75},[58,10330,10331,10333,10335,10337,10339,10341,10343,10345,10347,10349,10351,10353],{"class":60,"line":8691},[58,10332,4049],{"class":92},[58,10334,2305],{"class":75},[58,10336,796],{"class":92},[58,10338,10145],{"class":75},[58,10340,383],{"class":92},[58,10342,4739],{"class":82},[58,10344,10152],{"class":75},[58,10346,373],{"class":92},[58,10348,2794],{"class":82},[58,10350,10159],{"class":75},[58,10352,2938],{"class":92},[58,10354,799],{"class":75},[58,10356,10357],{"class":60,"line":8703},[58,10358,3156],{"class":75},[58,10360,10362,10365,10367,10370,10372,10375,10377,10380,10382],{"class":60,"line":10361},47,[58,10363,10364],{"class":75},"            cout ",[58,10366,1827],{"class":92},[58,10368,10369],{"class":386}," \"",[58,10371,1884],{"class":82},[58,10373,10374],{"class":386},"Student: \"",[58,10376,2094],{"class":92},[58,10378,10379],{"class":75}," tArray[i].sArray[j].sName",[58,10381,1827],{"class":92},[58,10383,1849],{"class":75},[58,10385,10387,10389,10391,10393,10395,10398,10400,10403,10405],{"class":60,"line":10386},48,[58,10388,10364],{"class":75},[58,10390,1827],{"class":92},[58,10392,10369],{"class":386},[58,10394,1884],{"class":82},[58,10396,10397],{"class":386},"Age: \"",[58,10399,2094],{"class":92},[58,10401,10402],{"class":75}," tArray[i].sArray[j].age ",[58,10404,1827],{"class":92},[58,10406,9486],{"class":75},[58,10408,10410,10412,10414,10416,10418,10421,10423,10426,10428],{"class":60,"line":10409},49,[58,10411,10364],{"class":75},[58,10413,1827],{"class":92},[58,10415,10369],{"class":386},[58,10417,1884],{"class":82},[58,10419,10420],{"class":386},"Score: \"",[58,10422,2094],{"class":92},[58,10424,10425],{"class":75}," tArray[i].sArray[j].score ",[58,10427,1827],{"class":92},[58,10429,10430],{"class":75}," endl;   \n",[58,10432,10434],{"class":60,"line":10433},50,[58,10435,3175],{"class":75},[58,10437,10439],{"class":60,"line":10438},51,[58,10440,2833],{"class":75},[58,10442,10444],{"class":60,"line":10443},52,[58,10445,108],{"class":75},[58,10447,10449,10451,10453],{"class":60,"line":10448},53,[58,10450,796],{"class":92},[58,10452,2619],{"class":379},[58,10454,2622],{"class":75},[58,10456,10458],{"class":60,"line":10457},54,[58,10459,2195],{"class":75},[58,10461,10463],{"class":60,"line":10462},55,[58,10464,10465],{"class":64},"    \u002F\u002F随机数种子\n",[58,10467,10469,10471,10473,10475,10477,10479,10481,10483,10485],{"class":60,"line":10468},56,[58,10470,3019],{"class":379},[58,10472,3022],{"class":75},[58,10474,3025],{"class":92},[58,10476,3028],{"class":92},[58,10478,1215],{"class":75},[58,10480,3033],{"class":379},[58,10482,793],{"class":75},[58,10484,3038],{"class":82},[58,10486,3041],{"class":75},[58,10488,10490],{"class":60,"line":10489},57,[58,10491,10492],{"class":64},"    \u002F\u002F1.创建3名老师的数组\n",[58,10494,10496,10498,10500,10503,10505],{"class":60,"line":10495},58,[58,10497,8541],{"class":92},[58,10499,10044],{"class":379},[58,10501,10502],{"class":75}," tArray[",[58,10504,861],{"class":82},[58,10506,5336],{"class":75},[58,10508,10510],{"class":60,"line":10509},59,[58,10511,10512],{"class":64},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[58,10514,10516,10518,10521,10523,10526,10529,10531,10533,10536,10538],{"class":60,"line":10515},60,[58,10517,2631],{"class":92},[58,10519,10520],{"class":75}," len ",[58,10522,383],{"class":92},[58,10524,10525],{"class":92}," sizeof",[58,10527,10528],{"class":75},"(tArray) ",[58,10530,1370],{"class":92},[58,10532,10525],{"class":92},[58,10534,10535],{"class":75},"(tArray[",[58,10537,979],{"class":82},[58,10539,4502],{"class":75},[58,10541,10543,10546],{"class":60,"line":10542},61,[58,10544,10545],{"class":379},"    allocateSpace",[58,10547,10548],{"class":75},"(tArray, len);\n",[58,10550,10552],{"class":60,"line":10551},62,[58,10553,10554],{"class":64},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[58,10556,10558,10561],{"class":60,"line":10557},63,[58,10559,10560],{"class":379},"    printInfo",[58,10562,10548],{"class":75},[58,10564,10566],{"class":60,"line":10565},64,[58,10567,3046],{"emptyLinePlaceholder":720},[58,10569,10571],{"class":60,"line":10570},65,[58,10572,108],{"class":75},[19,10574,10575],{"start":68},[22,10576,10577,10580],{},[25,10578,10579],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[175,10582,10583],{},"五名英雄信息如下：",[48,10585,10589],{"className":10586,"code":10587,"language":10588,"meta":53,"style":53},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[55,10590,10591,10609,10626,10643,10660],{"__ignoreMap":53},[58,10592,10593,10595,10598,10600,10602,10604,10607],{"class":60,"line":61},[58,10594,5563],{"class":75},[58,10596,10597],{"class":386},"\"刘备\"",[58,10599,1164],{"class":75},[58,10601,1561],{"class":82},[58,10603,1164],{"class":75},[58,10605,10606],{"class":386},"\"男\"",[58,10608,5576],{"class":75},[58,10610,10611,10613,10616,10618,10620,10622,10624],{"class":60,"line":68},[58,10612,5563],{"class":75},[58,10614,10615],{"class":386},"\"关羽\"",[58,10617,1164],{"class":75},[58,10619,1536],{"class":82},[58,10621,1164],{"class":75},[58,10623,10606],{"class":386},[58,10625,5576],{"class":75},[58,10627,10628,10630,10633,10635,10637,10639,10641],{"class":60,"line":79},[58,10629,5563],{"class":75},[58,10631,10632],{"class":386},"\"张飞\"",[58,10634,1164],{"class":75},[58,10636,1486],{"class":82},[58,10638,1164],{"class":75},[58,10640,10606],{"class":386},[58,10642,5576],{"class":75},[58,10644,10645,10647,10650,10652,10654,10656,10658],{"class":60,"line":105},[58,10646,5563],{"class":75},[58,10648,10649],{"class":386},"\"赵云\"",[58,10651,1164],{"class":75},[58,10653,1511],{"class":82},[58,10655,1164],{"class":75},[58,10657,10606],{"class":386},[58,10659,5576],{"class":75},[58,10661,10662,10664,10667,10669,10671,10673,10676],{"class":60,"line":627},[58,10663,5563],{"class":75},[58,10665,10666],{"class":386},"\"貂蝉\"",[58,10668,1164],{"class":75},[58,10670,1461],{"class":82},[58,10672,1164],{"class":75},[58,10674,10675],{"class":386},"\"女\"",[58,10677,5576],{"class":75},[175,10679,10680],{},"代码：",[48,10682,10684],{"className":781,"code":10683,"language":783,"meta":53,"style":53},"#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",[55,10685,10686,10692,10702,10708,10715,10719,10723,10729,10734,10738,10743,10766,10770,10795,10799,10832,10837,10866,10871,10886,10912,10932,10937,10942,10946,10950,10955,10977,10981,11005,11009,11071,11075,11079,11087,11091,11096,11107,11111,11127,11143,11159,11175,11191,11195,11215,11237,11242,11255,11262,11267,11273,11278,11291,11297],{"__ignoreMap":53},[58,10687,10688,10690],{"class":60,"line":61},[58,10689,2596],{"class":92},[58,10691,2599],{"class":386},[58,10693,10694,10696,10698,10700],{"class":60,"line":68},[58,10695,2604],{"class":92},[58,10697,2607],{"class":92},[58,10699,2610],{"class":379},[58,10701,102],{"class":75},[58,10703,10704,10706],{"class":60,"line":79},[58,10705,2596],{"class":92},[58,10707,8395],{"class":386},[58,10709,10710,10712],{"class":60,"line":105},[58,10711,8405],{"class":92},[58,10713,10714],{"class":379}," Sanguo\n",[58,10716,10717],{"class":60,"line":627},[58,10718,2195],{"class":75},[58,10720,10721],{"class":60,"line":509},[58,10722,8431],{"class":75},[58,10724,10725,10727],{"class":60,"line":559},[58,10726,2631],{"class":92},[58,10728,8443],{"class":75},[58,10730,10731],{"class":60,"line":654},[58,10732,10733],{"class":75},"    string gender;\n",[58,10735,10736],{"class":60,"line":671},[58,10737,4641],{"class":75},[58,10739,10740],{"class":60,"line":677},[58,10741,10742],{"class":64},"\u002F\u002F定义排序函数\n",[58,10744,10745,10747,10749,10751,10754,10756,10758,10760,10762,10764],{"class":60,"line":2260},[58,10746,6010],{"class":92},[58,10748,7962],{"class":379},[58,10750,793],{"class":75},[58,10752,10753],{"class":379},"Sanguo",[58,10755,7164],{"class":92},[58,10757,1481],{"class":5862},[58,10759,1164],{"class":75},[58,10761,796],{"class":92},[58,10763,7977],{"class":5862},[58,10765,799],{"class":75},[58,10767,10768],{"class":60,"line":694},[58,10769,2195],{"class":75},[58,10771,10772,10774,10776,10778,10780,10782,10784,10786,10788,10791,10793],{"class":60,"line":2270},[58,10773,3847],{"class":92},[58,10775,793],{"class":75},[58,10777,796],{"class":92},[58,10779,3678],{"class":75},[58,10781,383],{"class":92},[58,10783,979],{"class":82},[58,10785,3685],{"class":75},[58,10787,373],{"class":92},[58,10789,10790],{"class":75},"len;i",[58,10792,2938],{"class":92},[58,10794,799],{"class":75},[58,10796,10797],{"class":60,"line":2275},[58,10798,2676],{"class":75},[58,10800,10801,10804,10806,10808,10810,10812,10814,10816,10818,10820,10822,10824,10826,10828,10830],{"class":60,"line":2289},[58,10802,10803],{"class":92},"     for",[58,10805,2305],{"class":75},[58,10807,796],{"class":92},[58,10809,4056],{"class":75},[58,10811,383],{"class":92},[58,10813,979],{"class":82},[58,10815,4063],{"class":75},[58,10817,373],{"class":92},[58,10819,8004],{"class":75},[58,10821,1318],{"class":92},[58,10823,89],{"class":82},[58,10825,1318],{"class":92},[58,10827,4196],{"class":75},[58,10829,2938],{"class":92},[58,10831,799],{"class":75},[58,10833,10834],{"class":60,"line":2294},[58,10835,10836],{"class":75},"     {\n",[58,10838,10839,10842,10845,10847,10850,10852,10855,10857,10859,10861,10863],{"class":60,"line":2300},[58,10840,10841],{"class":92},"         if",[58,10843,10844],{"class":75}," ((s",[58,10846,1267],{"class":92},[58,10848,10849],{"class":75},"j)->age ",[58,10851,1744],{"class":92},[58,10853,10854],{"class":75}," (s",[58,10856,1267],{"class":92},[58,10858,1253],{"class":75},[58,10860,1267],{"class":92},[58,10862,89],{"class":82},[58,10864,10865],{"class":75},")->age)\n",[58,10867,10868],{"class":60,"line":2321},[58,10869,10870],{"class":75},"         {\n",[58,10872,10873,10876,10878,10881,10883],{"class":60,"line":2326},[58,10874,10875],{"class":75},"             Sanguo temp",[58,10877,7799],{"class":92},[58,10879,10880],{"class":75},"(s",[58,10882,1267],{"class":92},[58,10884,10885],{"class":75},"j);\n",[58,10887,10888,10891,10893,10895,10898,10900,10902,10904,10906,10908,10910],{"class":60,"line":2340},[58,10889,10890],{"class":92},"             *",[58,10892,10880],{"class":75},[58,10894,1267],{"class":92},[58,10896,10897],{"class":75},"j)",[58,10899,7799],{"class":92},[58,10901,10880],{"class":75},[58,10903,1267],{"class":92},[58,10905,1253],{"class":75},[58,10907,1267],{"class":92},[58,10909,89],{"class":82},[58,10911,3365],{"class":75},[58,10913,10914,10916,10918,10920,10922,10924,10926,10928,10930],{"class":60,"line":2345},[58,10915,10890],{"class":92},[58,10917,10880],{"class":75},[58,10919,1267],{"class":92},[58,10921,1253],{"class":75},[58,10923,1267],{"class":92},[58,10925,89],{"class":82},[58,10927,1215],{"class":75},[58,10929,383],{"class":92},[58,10931,4926],{"class":75},[58,10933,10934],{"class":60,"line":2374},[58,10935,10936],{"class":75},"         }\n",[58,10938,10939],{"class":60,"line":2379},[58,10940,10941],{"class":75},"     }\n",[58,10943,10944],{"class":60,"line":2396},[58,10945,2833],{"class":75},[58,10947,10948],{"class":60,"line":2401},[58,10949,108],{"class":75},[58,10951,10952],{"class":60,"line":2406},[58,10953,10954],{"class":64},"\u002F\u002F定义打印函数\n",[58,10956,10957,10959,10961,10963,10965,10967,10969,10971,10973,10975],{"class":60,"line":2411},[58,10958,6010],{"class":92},[58,10960,10260],{"class":379},[58,10962,793],{"class":75},[58,10964,10753],{"class":379},[58,10966,7164],{"class":92},[58,10968,1481],{"class":5862},[58,10970,1164],{"class":75},[58,10972,796],{"class":92},[58,10974,7977],{"class":5862},[58,10976,799],{"class":75},[58,10978,10979],{"class":60,"line":2425},[58,10980,2195],{"class":75},[58,10982,10983,10985,10987,10989,10991,10993,10995,10997,10999,11001,11003],{"class":60,"line":2430},[58,10984,3847],{"class":92},[58,10986,2305],{"class":75},[58,10988,796],{"class":92},[58,10990,3678],{"class":75},[58,10992,383],{"class":92},[58,10994,979],{"class":82},[58,10996,3685],{"class":75},[58,10998,373],{"class":92},[58,11000,10790],{"class":75},[58,11002,2938],{"class":92},[58,11004,799],{"class":75},[58,11006,11007],{"class":60,"line":3223},[58,11008,2676],{"class":75},[58,11010,11011,11013,11015,11017,11019,11022,11024,11026,11028,11031,11033,11035,11037,11040,11042,11044,11046,11049,11051,11053,11055,11058,11060,11062,11064,11067,11069],{"class":60,"line":3237},[58,11012,4097],{"class":75},[58,11014,1827],{"class":92},[58,11016,1037],{"class":386},[58,11018,1884],{"class":82},[58,11020,11021],{"class":386},"姓名：\"",[58,11023,1827],{"class":92},[58,11025,10880],{"class":75},[58,11027,1267],{"class":92},[58,11029,11030],{"class":75},"i)->name",[58,11032,1827],{"class":92},[58,11034,1037],{"class":386},[58,11036,1884],{"class":82},[58,11038,11039],{"class":386},"年龄：\"",[58,11041,1827],{"class":92},[58,11043,10880],{"class":75},[58,11045,1267],{"class":92},[58,11047,11048],{"class":75},"i)->age",[58,11050,1827],{"class":92},[58,11052,1037],{"class":386},[58,11054,1884],{"class":82},[58,11056,11057],{"class":386},"性别：\"",[58,11059,1827],{"class":92},[58,11061,10880],{"class":75},[58,11063,1267],{"class":92},[58,11065,11066],{"class":75},"i)->gender",[58,11068,1827],{"class":92},[58,11070,1849],{"class":75},[58,11072,11073],{"class":60,"line":3245},[58,11074,2833],{"class":75},[58,11076,11077],{"class":60,"line":3250},[58,11078,108],{"class":75},[58,11080,11081,11083,11085],{"class":60,"line":3256},[58,11082,796],{"class":92},[58,11084,2619],{"class":379},[58,11086,2622],{"class":75},[58,11088,11089],{"class":60,"line":3262},[58,11090,2195],{"class":75},[58,11092,11093],{"class":60,"line":3267},[58,11094,11095],{"class":64},"    \u002F\u002F定义结构体变量\n",[58,11097,11098,11101,11103,11105],{"class":60,"line":8594},[58,11099,11100],{"class":75},"    Sanguo s1[",[58,11102,1105],{"class":82},[58,11104,1724],{"class":75},[58,11106,5554],{"class":92},[58,11108,11109],{"class":60,"line":8618},[58,11110,2676],{"class":75},[58,11112,11113,11115,11117,11119,11121,11123,11125],{"class":60,"line":8623},[58,11114,5563],{"class":75},[58,11116,10597],{"class":386},[58,11118,1164],{"class":75},[58,11120,1561],{"class":82},[58,11122,1164],{"class":75},[58,11124,10606],{"class":386},[58,11126,5576],{"class":75},[58,11128,11129,11131,11133,11135,11137,11139,11141],{"class":60,"line":8629},[58,11130,5563],{"class":75},[58,11132,10615],{"class":386},[58,11134,1164],{"class":75},[58,11136,1536],{"class":82},[58,11138,1164],{"class":75},[58,11140,10606],{"class":386},[58,11142,5576],{"class":75},[58,11144,11145,11147,11149,11151,11153,11155,11157],{"class":60,"line":8656},[58,11146,5563],{"class":75},[58,11148,10632],{"class":386},[58,11150,1164],{"class":75},[58,11152,1486],{"class":82},[58,11154,1164],{"class":75},[58,11156,10606],{"class":386},[58,11158,5576],{"class":75},[58,11160,11161,11163,11165,11167,11169,11171,11173],{"class":60,"line":8661},[58,11162,5563],{"class":75},[58,11164,10649],{"class":386},[58,11166,1164],{"class":75},[58,11168,1511],{"class":82},[58,11170,1164],{"class":75},[58,11172,10606],{"class":386},[58,11174,5576],{"class":75},[58,11176,11177,11179,11181,11183,11185,11187,11189],{"class":60,"line":8667},[58,11178,5563],{"class":75},[58,11180,10666],{"class":386},[58,11182,1164],{"class":75},[58,11184,1461],{"class":82},[58,11186,1164],{"class":75},[58,11188,10675],{"class":386},[58,11190,5576],{"class":75},[58,11192,11193],{"class":60,"line":8679},[58,11194,5597],{"class":75},[58,11196,11197,11199,11201,11203,11206,11208,11211,11213],{"class":60,"line":8691},[58,11198,2631],{"class":92},[58,11200,7977],{"class":75},[58,11202,4849],{"class":92},[58,11204,11205],{"class":75},"(s1)",[58,11207,4855],{"class":92},[58,11209,11210],{"class":75},"(s1[",[58,11212,979],{"class":82},[58,11214,4502],{"class":75},[58,11216,11217,11220,11222,11225,11227,11230,11233,11235],{"class":60,"line":8703},[58,11218,11219],{"class":75},"    Sanguo ",[58,11221,1241],{"class":92},[58,11223,11224],{"class":75},"s ",[58,11226,383],{"class":92},[58,11228,11229],{"class":92}," &",[58,11231,11232],{"class":75},"s1[",[58,11234,979],{"class":82},[58,11236,5336],{"class":75},[58,11238,11239],{"class":60,"line":10361},[58,11240,11241],{"class":64},"    \u002F\u002F排序前：\n",[58,11243,11244,11246,11248,11251,11253],{"class":60,"line":10386},[58,11245,7175],{"class":75},[58,11247,1827],{"class":92},[58,11249,11250],{"class":386}," \"排序前：\"",[58,11252,2094],{"class":92},[58,11254,9486],{"class":75},[58,11256,11257,11259],{"class":60,"line":10409},[58,11258,10560],{"class":379},[58,11260,11261],{"class":75},"(s,len);\n",[58,11263,11264],{"class":60,"line":10433},[58,11265,11266],{"class":64},"    \u002F\u002F调用排序函数\n",[58,11268,11269,11271],{"class":60,"line":10438},[58,11270,8244],{"class":379},[58,11272,11261],{"class":75},[58,11274,11275],{"class":60,"line":10443},[58,11276,11277],{"class":64},"    \u002F\u002F排序后\n",[58,11279,11280,11282,11284,11287,11289],{"class":60,"line":10448},[58,11281,7175],{"class":75},[58,11283,1827],{"class":92},[58,11285,11286],{"class":386}," \"排序后：\"",[58,11288,2094],{"class":92},[58,11290,9486],{"class":75},[58,11292,11293,11295],{"class":60,"line":10457},[58,11294,10560],{"class":379},[58,11296,11261],{"class":75},[58,11298,11299],{"class":60,"line":10462},[58,11300,108],{"class":75},[175,11302,11303,11304,11306],{},"注意：使用指针时直接用传首地址**&s",[58,11305,979],{},"**",[702,11308,11309],{},"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":53,"searchDepth":68,"depth":68,"links":11311},[11312,11313,11314,11315,11316,11317,11318],{"id":8349,"depth":68,"text":8350},{"id":8711,"depth":68,"text":8712},{"id":8980,"depth":68,"text":8981},{"id":9145,"depth":68,"text":9146},{"id":9361,"depth":68,"text":9362},{"id":9681,"depth":68,"text":9682},{"id":9909,"depth":68,"text":9910},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8338,"description":8346},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11325,"title":11326,"body":11327,"description":53,"extension":718,"meta":12670,"navigation":720,"path":12671,"seo":12672,"stem":12673,"__hash__":12674},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11328,"toc":12664},[11329,11332,11336,11342,11356,11361,11364,11368,11375,11381,11384,11391,11397,11402,11405,11408,11411,11975,11978,11992,11996,12001,12017,12157,12160,12166,12169,12174,12182,12290,12293,12298,12301,12306,12309,12315,12318,12661],[10,11330,11326],{"id":11331},"_5程序内存模型",[14,11333,11335],{"id":11334},"_51内存分区模型","5.1内存分区模型",[175,11337,11338,11339],{},"C++程序在执行时，将内存大方向划分为",[25,11340,11341],{},"4个区域",[124,11343,11344,11347,11350,11353],{},[22,11345,11346],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[22,11348,11349],{},"全局区：存放全局变量和静态变量以及常量",[22,11351,11352],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[22,11354,11355],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[175,11357,11358],{},[25,11359,11360],{},"内存四区意义：",[175,11362,11363],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[114,11365,11367],{"id":11366},"_511程序运行前","5.1.1程序运行前",[175,11369,11370,11371,11374],{},"​\t在程序编译后，生成了exe可执行程序，",[25,11372,11373],{},"未执行该程序前","分为两个区域",[175,11376,11377,11378],{},"​\t",[25,11379,11380],{},"代码区：",[175,11382,11383],{},"​\t\t存放 CPU 执行的机器指令",[175,11385,11386,11387,11390],{},"​\t\t代码区是",[25,11388,11389],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[175,11392,11386,11393,11396],{},[25,11394,11395],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[175,11398,11377,11399],{},[25,11400,11401],{},"全局区：",[175,11403,11404],{},"​\t\t全局变量和静态变量存放在此.",[175,11406,11407],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[175,11409,11410],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[48,11412,11414],{"className":781,"code":11413,"language":783,"meta":53,"style":53},"\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",[55,11415,11416,11421,11434,11447,11451,11456,11471,11486,11490,11499,11503,11508,11521,11534,11538,11543,11569,11595,11599,11626,11652,11656,11661,11677,11692,11696,11722,11748,11752,11777,11802,11806,11832,11858,11862,11878,11893,11919,11945,11949,11959,11963,11971],{"__ignoreMap":53},[58,11417,11418],{"class":60,"line":61},[58,11419,11420],{"class":64},"\u002F\u002F全局变量\n",[58,11422,11423,11425,11428,11430,11432],{"class":60,"line":68},[58,11424,796],{"class":92},[58,11426,11427],{"class":75}," g_a ",[58,11429,383],{"class":92},[58,11431,2684],{"class":82},[58,11433,102],{"class":75},[58,11435,11436,11438,11441,11443,11445],{"class":60,"line":79},[58,11437,796],{"class":92},[58,11439,11440],{"class":75}," g_b ",[58,11442,383],{"class":92},[58,11444,2684],{"class":82},[58,11446,102],{"class":75},[58,11448,11449],{"class":60,"line":105},[58,11450,3046],{"emptyLinePlaceholder":720},[58,11452,11453],{"class":60,"line":627},[58,11454,11455],{"class":64},"\u002F\u002F全局常量\n",[58,11457,11458,11460,11462,11465,11467,11469],{"class":60,"line":509},[58,11459,7438],{"class":92},[58,11461,3028],{"class":92},[58,11463,11464],{"class":75}," c_g_a ",[58,11466,383],{"class":92},[58,11468,2684],{"class":82},[58,11470,102],{"class":75},[58,11472,11473,11475,11477,11480,11482,11484],{"class":60,"line":559},[58,11474,7438],{"class":92},[58,11476,3028],{"class":92},[58,11478,11479],{"class":75}," c_g_b ",[58,11481,383],{"class":92},[58,11483,2684],{"class":82},[58,11485,102],{"class":75},[58,11487,11488],{"class":60,"line":654},[58,11489,3046],{"emptyLinePlaceholder":720},[58,11491,11492,11494,11496],{"class":60,"line":671},[58,11493,796],{"class":92},[58,11495,2619],{"class":379},[58,11497,11498],{"class":75},"() {\n",[58,11500,11501],{"class":60,"line":677},[58,11502,3046],{"emptyLinePlaceholder":720},[58,11504,11505],{"class":60,"line":2260},[58,11506,11507],{"class":64},"    \u002F\u002F局部变量\n",[58,11509,11510,11512,11515,11517,11519],{"class":60,"line":694},[58,11511,2631],{"class":92},[58,11513,11514],{"class":75}," a ",[58,11516,383],{"class":92},[58,11518,2684],{"class":82},[58,11520,102],{"class":75},[58,11522,11523,11525,11528,11530,11532],{"class":60,"line":2270},[58,11524,2631],{"class":92},[58,11526,11527],{"class":75}," b ",[58,11529,383],{"class":92},[58,11531,2684],{"class":82},[58,11533,102],{"class":75},[58,11535,11536],{"class":60,"line":2275},[58,11537,3046],{"emptyLinePlaceholder":720},[58,11539,11540],{"class":60,"line":2289},[58,11541,11542],{"class":64},"    \u002F\u002F打印地址\n",[58,11544,11545,11547,11549,11552,11554,11556,11558,11560,11562,11565,11567],{"class":60,"line":2294},[58,11546,7175],{"class":75},[58,11548,1827],{"class":92},[58,11550,11551],{"class":386}," \"局部变量a地址为： \"",[58,11553,2094],{"class":92},[58,11555,2305],{"class":75},[58,11557,796],{"class":92},[58,11559,1215],{"class":75},[58,11561,1139],{"class":92},[58,11563,11564],{"class":75},"a ",[58,11566,1827],{"class":92},[58,11568,9486],{"class":75},[58,11570,11571,11573,11575,11578,11580,11582,11584,11586,11588,11591,11593],{"class":60,"line":2300},[58,11572,7175],{"class":75},[58,11574,1827],{"class":92},[58,11576,11577],{"class":386}," \"局部变量b地址为： \"",[58,11579,2094],{"class":92},[58,11581,2305],{"class":75},[58,11583,796],{"class":92},[58,11585,1215],{"class":75},[58,11587,1139],{"class":92},[58,11589,11590],{"class":75},"b ",[58,11592,1827],{"class":92},[58,11594,9486],{"class":75},[58,11596,11597],{"class":60,"line":2321},[58,11598,3046],{"emptyLinePlaceholder":720},[58,11600,11601,11603,11605,11608,11610,11613,11615,11617,11619,11622,11624],{"class":60,"line":2326},[58,11602,7175],{"class":75},[58,11604,1827],{"class":92},[58,11606,11607],{"class":386}," \"全局变量g_a地址为： \"",[58,11609,2094],{"class":92},[58,11611,11612],{"class":75},"  (",[58,11614,796],{"class":92},[58,11616,1215],{"class":75},[58,11618,1139],{"class":92},[58,11620,11621],{"class":75},"g_a ",[58,11623,1827],{"class":92},[58,11625,9486],{"class":75},[58,11627,11628,11630,11632,11635,11637,11639,11641,11643,11645,11648,11650],{"class":60,"line":2340},[58,11629,7175],{"class":75},[58,11631,1827],{"class":92},[58,11633,11634],{"class":386}," \"全局变量g_b地址为： \"",[58,11636,2094],{"class":92},[58,11638,11612],{"class":75},[58,11640,796],{"class":92},[58,11642,1215],{"class":75},[58,11644,1139],{"class":92},[58,11646,11647],{"class":75},"g_b ",[58,11649,1827],{"class":92},[58,11651,9486],{"class":75},[58,11653,11654],{"class":60,"line":2345},[58,11655,3046],{"emptyLinePlaceholder":720},[58,11657,11658],{"class":60,"line":2374},[58,11659,11660],{"class":64},"    \u002F\u002F静态变量\n",[58,11662,11663,11666,11668,11671,11673,11675],{"class":60,"line":2379},[58,11664,11665],{"class":92},"    static",[58,11667,3028],{"class":92},[58,11669,11670],{"class":75}," s_a ",[58,11672,383],{"class":92},[58,11674,2684],{"class":82},[58,11676,102],{"class":75},[58,11678,11679,11681,11683,11686,11688,11690],{"class":60,"line":2396},[58,11680,11665],{"class":92},[58,11682,3028],{"class":92},[58,11684,11685],{"class":75}," s_b ",[58,11687,383],{"class":92},[58,11689,2684],{"class":82},[58,11691,102],{"class":75},[58,11693,11694],{"class":60,"line":2401},[58,11695,3046],{"emptyLinePlaceholder":720},[58,11697,11698,11700,11702,11705,11707,11709,11711,11713,11715,11718,11720],{"class":60,"line":2406},[58,11699,7175],{"class":75},[58,11701,1827],{"class":92},[58,11703,11704],{"class":386}," \"静态变量s_a地址为： \"",[58,11706,2094],{"class":92},[58,11708,2305],{"class":75},[58,11710,796],{"class":92},[58,11712,1215],{"class":75},[58,11714,1139],{"class":92},[58,11716,11717],{"class":75},"s_a ",[58,11719,1827],{"class":92},[58,11721,9486],{"class":75},[58,11723,11724,11726,11728,11731,11733,11735,11737,11739,11741,11744,11746],{"class":60,"line":2411},[58,11725,7175],{"class":75},[58,11727,1827],{"class":92},[58,11729,11730],{"class":386}," \"静态变量s_b地址为： \"",[58,11732,2094],{"class":92},[58,11734,2305],{"class":75},[58,11736,796],{"class":92},[58,11738,1215],{"class":75},[58,11740,1139],{"class":92},[58,11742,11743],{"class":75},"s_b ",[58,11745,1827],{"class":92},[58,11747,9486],{"class":75},[58,11749,11750],{"class":60,"line":2425},[58,11751,3046],{"emptyLinePlaceholder":720},[58,11753,11754,11756,11758,11761,11763,11765,11767,11769,11771,11773,11775],{"class":60,"line":2430},[58,11755,7175],{"class":75},[58,11757,1827],{"class":92},[58,11759,11760],{"class":386}," \"字符串常量地址为： \"",[58,11762,2094],{"class":92},[58,11764,2305],{"class":75},[58,11766,796],{"class":92},[58,11768,1215],{"class":75},[58,11770,1139],{"class":92},[58,11772,1844],{"class":386},[58,11774,2094],{"class":92},[58,11776,9486],{"class":75},[58,11778,11779,11781,11783,11785,11787,11789,11791,11793,11795,11798,11800],{"class":60,"line":3223},[58,11780,7175],{"class":75},[58,11782,1827],{"class":92},[58,11784,11760],{"class":386},[58,11786,2094],{"class":92},[58,11788,2305],{"class":75},[58,11790,796],{"class":92},[58,11792,1215],{"class":75},[58,11794,1139],{"class":92},[58,11796,11797],{"class":386},"\"hello world1\"",[58,11799,2094],{"class":92},[58,11801,9486],{"class":75},[58,11803,11804],{"class":60,"line":3237},[58,11805,3046],{"emptyLinePlaceholder":720},[58,11807,11808,11810,11812,11815,11817,11819,11821,11823,11825,11828,11830],{"class":60,"line":3245},[58,11809,7175],{"class":75},[58,11811,1827],{"class":92},[58,11813,11814],{"class":386}," \"全局常量c_g_a地址为： \"",[58,11816,2094],{"class":92},[58,11818,2305],{"class":75},[58,11820,796],{"class":92},[58,11822,1215],{"class":75},[58,11824,1139],{"class":92},[58,11826,11827],{"class":75},"c_g_a ",[58,11829,1827],{"class":92},[58,11831,9486],{"class":75},[58,11833,11834,11836,11838,11841,11843,11845,11847,11849,11851,11854,11856],{"class":60,"line":3250},[58,11835,7175],{"class":75},[58,11837,1827],{"class":92},[58,11839,11840],{"class":386}," \"全局常量c_g_b地址为： \"",[58,11842,2094],{"class":92},[58,11844,2305],{"class":75},[58,11846,796],{"class":92},[58,11848,1215],{"class":75},[58,11850,1139],{"class":92},[58,11852,11853],{"class":75},"c_g_b ",[58,11855,1827],{"class":92},[58,11857,9486],{"class":75},[58,11859,11860],{"class":60,"line":3256},[58,11861,3046],{"emptyLinePlaceholder":720},[58,11863,11864,11867,11869,11872,11874,11876],{"class":60,"line":3262},[58,11865,11866],{"class":92},"    const",[58,11868,3028],{"class":92},[58,11870,11871],{"class":75}," c_l_a ",[58,11873,383],{"class":92},[58,11875,2684],{"class":82},[58,11877,102],{"class":75},[58,11879,11880,11882,11884,11887,11889,11891],{"class":60,"line":3267},[58,11881,11866],{"class":92},[58,11883,3028],{"class":92},[58,11885,11886],{"class":75}," c_l_b ",[58,11888,383],{"class":92},[58,11890,2684],{"class":82},[58,11892,102],{"class":75},[58,11894,11895,11897,11899,11902,11904,11906,11908,11910,11912,11915,11917],{"class":60,"line":8594},[58,11896,7175],{"class":75},[58,11898,1827],{"class":92},[58,11900,11901],{"class":386}," \"局部常量c_l_a地址为： \"",[58,11903,2094],{"class":92},[58,11905,2305],{"class":75},[58,11907,796],{"class":92},[58,11909,1215],{"class":75},[58,11911,1139],{"class":92},[58,11913,11914],{"class":75},"c_l_a ",[58,11916,1827],{"class":92},[58,11918,9486],{"class":75},[58,11920,11921,11923,11925,11928,11930,11932,11934,11936,11938,11941,11943],{"class":60,"line":8618},[58,11922,7175],{"class":75},[58,11924,1827],{"class":92},[58,11926,11927],{"class":386}," \"局部常量c_l_b地址为： \"",[58,11929,2094],{"class":92},[58,11931,2305],{"class":75},[58,11933,796],{"class":92},[58,11935,1215],{"class":75},[58,11937,1139],{"class":92},[58,11939,11940],{"class":75},"c_l_b ",[58,11942,1827],{"class":92},[58,11944,9486],{"class":75},[58,11946,11947],{"class":60,"line":8623},[58,11948,3046],{"emptyLinePlaceholder":720},[58,11950,11951,11953,11955,11957],{"class":60,"line":8629},[58,11952,2949],{"class":379},[58,11954,793],{"class":75},[58,11956,2954],{"class":386},[58,11958,3365],{"class":75},[58,11960,11961],{"class":60,"line":8656},[58,11962,3046],{"emptyLinePlaceholder":720},[58,11964,11965,11967,11969],{"class":60,"line":8661},[58,11966,4736],{"class":92},[58,11968,4739],{"class":82},[58,11970,102],{"class":75},[58,11972,11973],{"class":60,"line":8667},[58,11974,108],{"class":75},[175,11976,11977],{},"总结：",[124,11979,11980,11983,11986,11989],{},[22,11981,11982],{},"c++中程序运行前分为全局区和代码区",[22,11984,11985],{},"代码区特点是共享和只读",[22,11987,11988],{},"全局区中存放全局变量、静态变量、常量",[22,11990,11991],{},"常量区中存放const修饰的全局常量和字符串常量",[114,11993,11995],{"id":11994},"_512程序运行后","5.1.2程序运行后",[19,11997,11998],{},[22,11999,12000],{},"栈区：",[124,12002,12003,12010],{},[22,12004,12005,12006,12009],{},"由编译器自动分配释放, 存放",[25,12007,12008],{},"函数的参数值,局部变量","等",[22,12011,12012,12013,12016],{},"注意事项：",[25,12014,12015],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[48,12018,12020],{"className":781,"code":12019,"language":783,"meta":53,"style":53},"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",[55,12021,12022,12033,12037,12052,12064,12068,12072,12080,12085,12100,12118,12135,12145,12153],{"__ignoreMap":53},[58,12023,12024,12026,12028,12031],{"class":60,"line":61},[58,12025,796],{"class":92},[58,12027,7164],{"class":92},[58,12029,12030],{"class":379}," func",[58,12032,2622],{"class":75},[58,12034,12035],{"class":60,"line":68},[58,12036,2195],{"class":75},[58,12038,12039,12041,12043,12045,12047,12049],{"class":60,"line":79},[58,12040,2631],{"class":92},[58,12042,11514],{"class":75},[58,12044,383],{"class":92},[58,12046,2684],{"class":82},[58,12048,846],{"class":75},[58,12050,12051],{"class":64}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[58,12053,12054,12056,12058,12061],{"class":60,"line":105},[58,12055,4736],{"class":92},[58,12057,11229],{"class":92},[58,12059,12060],{"class":75},"a;",[58,12062,12063],{"class":64}," \u002F\u002F放回局部变量的地址\n",[58,12065,12066],{"class":60,"line":627},[58,12067,108],{"class":75},[58,12069,12070],{"class":60,"line":509},[58,12071,3046],{"emptyLinePlaceholder":720},[58,12073,12074,12076,12078],{"class":60,"line":559},[58,12075,796],{"class":92},[58,12077,2619],{"class":379},[58,12079,11498],{"class":75},[58,12081,12082],{"class":60,"line":654},[58,12083,12084],{"class":64},"    \u002F\u002F接受func的返回值\n",[58,12086,12087,12089,12091,12094,12096,12098],{"class":60,"line":671},[58,12088,2631],{"class":92},[58,12090,7164],{"class":92},[58,12092,12093],{"class":75},"p ",[58,12095,383],{"class":92},[58,12097,12030],{"class":379},[58,12099,6282],{"class":75},[58,12101,12102,12104,12106,12108,12110,12112,12115],{"class":60,"line":677},[58,12103,7175],{"class":75},[58,12105,1827],{"class":92},[58,12107,7164],{"class":92},[58,12109,12093],{"class":75},[58,12111,1827],{"class":92},[58,12113,12114],{"class":75}," endl;",[58,12116,12117],{"class":64}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[58,12119,12120,12122,12124,12126,12128,12130,12132],{"class":60,"line":2260},[58,12121,7175],{"class":75},[58,12123,1827],{"class":92},[58,12125,7164],{"class":92},[58,12127,12093],{"class":75},[58,12129,1827],{"class":92},[58,12131,12114],{"class":75},[58,12133,12134],{"class":64}," \u002F\u002F第二次这个数据不再保留\n",[58,12136,12137,12139,12141,12143],{"class":60,"line":694},[58,12138,2949],{"class":379},[58,12140,793],{"class":75},[58,12142,2954],{"class":386},[58,12144,3365],{"class":75},[58,12146,12147,12149,12151],{"class":60,"line":2270},[58,12148,4736],{"class":92},[58,12150,4739],{"class":82},[58,12152,102],{"class":75},[58,12154,12155],{"class":60,"line":2275},[58,12156,108],{"class":75},[175,12158,12159],{},"输出结果：",[175,12161,12162],{},[119,12163],{"alt":12164,"src":12165},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[175,12167,12168],{},"总结：不要返回局部变量的地址",[19,12170,12171],{"start":68},[22,12172,12173],{},"堆区",[124,12175,12176,12179],{},[22,12177,12178],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[22,12180,12181],{},"在c++中主要利用new在堆区开辟内存",[48,12183,12185],{"className":781,"code":12184,"language":783,"meta":53,"style":53},"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",[55,12186,12187,12202,12206,12211,12232,12239,12243,12251,12255,12260,12274,12286],{"__ignoreMap":53},[58,12188,12189,12191,12194,12197,12199],{"class":60,"line":61},[58,12190,796],{"class":92},[58,12192,12193],{"class":92},"  *",[58,12195,12196],{"class":379},"func",[58,12198,3073],{"class":75},[58,12200,12201],{"class":64},"  \u002F\u002F函数返回指针\n",[58,12203,12204],{"class":60,"line":68},[58,12205,2195],{"class":75},[58,12207,12208],{"class":60,"line":79},[58,12209,12210],{"class":64},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[58,12212,12213,12215,12217,12219,12221,12224,12226,12228,12230],{"class":60,"line":105},[58,12214,4793],{"class":92},[58,12216,7164],{"class":92},[58,12218,175],{"class":75},[58,12220,383],{"class":92},[58,12222,12223],{"class":92}," new",[58,12225,3028],{"class":92},[58,12227,793],{"class":75},[58,12229,1232],{"class":82},[58,12231,3365],{"class":75},[58,12233,12234,12236],{"class":60,"line":627},[58,12235,5027],{"class":92},[58,12237,12238],{"class":75}," p;\n",[58,12240,12241],{"class":60,"line":509},[58,12242,108],{"class":75},[58,12244,12245,12247,12249],{"class":60,"line":559},[58,12246,796],{"class":92},[58,12248,2619],{"class":379},[58,12250,2622],{"class":75},[58,12252,12253],{"class":60,"line":654},[58,12254,2195],{"class":75},[58,12256,12257],{"class":60,"line":671},[58,12258,12259],{"class":64},"    \u002F\u002F在堆区开辟数据\n",[58,12261,12262,12264,12266,12268,12270,12272],{"class":60,"line":677},[58,12263,2631],{"class":92},[58,12265,7164],{"class":92},[58,12267,175],{"class":75},[58,12269,383],{"class":92},[58,12271,12196],{"class":379},[58,12273,6282],{"class":75},[58,12275,12276,12278,12280,12282,12284],{"class":60,"line":2260},[58,12277,2200],{"class":75},[58,12279,7065],{"class":92},[58,12281,175],{"class":75},[58,12283,1827],{"class":92},[58,12285,1849],{"class":75},[58,12287,12288],{"class":60,"line":694},[58,12289,108],{"class":75},[175,12291,12292],{},"图片展示：",[175,12294,12295],{},[119,12296],{"alt":12164,"src":12297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[175,12299,12300],{},"堆区内存由程序员管生死！！！",[19,12302,12303],{"start":79},[22,12304,12305],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[175,12307,12308],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[175,12310,12311,12312],{},"​语法：",[55,12313,12314],{}," new 数据类型",[175,12316,12317],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[48,12319,12321],{"className":781,"code":12320,"language":783,"meta":53,"style":53},"\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",[55,12322,12323,12328,12338,12342,12347,12352,12374,12378,12386,12390,12404,12416,12428,12440,12445,12450,12461,12465,12470,12478,12482,12487,12509,12535,12539,12557,12561,12587,12591,12603,12607,12612,12617,12625,12629,12633,12641,12645,12651,12657],{"__ignoreMap":53},[58,12324,12325],{"class":60,"line":61},[58,12326,12327],{"class":64},"\u002F\u002F1.new的基本语法\n",[58,12329,12330,12332,12334,12336],{"class":60,"line":68},[58,12331,796],{"class":92},[58,12333,7164],{"class":92},[58,12335,12196],{"class":379},[58,12337,2622],{"class":75},[58,12339,12340],{"class":60,"line":79},[58,12341,2195],{"class":75},[58,12343,12344],{"class":60,"line":105},[58,12345,12346],{"class":64},"    \u002F\u002F在堆区创建整型数据\n",[58,12348,12349],{"class":60,"line":627},[58,12350,12351],{"class":64},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[58,12353,12354,12356,12358,12360,12363,12365,12367,12369,12371],{"class":60,"line":509},[58,12355,2631],{"class":92},[58,12357,7164],{"class":92},[58,12359,175],{"class":75},[58,12361,12362],{"class":92},"=new",[58,12364,3028],{"class":92},[58,12366,793],{"class":75},[58,12368,1232],{"class":82},[58,12370,6612],{"class":75},[58,12372,12373],{"class":64},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[58,12375,12376],{"class":60,"line":559},[58,12377,108],{"class":75},[58,12379,12380,12382,12384],{"class":60,"line":654},[58,12381,6010],{"class":92},[58,12383,6234],{"class":379},[58,12385,2622],{"class":75},[58,12387,12388],{"class":60,"line":671},[58,12389,2195],{"class":75},[58,12391,12392,12394,12396,12398,12400,12402],{"class":60,"line":677},[58,12393,2631],{"class":92},[58,12395,7164],{"class":92},[58,12397,175],{"class":75},[58,12399,383],{"class":92},[58,12401,12196],{"class":379},[58,12403,6282],{"class":75},[58,12405,12406,12408,12410,12412,12414],{"class":60,"line":2260},[58,12407,2200],{"class":75},[58,12409,7065],{"class":92},[58,12411,175],{"class":75},[58,12413,1827],{"class":92},[58,12415,1849],{"class":75},[58,12417,12418,12420,12422,12424,12426],{"class":60,"line":694},[58,12419,2200],{"class":75},[58,12421,7065],{"class":92},[58,12423,175],{"class":75},[58,12425,1827],{"class":92},[58,12427,1849],{"class":75},[58,12429,12430,12432,12434,12436,12438],{"class":60,"line":2270},[58,12431,2200],{"class":75},[58,12433,7065],{"class":92},[58,12435,175],{"class":75},[58,12437,1827],{"class":92},[58,12439,1849],{"class":75},[58,12441,12442],{"class":60,"line":2275},[58,12443,12444],{"class":64},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[58,12446,12447],{"class":60,"line":2289},[58,12448,12449],{"class":64},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[58,12451,12452,12455,12458],{"class":60,"line":2294},[58,12453,12454],{"class":92},"    delete",[58,12456,12457],{"class":75}," p;",[58,12459,12460],{"class":64},"\u002F\u002F删除这块地址\n",[58,12462,12463],{"class":60,"line":2300},[58,12464,108],{"class":75},[58,12466,12467],{"class":60,"line":2321},[58,12468,12469],{"class":64},"\u002F\u002F2.在堆区利用new开辟数组\n",[58,12471,12472,12474,12476],{"class":60,"line":2326},[58,12473,6010],{"class":92},[58,12475,6303],{"class":379},[58,12477,2622],{"class":75},[58,12479,12480],{"class":60,"line":2340},[58,12481,2195],{"class":75},[58,12483,12484],{"class":60,"line":2345},[58,12485,12486],{"class":64},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[58,12488,12489,12491,12493,12495,12497,12499,12501,12503,12506],{"class":60,"line":2374},[58,12490,2631],{"class":92},[58,12492,7164],{"class":92},[58,12494,4526],{"class":75},[58,12496,12362],{"class":92},[58,12498,3028],{"class":92},[58,12500,1675],{"class":75},[58,12502,1232],{"class":82},[58,12504,12505],{"class":75},"];",[58,12507,12508],{"class":64},"\u002F\u002F10代表数组有10个元素\n",[58,12510,12511,12513,12515,12517,12519,12521,12523,12525,12527,12529,12531,12533],{"class":60,"line":2379},[58,12512,3847],{"class":92},[58,12514,2305],{"class":75},[58,12516,796],{"class":92},[58,12518,3678],{"class":75},[58,12520,383],{"class":92},[58,12522,979],{"class":82},[58,12524,3685],{"class":75},[58,12526,373],{"class":92},[58,12528,1232],{"class":82},[58,12530,3685],{"class":75},[58,12532,2938],{"class":92},[58,12534,799],{"class":75},[58,12536,12537],{"class":60,"line":2396},[58,12538,2676],{"class":75},[58,12540,12541,12544,12546,12548,12550,12552,12554],{"class":60,"line":2401},[58,12542,12543],{"class":75},"        arr[i]",[58,12545,383],{"class":92},[58,12547,1227],{"class":75},[58,12549,1267],{"class":92},[58,12551,1097],{"class":82},[58,12553,846],{"class":75},[58,12555,12556],{"class":64},"\u002F\u002F给10个元素赋值100～109\n",[58,12558,12559],{"class":60,"line":2406},[58,12560,2833],{"class":75},[58,12562,12563,12565,12567,12569,12571,12573,12575,12577,12579,12581,12583,12585],{"class":60,"line":2411},[58,12564,3847],{"class":92},[58,12566,2305],{"class":75},[58,12568,796],{"class":92},[58,12570,3678],{"class":75},[58,12572,383],{"class":92},[58,12574,979],{"class":82},[58,12576,3685],{"class":75},[58,12578,373],{"class":92},[58,12580,1232],{"class":82},[58,12582,3685],{"class":75},[58,12584,2938],{"class":92},[58,12586,799],{"class":75},[58,12588,12589],{"class":60,"line":2425},[58,12590,2676],{"class":75},[58,12592,12593,12595,12597,12599,12601],{"class":60,"line":2430},[58,12594,4097],{"class":75},[58,12596,1827],{"class":92},[58,12598,5000],{"class":75},[58,12600,1827],{"class":92},[58,12602,1849],{"class":75},[58,12604,12605],{"class":60,"line":3223},[58,12606,2833],{"class":75},[58,12608,12609],{"class":60,"line":3237},[58,12610,12611],{"class":64},"    \u002F\u002F释放堆区数组\n",[58,12613,12614],{"class":60,"line":3245},[58,12615,12616],{"class":64},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[58,12618,12619,12622],{"class":60,"line":3250},[58,12620,12621],{"class":92},"    delete[]",[58,12623,12624],{"class":75}," arr;\n",[58,12626,12627],{"class":60,"line":3256},[58,12628,108],{"class":75},[58,12630,12631],{"class":60,"line":3262},[58,12632,3046],{"emptyLinePlaceholder":720},[58,12634,12635,12637,12639],{"class":60,"line":3267},[58,12636,796],{"class":92},[58,12638,2619],{"class":379},[58,12640,2622],{"class":75},[58,12642,12643],{"class":60,"line":8594},[58,12644,2195],{"class":75},[58,12646,12647,12649],{"class":60,"line":8618},[58,12648,6279],{"class":379},[58,12650,6282],{"class":75},[58,12652,12653,12655],{"class":60,"line":8623},[58,12654,6348],{"class":379},[58,12656,6282],{"class":75},[58,12658,12659],{"class":60,"line":8629},[58,12660,108],{"class":75},[702,12662,12663],{},"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":53,"searchDepth":68,"depth":68,"links":12665},[12666],{"id":11334,"depth":68,"text":11335,"children":12667},[12668,12669],{"id":11366,"depth":79,"text":11367},{"id":11994,"depth":79,"text":11995},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11326,"description":53},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12676,"title":12677,"body":12678,"description":53,"extension":718,"meta":14158,"navigation":720,"path":14159,"seo":14160,"stem":14161,"__hash__":14162},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12679,"toc":14150},[12680,12683,12687,12690,12693,12862,12866,12871,12888,12893,13045,13049,13052,13055,13448,13452,13455,13460,13463,13775,13779,13785,13945,13947,13955,13959,13962,13969,14147],[10,12681,12677],{"id":12682},"_6引用",[14,12684,12686],{"id":12685},"_61引用基本用法","6.1引用基本用法",[175,12688,12689],{},"引用的本质：给变量起别名",[175,12691,12692],{},"语法：数据类型 &别名=原名",[48,12694,12696],{"className":781,"code":12695,"language":783,"meta":53,"style":53},"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",[55,12697,12698,12706,12710,12722,12734,12738,12757,12776,12780,12791,12795,12814,12832,12836,12846,12850,12858],{"__ignoreMap":53},[58,12699,12700,12702,12704],{"class":60,"line":61},[58,12701,796],{"class":92},[58,12703,2619],{"class":379},[58,12705,11498],{"class":75},[58,12707,12708],{"class":60,"line":68},[58,12709,3046],{"emptyLinePlaceholder":720},[58,12711,12712,12714,12716,12718,12720],{"class":60,"line":79},[58,12713,2631],{"class":92},[58,12715,11514],{"class":75},[58,12717,383],{"class":92},[58,12719,2684],{"class":82},[58,12721,102],{"class":75},[58,12723,12724,12726,12728,12730,12732],{"class":60,"line":105},[58,12725,2631],{"class":92},[58,12727,11229],{"class":92},[58,12729,11590],{"class":75},[58,12731,383],{"class":92},[58,12733,2082],{"class":75},[58,12735,12736],{"class":60,"line":627},[58,12737,3046],{"emptyLinePlaceholder":720},[58,12739,12740,12742,12744,12747,12749,12751,12753,12755],{"class":60,"line":509},[58,12741,7175],{"class":75},[58,12743,1827],{"class":92},[58,12745,12746],{"class":386}," \"a = \"",[58,12748,2094],{"class":92},[58,12750,11514],{"class":75},[58,12752,1827],{"class":92},[58,12754,12114],{"class":75},[58,12756,7914],{"class":64},[58,12758,12759,12761,12763,12766,12768,12770,12772,12774],{"class":60,"line":559},[58,12760,7175],{"class":75},[58,12762,1827],{"class":92},[58,12764,12765],{"class":386}," \"b = \"",[58,12767,2094],{"class":92},[58,12769,11527],{"class":75},[58,12771,1827],{"class":92},[58,12773,12114],{"class":75},[58,12775,7914],{"class":64},[58,12777,12778],{"class":60,"line":654},[58,12779,3046],{"emptyLinePlaceholder":720},[58,12781,12782,12785,12787,12789],{"class":60,"line":671},[58,12783,12784],{"class":75},"    b ",[58,12786,383],{"class":92},[58,12788,6400],{"class":82},[58,12790,102],{"class":75},[58,12792,12793],{"class":60,"line":677},[58,12794,3046],{"emptyLinePlaceholder":720},[58,12796,12797,12799,12801,12803,12805,12807,12809,12811],{"class":60,"line":2260},[58,12798,7175],{"class":75},[58,12800,1827],{"class":92},[58,12802,12746],{"class":386},[58,12804,2094],{"class":92},[58,12806,11514],{"class":75},[58,12808,1827],{"class":92},[58,12810,12114],{"class":75},[58,12812,12813],{"class":64},"\u002F\u002F100\n",[58,12815,12816,12818,12820,12822,12824,12826,12828,12830],{"class":60,"line":694},[58,12817,7175],{"class":75},[58,12819,1827],{"class":92},[58,12821,12765],{"class":386},[58,12823,2094],{"class":92},[58,12825,11527],{"class":75},[58,12827,1827],{"class":92},[58,12829,12114],{"class":75},[58,12831,12813],{"class":64},[58,12833,12834],{"class":60,"line":2270},[58,12835,3046],{"emptyLinePlaceholder":720},[58,12837,12838,12840,12842,12844],{"class":60,"line":2275},[58,12839,2949],{"class":379},[58,12841,793],{"class":75},[58,12843,2954],{"class":386},[58,12845,3365],{"class":75},[58,12847,12848],{"class":60,"line":2289},[58,12849,3046],{"emptyLinePlaceholder":720},[58,12851,12852,12854,12856],{"class":60,"line":2294},[58,12853,4736],{"class":92},[58,12855,4739],{"class":82},[58,12857,102],{"class":75},[58,12859,12860],{"class":60,"line":2300},[58,12861,108],{"class":75},[14,12863,12865],{"id":12864},"_62引用的注意事项","6.2引用的注意事项",[19,12867,12868],{},[22,12869,12870],{},"引用必须要初始化",[48,12872,12874],{"className":781,"code":12873,"language":783,"meta":53,"style":53},"int &b;\u002F\u002F非常错误！\n",[55,12875,12876],{"__ignoreMap":53},[58,12877,12878,12880,12882,12885],{"class":60,"line":61},[58,12879,796],{"class":92},[58,12881,11229],{"class":92},[58,12883,12884],{"class":75},"b;",[58,12886,12887],{"class":64},"\u002F\u002F非常错误！\n",[19,12889,12890],{"start":68},[22,12891,12892],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[48,12894,12896],{"className":781,"code":12895,"language":783,"meta":53,"style":53},"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",[55,12897,12898,12906,12918,12930,12938,12954,12967,12985,13003,13023,13033,13041],{"__ignoreMap":53},[58,12899,12900,12902,12904],{"class":60,"line":61},[58,12901,796],{"class":92},[58,12903,2619],{"class":379},[58,12905,11498],{"class":75},[58,12907,12908,12910,12912,12914,12916],{"class":60,"line":68},[58,12909,2631],{"class":92},[58,12911,11514],{"class":75},[58,12913,383],{"class":92},[58,12915,2684],{"class":82},[58,12917,102],{"class":75},[58,12919,12920,12922,12924,12926,12928],{"class":60,"line":79},[58,12921,2631],{"class":92},[58,12923,11527],{"class":75},[58,12925,383],{"class":92},[58,12927,9596],{"class":82},[58,12929,102],{"class":75},[58,12931,12932,12935],{"class":60,"line":105},[58,12933,12934],{"class":64},"    \u002F\u002Fint &c;",[58,12936,12937],{"class":64}," \u002F\u002F错误，引用必须初始化\n",[58,12939,12940,12942,12944,12946,12948,12951],{"class":60,"line":627},[58,12941,2631],{"class":92},[58,12943,11229],{"class":92},[58,12945,3592],{"class":75},[58,12947,383],{"class":92},[58,12949,12950],{"class":75}," a;",[58,12952,12953],{"class":64}," \u002F\u002F一旦初始化后，就不可以更改\n",[58,12955,12956,12959,12961,12964],{"class":60,"line":509},[58,12957,12958],{"class":75},"    c ",[58,12960,383],{"class":92},[58,12962,12963],{"class":75}," b;",[58,12965,12966],{"class":64}," \u002F\u002F这是赋值操作，不是更改引用\n",[58,12968,12969,12971,12973,12975,12977,12979,12981,12983],{"class":60,"line":559},[58,12970,7175],{"class":75},[58,12972,1827],{"class":92},[58,12974,12746],{"class":386},[58,12976,2094],{"class":92},[58,12978,11514],{"class":75},[58,12980,1827],{"class":92},[58,12982,12114],{"class":75},[58,12984,7899],{"class":64},[58,12986,12987,12989,12991,12993,12995,12997,12999,13001],{"class":60,"line":654},[58,12988,7175],{"class":75},[58,12990,1827],{"class":92},[58,12992,12765],{"class":386},[58,12994,2094],{"class":92},[58,12996,11527],{"class":75},[58,12998,1827],{"class":92},[58,13000,12114],{"class":75},[58,13002,7899],{"class":64},[58,13004,13005,13007,13009,13012,13014,13017,13019,13021],{"class":60,"line":671},[58,13006,7175],{"class":75},[58,13008,1827],{"class":92},[58,13010,13011],{"class":386}," \"c = \"",[58,13013,2094],{"class":92},[58,13015,13016],{"class":75}," c ",[58,13018,1827],{"class":92},[58,13020,12114],{"class":75},[58,13022,7899],{"class":64},[58,13024,13025,13027,13029,13031],{"class":60,"line":677},[58,13026,2949],{"class":379},[58,13028,793],{"class":75},[58,13030,2954],{"class":386},[58,13032,3365],{"class":75},[58,13034,13035,13037,13039],{"class":60,"line":2260},[58,13036,4736],{"class":92},[58,13038,4739],{"class":82},[58,13040,102],{"class":75},[58,13042,13043],{"class":60,"line":694},[58,13044,108],{"class":75},[14,13046,13048],{"id":13047},"_63引用做函数参数","6.3引用做函数参数",[175,13050,13051],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[175,13053,13054],{},"优点：可以简化指针修改实参",[48,13056,13058],{"className":781,"code":13057,"language":783,"meta":53,"style":53},"\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",[55,13059,13060,13065,13087,13098,13108,13117,13121,13125,13130,13152,13164,13176,13186,13190,13194,13199,13221,13231,13239,13247,13251,13255,13263,13267,13279,13291,13295,13306,13332,13336,13356,13380,13384,13394,13418,13422,13432,13436,13444],{"__ignoreMap":53},[58,13061,13062],{"class":60,"line":61},[58,13063,13064],{"class":64},"\u002F\u002F1. 值传递\n",[58,13066,13067,13069,13072,13074,13076,13078,13080,13082,13084],{"class":60,"line":68},[58,13068,6010],{"class":92},[58,13070,13071],{"class":379}," mySwap01",[58,13073,793],{"class":75},[58,13075,796],{"class":92},[58,13077,2048],{"class":5862},[58,13079,469],{"class":75},[58,13081,796],{"class":92},[58,13083,3479],{"class":5862},[58,13085,13086],{"class":75},") {\n",[58,13088,13089,13091,13094,13096],{"class":60,"line":79},[58,13090,2631],{"class":92},[58,13092,13093],{"class":75}," temp ",[58,13095,383],{"class":92},[58,13097,2082],{"class":75},[58,13099,13100,13103,13105],{"class":60,"line":105},[58,13101,13102],{"class":75},"    a ",[58,13104,383],{"class":92},[58,13106,13107],{"class":75}," b;\n",[58,13109,13110,13112,13114],{"class":60,"line":627},[58,13111,12784],{"class":75},[58,13113,383],{"class":92},[58,13115,13116],{"class":75}," temp;\n",[58,13118,13119],{"class":60,"line":509},[58,13120,108],{"class":75},[58,13122,13123],{"class":60,"line":559},[58,13124,3046],{"emptyLinePlaceholder":720},[58,13126,13127],{"class":60,"line":654},[58,13128,13129],{"class":64},"\u002F\u002F2. 地址传递\n",[58,13131,13132,13134,13137,13139,13142,13144,13146,13148,13150],{"class":60,"line":671},[58,13133,6010],{"class":92},[58,13135,13136],{"class":379}," mySwap02",[58,13138,793],{"class":75},[58,13140,13141],{"class":92},"int*",[58,13143,2048],{"class":5862},[58,13145,469],{"class":75},[58,13147,13141],{"class":92},[58,13149,3479],{"class":5862},[58,13151,13086],{"class":75},[58,13153,13154,13156,13158,13160,13162],{"class":60,"line":677},[58,13155,2631],{"class":92},[58,13157,13093],{"class":75},[58,13159,383],{"class":92},[58,13161,7164],{"class":92},[58,13163,6843],{"class":75},[58,13165,13166,13168,13170,13172,13174],{"class":60,"line":2260},[58,13167,7049],{"class":92},[58,13169,11564],{"class":75},[58,13171,383],{"class":92},[58,13173,7164],{"class":92},[58,13175,6715],{"class":75},[58,13177,13178,13180,13182,13184],{"class":60,"line":694},[58,13179,7049],{"class":92},[58,13181,11590],{"class":75},[58,13183,383],{"class":92},[58,13185,13116],{"class":75},[58,13187,13188],{"class":60,"line":2270},[58,13189,108],{"class":75},[58,13191,13192],{"class":60,"line":2275},[58,13193,3046],{"emptyLinePlaceholder":720},[58,13195,13196],{"class":60,"line":2289},[58,13197,13198],{"class":64},"\u002F\u002F3. 引用传递\n",[58,13200,13201,13203,13206,13208,13211,13213,13215,13217,13219],{"class":60,"line":2294},[58,13202,6010],{"class":92},[58,13204,13205],{"class":379}," mySwap03",[58,13207,793],{"class":75},[58,13209,13210],{"class":92},"int&",[58,13212,2048],{"class":5862},[58,13214,469],{"class":75},[58,13216,13210],{"class":92},[58,13218,3479],{"class":5862},[58,13220,13086],{"class":75},[58,13222,13223,13225,13227,13229],{"class":60,"line":2300},[58,13224,2631],{"class":92},[58,13226,13093],{"class":75},[58,13228,383],{"class":92},[58,13230,2082],{"class":75},[58,13232,13233,13235,13237],{"class":60,"line":2321},[58,13234,13102],{"class":75},[58,13236,383],{"class":92},[58,13238,13107],{"class":75},[58,13240,13241,13243,13245],{"class":60,"line":2326},[58,13242,12784],{"class":75},[58,13244,383],{"class":92},[58,13246,13116],{"class":75},[58,13248,13249],{"class":60,"line":2340},[58,13250,108],{"class":75},[58,13252,13253],{"class":60,"line":2345},[58,13254,3046],{"emptyLinePlaceholder":720},[58,13256,13257,13259,13261],{"class":60,"line":2374},[58,13258,796],{"class":92},[58,13260,2619],{"class":379},[58,13262,11498],{"class":75},[58,13264,13265],{"class":60,"line":2379},[58,13266,3046],{"emptyLinePlaceholder":720},[58,13268,13269,13271,13273,13275,13277],{"class":60,"line":2396},[58,13270,2631],{"class":92},[58,13272,11514],{"class":75},[58,13274,383],{"class":92},[58,13276,2684],{"class":82},[58,13278,102],{"class":75},[58,13280,13281,13283,13285,13287,13289],{"class":60,"line":2401},[58,13282,2631],{"class":92},[58,13284,11527],{"class":75},[58,13286,383],{"class":92},[58,13288,9596],{"class":82},[58,13290,102],{"class":75},[58,13292,13293],{"class":60,"line":2406},[58,13294,3046],{"emptyLinePlaceholder":720},[58,13296,13297,13300,13303],{"class":60,"line":2411},[58,13298,13299],{"class":379},"    mySwap01",[58,13301,13302],{"class":75},"(a, b);",[58,13304,13305],{"class":64},"\u002F\u002F值传递，形参不会修饰实参\n",[58,13307,13308,13310,13312,13315,13317,13319,13321,13324,13326,13328,13330],{"class":60,"line":2425},[58,13309,7175],{"class":75},[58,13311,1827],{"class":92},[58,13313,13314],{"class":386}," \"a:\"",[58,13316,2094],{"class":92},[58,13318,11514],{"class":75},[58,13320,1827],{"class":92},[58,13322,13323],{"class":386}," \" b:\"",[58,13325,2094],{"class":92},[58,13327,11527],{"class":75},[58,13329,1827],{"class":92},[58,13331,9486],{"class":75},[58,13333,13334],{"class":60,"line":2430},[58,13335,3046],{"emptyLinePlaceholder":720},[58,13337,13338,13341,13343,13345,13348,13350,13353],{"class":60,"line":3223},[58,13339,13340],{"class":379},"    mySwap02",[58,13342,793],{"class":75},[58,13344,1139],{"class":92},[58,13346,13347],{"class":75},"a, ",[58,13349,1139],{"class":92},[58,13351,13352],{"class":75},"b);",[58,13354,13355],{"class":64},"\u002F\u002F地址传递，形参会修饰实参\n",[58,13357,13358,13360,13362,13364,13366,13368,13370,13372,13374,13376,13378],{"class":60,"line":3237},[58,13359,7175],{"class":75},[58,13361,1827],{"class":92},[58,13363,13314],{"class":386},[58,13365,2094],{"class":92},[58,13367,11514],{"class":75},[58,13369,1827],{"class":92},[58,13371,13323],{"class":386},[58,13373,2094],{"class":92},[58,13375,11527],{"class":75},[58,13377,1827],{"class":92},[58,13379,9486],{"class":75},[58,13381,13382],{"class":60,"line":3245},[58,13383,3046],{"emptyLinePlaceholder":720},[58,13385,13386,13389,13391],{"class":60,"line":3250},[58,13387,13388],{"class":379},"    mySwap03",[58,13390,13302],{"class":75},[58,13392,13393],{"class":64},"\u002F\u002F引用传递，形参会修饰实参\n",[58,13395,13396,13398,13400,13402,13404,13406,13408,13410,13412,13414,13416],{"class":60,"line":3256},[58,13397,7175],{"class":75},[58,13399,1827],{"class":92},[58,13401,13314],{"class":386},[58,13403,2094],{"class":92},[58,13405,11514],{"class":75},[58,13407,1827],{"class":92},[58,13409,13323],{"class":386},[58,13411,2094],{"class":92},[58,13413,11527],{"class":75},[58,13415,1827],{"class":92},[58,13417,9486],{"class":75},[58,13419,13420],{"class":60,"line":3262},[58,13421,3046],{"emptyLinePlaceholder":720},[58,13423,13424,13426,13428,13430],{"class":60,"line":3267},[58,13425,2949],{"class":379},[58,13427,793],{"class":75},[58,13429,2954],{"class":386},[58,13431,3365],{"class":75},[58,13433,13434],{"class":60,"line":8594},[58,13435,3046],{"emptyLinePlaceholder":720},[58,13437,13438,13440,13442],{"class":60,"line":8618},[58,13439,4736],{"class":92},[58,13441,4739],{"class":82},[58,13443,102],{"class":75},[58,13445,13446],{"class":60,"line":8623},[58,13447,108],{"class":75},[14,13449,13451],{"id":13450},"_64引用做函数的返回值","6.4引用做函数的返回值",[175,13453,13454],{},"作用：引用是可以作为函数的返回值存在的",[175,13456,195,13457],{},[25,13458,13459],{},"不要返回局部变量引用",[175,13461,13462],{},"用法：函数调用作为左值",[48,13464,13466],{"className":10586,"code":13465,"language":10588,"meta":53,"style":53},"\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",[55,13467,13468,13473,13481,13496,13502,13506,13510,13515,13523,13540,13546,13550,13554,13562,13566,13571,13585,13605,13624,13628,13633,13646,13666,13684,13688,13704,13708,13727,13745,13749,13759,13763,13771],{"__ignoreMap":53},[58,13469,13470],{"class":60,"line":61},[58,13471,13472],{"class":64},"\u002F\u002F返回局部变量引用\n",[58,13474,13475,13477,13479],{"class":60,"line":68},[58,13476,13210],{"class":92},[58,13478,6234],{"class":379},[58,13480,11498],{"class":75},[58,13482,13483,13485,13487,13489,13491,13493],{"class":60,"line":79},[58,13484,2631],{"class":92},[58,13486,11514],{"class":75},[58,13488,383],{"class":92},[58,13490,2684],{"class":82},[58,13492,846],{"class":75},[58,13494,13495],{"class":64}," \u002F\u002F局部变量\n",[58,13497,13498,13500],{"class":60,"line":105},[58,13499,4736],{"class":92},[58,13501,2082],{"class":75},[58,13503,13504],{"class":60,"line":627},[58,13505,108],{"class":75},[58,13507,13508],{"class":60,"line":509},[58,13509,3046],{"emptyLinePlaceholder":720},[58,13511,13512],{"class":60,"line":559},[58,13513,13514],{"class":64},"\u002F\u002F返回静态变量引用\n",[58,13516,13517,13519,13521],{"class":60,"line":654},[58,13518,13210],{"class":92},[58,13520,6303],{"class":379},[58,13522,11498],{"class":75},[58,13524,13525,13527,13529,13531,13533,13535,13537],{"class":60,"line":671},[58,13526,11665],{"class":92},[58,13528,3028],{"class":92},[58,13530,11514],{"class":75},[58,13532,383],{"class":92},[58,13534,9596],{"class":82},[58,13536,846],{"class":75},[58,13538,13539],{"class":64},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[58,13541,13542,13544],{"class":60,"line":677},[58,13543,4736],{"class":92},[58,13545,2082],{"class":75},[58,13547,13548],{"class":60,"line":2260},[58,13549,108],{"class":75},[58,13551,13552],{"class":60,"line":694},[58,13553,3046],{"emptyLinePlaceholder":720},[58,13555,13556,13558,13560],{"class":60,"line":2270},[58,13557,796],{"class":92},[58,13559,2619],{"class":379},[58,13561,11498],{"class":75},[58,13563,13564],{"class":60,"line":2275},[58,13565,3046],{"emptyLinePlaceholder":720},[58,13567,13568],{"class":60,"line":2289},[58,13569,13570],{"class":64},"    \u002F\u002F不能返回局部变量的引用\n",[58,13572,13573,13576,13579,13581,13583],{"class":60,"line":2294},[58,13574,13575],{"class":92},"    int&",[58,13577,13578],{"class":75}," ref ",[58,13580,383],{"class":92},[58,13582,6234],{"class":379},[58,13584,6282],{"class":75},[58,13586,13587,13589,13591,13594,13596,13598,13600,13602],{"class":60,"line":2300},[58,13588,7175],{"class":75},[58,13590,1827],{"class":92},[58,13592,13593],{"class":386}," \"ref = \"",[58,13595,2094],{"class":92},[58,13597,13578],{"class":75},[58,13599,1827],{"class":92},[58,13601,12114],{"class":75},[58,13603,13604],{"class":64},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[58,13606,13607,13609,13611,13613,13615,13617,13619,13621],{"class":60,"line":2321},[58,13608,7175],{"class":75},[58,13610,1827],{"class":92},[58,13612,13593],{"class":386},[58,13614,2094],{"class":92},[58,13616,13578],{"class":75},[58,13618,1827],{"class":92},[58,13620,12114],{"class":75},[58,13622,13623],{"class":64},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[58,13625,13626],{"class":60,"line":2326},[58,13627,3046],{"emptyLinePlaceholder":720},[58,13629,13630],{"class":60,"line":2340},[58,13631,13632],{"class":64},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[58,13634,13635,13637,13640,13642,13644],{"class":60,"line":2345},[58,13636,13575],{"class":92},[58,13638,13639],{"class":75}," ref2 ",[58,13641,383],{"class":92},[58,13643,6303],{"class":379},[58,13645,6282],{"class":75},[58,13647,13648,13650,13652,13655,13657,13659,13661,13663],{"class":60,"line":2374},[58,13649,7175],{"class":75},[58,13651,1827],{"class":92},[58,13653,13654],{"class":386}," \"ref2 = \"",[58,13656,2094],{"class":92},[58,13658,13639],{"class":75},[58,13660,1827],{"class":92},[58,13662,12114],{"class":75},[58,13664,13665],{"class":64}," \u002F\u002F20\n",[58,13667,13668,13670,13672,13674,13676,13678,13680,13682],{"class":60,"line":2379},[58,13669,7175],{"class":75},[58,13671,1827],{"class":92},[58,13673,13654],{"class":386},[58,13675,2094],{"class":92},[58,13677,13639],{"class":75},[58,13679,1827],{"class":92},[58,13681,12114],{"class":75},[58,13683,13665],{"class":64},[58,13685,13686],{"class":60,"line":2396},[58,13687,3046],{"emptyLinePlaceholder":720},[58,13689,13690,13692,13695,13697,13699,13701],{"class":60,"line":2401},[58,13691,6348],{"class":379},[58,13693,13694],{"class":75},"() ",[58,13696,383],{"class":92},[58,13698,3645],{"class":82},[58,13700,846],{"class":75},[58,13702,13703],{"class":64},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[58,13705,13706],{"class":60,"line":2406},[58,13707,3046],{"emptyLinePlaceholder":720},[58,13709,13710,13712,13714,13716,13718,13720,13722,13724],{"class":60,"line":2411},[58,13711,7175],{"class":75},[58,13713,1827],{"class":92},[58,13715,13654],{"class":386},[58,13717,2094],{"class":92},[58,13719,13639],{"class":75},[58,13721,1827],{"class":92},[58,13723,12114],{"class":75},[58,13725,13726],{"class":64}," \u002F\u002F1000\n",[58,13728,13729,13731,13733,13735,13737,13739,13741,13743],{"class":60,"line":2425},[58,13730,7175],{"class":75},[58,13732,1827],{"class":92},[58,13734,13654],{"class":386},[58,13736,2094],{"class":92},[58,13738,13639],{"class":75},[58,13740,1827],{"class":92},[58,13742,12114],{"class":75},[58,13744,13726],{"class":64},[58,13746,13747],{"class":60,"line":2430},[58,13748,3046],{"emptyLinePlaceholder":720},[58,13750,13751,13753,13755,13757],{"class":60,"line":3223},[58,13752,2949],{"class":379},[58,13754,793],{"class":75},[58,13756,2954],{"class":386},[58,13758,3365],{"class":75},[58,13760,13761],{"class":60,"line":3237},[58,13762,3046],{"emptyLinePlaceholder":720},[58,13764,13765,13767,13769],{"class":60,"line":3245},[58,13766,4736],{"class":92},[58,13768,4739],{"class":82},[58,13770,102],{"class":75},[58,13772,13773],{"class":60,"line":3250},[58,13774,108],{"class":75},[14,13776,13778],{"id":13777},"_65引用的本质","6.5引用的本质",[175,13780,13781,13782],{},"本质：",[25,13783,13784],{},"引用的本质在c++内部实现是一个指针常量.",[48,13786,13788],{"className":781,"code":13787,"language":783,"meta":53,"style":53},"\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",[55,13789,13790,13795,13811,13825,13829,13838,13850,13855,13860,13871,13884,13888,13904,13921,13925,13933,13941],{"__ignoreMap":53},[58,13791,13792],{"class":60,"line":61},[58,13793,13794],{"class":64},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[58,13796,13797,13799,13801,13803,13805,13808],{"class":60,"line":68},[58,13798,6010],{"class":92},[58,13800,12030],{"class":379},[58,13802,793],{"class":75},[58,13804,13210],{"class":92},[58,13806,13807],{"class":5862}," ref",[58,13809,13810],{"class":75},"){\n",[58,13812,13813,13816,13818,13820,13822],{"class":60,"line":79},[58,13814,13815],{"class":75},"    ref ",[58,13817,383],{"class":92},[58,13819,6400],{"class":82},[58,13821,846],{"class":75},[58,13823,13824],{"class":64}," \u002F\u002F ref是引用，转换为*ref = 100\n",[58,13826,13827],{"class":60,"line":105},[58,13828,108],{"class":75},[58,13830,13831,13833,13835],{"class":60,"line":627},[58,13832,796],{"class":92},[58,13834,2619],{"class":379},[58,13836,13837],{"class":75},"(){\n",[58,13839,13840,13842,13844,13846,13848],{"class":60,"line":509},[58,13841,2631],{"class":92},[58,13843,11514],{"class":75},[58,13845,383],{"class":92},[58,13847,2684],{"class":82},[58,13849,102],{"class":75},[58,13851,13852],{"class":60,"line":559},[58,13853,13854],{"class":75},"    \n",[58,13856,13857],{"class":60,"line":654},[58,13858,13859],{"class":64},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[58,13861,13862,13864,13866,13868],{"class":60,"line":671},[58,13863,13575],{"class":92},[58,13865,13578],{"class":75},[58,13867,383],{"class":92},[58,13869,13870],{"class":75}," a; \n",[58,13872,13873,13875,13877,13879,13881],{"class":60,"line":677},[58,13874,13815],{"class":75},[58,13876,383],{"class":92},[58,13878,9596],{"class":82},[58,13880,846],{"class":75},[58,13882,13883],{"class":64}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[58,13885,13886],{"class":60,"line":2260},[58,13887,13854],{"class":75},[58,13889,13890,13892,13894,13896,13898,13900,13902],{"class":60,"line":694},[58,13891,7175],{"class":75},[58,13893,1827],{"class":92},[58,13895,13314],{"class":386},[58,13897,2094],{"class":92},[58,13899,11514],{"class":75},[58,13901,1827],{"class":92},[58,13903,9486],{"class":75},[58,13905,13906,13908,13910,13913,13915,13917,13919],{"class":60,"line":2270},[58,13907,7175],{"class":75},[58,13909,1827],{"class":92},[58,13911,13912],{"class":386}," \"ref:\"",[58,13914,2094],{"class":92},[58,13916,13578],{"class":75},[58,13918,1827],{"class":92},[58,13920,9486],{"class":75},[58,13922,13923],{"class":60,"line":2275},[58,13924,13854],{"class":75},[58,13926,13927,13930],{"class":60,"line":2289},[58,13928,13929],{"class":379},"    func",[58,13931,13932],{"class":75},"(a);\n",[58,13934,13935,13937,13939],{"class":60,"line":2294},[58,13936,4736],{"class":92},[58,13938,4739],{"class":82},[58,13940,102],{"class":75},[58,13942,13943],{"class":60,"line":2300},[58,13944,108],{"class":75},[175,13946,11977],{},[19,13948,13949,13952],{},[22,13950,13951],{},"引用的本质，就是一个指针常量",[22,13953,13954],{},"引用一旦初始化，就不可以发生改变",[14,13956,13958],{"id":13957},"_66常量引用","6.6常量引用",[175,13960,13961],{},"作用：常量引用主要用来修饰形参",[175,13963,13964,13965,13968],{},"在函数形参列表中，可以加",[25,13966,13967],{},"const修饰形参","，防止形参改变实参",[48,13970,13972],{"className":781,"code":13971,"language":783,"meta":53,"style":53},"\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",[55,13973,13974,13979,13984,14003,14008,14021,14025,14029,14037,14041,14046,14051,14065,14069,14077,14089,14093,14098,14110,14117,14121,14131,14135,14143],{"__ignoreMap":53},[58,13975,13976],{"class":60,"line":61},[58,13977,13978],{"class":64},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[58,13980,13981],{"class":60,"line":68},[58,13982,13983],{"class":64},"\u002F\u002F加上const就不能修改实参的\n",[58,13985,13986,13988,13991,13993,13995,13998,14001],{"class":60,"line":79},[58,13987,6010],{"class":92},[58,13989,13990],{"class":379}," showValue",[58,13992,793],{"class":75},[58,13994,7438],{"class":92},[58,13996,13997],{"class":92}," int&",[58,13999,14000],{"class":5862}," v",[58,14002,13086],{"class":75},[58,14004,14005],{"class":60,"line":105},[58,14006,14007],{"class":64},"    \u002F\u002Fv += 100;\n",[58,14009,14010,14012,14014,14017,14019],{"class":60,"line":627},[58,14011,7175],{"class":75},[58,14013,1827],{"class":92},[58,14015,14016],{"class":75}," v ",[58,14018,1827],{"class":92},[58,14020,9486],{"class":75},[58,14022,14023],{"class":60,"line":509},[58,14024,108],{"class":75},[58,14026,14027],{"class":60,"line":559},[58,14028,3046],{"emptyLinePlaceholder":720},[58,14030,14031,14033,14035],{"class":60,"line":654},[58,14032,796],{"class":92},[58,14034,2619],{"class":379},[58,14036,11498],{"class":75},[58,14038,14039],{"class":60,"line":671},[58,14040,3046],{"emptyLinePlaceholder":720},[58,14042,14043],{"class":60,"line":677},[58,14044,14045],{"class":64},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[58,14047,14048],{"class":60,"line":2260},[58,14049,14050],{"class":64},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[58,14052,14053,14055,14057,14059,14061,14063],{"class":60,"line":694},[58,14054,11866],{"class":92},[58,14056,13997],{"class":92},[58,14058,13578],{"class":75},[58,14060,383],{"class":92},[58,14062,2684],{"class":82},[58,14064,102],{"class":75},[58,14066,14067],{"class":60,"line":2270},[58,14068,3046],{"emptyLinePlaceholder":720},[58,14070,14071,14074],{"class":60,"line":2275},[58,14072,14073],{"class":64},"    \u002F\u002Fref = 100;",[58,14075,14076],{"class":64},"  \u002F\u002F加入const后不可以修改变量\n",[58,14078,14079,14081,14083,14085,14087],{"class":60,"line":2289},[58,14080,7175],{"class":75},[58,14082,1827],{"class":92},[58,14084,13578],{"class":75},[58,14086,1827],{"class":92},[58,14088,9486],{"class":75},[58,14090,14091],{"class":60,"line":2294},[58,14092,3046],{"emptyLinePlaceholder":720},[58,14094,14095],{"class":60,"line":2300},[58,14096,14097],{"class":64},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[58,14099,14100,14102,14104,14106,14108],{"class":60,"line":2321},[58,14101,2631],{"class":92},[58,14103,11514],{"class":75},[58,14105,383],{"class":92},[58,14107,2684],{"class":82},[58,14109,102],{"class":75},[58,14111,14112,14115],{"class":60,"line":2326},[58,14113,14114],{"class":379},"    showValue",[58,14116,13932],{"class":75},[58,14118,14119],{"class":60,"line":2340},[58,14120,3046],{"emptyLinePlaceholder":720},[58,14122,14123,14125,14127,14129],{"class":60,"line":2345},[58,14124,2949],{"class":379},[58,14126,793],{"class":75},[58,14128,2954],{"class":386},[58,14130,3365],{"class":75},[58,14132,14133],{"class":60,"line":2374},[58,14134,3046],{"emptyLinePlaceholder":720},[58,14136,14137,14139,14141],{"class":60,"line":2379},[58,14138,4736],{"class":92},[58,14140,4739],{"class":82},[58,14142,102],{"class":75},[58,14144,14145],{"class":60,"line":2396},[58,14146,108],{"class":75},[702,14148,14149],{},"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":53,"searchDepth":68,"depth":68,"links":14151},[14152,14153,14154,14155,14156,14157],{"id":12685,"depth":68,"text":12686},{"id":12864,"depth":68,"text":12865},{"id":13047,"depth":68,"text":13048},{"id":13450,"depth":68,"text":13451},{"id":13777,"depth":68,"text":13778},{"id":13957,"depth":68,"text":13958},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12677,"description":53},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14164,"title":14165,"body":14166,"description":53,"extension":718,"meta":15247,"navigation":720,"path":15248,"seo":15249,"stem":15250,"__hash__":15251},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14167,"toc":15239},[14168,14171,14175,14178,14183,14415,14417,14428,14432,14435,14443,14547,14550,14554,14557,14561,14564,14569,14591,14597,14924,14927,14931,14939,15236],[10,14169,14165],{"id":14170},"_7函数高级部分",[14,14172,14174],{"id":14173},"_71函数默认参数","7.1函数默认参数",[175,14176,14177],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[175,14179,5827,14180],{},[55,14181,14182],{}," 返回值类型  函数名 （参数= 默认值）{}",[48,14184,14186],{"className":781,"code":14185,"language":783,"meta":53,"style":53},"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",[55,14187,14188,14223,14238,14242,14246,14251,14256,14285,14305,14315,14319,14323,14331,14335,14363,14385,14389,14399,14403,14411],{"__ignoreMap":53},[58,14189,14190,14192,14194,14196,14198,14200,14202,14204,14206,14209,14211,14213,14215,14217,14219,14221],{"class":60,"line":61},[58,14191,796],{"class":92},[58,14193,12030],{"class":379},[58,14195,793],{"class":75},[58,14197,796],{"class":92},[58,14199,2048],{"class":5862},[58,14201,469],{"class":75},[58,14203,796],{"class":92},[58,14205,3479],{"class":5862},[58,14207,14208],{"class":92}," =",[58,14210,2684],{"class":82},[58,14212,469],{"class":75},[58,14214,796],{"class":92},[58,14216,3495],{"class":5862},[58,14218,14208],{"class":92},[58,14220,2684],{"class":82},[58,14222,13086],{"class":75},[58,14224,14225,14227,14229,14231,14233,14235],{"class":60,"line":68},[58,14226,4736],{"class":92},[58,14228,11514],{"class":75},[58,14230,1267],{"class":92},[58,14232,11527],{"class":75},[58,14234,1267],{"class":92},[58,14236,14237],{"class":75}," c;\n",[58,14239,14240],{"class":60,"line":79},[58,14241,108],{"class":75},[58,14243,14244],{"class":60,"line":105},[58,14245,3046],{"emptyLinePlaceholder":720},[58,14247,14248],{"class":60,"line":627},[58,14249,14250],{"class":64},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[58,14252,14253],{"class":60,"line":509},[58,14254,14255],{"class":64},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[58,14257,14258,14260,14263,14265,14267,14269,14271,14273,14275,14277,14279,14281,14283],{"class":60,"line":559},[58,14259,796],{"class":92},[58,14261,14262],{"class":379}," func2",[58,14264,793],{"class":75},[58,14266,796],{"class":92},[58,14268,2048],{"class":5862},[58,14270,14208],{"class":92},[58,14272,2684],{"class":82},[58,14274,469],{"class":75},[58,14276,796],{"class":92},[58,14278,3479],{"class":5862},[58,14280,14208],{"class":92},[58,14282,2684],{"class":82},[58,14284,3365],{"class":75},[58,14286,14287,14289,14291,14293,14295,14297,14299,14301,14303],{"class":60,"line":654},[58,14288,796],{"class":92},[58,14290,14262],{"class":379},[58,14292,793],{"class":75},[58,14294,796],{"class":92},[58,14296,2048],{"class":5862},[58,14298,469],{"class":75},[58,14300,796],{"class":92},[58,14302,3479],{"class":5862},[58,14304,13086],{"class":75},[58,14306,14307,14309,14311,14313],{"class":60,"line":671},[58,14308,4736],{"class":92},[58,14310,11514],{"class":75},[58,14312,1267],{"class":92},[58,14314,13107],{"class":75},[58,14316,14317],{"class":60,"line":677},[58,14318,108],{"class":75},[58,14320,14321],{"class":60,"line":2260},[58,14322,3046],{"emptyLinePlaceholder":720},[58,14324,14325,14327,14329],{"class":60,"line":694},[58,14326,796],{"class":92},[58,14328,2619],{"class":379},[58,14330,11498],{"class":75},[58,14332,14333],{"class":60,"line":2270},[58,14334,3046],{"emptyLinePlaceholder":720},[58,14336,14337,14339,14341,14344,14346,14348,14350,14352,14354,14356,14359,14361],{"class":60,"line":2275},[58,14338,7175],{"class":75},[58,14340,1827],{"class":92},[58,14342,14343],{"class":386}," \"ret = \"",[58,14345,2094],{"class":92},[58,14347,12030],{"class":379},[58,14349,793],{"class":75},[58,14351,1486],{"class":82},[58,14353,469],{"class":75},[58,14355,1486],{"class":82},[58,14357,14358],{"class":75},") ",[58,14360,1827],{"class":92},[58,14362,9486],{"class":75},[58,14364,14365,14367,14369,14371,14373,14375,14377,14379,14381,14383],{"class":60,"line":2289},[58,14366,7175],{"class":75},[58,14368,1827],{"class":92},[58,14370,14343],{"class":386},[58,14372,2094],{"class":92},[58,14374,12030],{"class":379},[58,14376,793],{"class":75},[58,14378,1097],{"class":82},[58,14380,14358],{"class":75},[58,14382,1827],{"class":92},[58,14384,9486],{"class":75},[58,14386,14387],{"class":60,"line":2294},[58,14388,3046],{"emptyLinePlaceholder":720},[58,14390,14391,14393,14395,14397],{"class":60,"line":2300},[58,14392,2949],{"class":379},[58,14394,793],{"class":75},[58,14396,2954],{"class":386},[58,14398,3365],{"class":75},[58,14400,14401],{"class":60,"line":2321},[58,14402,3046],{"emptyLinePlaceholder":720},[58,14404,14405,14407,14409],{"class":60,"line":2326},[58,14406,4736],{"class":92},[58,14408,4739],{"class":82},[58,14410,102],{"class":75},[58,14412,14413],{"class":60,"line":2340},[58,14414,108],{"class":75},[175,14416,11977],{},[19,14418,14419,14422,14425],{},[22,14420,14421],{},"我传就用我；没传就用你",[22,14423,14424],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[22,14426,14427],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,14429,14431],{"id":14430},"_72函数的占位参数","7.2函数的占位参数",[175,14433,14434],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[175,14436,14437,14439,14440],{},[25,14438,5827],{}," ",[55,14441,14442],{},"返回值类型 函数名 (数据类型){}",[48,14444,14446],{"className":781,"code":14445,"language":783,"meta":53,"style":53},"\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",[55,14447,14448,14453,14471,14484,14488,14496,14500,14517,14521,14531,14535,14543],{"__ignoreMap":53},[58,14449,14450],{"class":60,"line":61},[58,14451,14452],{"class":64},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[58,14454,14455,14457,14459,14461,14463,14465,14467,14469],{"class":60,"line":68},[58,14456,6010],{"class":92},[58,14458,12030],{"class":379},[58,14460,793],{"class":75},[58,14462,796],{"class":92},[58,14464,2048],{"class":5862},[58,14466,469],{"class":75},[58,14468,796],{"class":92},[58,14470,13086],{"class":75},[58,14472,14473,14475,14477,14480,14482],{"class":60,"line":79},[58,14474,7175],{"class":75},[58,14476,1827],{"class":92},[58,14478,14479],{"class":386}," \"this is func\"",[58,14481,2094],{"class":92},[58,14483,9486],{"class":75},[58,14485,14486],{"class":60,"line":105},[58,14487,108],{"class":75},[58,14489,14490,14492,14494],{"class":60,"line":627},[58,14491,796],{"class":92},[58,14493,2619],{"class":379},[58,14495,11498],{"class":75},[58,14497,14498],{"class":60,"line":509},[58,14499,3046],{"emptyLinePlaceholder":720},[58,14501,14502,14504,14506,14508,14510,14512,14514],{"class":60,"line":559},[58,14503,13929],{"class":379},[58,14505,793],{"class":75},[58,14507,1232],{"class":82},[58,14509,1164],{"class":75},[58,14511,1232],{"class":82},[58,14513,6612],{"class":75},[58,14515,14516],{"class":64}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[58,14518,14519],{"class":60,"line":654},[58,14520,3046],{"emptyLinePlaceholder":720},[58,14522,14523,14525,14527,14529],{"class":60,"line":671},[58,14524,2949],{"class":379},[58,14526,793],{"class":75},[58,14528,2954],{"class":386},[58,14530,3365],{"class":75},[58,14532,14533],{"class":60,"line":677},[58,14534,3046],{"emptyLinePlaceholder":720},[58,14536,14537,14539,14541],{"class":60,"line":2260},[58,14538,4736],{"class":92},[58,14540,4739],{"class":82},[58,14542,102],{"class":75},[58,14544,14545],{"class":60,"line":694},[58,14546,108],{"class":75},[175,14548,14549],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14551,14553],{"id":14552},"_73函数重载","7.3函数重载",[175,14555,14556],{},"意思是函数名是可以相同的",[114,14558,14560],{"id":14559},"_731基本语法","7.3.1基本语法",[175,14562,14563],{},"作用：函数名可以相同，提高复用性",[175,14565,14566],{},[25,14567,14568],{},"函数重载满足条件：",[124,14570,14571,14574,14577],{},[22,14572,14573],{},"同一个作用域下",[22,14575,14576],{},"函数名称相同",[22,14578,14579,14580,14583,14584,14587,14588],{},"函数参数",[25,14581,14582],{},"类型不同","  或者 ",[25,14585,14586],{},"个数不同"," 或者 ",[25,14589,14590],{},"顺序不同",[175,14592,14593,14596],{},[25,14594,14595],{},"注意:","  函数的返回值不可以作为函数重载的条件",[48,14598,14600],{"className":10586,"code":14599,"language":10588,"meta":53,"style":53},"\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",[55,14601,14602,14607,14615,14619,14632,14636,14650,14654,14667,14671,14686,14690,14703,14707,14728,14732,14745,14749,14769,14773,14786,14790,14794,14799,14804,14809,14814,14819,14823,14827,14835,14839,14845,14855,14865,14879,14894,14898,14908,14912,14920],{"__ignoreMap":53},[58,14603,14604],{"class":60,"line":61},[58,14605,14606],{"class":64},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[58,14608,14609,14611,14613],{"class":60,"line":68},[58,14610,6010],{"class":92},[58,14612,12030],{"class":379},[58,14614,2622],{"class":75},[58,14616,14617],{"class":60,"line":79},[58,14618,2195],{"class":75},[58,14620,14621,14623,14625,14628,14630],{"class":60,"line":105},[58,14622,7175],{"class":75},[58,14624,1827],{"class":92},[58,14626,14627],{"class":386}," \"func 的调用！\"",[58,14629,2094],{"class":92},[58,14631,9486],{"class":75},[58,14633,14634],{"class":60,"line":627},[58,14635,108],{"class":75},[58,14637,14638,14640,14642,14644,14646,14648],{"class":60,"line":509},[58,14639,6010],{"class":92},[58,14641,12030],{"class":379},[58,14643,793],{"class":75},[58,14645,796],{"class":92},[58,14647,2048],{"class":5862},[58,14649,799],{"class":75},[58,14651,14652],{"class":60,"line":559},[58,14653,2195],{"class":75},[58,14655,14656,14658,14660,14663,14665],{"class":60,"line":654},[58,14657,7175],{"class":75},[58,14659,1827],{"class":92},[58,14661,14662],{"class":386}," \"func (int a) 的调用！\"",[58,14664,2094],{"class":92},[58,14666,9486],{"class":75},[58,14668,14669],{"class":60,"line":671},[58,14670,108],{"class":75},[58,14672,14673,14675,14677,14679,14682,14684],{"class":60,"line":677},[58,14674,6010],{"class":92},[58,14676,12030],{"class":379},[58,14678,793],{"class":75},[58,14680,14681],{"class":92},"double",[58,14683,2048],{"class":5862},[58,14685,799],{"class":75},[58,14687,14688],{"class":60,"line":2260},[58,14689,2195],{"class":75},[58,14691,14692,14694,14696,14699,14701],{"class":60,"line":694},[58,14693,7175],{"class":75},[58,14695,1827],{"class":92},[58,14697,14698],{"class":386}," \"func (double a)的调用！\"",[58,14700,2094],{"class":92},[58,14702,9486],{"class":75},[58,14704,14705],{"class":60,"line":2270},[58,14706,108],{"class":75},[58,14708,14709,14711,14713,14715,14717,14719,14722,14724,14726],{"class":60,"line":2275},[58,14710,6010],{"class":92},[58,14712,12030],{"class":379},[58,14714,793],{"class":75},[58,14716,796],{"class":92},[58,14718,2048],{"class":5862},[58,14720,14721],{"class":75}," ,",[58,14723,14681],{"class":92},[58,14725,3479],{"class":5862},[58,14727,799],{"class":75},[58,14729,14730],{"class":60,"line":2289},[58,14731,2195],{"class":75},[58,14733,14734,14736,14738,14741,14743],{"class":60,"line":2294},[58,14735,7175],{"class":75},[58,14737,1827],{"class":92},[58,14739,14740],{"class":386}," \"func (int a ,double b) 的调用！\"",[58,14742,2094],{"class":92},[58,14744,9486],{"class":75},[58,14746,14747],{"class":60,"line":2300},[58,14748,108],{"class":75},[58,14750,14751,14753,14755,14757,14759,14761,14763,14765,14767],{"class":60,"line":2321},[58,14752,6010],{"class":92},[58,14754,12030],{"class":379},[58,14756,793],{"class":75},[58,14758,14681],{"class":92},[58,14760,2048],{"class":5862},[58,14762,14721],{"class":75},[58,14764,796],{"class":92},[58,14766,3479],{"class":5862},[58,14768,799],{"class":75},[58,14770,14771],{"class":60,"line":2326},[58,14772,2195],{"class":75},[58,14774,14775,14777,14779,14782,14784],{"class":60,"line":2340},[58,14776,7175],{"class":75},[58,14778,1827],{"class":92},[58,14780,14781],{"class":386}," \"func (double a ,int b)的调用！\"",[58,14783,2094],{"class":92},[58,14785,9486],{"class":75},[58,14787,14788],{"class":60,"line":2345},[58,14789,108],{"class":75},[58,14791,14792],{"class":60,"line":2374},[58,14793,3046],{"emptyLinePlaceholder":720},[58,14795,14796],{"class":60,"line":2379},[58,14797,14798],{"class":64},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[58,14800,14801],{"class":60,"line":2396},[58,14802,14803],{"class":64},"\u002F\u002Fint func(double a, int b)\n",[58,14805,14806],{"class":60,"line":2401},[58,14807,14808],{"class":64},"\u002F\u002F{\n",[58,14810,14811],{"class":60,"line":2406},[58,14812,14813],{"class":64},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[58,14815,14816],{"class":60,"line":2411},[58,14817,14818],{"class":64},"\u002F\u002F}\n",[58,14820,14821],{"class":60,"line":2425},[58,14822,3046],{"emptyLinePlaceholder":720},[58,14824,14825],{"class":60,"line":2430},[58,14826,3046],{"emptyLinePlaceholder":720},[58,14828,14829,14831,14833],{"class":60,"line":3223},[58,14830,796],{"class":92},[58,14832,2619],{"class":379},[58,14834,11498],{"class":75},[58,14836,14837],{"class":60,"line":3237},[58,14838,3046],{"emptyLinePlaceholder":720},[58,14840,14841,14843],{"class":60,"line":3245},[58,14842,13929],{"class":379},[58,14844,6282],{"class":75},[58,14846,14847,14849,14851,14853],{"class":60,"line":3250},[58,14848,13929],{"class":379},[58,14850,793],{"class":75},[58,14852,1232],{"class":82},[58,14854,3365],{"class":75},[58,14856,14857,14859,14861,14863],{"class":60,"line":3256},[58,14858,13929],{"class":379},[58,14860,793],{"class":75},[58,14862,840],{"class":82},[58,14864,3365],{"class":75},[58,14866,14867,14869,14871,14873,14875,14877],{"class":60,"line":3262},[58,14868,13929],{"class":379},[58,14870,793],{"class":75},[58,14872,1232],{"class":82},[58,14874,1164],{"class":75},[58,14876,840],{"class":82},[58,14878,3365],{"class":75},[58,14880,14881,14883,14885,14887,14890,14892],{"class":60,"line":3267},[58,14882,13929],{"class":379},[58,14884,793],{"class":75},[58,14886,840],{"class":82},[58,14888,14889],{"class":75}," , ",[58,14891,1232],{"class":82},[58,14893,3365],{"class":75},[58,14895,14896],{"class":60,"line":8594},[58,14897,13854],{"class":75},[58,14899,14900,14902,14904,14906],{"class":60,"line":8618},[58,14901,2949],{"class":379},[58,14903,793],{"class":75},[58,14905,2954],{"class":386},[58,14907,3365],{"class":75},[58,14909,14910],{"class":60,"line":8623},[58,14911,3046],{"emptyLinePlaceholder":720},[58,14913,14914,14916,14918],{"class":60,"line":8629},[58,14915,4736],{"class":92},[58,14917,4739],{"class":82},[58,14919,102],{"class":75},[58,14921,14922],{"class":60,"line":8656},[58,14923,108],{"class":75},[175,14925,14926],{},"重点：函数返回值不可以作为函数重载条件！",[114,14928,14930],{"id":14929},"_732注意事项","7.3.2注意事项",[124,14932,14933,14936],{},[22,14934,14935],{},"引用作为重载条件!!!",[22,14937,14938],{},"函数重载碰到函数默认参数",[48,14940,14942],{"className":781,"code":14941,"language":783,"meta":53,"style":53},"\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",[55,14943,14944,14949,14954,14958,14974,14978,14991,14995,14999,15017,15021,15034,15038,15042,15046,15051,15055,15079,15083,15096,15100,15104,15118,15122,15135,15139,15143,15151,15155,15167,15177,15190,15194,15198,15206,15210,15220,15224,15232],{"__ignoreMap":53},[58,14945,14946],{"class":60,"line":61},[58,14947,14948],{"class":64},"\u002F\u002F函数重载注意事项\n",[58,14950,14951],{"class":60,"line":68},[58,14952,14953],{"class":64},"\u002F\u002F1、引用作为重载条件\n",[58,14955,14956],{"class":60,"line":79},[58,14957,3046],{"emptyLinePlaceholder":720},[58,14959,14960,14962,14964,14966,14968,14970,14972],{"class":60,"line":105},[58,14961,6010],{"class":92},[58,14963,12030],{"class":379},[58,14965,793],{"class":75},[58,14967,796],{"class":92},[58,14969,11229],{"class":92},[58,14971,376],{"class":5862},[58,14973,799],{"class":75},[58,14975,14976],{"class":60,"line":627},[58,14977,2195],{"class":75},[58,14979,14980,14982,14984,14987,14989],{"class":60,"line":509},[58,14981,7175],{"class":75},[58,14983,1827],{"class":92},[58,14985,14986],{"class":386}," \"func (int &a) 调用 \"",[58,14988,2094],{"class":92},[58,14990,9486],{"class":75},[58,14992,14993],{"class":60,"line":559},[58,14994,108],{"class":75},[58,14996,14997],{"class":60,"line":654},[58,14998,3046],{"emptyLinePlaceholder":720},[58,15000,15001,15003,15005,15007,15009,15011,15013,15015],{"class":60,"line":671},[58,15002,6010],{"class":92},[58,15004,12030],{"class":379},[58,15006,793],{"class":75},[58,15008,7438],{"class":92},[58,15010,3028],{"class":92},[58,15012,11229],{"class":92},[58,15014,376],{"class":5862},[58,15016,799],{"class":75},[58,15018,15019],{"class":60,"line":677},[58,15020,2195],{"class":75},[58,15022,15023,15025,15027,15030,15032],{"class":60,"line":2260},[58,15024,7175],{"class":75},[58,15026,1827],{"class":92},[58,15028,15029],{"class":386}," \"func (const int &a) 调用 \"",[58,15031,2094],{"class":92},[58,15033,9486],{"class":75},[58,15035,15036],{"class":60,"line":694},[58,15037,108],{"class":75},[58,15039,15040],{"class":60,"line":2270},[58,15041,3046],{"emptyLinePlaceholder":720},[58,15043,15044],{"class":60,"line":2275},[58,15045,3046],{"emptyLinePlaceholder":720},[58,15047,15048],{"class":60,"line":2289},[58,15049,15050],{"class":64},"\u002F\u002F2、函数重载碰到函数默认参数\n",[58,15052,15053],{"class":60,"line":2294},[58,15054,3046],{"emptyLinePlaceholder":720},[58,15056,15057,15059,15061,15063,15065,15067,15069,15071,15073,15075,15077],{"class":60,"line":2300},[58,15058,6010],{"class":92},[58,15060,14262],{"class":379},[58,15062,793],{"class":75},[58,15064,796],{"class":92},[58,15066,2048],{"class":5862},[58,15068,469],{"class":75},[58,15070,796],{"class":92},[58,15072,3479],{"class":5862},[58,15074,14208],{"class":92},[58,15076,2684],{"class":82},[58,15078,799],{"class":75},[58,15080,15081],{"class":60,"line":2321},[58,15082,2195],{"class":75},[58,15084,15085,15087,15089,15092,15094],{"class":60,"line":2326},[58,15086,7175],{"class":75},[58,15088,1827],{"class":92},[58,15090,15091],{"class":386}," \"func2(int a, int b = 10) 调用\"",[58,15093,2094],{"class":92},[58,15095,9486],{"class":75},[58,15097,15098],{"class":60,"line":2340},[58,15099,108],{"class":75},[58,15101,15102],{"class":60,"line":2345},[58,15103,3046],{"emptyLinePlaceholder":720},[58,15105,15106,15108,15110,15112,15114,15116],{"class":60,"line":2374},[58,15107,6010],{"class":92},[58,15109,14262],{"class":379},[58,15111,793],{"class":75},[58,15113,796],{"class":92},[58,15115,2048],{"class":5862},[58,15117,799],{"class":75},[58,15119,15120],{"class":60,"line":2379},[58,15121,2195],{"class":75},[58,15123,15124,15126,15128,15131,15133],{"class":60,"line":2396},[58,15125,7175],{"class":75},[58,15127,1827],{"class":92},[58,15129,15130],{"class":386}," \"func2(int a) 调用\"",[58,15132,2094],{"class":92},[58,15134,9486],{"class":75},[58,15136,15137],{"class":60,"line":2401},[58,15138,108],{"class":75},[58,15140,15141],{"class":60,"line":2406},[58,15142,3046],{"emptyLinePlaceholder":720},[58,15144,15145,15147,15149],{"class":60,"line":2411},[58,15146,796],{"class":92},[58,15148,2619],{"class":379},[58,15150,11498],{"class":75},[58,15152,15153],{"class":60,"line":2425},[58,15154,13854],{"class":75},[58,15156,15157,15159,15161,15163,15165],{"class":60,"line":2430},[58,15158,2631],{"class":92},[58,15160,11514],{"class":75},[58,15162,383],{"class":92},[58,15164,2684],{"class":82},[58,15166,102],{"class":75},[58,15168,15169,15171,15174],{"class":60,"line":3223},[58,15170,13929],{"class":379},[58,15172,15173],{"class":75},"(a);",[58,15175,15176],{"class":64}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[58,15178,15179,15181,15183,15185,15187],{"class":60,"line":3237},[58,15180,13929],{"class":379},[58,15182,793],{"class":75},[58,15184,1232],{"class":82},[58,15186,6612],{"class":75},[58,15188,15189],{"class":64},"\u002F\u002F调用有const   10是个常量\n",[58,15191,15192],{"class":60,"line":3245},[58,15193,3046],{"emptyLinePlaceholder":720},[58,15195,15196],{"class":60,"line":3250},[58,15197,3046],{"emptyLinePlaceholder":720},[58,15199,15200,15203],{"class":60,"line":3256},[58,15201,15202],{"class":64},"    \u002F\u002Ffunc2(10);",[58,15204,15205],{"class":64}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[58,15207,15208],{"class":60,"line":3262},[58,15209,3046],{"emptyLinePlaceholder":720},[58,15211,15212,15214,15216,15218],{"class":60,"line":3267},[58,15213,2949],{"class":379},[58,15215,793],{"class":75},[58,15217,2954],{"class":386},[58,15219,3365],{"class":75},[58,15221,15222],{"class":60,"line":8594},[58,15223,3046],{"emptyLinePlaceholder":720},[58,15225,15226,15228,15230],{"class":60,"line":8618},[58,15227,4736],{"class":92},[58,15229,4739],{"class":82},[58,15231,102],{"class":75},[58,15233,15234],{"class":60,"line":8623},[58,15235,108],{"class":75},[702,15237,15238],{},"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":53,"searchDepth":68,"depth":68,"links":15240},[15241,15242,15243],{"id":14173,"depth":68,"text":14174},{"id":14430,"depth":68,"text":14431},{"id":14552,"depth":68,"text":14553,"children":15244},[15245,15246],{"id":14559,"depth":79,"text":14560},{"id":14929,"depth":79,"text":14930},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14165,"description":53},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15253,"title":15254,"body":15255,"description":24008,"extension":718,"meta":24009,"navigation":720,"path":24010,"seo":24011,"stem":24012,"__hash__":24013},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15256,"toc":23989},[15257,15260,15266,15273,15278,15281,15284,15287,15291,15295,15298,15301,15309,15314,15317,15324,15329,15488,15491,15744,15747,15750,15753,15758,15761,15764,15775,15780,16016,16020,16030,16033,16041,16188,16192,16195,16198,16202,16646,16650,16658,16666,17578,17585,17590,18218,18221,18224,18227,18346,18349,18436,18439,18565,18568,18662,18665,19018,19022,19030,19034,19041,19044,19047,19058,19064,19069,19081,19089,19109,19117,19134,19320,19323,19327,19330,19333,19336,19339,19342,19345,19348,19808,19814,19818,19821,19832,20419,20422,20911,20915,20918,20921,20924,20927,20930,20938,21334,21338,21341,21344,21791,21794,21797,21802,21805,21810,21813,21817,21820,21822,21828,21831,22137,22147,22188,22192,22195,22197,22230,22233,22540,22542,22557,22560,22583,22592,22598,22601,22605,22608,22611,22616,22627,22632,22640,22645,22775,22778,22781,22956,22961,23173,23177,23180,23294,23299,23538,23542,23546,23549,23552,23557,23662,23665,23668,23671,23675,23786,23789,23792,23797,23849,23852,23855,23860,23906,23909,23914,23982,23984,23987],[10,15258,15254],{"id":15259},"_8类和对象",[175,15261,15262,15263],{},"C++面向对象的三大特性为",[25,15264,15265],{},"封装、继承、多态",[175,15267,15268,15269,15272],{},"C++认为",[25,15270,15271],{},"万事万物都皆为对象","，对象上有其属性和行为",[175,15274,15275],{},[25,15276,15277],{},"例如：",[175,15279,15280],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[175,15282,15283],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[175,15285,15286],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,15288,15290],{"id":15289},"_81封装","8.1封装",[114,15292,15294],{"id":15293},"_811封装的意义","8.1.1封装的意义",[175,15296,15297],{},"封装是C++面向对象三大特性之一",[175,15299,15300],{},"封装的意义：",[124,15302,15303,15306],{},[22,15304,15305],{},"将属性和行为作为一个整体，表现生活中的事物",[22,15307,15308],{},"将属性和行为加以权限控制",[175,15310,15311],{},[25,15312,15313],{},"封装意义一：",[175,15315,15316],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[175,15318,15319,14439,15321],{},[25,15320,5827],{},[55,15322,15323],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[19,15325,15326],{},[22,15327,15328],{},"**示例1：**设计一个圆类，求圆的周长",[48,15330,15332],{"className":781,"code":15331,"language":783,"meta":53,"style":53},"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",[55,15333,15334,15342,15346,15351,15356,15361,15366,15373,15378,15388,15392,15410,15414,15418,15426,15430,15435,15440,15445,15450,15461,15484],{"__ignoreMap":53},[58,15335,15336,15339],{"class":60,"line":61},[58,15337,15338],{"class":92},"class",[58,15340,15341],{"class":379}," Circle\n",[58,15343,15344],{"class":60,"line":68},[58,15345,2195],{"class":75},[58,15347,15348],{"class":60,"line":79},[58,15349,15350],{"class":64},"    \u002F\u002F访问权限\n",[58,15352,15353],{"class":60,"line":105},[58,15354,15355],{"class":64},"    \u002F\u002F公共权限\n",[58,15357,15358],{"class":60,"line":627},[58,15359,15360],{"class":92},"public:\n",[58,15362,15363],{"class":60,"line":509},[58,15364,15365],{"class":64},"    \u002F\u002F属性\n",[58,15367,15368,15370],{"class":60,"line":559},[58,15369,2631],{"class":92},[58,15371,15372],{"class":75}," m_r;\n",[58,15374,15375],{"class":60,"line":654},[58,15376,15377],{"class":64},"    \u002F\u002F行为\n",[58,15379,15380,15383,15386],{"class":60,"line":671},[58,15381,15382],{"class":92},"    double",[58,15384,15385],{"class":379}," calculateZC",[58,15387,2622],{"class":75},[58,15389,15390],{"class":60,"line":677},[58,15391,2676],{"class":75},[58,15393,15394,15397,15400,15402,15405,15407],{"class":60,"line":2260},[58,15395,15396],{"class":92},"        return",[58,15398,15399],{"class":82}," 2",[58,15401,1241],{"class":92},[58,15403,15404],{"class":75},"PI",[58,15406,1241],{"class":92},[58,15408,15409],{"class":75},"m_r;\n",[58,15411,15412],{"class":60,"line":694},[58,15413,2833],{"class":75},[58,15415,15416],{"class":60,"line":2270},[58,15417,4641],{"class":75},[58,15419,15420,15422,15424],{"class":60,"line":2275},[58,15421,796],{"class":92},[58,15423,2619],{"class":379},[58,15425,2622],{"class":75},[58,15427,15428],{"class":60,"line":2289},[58,15429,2195],{"class":75},[58,15431,15432],{"class":60,"line":2294},[58,15433,15434],{"class":64},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[58,15436,15437],{"class":60,"line":2300},[58,15438,15439],{"class":64},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[58,15441,15442],{"class":60,"line":2321},[58,15443,15444],{"class":75},"    Circle c1;\n",[58,15446,15447],{"class":60,"line":2326},[58,15448,15449],{"class":64},"    \u002F\u002F给圆对象 的属性进行赋值\n",[58,15451,15452,15455,15457,15459],{"class":60,"line":2340},[58,15453,15454],{"class":75},"    c1.m_r",[58,15456,383],{"class":92},[58,15458,1232],{"class":82},[58,15460,102],{"class":75},[58,15462,15463,15465,15467,15470,15472,15475,15478,15480,15482],{"class":60,"line":2345},[58,15464,2200],{"class":75},[58,15466,1827],{"class":92},[58,15468,15469],{"class":386},"\"圆的周长\"",[58,15471,1827],{"class":92},[58,15473,15474],{"class":75},"c1.",[58,15476,15477],{"class":379},"calculateZC",[58,15479,3073],{"class":75},[58,15481,1827],{"class":92},[58,15483,1849],{"class":75},[58,15485,15486],{"class":60,"line":2374},[58,15487,108],{"class":75},[175,15489,15490],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[48,15492,15494],{"className":781,"code":15493,"language":783,"meta":53,"style":53},"#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",[55,15495,15496,15502,15512,15518,15524,15528,15532,15537,15544,15549,15567,15571,15581,15585,15590,15606,15610,15620,15624,15629,15637,15641,15673,15677,15681,15689,15693,15698,15703,15717,15731,15740],{"__ignoreMap":53},[58,15497,15498,15500],{"class":60,"line":61},[58,15499,2596],{"class":92},[58,15501,2599],{"class":386},[58,15503,15504,15506,15508,15510],{"class":60,"line":68},[58,15505,2604],{"class":92},[58,15507,2607],{"class":92},[58,15509,2610],{"class":379},[58,15511,102],{"class":75},[58,15513,15514,15516],{"class":60,"line":79},[58,15515,2596],{"class":92},[58,15517,8395],{"class":386},[58,15519,15520,15522],{"class":60,"line":105},[58,15521,15338],{"class":92},[58,15523,8408],{"class":379},[58,15525,15526],{"class":60,"line":627},[58,15527,2195],{"class":75},[58,15529,15530],{"class":60,"line":509},[58,15531,15360],{"class":92},[58,15533,15534],{"class":60,"line":559},[58,15535,15536],{"class":75},"    string m_name;\n",[58,15538,15539,15541],{"class":60,"line":654},[58,15540,2631],{"class":92},[58,15542,15543],{"class":75}," m_id;\n",[58,15545,15546],{"class":60,"line":671},[58,15547,15548],{"class":64},"    \u002F\u002F赋值姓名\n",[58,15550,15551,15554,15557,15559,15562,15565],{"class":60,"line":677},[58,15552,15553],{"class":92},"    void",[58,15555,15556],{"class":379}," setName",[58,15558,793],{"class":75},[58,15560,15561],{"class":379},"string",[58,15563,15564],{"class":5862}," name",[58,15566,799],{"class":75},[58,15568,15569],{"class":60,"line":2260},[58,15570,2676],{"class":75},[58,15572,15573,15576,15578],{"class":60,"line":694},[58,15574,15575],{"class":75},"        m_name",[58,15577,383],{"class":92},[58,15579,15580],{"class":75},"name;\n",[58,15582,15583],{"class":60,"line":2270},[58,15584,2833],{"class":75},[58,15586,15587],{"class":60,"line":2275},[58,15588,15589],{"class":64},"    \u002F\u002F赋值学号\n",[58,15591,15592,15594,15597,15599,15601,15604],{"class":60,"line":2289},[58,15593,15553],{"class":92},[58,15595,15596],{"class":379}," setId",[58,15598,793],{"class":75},[58,15600,796],{"class":92},[58,15602,15603],{"class":5862}," id",[58,15605,799],{"class":75},[58,15607,15608],{"class":60,"line":2294},[58,15609,2676],{"class":75},[58,15611,15612,15615,15617],{"class":60,"line":2300},[58,15613,15614],{"class":75},"        m_id",[58,15616,383],{"class":92},[58,15618,15619],{"class":75},"id;\n",[58,15621,15622],{"class":60,"line":2321},[58,15623,2833],{"class":75},[58,15625,15626],{"class":60,"line":2326},[58,15627,15628],{"class":64},"    \u002F\u002F打印学生信息\n",[58,15630,15631,15633,15635],{"class":60,"line":2340},[58,15632,15553],{"class":92},[58,15634,10260],{"class":379},[58,15636,2622],{"class":75},[58,15638,15639],{"class":60,"line":2345},[58,15640,2676],{"class":75},[58,15642,15643,15645,15647,15650,15652,15655,15657,15659,15661,15664,15666,15669,15671],{"class":60,"line":2374},[58,15644,4097],{"class":75},[58,15646,1827],{"class":92},[58,15648,15649],{"class":386},"\"姓名：\"",[58,15651,1827],{"class":92},[58,15653,15654],{"class":75},"m_name",[58,15656,1827],{"class":92},[58,15658,5005],{"class":386},[58,15660,1827],{"class":92},[58,15662,15663],{"class":386},"\"学号：\"",[58,15665,1827],{"class":92},[58,15667,15668],{"class":75},"m_id",[58,15670,1827],{"class":92},[58,15672,1849],{"class":75},[58,15674,15675],{"class":60,"line":2379},[58,15676,2833],{"class":75},[58,15678,15679],{"class":60,"line":2396},[58,15680,4641],{"class":75},[58,15682,15683,15685,15687],{"class":60,"line":2401},[58,15684,796],{"class":92},[58,15686,2619],{"class":379},[58,15688,2622],{"class":75},[58,15690,15691],{"class":60,"line":2406},[58,15692,2195],{"class":75},[58,15694,15695],{"class":60,"line":2411},[58,15696,15697],{"class":64},"    \u002F\u002F实例化\n",[58,15699,15700],{"class":60,"line":2425},[58,15701,15702],{"class":75},"    Student s1;\n",[58,15704,15705,15708,15711,15713,15715],{"class":60,"line":2430},[58,15706,15707],{"class":75},"    s1.",[58,15709,15710],{"class":379},"setName",[58,15712,793],{"class":75},[58,15714,8562],{"class":386},[58,15716,3365],{"class":75},[58,15718,15719,15721,15724,15726,15729],{"class":60,"line":3223},[58,15720,15707],{"class":75},[58,15722,15723],{"class":379},"setId",[58,15725,793],{"class":75},[58,15727,15728],{"class":82},"123456",[58,15730,3365],{"class":75},[58,15732,15733,15735,15738],{"class":60,"line":3237},[58,15734,15707],{"class":75},[58,15736,15737],{"class":379},"printInfo",[58,15739,6282],{"class":75},[58,15741,15742],{"class":60,"line":3245},[58,15743,108],{"class":75},[175,15745,15746],{},"类中的属性和行为统称为成员",[175,15748,15749],{},"属性：成员属性(成员变量)",[175,15751,15752],{},"方法：成员函数(成员方法)",[175,15754,15755],{},[25,15756,15757],{},"封装意义二：",[175,15759,15760],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[175,15762,15763],{},"访问权限有三种：",[19,15765,15766,15769,15772],{},[22,15767,15768],{},"public        公共权限",[22,15770,15771],{},"protected 保护权限",[22,15773,15774],{},"private      私有权限",[175,15776,15777],{},[25,15778,15779],{},"示例：",[48,15781,15783],{"className":10586,"code":15782,"language":10588,"meta":53,"style":53},"\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",[55,15784,15785,15790,15795,15800,15805,15809,15816,15820,15825,15829,15834,15838,15843,15848,15853,15857,15862,15867,15874,15878,15882,15890,15894,15905,15917,15929,15933,15937,15941,15949,15953,15958,15970,15978,15986,15990,16000,16004,16012],{"__ignoreMap":53},[58,15786,15787],{"class":60,"line":61},[58,15788,15789],{"class":64},"\u002F\u002F三种权限\n",[58,15791,15792],{"class":60,"line":68},[58,15793,15794],{"class":64},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[58,15796,15797],{"class":60,"line":79},[58,15798,15799],{"class":64},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[58,15801,15802],{"class":60,"line":105},[58,15803,15804],{"class":64},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[58,15806,15807],{"class":60,"line":627},[58,15808,3046],{"emptyLinePlaceholder":720},[58,15810,15811,15813],{"class":60,"line":509},[58,15812,15338],{"class":92},[58,15814,15815],{"class":379}," Person\n",[58,15817,15818],{"class":60,"line":559},[58,15819,2195],{"class":75},[58,15821,15822],{"class":60,"line":654},[58,15823,15824],{"class":64},"    \u002F\u002F姓名  公共权限\n",[58,15826,15827],{"class":60,"line":671},[58,15828,15360],{"class":92},[58,15830,15831],{"class":60,"line":677},[58,15832,15833],{"class":75},"    string m_Name;\n",[58,15835,15836],{"class":60,"line":2260},[58,15837,3046],{"emptyLinePlaceholder":720},[58,15839,15840],{"class":60,"line":694},[58,15841,15842],{"class":64},"    \u002F\u002F汽车  保护权限\n",[58,15844,15845],{"class":60,"line":2270},[58,15846,15847],{"class":92},"protected:\n",[58,15849,15850],{"class":60,"line":2275},[58,15851,15852],{"class":75},"    string m_Car;\n",[58,15854,15855],{"class":60,"line":2289},[58,15856,3046],{"emptyLinePlaceholder":720},[58,15858,15859],{"class":60,"line":2294},[58,15860,15861],{"class":64},"    \u002F\u002F银行卡密码  私有权限\n",[58,15863,15864],{"class":60,"line":2300},[58,15865,15866],{"class":92},"private:\n",[58,15868,15869,15871],{"class":60,"line":2321},[58,15870,2631],{"class":92},[58,15872,15873],{"class":75}," m_Password;\n",[58,15875,15876],{"class":60,"line":2326},[58,15877,3046],{"emptyLinePlaceholder":720},[58,15879,15880],{"class":60,"line":2340},[58,15881,15360],{"class":92},[58,15883,15884,15886,15888],{"class":60,"line":2345},[58,15885,15553],{"class":92},[58,15887,12030],{"class":379},[58,15889,2622],{"class":75},[58,15891,15892],{"class":60,"line":2374},[58,15893,2676],{"class":75},[58,15895,15896,15899,15901,15903],{"class":60,"line":2379},[58,15897,15898],{"class":75},"        m_Name ",[58,15900,383],{"class":92},[58,15902,9584],{"class":386},[58,15904,102],{"class":75},[58,15906,15907,15910,15912,15915],{"class":60,"line":2396},[58,15908,15909],{"class":75},"        m_Car ",[58,15911,383],{"class":92},[58,15913,15914],{"class":386}," \"拖拉机\"",[58,15916,102],{"class":75},[58,15918,15919,15922,15924,15927],{"class":60,"line":2401},[58,15920,15921],{"class":75},"        m_Password ",[58,15923,383],{"class":92},[58,15925,15926],{"class":82}," 123456",[58,15928,102],{"class":75},[58,15930,15931],{"class":60,"line":2406},[58,15932,2833],{"class":75},[58,15934,15935],{"class":60,"line":2411},[58,15936,4641],{"class":75},[58,15938,15939],{"class":60,"line":2425},[58,15940,3046],{"emptyLinePlaceholder":720},[58,15942,15943,15945,15947],{"class":60,"line":2430},[58,15944,796],{"class":92},[58,15946,2619],{"class":379},[58,15948,11498],{"class":75},[58,15950,15951],{"class":60,"line":3223},[58,15952,3046],{"emptyLinePlaceholder":720},[58,15954,15955],{"class":60,"line":3237},[58,15956,15957],{"class":75},"    Person p;\n",[58,15959,15960,15963,15965,15968],{"class":60,"line":3245},[58,15961,15962],{"class":75},"    p.m_Name ",[58,15964,383],{"class":92},[58,15966,15967],{"class":386}," \"李四\"",[58,15969,102],{"class":75},[58,15971,15972,15975],{"class":60,"line":3250},[58,15973,15974],{"class":64},"    \u002F\u002Fp.m_Car = \"奔驰\";",[58,15976,15977],{"class":64},"  \u002F\u002F保护权限类外访问不到\n",[58,15979,15980,15983],{"class":60,"line":3256},[58,15981,15982],{"class":64},"    \u002F\u002Fp.m_Password = 123;",[58,15984,15985],{"class":64}," \u002F\u002F私有权限类外访问不到\n",[58,15987,15988],{"class":60,"line":3262},[58,15989,3046],{"emptyLinePlaceholder":720},[58,15991,15992,15994,15996,15998],{"class":60,"line":3267},[58,15993,2949],{"class":379},[58,15995,793],{"class":75},[58,15997,2954],{"class":386},[58,15999,3365],{"class":75},[58,16001,16002],{"class":60,"line":8594},[58,16003,3046],{"emptyLinePlaceholder":720},[58,16005,16006,16008,16010],{"class":60,"line":8618},[58,16007,4736],{"class":92},[58,16009,4739],{"class":82},[58,16011,102],{"class":75},[58,16013,16014],{"class":60,"line":8623},[58,16015,108],{"class":75},[114,16017,16019],{"id":16018},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[175,16021,16022,16023,16026,16027],{},"在C++中 struct和class唯一的",[25,16024,16025],{},"区别","就在于 ",[25,16028,16029],{},"默认的访问权限不同",[175,16031,16032],{},"区别：",[124,16034,16035,16038],{},[22,16036,16037],{},"struct 默认权限为公共",[22,16039,16040],{},"class   默认权限为私有",[48,16042,16044],{"className":10586,"code":16043,"language":10588,"meta":53,"style":53},"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",[55,16045,16046,16053,16057,16067,16071,16075,16082,16086,16096,16100,16104,16112,16116,16121,16135,16139,16144,16158,16162,16172,16176,16184],{"__ignoreMap":53},[58,16047,16048,16050],{"class":60,"line":61},[58,16049,15338],{"class":92},[58,16051,16052],{"class":379}," C1\n",[58,16054,16055],{"class":60,"line":68},[58,16056,2195],{"class":75},[58,16058,16059,16061,16064],{"class":60,"line":79},[58,16060,2631],{"class":92},[58,16062,16063],{"class":75},"  m_A;",[58,16065,16066],{"class":64}," \u002F\u002F默认是私有权限\n",[58,16068,16069],{"class":60,"line":105},[58,16070,4641],{"class":75},[58,16072,16073],{"class":60,"line":627},[58,16074,3046],{"emptyLinePlaceholder":720},[58,16076,16077,16079],{"class":60,"line":509},[58,16078,8405],{"class":92},[58,16080,16081],{"class":379}," C2\n",[58,16083,16084],{"class":60,"line":559},[58,16085,2195],{"class":75},[58,16087,16088,16090,16093],{"class":60,"line":654},[58,16089,2631],{"class":92},[58,16091,16092],{"class":75}," m_A;",[58,16094,16095],{"class":64},"  \u002F\u002F默认是公共权限\n",[58,16097,16098],{"class":60,"line":671},[58,16099,4641],{"class":75},[58,16101,16102],{"class":60,"line":677},[58,16103,3046],{"emptyLinePlaceholder":720},[58,16105,16106,16108,16110],{"class":60,"line":2260},[58,16107,796],{"class":92},[58,16109,2619],{"class":379},[58,16111,11498],{"class":75},[58,16113,16114],{"class":60,"line":694},[58,16115,3046],{"emptyLinePlaceholder":720},[58,16117,16118],{"class":60,"line":2270},[58,16119,16120],{"class":75},"    C1 c1;\n",[58,16122,16123,16126,16128,16130,16132],{"class":60,"line":2275},[58,16124,16125],{"class":75},"    c1.m_A ",[58,16127,383],{"class":92},[58,16129,2684],{"class":82},[58,16131,846],{"class":75},[58,16133,16134],{"class":64}," \u002F\u002F错误，访问权限是私有\n",[58,16136,16137],{"class":60,"line":2289},[58,16138,3046],{"emptyLinePlaceholder":720},[58,16140,16141],{"class":60,"line":2294},[58,16142,16143],{"class":75},"    C2 c2;\n",[58,16145,16146,16149,16151,16153,16155],{"class":60,"line":2300},[58,16147,16148],{"class":75},"    c2.m_A ",[58,16150,383],{"class":92},[58,16152,2684],{"class":82},[58,16154,846],{"class":75},[58,16156,16157],{"class":64}," \u002F\u002F正确，访问权限是公共\n",[58,16159,16160],{"class":60,"line":2321},[58,16161,3046],{"emptyLinePlaceholder":720},[58,16163,16164,16166,16168,16170],{"class":60,"line":2326},[58,16165,2949],{"class":379},[58,16167,793],{"class":75},[58,16169,2954],{"class":386},[58,16171,3365],{"class":75},[58,16173,16174],{"class":60,"line":2340},[58,16175,3046],{"emptyLinePlaceholder":720},[58,16177,16178,16180,16182],{"class":60,"line":2345},[58,16179,4736],{"class":92},[58,16181,4739],{"class":82},[58,16183,102],{"class":75},[58,16185,16186],{"class":60,"line":2374},[58,16187,108],{"class":75},[114,16189,16191],{"id":16190},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[175,16193,16194],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[175,16196,16197],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[175,16199,16200],{},[25,16201,15779],{},[48,16203,16205],{"className":10586,"code":16204,"language":10588,"meta":53,"style":53},"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",[55,16206,16207,16216,16220,16224,16229,16243,16252,16256,16266,16270,16277,16281,16285,16289,16294,16303,16310,16314,16319,16335,16358,16371,16378,16382,16391,16395,16399,16404,16420,16430,16434,16438,16442,16450,16454,16464,16468,16476,16480,16484,16492,16496,16500,16505,16518,16541,16545,16550,16563,16585,16589,16594,16608,16616,16620,16630,16634,16642],{"__ignoreMap":53},[58,16208,16209,16211,16214],{"class":60,"line":61},[58,16210,15338],{"class":92},[58,16212,16213],{"class":379}," Person",[58,16215,76],{"class":75},[58,16217,16218],{"class":60,"line":68},[58,16219,15360],{"class":92},[58,16221,16222],{"class":60,"line":79},[58,16223,3046],{"emptyLinePlaceholder":720},[58,16225,16226],{"class":60,"line":105},[58,16227,16228],{"class":64},"    \u002F\u002F姓名设置可读可写\n",[58,16230,16231,16233,16235,16237,16239,16241],{"class":60,"line":627},[58,16232,15553],{"class":92},[58,16234,15556],{"class":379},[58,16236,793],{"class":75},[58,16238,15561],{"class":379},[58,16240,15564],{"class":5862},[58,16242,13086],{"class":75},[58,16244,16245,16247,16249],{"class":60,"line":509},[58,16246,15898],{"class":75},[58,16248,383],{"class":92},[58,16250,16251],{"class":75}," name;\n",[58,16253,16254],{"class":60,"line":559},[58,16255,2833],{"class":75},[58,16257,16258,16261,16264],{"class":60,"line":654},[58,16259,16260],{"class":379},"    string",[58,16262,16263],{"class":379}," getName",[58,16265,2622],{"class":75},[58,16267,16268],{"class":60,"line":671},[58,16269,2676],{"class":75},[58,16271,16272,16274],{"class":60,"line":677},[58,16273,15396],{"class":92},[58,16275,16276],{"class":75}," m_Name;\n",[58,16278,16279],{"class":60,"line":2260},[58,16280,2833],{"class":75},[58,16282,16283],{"class":60,"line":694},[58,16284,3046],{"emptyLinePlaceholder":720},[58,16286,16287],{"class":60,"line":2270},[58,16288,3046],{"emptyLinePlaceholder":720},[58,16290,16291],{"class":60,"line":2275},[58,16292,16293],{"class":64},"    \u002F\u002F获取年龄 \n",[58,16295,16296,16298,16301],{"class":60,"line":2289},[58,16297,2631],{"class":92},[58,16299,16300],{"class":379}," getAge",[58,16302,11498],{"class":75},[58,16304,16305,16307],{"class":60,"line":2294},[58,16306,15396],{"class":92},[58,16308,16309],{"class":75}," m_Age;\n",[58,16311,16312],{"class":60,"line":2300},[58,16313,2833],{"class":75},[58,16315,16316],{"class":60,"line":2321},[58,16317,16318],{"class":64},"    \u002F\u002F设置年龄\n",[58,16320,16321,16323,16326,16328,16330,16333],{"class":60,"line":2326},[58,16322,15553],{"class":92},[58,16324,16325],{"class":379}," setAge",[58,16327,793],{"class":75},[58,16329,796],{"class":92},[58,16331,16332],{"class":5862}," age",[58,16334,13086],{"class":75},[58,16336,16337,16339,16342,16344,16346,16348,16351,16353,16356],{"class":60,"line":2340},[58,16338,3143],{"class":92},[58,16340,16341],{"class":75}," (age ",[58,16343,373],{"class":92},[58,16345,4739],{"class":82},[58,16347,3901],{"class":92},[58,16349,16350],{"class":75}," age ",[58,16352,1744],{"class":92},[58,16354,16355],{"class":82}," 150",[58,16357,13086],{"class":75},[58,16359,16360,16362,16364,16367,16369],{"class":60,"line":2345},[58,16361,10364],{"class":75},[58,16363,1827],{"class":92},[58,16365,16366],{"class":386}," \"你个老妖精!\"",[58,16368,2094],{"class":92},[58,16370,9486],{"class":75},[58,16372,16373,16376],{"class":60,"line":2374},[58,16374,16375],{"class":92},"            return",[58,16377,102],{"class":75},[58,16379,16380],{"class":60,"line":2379},[58,16381,3175],{"class":75},[58,16383,16384,16387,16389],{"class":60,"line":2396},[58,16385,16386],{"class":75},"        m_Age ",[58,16388,383],{"class":92},[58,16390,8443],{"class":75},[58,16392,16393],{"class":60,"line":2401},[58,16394,2833],{"class":75},[58,16396,16397],{"class":60,"line":2406},[58,16398,3046],{"emptyLinePlaceholder":720},[58,16400,16401],{"class":60,"line":2411},[58,16402,16403],{"class":64},"    \u002F\u002F情人设置为只写\n",[58,16405,16406,16408,16411,16413,16415,16418],{"class":60,"line":2425},[58,16407,15553],{"class":92},[58,16409,16410],{"class":379}," setLover",[58,16412,793],{"class":75},[58,16414,15561],{"class":379},[58,16416,16417],{"class":5862}," lover",[58,16419,13086],{"class":75},[58,16421,16422,16425,16427],{"class":60,"line":2430},[58,16423,16424],{"class":75},"        m_Lover ",[58,16426,383],{"class":92},[58,16428,16429],{"class":75}," lover;\n",[58,16431,16432],{"class":60,"line":3223},[58,16433,2833],{"class":75},[58,16435,16436],{"class":60,"line":3237},[58,16437,3046],{"emptyLinePlaceholder":720},[58,16439,16440],{"class":60,"line":3245},[58,16441,15866],{"class":92},[58,16443,16444,16447],{"class":60,"line":3250},[58,16445,16446],{"class":75},"    string m_Name;",[58,16448,16449],{"class":64}," \u002F\u002F可读可写  姓名\n",[58,16451,16452],{"class":60,"line":3256},[58,16453,13854],{"class":75},[58,16455,16456,16458,16461],{"class":60,"line":3262},[58,16457,2631],{"class":92},[58,16459,16460],{"class":75}," m_Age;",[58,16462,16463],{"class":64}," \u002F\u002F只读  年龄\n",[58,16465,16466],{"class":60,"line":3267},[58,16467,3046],{"emptyLinePlaceholder":720},[58,16469,16470,16473],{"class":60,"line":8594},[58,16471,16472],{"class":75},"    string m_Lover;",[58,16474,16475],{"class":64}," \u002F\u002F只写  情人\n",[58,16477,16478],{"class":60,"line":8618},[58,16479,4641],{"class":75},[58,16481,16482],{"class":60,"line":8623},[58,16483,3046],{"emptyLinePlaceholder":720},[58,16485,16486,16488,16490],{"class":60,"line":8629},[58,16487,796],{"class":92},[58,16489,2619],{"class":379},[58,16491,11498],{"class":75},[58,16493,16494],{"class":60,"line":8656},[58,16495,3046],{"emptyLinePlaceholder":720},[58,16497,16498],{"class":60,"line":8661},[58,16499,15957],{"class":75},[58,16501,16502],{"class":60,"line":8667},[58,16503,16504],{"class":64},"    \u002F\u002F姓名设置\n",[58,16506,16507,16510,16512,16514,16516],{"class":60,"line":8679},[58,16508,16509],{"class":75},"    p.",[58,16511,15710],{"class":379},[58,16513,793],{"class":75},[58,16515,8562],{"class":386},[58,16517,3365],{"class":75},[58,16519,16520,16522,16524,16527,16529,16532,16535,16537,16539],{"class":60,"line":8691},[58,16521,7175],{"class":75},[58,16523,1827],{"class":92},[58,16525,16526],{"class":386}," \"姓名： \"",[58,16528,2094],{"class":92},[58,16530,16531],{"class":75}," p.",[58,16533,16534],{"class":379},"getName",[58,16536,13694],{"class":75},[58,16538,1827],{"class":92},[58,16540,9486],{"class":75},[58,16542,16543],{"class":60,"line":8703},[58,16544,3046],{"emptyLinePlaceholder":720},[58,16546,16547],{"class":60,"line":10361},[58,16548,16549],{"class":64},"    \u002F\u002F年龄设置\n",[58,16551,16552,16554,16557,16559,16561],{"class":60,"line":10386},[58,16553,16509],{"class":75},[58,16555,16556],{"class":379},"setAge",[58,16558,793],{"class":75},[58,16560,1442],{"class":82},[58,16562,3365],{"class":75},[58,16564,16565,16567,16569,16572,16574,16576,16579,16581,16583],{"class":60,"line":10409},[58,16566,7175],{"class":75},[58,16568,1827],{"class":92},[58,16570,16571],{"class":386}," \"年龄： \"",[58,16573,2094],{"class":92},[58,16575,16531],{"class":75},[58,16577,16578],{"class":379},"getAge",[58,16580,13694],{"class":75},[58,16582,1827],{"class":92},[58,16584,9486],{"class":75},[58,16586,16587],{"class":60,"line":10433},[58,16588,3046],{"emptyLinePlaceholder":720},[58,16590,16591],{"class":60,"line":10438},[58,16592,16593],{"class":64},"    \u002F\u002F情人设置\n",[58,16595,16596,16598,16601,16603,16606],{"class":60,"line":10443},[58,16597,16509],{"class":75},[58,16599,16600],{"class":379},"setLover",[58,16602,793],{"class":75},[58,16604,16605],{"class":386},"\"苍井\"",[58,16607,3365],{"class":75},[58,16609,16610,16613],{"class":60,"line":10448},[58,16611,16612],{"class":64},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[58,16614,16615],{"class":64},"  \u002F\u002F只写属性，不可以读取\n",[58,16617,16618],{"class":60,"line":10457},[58,16619,3046],{"emptyLinePlaceholder":720},[58,16621,16622,16624,16626,16628],{"class":60,"line":10462},[58,16623,2949],{"class":379},[58,16625,793],{"class":75},[58,16627,2954],{"class":386},[58,16629,3365],{"class":75},[58,16631,16632],{"class":60,"line":10468},[58,16633,3046],{"emptyLinePlaceholder":720},[58,16635,16636,16638,16640],{"class":60,"line":10489},[58,16637,4736],{"class":92},[58,16639,4739],{"class":82},[58,16641,102],{"class":75},[58,16643,16644],{"class":60,"line":10495},[58,16645,108],{"class":75},[114,16647,16649],{"id":16648},"_814封装案例","8.1.4封装案例",[19,16651,16652],{},[22,16653,16654,16657],{},[25,16655,16656],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[124,16659,16660,16663],{},[22,16661,16662],{},"求出立方体的面积和体积",[22,16664,16665],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[48,16667,16669],{"className":781,"code":16668,"language":783,"meta":53,"style":53},"#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",[55,16670,16671,16677,16687,16694,16698,16702,16707,16737,16741,16751,16761,16771,16775,16784,16788,16824,16828,16837,16841,16857,16861,16866,16875,16879,16886,16890,16899,16903,16910,16914,16923,16927,16934,16938,16943,16960,16964,17010,17014,17023,17027,17031,17035,17044,17048,17052,17057,17061,17067,17073,17079,17083,17087,17092,17114,17118,17172,17176,17184,17188,17193,17198,17211,17218,17234,17245,17251,17274,17280,17303,17317,17337,17343,17354,17377,17399,17404,17410,17424,17437,17442,17456,17461,17467,17472,17486,17491,17496,17510,17522,17527,17540,17545,17550,17555,17568,17573],{"__ignoreMap":53},[58,16672,16673,16675],{"class":60,"line":61},[58,16674,2596],{"class":92},[58,16676,2599],{"class":386},[58,16678,16679,16681,16683,16685],{"class":60,"line":68},[58,16680,2604],{"class":92},[58,16682,2607],{"class":92},[58,16684,2610],{"class":379},[58,16686,102],{"class":75},[58,16688,16689,16691],{"class":60,"line":79},[58,16690,15338],{"class":92},[58,16692,16693],{"class":379}," Cube\n",[58,16695,16696],{"class":60,"line":105},[58,16697,2195],{"class":75},[58,16699,16700],{"class":60,"line":627},[58,16701,15360],{"class":92},[58,16703,16704],{"class":60,"line":509},[58,16705,16706],{"class":64},"    \u002F\u002F输入长宽高\n",[58,16708,16709,16711,16714,16716,16718,16721,16723,16725,16728,16730,16732,16735],{"class":60,"line":559},[58,16710,15553],{"class":92},[58,16712,16713],{"class":379}," setLwh",[58,16715,793],{"class":75},[58,16717,796],{"class":92},[58,16719,16720],{"class":5862}," l",[58,16722,1164],{"class":75},[58,16724,796],{"class":92},[58,16726,16727],{"class":5862}," w",[58,16729,1164],{"class":75},[58,16731,796],{"class":92},[58,16733,16734],{"class":5862}," h",[58,16736,799],{"class":75},[58,16738,16739],{"class":60,"line":654},[58,16740,2676],{"class":75},[58,16742,16743,16746,16748],{"class":60,"line":671},[58,16744,16745],{"class":75},"        m_L",[58,16747,383],{"class":92},[58,16749,16750],{"class":75},"l;\n",[58,16752,16753,16756,16758],{"class":60,"line":677},[58,16754,16755],{"class":75},"        m_W",[58,16757,383],{"class":92},[58,16759,16760],{"class":75},"w;\n",[58,16762,16763,16766,16768],{"class":60,"line":2260},[58,16764,16765],{"class":75},"        m_H",[58,16767,383],{"class":92},[58,16769,16770],{"class":75},"h;\n",[58,16772,16773],{"class":60,"line":694},[58,16774,2833],{"class":75},[58,16776,16777,16779,16782],{"class":60,"line":2270},[58,16778,2631],{"class":92},[58,16780,16781],{"class":379}," mianji",[58,16783,2622],{"class":75},[58,16785,16786],{"class":60,"line":2275},[58,16787,2676],{"class":75},[58,16789,16790,16792,16794,16796,16799,16801,16804,16806,16809,16811,16814,16816,16819,16821],{"class":60,"line":2289},[58,16791,15396],{"class":92},[58,16793,15399],{"class":82},[58,16795,1241],{"class":92},[58,16797,16798],{"class":75},"(m_L",[58,16800,1241],{"class":92},[58,16802,16803],{"class":75},"m_W ",[58,16805,1267],{"class":92},[58,16807,16808],{"class":75}," m_L",[58,16810,1241],{"class":92},[58,16812,16813],{"class":75},"m_H ",[58,16815,1267],{"class":92},[58,16817,16818],{"class":75}," m_W",[58,16820,1241],{"class":92},[58,16822,16823],{"class":75},"m_H);\n",[58,16825,16826],{"class":60,"line":2294},[58,16827,2833],{"class":75},[58,16829,16830,16832,16835],{"class":60,"line":2300},[58,16831,2631],{"class":92},[58,16833,16834],{"class":379}," tiji",[58,16836,2622],{"class":75},[58,16838,16839],{"class":60,"line":2321},[58,16840,2676],{"class":75},[58,16842,16843,16845,16847,16849,16852,16854],{"class":60,"line":2326},[58,16844,15396],{"class":92},[58,16846,16808],{"class":75},[58,16848,1241],{"class":92},[58,16850,16851],{"class":75},"m_W",[58,16853,1241],{"class":92},[58,16855,16856],{"class":75},"m_H;\n",[58,16858,16859],{"class":60,"line":2340},[58,16860,2833],{"class":75},[58,16862,16863],{"class":60,"line":2345},[58,16864,16865],{"class":64},"    \u002F\u002F获取长宽高\n",[58,16867,16868,16870,16873],{"class":60,"line":2374},[58,16869,2631],{"class":92},[58,16871,16872],{"class":379}," getLength",[58,16874,2622],{"class":75},[58,16876,16877],{"class":60,"line":2379},[58,16878,2676],{"class":75},[58,16880,16881,16883],{"class":60,"line":2396},[58,16882,15396],{"class":92},[58,16884,16885],{"class":75}," m_L;\n",[58,16887,16888],{"class":60,"line":2401},[58,16889,2833],{"class":75},[58,16891,16892,16894,16897],{"class":60,"line":2406},[58,16893,2631],{"class":92},[58,16895,16896],{"class":379}," getWidth",[58,16898,2622],{"class":75},[58,16900,16901],{"class":60,"line":2411},[58,16902,2676],{"class":75},[58,16904,16905,16907],{"class":60,"line":2425},[58,16906,15396],{"class":92},[58,16908,16909],{"class":75}," m_W;\n",[58,16911,16912],{"class":60,"line":2430},[58,16913,2833],{"class":75},[58,16915,16916,16918,16921],{"class":60,"line":3223},[58,16917,2631],{"class":92},[58,16919,16920],{"class":379}," getHeight",[58,16922,2622],{"class":75},[58,16924,16925],{"class":60,"line":3237},[58,16926,2676],{"class":75},[58,16928,16929,16931],{"class":60,"line":3245},[58,16930,15396],{"class":92},[58,16932,16933],{"class":75}," m_H;\n",[58,16935,16936],{"class":60,"line":3250},[58,16937,2833],{"class":75},[58,16939,16940],{"class":60,"line":3256},[58,16941,16942],{"class":64},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[58,16944,16945,16948,16951,16953,16956,16958],{"class":60,"line":3262},[58,16946,16947],{"class":92},"    bool",[58,16949,16950],{"class":379}," isEqual",[58,16952,793],{"class":75},[58,16954,16955],{"class":379},"Cube",[58,16957,3495],{"class":5862},[58,16959,799],{"class":75},[58,16961,16962],{"class":60,"line":3267},[58,16963,2676],{"class":75},[58,16965,16966,16968,16971,16974,16976,16978,16981,16983,16986,16989,16991,16993,16996,16998,17000,17003,17005,17007],{"class":60,"line":8594},[58,16967,3143],{"class":92},[58,16969,16970],{"class":75}," (c.",[58,16972,16973],{"class":379},"getLength",[58,16975,13694],{"class":75},[58,16977,3595],{"class":92},[58,16979,16980],{"class":75}," m_L ",[58,16982,2362],{"class":92},[58,16984,16985],{"class":75}," c.",[58,16987,16988],{"class":379},"getWidth",[58,16990,13694],{"class":75},[58,16992,3595],{"class":92},[58,16994,16995],{"class":75}," m_W ",[58,16997,2362],{"class":92},[58,16999,16985],{"class":75},[58,17001,17002],{"class":379},"getHeight",[58,17004,13694],{"class":75},[58,17006,3595],{"class":92},[58,17008,17009],{"class":75}," m_H)\n",[58,17011,17012],{"class":60,"line":8618},[58,17013,3156],{"class":75},[58,17015,17016,17018,17021],{"class":60,"line":8623},[58,17017,16375],{"class":92},[58,17019,17020],{"class":82}," true",[58,17022,102],{"class":75},[58,17024,17025],{"class":60,"line":8629},[58,17026,3175],{"class":75},[58,17028,17029],{"class":60,"line":8656},[58,17030,3216],{"class":92},[58,17032,17033],{"class":60,"line":8661},[58,17034,3156],{"class":75},[58,17036,17037,17039,17042],{"class":60,"line":8667},[58,17038,16375],{"class":92},[58,17040,17041],{"class":82}," false",[58,17043,102],{"class":75},[58,17045,17046],{"class":60,"line":8679},[58,17047,3175],{"class":75},[58,17049,17050],{"class":60,"line":8691},[58,17051,2833],{"class":75},[58,17053,17054],{"class":60,"line":8703},[58,17055,17056],{"class":64},"    \u002F\u002F私有属性\n",[58,17058,17059],{"class":60,"line":10361},[58,17060,15866],{"class":92},[58,17062,17063,17065],{"class":60,"line":10386},[58,17064,2631],{"class":92},[58,17066,16885],{"class":75},[58,17068,17069,17071],{"class":60,"line":10409},[58,17070,2631],{"class":92},[58,17072,16909],{"class":75},[58,17074,17075,17077],{"class":60,"line":10433},[58,17076,2631],{"class":92},[58,17078,16933],{"class":75},[58,17080,17081],{"class":60,"line":10438},[58,17082,3046],{"emptyLinePlaceholder":720},[58,17084,17085],{"class":60,"line":10443},[58,17086,4641],{"class":75},[58,17088,17089],{"class":60,"line":10448},[58,17090,17091],{"class":64},"\u002F\u002F全局函数判断两个立方体是否相等\n",[58,17093,17094,17096,17098,17100,17102,17105,17107,17109,17112],{"class":60,"line":10457},[58,17095,2004],{"class":92},[58,17097,16950],{"class":379},[58,17099,793],{"class":75},[58,17101,16955],{"class":379},[58,17103,17104],{"class":5862}," c1",[58,17106,1164],{"class":75},[58,17108,16955],{"class":379},[58,17110,17111],{"class":5862}," c2",[58,17113,799],{"class":75},[58,17115,17116],{"class":60,"line":10462},[58,17117,2195],{"class":75},[58,17119,17120,17122,17125,17127,17129,17131,17134,17136,17139,17141,17143,17145,17147,17149,17151,17153,17155,17157,17159,17161,17163,17165,17167,17169],{"class":60,"line":10468},[58,17121,4736],{"class":92},[58,17123,17124],{"class":75}," (c1.",[58,17126,16973],{"class":379},[58,17128,13694],{"class":75},[58,17130,3595],{"class":92},[58,17132,17133],{"class":75}," c2.",[58,17135,16973],{"class":379},[58,17137,17138],{"class":75},"()) ",[58,17140,2362],{"class":92},[58,17142,17124],{"class":75},[58,17144,16988],{"class":379},[58,17146,13694],{"class":75},[58,17148,3595],{"class":92},[58,17150,17133],{"class":75},[58,17152,16988],{"class":379},[58,17154,17138],{"class":75},[58,17156,2362],{"class":92},[58,17158,17124],{"class":75},[58,17160,17002],{"class":379},[58,17162,13694],{"class":75},[58,17164,3595],{"class":92},[58,17166,17133],{"class":75},[58,17168,17002],{"class":379},[58,17170,17171],{"class":75},"());\n",[58,17173,17174],{"class":60,"line":10489},[58,17175,108],{"class":75},[58,17177,17178,17180,17182],{"class":60,"line":10495},[58,17179,796],{"class":92},[58,17181,2619],{"class":379},[58,17183,2622],{"class":75},[58,17185,17186],{"class":60,"line":10509},[58,17187,2195],{"class":75},[58,17189,17190],{"class":60,"line":10515},[58,17191,17192],{"class":75},"    Cube c1;\n",[58,17194,17195],{"class":60,"line":10542},[58,17196,17197],{"class":64},"    \u002F\u002F输入立方体的长宽高\n",[58,17199,17200,17202,17204,17207,17209],{"class":60,"line":10551},[58,17201,2200],{"class":75},[58,17203,1827],{"class":92},[58,17205,17206],{"class":386},"\"请输入第一个立方体的长、宽、高：\"",[58,17208,1827],{"class":92},[58,17210,1849],{"class":75},[58,17212,17213,17215],{"class":60,"line":10557},[58,17214,2631],{"class":92},[58,17216,17217],{"class":75}," l,w,h,l1,w1,h1;\n",[58,17219,17220,17222,17224,17226,17228,17230,17232],{"class":60,"line":10565},[58,17221,2658],{"class":75},[58,17223,2079],{"class":92},[58,17225,1304],{"class":75},[58,17227,2079],{"class":92},[58,17229,247],{"class":75},[58,17231,2079],{"class":92},[58,17233,16770],{"class":75},[58,17235,17236,17239,17242],{"class":60,"line":10570},[58,17237,17238],{"class":75},"    c1.",[58,17240,17241],{"class":379},"setLwh",[58,17243,17244],{"class":75},"(l,w,h);\n",[58,17246,17248],{"class":60,"line":17247},66,[58,17249,17250],{"class":64},"    \u002F\u002F面积\n",[58,17252,17254,17256,17258,17261,17263,17265,17268,17270,17272],{"class":60,"line":17253},67,[58,17255,2200],{"class":75},[58,17257,1827],{"class":92},[58,17259,17260],{"class":386},"\"立方体的表面积为：\"",[58,17262,1827],{"class":92},[58,17264,15474],{"class":75},[58,17266,17267],{"class":379},"mianji",[58,17269,3073],{"class":75},[58,17271,1827],{"class":92},[58,17273,1849],{"class":75},[58,17275,17277],{"class":60,"line":17276},68,[58,17278,17279],{"class":64},"    \u002F\u002F体积\n",[58,17281,17283,17285,17287,17290,17292,17294,17297,17299,17301],{"class":60,"line":17282},69,[58,17284,2200],{"class":75},[58,17286,1827],{"class":92},[58,17288,17289],{"class":386},"\"立方体的体积为：\"",[58,17291,1827],{"class":92},[58,17293,15474],{"class":75},[58,17295,17296],{"class":379},"tiji",[58,17298,3073],{"class":75},[58,17300,1827],{"class":92},[58,17302,1849],{"class":75},[58,17304,17306,17308,17310,17313,17315],{"class":60,"line":17305},70,[58,17307,2200],{"class":75},[58,17309,1827],{"class":92},[58,17311,17312],{"class":386},"\"请输入第二个立方体的长、宽、高：\"",[58,17314,1827],{"class":92},[58,17316,1849],{"class":75},[58,17318,17320,17322,17324,17327,17329,17332,17334],{"class":60,"line":17319},71,[58,17321,2658],{"class":75},[58,17323,2079],{"class":92},[58,17325,17326],{"class":75},"l1",[58,17328,2079],{"class":92},[58,17330,17331],{"class":75},"w1",[58,17333,2079],{"class":92},[58,17335,17336],{"class":75},"h1;\n",[58,17338,17340],{"class":60,"line":17339},72,[58,17341,17342],{"class":75},"    Cube c2;\n",[58,17344,17346,17349,17351],{"class":60,"line":17345},73,[58,17347,17348],{"class":75},"    c2.",[58,17350,17241],{"class":379},[58,17352,17353],{"class":75},"(l1,w1,h1);\n",[58,17355,17357,17359,17361,17364,17366,17369,17371,17373,17375],{"class":60,"line":17356},74,[58,17358,2200],{"class":75},[58,17360,1827],{"class":92},[58,17362,17363],{"class":386},"\"第二个立方体的表面积为：\"",[58,17365,1827],{"class":92},[58,17367,17368],{"class":75},"c2.",[58,17370,17267],{"class":379},[58,17372,3073],{"class":75},[58,17374,1827],{"class":92},[58,17376,1849],{"class":75},[58,17378,17380,17382,17384,17387,17389,17391,17393,17395,17397],{"class":60,"line":17379},75,[58,17381,2200],{"class":75},[58,17383,1827],{"class":92},[58,17385,17386],{"class":386},"\"第二个立方体的体积为：\"",[58,17388,1827],{"class":92},[58,17390,17368],{"class":75},[58,17392,17296],{"class":379},[58,17394,3073],{"class":75},[58,17396,1827],{"class":92},[58,17398,1849],{"class":75},[58,17400,17402],{"class":60,"line":17401},76,[58,17403,3046],{"emptyLinePlaceholder":720},[58,17405,17407],{"class":60,"line":17406},77,[58,17408,17409],{"class":64},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[58,17411,17413,17415,17417,17420,17422],{"class":60,"line":17412},78,[58,17414,2200],{"class":75},[58,17416,1827],{"class":92},[58,17418,17419],{"class":386},"\"内部函数判断结果：\"",[58,17421,1827],{"class":92},[58,17423,1849],{"class":75},[58,17425,17427,17429,17431,17434],{"class":60,"line":17426},79,[58,17428,3747],{"class":92},[58,17430,17124],{"class":75},[58,17432,17433],{"class":379},"isEqual",[58,17435,17436],{"class":75},"(c2))\n",[58,17438,17440],{"class":60,"line":17439},80,[58,17441,2676],{"class":75},[58,17443,17445,17447,17449,17452,17454],{"class":60,"line":17444},81,[58,17446,4097],{"class":75},[58,17448,1827],{"class":92},[58,17450,17451],{"class":386},"\"两个立方体相等\"",[58,17453,1827],{"class":92},[58,17455,1849],{"class":75},[58,17457,17459],{"class":60,"line":17458},82,[58,17460,2833],{"class":75},[58,17462,17464],{"class":60,"line":17463},83,[58,17465,17466],{"class":92},"    else\n",[58,17468,17470],{"class":60,"line":17469},84,[58,17471,2676],{"class":75},[58,17473,17475,17477,17479,17482,17484],{"class":60,"line":17474},85,[58,17476,4097],{"class":75},[58,17478,1827],{"class":92},[58,17480,17481],{"class":386},"\"两个立方体不相等\"",[58,17483,1827],{"class":92},[58,17485,1849],{"class":75},[58,17487,17489],{"class":60,"line":17488},86,[58,17490,2833],{"class":75},[58,17492,17494],{"class":60,"line":17493},87,[58,17495,3046],{"emptyLinePlaceholder":720},[58,17497,17499,17501,17503,17506,17508],{"class":60,"line":17498},88,[58,17500,2200],{"class":75},[58,17502,1827],{"class":92},[58,17504,17505],{"class":386},"\"全局函数判断结果：\"",[58,17507,1827],{"class":92},[58,17509,1849],{"class":75},[58,17511,17513,17515,17517,17519],{"class":60,"line":17512},89,[58,17514,3747],{"class":92},[58,17516,2305],{"class":75},[58,17518,17433],{"class":379},[58,17520,17521],{"class":75},"(c1, c2))\n",[58,17523,17525],{"class":60,"line":17524},90,[58,17526,2676],{"class":75},[58,17528,17530,17532,17534,17536,17538],{"class":60,"line":17529},91,[58,17531,4097],{"class":75},[58,17533,1827],{"class":92},[58,17535,17451],{"class":386},[58,17537,1827],{"class":92},[58,17539,1849],{"class":75},[58,17541,17543],{"class":60,"line":17542},92,[58,17544,2833],{"class":75},[58,17546,17548],{"class":60,"line":17547},93,[58,17549,17466],{"class":92},[58,17551,17553],{"class":60,"line":17552},94,[58,17554,2676],{"class":75},[58,17556,17558,17560,17562,17564,17566],{"class":60,"line":17557},95,[58,17559,4097],{"class":75},[58,17561,1827],{"class":92},[58,17563,17481],{"class":386},[58,17565,1827],{"class":92},[58,17567,1849],{"class":75},[58,17569,17571],{"class":60,"line":17570},96,[58,17572,2833],{"class":75},[58,17574,17576],{"class":60,"line":17575},97,[58,17577,108],{"class":75},[19,17579,17580],{"start":68},[22,17581,17582],{},[25,17583,17584],{},"练习案例2：点和圆的关系",[124,17586,17587],{},[22,17588,17589],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[48,17591,17593],{"className":781,"code":17592,"language":783,"meta":53,"style":53},"#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",[55,17594,17595,17601,17611,17618,17625,17629,17633,17638,17672,17677,17693,17707,17711,17715,17722,17729,17733,17739,17743,17747,17751,17773,17796,17801,17815,17830,17834,17838,17844,17849,17854,17858,17884,17888,17918,17946,17974,17991,17995,18008,18012,18016,18020,18033,18037,18041,18049,18053,18057,18061,18066,18070,18081,18088,18097,18107,18118,18125,18138,18149,18159,18170,18177,18191,18196,18206,18214],{"__ignoreMap":53},[58,17596,17597,17599],{"class":60,"line":61},[58,17598,2596],{"class":92},[58,17600,2599],{"class":386},[58,17602,17603,17605,17607,17609],{"class":60,"line":68},[58,17604,2604],{"class":92},[58,17606,2607],{"class":92},[58,17608,2610],{"class":379},[58,17610,102],{"class":75},[58,17612,17613,17615],{"class":60,"line":79},[58,17614,2596],{"class":92},[58,17616,17617],{"class":386},"\u003Ccmath>\n",[58,17619,17620,17622],{"class":60,"line":105},[58,17621,15338],{"class":92},[58,17623,17624],{"class":379}," Point\n",[58,17626,17627],{"class":60,"line":627},[58,17628,2195],{"class":75},[58,17630,17631],{"class":60,"line":509},[58,17632,15360],{"class":92},[58,17634,17635],{"class":60,"line":559},[58,17636,17637],{"class":64},"    \u002F\u002F赋值\n",[58,17639,17640,17642,17645,17647,17649,17652,17654,17656,17659,17662,17664,17667,17669],{"class":60,"line":654},[58,17641,15553],{"class":92},[58,17643,17644],{"class":379}," setPoint",[58,17646,793],{"class":75},[58,17648,14681],{"class":92},[58,17650,17651],{"class":5862}," x",[58,17653,469],{"class":75},[58,17655,14681],{"class":92},[58,17657,17658],{"class":5862}," y",[58,17660,17661],{"class":75},") { m_x ",[58,17663,383],{"class":92},[58,17665,17666],{"class":75}," x; m_y ",[58,17668,383],{"class":92},[58,17670,17671],{"class":75}," y; }\n",[58,17673,17674],{"class":60,"line":671},[58,17675,17676],{"class":64},"    \u002F\u002F获取坐标\n",[58,17678,17679,17681,17684,17687,17690],{"class":60,"line":677},[58,17680,15382],{"class":92},[58,17682,17683],{"class":379}," getX",[58,17685,17686],{"class":75},"() { ",[58,17688,17689],{"class":92},"return",[58,17691,17692],{"class":75}," m_x; }\n",[58,17694,17695,17697,17700,17702,17704],{"class":60,"line":2260},[58,17696,15382],{"class":92},[58,17698,17699],{"class":379}," getY",[58,17701,17686],{"class":75},[58,17703,17689],{"class":92},[58,17705,17706],{"class":75}," m_y; }\n",[58,17708,17709],{"class":60,"line":694},[58,17710,3046],{"emptyLinePlaceholder":720},[58,17712,17713],{"class":60,"line":2270},[58,17714,15866],{"class":92},[58,17716,17717,17719],{"class":60,"line":2275},[58,17718,15382],{"class":92},[58,17720,17721],{"class":75}," m_x;\n",[58,17723,17724,17726],{"class":60,"line":2289},[58,17725,15382],{"class":92},[58,17727,17728],{"class":75}," m_y;\n",[58,17730,17731],{"class":60,"line":2294},[58,17732,4641],{"class":75},[58,17734,17735,17737],{"class":60,"line":2300},[58,17736,15338],{"class":92},[58,17738,15341],{"class":379},[58,17740,17741],{"class":60,"line":2321},[58,17742,2195],{"class":75},[58,17744,17745],{"class":60,"line":2326},[58,17746,15360],{"class":92},[58,17748,17749],{"class":60,"line":2340},[58,17750,17637],{"class":64},[58,17752,17753,17755,17758,17760,17762,17765,17768,17770],{"class":60,"line":2345},[58,17754,15553],{"class":92},[58,17756,17757],{"class":379}," setRadius",[58,17759,793],{"class":75},[58,17761,14681],{"class":92},[58,17763,17764],{"class":5862}," r",[58,17766,17767],{"class":75},") { m_r ",[58,17769,383],{"class":92},[58,17771,17772],{"class":75}," r; }\n",[58,17774,17775,17777,17780,17782,17785,17788,17791,17793],{"class":60,"line":2374},[58,17776,15553],{"class":92},[58,17778,17779],{"class":379}," setCenter",[58,17781,793],{"class":75},[58,17783,17784],{"class":379},"Point",[58,17786,17787],{"class":5862}," center",[58,17789,17790],{"class":75},") { m_center ",[58,17792,383],{"class":92},[58,17794,17795],{"class":75}," center; }\n",[58,17797,17798],{"class":60,"line":2379},[58,17799,17800],{"class":64},"    \u002F\u002F获取属性\n",[58,17802,17803,17805,17808,17810,17812],{"class":60,"line":2396},[58,17804,15382],{"class":92},[58,17806,17807],{"class":379}," getRadius",[58,17809,17686],{"class":75},[58,17811,17689],{"class":92},[58,17813,17814],{"class":75}," m_r; }\n",[58,17816,17817,17820,17823,17825,17827],{"class":60,"line":2401},[58,17818,17819],{"class":379},"    Point",[58,17821,17822],{"class":379}," getCenter",[58,17824,17686],{"class":75},[58,17826,17689],{"class":92},[58,17828,17829],{"class":75}," m_center; }\n",[58,17831,17832],{"class":60,"line":2406},[58,17833,3046],{"emptyLinePlaceholder":720},[58,17835,17836],{"class":60,"line":2411},[58,17837,15866],{"class":92},[58,17839,17840,17842],{"class":60,"line":2425},[58,17841,15382],{"class":92},[58,17843,15372],{"class":75},[58,17845,17846],{"class":60,"line":2430},[58,17847,17848],{"class":64},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[58,17850,17851],{"class":60,"line":3223},[58,17852,17853],{"class":75},"    Point m_center;\n",[58,17855,17856],{"class":60,"line":3237},[58,17857,4641],{"class":75},[58,17859,17860,17862,17865,17867,17870,17872,17874,17876,17878,17880,17882],{"class":60,"line":3245},[58,17861,6010],{"class":92},[58,17863,17864],{"class":379}," isInCircle",[58,17866,793],{"class":75},[58,17868,17869],{"class":379},"Circle",[58,17871,11229],{"class":92},[58,17873,1074],{"class":5862},[58,17875,1164],{"class":75},[58,17877,17784],{"class":379},[58,17879,11229],{"class":92},[58,17881,175],{"class":5862},[58,17883,799],{"class":75},[58,17885,17886],{"class":60,"line":3250},[58,17887,2195],{"class":75},[58,17889,17890,17892,17895,17897,17899,17902,17905,17908,17910,17912,17914,17916],{"class":60,"line":3256},[58,17891,15382],{"class":92},[58,17893,17894],{"class":75}," dx ",[58,17896,383],{"class":92},[58,17898,16985],{"class":75},[58,17900,17901],{"class":379},"getCenter",[58,17903,17904],{"class":75},"().",[58,17906,17907],{"class":379},"getX",[58,17909,13694],{"class":75},[58,17911,1318],{"class":92},[58,17913,16531],{"class":75},[58,17915,17907],{"class":379},[58,17917,6282],{"class":75},[58,17919,17920,17922,17925,17927,17929,17931,17933,17936,17938,17940,17942,17944],{"class":60,"line":3262},[58,17921,15382],{"class":92},[58,17923,17924],{"class":75}," dy ",[58,17926,383],{"class":92},[58,17928,16985],{"class":75},[58,17930,17901],{"class":379},[58,17932,17904],{"class":75},[58,17934,17935],{"class":379},"getY",[58,17937,13694],{"class":75},[58,17939,1318],{"class":92},[58,17941,16531],{"class":75},[58,17943,17935],{"class":379},[58,17945,6282],{"class":75},[58,17947,17948,17950,17953,17955,17958,17961,17963,17965,17967,17969,17971],{"class":60,"line":3267},[58,17949,15382],{"class":92},[58,17951,17952],{"class":75}," distance ",[58,17954,383],{"class":92},[58,17956,17957],{"class":379}," sqrt",[58,17959,17960],{"class":75},"(dx ",[58,17962,1241],{"class":92},[58,17964,17894],{"class":75},[58,17966,1267],{"class":92},[58,17968,17924],{"class":75},[58,17970,1241],{"class":92},[58,17972,17973],{"class":75}," dy);\n",[58,17975,17976,17978,17981,17983,17985,17988],{"class":60,"line":8594},[58,17977,3747],{"class":92},[58,17979,17980],{"class":75}," (distance ",[58,17982,373],{"class":92},[58,17984,16985],{"class":75},[58,17986,17987],{"class":379},"getRadius",[58,17989,17990],{"class":75},"())\n",[58,17992,17993],{"class":60,"line":8618},[58,17994,2676],{"class":75},[58,17996,17997,17999,18001,18004,18006],{"class":60,"line":8623},[58,17998,10314],{"class":75},[58,18000,1827],{"class":92},[58,18002,18003],{"class":386}," \"点在圆内\"",[58,18005,2094],{"class":92},[58,18007,9486],{"class":75},[58,18009,18010],{"class":60,"line":8629},[58,18011,2833],{"class":75},[58,18013,18014],{"class":60,"line":8656},[58,18015,17466],{"class":92},[58,18017,18018],{"class":60,"line":8661},[58,18019,2676],{"class":75},[58,18021,18022,18024,18026,18029,18031],{"class":60,"line":8667},[58,18023,10314],{"class":75},[58,18025,1827],{"class":92},[58,18027,18028],{"class":386}," \"点在圆外\"",[58,18030,2094],{"class":92},[58,18032,9486],{"class":75},[58,18034,18035],{"class":60,"line":8679},[58,18036,2833],{"class":75},[58,18038,18039],{"class":60,"line":8691},[58,18040,108],{"class":75},[58,18042,18043,18045,18047],{"class":60,"line":8703},[58,18044,796],{"class":92},[58,18046,2619],{"class":379},[58,18048,2622],{"class":75},[58,18050,18051],{"class":60,"line":10361},[58,18052,2195],{"class":75},[58,18054,18055],{"class":60,"line":10386},[58,18056,15697],{"class":64},[58,18058,18059],{"class":60,"line":10409},[58,18060,15444],{"class":75},[58,18062,18063],{"class":60,"line":10433},[58,18064,18065],{"class":75},"    Point p1;\n",[58,18067,18068],{"class":60,"line":10438},[58,18069,17637],{"class":64},[58,18071,18072,18074,18076,18079],{"class":60,"line":10443},[58,18073,2200],{"class":75},[58,18075,1827],{"class":92},[58,18077,18078],{"class":386},"\"请输入圆的半径：\"",[58,18080,102],{"class":75},[58,18082,18083,18085],{"class":60,"line":10448},[58,18084,15382],{"class":92},[58,18086,18087],{"class":75}," r;\n",[58,18089,18090,18092,18094],{"class":60,"line":10457},[58,18091,2658],{"class":75},[58,18093,2079],{"class":92},[58,18095,18096],{"class":75},"r;\n",[58,18098,18099,18101,18104],{"class":60,"line":10462},[58,18100,17238],{"class":75},[58,18102,18103],{"class":379},"setRadius",[58,18105,18106],{"class":75},"(r);\n",[58,18108,18109,18111,18113,18116],{"class":60,"line":10468},[58,18110,2200],{"class":75},[58,18112,1827],{"class":92},[58,18114,18115],{"class":386},"\"请输入圆心坐标：\"",[58,18117,102],{"class":75},[58,18119,18120,18122],{"class":60,"line":10489},[58,18121,15382],{"class":92},[58,18123,18124],{"class":75}," x, y;\n",[58,18126,18127,18129,18131,18133,18135],{"class":60,"line":10495},[58,18128,2658],{"class":75},[58,18130,2079],{"class":92},[58,18132,1605],{"class":75},[58,18134,2079],{"class":92},[58,18136,18137],{"class":75},"y;\n",[58,18139,18140,18143,18146],{"class":60,"line":10509},[58,18141,18142],{"class":75},"    p1.",[58,18144,18145],{"class":379},"setPoint",[58,18147,18148],{"class":75},"(x, y);\n",[58,18150,18151,18153,18156],{"class":60,"line":10515},[58,18152,17238],{"class":75},[58,18154,18155],{"class":379},"setCenter",[58,18157,18158],{"class":75},"(p1);\n",[58,18160,18161,18163,18165,18168],{"class":60,"line":10542},[58,18162,2200],{"class":75},[58,18164,1827],{"class":92},[58,18166,18167],{"class":386},"\"请输入测试点坐标：\"",[58,18169,102],{"class":75},[58,18171,18172,18174],{"class":60,"line":10551},[58,18173,15382],{"class":92},[58,18175,18176],{"class":75}," x1, y1;\n",[58,18178,18179,18181,18183,18186,18188],{"class":60,"line":10557},[58,18180,2658],{"class":75},[58,18182,2079],{"class":92},[58,18184,18185],{"class":75},"x1",[58,18187,2079],{"class":92},[58,18189,18190],{"class":75},"y1;\n",[58,18192,18193],{"class":60,"line":10565},[58,18194,18195],{"class":75},"    Point p2;\n",[58,18197,18198,18201,18203],{"class":60,"line":10570},[58,18199,18200],{"class":75},"    p2.",[58,18202,18145],{"class":379},[58,18204,18205],{"class":75},"(x1, y1);\n",[58,18207,18208,18211],{"class":60,"line":17247},[58,18209,18210],{"class":379},"    isInCircle",[58,18212,18213],{"class":75},"(c1, p2);\n",[58,18215,18216],{"class":60,"line":17253},[58,18217,108],{"class":75},[175,18219,18220],{},"在类中可以让另一个类作为本来的成员",[175,18222,18223],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[175,18225,18226],{},"创建point.h",[48,18228,18230],{"className":781,"code":18229,"language":783,"meta":53,"style":53},"#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",[55,18231,18232,18243,18249,18259,18265,18269,18274,18278,18282,18302,18306,18314,18322,18326,18330,18336,18342],{"__ignoreMap":53},[58,18233,18234,18237,18240],{"class":60,"line":61},[58,18235,18236],{"class":92},"#pragma",[58,18238,18239],{"class":379}," once",[58,18241,18242],{"class":64}," \u002F\u002F防止头文件重复包含\n",[58,18244,18245,18247],{"class":60,"line":68},[58,18246,2596],{"class":92},[58,18248,2599],{"class":386},[58,18250,18251,18253,18255,18257],{"class":60,"line":79},[58,18252,2604],{"class":92},[58,18254,2607],{"class":92},[58,18256,2610],{"class":379},[58,18258,102],{"class":75},[58,18260,18261,18263],{"class":60,"line":105},[58,18262,15338],{"class":92},[58,18264,17624],{"class":379},[58,18266,18267],{"class":60,"line":627},[58,18268,2195],{"class":75},[58,18270,18271],{"class":60,"line":509},[58,18272,18273],{"class":64},"\u002F\u002F做好声明与变量定义就可以\n",[58,18275,18276],{"class":60,"line":559},[58,18277,15360],{"class":92},[58,18279,18280],{"class":60,"line":654},[58,18281,17637],{"class":64},[58,18283,18284,18286,18288,18290,18292,18294,18296,18298,18300],{"class":60,"line":671},[58,18285,15553],{"class":92},[58,18287,17644],{"class":379},[58,18289,793],{"class":75},[58,18291,14681],{"class":92},[58,18293,17651],{"class":5862},[58,18295,469],{"class":75},[58,18297,14681],{"class":92},[58,18299,17658],{"class":5862},[58,18301,3365],{"class":75},[58,18303,18304],{"class":60,"line":677},[58,18305,17676],{"class":64},[58,18307,18308,18310,18312],{"class":60,"line":2260},[58,18309,15382],{"class":92},[58,18311,17683],{"class":379},[58,18313,6282],{"class":75},[58,18315,18316,18318,18320],{"class":60,"line":694},[58,18317,15382],{"class":92},[58,18319,17699],{"class":379},[58,18321,6282],{"class":75},[58,18323,18324],{"class":60,"line":2270},[58,18325,3046],{"emptyLinePlaceholder":720},[58,18327,18328],{"class":60,"line":2275},[58,18329,15866],{"class":92},[58,18331,18332,18334],{"class":60,"line":2289},[58,18333,15382],{"class":92},[58,18335,17721],{"class":75},[58,18337,18338,18340],{"class":60,"line":2294},[58,18339,15382],{"class":92},[58,18341,17728],{"class":75},[58,18343,18344],{"class":60,"line":2300},[58,18345,4641],{"class":75},[175,18347,18348],{},"创建point.cpp",[48,18350,18352],{"className":781,"code":18351,"language":783,"meta":53,"style":53},"#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",[55,18353,18354,18361,18366,18400,18404,18420],{"__ignoreMap":53},[58,18355,18356,18358],{"class":60,"line":61},[58,18357,2596],{"class":92},[58,18359,18360],{"class":386},"\u003Cpoint.h>\n",[58,18362,18363],{"class":60,"line":68},[58,18364,18365],{"class":64},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[58,18367,18368,18370,18373,18376,18378,18380,18382,18384,18386,18388,18390,18392,18394,18396,18398],{"class":60,"line":79},[58,18369,15553],{"class":92},[58,18371,18372],{"class":379}," Point",[58,18374,18375],{"class":75},"::",[58,18377,18145],{"class":379},[58,18379,793],{"class":75},[58,18381,14681],{"class":92},[58,18383,17651],{"class":5862},[58,18385,469],{"class":75},[58,18387,14681],{"class":92},[58,18389,17658],{"class":5862},[58,18391,17661],{"class":75},[58,18393,383],{"class":92},[58,18395,17666],{"class":75},[58,18397,383],{"class":92},[58,18399,17671],{"class":75},[58,18401,18402],{"class":60,"line":105},[58,18403,17676],{"class":64},[58,18405,18406,18408,18410,18412,18414,18416,18418],{"class":60,"line":627},[58,18407,15382],{"class":92},[58,18409,18372],{"class":379},[58,18411,18375],{"class":75},[58,18413,17907],{"class":379},[58,18415,17686],{"class":75},[58,18417,17689],{"class":92},[58,18419,17692],{"class":75},[58,18421,18422,18424,18426,18428,18430,18432,18434],{"class":60,"line":509},[58,18423,15382],{"class":92},[58,18425,18372],{"class":379},[58,18427,18375],{"class":75},[58,18429,17935],{"class":379},[58,18431,17686],{"class":75},[58,18433,17689],{"class":92},[58,18435,17706],{"class":75},[175,18437,18438],{},"创建circle.h",[48,18440,18442],{"className":781,"code":18441,"language":783,"meta":53,"style":53},"#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",[55,18443,18444,18451,18457,18467,18473,18479,18483,18487,18491,18505,18519,18523,18531,18539,18543,18547,18553,18557,18561],{"__ignoreMap":53},[58,18445,18446,18448],{"class":60,"line":61},[58,18447,18236],{"class":92},[58,18449,18450],{"class":379}," once\n",[58,18452,18453,18455],{"class":60,"line":68},[58,18454,2596],{"class":92},[58,18456,2599],{"class":386},[58,18458,18459,18461,18463,18465],{"class":60,"line":79},[58,18460,2604],{"class":92},[58,18462,2607],{"class":92},[58,18464,2610],{"class":379},[58,18466,102],{"class":75},[58,18468,18469,18471],{"class":60,"line":105},[58,18470,2596],{"class":92},[58,18472,18360],{"class":386},[58,18474,18475,18477],{"class":60,"line":627},[58,18476,15338],{"class":92},[58,18478,15341],{"class":379},[58,18480,18481],{"class":60,"line":509},[58,18482,2195],{"class":75},[58,18484,18485],{"class":60,"line":559},[58,18486,15360],{"class":92},[58,18488,18489],{"class":60,"line":654},[58,18490,17637],{"class":64},[58,18492,18493,18495,18497,18499,18501,18503],{"class":60,"line":671},[58,18494,15553],{"class":92},[58,18496,17757],{"class":379},[58,18498,793],{"class":75},[58,18500,14681],{"class":92},[58,18502,17764],{"class":5862},[58,18504,3365],{"class":75},[58,18506,18507,18509,18511,18513,18515,18517],{"class":60,"line":677},[58,18508,15553],{"class":92},[58,18510,17779],{"class":379},[58,18512,793],{"class":75},[58,18514,17784],{"class":379},[58,18516,17787],{"class":5862},[58,18518,3365],{"class":75},[58,18520,18521],{"class":60,"line":2260},[58,18522,17800],{"class":64},[58,18524,18525,18527,18529],{"class":60,"line":694},[58,18526,15382],{"class":92},[58,18528,17807],{"class":379},[58,18530,6282],{"class":75},[58,18532,18533,18535,18537],{"class":60,"line":2270},[58,18534,17819],{"class":379},[58,18536,17822],{"class":379},[58,18538,6282],{"class":75},[58,18540,18541],{"class":60,"line":2275},[58,18542,3046],{"emptyLinePlaceholder":720},[58,18544,18545],{"class":60,"line":2289},[58,18546,15866],{"class":92},[58,18548,18549,18551],{"class":60,"line":2294},[58,18550,15382],{"class":92},[58,18552,15372],{"class":75},[58,18554,18555],{"class":60,"line":2300},[58,18556,17848],{"class":64},[58,18558,18559],{"class":60,"line":2321},[58,18560,17853],{"class":75},[58,18562,18563],{"class":60,"line":2326},[58,18564,4641],{"class":75},[175,18566,18567],{},"创建circle.cpp",[48,18569,18571],{"className":781,"code":18570,"language":783,"meta":53,"style":53},"#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",[55,18572,18573,18580,18603,18625,18630,18646],{"__ignoreMap":53},[58,18574,18575,18577],{"class":60,"line":61},[58,18576,2596],{"class":92},[58,18578,18579],{"class":386},"\u003Ccircle.h>\n",[58,18581,18582,18584,18587,18589,18591,18593,18595,18597,18599,18601],{"class":60,"line":68},[58,18583,6010],{"class":92},[58,18585,18586],{"class":379}," Circle",[58,18588,18375],{"class":75},[58,18590,18103],{"class":379},[58,18592,793],{"class":75},[58,18594,14681],{"class":92},[58,18596,17764],{"class":5862},[58,18598,17767],{"class":75},[58,18600,383],{"class":92},[58,18602,17772],{"class":75},[58,18604,18605,18607,18609,18611,18613,18615,18617,18619,18621,18623],{"class":60,"line":79},[58,18606,6010],{"class":92},[58,18608,18586],{"class":379},[58,18610,18375],{"class":75},[58,18612,18155],{"class":379},[58,18614,793],{"class":75},[58,18616,17784],{"class":379},[58,18618,17787],{"class":5862},[58,18620,17790],{"class":75},[58,18622,383],{"class":92},[58,18624,17795],{"class":75},[58,18626,18627],{"class":60,"line":105},[58,18628,18629],{"class":64},"\u002F\u002F获取属性\n",[58,18631,18632,18634,18636,18638,18640,18642,18644],{"class":60,"line":627},[58,18633,14681],{"class":92},[58,18635,18586],{"class":379},[58,18637,18375],{"class":75},[58,18639,17987],{"class":379},[58,18641,17686],{"class":75},[58,18643,17689],{"class":92},[58,18645,17814],{"class":75},[58,18647,18648,18650,18652,18654,18656,18658,18660],{"class":60,"line":509},[58,18649,17784],{"class":379},[58,18651,18586],{"class":379},[58,18653,18375],{"class":75},[58,18655,17901],{"class":379},[58,18657,17686],{"class":75},[58,18659,17689],{"class":92},[58,18661,17829],{"class":75},[175,18663,18664],{},"使用封装的类",[48,18666,18668],{"className":781,"code":18667,"language":783,"meta":53,"style":53},"#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",[55,18669,18670,18676,18686,18692,18698,18722,18726,18752,18778,18802,18816,18820,18832,18836,18840,18844,18856,18860,18864,18872,18876,18880,18884,18888,18892,18902,18908,18916,18924,18934,18940,18952,18960,18968,18978,18984,18996,19000,19008,19014],{"__ignoreMap":53},[58,18671,18672,18674],{"class":60,"line":61},[58,18673,2596],{"class":92},[58,18675,2599],{"class":386},[58,18677,18678,18680,18682,18684],{"class":60,"line":68},[58,18679,2604],{"class":92},[58,18681,2607],{"class":92},[58,18683,2610],{"class":379},[58,18685,102],{"class":75},[58,18687,18688,18690],{"class":60,"line":79},[58,18689,2596],{"class":92},[58,18691,18579],{"class":386},[58,18693,18694,18696],{"class":60,"line":105},[58,18695,2596],{"class":92},[58,18697,18360],{"class":386},[58,18699,18700,18702,18704,18706,18708,18710,18712,18714,18716,18718,18720],{"class":60,"line":627},[58,18701,6010],{"class":92},[58,18703,17864],{"class":379},[58,18705,793],{"class":75},[58,18707,17869],{"class":379},[58,18709,11229],{"class":92},[58,18711,1074],{"class":5862},[58,18713,1164],{"class":75},[58,18715,17784],{"class":379},[58,18717,11229],{"class":92},[58,18719,175],{"class":5862},[58,18721,799],{"class":75},[58,18723,18724],{"class":60,"line":509},[58,18725,2195],{"class":75},[58,18727,18728,18730,18732,18734,18736,18738,18740,18742,18744,18746,18748,18750],{"class":60,"line":559},[58,18729,15382],{"class":92},[58,18731,17894],{"class":75},[58,18733,383],{"class":92},[58,18735,16985],{"class":75},[58,18737,17901],{"class":379},[58,18739,17904],{"class":75},[58,18741,17907],{"class":379},[58,18743,13694],{"class":75},[58,18745,1318],{"class":92},[58,18747,16531],{"class":75},[58,18749,17907],{"class":379},[58,18751,6282],{"class":75},[58,18753,18754,18756,18758,18760,18762,18764,18766,18768,18770,18772,18774,18776],{"class":60,"line":654},[58,18755,15382],{"class":92},[58,18757,17924],{"class":75},[58,18759,383],{"class":92},[58,18761,16985],{"class":75},[58,18763,17901],{"class":379},[58,18765,17904],{"class":75},[58,18767,17935],{"class":379},[58,18769,13694],{"class":75},[58,18771,1318],{"class":92},[58,18773,16531],{"class":75},[58,18775,17935],{"class":379},[58,18777,6282],{"class":75},[58,18779,18780,18782,18784,18786,18788,18790,18792,18794,18796,18798,18800],{"class":60,"line":671},[58,18781,15382],{"class":92},[58,18783,17952],{"class":75},[58,18785,383],{"class":92},[58,18787,17957],{"class":379},[58,18789,17960],{"class":75},[58,18791,1241],{"class":92},[58,18793,17894],{"class":75},[58,18795,1267],{"class":92},[58,18797,17924],{"class":75},[58,18799,1241],{"class":92},[58,18801,17973],{"class":75},[58,18803,18804,18806,18808,18810,18812,18814],{"class":60,"line":677},[58,18805,3747],{"class":92},[58,18807,17980],{"class":75},[58,18809,373],{"class":92},[58,18811,16985],{"class":75},[58,18813,17987],{"class":379},[58,18815,17990],{"class":75},[58,18817,18818],{"class":60,"line":2260},[58,18819,2676],{"class":75},[58,18821,18822,18824,18826,18828,18830],{"class":60,"line":694},[58,18823,10314],{"class":75},[58,18825,1827],{"class":92},[58,18827,18003],{"class":386},[58,18829,2094],{"class":92},[58,18831,9486],{"class":75},[58,18833,18834],{"class":60,"line":2270},[58,18835,2833],{"class":75},[58,18837,18838],{"class":60,"line":2275},[58,18839,17466],{"class":92},[58,18841,18842],{"class":60,"line":2289},[58,18843,2676],{"class":75},[58,18845,18846,18848,18850,18852,18854],{"class":60,"line":2294},[58,18847,10314],{"class":75},[58,18849,1827],{"class":92},[58,18851,18028],{"class":386},[58,18853,2094],{"class":92},[58,18855,9486],{"class":75},[58,18857,18858],{"class":60,"line":2300},[58,18859,2833],{"class":75},[58,18861,18862],{"class":60,"line":2321},[58,18863,108],{"class":75},[58,18865,18866,18868,18870],{"class":60,"line":2326},[58,18867,796],{"class":92},[58,18869,2619],{"class":379},[58,18871,2622],{"class":75},[58,18873,18874],{"class":60,"line":2340},[58,18875,2195],{"class":75},[58,18877,18878],{"class":60,"line":2345},[58,18879,15697],{"class":64},[58,18881,18882],{"class":60,"line":2374},[58,18883,15444],{"class":75},[58,18885,18886],{"class":60,"line":2379},[58,18887,18065],{"class":75},[58,18889,18890],{"class":60,"line":2396},[58,18891,17637],{"class":64},[58,18893,18894,18896,18898,18900],{"class":60,"line":2401},[58,18895,2200],{"class":75},[58,18897,1827],{"class":92},[58,18899,18078],{"class":386},[58,18901,102],{"class":75},[58,18903,18904,18906],{"class":60,"line":2406},[58,18905,15382],{"class":92},[58,18907,18087],{"class":75},[58,18909,18910,18912,18914],{"class":60,"line":2411},[58,18911,2658],{"class":75},[58,18913,2079],{"class":92},[58,18915,18096],{"class":75},[58,18917,18918,18920,18922],{"class":60,"line":2425},[58,18919,17238],{"class":75},[58,18921,18103],{"class":379},[58,18923,18106],{"class":75},[58,18925,18926,18928,18930,18932],{"class":60,"line":2430},[58,18927,2200],{"class":75},[58,18929,1827],{"class":92},[58,18931,18115],{"class":386},[58,18933,102],{"class":75},[58,18935,18936,18938],{"class":60,"line":3223},[58,18937,15382],{"class":92},[58,18939,18124],{"class":75},[58,18941,18942,18944,18946,18948,18950],{"class":60,"line":3237},[58,18943,2658],{"class":75},[58,18945,2079],{"class":92},[58,18947,1605],{"class":75},[58,18949,2079],{"class":92},[58,18951,18137],{"class":75},[58,18953,18954,18956,18958],{"class":60,"line":3245},[58,18955,18142],{"class":75},[58,18957,18145],{"class":379},[58,18959,18148],{"class":75},[58,18961,18962,18964,18966],{"class":60,"line":3250},[58,18963,17238],{"class":75},[58,18965,18155],{"class":379},[58,18967,18158],{"class":75},[58,18969,18970,18972,18974,18976],{"class":60,"line":3256},[58,18971,2200],{"class":75},[58,18973,1827],{"class":92},[58,18975,18167],{"class":386},[58,18977,102],{"class":75},[58,18979,18980,18982],{"class":60,"line":3262},[58,18981,15382],{"class":92},[58,18983,18176],{"class":75},[58,18985,18986,18988,18990,18992,18994],{"class":60,"line":3267},[58,18987,2658],{"class":75},[58,18989,2079],{"class":92},[58,18991,18185],{"class":75},[58,18993,2079],{"class":92},[58,18995,18190],{"class":75},[58,18997,18998],{"class":60,"line":8594},[58,18999,18195],{"class":75},[58,19001,19002,19004,19006],{"class":60,"line":8618},[58,19003,18200],{"class":75},[58,19005,18145],{"class":379},[58,19007,18205],{"class":75},[58,19009,19010,19012],{"class":60,"line":8623},[58,19011,18210],{"class":379},[58,19013,18213],{"class":75},[58,19015,19016],{"class":60,"line":8629},[58,19017,108],{"class":75},[14,19019,19021],{"id":19020},"_82对象的初始化清理","8.2对象的初始化清理",[124,19023,19024,19027],{},[22,19025,19026],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[22,19028,19029],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[114,19031,19033],{"id":19032},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[175,19035,19036,19037,19040],{},"对象的",[25,19038,19039],{},"初始化和清理","也是两个非常重要的安全问题",[175,19042,19043],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[175,19045,19046],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[175,19048,19049,19050,19053,19054,19057],{},"c++利用了",[25,19051,19052],{},"构造函数","和",[25,19055,19056],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[175,19059,19060,19061],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[25,19062,19063],{},"我们不提供构造和析构，编译器会提供",[175,19065,19066],{},[25,19067,19068],{},"编译器提供的构造函数和析构函数是空实现。",[124,19070,19071,19074],{},[22,19072,19073],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[22,19075,19076,19077,19080],{},"析构函数：主要作用在于对象",[25,19078,19079],{},"销毁前","系统自动调用，执行一些清理工作。",[175,19082,19083,19086],{},[25,19084,19085],{},"构造函数语法：",[55,19087,19088],{},"类名(){}",[19,19090,19091,19094,19097,19100,19103],{},[22,19092,19093],{},"构造函数，没有返回值也不写void",[22,19095,19096],{},"函数名称与类名相同",[22,19098,19099],{},"构造函数可以有参数，因此可以发生重载",[22,19101,19102],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[22,19104,19105,19106,1215],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[55,19107,19108],{},"Person(){}",[175,19110,19111,14439,19114],{},[25,19112,19113],{},"析构函数语法：",[55,19115,19116],{},"~类名(){}",[19,19118,19119,19122,19125,19131],{},[22,19120,19121],{},"析构函数，没有返回值也不写void",[22,19123,19124],{},"函数名称与类名相同,在名称前加上符号  ~",[22,19126,19127,19128],{},"析构函数不可以有参数，因此",[25,19129,19130],{},"不可以发生重载",[22,19132,19133],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[48,19135,19137],{"className":781,"code":19136,"language":783,"meta":53,"style":53},"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",[55,19138,19139,19145,19149,19153,19158,19165,19169,19182,19186,19191,19198,19202,19215,19219,19223,19227,19231,19239,19243,19251,19255,19259,19267,19271,19276,19280,19287,19291,19304,19308,19316],{"__ignoreMap":53},[58,19140,19141,19143],{"class":60,"line":61},[58,19142,15338],{"class":92},[58,19144,15815],{"class":379},[58,19146,19147],{"class":60,"line":68},[58,19148,2195],{"class":75},[58,19150,19151],{"class":60,"line":79},[58,19152,15360],{"class":92},[58,19154,19155],{"class":60,"line":105},[58,19156,19157],{"class":64},"    \u002F\u002F构造函数\n",[58,19159,19160,19163],{"class":60,"line":627},[58,19161,19162],{"class":379},"    Person",[58,19164,2622],{"class":75},[58,19166,19167],{"class":60,"line":509},[58,19168,2676],{"class":75},[58,19170,19171,19173,19175,19178,19180],{"class":60,"line":559},[58,19172,10314],{"class":75},[58,19174,1827],{"class":92},[58,19176,19177],{"class":386}," \"Person的构造函数调用\"",[58,19179,2094],{"class":92},[58,19181,9486],{"class":75},[58,19183,19184],{"class":60,"line":654},[58,19185,2833],{"class":75},[58,19187,19188],{"class":60,"line":671},[58,19189,19190],{"class":64},"    \u002F\u002F析构函数\n",[58,19192,19193,19196],{"class":60,"line":677},[58,19194,19195],{"class":379},"    ~Person",[58,19197,2622],{"class":75},[58,19199,19200],{"class":60,"line":2260},[58,19201,2676],{"class":75},[58,19203,19204,19206,19208,19211,19213],{"class":60,"line":694},[58,19205,10314],{"class":75},[58,19207,1827],{"class":92},[58,19209,19210],{"class":386}," \"Person的析构函数调用\"",[58,19212,2094],{"class":92},[58,19214,9486],{"class":75},[58,19216,19217],{"class":60,"line":2270},[58,19218,2833],{"class":75},[58,19220,19221],{"class":60,"line":2275},[58,19222,3046],{"emptyLinePlaceholder":720},[58,19224,19225],{"class":60,"line":2289},[58,19226,4641],{"class":75},[58,19228,19229],{"class":60,"line":2294},[58,19230,3046],{"emptyLinePlaceholder":720},[58,19232,19233,19235,19237],{"class":60,"line":2300},[58,19234,6010],{"class":92},[58,19236,6234],{"class":379},[58,19238,2622],{"class":75},[58,19240,19241],{"class":60,"line":2321},[58,19242,2195],{"class":75},[58,19244,19245,19248],{"class":60,"line":2326},[58,19246,19247],{"class":75},"    Person p;",[58,19249,19250],{"class":64},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[58,19252,19253],{"class":60,"line":2340},[58,19254,108],{"class":75},[58,19256,19257],{"class":60,"line":2345},[58,19258,3046],{"emptyLinePlaceholder":720},[58,19260,19261,19263,19265],{"class":60,"line":2374},[58,19262,796],{"class":92},[58,19264,2619],{"class":379},[58,19266,11498],{"class":75},[58,19268,19269],{"class":60,"line":2379},[58,19270,13854],{"class":75},[58,19272,19273],{"class":60,"line":2396},[58,19274,19275],{"class":64},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[58,19277,19278],{"class":60,"line":2401},[58,19279,3046],{"emptyLinePlaceholder":720},[58,19281,19282,19284],{"class":60,"line":2406},[58,19283,19247],{"class":75},[58,19285,19286],{"class":64},"\u002F\u002F只有构造函数\n",[58,19288,19289],{"class":60,"line":2411},[58,19290,3046],{"emptyLinePlaceholder":720},[58,19292,19293,19295,19297,19299,19301],{"class":60,"line":2425},[58,19294,2949],{"class":379},[58,19296,793],{"class":75},[58,19298,2954],{"class":386},[58,19300,6612],{"class":75},[58,19302,19303],{"class":64},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[58,19305,19306],{"class":60,"line":2430},[58,19307,3046],{"emptyLinePlaceholder":720},[58,19309,19310,19312,19314],{"class":60,"line":3223},[58,19311,4736],{"class":92},[58,19313,4739],{"class":82},[58,19315,102],{"class":75},[58,19317,19318],{"class":60,"line":3237},[58,19319,108],{"class":75},[175,19321,19322],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[114,19324,19326],{"id":19325},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[175,19328,19329],{},"两种分类方式：",[175,19331,19332],{},"​\t按参数分为： 有参构造和无参构造",[175,19334,19335],{},"​\t按类型分为： 普通构造和拷贝构造",[175,19337,19338],{},"三种调用方式：",[175,19340,19341],{},"​\t括号法",[175,19343,19344],{},"​\t显示法",[175,19346,19347],{},"​\t隐式转换法",[48,19349,19351],{"className":781,"code":19350,"language":783,"meta":53,"style":53},"#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",[55,19352,19353,19359,19369,19374,19379,19384,19389,19393,19401,19405,19409,19413,19419,19423,19436,19440,19452,19456,19465,19478,19482,19486,19492,19496,19509,19513,19518,19534,19538,19543,19552,19565,19569,19575,19579,19584,19592,19596,19601,19605,19613,19617,19622,19627,19632,19637,19642,19646,19651,19656,19661,19666,19670,19675,19680,19696,19708,19713,19717,19722,19727,19732,19736,19741,19755,19768,19772,19780,19784,19790,19796,19804],{"__ignoreMap":53},[58,19354,19355,19357],{"class":60,"line":61},[58,19356,2596],{"class":92},[58,19358,2599],{"class":386},[58,19360,19361,19363,19365,19367],{"class":60,"line":68},[58,19362,2604],{"class":92},[58,19364,2607],{"class":92},[58,19366,2610],{"class":379},[58,19368,102],{"class":75},[58,19370,19371],{"class":60,"line":79},[58,19372,19373],{"class":64},"\u002F\u002F1.构造函数的分类及调用\n",[58,19375,19376],{"class":60,"line":105},[58,19377,19378],{"class":64},"\u002F\u002F分类\n",[58,19380,19381],{"class":60,"line":627},[58,19382,19383],{"class":64},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[58,19385,19386],{"class":60,"line":509},[58,19387,19388],{"class":64},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[58,19390,19391],{"class":60,"line":559},[58,19392,3046],{"emptyLinePlaceholder":720},[58,19394,19395,19397,19399],{"class":60,"line":654},[58,19396,15338],{"class":92},[58,19398,16213],{"class":379},[58,19400,3320],{"class":75},[58,19402,19403],{"class":60,"line":671},[58,19404,2195],{"class":75},[58,19406,19407],{"class":60,"line":677},[58,19408,15360],{"class":92},[58,19410,19411],{"class":60,"line":2260},[58,19412,19157],{"class":64},[58,19414,19415,19417],{"class":60,"line":694},[58,19416,19162],{"class":379},[58,19418,2622],{"class":75},[58,19420,19421],{"class":60,"line":2270},[58,19422,2676],{"class":75},[58,19424,19425,19427,19429,19432,19434],{"class":60,"line":2275},[58,19426,4097],{"class":75},[58,19428,1827],{"class":92},[58,19430,19431],{"class":386},"\"Person构造函数无参构造\"",[58,19433,1827],{"class":92},[58,19435,1849],{"class":75},[58,19437,19438],{"class":60,"line":2289},[58,19439,2833],{"class":75},[58,19441,19442,19444,19446,19448,19450],{"class":60,"line":2294},[58,19443,19162],{"class":379},[58,19445,793],{"class":75},[58,19447,796],{"class":92},[58,19449,2048],{"class":5862},[58,19451,799],{"class":75},[58,19453,19454],{"class":60,"line":2300},[58,19455,2676],{"class":75},[58,19457,19458,19461,19463],{"class":60,"line":2321},[58,19459,19460],{"class":75},"        age",[58,19462,383],{"class":92},[58,19464,6843],{"class":75},[58,19466,19467,19469,19471,19474,19476],{"class":60,"line":2326},[58,19468,4097],{"class":75},[58,19470,1827],{"class":92},[58,19472,19473],{"class":386},"\"Person构造函数有参构造\"",[58,19475,1827],{"class":92},[58,19477,1849],{"class":75},[58,19479,19480],{"class":60,"line":2340},[58,19481,2833],{"class":75},[58,19483,19484],{"class":60,"line":2345},[58,19485,19190],{"class":64},[58,19487,19488,19490],{"class":60,"line":2374},[58,19489,19195],{"class":379},[58,19491,2622],{"class":75},[58,19493,19494],{"class":60,"line":2379},[58,19495,2676],{"class":75},[58,19497,19498,19500,19502,19505,19507],{"class":60,"line":2396},[58,19499,4097],{"class":75},[58,19501,1827],{"class":92},[58,19503,19504],{"class":386},"\"Person析构函数被调用\"",[58,19506,1827],{"class":92},[58,19508,1849],{"class":75},[58,19510,19511],{"class":60,"line":2401},[58,19512,2833],{"class":75},[58,19514,19515],{"class":60,"line":2406},[58,19516,19517],{"class":64},"    \u002F\u002F拷贝构造函数\n",[58,19519,19520,19522,19524,19526,19528,19530,19532],{"class":60,"line":2411},[58,19521,19162],{"class":379},[58,19523,793],{"class":75},[58,19525,7438],{"class":92},[58,19527,16213],{"class":379},[58,19529,11229],{"class":92},[58,19531,175],{"class":5862},[58,19533,799],{"class":75},[58,19535,19536],{"class":60,"line":2425},[58,19537,2676],{"class":75},[58,19539,19540],{"class":60,"line":2430},[58,19541,19542],{"class":64},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[58,19544,19545,19547,19549],{"class":60,"line":3223},[58,19546,19460],{"class":75},[58,19548,383],{"class":92},[58,19550,19551],{"class":75},"p.age;\n",[58,19553,19554,19556,19558,19561,19563],{"class":60,"line":3237},[58,19555,4097],{"class":75},[58,19557,1827],{"class":92},[58,19559,19560],{"class":386},"\"Person拷贝构造函数被调用\"",[58,19562,1827],{"class":92},[58,19564,1849],{"class":75},[58,19566,19567],{"class":60,"line":3245},[58,19568,2833],{"class":75},[58,19570,19571,19573],{"class":60,"line":3250},[58,19572,2631],{"class":92},[58,19574,8443],{"class":75},[58,19576,19577],{"class":60,"line":3256},[58,19578,4641],{"class":75},[58,19580,19581],{"class":60,"line":3262},[58,19582,19583],{"class":64},"\u002F\u002F调用\n",[58,19585,19586,19588,19590],{"class":60,"line":3267},[58,19587,6010],{"class":92},[58,19589,6234],{"class":379},[58,19591,2622],{"class":75},[58,19593,19594],{"class":60,"line":8594},[58,19595,2195],{"class":75},[58,19597,19598],{"class":60,"line":8618},[58,19599,19600],{"class":64},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[58,19602,19603],{"class":60,"line":8623},[58,19604,108],{"class":75},[58,19606,19607,19609,19611],{"class":60,"line":8629},[58,19608,6010],{"class":92},[58,19610,6303],{"class":379},[58,19612,2622],{"class":75},[58,19614,19615],{"class":60,"line":8656},[58,19616,2195],{"class":75},[58,19618,19619],{"class":60,"line":8661},[58,19620,19621],{"class":64},"    \u002F\u002F1.括号法\n",[58,19623,19624],{"class":60,"line":8667},[58,19625,19626],{"class":64},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[58,19628,19629],{"class":60,"line":8679},[58,19630,19631],{"class":64},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[58,19633,19634],{"class":60,"line":8691},[58,19635,19636],{"class":64},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[58,19638,19639],{"class":60,"line":8703},[58,19640,19641],{"class":64},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[58,19643,19644],{"class":60,"line":10361},[58,19645,3046],{"emptyLinePlaceholder":720},[58,19647,19648],{"class":60,"line":10386},[58,19649,19650],{"class":64},"    \u002F\u002F注意事项\n",[58,19652,19653],{"class":60,"line":10409},[58,19654,19655],{"class":64},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[58,19657,19658],{"class":60,"line":10433},[58,19659,19660],{"class":64},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[58,19662,19663],{"class":60,"line":10438},[58,19664,19665],{"class":64},"    \u002F\u002F Person p4();\n",[58,19667,19668],{"class":60,"line":10443},[58,19669,3046],{"emptyLinePlaceholder":720},[58,19671,19672],{"class":60,"line":10448},[58,19673,19674],{"class":64},"    \u002F\u002F2.显示法\n",[58,19676,19677],{"class":60,"line":10457},[58,19678,19679],{"class":75},"    Person p1;\n",[58,19681,19682,19685,19687,19690,19692,19694],{"class":60,"line":10462},[58,19683,19684],{"class":75},"    Person p2",[58,19686,383],{"class":92},[58,19688,19689],{"class":379},"Person",[58,19691,793],{"class":75},[58,19693,1232],{"class":82},[58,19695,3365],{"class":75},[58,19697,19698,19701,19703,19705],{"class":60,"line":10468},[58,19699,19700],{"class":75},"    Person p3",[58,19702,383],{"class":92},[58,19704,19689],{"class":379},[58,19706,19707],{"class":75},"(p2);\n",[58,19709,19710],{"class":60,"line":10489},[58,19711,19712],{"class":64},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[58,19714,19715],{"class":60,"line":10495},[58,19716,3046],{"emptyLinePlaceholder":720},[58,19718,19719],{"class":60,"line":10509},[58,19720,19721],{"class":64},"    \u002F\u002F 注意事项2\n",[58,19723,19724],{"class":60,"line":10515},[58,19725,19726],{"class":64},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[58,19728,19729],{"class":60,"line":10542},[58,19730,19731],{"class":64},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[58,19733,19734],{"class":60,"line":10551},[58,19735,3046],{"emptyLinePlaceholder":720},[58,19737,19738],{"class":60,"line":10557},[58,19739,19740],{"class":64},"    \u002F\u002F3.隐士转换法\n",[58,19742,19743,19746,19748,19750,19752],{"class":60,"line":10565},[58,19744,19745],{"class":75},"    Person p4",[58,19747,383],{"class":92},[58,19749,1232],{"class":82},[58,19751,846],{"class":75},[58,19753,19754],{"class":64},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[58,19756,19757,19760,19762,19765],{"class":60,"line":10570},[58,19758,19759],{"class":75},"    Person p5",[58,19761,383],{"class":92},[58,19763,19764],{"class":75},"p4;",[58,19766,19767],{"class":64}," \u002F\u002F 这里会调用拷贝构造函数\n",[58,19769,19770],{"class":60,"line":17247},[58,19771,108],{"class":75},[58,19773,19774,19776,19778],{"class":60,"line":17253},[58,19775,796],{"class":92},[58,19777,2619],{"class":379},[58,19779,2622],{"class":75},[58,19781,19782],{"class":60,"line":17276},[58,19783,2195],{"class":75},[58,19785,19786,19788],{"class":60,"line":17282},[58,19787,6279],{"class":379},[58,19789,6282],{"class":75},[58,19791,19792,19794],{"class":60,"line":17305},[58,19793,6348],{"class":379},[58,19795,6282],{"class":75},[58,19797,19798,19800,19802],{"class":60,"line":17319},[58,19799,4736],{"class":92},[58,19801,4739],{"class":82},[58,19803,102],{"class":75},[58,19805,19806],{"class":60,"line":17339},[58,19807,108],{"class":75},[175,19809,19810,19813],{},[25,19811,19812],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[114,19815,19817],{"id":19816},"_823拷贝构造函数","8.2.3拷贝构造函数",[175,19819,19820],{},"C++中拷贝构造函数调用时机通常有三种情况",[124,19822,19823,19826,19829],{},[22,19824,19825],{},"使用一个已经创建完毕的对象来初始化一个新对象",[22,19827,19828],{},"值传递的方式给函数参数传值",[22,19830,19831],{},"以值方式返回局部对象",[48,19833,19835],{"className":781,"code":19834,"language":783,"meta":53,"style":53},"#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",[55,19836,19837,19843,19853,19857,19862,19866,19871,19876,19881,19887,19891,19895,19901,19905,19918,19922,19927,19939,19943,19951,19964,19968,19972,19988,19992,20001,20014,20018,20024,20028,20040,20044,20050,20054,20058,20066,20070,20083,20091,20109,20113,20118,20123,20138,20142,20155,20159,20167,20171,20175,20183,20187,20192,20201,20205,20209,20234,20244,20248,20256,20260,20271,20296,20300,20304,20308,20316,20320,20325,20330,20337,20342,20347,20352,20357,20361,20366,20370,20375,20379,20384,20389,20393,20397,20402,20407,20415],{"__ignoreMap":53},[58,19838,19839,19841],{"class":60,"line":61},[58,19840,2596],{"class":92},[58,19842,2599],{"class":386},[58,19844,19845,19847,19849,19851],{"class":60,"line":68},[58,19846,2604],{"class":92},[58,19848,2607],{"class":92},[58,19850,2610],{"class":379},[58,19852,102],{"class":75},[58,19854,19855],{"class":60,"line":79},[58,19856,3046],{"emptyLinePlaceholder":720},[58,19858,19859],{"class":60,"line":105},[58,19860,19861],{"class":64},"\u002F\u002F拷贝构造函数调用时机\n",[58,19863,19864],{"class":60,"line":627},[58,19865,3046],{"emptyLinePlaceholder":720},[58,19867,19868],{"class":60,"line":509},[58,19869,19870],{"class":64},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[58,19872,19873],{"class":60,"line":559},[58,19874,19875],{"class":64},"\u002F\u002F2.值传递的方式给函数参数传值\n",[58,19877,19878],{"class":60,"line":654},[58,19879,19880],{"class":64},"\u002F\u002F3.以值方式返回局部对象\n",[58,19882,19883,19885],{"class":60,"line":671},[58,19884,15338],{"class":92},[58,19886,15815],{"class":379},[58,19888,19889],{"class":60,"line":677},[58,19890,2195],{"class":75},[58,19892,19893],{"class":60,"line":2260},[58,19894,15360],{"class":92},[58,19896,19897,19899],{"class":60,"line":694},[58,19898,19162],{"class":379},[58,19900,2622],{"class":75},[58,19902,19903],{"class":60,"line":2270},[58,19904,2676],{"class":75},[58,19906,19907,19909,19911,19914,19916],{"class":60,"line":2275},[58,19908,10314],{"class":75},[58,19910,1827],{"class":92},[58,19912,19913],{"class":386}," \"Person的默认构造函数调用\"",[58,19915,2094],{"class":92},[58,19917,9486],{"class":75},[58,19919,19920],{"class":60,"line":2289},[58,19921,2833],{"class":75},[58,19923,19924],{"class":60,"line":2294},[58,19925,19926],{"class":64},"    \u002F\u002F有参构造\n",[58,19928,19929,19931,19933,19935,19937],{"class":60,"line":2300},[58,19930,19162],{"class":379},[58,19932,793],{"class":75},[58,19934,796],{"class":92},[58,19936,16332],{"class":5862},[58,19938,799],{"class":75},[58,19940,19941],{"class":60,"line":2321},[58,19942,2676],{"class":75},[58,19944,19945,19947,19949],{"class":60,"line":2326},[58,19946,16386],{"class":75},[58,19948,383],{"class":92},[58,19950,8443],{"class":75},[58,19952,19953,19955,19957,19960,19962],{"class":60,"line":2340},[58,19954,10314],{"class":75},[58,19956,1827],{"class":92},[58,19958,19959],{"class":386}," \"Person的有参构造函数调用\"",[58,19961,2094],{"class":92},[58,19963,9486],{"class":75},[58,19965,19966],{"class":60,"line":2345},[58,19967,2833],{"class":75},[58,19969,19970],{"class":60,"line":2374},[58,19971,19517],{"class":64},[58,19973,19974,19976,19978,19980,19982,19984,19986],{"class":60,"line":2379},[58,19975,19162],{"class":379},[58,19977,793],{"class":75},[58,19979,7438],{"class":92},[58,19981,16213],{"class":379},[58,19983,11229],{"class":92},[58,19985,175],{"class":5862},[58,19987,799],{"class":75},[58,19989,19990],{"class":60,"line":2396},[58,19991,2676],{"class":75},[58,19993,19994,19996,19998],{"class":60,"line":2401},[58,19995,16386],{"class":75},[58,19997,383],{"class":92},[58,19999,20000],{"class":75}," p.m_Age;\n",[58,20002,20003,20005,20007,20010,20012],{"class":60,"line":2406},[58,20004,10314],{"class":75},[58,20006,1827],{"class":92},[58,20008,20009],{"class":386}," \"Person的拷贝构造函数调用\"",[58,20011,2094],{"class":92},[58,20013,9486],{"class":75},[58,20015,20016],{"class":60,"line":2411},[58,20017,2833],{"class":75},[58,20019,20020,20022],{"class":60,"line":2425},[58,20021,19195],{"class":379},[58,20023,2622],{"class":75},[58,20025,20026],{"class":60,"line":2430},[58,20027,2676],{"class":75},[58,20029,20030,20032,20034,20036,20038],{"class":60,"line":3223},[58,20031,10314],{"class":75},[58,20033,1827],{"class":92},[58,20035,19210],{"class":386},[58,20037,2094],{"class":92},[58,20039,9486],{"class":75},[58,20041,20042],{"class":60,"line":3237},[58,20043,2833],{"class":75},[58,20045,20046,20048],{"class":60,"line":3245},[58,20047,2631],{"class":92},[58,20049,16309],{"class":75},[58,20051,20052],{"class":60,"line":3250},[58,20053,4641],{"class":75},[58,20055,20056],{"class":60,"line":3256},[58,20057,19870],{"class":64},[58,20059,20060,20062,20064],{"class":60,"line":3262},[58,20061,6010],{"class":92},[58,20063,6234],{"class":379},[58,20065,2622],{"class":75},[58,20067,20068],{"class":60,"line":3267},[58,20069,2195],{"class":75},[58,20071,20072,20075,20077,20079,20081],{"class":60,"line":8594},[58,20073,20074],{"class":75},"    Person ",[58,20076,7776],{"class":379},[58,20078,793],{"class":75},[58,20080,1486],{"class":82},[58,20082,3365],{"class":75},[58,20084,20085,20087,20089],{"class":60,"line":8618},[58,20086,20074],{"class":75},[58,20088,7679],{"class":379},[58,20090,18158],{"class":75},[58,20092,20093,20095,20097,20100,20102,20105,20107],{"class":60,"line":8623},[58,20094,2200],{"class":75},[58,20096,1827],{"class":92},[58,20098,20099],{"class":386},"\"P2的年龄为：\"",[58,20101,1827],{"class":92},[58,20103,20104],{"class":75},"p2.m_Age",[58,20106,1827],{"class":92},[58,20108,1849],{"class":75},[58,20110,20111],{"class":60,"line":8629},[58,20112,108],{"class":75},[58,20114,20115],{"class":60,"line":8656},[58,20116,20117],{"class":64},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[58,20119,20120],{"class":60,"line":8661},[58,20121,20122],{"class":64},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[58,20124,20125,20127,20130,20132,20134,20136],{"class":60,"line":8667},[58,20126,6010],{"class":92},[58,20128,20129],{"class":379}," doWork",[58,20131,793],{"class":75},[58,20133,19689],{"class":379},[58,20135,7471],{"class":5862},[58,20137,799],{"class":75},[58,20139,20140],{"class":60,"line":8679},[58,20141,2195],{"class":75},[58,20143,20144,20146,20148,20151,20153],{"class":60,"line":8691},[58,20145,7175],{"class":75},[58,20147,1827],{"class":92},[58,20149,20150],{"class":386}," \"doWork函数调用\"",[58,20152,2094],{"class":92},[58,20154,9486],{"class":75},[58,20156,20157],{"class":60,"line":8703},[58,20158,108],{"class":75},[58,20160,20161,20163,20165],{"class":60,"line":10361},[58,20162,6010],{"class":92},[58,20164,6303],{"class":379},[58,20166,2622],{"class":75},[58,20168,20169],{"class":60,"line":10386},[58,20170,2195],{"class":75},[58,20172,20173],{"class":60,"line":10409},[58,20174,15957],{"class":75},[58,20176,20177,20180],{"class":60,"line":10433},[58,20178,20179],{"class":379},"    doWork",[58,20181,20182],{"class":75},"(p);\n",[58,20184,20185],{"class":60,"line":10438},[58,20186,108],{"class":75},[58,20188,20189],{"class":60,"line":10443},[58,20190,20191],{"class":64},"\u002F\u002F 3.以值方式返回局部对象\n",[58,20193,20194,20196,20199],{"class":60,"line":10448},[58,20195,19689],{"class":379},[58,20197,20198],{"class":379}," doWork2",[58,20200,2622],{"class":75},[58,20202,20203],{"class":60,"line":10457},[58,20204,2195],{"class":75},[58,20206,20207],{"class":60,"line":10462},[58,20208,19679],{"class":75},[58,20210,20211,20213,20215,20217,20219,20221,20223,20225,20227,20229,20231],{"class":60,"line":10468},[58,20212,2200],{"class":75},[58,20214,1827],{"class":92},[58,20216,793],{"class":75},[58,20218,796],{"class":92},[58,20220,7164],{"class":92},[58,20222,1215],{"class":75},[58,20224,1139],{"class":92},[58,20226,7776],{"class":75},[58,20228,1827],{"class":92},[58,20230,1892],{"class":75},[58,20232,20233],{"class":64},"\u002F\u002F打印p1的地址\n",[58,20235,20236,20238,20241],{"class":60,"line":10489},[58,20237,4736],{"class":92},[58,20239,20240],{"class":75}," p1;",[58,20242,20243],{"class":64},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[58,20245,20246],{"class":60,"line":10495},[58,20247,108],{"class":75},[58,20249,20250,20252,20254],{"class":60,"line":10509},[58,20251,6010],{"class":92},[58,20253,6375],{"class":379},[58,20255,2622],{"class":75},[58,20257,20258],{"class":60,"line":10515},[58,20259,2195],{"class":75},[58,20261,20262,20265,20267,20269],{"class":60,"line":10542},[58,20263,20264],{"class":75},"    Person p ",[58,20266,383],{"class":92},[58,20268,20198],{"class":379},[58,20270,6282],{"class":75},[58,20272,20273,20275,20277,20279,20281,20283,20285,20287,20289,20291,20293],{"class":60,"line":10551},[58,20274,2200],{"class":75},[58,20276,1827],{"class":92},[58,20278,793],{"class":75},[58,20280,796],{"class":92},[58,20282,7164],{"class":92},[58,20284,1215],{"class":75},[58,20286,1139],{"class":92},[58,20288,175],{"class":75},[58,20290,1827],{"class":92},[58,20292,1892],{"class":75},[58,20294,20295],{"class":64},"\u002F\u002F打印p的地址\n",[58,20297,20298],{"class":60,"line":10557},[58,20299,108],{"class":75},[58,20301,20302],{"class":60,"line":10565},[58,20303,3046],{"emptyLinePlaceholder":720},[58,20305,20306],{"class":60,"line":10570},[58,20307,3046],{"emptyLinePlaceholder":720},[58,20309,20310,20312,20314],{"class":60,"line":17247},[58,20311,796],{"class":92},[58,20313,2619],{"class":379},[58,20315,2622],{"class":75},[58,20317,20318],{"class":60,"line":17253},[58,20319,2195],{"class":75},[58,20321,20322],{"class":60,"line":17276},[58,20323,20324],{"class":64},"    \u002F\u002F test01();\n",[58,20326,20327],{"class":60,"line":17282},[58,20328,20329],{"class":64},"    \u002F\u002F test02();\n",[58,20331,20332,20335],{"class":60,"line":17305},[58,20333,20334],{"class":379},"    test03",[58,20336,6282],{"class":75},[58,20338,20339],{"class":60,"line":17319},[58,20340,20341],{"class":64},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[58,20343,20344],{"class":60,"line":17339},[58,20345,20346],{"class":64},"\u002F\u002F 输出结果如下：\n",[58,20348,20349],{"class":60,"line":17345},[58,20350,20351],{"class":64},"\u002F\u002F Person的默认构造函数调用\n",[58,20353,20354],{"class":60,"line":17356},[58,20355,20356],{"class":64},"\u002F\u002F 0x7fffffffceec\n",[58,20358,20359],{"class":60,"line":17379},[58,20360,20356],{"class":64},[58,20362,20363],{"class":60,"line":17401},[58,20364,20365],{"class":64},"\u002F\u002F Person的析构函数调用\n",[58,20367,20368],{"class":60,"line":17406},[58,20369,3046],{"emptyLinePlaceholder":720},[58,20371,20372],{"class":60,"line":17412},[58,20373,20374],{"class":64},"\u002F\u002F 之前的输出结果如下：\n",[58,20376,20377],{"class":60,"line":17426},[58,20378,20351],{"class":64},[58,20380,20381],{"class":60,"line":17439},[58,20382,20383],{"class":64},"\u002F\u002F 地址\n",[58,20385,20386],{"class":60,"line":17444},[58,20387,20388],{"class":64},"\u002F\u002F Person的拷贝构造函数调用\n",[58,20390,20391],{"class":60,"line":17458},[58,20392,20365],{"class":64},[58,20394,20395],{"class":60,"line":17463},[58,20396,20383],{"class":64},[58,20398,20399],{"class":60,"line":17469},[58,20400,20401],{"class":64},"\u002F\u002F (这两次输出的地址也是不同的) \n",[58,20403,20404],{"class":60,"line":17474},[58,20405,20406],{"class":64},"\u002F\u002F Person的析构函数调用     \n",[58,20408,20409,20411,20413],{"class":60,"line":17488},[58,20410,4736],{"class":92},[58,20412,4739],{"class":82},[58,20414,102],{"class":75},[58,20416,20417],{"class":60,"line":17493},[58,20418,108],{"class":75},[175,20420,20421],{},"简化版理解",[48,20423,20425],{"className":781,"code":20424,"language":783,"meta":53,"style":53},"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",[55,20426,20427,20435,20439,20445,20458,20469,20473,20485,20498,20506,20510,20526,20539,20548,20552,20557,20563,20576,20580,20584,20591,20595,20599,20604,20612,20616,20632,20645,20658,20662,20667,20675,20679,20683,20688,20693,20709,20717,20724,20730,20734,20738,20743,20751,20755,20759,20782,20789,20793,20797,20805,20809,20819,20841,20845,20849,20853,20861,20865,20870,20875,20881,20885,20895,20899,20907],{"__ignoreMap":53},[58,20428,20429,20431,20433],{"class":60,"line":61},[58,20430,15338],{"class":92},[58,20432,16213],{"class":379},[58,20434,76],{"class":75},[58,20436,20437],{"class":60,"line":68},[58,20438,15360],{"class":92},[58,20440,20441,20443],{"class":60,"line":79},[58,20442,19162],{"class":379},[58,20444,11498],{"class":75},[58,20446,20447,20449,20451,20454,20456],{"class":60,"line":105},[58,20448,10314],{"class":75},[58,20450,1827],{"class":92},[58,20452,20453],{"class":386}," \"无参构造函数!\"",[58,20455,2094],{"class":92},[58,20457,9486],{"class":75},[58,20459,20460,20463,20465,20467],{"class":60,"line":627},[58,20461,20462],{"class":75},"        mAge ",[58,20464,383],{"class":92},[58,20466,4739],{"class":82},[58,20468,102],{"class":75},[58,20470,20471],{"class":60,"line":509},[58,20472,2833],{"class":75},[58,20474,20475,20477,20479,20481,20483],{"class":60,"line":559},[58,20476,19162],{"class":379},[58,20478,793],{"class":75},[58,20480,796],{"class":92},[58,20482,16332],{"class":5862},[58,20484,13086],{"class":75},[58,20486,20487,20489,20491,20494,20496],{"class":60,"line":654},[58,20488,10314],{"class":75},[58,20490,1827],{"class":92},[58,20492,20493],{"class":386}," \"有参构造函数!\"",[58,20495,2094],{"class":92},[58,20497,9486],{"class":75},[58,20499,20500,20502,20504],{"class":60,"line":671},[58,20501,20462],{"class":75},[58,20503,383],{"class":92},[58,20505,8443],{"class":75},[58,20507,20508],{"class":60,"line":677},[58,20509,2833],{"class":75},[58,20511,20512,20514,20516,20518,20520,20522,20524],{"class":60,"line":2260},[58,20513,19162],{"class":379},[58,20515,793],{"class":75},[58,20517,7438],{"class":92},[58,20519,16213],{"class":379},[58,20521,1139],{"class":92},[58,20523,7471],{"class":5862},[58,20525,13086],{"class":75},[58,20527,20528,20530,20532,20535,20537],{"class":60,"line":694},[58,20529,10314],{"class":75},[58,20531,1827],{"class":92},[58,20533,20534],{"class":386}," \"拷贝构造函数!\"",[58,20536,2094],{"class":92},[58,20538,9486],{"class":75},[58,20540,20541,20543,20545],{"class":60,"line":2270},[58,20542,20462],{"class":75},[58,20544,383],{"class":92},[58,20546,20547],{"class":75}," p.mAge;\n",[58,20549,20550],{"class":60,"line":2275},[58,20551,2833],{"class":75},[58,20553,20554],{"class":60,"line":2289},[58,20555,20556],{"class":64},"    \u002F\u002F析构函数在释放内存之前调用\n",[58,20558,20559,20561],{"class":60,"line":2294},[58,20560,19195],{"class":379},[58,20562,11498],{"class":75},[58,20564,20565,20567,20569,20572,20574],{"class":60,"line":2300},[58,20566,10314],{"class":75},[58,20568,1827],{"class":92},[58,20570,20571],{"class":386}," \"析构函数!\"",[58,20573,2094],{"class":92},[58,20575,9486],{"class":75},[58,20577,20578],{"class":60,"line":2321},[58,20579,2833],{"class":75},[58,20581,20582],{"class":60,"line":2326},[58,20583,15360],{"class":92},[58,20585,20586,20588],{"class":60,"line":2340},[58,20587,2631],{"class":92},[58,20589,20590],{"class":75}," mAge;\n",[58,20592,20593],{"class":60,"line":2345},[58,20594,4641],{"class":75},[58,20596,20597],{"class":60,"line":2374},[58,20598,3046],{"emptyLinePlaceholder":720},[58,20600,20601],{"class":60,"line":2379},[58,20602,20603],{"class":64},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[58,20605,20606,20608,20610],{"class":60,"line":2396},[58,20607,6010],{"class":92},[58,20609,6234],{"class":379},[58,20611,11498],{"class":75},[58,20613,20614],{"class":60,"line":2401},[58,20615,3046],{"emptyLinePlaceholder":720},[58,20617,20618,20620,20623,20625,20627,20629],{"class":60,"line":2406},[58,20619,20074],{"class":75},[58,20621,20622],{"class":379},"man",[58,20624,793],{"class":75},[58,20626,1097],{"class":82},[58,20628,6612],{"class":75},[58,20630,20631],{"class":64}," \u002F\u002Fp对象已经创建完毕\n",[58,20633,20634,20636,20639,20642],{"class":60,"line":2411},[58,20635,20074],{"class":75},[58,20637,20638],{"class":379},"newman",[58,20640,20641],{"class":75},"(man);",[58,20643,20644],{"class":64}," \u002F\u002F调用拷贝构造函数\n",[58,20646,20647,20650,20652,20655],{"class":60,"line":2425},[58,20648,20649],{"class":75},"    Person newman2 ",[58,20651,383],{"class":92},[58,20653,20654],{"class":75}," man;",[58,20656,20657],{"class":64}," \u002F\u002F拷贝构造\n",[58,20659,20660],{"class":60,"line":2430},[58,20661,3046],{"emptyLinePlaceholder":720},[58,20663,20664],{"class":60,"line":3223},[58,20665,20666],{"class":64},"    \u002F\u002FPerson newman3;\n",[58,20668,20669,20672],{"class":60,"line":3237},[58,20670,20671],{"class":64},"    \u002F\u002Fnewman3 = man;",[58,20673,20674],{"class":64}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[58,20676,20677],{"class":60,"line":3245},[58,20678,108],{"class":75},[58,20680,20681],{"class":60,"line":3250},[58,20682,3046],{"emptyLinePlaceholder":720},[58,20684,20685],{"class":60,"line":3256},[58,20686,20687],{"class":64},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[58,20689,20690],{"class":60,"line":3262},[58,20691,20692],{"class":64},"\u002F\u002F相当于Person p1 = p;\n",[58,20694,20695,20697,20699,20701,20703,20706],{"class":60,"line":3267},[58,20696,6010],{"class":92},[58,20698,20129],{"class":379},[58,20700,793],{"class":75},[58,20702,19689],{"class":379},[58,20704,20705],{"class":5862}," p1",[58,20707,20708],{"class":75},") {}\n",[58,20710,20711,20713,20715],{"class":60,"line":8594},[58,20712,6010],{"class":92},[58,20714,6303],{"class":379},[58,20716,11498],{"class":75},[58,20718,20719,20721],{"class":60,"line":8618},[58,20720,19247],{"class":75},[58,20722,20723],{"class":64}," \u002F\u002F无参构造函数\n",[58,20725,20726,20728],{"class":60,"line":8623},[58,20727,20179],{"class":379},[58,20729,20182],{"class":75},[58,20731,20732],{"class":60,"line":8629},[58,20733,108],{"class":75},[58,20735,20736],{"class":60,"line":8656},[58,20737,3046],{"emptyLinePlaceholder":720},[58,20739,20740],{"class":60,"line":8661},[58,20741,20742],{"class":64},"\u002F\u002F3. 以值方式返回局部对象\n",[58,20744,20745,20747,20749],{"class":60,"line":8667},[58,20746,19689],{"class":379},[58,20748,20198],{"class":379},[58,20750,2622],{"class":75},[58,20752,20753],{"class":60,"line":8679},[58,20754,2195],{"class":75},[58,20756,20757],{"class":60,"line":8691},[58,20758,19679],{"class":75},[58,20760,20761,20763,20765,20767,20769,20771,20773,20775,20778,20780],{"class":60,"line":8703},[58,20762,7175],{"class":75},[58,20764,1827],{"class":92},[58,20766,2305],{"class":75},[58,20768,796],{"class":92},[58,20770,7164],{"class":92},[58,20772,1215],{"class":75},[58,20774,1139],{"class":92},[58,20776,20777],{"class":75},"p1 ",[58,20779,1827],{"class":92},[58,20781,9486],{"class":75},[58,20783,20784,20786],{"class":60,"line":10361},[58,20785,4736],{"class":92},[58,20787,20788],{"class":75}," p1;\n",[58,20790,20791],{"class":60,"line":10386},[58,20792,108],{"class":75},[58,20794,20795],{"class":60,"line":10409},[58,20796,3046],{"emptyLinePlaceholder":720},[58,20798,20799,20801,20803],{"class":60,"line":10433},[58,20800,6010],{"class":92},[58,20802,6375],{"class":379},[58,20804,2622],{"class":75},[58,20806,20807],{"class":60,"line":10438},[58,20808,2195],{"class":75},[58,20810,20811,20813,20815,20817],{"class":60,"line":10443},[58,20812,20264],{"class":75},[58,20814,383],{"class":92},[58,20816,20198],{"class":379},[58,20818,6282],{"class":75},[58,20820,20821,20823,20825,20827,20829,20831,20833,20835,20837,20839],{"class":60,"line":10448},[58,20822,7175],{"class":75},[58,20824,1827],{"class":92},[58,20826,2305],{"class":75},[58,20828,796],{"class":92},[58,20830,7164],{"class":92},[58,20832,1215],{"class":75},[58,20834,1139],{"class":92},[58,20836,12093],{"class":75},[58,20838,1827],{"class":92},[58,20840,9486],{"class":75},[58,20842,20843],{"class":60,"line":10457},[58,20844,108],{"class":75},[58,20846,20847],{"class":60,"line":10462},[58,20848,3046],{"emptyLinePlaceholder":720},[58,20850,20851],{"class":60,"line":10468},[58,20852,3046],{"emptyLinePlaceholder":720},[58,20854,20855,20857,20859],{"class":60,"line":10489},[58,20856,796],{"class":92},[58,20858,2619],{"class":379},[58,20860,11498],{"class":75},[58,20862,20863],{"class":60,"line":10495},[58,20864,3046],{"emptyLinePlaceholder":720},[58,20866,20867],{"class":60,"line":10509},[58,20868,20869],{"class":64},"    \u002F\u002Ftest01();\n",[58,20871,20872],{"class":60,"line":10515},[58,20873,20874],{"class":64},"    \u002F\u002Ftest02();\n",[58,20876,20877,20879],{"class":60,"line":10542},[58,20878,20334],{"class":379},[58,20880,6282],{"class":75},[58,20882,20883],{"class":60,"line":10551},[58,20884,3046],{"emptyLinePlaceholder":720},[58,20886,20887,20889,20891,20893],{"class":60,"line":10557},[58,20888,2949],{"class":379},[58,20890,793],{"class":75},[58,20892,2954],{"class":386},[58,20894,3365],{"class":75},[58,20896,20897],{"class":60,"line":10565},[58,20898,3046],{"emptyLinePlaceholder":720},[58,20900,20901,20903,20905],{"class":60,"line":10570},[58,20902,4736],{"class":92},[58,20904,4739],{"class":82},[58,20906,102],{"class":75},[58,20908,20909],{"class":60,"line":17247},[58,20910,108],{"class":75},[114,20912,20914],{"id":20913},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[175,20916,20917],{},"默认情况下，c++编译器至少给一个类添加3个函数",[175,20919,20920],{},"1．默认构造函数(无参，函数体为空)",[175,20922,20923],{},"2．默认析构函数(无参，函数体为空)",[175,20925,20926],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[175,20928,20929],{},"构造函数调用规则如下：",[124,20931,20932,20935],{},[22,20933,20934],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[22,20936,20937],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[48,20939,20941],{"className":781,"code":20940,"language":783,"meta":53,"style":53},"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",[55,20942,20943,20951,20955,20960,20966,20978,20982,20987,20999,21008,21020,21024,21028,21044,21053,21065,21069,21073,21079,21091,21095,21099,21105,21109,21113,21121,21125,21137,21142,21150,21154,21172,21176,21180,21188,21192,21197,21205,21220,21233,21237,21242,21249,21265,21278,21282,21286,21294,21298,21304,21308,21318,21322,21330],{"__ignoreMap":53},[58,20944,20945,20947,20949],{"class":60,"line":61},[58,20946,15338],{"class":92},[58,20948,16213],{"class":379},[58,20950,76],{"class":75},[58,20952,20953],{"class":60,"line":68},[58,20954,15360],{"class":92},[58,20956,20957],{"class":60,"line":79},[58,20958,20959],{"class":64},"    \u002F\u002F无参（默认）构造函数\n",[58,20961,20962,20964],{"class":60,"line":105},[58,20963,19162],{"class":379},[58,20965,11498],{"class":75},[58,20967,20968,20970,20972,20974,20976],{"class":60,"line":627},[58,20969,10314],{"class":75},[58,20971,1827],{"class":92},[58,20973,20453],{"class":386},[58,20975,2094],{"class":92},[58,20977,9486],{"class":75},[58,20979,20980],{"class":60,"line":509},[58,20981,2833],{"class":75},[58,20983,20984],{"class":60,"line":559},[58,20985,20986],{"class":64},"    \u002F\u002F有参构造函数\n",[58,20988,20989,20991,20993,20995,20997],{"class":60,"line":654},[58,20990,19162],{"class":379},[58,20992,793],{"class":75},[58,20994,796],{"class":92},[58,20996,2048],{"class":5862},[58,20998,13086],{"class":75},[58,21000,21001,21004,21006],{"class":60,"line":671},[58,21002,21003],{"class":75},"        age ",[58,21005,383],{"class":92},[58,21007,2082],{"class":75},[58,21009,21010,21012,21014,21016,21018],{"class":60,"line":677},[58,21011,10314],{"class":75},[58,21013,1827],{"class":92},[58,21015,20493],{"class":386},[58,21017,2094],{"class":92},[58,21019,9486],{"class":75},[58,21021,21022],{"class":60,"line":2260},[58,21023,2833],{"class":75},[58,21025,21026],{"class":60,"line":694},[58,21027,19517],{"class":64},[58,21029,21030,21032,21034,21036,21038,21040,21042],{"class":60,"line":2270},[58,21031,19162],{"class":379},[58,21033,793],{"class":75},[58,21035,7438],{"class":92},[58,21037,16213],{"class":379},[58,21039,1139],{"class":92},[58,21041,7471],{"class":5862},[58,21043,13086],{"class":75},[58,21045,21046,21048,21050],{"class":60,"line":2275},[58,21047,21003],{"class":75},[58,21049,383],{"class":92},[58,21051,21052],{"class":75}," p.age;\n",[58,21054,21055,21057,21059,21061,21063],{"class":60,"line":2289},[58,21056,10314],{"class":75},[58,21058,1827],{"class":92},[58,21060,20534],{"class":386},[58,21062,2094],{"class":92},[58,21064,9486],{"class":75},[58,21066,21067],{"class":60,"line":2294},[58,21068,2833],{"class":75},[58,21070,21071],{"class":60,"line":2300},[58,21072,19190],{"class":64},[58,21074,21075,21077],{"class":60,"line":2321},[58,21076,19195],{"class":379},[58,21078,11498],{"class":75},[58,21080,21081,21083,21085,21087,21089],{"class":60,"line":2326},[58,21082,10314],{"class":75},[58,21084,1827],{"class":92},[58,21086,20571],{"class":386},[58,21088,2094],{"class":92},[58,21090,9486],{"class":75},[58,21092,21093],{"class":60,"line":2340},[58,21094,2833],{"class":75},[58,21096,21097],{"class":60,"line":2345},[58,21098,15360],{"class":92},[58,21100,21101,21103],{"class":60,"line":2374},[58,21102,2631],{"class":92},[58,21104,8443],{"class":75},[58,21106,21107],{"class":60,"line":2379},[58,21108,4641],{"class":75},[58,21110,21111],{"class":60,"line":2396},[58,21112,3046],{"emptyLinePlaceholder":720},[58,21114,21115,21117,21119],{"class":60,"line":2401},[58,21116,6010],{"class":92},[58,21118,6234],{"class":379},[58,21120,2622],{"class":75},[58,21122,21123],{"class":60,"line":2406},[58,21124,2195],{"class":75},[58,21126,21127,21129,21131,21133,21135],{"class":60,"line":2411},[58,21128,20074],{"class":75},[58,21130,7776],{"class":379},[58,21132,793],{"class":75},[58,21134,1436],{"class":82},[58,21136,3365],{"class":75},[58,21138,21139],{"class":60,"line":2425},[58,21140,21141],{"class":64},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[58,21143,21144,21146,21148],{"class":60,"line":2430},[58,21145,20074],{"class":75},[58,21147,7679],{"class":379},[58,21149,18158],{"class":75},[58,21151,21152],{"class":60,"line":3223},[58,21153,3046],{"emptyLinePlaceholder":720},[58,21155,21156,21158,21160,21163,21165,21168,21170],{"class":60,"line":3237},[58,21157,7175],{"class":75},[58,21159,1827],{"class":92},[58,21161,21162],{"class":386}," \"p2的年龄为： \"",[58,21164,2094],{"class":92},[58,21166,21167],{"class":75}," p2.age ",[58,21169,1827],{"class":92},[58,21171,9486],{"class":75},[58,21173,21174],{"class":60,"line":3245},[58,21175,108],{"class":75},[58,21177,21178],{"class":60,"line":3250},[58,21179,3046],{"emptyLinePlaceholder":720},[58,21181,21182,21184,21186],{"class":60,"line":3256},[58,21183,6010],{"class":92},[58,21185,6303],{"class":379},[58,21187,2622],{"class":75},[58,21189,21190],{"class":60,"line":3262},[58,21191,2195],{"class":75},[58,21193,21194],{"class":60,"line":3267},[58,21195,21196],{"class":64},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[58,21198,21199,21202],{"class":60,"line":8594},[58,21200,21201],{"class":75},"    Person p1;",[58,21203,21204],{"class":64}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[58,21206,21207,21209,21211,21213,21215,21217],{"class":60,"line":8618},[58,21208,20074],{"class":75},[58,21210,7679],{"class":379},[58,21212,793],{"class":75},[58,21214,1232],{"class":82},[58,21216,6612],{"class":75},[58,21218,21219],{"class":64}," \u002F\u002F用户提供的有参\n",[58,21221,21222,21224,21227,21230],{"class":60,"line":8623},[58,21223,20074],{"class":75},[58,21225,21226],{"class":379},"p3",[58,21228,21229],{"class":75},"(p2);",[58,21231,21232],{"class":64}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[58,21234,21235],{"class":60,"line":8629},[58,21236,3046],{"emptyLinePlaceholder":720},[58,21238,21239],{"class":60,"line":8656},[58,21240,21241],{"class":64},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[58,21243,21244,21247],{"class":60,"line":8661},[58,21245,21246],{"class":75},"    Person p4;",[58,21248,21204],{"class":64},[58,21250,21251,21253,21256,21258,21260,21262],{"class":60,"line":8667},[58,21252,20074],{"class":75},[58,21254,21255],{"class":379},"p5",[58,21257,793],{"class":75},[58,21259,1232],{"class":82},[58,21261,6612],{"class":75},[58,21263,21264],{"class":64}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[58,21266,21267,21269,21272,21275],{"class":60,"line":8679},[58,21268,20074],{"class":75},[58,21270,21271],{"class":379},"p6",[58,21273,21274],{"class":75},"(p5);",[58,21276,21277],{"class":64}," \u002F\u002F用户自己提供拷贝构造\n",[58,21279,21280],{"class":60,"line":8691},[58,21281,108],{"class":75},[58,21283,21284],{"class":60,"line":8703},[58,21285,3046],{"emptyLinePlaceholder":720},[58,21287,21288,21290,21292],{"class":60,"line":10361},[58,21289,796],{"class":92},[58,21291,2619],{"class":379},[58,21293,11498],{"class":75},[58,21295,21296],{"class":60,"line":10386},[58,21297,3046],{"emptyLinePlaceholder":720},[58,21299,21300,21302],{"class":60,"line":10409},[58,21301,6279],{"class":379},[58,21303,6282],{"class":75},[58,21305,21306],{"class":60,"line":10433},[58,21307,3046],{"emptyLinePlaceholder":720},[58,21309,21310,21312,21314,21316],{"class":60,"line":10438},[58,21311,2949],{"class":379},[58,21313,793],{"class":75},[58,21315,2954],{"class":386},[58,21317,3365],{"class":75},[58,21319,21320],{"class":60,"line":10443},[58,21321,3046],{"emptyLinePlaceholder":720},[58,21323,21324,21326,21328],{"class":60,"line":10448},[58,21325,4736],{"class":92},[58,21327,4739],{"class":82},[58,21329,102],{"class":75},[58,21331,21332],{"class":60,"line":10457},[58,21333,108],{"class":75},[114,21335,21337],{"id":21336},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[175,21339,21340],{},"浅拷贝：简单的赋值拷贝操作",[175,21342,21343],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[48,21345,21347],{"className":781,"code":21346,"language":783,"meta":53,"style":53},"#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",[55,21348,21349,21355,21365,21371,21375,21379,21384,21390,21394,21407,21411,21415,21422,21426,21436,21451,21464,21468,21473,21478,21494,21498,21511,21516,21521,21526,21535,21540,21555,21559,21563,21567,21573,21577,21582,21597,21601,21612,21626,21630,21639,21643,21649,21661,21665,21673,21677,21694,21725,21733,21761,21765,21769,21777,21781,21787],{"__ignoreMap":53},[58,21350,21351,21353],{"class":60,"line":61},[58,21352,2596],{"class":92},[58,21354,2599],{"class":386},[58,21356,21357,21359,21361,21363],{"class":60,"line":68},[58,21358,2604],{"class":92},[58,21360,2607],{"class":92},[58,21362,2610],{"class":379},[58,21364,102],{"class":75},[58,21366,21367,21369],{"class":60,"line":79},[58,21368,15338],{"class":92},[58,21370,15815],{"class":379},[58,21372,21373],{"class":60,"line":105},[58,21374,2195],{"class":75},[58,21376,21377],{"class":60,"line":627},[58,21378,15360],{"class":92},[58,21380,21381],{"class":60,"line":509},[58,21382,21383],{"class":64},"    \u002F\u002F默认构造函数\n",[58,21385,21386,21388],{"class":60,"line":559},[58,21387,19162],{"class":379},[58,21389,2622],{"class":75},[58,21391,21392],{"class":60,"line":654},[58,21393,2676],{"class":75},[58,21395,21396,21398,21400,21403,21405],{"class":60,"line":671},[58,21397,4097],{"class":75},[58,21399,1827],{"class":92},[58,21401,21402],{"class":386},"\"默认构造函数\"",[58,21404,1827],{"class":92},[58,21406,1849],{"class":75},[58,21408,21409],{"class":60,"line":677},[58,21410,2833],{"class":75},[58,21412,21413],{"class":60,"line":2260},[58,21414,20986],{"class":64},[58,21416,21417,21419],{"class":60,"line":694},[58,21418,19195],{"class":379},[58,21420,21421],{"class":75},"(int age,int height)\n",[58,21423,21424],{"class":60,"line":2270},[58,21425,2676],{"class":75},[58,21427,21428,21431,21433],{"class":60,"line":2275},[58,21429,21430],{"class":75},"        m_Age",[58,21432,383],{"class":92},[58,21434,21435],{"class":75},"age;\n",[58,21437,21438,21441,21443,21445,21448],{"class":60,"line":2289},[58,21439,21440],{"class":75},"        m_Height",[58,21442,12362],{"class":92},[58,21444,3028],{"class":92},[58,21446,21447],{"class":75},"(height);",[58,21449,21450],{"class":64},"\u002F\u002F放到堆区\n",[58,21452,21453,21455,21457,21460,21462],{"class":60,"line":2294},[58,21454,4097],{"class":75},[58,21456,1827],{"class":92},[58,21458,21459],{"class":386},"\"有参构造函数\"",[58,21461,1827],{"class":92},[58,21463,1849],{"class":75},[58,21465,21466],{"class":60,"line":2300},[58,21467,2833],{"class":75},[58,21469,21470],{"class":60,"line":2321},[58,21471,21472],{"class":64},"    \u002F\u002F深拷贝解决上述问题\n",[58,21474,21475],{"class":60,"line":2326},[58,21476,21477],{"class":64},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[58,21479,21480,21482,21484,21486,21488,21490,21492],{"class":60,"line":2340},[58,21481,19162],{"class":379},[58,21483,793],{"class":75},[58,21485,7438],{"class":92},[58,21487,16213],{"class":379},[58,21489,11229],{"class":92},[58,21491,175],{"class":5862},[58,21493,799],{"class":75},[58,21495,21496],{"class":60,"line":2345},[58,21497,2676],{"class":75},[58,21499,21500,21502,21504,21507,21509],{"class":60,"line":2374},[58,21501,4097],{"class":75},[58,21503,1827],{"class":92},[58,21505,21506],{"class":386},"\"拷贝构造函数\"",[58,21508,1827],{"class":92},[58,21510,1849],{"class":75},[58,21512,21513],{"class":60,"line":2379},[58,21514,21515],{"class":64},"        \u002F\u002F编译器默认的写如下注释部分\n",[58,21517,21518],{"class":60,"line":2396},[58,21519,21520],{"class":64},"        \u002F\u002Fm_Age=p.m_Age;\n",[58,21522,21523],{"class":60,"line":2401},[58,21524,21525],{"class":64},"        \u002F\u002Fm_Height=p.m_Height;\n",[58,21527,21528,21530,21532],{"class":60,"line":2406},[58,21529,21430],{"class":75},[58,21531,383],{"class":92},[58,21533,21534],{"class":75},"p.m_Age;\n",[58,21536,21537],{"class":60,"line":2411},[58,21538,21539],{"class":64},"        \u002F\u002F深拷贝操作\n",[58,21541,21542,21544,21546,21548,21550,21552],{"class":60,"line":2425},[58,21543,21440],{"class":75},[58,21545,12362],{"class":92},[58,21547,3028],{"class":92},[58,21549,793],{"class":75},[58,21551,1241],{"class":92},[58,21553,21554],{"class":75},"p.m_Height);\n",[58,21556,21557],{"class":60,"line":2430},[58,21558,2833],{"class":75},[58,21560,21561],{"class":60,"line":3223},[58,21562,3046],{"emptyLinePlaceholder":720},[58,21564,21565],{"class":60,"line":3237},[58,21566,19190],{"class":64},[58,21568,21569,21571],{"class":60,"line":3245},[58,21570,19195],{"class":379},[58,21572,2622],{"class":75},[58,21574,21575],{"class":60,"line":3250},[58,21576,2676],{"class":75},[58,21578,21579],{"class":60,"line":3256},[58,21580,21581],{"class":64},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[58,21583,21584,21586,21589,21592,21595],{"class":60,"line":3262},[58,21585,3143],{"class":92},[58,21587,21588],{"class":75},"(m_Height ",[58,21590,21591],{"class":92},"!=",[58,21593,21594],{"class":82}," NULL",[58,21596,799],{"class":75},[58,21598,21599],{"class":60,"line":3267},[58,21600,3156],{"class":75},[58,21602,21603,21606,21609],{"class":60,"line":8594},[58,21604,21605],{"class":92},"            delete",[58,21607,21608],{"class":75}," m_Height;",[58,21610,21611],{"class":64}," \u002F\u002F释放堆区内存\n",[58,21613,21614,21617,21619,21621,21623],{"class":60,"line":8618},[58,21615,21616],{"class":75},"            m_Height",[58,21618,383],{"class":92},[58,21620,3038],{"class":82},[58,21622,846],{"class":75},[58,21624,21625],{"class":64}," \u002F\u002F防止野指针\n",[58,21627,21628],{"class":60,"line":8623},[58,21629,3175],{"class":75},[58,21631,21632,21634,21636],{"class":60,"line":8629},[58,21633,4097],{"class":75},[58,21635,1827],{"class":92},[58,21637,21638],{"class":386},"\"Person的析构函数调用\"\n",[58,21640,21641],{"class":60,"line":8656},[58,21642,2833],{"class":75},[58,21644,21645,21647],{"class":60,"line":8661},[58,21646,2631],{"class":92},[58,21648,16309],{"class":75},[58,21650,21651,21653,21655,21658],{"class":60,"line":8667},[58,21652,2631],{"class":92},[58,21654,7164],{"class":92},[58,21656,21657],{"class":75},"m_Height;",[58,21659,21660],{"class":64}," \u002F\u002F定义一个指针，指向身高\n",[58,21662,21663],{"class":60,"line":8679},[58,21664,4641],{"class":75},[58,21666,21667,21669,21671],{"class":60,"line":8691},[58,21668,6010],{"class":92},[58,21670,6234],{"class":379},[58,21672,2622],{"class":75},[58,21674,21675],{"class":60,"line":8703},[58,21676,2195],{"class":75},[58,21678,21679,21681,21683,21685,21687,21689,21692],{"class":60,"line":10361},[58,21680,20074],{"class":75},[58,21682,7776],{"class":379},[58,21684,793],{"class":75},[58,21686,1436],{"class":82},[58,21688,1164],{"class":75},[58,21690,21691],{"class":82},"160",[58,21693,3365],{"class":75},[58,21695,21696,21698,21700,21703,21705,21708,21710,21713,21715,21718,21720,21722],{"class":60,"line":10386},[58,21697,2200],{"class":75},[58,21699,1827],{"class":92},[58,21701,21702],{"class":386},"\"p1的年龄为:\"",[58,21704,1827],{"class":92},[58,21706,21707],{"class":75},"p1.m_Age",[58,21709,1827],{"class":92},[58,21711,21712],{"class":386},"\"身高为：\"",[58,21714,7065],{"class":92},[58,21716,21717],{"class":75},"p1.m_Height",[58,21719,1827],{"class":92},[58,21721,1892],{"class":75},[58,21723,21724],{"class":64},"  \u002F\u002F18\n",[58,21726,21727,21729,21731],{"class":60,"line":10409},[58,21728,20074],{"class":75},[58,21730,7679],{"class":379},[58,21732,18158],{"class":75},[58,21734,21735,21737,21739,21742,21744,21746,21748,21750,21752,21755,21757,21759],{"class":60,"line":10433},[58,21736,2200],{"class":75},[58,21738,1827],{"class":92},[58,21740,21741],{"class":386},"\"p2的年龄为：\"",[58,21743,1827],{"class":92},[58,21745,20104],{"class":75},[58,21747,1827],{"class":92},[58,21749,21712],{"class":386},[58,21751,7065],{"class":92},[58,21753,21754],{"class":75},"p2.m_Height",[58,21756,1827],{"class":92},[58,21758,1892],{"class":75},[58,21760,21724],{"class":64},[58,21762,21763],{"class":60,"line":10438},[58,21764,13854],{"class":75},[58,21766,21767],{"class":60,"line":10443},[58,21768,108],{"class":75},[58,21770,21771,21773,21775],{"class":60,"line":10448},[58,21772,796],{"class":92},[58,21774,2619],{"class":379},[58,21776,2622],{"class":75},[58,21778,21779],{"class":60,"line":10457},[58,21780,2195],{"class":75},[58,21782,21783,21785],{"class":60,"line":10462},[58,21784,6279],{"class":379},[58,21786,6282],{"class":75},[58,21788,21789],{"class":60,"line":10468},[58,21790,108],{"class":75},[175,21792,21793],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[175,21795,21796],{},"浅拷贝带来的问题是堆区的内存重复释放",[175,21798,21799],{},[119,21800],{"alt":53,"src":21801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[175,21803,21804],{},"浅拷贝问题要使用深拷贝来解决",[175,21806,21807],{},[119,21808],{"alt":53,"src":21809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[175,21811,21812],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[114,21814,21816],{"id":21815},"_826初始化列表","8.2.6初始化列表",[175,21818,21819],{},"作用：初始化属性",[175,21821,5827],{},[48,21823,21826],{"className":21824,"code":21825,"language":5833},[5831],"构造函数():属性1(值1),属性2(值2).....{}\n",[55,21827,21825],{"__ignoreMap":53},[175,21829,21830],{},"例子",[48,21832,21834],{"className":781,"code":21833,"language":783,"meta":53,"style":53},"#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",[55,21835,21836,21842,21852,21858,21862,21867,21871,21876,21881,21886,21891,21896,21901,21905,21910,21915,21958,21967,21985,22003,22021,22025,22029,22036,22043,22050,22054,22058,22066,22070,22074,22094,22103,22107,22111,22121,22125,22133],{"__ignoreMap":53},[58,21837,21838,21840],{"class":60,"line":61},[58,21839,2596],{"class":92},[58,21841,2599],{"class":386},[58,21843,21844,21846,21848,21850],{"class":60,"line":68},[58,21845,2604],{"class":92},[58,21847,2607],{"class":92},[58,21849,2610],{"class":379},[58,21851,102],{"class":75},[58,21853,21854,21856],{"class":60,"line":79},[58,21855,15338],{"class":92},[58,21857,15815],{"class":379},[58,21859,21860],{"class":60,"line":105},[58,21861,2195],{"class":75},[58,21863,21864],{"class":60,"line":627},[58,21865,21866],{"class":92},"    public:\n",[58,21868,21869],{"class":60,"line":509},[58,21870,3046],{"emptyLinePlaceholder":720},[58,21872,21873],{"class":60,"line":559},[58,21874,21875],{"class":64},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[58,21877,21878],{"class":60,"line":654},[58,21879,21880],{"class":64},"    \u002F\u002FPerson(int a, int b, int c) {\n",[58,21882,21883],{"class":60,"line":671},[58,21884,21885],{"class":64},"    \u002F\u002F  m_A = a;\n",[58,21887,21888],{"class":60,"line":677},[58,21889,21890],{"class":64},"    \u002F\u002F  m_B = b;\n",[58,21892,21893],{"class":60,"line":2260},[58,21894,21895],{"class":64},"    \u002F\u002F  m_C = c;\n",[58,21897,21898],{"class":60,"line":694},[58,21899,21900],{"class":64},"    \u002F\u002F}\n",[58,21902,21903],{"class":60,"line":2270},[58,21904,3046],{"emptyLinePlaceholder":720},[58,21906,21907],{"class":60,"line":2275},[58,21908,21909],{"class":64},"    \u002F\u002F初始化列表方式初始化\n",[58,21911,21912],{"class":60,"line":2289},[58,21913,21914],{"class":64},"    \u002F\u002F使用有参构造函数\n",[58,21916,21917,21919,21921,21923,21925,21927,21929,21931,21933,21935,21937,21940,21943,21946,21949,21952,21955],{"class":60,"line":2294},[58,21918,19162],{"class":379},[58,21920,793],{"class":75},[58,21922,796],{"class":92},[58,21924,2048],{"class":5862},[58,21926,469],{"class":75},[58,21928,796],{"class":92},[58,21930,3479],{"class":5862},[58,21932,469],{"class":75},[58,21934,796],{"class":92},[58,21936,3495],{"class":5862},[58,21938,21939],{"class":75},") :",[58,21941,21942],{"class":379},"m_A",[58,21944,21945],{"class":75},"(a), ",[58,21947,21948],{"class":379},"m_B",[58,21950,21951],{"class":75},"(b), ",[58,21953,21954],{"class":379},"m_C",[58,21956,21957],{"class":75},"(c) {}\n",[58,21959,21960,21962,21965],{"class":60,"line":2300},[58,21961,15553],{"class":92},[58,21963,21964],{"class":379}," PrintPerson",[58,21966,11498],{"class":75},[58,21968,21969,21971,21973,21976,21978,21981,21983],{"class":60,"line":2321},[58,21970,10314],{"class":75},[58,21972,1827],{"class":92},[58,21974,21975],{"class":386}," \"mA:\"",[58,21977,2094],{"class":92},[58,21979,21980],{"class":75}," m_A ",[58,21982,1827],{"class":92},[58,21984,9486],{"class":75},[58,21986,21987,21989,21991,21994,21996,21999,22001],{"class":60,"line":2326},[58,21988,10314],{"class":75},[58,21990,1827],{"class":92},[58,21992,21993],{"class":386}," \"mB:\"",[58,21995,2094],{"class":92},[58,21997,21998],{"class":75}," m_B ",[58,22000,1827],{"class":92},[58,22002,9486],{"class":75},[58,22004,22005,22007,22009,22012,22014,22017,22019],{"class":60,"line":2340},[58,22006,10314],{"class":75},[58,22008,1827],{"class":92},[58,22010,22011],{"class":386}," \"mC:\"",[58,22013,2094],{"class":92},[58,22015,22016],{"class":75}," m_C ",[58,22018,1827],{"class":92},[58,22020,9486],{"class":75},[58,22022,22023],{"class":60,"line":2345},[58,22024,2833],{"class":75},[58,22026,22027],{"class":60,"line":2374},[58,22028,15866],{"class":92},[58,22030,22031,22033],{"class":60,"line":2379},[58,22032,2631],{"class":92},[58,22034,22035],{"class":75}," m_A;\n",[58,22037,22038,22040],{"class":60,"line":2396},[58,22039,2631],{"class":92},[58,22041,22042],{"class":75}," m_B;\n",[58,22044,22045,22047],{"class":60,"line":2401},[58,22046,2631],{"class":92},[58,22048,22049],{"class":75}," m_C;\n",[58,22051,22052],{"class":60,"line":2406},[58,22053,4641],{"class":75},[58,22055,22056],{"class":60,"line":2411},[58,22057,3046],{"emptyLinePlaceholder":720},[58,22059,22060,22062,22064],{"class":60,"line":2425},[58,22061,796],{"class":92},[58,22063,2619],{"class":379},[58,22065,6624],{"class":75},[58,22067,22068],{"class":60,"line":2430},[58,22069,2195],{"class":75},[58,22071,22072],{"class":60,"line":3223},[58,22073,3046],{"emptyLinePlaceholder":720},[58,22075,22076,22078,22080,22082,22084,22086,22088,22090,22092],{"class":60,"line":3237},[58,22077,20074],{"class":75},[58,22079,175],{"class":379},[58,22081,793],{"class":75},[58,22083,89],{"class":82},[58,22085,469],{"class":75},[58,22087,867],{"class":82},[58,22089,469],{"class":75},[58,22091,861],{"class":82},[58,22093,3365],{"class":75},[58,22095,22096,22098,22101],{"class":60,"line":3245},[58,22097,16509],{"class":75},[58,22099,22100],{"class":379},"PrintPerson",[58,22102,6282],{"class":75},[58,22104,22105],{"class":60,"line":3250},[58,22106,3046],{"emptyLinePlaceholder":720},[58,22108,22109],{"class":60,"line":3256},[58,22110,3046],{"emptyLinePlaceholder":720},[58,22112,22113,22115,22117,22119],{"class":60,"line":3262},[58,22114,2949],{"class":379},[58,22116,793],{"class":75},[58,22118,2954],{"class":386},[58,22120,3365],{"class":75},[58,22122,22123],{"class":60,"line":3267},[58,22124,3046],{"emptyLinePlaceholder":720},[58,22126,22127,22129,22131],{"class":60,"line":8594},[58,22128,4736],{"class":92},[58,22130,4739],{"class":82},[58,22132,102],{"class":75},[58,22134,22135],{"class":60,"line":8618},[58,22136,108],{"class":75},[175,22138,22139,22140,22143,22144],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[25,22141,22142],{},"参数名就是定义的对象属性","，",[25,22145,22146],{},"属性后面的值为有参构造函数的形参",[48,22148,22150],{"className":781,"code":22149,"language":783,"meta":53,"style":53},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[55,22151,22152],{"__ignoreMap":53},[58,22153,22154,22156,22158,22160,22163,22165,22168,22170,22173,22175,22178,22180,22183,22185],{"class":60,"line":61},[58,22155,19689],{"class":379},[58,22157,793],{"class":75},[58,22159,796],{"class":92},[58,22161,22162],{"class":75}," a.",[58,22164,796],{"class":92},[58,22166,22167],{"class":75}," b,",[58,22169,796],{"class":92},[58,22171,22172],{"class":75}," b):",[58,22174,21942],{"class":379},[58,22176,22177],{"class":75},"(a),",[58,22179,21948],{"class":379},[58,22181,22182],{"class":75},"(c),",[58,22184,21954],{"class":379},[58,22186,22187],{"class":75},"(b) {}\n",[114,22189,22191],{"id":22190},"_827类对象作为类成员","8.2.7类对象作为类成员",[175,22193,22194],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[175,22196,15277],{},[48,22198,22200],{"className":781,"code":22199,"language":783,"meta":53,"style":53},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[55,22201,22202,22207,22212,22216,22221,22225],{"__ignoreMap":53},[58,22203,22204],{"class":60,"line":61},[58,22205,22206],{"class":75},"A{};\n",[58,22208,22209],{"class":60,"line":68},[58,22210,22211],{"class":75},"B\n",[58,22213,22214],{"class":60,"line":79},[58,22215,2195],{"class":75},[58,22217,22218],{"class":60,"line":105},[58,22219,22220],{"class":75},"    A a;\n",[58,22222,22223],{"class":60,"line":627},[58,22224,108],{"class":75},[58,22226,22227],{"class":60,"line":509},[58,22228,22229],{"class":64},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[175,22231,22232],{},"案例",[48,22234,22236],{"className":781,"code":22235,"language":783,"meta":53,"style":53},"\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",[55,22237,22238,22243,22250,22254,22259,22264,22278,22282,22292,22303,22307,22314,22318,22331,22335,22340,22345,22349,22355,22359,22363,22367,22398,22402,22413,22417,22423,22427,22440,22444,22448,22452,22457,22462,22466,22474,22478,22495,22514,22518,22526,22530,22536],{"__ignoreMap":53},[58,22239,22240],{"class":60,"line":61},[58,22241,22242],{"class":64},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[58,22244,22245,22247],{"class":60,"line":68},[58,22246,15338],{"class":92},[58,22248,22249],{"class":379}," Phone\n",[58,22251,22252],{"class":60,"line":79},[58,22253,2195],{"class":75},[58,22255,22256],{"class":60,"line":105},[58,22257,22258],{"class":75},"public：\n",[58,22260,22261],{"class":60,"line":627},[58,22262,22263],{"class":64},"    \u002F\u002F 赋值(构造函数)\n",[58,22265,22266,22269,22271,22273,22276],{"class":60,"line":509},[58,22267,22268],{"class":379},"    Phone",[58,22270,793],{"class":75},[58,22272,15561],{"class":379},[58,22274,22275],{"class":5862}," pName",[58,22277,799],{"class":75},[58,22279,22280],{"class":60,"line":559},[58,22281,2676],{"class":75},[58,22283,22284,22287,22289],{"class":60,"line":654},[58,22285,22286],{"class":75},"        m_pName",[58,22288,383],{"class":92},[58,22290,22291],{"class":75},"pName;\n",[58,22293,22294,22296,22298,22301],{"class":60,"line":671},[58,22295,4097],{"class":75},[58,22297,1827],{"class":92},[58,22299,22300],{"class":386},"\"Phone的构造函数调用\"",[58,22302,102],{"class":75},[58,22304,22305],{"class":60,"line":677},[58,22306,2833],{"class":75},[58,22308,22309,22312],{"class":60,"line":2260},[58,22310,22311],{"class":379},"    ~Phone",[58,22313,2622],{"class":75},[58,22315,22316],{"class":60,"line":694},[58,22317,2676],{"class":75},[58,22319,22320,22322,22324,22327,22329],{"class":60,"line":2270},[58,22321,4097],{"class":75},[58,22323,1827],{"class":92},[58,22325,22326],{"class":386},"\"Phone析构函数调用\"",[58,22328,1827],{"class":92},[58,22330,1849],{"class":75},[58,22332,22333],{"class":60,"line":2275},[58,22334,2833],{"class":75},[58,22336,22337],{"class":60,"line":2289},[58,22338,22339],{"class":64},"    \u002F\u002F\n",[58,22341,22342],{"class":60,"line":2294},[58,22343,22344],{"class":75},"    string m_PName;\n",[58,22346,22347],{"class":60,"line":2300},[58,22348,4641],{"class":75},[58,22350,22351,22353],{"class":60,"line":2321},[58,22352,15338],{"class":92},[58,22354,15815],{"class":379},[58,22356,22357],{"class":60,"line":2326},[58,22358,2195],{"class":75},[58,22360,22361],{"class":60,"line":2340},[58,22362,15360],{"class":92},[58,22364,22365],{"class":60,"line":2345},[58,22366,17637],{"class":64},[58,22368,22369,22371,22373,22375,22377,22379,22381,22384,22387,22389,22392,22395],{"class":60,"line":2374},[58,22370,19162],{"class":379},[58,22372,793],{"class":75},[58,22374,15561],{"class":379},[58,22376,15564],{"class":5862},[58,22378,1164],{"class":75},[58,22380,15561],{"class":379},[58,22382,22383],{"class":5862}," pname",[58,22385,22386],{"class":75},"):",[58,22388,15654],{"class":379},[58,22390,22391],{"class":75},"(name),m_phone.",[58,22393,22394],{"class":379},"m_PName",[58,22396,22397],{"class":75},"(pname) \n",[58,22399,22400],{"class":60,"line":2379},[58,22401,2676],{"class":75},[58,22403,22404,22406,22408,22411],{"class":60,"line":2396},[58,22405,4097],{"class":75},[58,22407,1827],{"class":92},[58,22409,22410],{"class":386},"\"Person的构造函数调用\"",[58,22412,102],{"class":75},[58,22414,22415],{"class":60,"line":2401},[58,22416,2833],{"class":75},[58,22418,22419,22421],{"class":60,"line":2406},[58,22420,19195],{"class":379},[58,22422,2622],{"class":75},[58,22424,22425],{"class":60,"line":2411},[58,22426,2676],{"class":75},[58,22428,22429,22431,22433,22436,22438],{"class":60,"line":2425},[58,22430,4097],{"class":75},[58,22432,1827],{"class":92},[58,22434,22435],{"class":386},"\"Person析构函数调用\"",[58,22437,1827],{"class":92},[58,22439,1849],{"class":75},[58,22441,22442],{"class":60,"line":2430},[58,22443,2833],{"class":75},[58,22445,22446],{"class":60,"line":3223},[58,22447,8426],{"class":64},[58,22449,22450],{"class":60,"line":3237},[58,22451,15536],{"class":75},[58,22453,22454],{"class":60,"line":3245},[58,22455,22456],{"class":64},"    \u002F\u002F手机\n",[58,22458,22459],{"class":60,"line":3250},[58,22460,22461],{"class":75},"    Phone m_Phone;\n",[58,22463,22464],{"class":60,"line":3256},[58,22465,4641],{"class":75},[58,22467,22468,22470,22472],{"class":60,"line":3262},[58,22469,6010],{"class":92},[58,22471,6234],{"class":379},[58,22473,2622],{"class":75},[58,22475,22476],{"class":60,"line":3267},[58,22477,2195],{"class":75},[58,22479,22480,22482,22484,22486,22488,22490,22493],{"class":60,"line":8594},[58,22481,20074],{"class":75},[58,22483,175],{"class":379},[58,22485,793],{"class":75},[58,22487,8562],{"class":386},[58,22489,1164],{"class":75},[58,22491,22492],{"class":386},"\"安卓\"",[58,22494,3365],{"class":75},[58,22496,22497,22499,22501,22504,22506,22509,22511],{"class":60,"line":8618},[58,22498,2200],{"class":75},[58,22500,1827],{"class":92},[58,22502,22503],{"class":75},"p.Name",[58,22505,1827],{"class":92},[58,22507,22508],{"class":386},"\"拿着：\"",[58,22510,1827],{"class":92},[58,22512,22513],{"class":75},"p.m_phone.m_PName;\n",[58,22515,22516],{"class":60,"line":8623},[58,22517,108],{"class":75},[58,22519,22520,22522,22524],{"class":60,"line":8629},[58,22521,796],{"class":92},[58,22523,2619],{"class":379},[58,22525,2622],{"class":75},[58,22527,22528],{"class":60,"line":8656},[58,22529,2195],{"class":75},[58,22531,22532,22534],{"class":60,"line":8661},[58,22533,6279],{"class":379},[58,22535,6282],{"class":75},[58,22537,22538],{"class":60,"line":8667},[58,22539,108],{"class":75},[175,22541,195],{},[48,22543,22545],{"className":781,"code":22544,"language":783,"meta":53,"style":53},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[55,22546,22547,22552],{"__ignoreMap":53},[58,22548,22549],{"class":60,"line":61},[58,22550,22551],{"class":64},"    \u002F\u002F不需要写这个：\n",[58,22553,22554],{"class":60,"line":68},[58,22555,22556],{"class":64},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[175,22558,22559],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[48,22561,22563],{"className":781,"code":22562,"language":783,"meta":53,"style":53},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[55,22564,22565],{"__ignoreMap":53},[58,22566,22567,22569,22572,22574,22577,22580],{"class":60,"line":61},[58,22568,19689],{"class":379},[58,22570,22571],{"class":75},"(string name.string pname):",[58,22573,15654],{"class":379},[58,22575,22576],{"class":75},"(name),",[58,22578,22579],{"class":379},"m_phone",[58,22581,22582],{"class":75},"(pname) {}\n",[175,22584,22585,22586,383,22589],{},"采用的是隐式转换法，实际为如下：\n",[55,22587,22588],{},"m_phone(pname)",[55,22590,22591],{},"Phone m_phone=pname",[175,22593,22594,22597],{},[25,22595,22596],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[175,22599,22600],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[114,22602,22604],{"id":22603},"_828静态对象","8.2.8静态对象",[175,22606,22607],{},"静态对象在成员对象前static，称为静态对象",[175,22609,22610],{},"静态对象分为两类：",[19,22612,22613],{},[22,22614,22615],{},"静态成员变量",[124,22617,22618,22621,22624],{},[22,22619,22620],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[22,22622,22623],{},"②在编译阶段分配内存",[22,22625,22626],{},"③类内声明，类外初始化",[19,22628,22629],{"start":68},[22,22630,22631],{},"静态成员函数",[124,22633,22634,22637],{},[22,22635,22636],{},"①所有对象共享同一个函数",[22,22638,22639],{},"②静态成员函数只能访问静态成员变量",[22641,22642,22644],"h4",{"id":22643},"_8281静态成员变量","8.2.8.1静态成员变量",[48,22646,22648],{"className":781,"code":22647,"language":783,"meta":53,"style":53},"#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",[55,22649,22650,22656,22666,22672,22676,22680,22685,22690,22695,22703,22707,22711,22715,22723,22727,22731,22736,22749,22753,22761,22765,22771],{"__ignoreMap":53},[58,22651,22652,22654],{"class":60,"line":61},[58,22653,2596],{"class":92},[58,22655,2599],{"class":386},[58,22657,22658,22660,22662,22664],{"class":60,"line":68},[58,22659,2604],{"class":92},[58,22661,2607],{"class":92},[58,22663,2610],{"class":379},[58,22665,102],{"class":75},[58,22667,22668,22670],{"class":60,"line":79},[58,22669,15338],{"class":92},[58,22671,15815],{"class":379},[58,22673,22674],{"class":60,"line":105},[58,22675,2195],{"class":75},[58,22677,22678],{"class":60,"line":627},[58,22679,15360],{"class":92},[58,22681,22682],{"class":60,"line":509},[58,22683,22684],{"class":64},"    \u002F\u002F非静态成员变量\n",[58,22686,22687],{"class":60,"line":559},[58,22688,22689],{"class":64},"    \u002F\u002F int m_A;\n",[58,22691,22692],{"class":60,"line":654},[58,22693,22694],{"class":64},"    \u002F\u002F定义静态成员变量\n",[58,22696,22697,22699,22701],{"class":60,"line":671},[58,22698,11665],{"class":92},[58,22700,3028],{"class":92},[58,22702,22035],{"class":75},[58,22704,22705],{"class":60,"line":677},[58,22706,3046],{"emptyLinePlaceholder":720},[58,22708,22709],{"class":60,"line":2260},[58,22710,3046],{"emptyLinePlaceholder":720},[58,22712,22713],{"class":60,"line":694},[58,22714,4641],{"class":75},[58,22716,22717,22719,22721],{"class":60,"line":2270},[58,22718,6010],{"class":92},[58,22720,6234],{"class":379},[58,22722,2622],{"class":75},[58,22724,22725],{"class":60,"line":2275},[58,22726,2195],{"class":75},[58,22728,22729],{"class":60,"line":2289},[58,22730,15957],{"class":75},[58,22732,22733],{"class":60,"line":2294},[58,22734,22735],{"class":64},"    \u002F\u002F输出类成员变量这块内存\n",[58,22737,22738,22740,22742,22745,22747],{"class":60,"line":2300},[58,22739,2200],{"class":75},[58,22741,1827],{"class":92},[58,22743,22744],{"class":75},"p.m_A",[58,22746,1827],{"class":92},[58,22748,1849],{"class":75},[58,22750,22751],{"class":60,"line":2321},[58,22752,108],{"class":75},[58,22754,22755,22757,22759],{"class":60,"line":2326},[58,22756,796],{"class":92},[58,22758,2619],{"class":379},[58,22760,2622],{"class":75},[58,22762,22763],{"class":60,"line":2340},[58,22764,2195],{"class":75},[58,22766,22767,22769],{"class":60,"line":2345},[58,22768,6279],{"class":379},[58,22770,2622],{"class":75},[58,22772,22773],{"class":60,"line":2374},[58,22774,108],{"class":75},[175,22776,22777],{},"此时输出是报错的：无法解析外部命令",[175,22779,22780],{},"解决这一问题：必须用到类内声明，类外初始化操作",[48,22782,22784],{"className":781,"code":22783,"language":783,"meta":53,"style":53},"#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",[55,22785,22786,22792,22802,22808,22812,22816,22821,22829,22833,22838,22853,22861,22865,22869,22874,22879,22891,22896,22907,22912,22917,22930,22934,22942,22946,22952],{"__ignoreMap":53},[58,22787,22788,22790],{"class":60,"line":61},[58,22789,2596],{"class":92},[58,22791,2599],{"class":386},[58,22793,22794,22796,22798,22800],{"class":60,"line":68},[58,22795,2604],{"class":92},[58,22797,2607],{"class":92},[58,22799,2610],{"class":379},[58,22801,102],{"class":75},[58,22803,22804,22806],{"class":60,"line":79},[58,22805,15338],{"class":92},[58,22807,15815],{"class":379},[58,22809,22810],{"class":60,"line":105},[58,22811,2195],{"class":75},[58,22813,22814],{"class":60,"line":627},[58,22815,15360],{"class":92},[58,22817,22818],{"class":60,"line":509},[58,22819,22820],{"class":64},"    \u002F\u002F类内声明\n",[58,22822,22823,22825,22827],{"class":60,"line":559},[58,22824,11665],{"class":92},[58,22826,3028],{"class":92},[58,22828,22035],{"class":75},[58,22830,22831],{"class":60,"line":654},[58,22832,4641],{"class":75},[58,22834,22835],{"class":60,"line":671},[58,22836,22837],{"class":64},"\u002F\u002F类外初始化\n",[58,22839,22840,22842,22844,22847,22849,22851],{"class":60,"line":677},[58,22841,796],{"class":92},[58,22843,16213],{"class":379},[58,22845,22846],{"class":75},"::m_A",[58,22848,383],{"class":92},[58,22850,1232],{"class":82},[58,22852,102],{"class":75},[58,22854,22855,22857,22859],{"class":60,"line":2260},[58,22856,6010],{"class":92},[58,22858,6234],{"class":379},[58,22860,2622],{"class":75},[58,22862,22863],{"class":60,"line":694},[58,22864,2195],{"class":75},[58,22866,22867],{"class":60,"line":2270},[58,22868,15957],{"class":75},[58,22870,22871],{"class":60,"line":2275},[58,22872,22873],{"class":64},"    \u002F\u002F访问变量的原内存空间\n",[58,22875,22876],{"class":60,"line":2289},[58,22877,22878],{"class":64},"    \u002F\u002F100\n",[58,22880,22881,22883,22885,22887,22889],{"class":60,"line":2294},[58,22882,2200],{"class":75},[58,22884,1827],{"class":92},[58,22886,22744],{"class":75},[58,22888,1827],{"class":92},[58,22890,1849],{"class":75},[58,22892,22893],{"class":60,"line":2300},[58,22894,22895],{"class":75},"    Person p2;\n",[58,22897,22898,22901,22903,22905],{"class":60,"line":2321},[58,22899,22900],{"class":75},"    p2.m_A",[58,22902,383],{"class":92},[58,22904,2369],{"class":82},[58,22906,102],{"class":75},[58,22908,22909],{"class":60,"line":2326},[58,22910,22911],{"class":64},"    \u002F\u002F继续访问这片空间\n",[58,22913,22914],{"class":60,"line":2340},[58,22915,22916],{"class":64},"    \u002F\u002F200\n",[58,22918,22919,22921,22923,22926,22928],{"class":60,"line":2345},[58,22920,2200],{"class":75},[58,22922,1827],{"class":92},[58,22924,22925],{"class":75},"p2.m_A",[58,22927,1827],{"class":92},[58,22929,1849],{"class":75},[58,22931,22932],{"class":60,"line":2374},[58,22933,108],{"class":75},[58,22935,22936,22938,22940],{"class":60,"line":2379},[58,22937,796],{"class":92},[58,22939,2619],{"class":379},[58,22941,2622],{"class":75},[58,22943,22944],{"class":60,"line":2396},[58,22945,2195],{"class":75},[58,22947,22948,22950],{"class":60,"line":2401},[58,22949,6279],{"class":379},[58,22951,6282],{"class":75},[58,22953,22954],{"class":60,"line":2406},[58,22955,108],{"class":75},[175,22957,22958],{},[25,22959,22960],{},"静态变量的访问",[48,22962,22964],{"className":781,"code":22963,"language":783,"meta":53,"style":53},"#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",[55,22965,22966,22972,22982,22988,22992,22996,23000,23008,23012,23017,23025,23029,23033,23047,23062,23070,23074,23079,23084,23089,23094,23106,23111,23116,23130,23147,23151,23159,23163,23169],{"__ignoreMap":53},[58,22967,22968,22970],{"class":60,"line":61},[58,22969,2596],{"class":92},[58,22971,2599],{"class":386},[58,22973,22974,22976,22978,22980],{"class":60,"line":68},[58,22975,2604],{"class":92},[58,22977,2607],{"class":92},[58,22979,2610],{"class":379},[58,22981,102],{"class":75},[58,22983,22984,22986],{"class":60,"line":79},[58,22985,15338],{"class":92},[58,22987,15815],{"class":379},[58,22989,22990],{"class":60,"line":105},[58,22991,2195],{"class":75},[58,22993,22994],{"class":60,"line":627},[58,22995,15360],{"class":92},[58,22997,22998],{"class":60,"line":509},[58,22999,22820],{"class":64},[58,23001,23002,23004,23006],{"class":60,"line":559},[58,23003,11665],{"class":92},[58,23005,3028],{"class":92},[58,23007,22035],{"class":75},[58,23009,23010],{"class":60,"line":654},[58,23011,15866],{"class":92},[58,23013,23014],{"class":60,"line":671},[58,23015,23016],{"class":64},"    \u002F\u002F静态成员变量也是有访问权限的\n",[58,23018,23019,23021,23023],{"class":60,"line":677},[58,23020,11665],{"class":92},[58,23022,3028],{"class":92},[58,23024,22042],{"class":75},[58,23026,23027],{"class":60,"line":2260},[58,23028,4641],{"class":75},[58,23030,23031],{"class":60,"line":694},[58,23032,22837],{"class":64},[58,23034,23035,23037,23039,23041,23043,23045],{"class":60,"line":2270},[58,23036,796],{"class":92},[58,23038,16213],{"class":379},[58,23040,22846],{"class":75},[58,23042,383],{"class":92},[58,23044,1232],{"class":82},[58,23046,102],{"class":75},[58,23048,23049,23051,23053,23056,23058,23060],{"class":60,"line":2275},[58,23050,796],{"class":92},[58,23052,16213],{"class":379},[58,23054,23055],{"class":75},"::m_B",[58,23057,383],{"class":92},[58,23059,1486],{"class":82},[58,23061,102],{"class":75},[58,23063,23064,23066,23068],{"class":60,"line":2289},[58,23065,6010],{"class":92},[58,23067,6303],{"class":379},[58,23069,2622],{"class":75},[58,23071,23072],{"class":60,"line":2294},[58,23073,2195],{"class":75},[58,23075,23076],{"class":60,"line":2300},[58,23077,23078],{"class":64},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[58,23080,23081],{"class":60,"line":2321},[58,23082,23083],{"class":64},"    \u002F\u002F静态成员变量有两种访问方式：\n",[58,23085,23086],{"class":60,"line":2326},[58,23087,23088],{"class":64},"    \u002F\u002F1.通过对象进行访问\n",[58,23090,23091],{"class":60,"line":2340},[58,23092,23093],{"class":75},"    Person p;  \n",[58,23095,23096,23098,23100,23102,23104],{"class":60,"line":2345},[58,23097,2200],{"class":75},[58,23099,1827],{"class":92},[58,23101,22744],{"class":75},[58,23103,1827],{"class":92},[58,23105,1849],{"class":75},[58,23107,23108],{"class":60,"line":2374},[58,23109,23110],{"class":64},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[58,23112,23113],{"class":60,"line":2379},[58,23114,23115],{"class":64},"    \u002F\u002F2.通过类名进行访问\n",[58,23117,23118,23120,23122,23124,23126,23128],{"class":60,"line":2396},[58,23119,2200],{"class":75},[58,23121,1827],{"class":92},[58,23123,19689],{"class":379},[58,23125,22846],{"class":75},[58,23127,1827],{"class":92},[58,23129,1849],{"class":75},[58,23131,23132,23134,23136,23138,23140,23142,23144],{"class":60,"line":2401},[58,23133,2200],{"class":75},[58,23135,1827],{"class":92},[58,23137,19689],{"class":379},[58,23139,23055],{"class":75},[58,23141,1827],{"class":92},[58,23143,1892],{"class":75},[58,23145,23146],{"class":64}," \u002F\u002F没有访问权限，报错\n",[58,23148,23149],{"class":60,"line":2406},[58,23150,108],{"class":75},[58,23152,23153,23155,23157],{"class":60,"line":2411},[58,23154,796],{"class":92},[58,23156,2619],{"class":379},[58,23158,2622],{"class":75},[58,23160,23161],{"class":60,"line":2425},[58,23162,2195],{"class":75},[58,23164,23165,23167],{"class":60,"line":2430},[58,23166,6348],{"class":379},[58,23168,6282],{"class":75},[58,23170,23171],{"class":60,"line":3223},[58,23172,108],{"class":75},[22641,23174,23176],{"id":23175},"_8282静态成员函数","8.2.8.2静态成员函数",[175,23178,23179],{},"1.静态成员函数定义与访问",[48,23181,23183],{"className":781,"code":23182,"language":783,"meta":53,"style":53},"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",[55,23184,23185,23191,23195,23199,23204,23215,23219,23233,23237,23241,23249,23253,23258,23263,23267,23275,23280,23290],{"__ignoreMap":53},[58,23186,23187,23189],{"class":60,"line":61},[58,23188,15338],{"class":92},[58,23190,15815],{"class":379},[58,23192,23193],{"class":60,"line":68},[58,23194,2195],{"class":75},[58,23196,23197],{"class":60,"line":79},[58,23198,15360],{"class":92},[58,23200,23201],{"class":60,"line":105},[58,23202,23203],{"class":64},"    \u002F\u002F在公共权限下定义静态成员函数\n",[58,23205,23206,23208,23211,23213],{"class":60,"line":627},[58,23207,11665],{"class":92},[58,23209,23210],{"class":92}," void",[58,23212,12030],{"class":379},[58,23214,2622],{"class":75},[58,23216,23217],{"class":60,"line":509},[58,23218,2676],{"class":75},[58,23220,23221,23224,23226,23229,23231],{"class":60,"line":559},[58,23222,23223],{"class":75},"        coout",[58,23225,1827],{"class":92},[58,23227,23228],{"class":386},"\"静态成员函数的调用\"",[58,23230,1827],{"class":92},[58,23232,1849],{"class":75},[58,23234,23235],{"class":60,"line":654},[58,23236,2833],{"class":75},[58,23238,23239],{"class":60,"line":671},[58,23240,4641],{"class":75},[58,23242,23243,23245,23247],{"class":60,"line":677},[58,23244,6010],{"class":92},[58,23246,6234],{"class":379},[58,23248,2622],{"class":75},[58,23250,23251],{"class":60,"line":2260},[58,23252,2195],{"class":75},[58,23254,23255],{"class":60,"line":694},[58,23256,23257],{"class":64},"    \u002F\u002F静态成员函数的调用方式:\n",[58,23259,23260],{"class":60,"line":2270},[58,23261,23262],{"class":64},"    \u002F\u002F1.通过对象访问\n",[58,23264,23265],{"class":60,"line":2275},[58,23266,15957],{"class":75},[58,23268,23269,23271,23273],{"class":60,"line":2289},[58,23270,16509],{"class":75},[58,23272,12196],{"class":379},[58,23274,6282],{"class":75},[58,23276,23277],{"class":60,"line":2294},[58,23278,23279],{"class":64},"    \u002F\u002F2.通过类名访问\n",[58,23281,23282,23284,23286,23288],{"class":60,"line":2300},[58,23283,19162],{"class":379},[58,23285,18375],{"class":75},[58,23287,12196],{"class":379},[58,23289,6282],{"class":75},[58,23291,23292],{"class":60,"line":2321},[58,23293,108],{"class":75},[19,23295,23296],{"start":68},[22,23297,23298],{},"静态成员函数只能访问静态成员变量",[48,23300,23302],{"className":781,"code":23301,"language":783,"meta":53,"style":53},"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",[55,23303,23304,23310,23314,23318,23322,23332,23336,23350,23355,23367,23371,23382,23392,23396,23400,23404,23414,23418,23431,23435,23439,23443,23447,23461,23469,23473,23477,23481,23485,23493,23497,23507,23512,23516,23524,23528,23534],{"__ignoreMap":53},[58,23305,23306,23308],{"class":60,"line":61},[58,23307,15338],{"class":92},[58,23309,15815],{"class":379},[58,23311,23312],{"class":60,"line":68},[58,23313,2195],{"class":75},[58,23315,23316],{"class":60,"line":79},[58,23317,15360],{"class":92},[58,23319,23320],{"class":60,"line":105},[58,23321,23203],{"class":64},[58,23323,23324,23326,23328,23330],{"class":60,"line":627},[58,23325,11665],{"class":92},[58,23327,23210],{"class":92},[58,23329,12030],{"class":379},[58,23331,2622],{"class":75},[58,23333,23334],{"class":60,"line":509},[58,23335,2676],{"class":75},[58,23337,23338,23341,23343,23345,23347],{"class":60,"line":559},[58,23339,23340],{"class":75},"        m_A",[58,23342,383],{"class":92},[58,23344,1097],{"class":82},[58,23346,846],{"class":75},[58,23348,23349],{"class":64}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[58,23351,23352],{"class":60,"line":654},[58,23353,23354],{"class":64},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[58,23356,23357,23359,23361,23363,23365],{"class":60,"line":671},[58,23358,23223],{"class":75},[58,23360,1827],{"class":92},[58,23362,23228],{"class":386},[58,23364,1827],{"class":92},[58,23366,1849],{"class":75},[58,23368,23369],{"class":60,"line":677},[58,23370,2833],{"class":75},[58,23372,23373,23375,23377,23379],{"class":60,"line":2260},[58,23374,11665],{"class":92},[58,23376,3028],{"class":92},[58,23378,16092],{"class":75},[58,23380,23381],{"class":64}," \u002F\u002F静态成员变量\n",[58,23383,23384,23386,23389],{"class":60,"line":694},[58,23385,2631],{"class":92},[58,23387,23388],{"class":75}," m_B;",[58,23390,23391],{"class":64}," \u002F\u002F非静态成员变量\n",[58,23393,23394],{"class":60,"line":2270},[58,23395,3046],{"emptyLinePlaceholder":720},[58,23397,23398],{"class":60,"line":2275},[58,23399,15866],{"class":92},[58,23401,23402],{"class":60,"line":2289},[58,23403,23016],{"class":64},[58,23405,23406,23408,23410,23412],{"class":60,"line":2294},[58,23407,11665],{"class":92},[58,23409,23210],{"class":92},[58,23411,14262],{"class":379},[58,23413,2622],{"class":75},[58,23415,23416],{"class":60,"line":2300},[58,23417,2676],{"class":75},[58,23419,23420,23422,23424,23427,23429],{"class":60,"line":2321},[58,23421,4097],{"class":75},[58,23423,1827],{"class":92},[58,23425,23426],{"class":386},"\"这是私有权限下的静态函数调用\"",[58,23428,1827],{"class":92},[58,23430,1849],{"class":75},[58,23432,23433],{"class":60,"line":2326},[58,23434,2833],{"class":75},[58,23436,23437],{"class":60,"line":2340},[58,23438,3046],{"emptyLinePlaceholder":720},[58,23440,23441],{"class":60,"line":2345},[58,23442,3046],{"emptyLinePlaceholder":720},[58,23444,23445],{"class":60,"line":2374},[58,23446,4641],{"class":75},[58,23448,23449,23451,23453,23455,23457,23459],{"class":60,"line":2379},[58,23450,796],{"class":92},[58,23452,16213],{"class":379},[58,23454,22846],{"class":75},[58,23456,383],{"class":92},[58,23458,979],{"class":82},[58,23460,102],{"class":75},[58,23462,23463,23465,23467],{"class":60,"line":2396},[58,23464,6010],{"class":92},[58,23466,6234],{"class":379},[58,23468,2622],{"class":75},[58,23470,23471],{"class":60,"line":2401},[58,23472,2195],{"class":75},[58,23474,23475],{"class":60,"line":2406},[58,23476,23257],{"class":64},[58,23478,23479],{"class":60,"line":2411},[58,23480,23262],{"class":64},[58,23482,23483],{"class":60,"line":2425},[58,23484,15957],{"class":75},[58,23486,23487,23489,23491],{"class":60,"line":2430},[58,23488,16509],{"class":75},[58,23490,12196],{"class":379},[58,23492,6282],{"class":75},[58,23494,23495],{"class":60,"line":3223},[58,23496,23279],{"class":64},[58,23498,23499,23501,23503,23505],{"class":60,"line":3237},[58,23500,19162],{"class":379},[58,23502,18375],{"class":75},[58,23504,12196],{"class":379},[58,23506,6282],{"class":75},[58,23508,23509],{"class":60,"line":3245},[58,23510,23511],{"class":64},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[58,23513,23514],{"class":60,"line":3250},[58,23515,108],{"class":75},[58,23517,23518,23520,23522],{"class":60,"line":3256},[58,23519,796],{"class":92},[58,23521,2619],{"class":379},[58,23523,2622],{"class":75},[58,23525,23526],{"class":60,"line":3262},[58,23527,2195],{"class":75},[58,23529,23530,23532],{"class":60,"line":3267},[58,23531,6279],{"class":379},[58,23533,6282],{"class":75},[58,23535,23536],{"class":60,"line":8594},[58,23537,108],{"class":75},[114,23539,23541],{"id":23540},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22641,23543,23545],{"id":23544},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[175,23547,23548],{},"在c++中，类内的成员变量和成员函数分开存储",[175,23550,23551],{},"只有非静态成员变量才属于类的对象上",[23553,23554,23556],"h5",{"id":23555},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[48,23558,23560],{"className":781,"code":23559,"language":783,"meta":53,"style":53},"#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",[55,23561,23562,23569,23579,23585,23589,23593,23597,23605,23609,23613,23636,23640,23648,23652,23658],{"__ignoreMap":53},[58,23563,23564,23566],{"class":60,"line":61},[58,23565,2596],{"class":92},[58,23567,23568],{"class":386},"\u003Ciostraem>\n",[58,23570,23571,23573,23575,23577],{"class":60,"line":68},[58,23572,2604],{"class":92},[58,23574,2607],{"class":92},[58,23576,2610],{"class":379},[58,23578,102],{"class":75},[58,23580,23581,23583],{"class":60,"line":79},[58,23582,15338],{"class":92},[58,23584,15815],{"class":379},[58,23586,23587],{"class":60,"line":105},[58,23588,2195],{"class":75},[58,23590,23591],{"class":60,"line":627},[58,23592,3046],{"emptyLinePlaceholder":720},[58,23594,23595],{"class":60,"line":509},[58,23596,4641],{"class":75},[58,23598,23599,23601,23603],{"class":60,"line":559},[58,23600,6010],{"class":92},[58,23602,6234],{"class":379},[58,23604,2622],{"class":75},[58,23606,23607],{"class":60,"line":654},[58,23608,2195],{"class":75},[58,23610,23611],{"class":60,"line":671},[58,23612,15957],{"class":75},[58,23614,23615,23617,23619,23622,23624,23627,23629,23631,23633],{"class":60,"line":677},[58,23616,2200],{"class":75},[58,23618,1827],{"class":92},[58,23620,23621],{"class":386},"\"size of p=\"",[58,23623,1827],{"class":92},[58,23625,23626],{"class":379},"sizeoif",[58,23628,7185],{"class":75},[58,23630,1827],{"class":92},[58,23632,1892],{"class":75},[58,23634,23635],{"class":64}," \u002F\u002F查看这个空类的占用的内存空间\n",[58,23637,23638],{"class":60,"line":2260},[58,23639,108],{"class":75},[58,23641,23642,23644,23646],{"class":60,"line":694},[58,23643,796],{"class":92},[58,23645,2619],{"class":379},[58,23647,2622],{"class":75},[58,23649,23650],{"class":60,"line":2270},[58,23651,2195],{"class":75},[58,23653,23654,23656],{"class":60,"line":2275},[58,23655,6279],{"class":379},[58,23657,6282],{"class":75},[58,23659,23660],{"class":60,"line":2289},[58,23661,108],{"class":75},[175,23663,23664],{},"输出结果为：size of p=1",[175,23666,23667],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[175,23669,23670],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23553,23672,23674],{"id":23673},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[48,23676,23678],{"className":781,"code":23677,"language":783,"meta":53,"style":53},"#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",[55,23679,23680,23686,23696,23704,23708,23717,23721,23729,23733,23737,23756,23760,23764,23772,23776,23782],{"__ignoreMap":53},[58,23681,23682,23684],{"class":60,"line":61},[58,23683,2596],{"class":92},[58,23685,2599],{"class":386},[58,23687,23688,23690,23692,23694],{"class":60,"line":68},[58,23689,2604],{"class":92},[58,23691,2607],{"class":92},[58,23693,2610],{"class":379},[58,23695,102],{"class":75},[58,23697,23698,23700,23702],{"class":60,"line":79},[58,23699,15338],{"class":92},[58,23701,16213],{"class":379},[58,23703,3320],{"class":75},[58,23705,23706],{"class":60,"line":105},[58,23707,2195],{"class":75},[58,23709,23710,23712,23714],{"class":60,"line":627},[58,23711,2631],{"class":92},[58,23713,16092],{"class":75},[58,23715,23716],{"class":64},"\u002F\u002F非静态成员变量\n",[58,23718,23719],{"class":60,"line":509},[58,23720,4641],{"class":75},[58,23722,23723,23725,23727],{"class":60,"line":559},[58,23724,6010],{"class":92},[58,23726,6234],{"class":379},[58,23728,2622],{"class":75},[58,23730,23731],{"class":60,"line":654},[58,23732,2195],{"class":75},[58,23734,23735],{"class":60,"line":671},[58,23736,15957],{"class":75},[58,23738,23739,23741,23743,23745,23747,23749,23751,23753],{"class":60,"line":677},[58,23740,2200],{"class":75},[58,23742,1827],{"class":92},[58,23744,23621],{"class":386},[58,23746,2022],{"class":92},[58,23748,7185],{"class":75},[58,23750,1827],{"class":92},[58,23752,1892],{"class":75},[58,23754,23755],{"class":64}," \u002F\u002F查看不是空对象时占用多少内存\n",[58,23757,23758],{"class":60,"line":2260},[58,23759,3046],{"emptyLinePlaceholder":720},[58,23761,23762],{"class":60,"line":694},[58,23763,108],{"class":75},[58,23765,23766,23768,23770],{"class":60,"line":2270},[58,23767,796],{"class":92},[58,23769,2619],{"class":379},[58,23771,2622],{"class":75},[58,23773,23774],{"class":60,"line":2275},[58,23775,2195],{"class":75},[58,23777,23778,23780],{"class":60,"line":2289},[58,23779,6279],{"class":379},[58,23781,6282],{"class":75},[58,23783,23784],{"class":60,"line":2294},[58,23785,108],{"class":75},[175,23787,23788],{},"输出结果：size of p=4",[175,23790,23791],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[19,23793,23794],{},[22,23795,23796],{},"如果加上非静态成员变量，Person类修改如下",[48,23798,23800],{"className":781,"code":23799,"language":783,"meta":53,"style":53},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[55,23801,23802,23808,23812,23818,23826,23830,23835],{"__ignoreMap":53},[58,23803,23804,23806],{"class":60,"line":61},[58,23805,15338],{"class":92},[58,23807,15815],{"class":379},[58,23809,23810],{"class":60,"line":68},[58,23811,2195],{"class":75},[58,23813,23814,23816],{"class":60,"line":79},[58,23815,2631],{"class":92},[58,23817,22035],{"class":75},[58,23819,23820,23822,23824],{"class":60,"line":105},[58,23821,11665],{"class":92},[58,23823,3028],{"class":92},[58,23825,22042],{"class":75},[58,23827,23828],{"class":60,"line":627},[58,23829,4641],{"class":75},[58,23831,23832],{"class":60,"line":509},[58,23833,23834],{"class":64},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[58,23836,23837,23839,23841,23843,23845,23847],{"class":60,"line":559},[58,23838,796],{"class":92},[58,23840,16213],{"class":379},[58,23842,23055],{"class":75},[58,23844,383],{"class":92},[58,23846,979],{"class":82},[58,23848,102],{"class":75},[175,23850,23851],{},"输出结果：4",[175,23853,23854],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[19,23856,23857],{"start":68},[22,23858,23859],{},"加上非静态成员函数",[48,23861,23863],{"className":781,"code":23862,"language":783,"meta":53,"style":53},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[55,23864,23865,23872,23876,23882,23890,23894,23898,23902],{"__ignoreMap":53},[58,23866,23867,23869],{"class":60,"line":61},[58,23868,15338],{"class":92},[58,23870,23871],{"class":379},"  Person\n",[58,23873,23874],{"class":60,"line":68},[58,23875,2195],{"class":75},[58,23877,23878,23880],{"class":60,"line":79},[58,23879,2631],{"class":92},[58,23881,22035],{"class":75},[58,23883,23884,23886,23888],{"class":60,"line":105},[58,23885,15553],{"class":92},[58,23887,12030],{"class":379},[58,23889,2622],{"class":75},[58,23891,23892],{"class":60,"line":627},[58,23893,2676],{"class":75},[58,23895,23896],{"class":60,"line":509},[58,23897,3046],{"emptyLinePlaceholder":720},[58,23899,23900],{"class":60,"line":559},[58,23901,2833],{"class":75},[58,23903,23904],{"class":60,"line":654},[58,23905,4641],{"class":75},[175,23907,23908],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[19,23910,23911],{"start":79},[22,23912,23913],{},"加上静态成员函数",[48,23915,23917],{"className":781,"code":23916,"language":783,"meta":53,"style":53},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[55,23918,23919,23925,23929,23935,23943,23947,23951,23955,23966,23970,23974,23978],{"__ignoreMap":53},[58,23920,23921,23923],{"class":60,"line":61},[58,23922,15338],{"class":92},[58,23924,23871],{"class":379},[58,23926,23927],{"class":60,"line":68},[58,23928,2195],{"class":75},[58,23930,23931,23933],{"class":60,"line":79},[58,23932,2631],{"class":92},[58,23934,22035],{"class":75},[58,23936,23937,23939,23941],{"class":60,"line":105},[58,23938,15553],{"class":92},[58,23940,12030],{"class":379},[58,23942,2622],{"class":75},[58,23944,23945],{"class":60,"line":627},[58,23946,2676],{"class":75},[58,23948,23949],{"class":60,"line":509},[58,23950,3046],{"emptyLinePlaceholder":720},[58,23952,23953],{"class":60,"line":559},[58,23954,2833],{"class":75},[58,23956,23957,23959,23961,23964],{"class":60,"line":654},[58,23958,11665],{"class":92},[58,23960,23210],{"class":92},[58,23962,23963],{"class":379}," func1",[58,23965,2622],{"class":75},[58,23967,23968],{"class":60,"line":671},[58,23969,2676],{"class":75},[58,23971,23972],{"class":60,"line":677},[58,23973,3046],{"emptyLinePlaceholder":720},[58,23975,23976],{"class":60,"line":2260},[58,23977,2833],{"class":75},[58,23979,23980],{"class":60,"line":694},[58,23981,4641],{"class":75},[175,23983,23851],{},[175,23985,23986],{},"解释：静态成员函数也不属于类上",[702,23988,8320],{},{"title":53,"searchDepth":68,"depth":68,"links":23990},[23991,23997],{"id":15289,"depth":68,"text":15290,"children":23992},[23993,23994,23995,23996],{"id":15293,"depth":79,"text":15294},{"id":16018,"depth":79,"text":16019},{"id":16190,"depth":79,"text":16191},{"id":16648,"depth":79,"text":16649},{"id":19020,"depth":68,"text":19021,"children":23998},[23999,24000,24001,24002,24003,24004,24005,24006,24007],{"id":19032,"depth":79,"text":19033},{"id":19325,"depth":79,"text":19326},{"id":19816,"depth":79,"text":19817},{"id":20913,"depth":79,"text":20914},{"id":21336,"depth":79,"text":21337},{"id":21815,"depth":79,"text":21816},{"id":22190,"depth":79,"text":22191},{"id":22603,"depth":79,"text":22604},{"id":23540,"depth":79,"text":23541},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15254,"description":24008},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24015,"title":783,"body":24016,"description":717,"extension":718,"meta":24020,"navigation":720,"path":24022,"seo":24023,"stem":24024,"__hash__":24025},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24017,"toc":24018},[],{"title":53,"searchDepth":68,"depth":68,"links":24019},[],{"category":24021},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":783,"description":717},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24027,"title":24028,"body":24029,"description":53,"extension":718,"meta":24620,"navigation":720,"path":24621,"seo":24622,"stem":24623,"__hash__":24624},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24030,"toc":24602},[24031,24034,24038,24041,24044,24047,24065,24070,24073,24076,24079,24082,24087,24090,24095,24098,24101,24105,24108,24111,24117,24120,24138,24142,24146,24149,24154,24157,24161,24164,24177,24180,24184,24187,24190,24193,24218,24221,24230,24241,24256,24288,24292,24299,24307,24311,24314,24317,24322,24326,24329,24332,24337,24340,24344,24347,24350,24355,24358,24362,24367,24371,24438,24442,24445,24448,24451,24454,24457,24463,24484,24487,24501,24510,24514,24517,24520,24525,24528,24533,24538,24541,24544,24549,24554,24557,24562,24567,24570,24575,24580,24583,24586,24591,24594,24599],[10,24032,24028],{"id":24033},"_1强化学习基本认识",[14,24035,24037],{"id":24036},"_11什么是强化学习","1.1.什么是强化学习",[175,24039,24040],{},"强化学习有两部分组成：智能体和环境；",[175,24042,24043],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[175,24045,24046],{},"强化学习与监督学习的区别:",[19,24048,24049,24052,24055,24058],{},[22,24050,24051],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[22,24053,24054],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[22,24056,24057],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[22,24059,24060,24061,24064],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[25,24062,24063],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[175,24066,24067],{},[119,24068],{"alt":53,"src":24069},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[175,24071,24072],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[175,24074,24075],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[175,24077,24078],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[175,24080,24081],{},"获取奖励",[175,24083,24084],{},[119,24085],{"alt":53,"src":24086},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[175,24088,24089],{},"强化学习可以分成标准强化学习和深度强化学习",[175,24091,24092],{},[119,24093],{"alt":53,"src":24094},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[175,24096,24097],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[175,24099,24100],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,24102,24104],{"id":24103},"_12强化学习应用场景","1.2.强化学习应用场景",[175,24106,24107],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[175,24109,24110],{},"具身智能中的应用",[175,24112,24113,24116],{},[25,24114,24115],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[175,24118,24119],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[175,24121,24122,24123,24126,24127,24130,24131,24134,24135],{},"机器人是",[25,24124,24125],{},"躯体","，深度学习是",[25,24128,24129],{},"神经元****网络","，VLA是",[25,24132,24133],{},"通用的行为逻辑","，而强化学习是",[25,24136,24137],{},"教练",[14,24139,24141],{"id":24140},"_13序列决策","1.3.序列决策",[114,24143,24145],{"id":24144},"_131智能体与环境","1.3.1.智能体与环境",[175,24147,24148],{},"强化学习研究的问题是智能体agent与环境交互的问题",[175,24150,24151],{},[119,24152],{"alt":53,"src":24153},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[175,24155,24156],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[114,24158,24160],{"id":24159},"_132奖励","1.3.2.奖励",[175,24162,24163],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[175,24165,24166,24167,24176],{},"取某个策略的表现如何。强化学习的目的就是",[25,24168,24169,24170,24175],{},"最大化",[25,24171,24172],{},[25,24173,24174],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[175,24178,24179],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[114,24181,24183],{"id":24182},"_133序列决策","1.3.3.序列决策",[175,24185,24186],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[175,24188,24189],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[175,24191,24192],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[175,24194,24195,24199,24200,24202,24203,24205,24206,24208,24209,14439,24212,14439,24215],{},[24196,24197,24198],"em",{},"Ht"," = ",[24196,24201,1382],{},"1*, a",[24196,24204,89],{},", r",[24196,24207,89],{},", . . . ,* ",[24196,24210,24211],{},"ot",[24196,24213,24214],{},", at ,",[24196,24216,24217],{},"rt",[175,24219,24220],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[175,24222,24223,24199,24226,2305,24228,1215],{},[24196,24224,24225],{},"st",[24196,24227,843],{},[24196,24229,24198],{},[175,24231,24232,24233,24236,24237,24240],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[25,24234,24235],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[25,24238,24239],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[175,24242,24243,24244,24247,24248,24251,24252,24255],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[25,24245,24246],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[25,24249,24250],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24196,24253,24254],{},"S, A, T, R, Ω, O, γ",")。",[175,24257,24258,24259,24261,24262,24264,24265,793,24267,24270,24271,24273,24274,793,24277,24280,24281,24283,24284,24287],{},"其中 ",[24196,24260,1475],{}," 表示状态空间，为隐变量，",[24196,24263,1019],{}," 为动作空间，",[24196,24266,1500],{},[24196,24268,24269],{},"s ′ |s, a",") 为状态转移概率，",[24196,24272,1450],{}," 为奖励函数，",[24196,24275,24276],{},"Ω",[24196,24278,24279],{},"o|s, a",") 为观测概率，",[24196,24282,1376],{}," 为观测空间，",[24196,24285,24286],{},"γ"," 为折扣因子。",[14,24289,24291],{"id":24290},"_14动作空间","1.4.动作空间",[175,24293,24294,24295,24298],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[25,24296,24297],{},"动作空间"," ，动作空间分为:",[19,24300,24301,24304],{},[22,24302,24303],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[22,24305,24306],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,24308,24310],{"id":24309},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[175,24312,24313],{},"由策略、价值函数、模型三部分组成",[175,24315,24316],{},"这三者组成马尔可夫决策过程",[175,24318,24319],{},[119,24320],{"alt":53,"src":24321},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[114,24323,24325],{"id":24324},"_151策略","1.5.1.策略",[175,24327,24328],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[175,24330,24331],{},"策略可分为两种：",[175,24333,24334],{},[119,24335],{"alt":53,"src":24336},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[175,24338,24339],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[114,24341,24343],{"id":24342},"_152价值函数","1.5.2.价值函数",[175,24345,24346],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[175,24348,24349],{},"价值函数中有一个折扣因子，类似于存款利息",[175,24351,24352],{},[119,24353],{"alt":53,"src":24354},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[175,24356,24357],{},"进入某个状态采取的最优动作可以通过Q函数得到",[114,24359,24361],{"id":24360},"_153模型","1.5.3.模型",[175,24363,24364],{},[119,24365],{"alt":53,"src":24366},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,24368,24370],{"id":24369},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[926,24372,24373,24384],{},[929,24374,24375],{},[932,24376,24377,24381],{},[935,24378,24380],{"align":24379},"left","类型",[935,24382,24383],{"align":24379},"特点",[972,24385,24386,24396,24406,24416,24428],{},[932,24387,24388,24393],{},[977,24389,24390],{"align":24379},[25,24391,24392],{},"基于价值的智能体",[977,24394,24395],{"align":24379},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[932,24397,24398,24403],{},[977,24399,24400],{"align":24379},[25,24401,24402],{},"基于策略的智能体",[977,24404,24405],{"align":24379},"直接学习策略，没有学习价值函数",[932,24407,24408,24413],{},[977,24409,24410],{"align":24379},[25,24411,24412],{},"演员-评论员智能体",[977,24414,24415],{"align":24379},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[932,24417,24418,24423],{},[977,24419,24420],{"align":24379},[25,24421,24422],{},"有模型强化学习智能体",[977,24424,24425],{"align":24379},[119,24426],{"alt":53,"src":24427},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[932,24429,24430,24435],{},[977,24431,24432],{"align":24379},[25,24433,24434],{},"免模型强化学习智能体",[977,24436,24437],{"align":24379},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,24439,24441],{"id":24440},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[175,24443,24444],{},"学习和规划是序列决策的两个基本问题",[175,24446,24447],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[175,24449,24450],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[175,24452,24453],{},"强化学习用到的库：Gym",[175,24455,24456],{},"Gym可以检验强化学习算法的优劣",[175,24458,24459,24462],{},[25,24460,24461],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[48,24464,24468],{"className":24465,"code":24466,"language":24467,"meta":53,"style":53},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[55,24469,24470],{"__ignoreMap":53},[58,24471,24472,24475,24478,24481],{"class":60,"line":61},[58,24473,24474],{"class":379},"pip",[58,24476,24477],{"class":386}," install",[58,24479,24480],{"class":386}," gym==",[58,24482,24483],{"class":82},"0.25.2\n",[175,24485,24486],{},"显示图形界面需要",[48,24488,24490],{"className":24465,"code":24489,"language":24467,"meta":53,"style":53},"pip install pygame\n",[55,24491,24492],{"__ignoreMap":53},[58,24493,24494,24496,24498],{"class":60,"line":61},[58,24495,24474],{"class":379},[58,24497,24477],{"class":386},[58,24499,24500],{"class":386}," pygame\n",[175,24502,24503,24504],{},"有关Gym库的相关文档介绍：",[376,24505,24509],{"href":24506,"rel":24507},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24508],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,24511,24513],{"id":24512},"_18一些补充基础概念","1.8.一些补充基础概念",[175,24515,24516],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[175,24518,24519],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[175,24521,24522],{},[119,24523],{"alt":53,"src":24524},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[175,24526,24527],{},"折扣率需要自己来设定",[175,24529,24530],{},[119,24531],{"alt":53,"src":24532},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[19,24534,24535],{},[22,24536,24537],{},"状态转移函数：",[175,24539,24540],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[175,24542,24543],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[175,24545,24546],{},[119,24547],{"alt":53,"src":24548},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[19,24550,24551],{"start":68},[22,24552,24553],{},"动作价值函数：",[175,24555,24556],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[175,24558,24559],{},[119,24560],{"alt":53,"src":24561},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[19,24563,24564],{"start":79},[22,24565,24566],{},"最优动作价值函数：",[175,24568,24569],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[175,24571,24572],{},[119,24573],{"alt":53,"src":24574},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[19,24576,24577],{"start":105},[22,24578,24579],{},"状态价值函数:",[175,24581,24582],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[175,24584,24585],{},"它衡量的是“一个具体动作”的长期价值",[175,24587,24588],{},[119,24589],{"alt":53,"src":24590},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[175,24592,24593],{},"几个价值函数之间的比较：",[175,24595,24596],{},[119,24597],{"alt":53,"src":24598},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[702,24600,24601],{},"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":53,"searchDepth":68,"depth":68,"links":24603},[24604,24605,24606,24611,24612,24617,24618,24619],{"id":24036,"depth":68,"text":24037},{"id":24103,"depth":68,"text":24104},{"id":24140,"depth":68,"text":24141,"children":24607},[24608,24609,24610],{"id":24144,"depth":79,"text":24145},{"id":24159,"depth":79,"text":24160},{"id":24182,"depth":79,"text":24183},{"id":24290,"depth":68,"text":24291},{"id":24309,"depth":68,"text":24310,"children":24613},[24614,24615,24616],{"id":24324,"depth":79,"text":24325},{"id":24342,"depth":79,"text":24343},{"id":24360,"depth":79,"text":24361},{"id":24369,"depth":68,"text":24370},{"id":24440,"depth":68,"text":24441},{"id":24512,"depth":68,"text":24513},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24028,"description":53},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24626,"title":24627,"body":24628,"description":24635,"extension":718,"meta":24646,"navigation":720,"path":24647,"seo":24648,"stem":24649,"__hash__":24650},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24629,"toc":24644},[24630,24633,24636,24641],[10,24631,24627],{"id":24632},"_2马尔可夫决策过程",[175,24634,24635],{},"这是强化学习的基本框架",[175,24637,24638],{},[119,24639],{"alt":53,"src":24640},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[175,24642,24643],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":53,"searchDepth":68,"depth":68,"links":24645},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24627,"description":24635},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24652,"title":24653,"body":24654,"description":53,"extension":718,"meta":24770,"navigation":720,"path":24771,"seo":24772,"stem":24773,"__hash__":24774},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24655,"toc":24765},[24656,24659,24663,24666,24671,24676,24679,24684,24687,24692,24695,24699,24704,24707,24712,24717,24722,24725,24729,24734,24737,24742,24747,24752,24757,24760],[10,24657,24653],{"id":24658},"_3动作价值函数",[14,24660,24662],{"id":24661},"_31dqn","3.1.DQN",[175,24664,24665],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[175,24667,24668],{},[119,24669],{"alt":53,"src":24670},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[175,24672,24673],{},[119,24674],{"alt":53,"src":24675},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[175,24677,24678],{},"DQN算法的描述：",[175,24680,24681],{},[119,24682],{"alt":53,"src":24683},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[175,24685,24686],{},"这里的Dense指的是全连接层",[175,24688,24689],{},[119,24690],{"alt":53,"src":24691},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[175,24693,24694],{},"当前观测的状态为St，用DQN把St作为输入，给所有的动作打分，选出动作最高的动作作为at，agent做出at动作后，环境会改变状态，用状态转移函数p来随机抽一个新的状态st+1，环境还会告诉我们这一步的奖励Rt，这个奖励可以+-0，奖励是强化学习中的监督信号，DQN要靠这些奖励来训练，有了新的状态St+1，DQN会再对所有的动作打分，agent选择分数最高的动作作为at+1，agent执行at+1后，环境会再更新状态s和再给一个奖励R，然后会继续重复之前的动作 训练DQN的最常用方法是TD算法",[14,24696,24698],{"id":24697},"_32dqn的举例","3.2.DQN的举例",[175,24700,24701],{},[119,24702],{"alt":53,"src":24703},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[175,24705,24706],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[175,24708,24709],{},[119,24710],{"alt":53,"src":24711},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[175,24713,24714],{},[119,24715],{"alt":53,"src":24716},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[175,24718,24719],{},[119,24720],{"alt":53,"src":24721},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[175,24723,24724],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,24726,24728],{"id":24727},"_33td算法","3.3.TD算法",[175,24730,24731],{},[119,24732],{"alt":53,"src":24733},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[175,24735,24736],{},"强化学习TD算法公式的粗略解释：",[175,24738,24739],{},[119,24740],{"alt":53,"src":24741},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[175,24743,24744],{},[119,24745],{"alt":53,"src":24746},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[175,24748,24749],{},[119,24750],{"alt":53,"src":24751},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[175,24753,24754],{},[119,24755],{"alt":53,"src":24756},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[175,24758,24759],{},"TD算法总结：",[175,24761,24762],{},[119,24763],{"alt":53,"src":24764},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":53,"searchDepth":68,"depth":68,"links":24766},[24767,24768,24769],{"id":24661,"depth":68,"text":24662},{"id":24697,"depth":68,"text":24698},{"id":24727,"depth":68,"text":24728},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24653,"description":53},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24776,"title":24777,"body":24778,"description":53,"extension":718,"meta":25011,"navigation":720,"path":25012,"seo":25013,"stem":25014,"__hash__":25015},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24779,"toc":25007},[24780,24783,24787,24790,24793,24798,24803,24806,24811,24816,24819,24824,24827,24832,24835,24840,24843,24848,24851,24856,24861,24864,24869,24872,24875,24880,24883,24888,24893,24897,24900,24903,24908,24913,24916,24921,24926,24929,24934,24937,24940,24945,24948,24953,24956,24961,24966,24969,24974,24979,24982,24987,24990,24995,24998],[10,24781,24777],{"id":24782},"_4策略学习",[14,24784,24786],{"id":24785},"_41概念描述","4.1.概念描述",[175,24788,24789],{},"用神经网络（策略网络）近似策略函数",[175,24791,24792],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[175,24794,24795],{},[119,24796],{"alt":53,"src":24797},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[175,24799,24800],{},[119,24801],{"alt":53,"src":24802},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[175,24804,24805],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[175,24807,24808],{},[119,24809],{"alt":53,"src":24810},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[175,24812,24813],{},[119,24814],{"alt":53,"src":24815},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[175,24817,24818],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[175,24820,24821],{},[119,24822],{"alt":53,"src":24823},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[175,24825,24826],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[175,24828,24829],{},[119,24830],{"alt":53,"src":24831},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[175,24833,24834],{},"改进theta要用到策略梯度算法",[175,24836,24837],{},[119,24838],{"alt":53,"src":24839},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[175,24841,24842],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[175,24844,24845],{},[119,24846],{"alt":53,"src":24847},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[175,24849,24850],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[175,24852,24853],{},[119,24854],{"alt":53,"src":24855},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[175,24857,24858],{},[119,24859],{"alt":53,"src":24860},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[175,24862,24863],{},"梯度公式总结：",[175,24865,24866],{},[119,24867],{"alt":53,"src":24868},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[175,24870,24871],{},"两个公式的分别应用场景：",[175,24873,24874],{},"对于离散的动作：",[175,24876,24877],{},[119,24878],{"alt":53,"src":24879},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[175,24881,24882],{},"对于连续的动作：",[175,24884,24885],{},[119,24886],{"alt":53,"src":24887},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[175,24889,24890],{},[119,24891],{"alt":53,"src":24892},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,24894,24896],{"id":24895},"_42概率梯度算法总结","4.2.概率梯度算法总结",[175,24898,24899],{},"使用蒙特卡洛来近似计算策略梯度",[175,24901,24902],{},"蒙特卡洛法的解释如下：",[175,24904,24905],{},[119,24906],{"alt":53,"src":24907},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[175,24909,24910],{},[119,24911],{"alt":53,"src":24912},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[175,24914,24915],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[19,24917,24918],{},[22,24919,24920],{},"方法一：reinforce算法",[175,24922,24923],{},[119,24924],{"alt":53,"src":24925},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[175,24927,24928],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[19,24930,24931],{"start":68},[22,24932,24933],{},"方法二：actor-critic算法",[175,24935,24936],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[175,24938,24939],{},"两个网络的构建：",[175,24941,24942],{},[119,24943],{"alt":53,"src":24944},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[175,24946,24947],{},"actor网路：",[175,24949,24950],{},[119,24951],{"alt":53,"src":24952},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[175,24954,24955],{},"critic网络",[175,24957,24958],{},[119,24959],{"alt":53,"src":24960},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[19,24962,24963],{"start":79},[22,24964,24965],{},"网络的训练",[175,24967,24968],{},"网络描述",[175,24970,24971],{},[119,24972],{"alt":53,"src":24973},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[175,24975,24976],{},[119,24977],{"alt":53,"src":24978},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[175,24980,24981],{},"TD算法更新梯度：",[175,24983,24984],{},[119,24985],{"alt":53,"src":24986},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[175,24988,24989],{},"策略网络更新梯度：",[175,24991,24992],{},[119,24993],{"alt":53,"src":24994},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[175,24996,24997],{},"训练整个流程的具体描述：",[175,24999,25000,25003,25004],{},[119,25001],{"alt":53,"src":25002},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[119,25005],{"alt":53,"src":25006},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":53,"searchDepth":68,"depth":68,"links":25008},[25009,25010],{"id":24785,"depth":68,"text":24786},{"id":24895,"depth":68,"text":24896},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24777,"description":53},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25017,"title":25018,"body":25019,"description":25026,"extension":718,"meta":25076,"navigation":720,"path":25077,"seo":25078,"stem":25079,"__hash__":25080},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25020,"toc":25072},[25021,25024,25027,25031,25034,25039,25043,25046,25051,25054,25059,25064,25067],[10,25022,25018],{"id":25023},"_5alphago算法",[175,25025,25026],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,25028,25030],{"id":25029},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[175,25032,25033],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[175,25035,25036],{},[119,25037],{"alt":53,"src":25038},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,25040,25042],{"id":25041},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[175,25044,25045],{},"采用强化学习的方式训练策略网络",[175,25047,25048],{},[119,25049],{"alt":53,"src":25050},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[175,25052,25053],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[175,25055,25056],{},[119,25057],{"alt":53,"src":25058},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[175,25060,25061],{},[119,25062],{"alt":53,"src":25063},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[175,25065,25066],{},"强化学习训练策略网络的总结：",[175,25068,25069],{},[119,25070],{"alt":53,"src":25071},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":53,"searchDepth":68,"depth":68,"links":25073},[25074,25075],{"id":25029,"depth":68,"text":25030},{"id":25041,"depth":68,"text":25042},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25018,"description":25026},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25082,"title":25083,"body":25084,"description":25091,"extension":718,"meta":25094,"navigation":720,"path":25095,"seo":25096,"stem":25097,"__hash__":25098},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25085,"toc":25092},[25086,25089],[10,25087,25083],{"id":25088},"_6价值网络",[175,25090,25091],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":53,"searchDepth":68,"depth":68,"links":25093},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25083,"description":25091},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25100,"title":25101,"body":25102,"description":25106,"extension":718,"meta":25107,"navigation":720,"path":25108,"seo":25109,"stem":25110,"__hash__":25111},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25103,"toc":25104},[],{"title":53,"searchDepth":68,"depth":68,"links":25105},[],"记录自己的强化学习笔记。",{"category":24021},"\u002Fwiki\u002F2025-12-04",{"title":25101,"description":25106},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25113,"title":25114,"body":25115,"description":717,"extension":718,"meta":25154,"navigation":720,"path":25155,"seo":25156,"stem":25157,"__hash__":25158},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25116,"toc":25152},[25117,25120,25123,25129,25132,25138,25141,25146,25149],[10,25118,25114],{"id":25119},"_1-项目概览与官方资源",[175,25121,25122],{},"官方文档：",[175,25124,25125],{},[376,25126,25127],{"href":25127,"rel":25128},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24508],[175,25130,25131],{},"官方代码仓库：",[175,25133,25134],{},[376,25135,25136],{"href":25136,"rel":25137},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24508],[175,25139,25140],{},"复现大体流程：",[175,25142,25143],{},[119,25144],{"alt":53,"src":25145},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[175,25147,25148],{},"本教程的目标是打通这条链路：",[175,25150,25151],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":53,"searchDepth":68,"depth":68,"links":25153},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25114,"description":717},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25160,"title":25161,"body":25162,"description":717,"extension":718,"meta":25278,"navigation":720,"path":25279,"seo":25280,"stem":25281,"__hash__":25282},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25163,"toc":25273},[25164,25167,25171,25174,25181,25185,25188,25197,25207,25211,25241,25244,25270],[10,25165,25161],{"id":25166},"_2-环境准备与设备连接",[14,25168,25170],{"id":25169},"_21-系统与环境","2.1 系统与环境",[175,25172,25173],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[175,25175,25176,25177,25180],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[55,25178,25179],{},"lerobot"," 依赖。",[14,25182,25184],{"id":25183},"_22-机械臂串口识别","2.2 机械臂串口识别",[175,25186,25187],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[48,25189,25191],{"className":24465,"code":25190,"language":24467,"meta":53,"style":53},"lerobot-find-out\n",[55,25192,25193],{"__ignoreMap":53},[58,25194,25195],{"class":60,"line":61},[58,25196,25190],{"class":379},[175,25198,25199,25200,1000,25203,25206],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[55,25201,25202],{},"\u002Fdev\u002FttyACM0",[55,25204,25205],{},"\u002Fdev\u002FttyACM1","）。",[14,25208,25210],{"id":25209},"_23-串口授权","2.3 串口授权",[48,25212,25214],{"className":24465,"code":25213,"language":24467,"meta":53,"style":53},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[55,25215,25216,25230],{"__ignoreMap":53},[58,25217,25218,25221,25224,25227],{"class":60,"line":61},[58,25219,25220],{"class":379},"sudo",[58,25222,25223],{"class":386}," chmod",[58,25225,25226],{"class":82}," 666",[58,25228,25229],{"class":386}," \u002Fdev\u002FttyACM0\n",[58,25231,25232,25234,25236,25238],{"class":60,"line":68},[58,25233,25220],{"class":379},[58,25235,25223],{"class":386},[58,25237,25226],{"class":82},[58,25239,25240],{"class":386}," \u002Fdev\u002FttyACM1\n",[175,25242,25243],{},"说明：",[124,25245,25246,25251,25257,25267],{},[22,25247,25248,25250],{},[55,25249,25220],{},"：以 root 权限执行命令。",[22,25252,25253,25256],{},[55,25254,25255],{},"chmod","：修改设备节点权限。",[22,25258,25259,25262,25263,25266],{},[55,25260,25261],{},"666","：",[55,25264,25265],{},"rw-rw-rw-","，所有用户可读写。",[22,25268,25269],{},"串口号必须替换为你机器上的真实端口。",[702,25271,25272],{},"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":53,"searchDepth":68,"depth":68,"links":25274},[25275,25276,25277],{"id":25169,"depth":68,"text":25170},{"id":25183,"depth":68,"text":25184},{"id":25209,"depth":68,"text":25210},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25161,"description":717},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25284,"title":25285,"body":25286,"description":717,"extension":718,"meta":25447,"navigation":720,"path":25448,"seo":25449,"stem":25450,"__hash__":25451},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25287,"toc":25443},[25288,25292,25296,25302,25305,25362,25365,25369,25372,25440],[10,25289,25291],{"id":25290},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,25293,25295],{"id":25294},"_31-配置电机-id","3.1 配置电机 ID",[175,25297,25298,25299,25301],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[55,25300,89],{},"，需要改成机械臂链路里不冲突的编号。",[175,25303,25304],{},"方式一：用 LeRobot 命令逐步写入。",[48,25306,25308],{"className":24465,"code":25307,"language":24467,"meta":53,"style":53},"# 主臂舵机配置 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",[55,25309,25310,25315,25323,25330,25335,25339,25344,25350,25357],{"__ignoreMap":53},[58,25311,25312],{"class":60,"line":61},[58,25313,25314],{"class":64},"# 主臂舵机配置 ID\n",[58,25316,25317,25320],{"class":60,"line":68},[58,25318,25319],{"class":379},"lerobot-setup-motors",[58,25321,25322],{"class":82}," \\\n",[58,25324,25325,25328],{"class":60,"line":79},[58,25326,25327],{"class":82},"  --teleop.type=so101_leader",[58,25329,25322],{"class":82},[58,25331,25332],{"class":60,"line":105},[58,25333,25334],{"class":82},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[58,25336,25337],{"class":60,"line":627},[58,25338,3046],{"emptyLinePlaceholder":720},[58,25340,25341],{"class":60,"line":509},[58,25342,25343],{"class":64},"# 从臂舵机配置 ID\n",[58,25345,25346,25348],{"class":60,"line":559},[58,25347,25319],{"class":379},[58,25349,25322],{"class":82},[58,25351,25352,25355],{"class":60,"line":654},[58,25353,25354],{"class":82},"  --robot.type=so101_follower",[58,25356,25322],{"class":82},[58,25358,25359],{"class":60,"line":671},[58,25360,25361],{"class":82},"  --robot.port=\u002Fdev\u002FttyACM1\n",[175,25363,25364],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,25366,25368],{"id":25367},"_32-机械臂校准","3.2 机械臂校准",[175,25370,25371],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[48,25373,25375],{"className":24465,"code":25374,"language":24467,"meta":53,"style":53},"# 主臂校准\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",[55,25376,25377,25382,25389,25395,25402,25407,25411,25416,25422,25428,25435],{"__ignoreMap":53},[58,25378,25379],{"class":60,"line":61},[58,25380,25381],{"class":64},"# 主臂校准\n",[58,25383,25384,25387],{"class":60,"line":68},[58,25385,25386],{"class":379},"lerobot-calibrate",[58,25388,25322],{"class":82},[58,25390,25391,25393],{"class":60,"line":79},[58,25392,25327],{"class":82},[58,25394,25322],{"class":82},[58,25396,25397,25400],{"class":60,"line":105},[58,25398,25399],{"class":82},"  --teleop.port=\u002Fdev\u002FttyACM0",[58,25401,25322],{"class":82},[58,25403,25404],{"class":60,"line":627},[58,25405,25406],{"class":82},"  --teleop.id=my_awesome_leader_arm\n",[58,25408,25409],{"class":60,"line":509},[58,25410,3046],{"emptyLinePlaceholder":720},[58,25412,25413],{"class":60,"line":559},[58,25414,25415],{"class":64},"# 从臂校准\n",[58,25417,25418,25420],{"class":60,"line":654},[58,25419,25386],{"class":379},[58,25421,25322],{"class":82},[58,25423,25424,25426],{"class":60,"line":671},[58,25425,25354],{"class":82},[58,25427,25322],{"class":82},[58,25429,25430,25433],{"class":60,"line":677},[58,25431,25432],{"class":82},"  --robot.port=\u002Fdev\u002FttyACM1",[58,25434,25322],{"class":82},[58,25436,25437],{"class":60,"line":2260},[58,25438,25439],{"class":82},"  --robot.id=my_awesome_follower_arm\n",[702,25441,25442],{},"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":53,"searchDepth":68,"depth":68,"links":25444},[25445,25446],{"id":25294,"depth":68,"text":25295},{"id":25367,"depth":68,"text":25368},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25285,"description":717},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25453,"title":25454,"body":25455,"description":717,"extension":718,"meta":25646,"navigation":720,"path":25647,"seo":25648,"stem":25649,"__hash__":25650},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25456,"toc":25642},[25457,25460,25464,25511,25515,25528,25591,25594,25639],[10,25458,25454],{"id":25459},"_4-遥操与相机接入",[14,25461,25463],{"id":25462},"_41-不带相机遥操","4.1 不带相机遥操",[48,25465,25467],{"className":24465,"code":25466,"language":24467,"meta":53,"style":53},"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",[55,25468,25469,25476,25482,25488,25495,25501,25507],{"__ignoreMap":53},[58,25470,25471,25474],{"class":60,"line":61},[58,25472,25473],{"class":379},"lerobot-teleoperate",[58,25475,25322],{"class":82},[58,25477,25478,25480],{"class":60,"line":68},[58,25479,25354],{"class":82},[58,25481,25322],{"class":82},[58,25483,25484,25486],{"class":60,"line":79},[58,25485,25432],{"class":82},[58,25487,25322],{"class":82},[58,25489,25490,25493],{"class":60,"line":105},[58,25491,25492],{"class":82},"  --robot.id=my_awesome_follower_arm",[58,25494,25322],{"class":82},[58,25496,25497,25499],{"class":60,"line":627},[58,25498,25327],{"class":82},[58,25500,25322],{"class":82},[58,25502,25503,25505],{"class":60,"line":509},[58,25504,25399],{"class":82},[58,25506,25322],{"class":82},[58,25508,25509],{"class":60,"line":559},[58,25510,25406],{"class":82},[14,25512,25514],{"id":25513},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[48,25516,25518],{"className":24465,"code":25517,"language":24467,"meta":53,"style":53},"lerobot-find-cameras opencv\n",[55,25519,25520],{"__ignoreMap":53},[58,25521,25522,25525],{"class":60,"line":61},[58,25523,25524],{"class":379},"lerobot-find-cameras",[58,25526,25527],{"class":386}," opencv\n",[48,25529,25531],{"className":24465,"code":25530,"language":24467,"meta":53,"style":53},"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",[55,25532,25533,25539,25545,25551,25557,25567,25573,25579,25586],{"__ignoreMap":53},[58,25534,25535,25537],{"class":60,"line":61},[58,25536,25473],{"class":379},[58,25538,25322],{"class":82},[58,25540,25541,25543],{"class":60,"line":68},[58,25542,25354],{"class":82},[58,25544,25322],{"class":82},[58,25546,25547,25549],{"class":60,"line":79},[58,25548,25432],{"class":82},[58,25550,25322],{"class":82},[58,25552,25553,25555],{"class":60,"line":105},[58,25554,25492],{"class":82},[58,25556,25322],{"class":82},[58,25558,25559,25562,25565],{"class":60,"line":627},[58,25560,25561],{"class":82},"  --robot.cameras=",[58,25563,25564],{"class":386},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[58,25566,25322],{"class":82},[58,25568,25569,25571],{"class":60,"line":509},[58,25570,25327],{"class":82},[58,25572,25322],{"class":82},[58,25574,25575,25577],{"class":60,"line":559},[58,25576,25399],{"class":82},[58,25578,25322],{"class":82},[58,25580,25581,25584],{"class":60,"line":654},[58,25582,25583],{"class":82},"  --teleop.id=my_awesome_leader_arm",[58,25585,25322],{"class":82},[58,25587,25588],{"class":60,"line":671},[58,25589,25590],{"class":82},"  --display_data=true\n",[175,25592,25593],{},"相机参数说明：",[124,25595,25596,25602,25608,25617,25627,25633],{},[22,25597,25598,25601],{},[55,25599,25600],{},"front","：相机名称。",[22,25603,25604,25607],{},[55,25605,25606],{},"type: opencv","：相机驱动类型。",[22,25609,25610,25613,25614,25206],{},[55,25611,25612],{},"index_or_path","：设备编号或设备路径（如 ",[55,25615,25616],{},"\u002Fdev\u002Fvideo4",[22,25618,25619,25622,25623,25626],{},[55,25620,25621],{},"width"," \u002F ",[55,25624,25625],{},"height","：图像分辨率。",[22,25628,25629,25632],{},[55,25630,25631],{},"fps","：采样帧率。",[22,25634,25635,25638],{},[55,25636,25637],{},"--display_data=true","：启用实时可视化。",[702,25640,25641],{},"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":53,"searchDepth":68,"depth":68,"links":25643},[25644,25645],{"id":25462,"depth":68,"text":25463},{"id":25513,"depth":68,"text":25514},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25454,"description":717},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25652,"title":25653,"body":25654,"description":717,"extension":718,"meta":25826,"navigation":720,"path":25827,"seo":25828,"stem":25829,"__hash__":25830},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25655,"toc":25821},[25656,25660,25664,25669,25674,25677,25719,25725,25729,25778,25783,25787,25790,25798,25803,25808,25813,25818],[10,25657,25659],{"id":25658},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25661,25663],{"id":25662},"_51-生成访问令牌","5.1 生成访问令牌",[175,25665,25666],{},[119,25667],{"alt":53,"src":25668},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[175,25670,25671],{},[119,25672],{"alt":53,"src":25673},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[175,25675,25676],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[48,25678,25680],{"className":24465,"code":25679,"language":24467,"meta":53,"style":53},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[55,25681,25682,25695],{"__ignoreMap":53},[58,25683,25684,25687,25690,25692],{"class":60,"line":61},[58,25685,25686],{"class":92},"export",[58,25688,25689],{"class":75}," HF_TOKEN",[58,25691,383],{"class":92},[58,25693,25694],{"class":386},"\"your_huggingface_token\"\n",[58,25696,25697,25700,25703,25706,25709,25711,25714,25716],{"class":60,"line":68},[58,25698,25699],{"class":379},"hf",[58,25701,25702],{"class":386}," auth",[58,25704,25705],{"class":386}," login",[58,25707,25708],{"class":82}," --token",[58,25710,10369],{"class":386},[58,25712,25713],{"class":75},"$HF_TOKEN",[58,25715,1037],{"class":386},[58,25717,25718],{"class":82}," --add-to-git-credential\n",[175,25720,25721,25724],{},[55,25722,25723],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25726,25728],{"id":25727},"_52-验证登录","5.2 验证登录",[48,25730,25732],{"className":24465,"code":25731,"language":24467,"meta":53,"style":53},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[55,25733,25734,25765],{"__ignoreMap":53},[58,25735,25736,25739,25741,25744,25746,25748,25751,25754,25757,25760,25763],{"class":60,"line":61},[58,25737,25738],{"class":75},"HF_USER",[58,25740,383],{"class":92},[58,25742,25743],{"class":75},"$(",[58,25745,25699],{"class":379},[58,25747,25702],{"class":386},[58,25749,25750],{"class":386}," whoami",[58,25752,25753],{"class":92}," |",[58,25755,25756],{"class":379}," head",[58,25758,25759],{"class":82}," -n",[58,25761,25762],{"class":82}," 1",[58,25764,799],{"class":75},[58,25766,25767,25770,25772,25775],{"class":60,"line":68},[58,25768,25769],{"class":82},"echo",[58,25771,10369],{"class":386},[58,25773,25774],{"class":75},"$HF_USER",[58,25776,25777],{"class":386},"\"\n",[175,25779,25780],{},[119,25781],{"alt":53,"src":25782},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,25784,25786],{"id":25785},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[175,25788,25789],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[124,25791,25792,25795],{},[22,25793,25794],{},"Dataset Repo（用于上传演示数据）",[22,25796,25797],{},"Model Repo（用于上传训练后的 ACT 权重）",[175,25799,25800],{},[119,25801],{"alt":53,"src":25802},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[175,25804,25805],{},[119,25806],{"alt":53,"src":25807},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[175,25809,25810],{},[119,25811],{"alt":53,"src":25812},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[175,25814,25815],{},[119,25816],{"alt":53,"src":25817},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[702,25819,25820],{},"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":53,"searchDepth":68,"depth":68,"links":25822},[25823,25824,25825],{"id":25662,"depth":68,"text":25663},{"id":25727,"depth":68,"text":25728},{"id":25785,"depth":68,"text":25786},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25653,"description":717},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25832,"title":25833,"body":25834,"description":717,"extension":718,"meta":26031,"navigation":720,"path":26032,"seo":26033,"stem":26034,"__hash__":26035},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25835,"toc":26026},[25836,25840,25844,25940,25948,25953,25957,25973,25976,25980,26023],[10,25837,25839],{"id":25838},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,25841,25843],{"id":25842},"_61-录制示教数据","6.1 录制示教数据",[48,25845,25847],{"className":24465,"code":25846,"language":24467,"meta":53,"style":53},"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",[55,25848,25849,25856,25862,25868,25874,25883,25889,25895,25901,25908,25918,25925,25935],{"__ignoreMap":53},[58,25850,25851,25854],{"class":60,"line":61},[58,25852,25853],{"class":379},"lerobot-record",[58,25855,25322],{"class":82},[58,25857,25858,25860],{"class":60,"line":68},[58,25859,25354],{"class":82},[58,25861,25322],{"class":82},[58,25863,25864,25866],{"class":60,"line":79},[58,25865,25432],{"class":82},[58,25867,25322],{"class":82},[58,25869,25870,25872],{"class":60,"line":105},[58,25871,25492],{"class":82},[58,25873,25322],{"class":82},[58,25875,25876,25878,25881],{"class":60,"line":627},[58,25877,25561],{"class":82},[58,25879,25880],{"class":386},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[58,25882,25322],{"class":82},[58,25884,25885,25887],{"class":60,"line":509},[58,25886,25327],{"class":82},[58,25888,25322],{"class":82},[58,25890,25891,25893],{"class":60,"line":559},[58,25892,25399],{"class":82},[58,25894,25322],{"class":82},[58,25896,25897,25899],{"class":60,"line":654},[58,25898,25583],{"class":82},[58,25900,25322],{"class":82},[58,25902,25903,25906],{"class":60,"line":671},[58,25904,25905],{"class":82},"  --display_data=true",[58,25907,25322],{"class":82},[58,25909,25910,25913,25916],{"class":60,"line":677},[58,25911,25912],{"class":82},"  --dataset.repo_id=",[58,25914,25915],{"class":386},"\"Embodied-AI-6\u002Fso101_test\"",[58,25917,25322],{"class":82},[58,25919,25920,25923],{"class":60,"line":2260},[58,25921,25922],{"class":82},"  --dataset.num_episodes=10",[58,25924,25322],{"class":82},[58,25926,25927,25930,25933],{"class":60,"line":694},[58,25928,25929],{"class":82},"  --dataset.single_task=",[58,25931,25932],{"class":386},"\"Grab the green cube\"",[58,25934,25322],{"class":82},[58,25936,25937],{"class":60,"line":2270},[58,25938,25939],{"class":82},"  --resume=true\n",[124,25941,25942],{},[22,25943,25944,25947],{},[55,25945,25946],{},"--resume=true","：已有同一数据集时继续追加 episode。",[175,25949,25950],{},[119,25951],{"alt":53,"src":25952},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,25954,25956],{"id":25955},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[48,25958,25960],{"className":24465,"code":25959,"language":24467,"meta":53,"style":53},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[55,25961,25962],{"__ignoreMap":53},[58,25963,25964,25967,25970],{"class":60,"line":61},[58,25965,25966],{"class":379},"rm",[58,25968,25969],{"class":82}," -rf",[58,25971,25972],{"class":386}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[175,25974,25975],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,25977,25979],{"id":25978},"_63-回放指定-episode","6.3 回放指定 episode",[48,25981,25983],{"className":24465,"code":25982,"language":24467,"meta":53,"style":53},"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",[55,25984,25985,25992,25998,26004,26010,26018],{"__ignoreMap":53},[58,25986,25987,25990],{"class":60,"line":61},[58,25988,25989],{"class":379},"lerobot-replay",[58,25991,25322],{"class":82},[58,25993,25994,25996],{"class":60,"line":68},[58,25995,25354],{"class":82},[58,25997,25322],{"class":82},[58,25999,26000,26002],{"class":60,"line":79},[58,26001,25432],{"class":82},[58,26003,25322],{"class":82},[58,26005,26006,26008],{"class":60,"line":105},[58,26007,25492],{"class":82},[58,26009,25322],{"class":82},[58,26011,26012,26014,26016],{"class":60,"line":627},[58,26013,25912],{"class":82},[58,26015,25915],{"class":386},[58,26017,25322],{"class":82},[58,26019,26020],{"class":60,"line":509},[58,26021,26022],{"class":82},"  --dataset.episode=0\n",[702,26024,26025],{},"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":53,"searchDepth":68,"depth":68,"links":26027},[26028,26029,26030],{"id":25842,"depth":68,"text":25843},{"id":25955,"depth":68,"text":25956},{"id":25978,"depth":68,"text":25979},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25833,"description":717},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26037,"title":26038,"body":26039,"description":717,"extension":718,"meta":26167,"navigation":720,"path":26168,"seo":26169,"stem":26170,"__hash__":26171},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26040,"toc":26165},[26041,26045,26108,26111,26158,26163],[10,26042,26044],{"id":26043},"_7-act-模型训练","7. ACT 模型训练",[48,26046,26048],{"className":24465,"code":26047,"language":24467,"meta":53,"style":53},"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",[55,26049,26050,26057,26065,26072,26079,26086,26093,26100],{"__ignoreMap":53},[58,26051,26052,26055],{"class":60,"line":61},[58,26053,26054],{"class":379},"lerobot-train",[58,26056,25322],{"class":82},[58,26058,26059,26061,26063],{"class":60,"line":68},[58,26060,25912],{"class":82},[58,26062,25915],{"class":386},[58,26064,25322],{"class":82},[58,26066,26067,26070],{"class":60,"line":79},[58,26068,26069],{"class":82},"  --policy.type=act",[58,26071,25322],{"class":82},[58,26073,26074,26077],{"class":60,"line":105},[58,26075,26076],{"class":82},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[58,26078,25322],{"class":82},[58,26080,26081,26084],{"class":60,"line":627},[58,26082,26083],{"class":82},"  --job_name=act_so101_test",[58,26085,25322],{"class":82},[58,26087,26088,26091],{"class":60,"line":509},[58,26089,26090],{"class":82},"  --policy.device=cuda",[58,26092,25322],{"class":82},[58,26094,26095,26098],{"class":60,"line":559},[58,26096,26097],{"class":82},"  --wandb.enable=false",[58,26099,25322],{"class":82},[58,26101,26102,26105],{"class":60,"line":654},[58,26103,26104],{"class":82},"  --policy.repo_id=",[58,26106,26107],{"class":386},"\"Embodied-AI-6\u002Flerobot_new\"\n",[175,26109,26110],{},"参数说明：",[124,26112,26113,26119,26125,26131,26137,26146,26152],{},[22,26114,26115,26118],{},[55,26116,26117],{},"--dataset.repo_id","：训练数据集仓库。",[22,26120,26121,26124],{},[55,26122,26123],{},"--policy.type=act","：策略模型类型为 ACT。",[22,26126,26127,26130],{},[55,26128,26129],{},"--output_dir","：本地训练输出目录。",[22,26132,26133,26136],{},[55,26134,26135],{},"--job_name","：训练任务名称。",[22,26138,26139,26142,26143,25206],{},[55,26140,26141],{},"--policy.device","：训练设备（如 ",[55,26144,26145],{},"cuda",[22,26147,26148,26151],{},[55,26149,26150],{},"--wandb.enable","：是否启用 WandB 可视化。",[22,26153,26154,26157],{},[55,26155,26156],{},"--policy.repo_id","：训练后模型推送目标仓库。",[175,26159,26160],{},[119,26161],{"alt":53,"src":26162},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[702,26164,26025],{},{"title":53,"searchDepth":68,"depth":68,"links":26166},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26038,"description":717},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26173,"title":26174,"body":26175,"description":717,"extension":718,"meta":26262,"navigation":720,"path":26263,"seo":26264,"stem":26265,"__hash__":26266},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26176,"toc":26260},[26177,26180,26183,26250,26258],[10,26178,26174],{"id":26179},"_8-策略部署与自动采集",[175,26181,26182],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[48,26184,26186],{"className":24465,"code":26185,"language":24467,"meta":53,"style":53},"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",[55,26187,26188,26194,26200,26206,26214,26220,26227,26235,26243],{"__ignoreMap":53},[58,26189,26190,26192],{"class":60,"line":61},[58,26191,25853],{"class":379},[58,26193,25322],{"class":82},[58,26195,26196,26198],{"class":60,"line":68},[58,26197,25354],{"class":82},[58,26199,25322],{"class":82},[58,26201,26202,26204],{"class":60,"line":79},[58,26203,25432],{"class":82},[58,26205,25322],{"class":82},[58,26207,26208,26210,26212],{"class":60,"line":105},[58,26209,25561],{"class":82},[58,26211,25880],{"class":386},[58,26213,25322],{"class":82},[58,26215,26216,26218],{"class":60,"line":627},[58,26217,25492],{"class":82},[58,26219,25322],{"class":82},[58,26221,26222,26225],{"class":60,"line":509},[58,26223,26224],{"class":82},"  --display_data=false",[58,26226,25322],{"class":82},[58,26228,26229,26231,26233],{"class":60,"line":559},[58,26230,25912],{"class":82},[58,26232,25915],{"class":386},[58,26234,25322],{"class":82},[58,26236,26237,26239,26241],{"class":60,"line":654},[58,26238,25929],{"class":82},[58,26240,25932],{"class":386},[58,26242,25322],{"class":82},[58,26244,26245,26248],{"class":60,"line":671},[58,26246,26247],{"class":82},"  --policy.path=",[58,26249,26107],{"class":386},[124,26251,26252],{},[22,26253,26254,26257],{},[55,26255,26256],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[702,26259,26025],{},{"title":53,"searchDepth":68,"depth":68,"links":26261},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26174,"description":717},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26268,"title":26269,"body":26270,"description":717,"extension":718,"meta":26299,"navigation":720,"path":26300,"seo":26301,"stem":26302,"__hash__":26303},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26271,"toc":26297},[26272,26276,26279,26285,26288,26294],[10,26273,26275],{"id":26274},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[175,26277,26278],{},"项目地址：",[175,26280,26281],{},[376,26282,26283],{"href":26283,"rel":26284},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24508],[175,26286,26287],{},"参考教程：",[175,26289,26290],{},[376,26291,26292],{"href":26292,"rel":26293},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24508],[175,26295,26296],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":53,"searchDepth":68,"depth":68,"links":26298},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26269,"description":717},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26305,"title":26306,"body":26307,"description":26311,"extension":718,"meta":26312,"navigation":720,"path":26313,"seo":26314,"stem":26315,"__hash__":26316},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26308,"toc":26309},[],{"title":53,"searchDepth":68,"depth":68,"links":26310},[],"act复现",{"category":24021},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26306,"description":26311},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26318,"title":26319,"body":26320,"description":53,"extension":718,"meta":26622,"navigation":720,"path":26623,"seo":26624,"stem":26625,"__hash__":26626},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26321,"toc":26614},[26322,26325,26329,26339,26346,26353,26356,26363,26366,26369,26373,26385,26389,26435,26438,26441,26444,26447,26450,26454,26492,26498,26502,26556,26561,26564,26567,26572,26575,26580,26583,26586,26590,26593,26596,26600],[10,26323,26319],{"id":26324},"_1简介",[114,26326,26328],{"id":26327},"_11什么是-docker","1.1什么是 Docker？",[175,26330,26331,26332,26335,26336],{},"Docker 是一个开源的 ",[25,26333,26334],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[25,26337,26338],{},"一次构建，到处运行。",[175,26340,26341,26342,26345],{},"“ ",[25,26343,26344],{},"一次构建，到处运行"," ”也就是说：",[19,26347,26348],{},[22,26349,26350],{},[25,26351,26352],{},"之前：",[175,26354,26355],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[19,26357,26358],{},[22,26359,26360],{},[25,26361,26362],{},"使用docker后：",[175,26364,26365],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[175,26367,26368],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[114,26370,26372],{"id":26371},"_12它是怎么工作的","1.2.它是怎么工作的？",[124,26374,26375,26378],{},[22,26376,26377],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[22,26379,26380,26381,26384],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[25,26382,26383],{},"无论在哪运行都一样稳定"," 。",[114,26386,26388],{"id":26387},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[926,26390,26391,26401],{},[929,26392,26393],{},[932,26394,26395,26398],{},[935,26396,26397],{"align":24379},"概念",[935,26399,26400],{"align":24379},"解释",[972,26402,26403,26411,26419,26427],{},[932,26404,26405,26408],{},[977,26406,26407],{"align":24379},"镜像",[977,26409,26410],{"align":24379},"Image，运行容器的模板，像是一个应用快照",[932,26412,26413,26416],{},[977,26414,26415],{"align":24379},"容器",[977,26417,26418],{"align":24379},"Container，运行中的镜像实例，有自己的文件系统、网络等",[932,26420,26421,26424],{},[977,26422,26423],{"align":24379},"Dockerfile",[977,26425,26426],{"align":24379},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[932,26428,26429,26432],{},[977,26430,26431],{"align":24379},"仓库",[977,26433,26434],{"align":24379},"Registry，存放镜像的地方，比如 Docker Hub",[175,26436,26437],{},"抽象化理解:",[175,26439,26440],{},"Docker镜像≈C++类",[175,26442,26443],{},"Docker容器≈C++类实例(即对象)",[175,26445,26446],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[175,26448,26449],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[114,26451,26453],{"id":26452},"_14类比理解","1.4.类比理解",[926,26455,26456,26466],{},[929,26457,26458],{},[932,26459,26460,26463],{},[935,26461,26462],{"align":24379},"传统部署",[935,26464,26465],{"align":24379},"Docker部署",[972,26467,26468,26476,26484],{},[932,26469,26470,26473],{},[977,26471,26472],{"align":24379},"手动安装依赖、调试版本不一致问题",[977,26474,26475],{"align":24379},"一次打包环境和代码",[932,26477,26478,26481],{},[977,26479,26480],{"align":24379},"程序“裸奔”跑在系统上",[977,26482,26483],{"align":24379},"程序“穿着容器”隔离运行",[932,26485,26486,26489],{},[977,26487,26488],{"align":24379},"容易“在我电脑上能跑”",[977,26490,26491],{"align":24379},"保证“无论在哪都能跑”",[175,26493,26494,26495],{},"就像快递包裹： ",[25,26496,26497],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[114,26499,26501],{"id":26500},"_15docker-的核心优势","1.5.Docker 的核心优势",[926,26503,26504,26514],{},[929,26505,26506],{},[932,26507,26508,26511],{},[935,26509,26510],{"align":24379},"优势",[935,26512,26513],{"align":24379},"说明",[972,26515,26516,26524,26532,26540,26548],{},[932,26517,26518,26521],{},[977,26519,26520],{"align":24379},"轻量级",[977,26522,26523],{"align":24379},"基于系统内核共享，启动速度快，占资源少",[932,26525,26526,26529],{},[977,26527,26528],{"align":24379},"跨平台",[977,26530,26531],{"align":24379},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[932,26533,26534,26537],{},[977,26535,26536],{"align":24379},"易于迁移部署",[977,26538,26539],{"align":24379},"应用和环境一起封装，不怕依赖不一致",[932,26541,26542,26545],{},[977,26543,26544],{"align":24379},"易于版本控制",[977,26546,26547],{"align":24379},"镜像版本可控，支持回滚",[932,26549,26550,26553],{},[977,26551,26552],{"align":24379},"生态丰富",[977,26554,26555],{"align":24379},"Docker Hub 上有成千上万的现成镜像可用",[19,26557,26558],{},[22,26559,26560],{},"在Linux上可以几乎实现无性能损失。",[175,26562,26563],{},"docker里的发行版和本机共用Linux内核。",[175,26565,26566],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[19,26568,26569],{},[22,26570,26571],{},"可以快速部署在绝大多数Linux发行版",[175,26573,26574],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[19,26576,26577],{},[22,26578,26579],{},"配置环境简单",[175,26581,26582],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[175,26584,26585],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[19,26587,26588],{},[22,26589,26552],{},[175,26591,26592],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[175,26594,26595],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[114,26597,26599],{"id":26598},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[124,26601,26602,26605,26608,26611],{},[22,26603,26604],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[22,26606,26607],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[22,26609,26610],{},"微服务架构：每个服务一个容器，灵活组合",[22,26612,26613],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":53,"searchDepth":68,"depth":68,"links":26615},[26616,26617,26618,26619,26620,26621],{"id":26327,"depth":79,"text":26328},{"id":26371,"depth":79,"text":26372},{"id":26387,"depth":79,"text":26388},{"id":26452,"depth":79,"text":26453},{"id":26500,"depth":79,"text":26501},{"id":26598,"depth":79,"text":26599},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26319,"description":53},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26628,"title":26629,"body":26630,"description":53,"extension":718,"meta":27363,"navigation":720,"path":27364,"seo":27365,"stem":27366,"__hash__":27367},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26631,"toc":27358},[26632,26635,26639,26642,26645,26651,26657,26661,26670,26673,26730,26733,26784,26787,26870,26873,26910,26914,26925,26938,26945,26948,27028,27031,27081,27084,27107,27111,27118,27121,27137,27143,27146,27162,27168,27171,27187,27201,27207,27227,27233,27236,27248,27254,27257,27271,27277,27280,27300,27305,27308,27311,27315,27318,27321,27324,27331,27334,27337,27340,27345,27350,27355],[10,26633,26629],{"id":26634},"_2安装docker",[114,26636,26638],{"id":26637},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[175,26640,26641],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[175,26643,26644],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[175,26646,26647],{},[376,26648,26649],{"href":26649,"rel":26650},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24508],[175,26652,26653],{},[376,26654,26655],{"href":26655,"rel":26656},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24508],[22641,26658,26660],{"id":26659},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[175,26662,26663,26664,26669],{},"以下内容根据 ",[376,26665,26668],{"href":26666,"rel":26667},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24508],"官方文档"," 修改而来。",[175,26671,26672],{},"如果你过去安装过 docker，先删掉：",[48,26674,26676],{"className":24465,"code":26675,"language":24467,"meta":53,"style":53},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[55,26677,26678],{"__ignoreMap":53},[58,26679,26680,26682,26685,26688,26691,26694,26697,26700,26703,26706,26709,26712,26715,26718,26721,26724,26727],{"class":60,"line":61},[58,26681,3671],{"class":92},[58,26683,26684],{"class":75}," pkg ",[58,26686,26687],{"class":92},"in",[58,26689,26690],{"class":386}," docker.io",[58,26692,26693],{"class":386}," docker-doc",[58,26695,26696],{"class":386}," docker-compose",[58,26698,26699],{"class":386}," docker-compose-v2",[58,26701,26702],{"class":386}," podman-docker",[58,26704,26705],{"class":386}," containerd",[58,26707,26708],{"class":386}," runc",[58,26710,26711],{"class":75},"; ",[58,26713,26714],{"class":92},"do",[58,26716,26717],{"class":379}," sudo",[58,26719,26720],{"class":386}," apt-get",[58,26722,26723],{"class":386}," remove",[58,26725,26726],{"class":75}," $pkg; ",[58,26728,26729],{"class":92},"done\n",[175,26731,26732],{},"首先安装依赖和GPG：",[48,26734,26738],{"className":26735,"code":26736,"language":26737,"meta":53,"style":53},"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",[55,26739,26740,26745,26750,26755,26760,26765,26770,26774,26779],{"__ignoreMap":53},[58,26741,26742],{"class":60,"line":61},[58,26743,26744],{},"# Add Docker's official GPG key:\n",[58,26746,26747],{"class":60,"line":68},[58,26748,26749],{},"sudo apt-get update\n",[58,26751,26752],{"class":60,"line":79},[58,26753,26754],{},"sudo apt-get install ca-certificates curl\n",[58,26756,26757],{"class":60,"line":105},[58,26758,26759],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[58,26761,26762],{"class":60,"line":627},[58,26763,26764],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[58,26766,26767],{"class":60,"line":509},[58,26768,26769],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[58,26771,26772],{"class":60,"line":559},[58,26773,3046],{"emptyLinePlaceholder":720},[58,26775,26776],{"class":60,"line":654},[58,26777,26778],{},"# 如果上面这行报错就弄下面这行\n",[58,26780,26781],{"class":60,"line":671},[58,26782,26783],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[175,26785,26786],{},"信任 Docker 的 GPG 公钥并添加仓库：",[48,26788,26790],{"className":24465,"code":26789,"language":24467,"meta":53,"style":53},"# 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",[55,26791,26792,26797,26803,26820,26853],{"__ignoreMap":53},[58,26793,26794],{"class":60,"line":61},[58,26795,26796],{"class":64},"# Add the repository to Apt sources:\n",[58,26798,26799,26801],{"class":60,"line":68},[58,26800,25769],{"class":82},[58,26802,25322],{"class":82},[58,26804,26805,26808,26811,26814,26817],{"class":60,"line":79},[58,26806,26807],{"class":386},"  \"deb [arch=$(",[58,26809,26810],{"class":379},"dpkg",[58,26812,26813],{"class":82}," --print-architecture",[58,26815,26816],{"class":386},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[58,26818,26819],{"class":82},"\\\n",[58,26821,26822,26825,26827,26829,26832,26835,26837,26839,26842,26844,26846,26849,26851],{"class":60,"line":105},[58,26823,26824],{"class":386},"  \"",[58,26826,25743],{"class":75},[58,26828,1344],{"class":82},[58,26830,26831],{"class":386}," \u002Fetc\u002Fos-release",[58,26833,26834],{"class":75}," && ",[58,26836,25769],{"class":82},[58,26838,10369],{"class":386},[58,26840,26841],{"class":75},"$VERSION_CODENAME",[58,26843,1037],{"class":386},[58,26845,1215],{"class":75},[58,26847,26848],{"class":386},"\" stable\"",[58,26850,25753],{"class":92},[58,26852,25322],{"class":82},[58,26854,26855,26858,26861,26864,26867],{"class":60,"line":627},[58,26856,26857],{"class":379},"  sudo",[58,26859,26860],{"class":386}," tee",[58,26862,26863],{"class":386}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[58,26865,26866],{"class":92}," >",[58,26868,26869],{"class":386}," \u002Fdev\u002Fnull\n",[175,26871,26872],{},"最后安装",[48,26874,26876],{"className":24465,"code":26875,"language":24467,"meta":53,"style":53},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[55,26877,26878,26887],{"__ignoreMap":53},[58,26879,26880,26882,26884],{"class":60,"line":61},[58,26881,25220],{"class":379},[58,26883,26720],{"class":386},[58,26885,26886],{"class":386}," update\n",[58,26888,26889,26891,26893,26895,26898,26901,26904,26907],{"class":60,"line":68},[58,26890,25220],{"class":379},[58,26892,26720],{"class":386},[58,26894,24477],{"class":386},[58,26896,26897],{"class":386}," docker-ce",[58,26899,26900],{"class":386}," docker-ce-cli",[58,26902,26903],{"class":386}," containerd.io",[58,26905,26906],{"class":386}," docker-buildx-plugin",[58,26908,26909],{"class":386}," docker-compose-plugin\n",[22641,26911,26913],{"id":26912},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[175,26915,26916,26917,26920,26921,26924],{},"查看自己自己包管理工具版本（dnf是 ",[25,26918,26919],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[25,26922,26923],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[48,26926,26928],{"className":24465,"code":26927,"language":24467,"meta":53,"style":53},"dnf --version\n",[55,26929,26930],{"__ignoreMap":53},[58,26931,26932,26935],{"class":60,"line":61},[58,26933,26934],{"class":379},"dnf",[58,26936,26937],{"class":82}," --version\n",[175,26939,26663,26940,26944],{},[376,26941,26668],{"href":26942,"rel":26943},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24508]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[175,26946,26947],{},"如果你之前安装过 docker，请先删掉",[48,26949,26951],{"className":24465,"code":26950,"language":24467,"meta":53,"style":53},"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",[55,26952,26953,26967,26974,26981,26988,26995,27002,27009,27016,27023],{"__ignoreMap":53},[58,26954,26955,26957,26960,26962,26965],{"class":60,"line":61},[58,26956,25220],{"class":379},[58,26958,26959],{"class":386}," dnf",[58,26961,26723],{"class":386},[58,26963,26964],{"class":386}," docker",[58,26966,25322],{"class":82},[58,26968,26969,26972],{"class":60,"line":68},[58,26970,26971],{"class":386},"                  docker-client",[58,26973,25322],{"class":82},[58,26975,26976,26979],{"class":60,"line":79},[58,26977,26978],{"class":386},"                  docker-client-latest",[58,26980,25322],{"class":82},[58,26982,26983,26986],{"class":60,"line":105},[58,26984,26985],{"class":386},"                  docker-common",[58,26987,25322],{"class":82},[58,26989,26990,26993],{"class":60,"line":627},[58,26991,26992],{"class":386},"                  docker-latest",[58,26994,25322],{"class":82},[58,26996,26997,27000],{"class":60,"line":509},[58,26998,26999],{"class":386},"                  docker-latest-logrotate",[58,27001,25322],{"class":82},[58,27003,27004,27007],{"class":60,"line":559},[58,27005,27006],{"class":386},"                  docker-logrotate",[58,27008,25322],{"class":82},[58,27010,27011,27014],{"class":60,"line":654},[58,27012,27013],{"class":386},"                  docker-selinux",[58,27015,25322],{"class":82},[58,27017,27018,27021],{"class":60,"line":671},[58,27019,27020],{"class":386},"                  docker-engine-selinux",[58,27022,25322],{"class":82},[58,27024,27025],{"class":60,"line":677},[58,27026,27027],{"class":386},"                  docker-engine\n",[175,27029,27030],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[48,27032,27034],{"className":24465,"code":27033,"language":24467,"meta":53,"style":53},"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",[55,27035,27036,27050,27065],{"__ignoreMap":53},[58,27037,27038,27040,27042,27045,27047],{"class":60,"line":61},[58,27039,25220],{"class":379},[58,27041,26959],{"class":386},[58,27043,27044],{"class":82}," -y",[58,27046,24477],{"class":386},[58,27048,27049],{"class":386}," dnf-plugins-core\n",[58,27051,27052,27054,27056,27059,27062],{"class":60,"line":68},[58,27053,25220],{"class":379},[58,27055,26959],{"class":386},[58,27057,27058],{"class":386}," config-manager",[58,27060,27061],{"class":386}," addrepo",[58,27063,27064],{"class":82}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[58,27066,27067,27069,27072,27075,27078],{"class":60,"line":79},[58,27068,25220],{"class":379},[58,27070,27071],{"class":386}," sed",[58,27073,27074],{"class":82}," -i",[58,27076,27077],{"class":386}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[58,27079,27080],{"class":386}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[175,27082,27083],{},"最后安装：",[48,27085,27087],{"className":24465,"code":27086,"language":24467,"meta":53,"style":53},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[55,27088,27089],{"__ignoreMap":53},[58,27090,27091,27093,27095,27097,27099,27101,27103,27105],{"class":60,"line":61},[58,27092,25220],{"class":379},[58,27094,26959],{"class":386},[58,27096,24477],{"class":386},[58,27098,26897],{"class":386},[58,27100,26900],{"class":386},[58,27102,26903],{"class":386},[58,27104,26906],{"class":386},[58,27106,26909],{"class":386},[114,27108,27110],{"id":27109},"_22配置环境","2.2.配置环境",[22641,27112,27114,27117],{"id":27113},"_221检查-docker-服务状态",[25,27115,27116],{},"2.2.1.检查 Docker 服务状态"," ：",[175,27119,27120],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[48,27122,27124],{"className":24465,"code":27123,"language":24467,"meta":53,"style":53},"systemctl status docker\n",[55,27125,27126],{"__ignoreMap":53},[58,27127,27128,27131,27134],{"class":60,"line":61},[58,27129,27130],{"class":379},"systemctl",[58,27132,27133],{"class":386}," status",[58,27135,27136],{"class":386}," docker\n",[22641,27138,27140,27117],{"id":27139},"_222启动-docker-服务",[25,27141,27142],{},"2.2.2.启动 Docker 服务",[175,27144,27145],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[48,27147,27149],{"className":24465,"code":27148,"language":24467,"meta":53,"style":53},"sudo systemctl start docker\n",[55,27150,27151],{"__ignoreMap":53},[58,27152,27153,27155,27158,27160],{"class":60,"line":61},[58,27154,25220],{"class":379},[58,27156,27157],{"class":386}," systemctl",[58,27159,4830],{"class":386},[58,27161,27136],{"class":386},[22641,27163,27165,27117],{"id":27164},"_223设置-docker-开机自启",[25,27166,27167],{},"2.2.3.设置 Docker 开机自启",[175,27169,27170],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[48,27172,27174],{"className":24465,"code":27173,"language":24467,"meta":53,"style":53},"sudo systemctl enable docker\n",[55,27175,27176],{"__ignoreMap":53},[58,27177,27178,27180,27182,27185],{"class":60,"line":61},[58,27179,25220],{"class":379},[58,27181,27157],{"class":386},[58,27183,27184],{"class":386}," enable",[58,27186,27136],{"class":386},[22641,27188,27190,14439,27193,14439,27198,27117],{"id":27189},"_224将用户添加到-docker-组",[25,27191,27192],{},"2.2.4.将用户添加到",[25,27194,27195],{},[55,27196,27197],{},"docker",[25,27199,27200],{},"组",[175,27202,27203,27204,27206],{},"使用以下命令将当前用户添加到 ",[55,27205,27197],{}," 组：",[48,27208,27210],{"className":24465,"code":27209,"language":24467,"meta":53,"style":53},"sudo usermod -aG docker $USER\n",[55,27211,27212],{"__ignoreMap":53},[58,27213,27214,27216,27219,27222,27224],{"class":60,"line":61},[58,27215,25220],{"class":379},[58,27217,27218],{"class":386}," usermod",[58,27220,27221],{"class":82}," -aG",[58,27223,26964],{"class":386},[58,27225,27226],{"class":75}," $USER\n",[22641,27228,27230,27117],{"id":27229},"_225退出并重新登录",[25,27231,27232],{},"2.2.5.退出并重新登录",[175,27234,27235],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[48,27237,27239],{"className":24465,"code":27238,"language":24467,"meta":53,"style":53},"newgrp docker\n",[55,27240,27241],{"__ignoreMap":53},[58,27242,27243,27246],{"class":60,"line":61},[58,27244,27245],{"class":379},"newgrp",[58,27247,27136],{"class":386},[22641,27249,27251,27117],{"id":27250},"_226重新启动-docker-服务如果需要",[25,27252,27253],{},"2.2.6.重新启动 Docker 服务（如果需要）",[175,27255,27256],{},"确保 Docker 服务正在运行，可以使用以下命令：",[48,27258,27259],{"className":24465,"code":27148,"language":24467,"meta":53,"style":53},[55,27260,27261],{"__ignoreMap":53},[58,27262,27263,27265,27267,27269],{"class":60,"line":61},[58,27264,25220],{"class":379},[58,27266,27157],{"class":386},[58,27268,4830],{"class":386},[58,27270,27136],{"class":386},[22641,27272,27274,27117],{"id":27273},"_227重启电脑后检查-docker-服务状态",[25,27275,27276],{},"2.2.7.重启电脑后检查 Docker 服务状态",[175,27278,27279],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[48,27281,27283],{"className":24465,"code":27282,"language":24467,"meta":53,"style":53},"sudo reboot\nsystemctl status docker\n",[55,27284,27285,27292],{"__ignoreMap":53},[58,27286,27287,27289],{"class":60,"line":61},[58,27288,25220],{"class":379},[58,27290,27291],{"class":386}," reboot\n",[58,27293,27294,27296,27298],{"class":60,"line":68},[58,27295,27130],{"class":379},[58,27297,27133],{"class":386},[58,27299,27136],{"class":386},[175,27301,27302],{},[119,27303],{"alt":53,"src":27304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[175,27306,27307],{},"第三行显示enabled说明开机自启动成功",[175,27309,27310],{},"按q退出",[114,27312,27314],{"id":27313},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[175,27316,27317],{},"优先使用linux来使用docker是比较好的",[175,27319,27320],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[175,27322,27323],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[175,27325,27326,27327],{},"官方下载安装:",[376,27328,27329],{"href":27329,"rel":27330},"https:\u002F\u002Fwww.docker.com\u002F",[24508],[175,27332,27333],{},"Windows的Docker显卡直通与USB直通:",[175,27335,27336],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[175,27338,27339],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[175,27341,27342],{},[119,27343],{"alt":53,"src":27344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[175,27346,27347],{},[119,27348],{"alt":53,"src":27349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[175,27351,27352],{},[119,27353],{"alt":53,"src":27354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[702,27356,27357],{},"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":53,"searchDepth":68,"depth":68,"links":27359},[27360,27361,27362],{"id":26637,"depth":79,"text":26638},{"id":27109,"depth":79,"text":27110},{"id":27313,"depth":79,"text":27314},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26629,"description":53},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27369,"title":27370,"body":27371,"description":27378,"extension":718,"meta":28071,"navigation":720,"path":28072,"seo":28073,"stem":28074,"__hash__":28075},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27372,"toc":28065},[27373,27376,27379,27383,27388,27393,27396,27424,27429,27438,27441,27446,27450,27457,27462,27468,27472,27475,27479,27484,27576,27581,27599,27604,27625,27630,27646,27650,27655,27684,27689,27735,27740,27784,27792,27809,27814,27830,27835,27849,27852,27855,27858,27861,27890,27893,27898,27902,27905,27908,27914,27917,27920,27923,27985,27992,27997,28000,28018,28022,28025,28042,28045,28048,28062],[10,27374,27370],{"id":27375},"_3docker直通",[175,27377,27378],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[114,27380,27382],{"id":27381},"_31usb直通","3.1.USB直通",[175,27384,27385],{},[119,27386],{"alt":53,"src":27387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[19,27389,27390],{},[22,27391,27392],{},"方法一(不是很推荐新手)：",[175,27394,27395],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[48,27397,27399],{"className":24465,"code":27398,"language":24467,"meta":53,"style":53},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[55,27400,27401,27409,27414],{"__ignoreMap":53},[58,27402,27403,27406],{"class":60,"line":61},[58,27404,27405],{"class":379},"ls",[58,27407,27408],{"class":386}," \u002Fdev\n",[58,27410,27411],{"class":60,"line":68},[58,27412,27413],{"class":64},"#例如\n",[58,27415,27416,27419,27421],{"class":60,"line":79},[58,27417,27418],{"class":75},"--device",[58,27420,383],{"class":92},[58,27422,27423],{"class":386},"\u002Fdev\u002Ftty_USB0\n",[19,27425,27426],{"start":68},[22,27427,27428],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[48,27430,27432],{"className":24465,"code":27431,"language":24467,"meta":53,"style":53},"--privileged\n",[55,27433,27434],{"__ignoreMap":53},[58,27435,27436],{"class":60,"line":61},[58,27437,27431],{"class":379},[175,27439,27440],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[175,27442,27443],{},[119,27444],{"alt":53,"src":27445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[114,27447,27449],{"id":27448},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[175,27451,27452,27453,27456],{},"NVIDIA Container Toolkit使用户 ",[25,27454,27455],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[175,27458,27459],{},[119,27460],{"alt":53,"src":27461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[175,27463,27464],{},[376,27465,27466],{"href":27466,"rel":27467},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24508],[22641,27469,27471],{"id":27470},"_321安装","3.2.1.安装",[175,27473,27474],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23553,27476,27478],{"id":27477},"_3211ubuntu","3.2.1.1.Ubuntu",[19,27480,27481],{},[22,27482,27483],{},"配置存储库 并更新",[48,27485,27487],{"className":24465,"code":27486,"language":24467,"meta":53,"style":53},"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",[55,27488,27489,27518,27538,27550,27562,27568],{"__ignoreMap":53},[58,27490,27491,27494,27497,27500,27502,27504,27507,27510,27513,27516],{"class":60,"line":61},[58,27492,27493],{"class":379},"curl",[58,27495,27496],{"class":82}," -fsSL",[58,27498,27499],{"class":386}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[58,27501,25753],{"class":92},[58,27503,26717],{"class":379},[58,27505,27506],{"class":386}," gpg",[58,27508,27509],{"class":82}," --dearmor",[58,27511,27512],{"class":82}," -o",[58,27514,27515],{"class":386}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[58,27517,25322],{"class":82},[58,27519,27520,27523,27525,27528,27531,27534,27536],{"class":60,"line":68},[58,27521,27522],{"class":75},"  && ",[58,27524,27493],{"class":379},[58,27526,27527],{"class":82}," -s",[58,27529,27530],{"class":82}," -L",[58,27532,27533],{"class":386}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[58,27535,25753],{"class":92},[58,27537,25322],{"class":82},[58,27539,27540,27543,27546,27548],{"class":60,"line":79},[58,27541,27542],{"class":379},"    sed",[58,27544,27545],{"class":386}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[58,27547,25753],{"class":92},[58,27549,25322],{"class":82},[58,27551,27552,27555,27557,27560],{"class":60,"line":105},[58,27553,27554],{"class":379},"    sudo",[58,27556,26860],{"class":386},[58,27558,27559],{"class":386}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[58,27561,25322],{"class":82},[58,27563,27564,27566],{"class":60,"line":627},[58,27565,27522],{"class":75},[58,27567,26819],{"class":82},[58,27569,27570,27572,27574],{"class":60,"line":509},[58,27571,27554],{"class":379},[58,27573,26720],{"class":386},[58,27575,26886],{"class":386},[19,27577,27578],{"start":68},[22,27579,27580],{},"安装nvidia-docker2",[48,27582,27584],{"className":24465,"code":27583,"language":24467,"meta":53,"style":53},"sudo apt-get install -y nvidia-docker2\n",[55,27585,27586],{"__ignoreMap":53},[58,27587,27588,27590,27592,27594,27596],{"class":60,"line":61},[58,27589,25220],{"class":379},[58,27591,26720],{"class":386},[58,27593,24477],{"class":386},[58,27595,27044],{"class":82},[58,27597,27598],{"class":386}," nvidia-docker2\n",[19,27600,27601],{"start":79},[22,27602,27603],{},"使用nvidia-ctk命令配置container runtime",[48,27605,27607],{"className":24465,"code":27606,"language":24467,"meta":53,"style":53},"sudo nvidia-ctk runtime configure --runtime=docker\n",[55,27608,27609],{"__ignoreMap":53},[58,27610,27611,27613,27616,27619,27622],{"class":60,"line":61},[58,27612,25220],{"class":379},[58,27614,27615],{"class":386}," nvidia-ctk",[58,27617,27618],{"class":386}," runtime",[58,27620,27621],{"class":386}," configure",[58,27623,27624],{"class":82}," --runtime=docker\n",[19,27626,27627],{"start":105},[22,27628,27629],{},"重启docker服务:",[48,27631,27633],{"className":24465,"code":27632,"language":24467,"meta":53,"style":53},"sudo systemctl restart docker\n",[55,27634,27635],{"__ignoreMap":53},[58,27636,27637,27639,27641,27644],{"class":60,"line":61},[58,27638,25220],{"class":379},[58,27640,27157],{"class":386},[58,27642,27643],{"class":386}," restart",[58,27645,27136],{"class":386},[23553,27647,27649],{"id":27648},"_3212fedora","3.2.1.2.Fedora",[19,27651,27652],{},[22,27653,27654],{},"配置存储库",[48,27656,27658],{"className":24465,"code":27657,"language":24467,"meta":53,"style":53},"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",[55,27659,27660,27675],{"__ignoreMap":53},[58,27661,27662,27664,27666,27668,27671,27673],{"class":60,"line":61},[58,27663,27493],{"class":379},[58,27665,27527],{"class":82},[58,27667,27530],{"class":82},[58,27669,27670],{"class":386}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[58,27672,25753],{"class":92},[58,27674,25322],{"class":82},[58,27676,27677,27679,27681],{"class":60,"line":68},[58,27678,25220],{"class":379},[58,27680,26860],{"class":386},[58,27682,27683],{"class":386}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[19,27685,27686],{"start":68},[22,27687,27688],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[48,27690,27692],{"className":24465,"code":27691,"language":24467,"meta":53,"style":53},"# 如果是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",[55,27693,27694,27699,27713,27717,27722],{"__ignoreMap":53},[58,27695,27696],{"class":60,"line":61},[58,27697,27698],{"class":64},"# 如果是RHEL或者Rocky（DNF4）\n",[58,27700,27701,27703,27705,27707,27710],{"class":60,"line":68},[58,27702,25220],{"class":379},[58,27704,26959],{"class":386},[58,27706,27058],{"class":386},[58,27708,27709],{"class":82}," --add-repo",[58,27711,27712],{"class":386}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[58,27714,27715],{"class":60,"line":79},[58,27716,3046],{"emptyLinePlaceholder":720},[58,27718,27719],{"class":60,"line":105},[58,27720,27721],{"class":64},"# 如果是Feodra41+（DNF5）\n",[58,27723,27724,27726,27728,27730,27732],{"class":60,"line":627},[58,27725,25220],{"class":379},[58,27727,26959],{"class":386},[58,27729,27058],{"class":386},[58,27731,27061],{"class":386},[58,27733,27734],{"class":82}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[19,27736,27737],{"start":79},[22,27738,27739],{},"安装NVIDIA Container Toolki包",[48,27741,27743],{"className":24465,"code":27742,"language":24467,"meta":53,"style":53},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[55,27744,27745,27750,27763,27767,27772],{"__ignoreMap":53},[58,27746,27747],{"class":60,"line":61},[58,27748,27749],{"class":64},"# 如果是RHEL或者Rocky\n",[58,27751,27752,27754,27756,27758,27760],{"class":60,"line":68},[58,27753,25220],{"class":379},[58,27755,26959],{"class":386},[58,27757,24477],{"class":386},[58,27759,27044],{"class":82},[58,27761,27762],{"class":386}," nvidia-container-toolkit\n",[58,27764,27765],{"class":60,"line":79},[58,27766,3046],{"emptyLinePlaceholder":720},[58,27768,27769],{"class":60,"line":105},[58,27770,27771],{"class":64},"# 如果是Fedora\n",[58,27773,27774,27776,27778,27780,27782],{"class":60,"line":627},[58,27775,25220],{"class":379},[58,27777,26959],{"class":386},[58,27779,24477],{"class":386},[58,27781,27044],{"class":82},[58,27783,27762],{"class":386},[19,27785,27786],{"start":105},[22,27787,27788,27789,27791],{},"安装nvidia-docker2 ： 在Fedora上使用",[55,27790,26934],{},"进行安装",[48,27793,27795],{"className":24465,"code":27794,"language":24467,"meta":53,"style":53},"sudo dnf install -y nvidia-docker2\n",[55,27796,27797],{"__ignoreMap":53},[58,27798,27799,27801,27803,27805,27807],{"class":60,"line":61},[58,27800,25220],{"class":379},[58,27802,26959],{"class":386},[58,27804,24477],{"class":386},[58,27806,27044],{"class":82},[58,27808,27598],{"class":386},[19,27810,27811],{"start":627},[22,27812,27813],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[48,27815,27816],{"className":24465,"code":27606,"language":24467,"meta":53,"style":53},[55,27817,27818],{"__ignoreMap":53},[58,27819,27820,27822,27824,27826,27828],{"class":60,"line":61},[58,27821,25220],{"class":379},[58,27823,27615],{"class":386},[58,27825,27618],{"class":386},[58,27827,27621],{"class":386},[58,27829,27624],{"class":82},[19,27831,27832],{"start":509},[22,27833,27834],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[48,27836,27837],{"className":24465,"code":27632,"language":24467,"meta":53,"style":53},[55,27838,27839],{"__ignoreMap":53},[58,27840,27841,27843,27845,27847],{"class":60,"line":61},[58,27842,25220],{"class":379},[58,27844,27157],{"class":386},[58,27846,27643],{"class":386},[58,27848,27136],{"class":386},[175,27850,27851],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[175,27853,27854],{},"方法：",[175,27856,27857],{},"1️⃣nvidia-smi",[175,27859,27860],{},"2️⃣运行nvidia cuda 容器进行测试",[48,27862,27864],{"className":24465,"code":27863,"language":24467,"meta":53,"style":53},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[55,27865,27866],{"__ignoreMap":53},[58,27867,27868,27870,27872,27875,27878,27881,27884,27887],{"class":60,"line":61},[58,27869,25220],{"class":379},[58,27871,26964],{"class":386},[58,27873,27874],{"class":386}," run",[58,27876,27877],{"class":82}," --rm",[58,27879,27880],{"class":82}," --gpus",[58,27882,27883],{"class":386}," all",[58,27885,27886],{"class":386}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[58,27888,27889],{"class":386}," nvidia-smi\n",[175,27891,27892],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[175,27894,27895],{},[119,27896],{"alt":53,"src":27897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[114,27899,27901],{"id":27900},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[175,27903,27904],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[175,27906,27907],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[175,27909,27910],{},[376,27911,27912],{"href":27912,"rel":27913},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24508],[175,27915,27916],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[175,27918,27919],{},"我们只需要找到对应的Docker镜像当底包即可。",[175,27921,27922],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[926,27924,27925,27941],{},[929,27926,27927],{},[932,27928,27929,27932,27935,27938],{},[935,27930,27931],{"align":24379},"镜像类型",[935,27933,27934],{"align":24379},"适用场景",[935,27936,27937],{"align":24379},"示例标签",[935,27939,27940],{"align":24379},"大小",[972,27942,27943,27957,27971],{},[932,27944,27945,27948,27951,27954],{},[977,27946,27947],{"align":24379},"base",[977,27949,27950],{"align":24379},"仅需 CUDA 运行时库",[977,27952,27953],{"align":24379},"12.4.0-base-ubuntu22.04",[977,27955,27956],{"align":24379},"~240MB",[932,27958,27959,27962,27965,27968],{},[977,27960,27961],{"align":24379},"runtime",[977,27963,27964],{"align":24379},"部署编译后的应用（含数学库）",[977,27966,27967],{"align":24379},"12.4.0-runtime-ubuntu22.04",[977,27969,27970],{"align":24379},"~2GB",[932,27972,27973,27976,27979,27982],{},[977,27974,27975],{"align":24379},"devel",[977,27977,27978],{"align":24379},"开发环境（含编译工具）",[977,27980,27981],{"align":24379},"12.4.0-devel-ubuntu22.04",[977,27983,27984],{"align":24379},"~3GB",[175,27986,27987,27988,27991],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[55,27989,27990],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[175,27993,27994],{},[119,27995],{"alt":53,"src":27996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[175,27998,27999],{},"在dockerfile里就可以开头这么写：",[48,28001,28003],{"className":24465,"code":28002,"language":24467,"meta":53,"style":53},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[55,28004,28005,28010],{"__ignoreMap":53},[58,28006,28007],{"class":60,"line":61},[58,28008,28009],{"class":64},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[58,28011,28012,28015],{"class":60,"line":68},[58,28013,28014],{"class":379},"FROM",[58,28016,28017],{"class":386}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[114,28019,28021],{"id":28020},"_34配置以太网","3.4.配置以太网",[175,28023,28024],{},"指定网络模式",[48,28026,28028],{"className":24465,"code":28027,"language":24467,"meta":53,"style":53},"--net=host \\\n",[55,28029,28030],{"__ignoreMap":53},[58,28031,28032,28035,28037,28040],{"class":60,"line":61},[58,28033,28034],{"class":75},"--net",[58,28036,383],{"class":92},[58,28038,28039],{"class":386},"host",[58,28041,25322],{"class":379},[175,28043,28044],{},"启动参数里加上这行即可。具体在下方",[175,28046,28047],{},"--net选项：指定网络模式，该选项有以下参数可选：",[124,28049,28050,28053,28056,28059],{},[22,28051,28052],{},"--net=bridge:默认选项，表示连接到默认的网桥",[22,28054,28055],{},"--net=host:容器使用宿主机的网络",[22,28057,28058],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[22,28060,28061],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[702,28063,28064],{},"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":53,"searchDepth":68,"depth":68,"links":28066},[28067,28068,28069,28070],{"id":27381,"depth":79,"text":27382},{"id":27448,"depth":79,"text":27449},{"id":27900,"depth":79,"text":27901},{"id":28020,"depth":79,"text":28021},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27370,"description":27378},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":28077,"title":28078,"body":28079,"description":28086,"extension":718,"meta":28092,"navigation":720,"path":28093,"seo":28094,"stem":28095,"__hash__":28096},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":28080,"toc":28090},[28081,28084,28087],[10,28082,28078],{"id":28083},"_4dockerhub换源",[175,28085,28086],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[175,28088,28089],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":53,"searchDepth":68,"depth":68,"links":28091},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":28078,"description":28086},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":28098,"title":28099,"body":28100,"description":53,"extension":718,"meta":29112,"navigation":720,"path":29113,"seo":29114,"stem":29115,"__hash__":29116},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":28101,"toc":29107},[28102,28105,28109,28115,28119,28122,28462,28465,28468,28471,28476,28481,28484,28487,28490,28493,28512,28515,28526,28532,28714,28724,28740,29003,29005,29030,29045,29054,29104],[10,28103,28099],{"id":28104},"_5docker命令学习",[114,28106,28108],{"id":28107},"_51参考文档","5.1.参考文档",[175,28110,28111],{},[376,28112,28113],{"href":28113,"rel":28114},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24508],[114,28116,28118],{"id":28117},"_52常用命令","5.2.常用命令",[175,28120,28121],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[926,28123,28124,28137],{},[929,28125,28126],{},[932,28127,28128,28131,28134],{},[935,28129,28130],{"align":24379},"命令",[935,28132,28133],{"align":24379},"描述",[935,28135,28136],{"align":24379},"示例",[972,28138,28139,28150,28161,28172,28183,28194,28205,28216,28226,28237,28248,28259,28269,28280,28291,28302,28312,28322,28332,28342,28353,28364,28375,28386,28397,28408,28418,28429,28440,28451],{},[932,28140,28141,28144,28147],{},[977,28142,28143],{"align":24379},"docker run",[977,28145,28146],{"align":24379},"创建并启动一个新的容器。",[977,28148,28149],{"align":24379},"docker run -it ubuntu bash",[932,28151,28152,28155,28158],{},[977,28153,28154],{"align":24379},"docker build",[977,28156,28157],{"align":24379},"通过指定的 Dockerfile 创建一个新的镜像。",[977,28159,28160],{"align":24379},"docker build -t myimage .",[932,28162,28163,28166,28169],{},[977,28164,28165],{"align":24379},"docker pull",[977,28167,28168],{"align":24379},"从 Docker 仓库拉取镜像。",[977,28170,28171],{"align":24379},"docker pull ubuntu",[932,28173,28174,28177,28180],{},[977,28175,28176],{"align":24379},"docker push",[977,28178,28179],{"align":24379},"将本地镜像推送到 Docker 仓库。",[977,28181,28182],{"align":24379},"docker push myimage",[932,28184,28185,28188,28191],{},[977,28186,28187],{"align":24379},"docker stop",[977,28189,28190],{"align":24379},"停止一个正在运行的容器。",[977,28192,28193],{"align":24379},"docker stop container_id",[932,28195,28196,28199,28202],{},[977,28197,28198],{"align":24379},"docker start",[977,28200,28201],{"align":24379},"启动一个已经存在的容器。",[977,28203,28204],{"align":24379},"docker start container_id",[932,28206,28207,28210,28213],{},[977,28208,28209],{"align":24379},"docker restart",[977,28211,28212],{"align":24379},"重新启动容器。",[977,28214,28215],{"align":24379},"docker restart container_id",[932,28217,28218,28221,28224],{},[977,28219,28220],{"align":24379},"docker ps",[977,28222,28223],{"align":24379},"列出当前正在运行的容器。",[977,28225,28220],{"align":24379},[932,28227,28228,28231,28234],{},[977,28229,28230],{"align":24379},"docker rm",[977,28232,28233],{"align":24379},"删除一个或多个停止的容器。",[977,28235,28236],{"align":24379},"docker rm container_id",[932,28238,28239,28242,28245],{},[977,28240,28241],{"align":24379},"docker exec",[977,28243,28244],{"align":24379},"在一个正在运行的容器中执行命令。",[977,28246,28247],{"align":24379},"docker exec -it container_id bash",[932,28249,28250,28253,28256],{},[977,28251,28252],{"align":24379},"docker logs",[977,28254,28255],{"align":24379},"查看容器的日志输出。",[977,28257,28258],{"align":24379},"docker logs container_id",[932,28260,28261,28264,28267],{},[977,28262,28263],{"align":24379},"docker images",[977,28265,28266],{"align":24379},"列出本地所有镜像。",[977,28268,28263],{"align":24379},[932,28270,28271,28274,28277],{},[977,28272,28273],{"align":24379},"docker rmi",[977,28275,28276],{"align":24379},"删除一个或多个镜像。",[977,28278,28279],{"align":24379},"docker rmi myimage",[932,28281,28282,28285,28288],{},[977,28283,28284],{"align":24379},"docker network",[977,28286,28287],{"align":24379},"管理 Docker 网络。",[977,28289,28290],{"align":24379},"docker network ls",[932,28292,28293,28296,28299],{},[977,28294,28295],{"align":24379},"docker volume",[977,28297,28298],{"align":24379},"管理 Docker 数据卷。",[977,28300,28301],{"align":24379},"docker volume ls",[932,28303,28304,28307,28310],{},[977,28305,28306],{"align":24379},"docker-compose up",[977,28308,28309],{"align":24379},"启动 docker-compose.yml 中定义的所有服务。",[977,28311,28306],{"align":24379},[932,28313,28314,28317,28320],{},[977,28315,28316],{"align":24379},"docker-compose down",[977,28318,28319],{"align":24379},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[977,28321,28316],{"align":24379},[932,28323,28324,28327,28330],{},[977,28325,28326],{"align":24379},"docker info",[977,28328,28329],{"align":24379},"显示 Docker 系统的详细信息。",[977,28331,28326],{"align":24379},[932,28333,28334,28337,28340],{},[977,28335,28336],{"align":24379},"docker stats",[977,28338,28339],{"align":24379},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[977,28341,28336],{"align":24379},[932,28343,28344,28347,28350],{},[977,28345,28346],{"align":24379},"docker inspect",[977,28348,28349],{"align":24379},"查看容器或镜像的详细信息（JSON 格式）。",[977,28351,28352],{"align":24379},"docker inspect container_id",[932,28354,28355,28358,28361],{},[977,28356,28357],{"align":24379},"docker save",[977,28359,28360],{"align":24379},"将一个镜像保存为 tar 文件。",[977,28362,28363],{"align":24379},"docker save -o myimage.tar myimage",[932,28365,28366,28369,28372],{},[977,28367,28368],{"align":24379},"docker load",[977,28370,28371],{"align":24379},"从 tar 文件中加载镜像。",[977,28373,28374],{"align":24379},"docker load -i myimage.tar",[932,28376,28377,28380,28383],{},[977,28378,28379],{"align":24379},"docker tag",[977,28381,28382],{"align":24379},"为镜像添加标签（tag）。",[977,28384,28385],{"align":24379},"docker tag myimage myimage:v1",[932,28387,28388,28391,28394],{},[977,28389,28390],{"align":24379},"docker buildx build",[977,28392,28393],{"align":24379},"使用 Buildx 构建多架构镜像。",[977,28395,28396],{"align":24379},"docker buildx build -t myimage .",[932,28398,28399,28402,28405],{},[977,28400,28401],{"align":24379},"docker buildx create",[977,28403,28404],{"align":24379},"创建一个新的 Buildx 构建实例。",[977,28406,28407],{"align":24379},"docker buildx create –use",[932,28409,28410,28413,28416],{},[977,28411,28412],{"align":24379},"docker buildx ls",[977,28414,28415],{"align":24379},"列出所有可用的 Buildx 构建实例。",[977,28417,28412],{"align":24379},[932,28419,28420,28423,28426],{},[977,28421,28422],{"align":24379},"docker buildx use",[977,28424,28425],{"align":24379},"设置当前的 Buildx 构建实例。",[977,28427,28428],{"align":24379},"docker buildx use mybuilder",[932,28430,28431,28434,28437],{},[977,28432,28433],{"align":24379},"docker buildx bake",[977,28435,28436],{"align":24379},"使用 Bake 文件批量构建镜像。",[977,28438,28439],{"align":24379},"docker buildx bake -f bake.hcl",[932,28441,28442,28445,28448],{},[977,28443,28444],{"align":24379},"docker buildx build –push",[977,28446,28447],{"align":24379},"构建镜像并推送到镜像仓库。",[977,28449,28450],{"align":24379},"docker buildx build –push -t myimage .",[932,28452,28453,28456,28459],{},[977,28454,28455],{"align":24379},"docker buildx build –platform",[977,28457,28458],{"align":24379},"构建镜像并为多个平台生成支持。",[977,28460,28461],{"align":24379},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[175,28463,28464],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[175,28466,28467],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[175,28469,28470],{},"docker images 可以查看已经下载的镜像",[175,28472,28473],{},[119,28474],{"alt":53,"src":28475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[175,28477,28478],{},[25,28479,28480],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[175,28482,28483],{},"docker rmi $(docker images -q) 删除所有的镜像",[175,28485,28486],{},"docker container logs 查看容器日志",[175,28488,28489],{},"docker top 查看容器里的进程",[175,28491,28492],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[48,28494,28496],{"className":24465,"code":28495,"language":24467,"meta":53,"style":53},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[55,28497,28498],{"__ignoreMap":53},[58,28499,28500,28503,28506,28509],{"class":60,"line":61},[58,28501,28502],{"class":379},"如：docker",[58,28504,28505],{"class":386}," cp",[58,28507,28508],{"class":386}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[58,28510,28511],{"class":386}," \u002Fmydata\u002Fnginx\n",[175,28513,28514],{},"docker run时在启动容器的时候会有几个常用的选项：",[124,28516,28517,28520,28523],{},[22,28518,28519],{},"-d选项：表示后台运行",[22,28521,28522],{},"-P选项：随机端口映射",[22,28524,28525],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[114,28527,28529],{"id":28528},"_53run命令的参数非常重要",[25,28530,28531],{},"5.3.run命令的参数（非常重要）",[926,28533,28534,28547],{},[929,28535,28536],{},[932,28537,28538,28541,28544],{},[935,28539,28540],{"align":24379},"参数\u002F配置",[935,28542,28543],{"align":24379},"功能说明",[935,28545,28546],{"align":24379},"重要性与参考依据",[972,28548,28549,28560,28571,28582,28593,28604,28615,28626,28637,28648,28659,28670,28681,28692,28703],{},[932,28550,28551,28554,28557],{},[977,28552,28553],{"align":24379},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[977,28555,28556],{"align":24379},"指定容器名称，便于后续管理",[977,28558,28559],{"align":24379},"替代随机生成的容器名。",[932,28561,28562,28565,28568],{},[977,28563,28564],{"align":24379},"–gpus all",[977,28566,28567],{"align":24379},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[977,28569,28570],{"align":24379},"用于CUDA加速等GPU依赖任务。",[932,28572,28573,28576,28579],{},[977,28574,28575],{"align":24379},"-e NVIDIA_DRIVER_CAPABILITIES=all",[977,28577,28578],{"align":24379},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[977,28580,28581],{"align":24379},"确保容器内GPU功能完整67。",[932,28583,28584,28587,28590],{},[977,28585,28586],{"align":24379},"-dit",[977,28588,28589],{"align":24379},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[977,28591,28592],{"align":24379},"允许容器在后台运行并支持交互操作。",[932,28594,28595,28598,28601],{},[977,28596,28597],{"align":24379},"–privileged",[977,28599,28600],{"align":24379},"赋予容器完全主机权限（可访问设备、内核模块等）",[977,28602,28603],{"align":24379},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[932,28605,28606,28609,28612],{},[977,28607,28608],{"align":24379},"–net=host",[977,28610,28611],{"align":24379},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[977,28613,28614],{"align":24379},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[932,28616,28617,28620,28623],{},[977,28618,28619],{"align":24379},"–group-add audio–group-add video–group-add dialout",[977,28621,28622],{"align":24379},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[977,28624,28625],{"align":24379},"避免权限问题（如避免无法调用摄像头、麦克风）。",[932,28627,28628,28631,28634],{},[977,28629,28630],{"align":24379},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[977,28632,28633],{"align":24379},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[977,28635,28636],{"align":24379},"支持容器内运行图形界面应用（如OpenCV可视化）。",[932,28638,28639,28642,28645],{},[977,28640,28641],{"align":24379},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[977,28643,28644],{"align":24379},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[977,28646,28647],{"align":24379},"实现容器内图形显示。",[932,28649,28650,28653,28656],{},[977,28651,28652],{"align":24379},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[977,28654,28655],{"align":24379},"挂载X11认证文件（只读）",[977,28657,28658],{"align":24379},"确保容器有权连接宿主机显示服务。",[932,28660,28661,28664,28667],{},[977,28662,28663],{"align":24379},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[977,28665,28666],{"align":24379},"挂载Wayland显示协议相关目录",[977,28668,28669],{"align":24379},"支持Wayland协议的图形显示。",[932,28671,28672,28675,28678],{},[977,28673,28674],{"align":24379},"–ulimit nofile=1024:524288",[977,28676,28677],{"align":24379},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[977,28679,28680],{"align":24379},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[932,28682,28683,28686,28689],{},[977,28684,28685],{"align":24379},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[977,28687,28688],{"align":24379},"挂载宿主机用户目录到容器内同名路径",[977,28690,28691],{"align":24379},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[932,28693,28694,28697,28700],{},[977,28695,28696],{"align":24379},"-w \u002Fhome\u002Ftungchiahui",[977,28698,28699],{"align":24379},"设置容器启动后的默认工作目录",[977,28701,28702],{"align":24379},"直接进入项目路径，方便执行命令2324。",[932,28704,28705,28708,28711],{},[977,28706,28707],{"align":24379},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[977,28709,28710],{"align":24379},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[977,28712,28713],{"align":24379},"提供预配置的深度学习与机器人开发环境。",[175,28715,28716,28717,28719,28720,28723],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[55,28718,25220],{},"加不加",[55,28721,28722],{},"sudo -E","都无所谓。",[175,28725,28726,28727,28729,28730,28732,28733,28736,28737,28739],{},"用户已经被加到docker组了，不用",[55,28728,25220],{},"也行跑，其次，",[55,28731,25220],{},"运行的话，你的",[55,28734,28735],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[55,28738,28735],{},"更不可能变了。",[48,28741,28743],{"className":24465,"code":28742,"language":24467,"meta":53,"style":53},"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",[55,28744,28745,28758,28768,28778,28790,28797,28804,28811,28821,28830,28839,28853,28865,28877,28886,28896,28905,28920,28953,28980,28991,28998],{"__ignoreMap":53},[58,28746,28747,28749,28751,28753,28756],{"class":60,"line":61},[58,28748,25220],{"class":379},[58,28750,26964],{"class":386},[58,28752,27874],{"class":386},[58,28754,28755],{"class":82}," --name=ros_opencv_cuda",[58,28757,25322],{"class":82},[58,28759,28760,28763,28766],{"class":60,"line":68},[58,28761,28762],{"class":75},"--gpus ",[58,28764,28765],{"class":386},"all",[58,28767,25322],{"class":82},[58,28769,28770,28773,28776],{"class":60,"line":79},[58,28771,28772],{"class":75},"-e ",[58,28774,28775],{"class":386},"NVIDIA_DRIVER_CAPABILITIES=all",[58,28777,25322],{"class":82},[58,28779,28780,28782,28785,28788],{"class":60,"line":105},[58,28781,28772],{"class":75},[58,28783,28784],{"class":386},"DISPLAY=",[58,28786,28787],{"class":75},"$DISPLAY ",[58,28789,26819],{"class":82},[58,28791,28792,28795],{"class":60,"line":627},[58,28793,28794],{"class":75},"-dit ",[58,28796,26819],{"class":82},[58,28798,28799,28802],{"class":60,"line":509},[58,28800,28801],{"class":75},"--privileged ",[58,28803,26819],{"class":82},[58,28805,28806,28809],{"class":60,"line":559},[58,28807,28808],{"class":75},"--net=host ",[58,28810,26819],{"class":82},[58,28812,28813,28816,28819],{"class":60,"line":654},[58,28814,28815],{"class":75},"--group-add ",[58,28817,28818],{"class":386},"audio",[58,28820,25322],{"class":82},[58,28822,28823,28825,28828],{"class":60,"line":671},[58,28824,28815],{"class":75},[58,28826,28827],{"class":386},"video",[58,28829,25322],{"class":82},[58,28831,28832,28834,28837],{"class":60,"line":677},[58,28833,28815],{"class":75},[58,28835,28836],{"class":386},"dialout",[58,28838,25322],{"class":82},[58,28840,28841,28843,28846,28848,28851],{"class":60,"line":2260},[58,28842,28772],{"class":75},[58,28844,28845],{"class":386},"XAUTHORITY=",[58,28847,28735],{"class":75},[58,28849,28850],{"class":386},"\u002F.Xauthority",[58,28852,25322],{"class":82},[58,28854,28855,28857,28860,28863],{"class":60,"line":694},[58,28856,28772],{"class":75},[58,28858,28859],{"class":386},"WAYLAND_DISPLAY=",[58,28861,28862],{"class":75},"$WAYLAND_DISPLAY ",[58,28864,26819],{"class":82},[58,28866,28867,28869,28872,28875],{"class":60,"line":2270},[58,28868,28772],{"class":75},[58,28870,28871],{"class":386},"XDG_RUNTIME_DIR=",[58,28873,28874],{"class":75},"$XDG_RUNTIME_DIR ",[58,28876,26819],{"class":82},[58,28878,28879,28881,28884],{"class":60,"line":2275},[58,28880,28772],{"class":75},[58,28882,28883],{"class":386},"QT_QPA_PLATFORM=xcb",[58,28885,25322],{"class":82},[58,28887,28888,28891,28894],{"class":60,"line":2289},[58,28889,28890],{"class":75},"-v ",[58,28892,28893],{"class":386},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[58,28895,25322],{"class":82},[58,28897,28898,28900,28903],{"class":60,"line":2294},[58,28899,28890],{"class":75},[58,28901,28902],{"class":386},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[58,28904,25322],{"class":82},[58,28906,28907,28910,28913,28915,28918],{"class":60,"line":2300},[58,28908,28909],{"class":75},"-v $HOME",[58,28911,28912],{"class":386},"\u002F.Xauthority:",[58,28914,28735],{"class":75},[58,28916,28917],{"class":386},"\u002F.Xauthority:ro",[58,28919,25322],{"class":82},[58,28921,28922,28924,28927,28929,28932,28935,28937,28940,28942,28944,28946,28948,28951],{"class":60,"line":2321},[58,28923,28890],{"class":75},[58,28925,28926],{"class":386},"\u002Frun\u002Fuser\u002F",[58,28928,25743],{"class":75},[58,28930,28931],{"class":379},"id",[58,28933,28934],{"class":82}," -u",[58,28936,1215],{"class":75},[58,28938,28939],{"class":386},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[58,28941,25743],{"class":75},[58,28943,28931],{"class":379},[58,28945,28934],{"class":82},[58,28947,1215],{"class":75},[58,28949,28950],{"class":386},"\u002Fwayland-0",[58,28952,25322],{"class":82},[58,28954,28955,28957,28959,28961,28963,28965,28967,28970,28972,28974,28976,28978],{"class":60,"line":2326},[58,28956,28890],{"class":75},[58,28958,28926],{"class":386},[58,28960,25743],{"class":75},[58,28962,28931],{"class":379},[58,28964,28934],{"class":82},[58,28966,1215],{"class":75},[58,28968,28969],{"class":386},":\u002Frun\u002Fuser\u002F",[58,28971,25743],{"class":75},[58,28973,28931],{"class":379},[58,28975,28934],{"class":82},[58,28977,14358],{"class":75},[58,28979,26819],{"class":82},[58,28981,28982,28984,28986,28989],{"class":60,"line":2340},[58,28983,28909],{"class":75},[58,28985,1644],{"class":386},[58,28987,28988],{"class":75},"$HOME ",[58,28990,26819],{"class":82},[58,28992,28993,28996],{"class":60,"line":2345},[58,28994,28995],{"class":75},"-w $HOME ",[58,28997,26819],{"class":82},[58,28999,29000],{"class":60,"line":2374},[58,29001,29002],{"class":75},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[175,29004,195],{},[19,29006,29007,29015,29018,29021],{},[22,29008,29009,14439,29011,29014],{},[55,29010,28775],{},[55,29012,29013],{},"--gpus all","没有英伟达显卡请注释。",[22,29016,29017],{},"--name后面请自己为容器起名。",[22,29019,29020],{},"最后一行仓库名称请你自己找对应的镜像填上。",[22,29022,29023,29024,29029],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24196,29025,29026],{},[25,29027,29028],{},"请不要加","。",[48,29031,29033],{"className":24465,"code":29032,"language":24467,"meta":53,"style":53},"--ulimit nofile=1024:524288 \\\n",[55,29034,29035],{"__ignoreMap":53},[58,29036,29037,29040,29043],{"class":60,"line":61},[58,29038,29039],{"class":379},"--ulimit",[58,29041,29042],{"class":386}," nofile=1024:524288",[58,29044,25322],{"class":82},[175,29046,29047,29048,29053],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24196,29049,29050],{},[25,29051,29052],{},"不建议","**.**",[48,29055,29057],{"className":24465,"code":29056,"language":24467,"meta":53,"style":53},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[55,29058,29059,29086,29095],{"__ignoreMap":53},[58,29060,29061,29064,29067,29069,29071,29073,29075,29077,29079,29082,29084],{"class":60,"line":61},[58,29062,29063],{"class":379},"--user",[58,29065,29066],{"class":75}," $(",[58,29068,28931],{"class":379},[58,29070,28934],{"class":82},[58,29072,1215],{"class":75},[58,29074,1644],{"class":386},[58,29076,25743],{"class":75},[58,29078,28931],{"class":379},[58,29080,29081],{"class":82}," -g",[58,29083,14358],{"class":75},[58,29085,26819],{"class":82},[58,29087,29088,29090,29093],{"class":60,"line":68},[58,29089,28890],{"class":75},[58,29091,29092],{"class":386},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[58,29094,25322],{"class":82},[58,29096,29097,29099,29102],{"class":60,"line":79},[58,29098,28890],{"class":75},[58,29100,29101],{"class":386},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[58,29103,25322],{"class":82},[702,29105,29106],{},"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":53,"searchDepth":68,"depth":68,"links":29108},[29109,29110,29111],{"id":28107,"depth":79,"text":28108},{"id":28117,"depth":79,"text":28118},{"id":28528,"depth":79,"text":28531},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":28099,"description":53},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29118,"title":29119,"body":29120,"description":53,"extension":718,"meta":30743,"navigation":720,"path":30744,"seo":30745,"stem":30746,"__hash__":30747},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29121,"toc":30738},[29122,29125,29129,29132,29354,29358,29362,29365,29471,29476,29479,29484,29487,29492,29495,29500,29503,29515,29518,29523,29530,29558,29565,29641,29646,29649,29672,29674,29749,29754,29757,29761,29769,29774,29779,29783,29794,29800,29803,29806,29830,29833,29836,29864,29867,29870,30335,30338,30343,30348,30352,30375,30380,30384,30388,30391,30394,30397,30424,30427,30430,30448,30451,30454,30476,30484,30489,30494,30498,30501,30504,30507,30510,30555,30558,30576,30579,30584,30587,30608,30611,30667,30670,30675,30679,30682,30689,30692,30695,30700,30703,30719,30722,30735],[10,29123,29119],{"id":29124},"_6手动创建docker镜像",[114,29126,29128],{"id":29127},"_61dockerfile","6.1.DockerFile",[175,29130,29131],{},"常用命令：",[926,29133,29134,29145],{},[929,29135,29136],{},[932,29137,29138,29141,29143],{},[935,29139,29140],{"align":24379},"指令",[935,29142,26513],{"align":24379},[935,29144,28136],{"align":24379},[972,29146,29147,29157,29173,29184,29195,29206,29217,29228,29239,29253,29267,29278,29292,29303,29314,29328,29343],{},[932,29148,29149,29151,29154],{},[977,29150,28014],{"align":24379},[977,29152,29153],{"align":24379},"指定基础镜像，是 Dockerfile 的起点",[977,29155,29156],{"align":24379},"FROM ubuntu:22.04",[932,29158,29159,29162,29165],{},[977,29160,29161],{"align":24379},"LABEL",[977,29163,29164],{"align":24379},"添加元数据（如作者、版本等）",[977,29166,29167,29168,29172],{"align":24379},"LABEL maintainer=”",[376,29169,29171],{"href":29170},"mailto:you@example.com","you@example.com","”",[932,29174,29175,29178,29181],{},[977,29176,29177],{"align":24379},"ENV",[977,29179,29180],{"align":24379},"设置环境变量",[977,29182,29183],{"align":24379},"ENV PORT=8080",[932,29185,29186,29189,29192],{},[977,29187,29188],{"align":24379},"ARG",[977,29190,29191],{"align":24379},"构建参数，只在构建期间可用",[977,29193,29194],{"align":24379},"ARG VERSION=1.0",[932,29196,29197,29200,29203],{},[977,29198,29199],{"align":24379},"RUN",[977,29201,29202],{"align":24379},"构建镜像时运行命令",[977,29204,29205],{"align":24379},"RUN apt-get update && apt-get install -y curl",[932,29207,29208,29211,29214],{},[977,29209,29210],{"align":24379},"COPY",[977,29212,29213],{"align":24379},"复制文件到镜像中",[977,29215,29216],{"align":24379},"COPY . \u002Fapp",[932,29218,29219,29222,29225],{},[977,29220,29221],{"align":24379},"ADD",[977,29223,29224],{"align":24379},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[977,29226,29227],{"align":24379},"ADD archive.tar.gz \u002Fdata\u002F",[932,29229,29230,29233,29236],{},[977,29231,29232],{"align":24379},"WORKDIR",[977,29234,29235],{"align":24379},"设置工作目录",[977,29237,29238],{"align":24379},"WORKDIR \u002Fopt",[932,29240,29241,29244,29247],{},[977,29242,29243],{"align":24379},"CMD",[977,29245,29246],{"align":24379},"设置容器启动时默认命令（可被 docker run 覆盖）",[977,29248,29249,29250],{"align":24379},"CMD ",[58,29251,29252],{},"“node”, “index.js”",[932,29254,29255,29258,29261],{},[977,29256,29257],{"align":24379},"ENTRYPOINT",[977,29259,29260],{"align":24379},"设置容器启动时固定命令（通常用于 CLI 工具等）",[977,29262,29263,29264],{"align":24379},"ENTRYPOINT ",[58,29265,29266],{},"“python3”",[932,29268,29269,29272,29275],{},[977,29270,29271],{"align":24379},"EXPOSE",[977,29273,29274],{"align":24379},"声明镜像内服务监听的端口（不会自动映射）",[977,29276,29277],{"align":24379},"EXPOSE 80",[932,29279,29280,29283,29286],{},[977,29281,29282],{"align":24379},"VOLUME",[977,29284,29285],{"align":24379},"声明数据卷挂载点",[977,29287,29288,29289],{"align":24379},"VOLUME ",[58,29290,29291],{},"“\u002Fdata”",[932,29293,29294,29297,29300],{},[977,29295,29296],{"align":24379},"USER",[977,29298,29299],{"align":24379},"设置后续命令执行的用户",[977,29301,29302],{"align":24379},"USER appuser",[932,29304,29305,29308,29311],{},[977,29306,29307],{"align":24379},"ONBUILD",[977,29309,29310],{"align":24379},"当镜像作为其他镜像基础镜像时触发的构建指令",[977,29312,29313],{"align":24379},"ONBUILD COPY . \u002Fsrc",[932,29315,29316,29319,29322],{},[977,29317,29318],{"align":24379},"SHELL",[977,29320,29321],{"align":24379},"更改默认 shell，比如将 sh -c 改为 bash -c",[977,29323,29324,29325],{"align":24379},"SHELL ",[58,29326,29327],{},"“\u002Fbin\u002Fbash”, “-c”",[932,29329,29330,29333,29336],{},[977,29331,29332],{"align":24379},"HEALTHCHECK",[977,29334,29335],{"align":24379},"定义容器运行时的健康检查命令",[977,29337,29338,29339],{"align":24379},"`HEALTHCHECK CMD curl –fail ",[376,29340,29341],{"href":29341,"rel":29342},"http:\u002F\u002Flocalhost:8080",[24508],[932,29344,29345,29348,29351],{},[977,29346,29347],{"align":24379},"STOPSIGNAL",[977,29349,29350],{"align":24379},"容器停止时发送的信号",[977,29352,29353],{"align":24379},"STOPSIGNAL SIGKILL",[114,29355,29357],{"id":29356},"_62自己创建容器","6.2.自己创建容器",[22641,29359,29361],{"id":29360},"_621手动创建","6.2.1.手动创建",[175,29363,29364],{},"在x86电脑上编译x86的：",[48,29366,29368],{"className":24465,"code":29367,"language":24467,"meta":53,"style":53},"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",[55,29369,29370,29386,29390,29403,29407,29420,29424,29437,29441,29454,29458],{"__ignoreMap":53},[58,29371,29372,29374,29377,29380,29383],{"class":60,"line":61},[58,29373,27197],{"class":379},[58,29375,29376],{"class":386}," build",[58,29378,29379],{"class":82}," -t",[58,29381,29382],{"class":386}," ros-melodic-cuda118-cudnn8-bionic:latest",[58,29384,29385],{"class":386}," .\n",[58,29387,29388],{"class":60,"line":68},[58,29389,3046],{"emptyLinePlaceholder":720},[58,29391,29392,29394,29396,29398,29401],{"class":60,"line":79},[58,29393,27197],{"class":379},[58,29395,29376],{"class":386},[58,29397,29379],{"class":82},[58,29399,29400],{"class":386}," ros-noetic-focal:latest",[58,29402,29385],{"class":386},[58,29404,29405],{"class":60,"line":105},[58,29406,3046],{"emptyLinePlaceholder":720},[58,29408,29409,29411,29413,29415,29418],{"class":60,"line":627},[58,29410,27197],{"class":379},[58,29412,29376],{"class":386},[58,29414,29379],{"class":82},[58,29416,29417],{"class":386}," ros-humble-jammy:latest",[58,29419,29385],{"class":386},[58,29421,29422],{"class":60,"line":509},[58,29423,3046],{"emptyLinePlaceholder":720},[58,29425,29426,29428,29430,29432,29435],{"class":60,"line":559},[58,29427,27197],{"class":379},[58,29429,29376],{"class":386},[58,29431,29379],{"class":82},[58,29433,29434],{"class":386}," ros-jazzy-noble:latest",[58,29436,29385],{"class":386},[58,29438,29439],{"class":60,"line":654},[58,29440,3046],{"emptyLinePlaceholder":720},[58,29442,29443,29445,29447,29449,29452],{"class":60,"line":671},[58,29444,27197],{"class":379},[58,29446,29376],{"class":386},[58,29448,29379],{"class":82},[58,29450,29451],{"class":386}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[58,29453,29385],{"class":386},[58,29455,29456],{"class":60,"line":677},[58,29457,3046],{"emptyLinePlaceholder":720},[58,29459,29460,29462,29464,29466,29469],{"class":60,"line":2260},[58,29461,27197],{"class":379},[58,29463,29376],{"class":386},[58,29465,29379],{"class":82},[58,29467,29468],{"class":386}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[58,29470,29385],{"class":386},[175,29472,29473],{},[119,29474],{"alt":53,"src":29475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[175,29477,29478],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[175,29480,29481],{},[119,29482],{"alt":53,"src":29483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[175,29485,29486],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[19,29488,29489],{},[22,29490,29491],{},"创建 Docker Hub 账户",[175,29493,29494],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[19,29496,29497],{"start":68},[22,29498,29499],{},"登录 Docker Hub",[175,29501,29502],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[48,29504,29506],{"className":24465,"code":29505,"language":24467,"meta":53,"style":53},"docker login\n",[55,29507,29508],{"__ignoreMap":53},[58,29509,29510,29512],{"class":60,"line":61},[58,29511,27197],{"class":379},[58,29513,29514],{"class":386}," login\n",[175,29516,29517],{},"输入你的 Docker Hub 用户名和密码进行验证。",[19,29519,29520],{},[22,29521,29522],{},"为你的镜像打标签",[175,29524,29525,29526,29529],{},"Docker Hub 使用 ",[55,29527,29528],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[48,29531,29533],{"className":24465,"code":29532,"language":24467,"meta":53,"style":53},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[55,29534,29535],{"__ignoreMap":53},[58,29536,29537,29539,29542,29544,29547,29550,29553,29555],{"class":60,"line":61},[58,29538,27197],{"class":379},[58,29540,29541],{"class":386}," tag",[58,29543,29434],{"class":386},[58,29545,29546],{"class":92}," \u003C",[58,29548,29549],{"class":386},"你的用户",[58,29551,29552],{"class":75},"名",[58,29554,1744],{"class":92},[58,29556,29557],{"class":386},"\u002Fros-jazzy-noble:latest\n",[175,29559,29560,29561,29564],{},"例如，如果你的 Docker Hub 用户名是 ",[55,29562,29563],{},"tungchiahui","，你应该执行：",[48,29566,29568],{"className":24465,"code":29567,"language":24467,"meta":53,"style":53},"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",[55,29569,29570,29581,29585,29596,29600,29611,29615,29626,29630],{"__ignoreMap":53},[58,29571,29572,29574,29576,29578],{"class":60,"line":61},[58,29573,27197],{"class":379},[58,29575,29541],{"class":386},[58,29577,29400],{"class":386},[58,29579,29580],{"class":386}," tungchiahui\u002Fros-noetic-focal:latest\n",[58,29582,29583],{"class":60,"line":68},[58,29584,3046],{"emptyLinePlaceholder":720},[58,29586,29587,29589,29591,29593],{"class":60,"line":79},[58,29588,27197],{"class":379},[58,29590,29541],{"class":386},[58,29592,29417],{"class":386},[58,29594,29595],{"class":386}," tungchiahui\u002Fros-humble-jammy:latest\n",[58,29597,29598],{"class":60,"line":105},[58,29599,3046],{"emptyLinePlaceholder":720},[58,29601,29602,29604,29606,29608],{"class":60,"line":627},[58,29603,27197],{"class":379},[58,29605,29541],{"class":386},[58,29607,29434],{"class":386},[58,29609,29610],{"class":386}," tungchiahui\u002Fros-jazzy-noble:latest\n",[58,29612,29613],{"class":60,"line":509},[58,29614,3046],{"emptyLinePlaceholder":720},[58,29616,29617,29619,29621,29623],{"class":60,"line":559},[58,29618,27197],{"class":379},[58,29620,29541],{"class":386},[58,29622,29451],{"class":386},[58,29624,29625],{"class":386}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[58,29627,29628],{"class":60,"line":654},[58,29629,3046],{"emptyLinePlaceholder":720},[58,29631,29632,29634,29636,29638],{"class":60,"line":671},[58,29633,27197],{"class":379},[58,29635,29541],{"class":386},[58,29637,29468],{"class":386},[58,29639,29640],{"class":386}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[19,29642,29643],{"start":68},[22,29644,29645],{},"推送镜像到 Docker Hub",[175,29647,29648],{},"使用以下命令将镜像推送到 Docker Hub：",[48,29650,29652],{"className":24465,"code":29651,"language":24467,"meta":53,"style":53},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[55,29653,29654],{"__ignoreMap":53},[58,29655,29656,29658,29661,29663,29665,29667,29669],{"class":60,"line":61},[58,29657,27197],{"class":379},[58,29659,29660],{"class":386}," push",[58,29662,29546],{"class":92},[58,29664,29549],{"class":386},[58,29666,29552],{"class":75},[58,29668,1744],{"class":92},[58,29670,29671],{"class":386},"\u002Fros-noetic-jazzy-noble:latest\n",[175,29673,15277],{},[48,29675,29677],{"className":24465,"code":29676,"language":24467,"meta":53,"style":53},"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",[55,29678,29679,29687,29691,29699,29703,29711,29715,29724,29728,29736,29740],{"__ignoreMap":53},[58,29680,29681,29683,29685],{"class":60,"line":61},[58,29682,27197],{"class":379},[58,29684,29660],{"class":386},[58,29686,29580],{"class":386},[58,29688,29689],{"class":60,"line":68},[58,29690,3046],{"emptyLinePlaceholder":720},[58,29692,29693,29695,29697],{"class":60,"line":79},[58,29694,27197],{"class":379},[58,29696,29660],{"class":386},[58,29698,29595],{"class":386},[58,29700,29701],{"class":60,"line":105},[58,29702,3046],{"emptyLinePlaceholder":720},[58,29704,29705,29707,29709],{"class":60,"line":627},[58,29706,27197],{"class":379},[58,29708,29660],{"class":386},[58,29710,29610],{"class":386},[58,29712,29713],{"class":60,"line":509},[58,29714,3046],{"emptyLinePlaceholder":720},[58,29716,29717,29719,29721],{"class":60,"line":559},[58,29718,27197],{"class":379},[58,29720,29660],{"class":386},[58,29722,29723],{"class":386}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[58,29725,29726],{"class":60,"line":654},[58,29727,3046],{"emptyLinePlaceholder":720},[58,29729,29730,29732,29734],{"class":60,"line":671},[58,29731,27197],{"class":379},[58,29733,29660],{"class":386},[58,29735,29640],{"class":386},[58,29737,29738],{"class":60,"line":677},[58,29739,3046],{"emptyLinePlaceholder":720},[58,29741,29742,29744,29746],{"class":60,"line":2260},[58,29743,27197],{"class":379},[58,29745,29660],{"class":386},[58,29747,29748],{"class":386}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[19,29750,29751],{"start":79},[22,29752,29753],{},"验证推送成功",[175,29755,29756],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[175,29758,29759],{},[25,29760,4430],{},[124,29762,29763,29766],{},[22,29764,29765],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[22,29767,29768],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[175,29770,29771],{},[119,29772],{"alt":53,"src":29773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[175,29775,29776],{},[119,29777],{"alt":53,"src":29778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22641,29780,29782],{"id":29781},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[175,29784,29785,29786,29789,29790,29793],{},"如果您想在 ",[25,29787,29788],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[25,29791,29792],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[175,29795,29796,29797],{},"1. ",[25,29798,29799],{},"启用 Docker 跨平台构建",[175,29801,29802],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[175,29804,29805],{},"第一步：启用 buildx（只需执行一次）",[48,29807,29809],{"className":24465,"code":29808,"language":24467,"meta":53,"style":53},"docker buildx create --name multiarch_builder --use\n",[55,29810,29811],{"__ignoreMap":53},[58,29812,29813,29815,29818,29821,29824,29827],{"class":60,"line":61},[58,29814,27197],{"class":379},[58,29816,29817],{"class":386}," buildx",[58,29819,29820],{"class":386}," create",[58,29822,29823],{"class":82}," --name",[58,29825,29826],{"class":386}," multiarch_builder",[58,29828,29829],{"class":82}," --use\n",[175,29831,29832],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[175,29834,29835],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[48,29837,29839],{"className":24465,"code":29838,"language":24467,"meta":53,"style":53},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[55,29840,29841],{"__ignoreMap":53},[58,29842,29843,29845,29847,29849,29852,29855,29858,29861],{"class":60,"line":61},[58,29844,27197],{"class":379},[58,29846,27874],{"class":386},[58,29848,27877],{"class":82},[58,29850,29851],{"class":82}," --privileged",[58,29853,29854],{"class":386}," multiarch\u002Fqemu-user-static",[58,29856,29857],{"class":82}," --reset",[58,29859,29860],{"class":82}," -p",[58,29862,29863],{"class":386}," yes\n",[175,29865,29866],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[175,29868,29869],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[48,29871,29873],{"className":24465,"code":29872,"language":24467,"meta":53,"style":53},"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",[55,29874,29875,29917,29921,29926,29936,29946,29955,29961,29965,29969,29979,29987,29996,30002,30006,30010,30020,30028,30037,30043,30047,30051,30061,30069,30078,30084,30088,30092,30102,30110,30119,30125,30129,30133,30143,30151,30160,30166,30170,30174,30184,30192,30201,30207,30211,30215,30225,30233,30242,30248,30252,30256,30266,30274,30283,30289,30293,30297,30308,30316,30325,30331],{"__ignoreMap":53},[58,29876,29877,29879,29881,29883,29886,29889,29891,29893,29896,29898,29900,29902,29904,29907,29910,29912,29915],{"class":60,"line":61},[58,29878,27197],{"class":379},[58,29880,29817],{"class":386},[58,29882,29376],{"class":386},[58,29884,29885],{"class":82}," --platform",[58,29887,29888],{"class":386}," linux\u002Famd64,linux\u002Farm64",[58,29890,29379],{"class":82},[58,29892,29546],{"class":92},[58,29894,29895],{"class":386},"你的镜像",[58,29897,29552],{"class":75},[58,29899,1744],{"class":92},[58,29901,1644],{"class":386},[58,29903,373],{"class":92},[58,29905,29906],{"class":386},"标",[58,29908,29909],{"class":75},"签",[58,29911,1744],{"class":92},[58,29913,29914],{"class":82}," --push",[58,29916,29385],{"class":386},[58,29918,29919],{"class":60,"line":68},[58,29920,3046],{"emptyLinePlaceholder":720},[58,29922,29923],{"class":60,"line":79},[58,29924,29925],{"class":64},"# 例子：\n",[58,29927,29928,29930,29932,29934],{"class":60,"line":105},[58,29929,27197],{"class":379},[58,29931,29817],{"class":386},[58,29933,29376],{"class":386},[58,29935,25322],{"class":82},[58,29937,29938,29941,29944],{"class":60,"line":627},[58,29939,29940],{"class":75},"--platform ",[58,29942,29943],{"class":386},"linux\u002Famd64,linux\u002Farm64",[58,29945,25322],{"class":82},[58,29947,29948,29950,29953],{"class":60,"line":509},[58,29949,29379],{"class":82},[58,29951,29952],{"class":386}," tungchiahui\u002Fros:noetic-focal",[58,29954,25322],{"class":82},[58,29956,29957,29959],{"class":60,"line":559},[58,29958,29914],{"class":82},[58,29960,25322],{"class":82},[58,29962,29963],{"class":60,"line":654},[58,29964,29385],{"class":386},[58,29966,29967],{"class":60,"line":671},[58,29968,3046],{"emptyLinePlaceholder":720},[58,29970,29971,29973,29975,29977],{"class":60,"line":677},[58,29972,27197],{"class":379},[58,29974,29817],{"class":386},[58,29976,29376],{"class":386},[58,29978,25322],{"class":82},[58,29980,29981,29983,29985],{"class":60,"line":2260},[58,29982,29940],{"class":75},[58,29984,29943],{"class":386},[58,29986,25322],{"class":82},[58,29988,29989,29991,29994],{"class":60,"line":694},[58,29990,29379],{"class":82},[58,29992,29993],{"class":386}," tungchiahui\u002Fros:humble-jammy",[58,29995,25322],{"class":82},[58,29997,29998,30000],{"class":60,"line":2270},[58,29999,29914],{"class":82},[58,30001,25322],{"class":82},[58,30003,30004],{"class":60,"line":2275},[58,30005,29385],{"class":386},[58,30007,30008],{"class":60,"line":2289},[58,30009,3046],{"emptyLinePlaceholder":720},[58,30011,30012,30014,30016,30018],{"class":60,"line":2294},[58,30013,27197],{"class":379},[58,30015,29817],{"class":386},[58,30017,29376],{"class":386},[58,30019,25322],{"class":82},[58,30021,30022,30024,30026],{"class":60,"line":2300},[58,30023,29940],{"class":75},[58,30025,29943],{"class":386},[58,30027,25322],{"class":82},[58,30029,30030,30032,30035],{"class":60,"line":2321},[58,30031,29379],{"class":82},[58,30033,30034],{"class":386}," tungchiahui\u002Fros:jazzy-noble",[58,30036,25322],{"class":82},[58,30038,30039,30041],{"class":60,"line":2326},[58,30040,29914],{"class":82},[58,30042,25322],{"class":82},[58,30044,30045],{"class":60,"line":2340},[58,30046,29385],{"class":386},[58,30048,30049],{"class":60,"line":2345},[58,30050,3046],{"emptyLinePlaceholder":720},[58,30052,30053,30055,30057,30059],{"class":60,"line":2374},[58,30054,26964],{"class":379},[58,30056,29817],{"class":386},[58,30058,29376],{"class":386},[58,30060,25322],{"class":82},[58,30062,30063,30065,30067],{"class":60,"line":2379},[58,30064,29940],{"class":75},[58,30066,29943],{"class":386},[58,30068,25322],{"class":82},[58,30070,30071,30073,30076],{"class":60,"line":2396},[58,30072,29379],{"class":82},[58,30074,30075],{"class":386}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[58,30077,25322],{"class":82},[58,30079,30080,30082],{"class":60,"line":2401},[58,30081,29914],{"class":82},[58,30083,25322],{"class":82},[58,30085,30086],{"class":60,"line":2406},[58,30087,29385],{"class":386},[58,30089,30090],{"class":60,"line":2411},[58,30091,3046],{"emptyLinePlaceholder":720},[58,30093,30094,30096,30098,30100],{"class":60,"line":2425},[58,30095,27197],{"class":379},[58,30097,29817],{"class":386},[58,30099,29376],{"class":386},[58,30101,25322],{"class":82},[58,30103,30104,30106,30108],{"class":60,"line":2430},[58,30105,29940],{"class":75},[58,30107,29943],{"class":386},[58,30109,25322],{"class":82},[58,30111,30112,30114,30117],{"class":60,"line":3223},[58,30113,29379],{"class":82},[58,30115,30116],{"class":386}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[58,30118,25322],{"class":82},[58,30120,30121,30123],{"class":60,"line":3237},[58,30122,29914],{"class":82},[58,30124,25322],{"class":82},[58,30126,30127],{"class":60,"line":3245},[58,30128,29385],{"class":386},[58,30130,30131],{"class":60,"line":3250},[58,30132,3046],{"emptyLinePlaceholder":720},[58,30134,30135,30137,30139,30141],{"class":60,"line":3256},[58,30136,26964],{"class":379},[58,30138,29817],{"class":386},[58,30140,29376],{"class":386},[58,30142,25322],{"class":82},[58,30144,30145,30147,30149],{"class":60,"line":3262},[58,30146,29940],{"class":75},[58,30148,29943],{"class":386},[58,30150,25322],{"class":82},[58,30152,30153,30155,30158],{"class":60,"line":3267},[58,30154,29379],{"class":82},[58,30156,30157],{"class":386}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[58,30159,25322],{"class":82},[58,30161,30162,30164],{"class":60,"line":8594},[58,30163,29914],{"class":82},[58,30165,25322],{"class":82},[58,30167,30168],{"class":60,"line":8618},[58,30169,29385],{"class":386},[58,30171,30172],{"class":60,"line":8623},[58,30173,3046],{"emptyLinePlaceholder":720},[58,30175,30176,30178,30180,30182],{"class":60,"line":8629},[58,30177,27197],{"class":379},[58,30179,29817],{"class":386},[58,30181,29376],{"class":386},[58,30183,25322],{"class":82},[58,30185,30186,30188,30190],{"class":60,"line":8656},[58,30187,29940],{"class":75},[58,30189,29943],{"class":386},[58,30191,25322],{"class":82},[58,30193,30194,30196,30199],{"class":60,"line":8661},[58,30195,29379],{"class":82},[58,30197,30198],{"class":386}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[58,30200,25322],{"class":82},[58,30202,30203,30205],{"class":60,"line":8667},[58,30204,29914],{"class":82},[58,30206,25322],{"class":82},[58,30208,30209],{"class":60,"line":8679},[58,30210,29385],{"class":386},[58,30212,30213],{"class":60,"line":8691},[58,30214,3046],{"emptyLinePlaceholder":720},[58,30216,30217,30219,30221,30223],{"class":60,"line":8703},[58,30218,27197],{"class":379},[58,30220,29817],{"class":386},[58,30222,29376],{"class":386},[58,30224,25322],{"class":82},[58,30226,30227,30229,30231],{"class":60,"line":10361},[58,30228,29940],{"class":75},[58,30230,29943],{"class":386},[58,30232,25322],{"class":82},[58,30234,30235,30237,30240],{"class":60,"line":10386},[58,30236,29379],{"class":82},[58,30238,30239],{"class":386}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[58,30241,25322],{"class":82},[58,30243,30244,30246],{"class":60,"line":10409},[58,30245,29914],{"class":82},[58,30247,25322],{"class":82},[58,30249,30250],{"class":60,"line":10433},[58,30251,29385],{"class":386},[58,30253,30254],{"class":60,"line":10438},[58,30255,3046],{"emptyLinePlaceholder":720},[58,30257,30258,30260,30262,30264],{"class":60,"line":10443},[58,30259,26964],{"class":379},[58,30261,29817],{"class":386},[58,30263,29376],{"class":386},[58,30265,25322],{"class":82},[58,30267,30268,30270,30272],{"class":60,"line":10448},[58,30269,29940],{"class":75},[58,30271,29943],{"class":386},[58,30273,25322],{"class":82},[58,30275,30276,30278,30281],{"class":60,"line":10457},[58,30277,29379],{"class":82},[58,30279,30280],{"class":386}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[58,30282,25322],{"class":82},[58,30284,30285,30287],{"class":60,"line":10462},[58,30286,29914],{"class":82},[58,30288,25322],{"class":82},[58,30290,30291],{"class":60,"line":10468},[58,30292,29385],{"class":386},[58,30294,30295],{"class":60,"line":10489},[58,30296,3046],{"emptyLinePlaceholder":720},[58,30298,30299,30302,30304,30306],{"class":60,"line":10495},[58,30300,30301],{"class":379},"  docker",[58,30303,29817],{"class":386},[58,30305,29376],{"class":386},[58,30307,25322],{"class":82},[58,30309,30310,30312,30314],{"class":60,"line":10509},[58,30311,29940],{"class":75},[58,30313,29943],{"class":386},[58,30315,25322],{"class":82},[58,30317,30318,30320,30323],{"class":60,"line":10515},[58,30319,29379],{"class":82},[58,30321,30322],{"class":386}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[58,30324,25322],{"class":82},[58,30326,30327,30329],{"class":60,"line":10542},[58,30328,29914],{"class":82},[58,30330,25322],{"class":82},[58,30332,30333],{"class":60,"line":10551},[58,30334,29385],{"class":386},[175,30336,30337],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[175,30339,30340],{},[119,30341],{"alt":53,"src":30342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[175,30344,30345],{},[119,30346],{"alt":53,"src":30347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22641,30349,30351],{"id":30350},"_623清除构建缓存","6.2.3.清除构建缓存",[48,30353,30355],{"className":24465,"code":30354,"language":24467,"meta":53,"style":53},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[55,30356,30357,30362],{"__ignoreMap":53},[58,30358,30359],{"class":60,"line":61},[58,30360,30361],{"class":64},"# 清理BuildKit构建缓存\n",[58,30363,30364,30366,30369,30372],{"class":60,"line":68},[58,30365,27197],{"class":379},[58,30367,30368],{"class":386}," builder",[58,30370,30371],{"class":386}," prune",[58,30373,30374],{"class":82}," -f\n",[175,30376,30377],{},[119,30378],{"alt":53,"src":30379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[114,30381,30383],{"id":30382},"_63补充","6.3.补充",[22641,30385,30387],{"id":30386},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[175,30389,30390],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[175,30392,30393],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[175,30395,30396],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[48,30398,30400],{"className":24465,"code":30399,"language":24467,"meta":53,"style":53},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[55,30401,30402,30409],{"__ignoreMap":53},[58,30403,30404,30406],{"class":60,"line":61},[58,30405,28014],{"class":379},[58,30407,30408],{"class":386}," nginx\n",[58,30410,30411,30413,30416,30419,30421],{"class":60,"line":68},[58,30412,29199],{"class":379},[58,30414,30415],{"class":386}," echo",[58,30417,30418],{"class":386}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[58,30420,26866],{"class":92},[58,30422,30423],{"class":386}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[175,30425,30426],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[175,30428,30429],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[48,30431,30433],{"className":24465,"code":30432,"language":24467,"meta":53,"style":53},"docker build -t nginx:tuling .\n",[55,30434,30435],{"__ignoreMap":53},[58,30436,30437,30439,30441,30443,30446],{"class":60,"line":61},[58,30438,27197],{"class":379},[58,30440,29376],{"class":386},[58,30442,29379],{"class":82},[58,30444,30445],{"class":386}," nginx:tuling",[58,30447,29385],{"class":386},[175,30449,30450],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[175,30452,30453],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[48,30455,30457],{"className":24465,"code":30456,"language":24467,"meta":53,"style":53},"docker run -d -p 92:80 nginx:tuling\n",[55,30458,30459],{"__ignoreMap":53},[58,30460,30461,30463,30465,30468,30470,30473],{"class":60,"line":61},[58,30462,27197],{"class":379},[58,30464,27874],{"class":386},[58,30466,30467],{"class":82}," -d",[58,30469,29860],{"class":82},[58,30471,30472],{"class":386}," 92:80",[58,30474,30475],{"class":386}," nginx:tuling\n",[175,30477,30478,30479],{},"4、访问 ",[376,30480,30483],{"href":30481,"rel":30482},"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",[24508],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[175,30485,30486],{},[119,30487],{"alt":53,"src":30488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[175,30490,30491],{},[119,30492],{"alt":53,"src":30493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22641,30495,30497],{"id":30496},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[175,30499,30500],{},"只需要知道大体流程即可",[175,30502,30503],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[175,30505,30506],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[175,30508,30509],{},"2、在Dockerfile中添加以下内容",[48,30511,30513],{"className":26735,"code":30512,"language":26737,"meta":53,"style":53},"# 基于哪个镜像\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",[55,30514,30515,30520,30525,30530,30535,30540,30545,30550],{"__ignoreMap":53},[58,30516,30517],{"class":60,"line":61},[58,30518,30519],{},"# 基于哪个镜像\n",[58,30521,30522],{"class":60,"line":68},[58,30523,30524],{},"From java:8\n",[58,30526,30527],{"class":60,"line":79},[58,30528,30529],{},"# 复制文件到容器\n",[58,30531,30532],{"class":60,"line":105},[58,30533,30534],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[58,30536,30537],{"class":60,"line":627},[58,30538,30539],{},"# 声明需要暴露的端口\n",[58,30541,30542],{"class":60,"line":509},[58,30543,30544],{},"EXPOSE 8877\n",[58,30546,30547],{"class":60,"line":559},[58,30548,30549],{},"# 配置容器启动后执行的命令\n",[58,30551,30552],{"class":60,"line":654},[58,30553,30554],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[175,30556,30557],{},"3、使用docker build命令构建镜像",[48,30559,30561],{"className":24465,"code":30560,"language":24467,"meta":53,"style":53},"docker build -t tulingmall-member:0.0.5 .\n",[55,30562,30563],{"__ignoreMap":53},[58,30564,30565,30567,30569,30571,30574],{"class":60,"line":61},[58,30566,27197],{"class":379},[58,30568,29376],{"class":386},[58,30570,29379],{"class":82},[58,30572,30573],{"class":386}," tulingmall-member:0.0.5",[58,30575,29385],{"class":386},[175,30577,30578],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[175,30580,30581],{},[119,30582],{"alt":53,"src":30583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[175,30585,30586],{},"4、启动镜像，加-d可在后台启动",[48,30588,30590],{"className":24465,"code":30589,"language":24467,"meta":53,"style":53},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[55,30591,30592],{"__ignoreMap":53},[58,30593,30594,30596,30598,30600,30602,30605],{"class":60,"line":61},[58,30595,27197],{"class":379},[58,30597,27874],{"class":386},[58,30599,30467],{"class":82},[58,30601,29860],{"class":82},[58,30603,30604],{"class":386}," 8877:8877",[58,30606,30607],{"class":386}," tulingmall-member:0.0.5\n",[175,30609,30610],{},"加上JVM参数：",[48,30612,30614],{"className":24465,"code":30613,"language":24467,"meta":53,"style":53},"# --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",[55,30615,30616,30621,30636,30646,30655,30662],{"__ignoreMap":53},[58,30617,30618],{"class":60,"line":61},[58,30619,30620],{"class":64},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[58,30622,30623,30625,30627,30630,30632,30634],{"class":60,"line":68},[58,30624,27197],{"class":379},[58,30626,27874],{"class":386},[58,30628,30629],{"class":82},"  -d",[58,30631,29860],{"class":82},[58,30633,30604],{"class":386},[58,30635,25322],{"class":82},[58,30637,30638,30640,30643],{"class":60,"line":79},[58,30639,28772],{"class":75},[58,30641,30642],{"class":386},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[58,30644,30645],{"class":82},"  \\\n",[58,30647,30648,30650,30653],{"class":60,"line":105},[58,30649,28772],{"class":75},[58,30651,30652],{"class":386},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[58,30654,30645],{"class":82},[58,30656,30657,30660],{"class":60,"line":627},[58,30658,30659],{"class":75},"--cap-add=SYS_PTRACE  ",[58,30661,26819],{"class":82},[58,30663,30664],{"class":60,"line":509},[58,30665,30666],{"class":75},"tulingmall-member:0.0.5\n",[175,30668,30669],{},"5、访问会员服务接口",[175,30671,30672],{},[119,30673],{"alt":53,"src":30674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22641,30676,30678],{"id":30677},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[175,30680,30681],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[175,30683,30684,30685],{},"阿里云docker镜像仓库：",[376,30686,30687],{"href":30687,"rel":30688},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24508],[175,30690,30691],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[175,30693,30694],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[175,30696,30697],{},[119,30698],{"alt":53,"src":30699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[175,30701,30702],{},"要把镜像推送到镜像仓库",[48,30704,30706],{"className":24465,"code":30705,"language":24467,"meta":53,"style":53},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[55,30707,30708],{"__ignoreMap":53},[58,30709,30710,30712,30714,30716],{"class":60,"line":61},[58,30711,27197],{"class":379},[58,30713,29541],{"class":386},[58,30715,30573],{"class":386},[58,30717,30718],{"class":386}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[175,30720,30721],{},"最后将镜像推送到远程仓库",[48,30723,30725],{"className":24465,"code":30724,"language":24467,"meta":53,"style":53},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[55,30726,30727],{"__ignoreMap":53},[58,30728,30729,30731,30733],{"class":60,"line":61},[58,30730,27197],{"class":379},[58,30732,29660],{"class":386},[58,30734,30718],{"class":386},[702,30736,30737],{},"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":53,"searchDepth":68,"depth":68,"links":30739},[30740,30741,30742],{"id":29127,"depth":79,"text":29128},{"id":29356,"depth":79,"text":29357},{"id":30382,"depth":79,"text":30383},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29119,"description":53},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30749,"title":30750,"body":30751,"description":53,"extension":718,"meta":30894,"navigation":720,"path":30895,"seo":30896,"stem":30897,"__hash__":30898},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30752,"toc":30892},[30753,30756,30761,30766,30769,30774,30779,30782,30787,30792,30795,30800,30803,30806,30809,30812,30815,30818,30838,30860,30863,30866,30886,30889],[10,30754,30750],{"id":30755},"_7vscode远程开发",[19,30757,30758],{},[22,30759,30760],{},"插件1：微软Docker工具",[175,30762,30763],{},[119,30764],{"alt":53,"src":30765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[175,30767,30768],{},"docker扩展插件已经进化为container tools了，请安装container tools",[175,30770,30771],{},[119,30772],{"alt":53,"src":30773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[19,30775,30776],{"start":68},[22,30777,30778],{},"插件2：微软Docker远程开发工具",[175,30780,30781],{},"下面这是远程开发的插件。",[175,30783,30784],{},[119,30785],{"alt":53,"src":30786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[175,30788,30789],{},[119,30790],{"alt":53,"src":30791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[175,30793,30794],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[175,30796,30797],{},[119,30798],{"alt":53,"src":30799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[175,30801,30802],{},"安装完拓展之后，vscode进行链接：",[175,30804,30805],{},"1.按ctrl+shift+p",[175,30807,30808],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[175,30810,30811],{},"3.选择目前运行的容器",[175,30813,30814],{},"4.VS Code 会在新窗口中打开并连接到容器",[175,30816,30817],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[48,30819,30821],{"className":24465,"code":30820,"language":24467,"meta":53,"style":53},"docker run -v 主机目录:容器目录 image-name\n",[55,30822,30823],{"__ignoreMap":53},[58,30824,30825,30827,30829,30832,30835],{"class":60,"line":61},[58,30826,27197],{"class":379},[58,30828,27874],{"class":386},[58,30830,30831],{"class":82}," -v",[58,30833,30834],{"class":386}," 主机目录:容器目录",[58,30836,30837],{"class":386}," image-name\n",[48,30839,30841],{"className":24465,"code":30840,"language":24467,"meta":53,"style":53},"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",[55,30842,30843],{"__ignoreMap":53},[58,30844,30845,30847,30849,30852,30854,30857],{"class":60,"line":61},[58,30846,27197],{"class":379},[58,30848,27874],{"class":386},[58,30850,30851],{"class":82}," -it",[58,30853,30831],{"class":82},[58,30855,30856],{"class":386}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[58,30858,30859],{"class":386}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[175,30861,30862],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[175,30864,30865],{},"查看挂载情况：",[48,30867,30869],{"className":24465,"code":30868,"language":24467,"meta":53,"style":53},"mount | grep -i project\n",[55,30870,30871],{"__ignoreMap":53},[58,30872,30873,30876,30878,30881,30883],{"class":60,"line":61},[58,30874,30875],{"class":379},"mount",[58,30877,25753],{"class":92},[58,30879,30880],{"class":379}," grep",[58,30882,27074],{"class":82},[58,30884,30885],{"class":386}," project\n",[175,30887,30888],{},"也可以通过ls来进行查看",[702,30890,30891],{},"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":53,"searchDepth":68,"depth":68,"links":30893},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30750,"description":53},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30900,"title":30901,"body":30902,"description":717,"extension":718,"meta":30906,"navigation":720,"path":30908,"seo":30909,"stem":30910,"__hash__":30911},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30903,"toc":30904},[],{"title":53,"searchDepth":68,"depth":68,"links":30905},[],{"category":30907},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30901,"description":717},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30913,"title":30914,"body":30915,"description":717,"extension":718,"meta":30919,"navigation":720,"path":30920,"seo":30921,"stem":30922,"__hash__":30923},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30916,"toc":30917},[],{"title":53,"searchDepth":68,"depth":68,"links":30918},[],{"category":30907},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30914,"description":717},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30925,"title":30926,"body":30927,"description":717,"extension":718,"meta":31220,"navigation":720,"path":31221,"seo":31222,"stem":31223,"__hash__":31224},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30928,"toc":31218},[30929,30932,30940,30955,30960,31011,31014,31020,31207,31212,31215],[10,30930,30926],{"id":30931},"_1验证深度学习环境",[175,30933,30934,30935],{},"关于环境的安装，看",[376,30936,30939],{"href":30937,"rel":30938},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24508],"Pytorch-->深度学习",[175,30941,30942,30943,30946,30947,30950,30951,30954],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[55,30944,30945],{},"pytorch-cuda=12.4"," 是一个“ ",[25,30948,30949],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[25,30952,30953],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[175,30956,30957],{},[119,30958],{"alt":53,"src":30959},"\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",[48,30961,30963],{"className":24465,"code":30962,"language":24467,"meta":53,"style":53},"# 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",[55,30964,30965,30970],{"__ignoreMap":53},[58,30966,30967],{"class":60,"line":61},[58,30968,30969],{"class":64},"# CUDA 12.4\n",[58,30971,30972,30975,30977,30980,30983,30986,30989,30992,30994,30997,31000,31003,31006,31008],{"class":60,"line":68},[58,30973,30974],{"class":379},"conda",[58,30976,24477],{"class":386},[58,30978,30979],{"class":386}," pytorch==",[58,30981,30982],{"class":82},"2.5.1",[58,30984,30985],{"class":386}," torchvision==",[58,30987,30988],{"class":82},"0.20.1",[58,30990,30991],{"class":386}," torchaudio==",[58,30993,30982],{"class":82},[58,30995,30996],{"class":386}," pytorch-cuda=",[58,30998,30999],{"class":82},"12.4",[58,31001,31002],{"class":82}," -c",[58,31004,31005],{"class":386}," pytorch",[58,31007,31002],{"class":82},[58,31009,31010],{"class":386}," nvidia\n",[175,31012,31013],{},"）：",[175,31015,31016],{},[376,31017,31018],{"href":31018,"rel":31019},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24508],[48,31021,31025],{"className":31022,"code":31023,"language":31024,"meta":53,"style":53},"language-python shiki shiki-themes github-light github-dark","# 对深度学习环境进行测试\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","python",[55,31026,31027,31032,31040,31045,31055,31071,31076,31086,31123,31130,31142,31158,31163,31173,31185,31195],{"__ignoreMap":53},[58,31028,31029],{"class":60,"line":61},[58,31030,31031],{"class":64},"# 对深度学习环境进行测试\n",[58,31033,31034,31037],{"class":60,"line":68},[58,31035,31036],{"class":92},"import",[58,31038,31039],{"class":75}," torch\n",[58,31041,31042],{"class":60,"line":79},[58,31043,31044],{"class":64},"# 查看cuda是否被激活\n",[58,31046,31047,31050,31052],{"class":60,"line":105},[58,31048,31049],{"class":75},"flag",[58,31051,383],{"class":92},[58,31053,31054],{"class":75},"torch.cuda.is_available()\n",[58,31056,31057,31060,31062,31065,31068],{"class":60,"line":627},[58,31058,31059],{"class":82},"print",[58,31061,793],{"class":75},[58,31063,31064],{"class":386},"\"cuda:\"",[58,31066,31067],{"class":75},", flag)   ",[58,31069,31070],{"class":64},"#返回true的话说明被激活\n",[58,31072,31073],{"class":60,"line":509},[58,31074,31075],{"class":64},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[58,31077,31078,31081,31083],{"class":60,"line":559},[58,31079,31080],{"class":75},"ngpu",[58,31082,383],{"class":92},[58,31084,31085],{"class":82},"1\n",[58,31087,31088,31091,31093,31096,31099,31101,31104,31107,31110,31112,31114,31116,31118,31121],{"class":60,"line":654},[58,31089,31090],{"class":75},"device",[58,31092,383],{"class":92},[58,31094,31095],{"class":75},"torch.device(",[58,31097,31098],{"class":386},"\"cuda:0\"",[58,31100,2351],{"class":92},[58,31102,31103],{"class":75},"(torch.cuda.is_available() ",[58,31105,31106],{"class":92},"and",[58,31108,31109],{"class":75}," ngpu",[58,31111,1744],{"class":92},[58,31113,979],{"class":82},[58,31115,14358],{"class":75},[58,31117,2348],{"class":92},[58,31119,31120],{"class":386}," \"cpu\"",[58,31122,799],{"class":75},[58,31124,31125,31127],{"class":60,"line":671},[58,31126,31059],{"class":82},[58,31128,31129],{"class":75},"(device)\n",[58,31131,31132,31134,31137,31139],{"class":60,"line":677},[58,31133,31059],{"class":82},[58,31135,31136],{"class":75},"(torch.cuda.get_device_name(",[58,31138,979],{"class":82},[58,31140,31141],{"class":75},"))\n",[58,31143,31144,31146,31149,31151,31153,31155],{"class":60,"line":2260},[58,31145,31059],{"class":82},[58,31147,31148],{"class":75},"(torch.rand(",[58,31150,861],{"class":82},[58,31152,1164],{"class":75},[58,31154,861],{"class":82},[58,31156,31157],{"class":75},").cuda())\n",[58,31159,31160],{"class":60,"line":694},[58,31161,31162],{"class":64},"# 查看cuda和cudnn的版本\n",[58,31164,31165,31168,31170],{"class":60,"line":2270},[58,31166,31167],{"class":75},"cuda_version",[58,31169,383],{"class":92},[58,31171,31172],{"class":75},"torch.version.cuda\n",[58,31174,31175,31177,31179,31182],{"class":60,"line":2275},[58,31176,31059],{"class":82},[58,31178,793],{"class":75},[58,31180,31181],{"class":386},"\"cuda version\"",[58,31183,31184],{"class":75},",cuda_version)\n",[58,31186,31187,31190,31192],{"class":60,"line":2289},[58,31188,31189],{"class":75},"cudnn_version",[58,31191,383],{"class":92},[58,31193,31194],{"class":75},"torch.backends.cudnn.version()\n",[58,31196,31197,31199,31201,31204],{"class":60,"line":2294},[58,31198,31059],{"class":82},[58,31200,793],{"class":75},[58,31202,31203],{"class":386},"\"cudnn version\"",[58,31205,31206],{"class":75},",cudnn_version)\n",[175,31208,31209],{},[119,31210],{"alt":53,"src":31211},"\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",[175,31213,31214],{},"cuda:0 指的是一块显卡",[702,31216,31217],{},"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":53,"searchDepth":68,"depth":68,"links":31219},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30926,"description":717},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31226,"title":31227,"body":31228,"description":717,"extension":718,"meta":51032,"navigation":720,"path":51033,"seo":51034,"stem":51035,"__hash__":51036},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31229,"toc":51026},[31230,31233,31237,31241,31244,31249,31254,31257,31262,31267,31272,31275,31279,31284,31288,31293,31296,31301,31304,31307,31310,31313,31318,31321,31326,31331,31336,31341,31344,31348,31351,31356,31960,31965,31968,31973,31976,31979,32443,32446,32449,32452,32455,34506,34509,34514,34519,35314,35317,35322,36100,36104,37763,37767,38481,38485,38489,38494,38499,38504,38507,38512,38517,38522,38527,38532,38536,38541,39823,39828,39831,39834,39837,39992,39995,39998,41214,41219,41914,41918,41922,41927,41932,41935,41940,41945,41950,41955,41960,41965,41970,41975,41980,41985,41990,41995,42000,42005,42010,42015,42020,42025,42030,42035,42040,42045,42050,42055,42060,42065,42070,42075,42080,42085,42089,42093,42096,43574,43578,45225,45229,45923,45927,45930,45933,46477,46480,46484,46487,47884,47888,47891,48469,50256,50260,50263,51023],[10,31231,31227],{"id":31232},"_2经典神经网络",[114,31234,31236],{"id":31235},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22641,31238,31240],{"id":31239},"_211原理介绍","2.1.1.原理介绍",[175,31242,31243],{},"LeNet-5",[19,31245,31246],{},[22,31247,31248],{},"原理",[175,31250,31251],{},[119,31252],{"alt":53,"src":31253},"\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",[175,31255,31256],{},"B是batch批次；C是channel通道",[19,31258,31259],{"start":68},[22,31260,31261],{},"网络参数详细",[175,31263,31264],{},[119,31265],{"alt":53,"src":31266},"\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",[175,31268,31269],{},[119,31270],{"alt":53,"src":31271},"\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",[175,31273,31274],{},"AlexNet",[19,31276,31277],{},[22,31278,31248],{},[175,31280,31281],{},[119,31282],{"alt":53,"src":31283},"\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",[19,31285,31286],{"start":68},[22,31287,31261],{},[175,31289,31290],{},[119,31291],{"alt":53,"src":31292},"\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",[175,31294,31295],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[175,31297,31298],{},[119,31299],{"alt":53,"src":31300},"\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",[175,31302,31303],{},"数据处理中的图像增强操作:",[175,31305,31306],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[175,31308,31309],{},"①增加数据量，保证训练数据充足；②防止过拟合",[175,31311,31312],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[175,31314,31315],{},[119,31316],{"alt":53,"src":31317},"\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",[175,31319,31320],{},"提升网络精确度的方法：LRN正则化",[175,31322,31323],{},[119,31324],{"alt":53,"src":31325},"\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",[175,31327,31328],{},[119,31329],{"alt":53,"src":31330},"\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",[19,31332,31333],{"start":79},[22,31334,31335],{},"AlexNet的总结",[175,31337,31338],{},[119,31339],{"alt":53,"src":31340},"\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",[175,31342,31343],{},"比LeNet模型要深一丢丢",[22641,31345,31347],{"id":31346},"_212代码实现","2.1.2.代码实现",[175,31349,31350],{},"（1）LeNet",[19,31352,31353],{},[22,31354,31355],{},"模型搭建",[48,31357,31359],{"className":31022,"code":31358,"language":31024,"meta":53,"style":53},"# 导入库\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",[55,31360,31361,31366,31372,31377,31390,31395,31407,31411,31431,31436,31441,31452,31457,31476,31480,31485,31534,31546,31551,31580,31615,31642,31647,31659,31664,31684,31703,31722,31726,31731,31741,31758,31769,31784,31795,31806,31821,31836,31847,31854,31858,31872,31877,31900,31905,31910,31915,31919,31924,31929,31939],{"__ignoreMap":53},[58,31362,31363],{"class":60,"line":61},[58,31364,31365],{"class":64},"# 导入库\n",[58,31367,31368,31370],{"class":60,"line":68},[58,31369,31036],{"class":92},[58,31371,31039],{"class":75},[58,31373,31374],{"class":60,"line":79},[58,31375,31376],{"class":64},"# 导入神经网络层\n",[58,31378,31379,31382,31385,31387],{"class":60,"line":105},[58,31380,31381],{"class":92},"from",[58,31383,31384],{"class":75}," torch ",[58,31386,31036],{"class":92},[58,31388,31389],{"class":75}," nn\n",[58,31391,31392],{"class":60,"line":627},[58,31393,31394],{"class":64},"# 导入展示神经网络参数的包\n",[58,31396,31397,31399,31402,31404],{"class":60,"line":509},[58,31398,31381],{"class":92},[58,31400,31401],{"class":75}," torchsummary ",[58,31403,31036],{"class":92},[58,31405,31406],{"class":75}," summary\n",[58,31408,31409],{"class":60,"line":559},[58,31410,3046],{"emptyLinePlaceholder":720},[58,31412,31413,31415,31418,31420,31423,31425,31428],{"class":60,"line":654},[58,31414,15338],{"class":92},[58,31416,31417],{"class":379}," LeNet",[58,31419,793],{"class":75},[58,31421,31422],{"class":379},"nn",[58,31424,1344],{"class":75},[58,31426,31427],{"class":379},"Module",[58,31429,31430],{"class":75},"):\n",[58,31432,31433],{"class":60,"line":671},[58,31434,31435],{"class":64},"    # 模型初始化:\n",[58,31437,31438],{"class":60,"line":677},[58,31439,31440],{"class":64},"    # 定义一些网络层和激活函数\n",[58,31442,31443,31446,31449],{"class":60,"line":2260},[58,31444,31445],{"class":92},"    def",[58,31447,31448],{"class":82}," __init__",[58,31450,31451],{"class":75},"(self):\n",[58,31453,31454],{"class":60,"line":694},[58,31455,31456],{"class":64},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[58,31458,31459,31462,31465,31468,31471,31474],{"class":60,"line":2270},[58,31460,31461],{"class":82},"        super",[58,31463,31464],{"class":75},"(LeNet,",[58,31466,31467],{"class":82},"self",[58,31469,31470],{"class":75},").",[58,31472,31473],{"class":82},"__init__",[58,31475,2622],{"class":75},[58,31477,31478],{"class":60,"line":2275},[58,31479,3046],{"emptyLinePlaceholder":720},[58,31481,31482],{"class":60,"line":2289},[58,31483,31484],{"class":64},"        # 定义网络层\n",[58,31486,31487,31490,31493,31495,31498,31501,31503,31505,31507,31510,31512,31514,31516,31519,31521,31523,31525,31528,31530,31532],{"class":60,"line":2294},[58,31488,31489],{"class":82},"        self",[58,31491,31492],{"class":75},".c1",[58,31494,383],{"class":92},[58,31496,31497],{"class":75},"nn.Conv2d(",[58,31499,31500],{"class":5862},"in_channels",[58,31502,383],{"class":92},[58,31504,89],{"class":82},[58,31506,1164],{"class":75},[58,31508,31509],{"class":5862},"out_channels",[58,31511,383],{"class":92},[58,31513,1130],{"class":82},[58,31515,1164],{"class":75},[58,31517,31518],{"class":5862},"kernel_size",[58,31520,383],{"class":92},[58,31522,1105],{"class":82},[58,31524,1164],{"class":75},[58,31526,31527],{"class":5862},"padding",[58,31529,383],{"class":92},[58,31531,867],{"class":82},[58,31533,799],{"class":75},[58,31535,31536,31538,31541,31543],{"class":60,"line":2300},[58,31537,31489],{"class":82},[58,31539,31540],{"class":75},".sig",[58,31542,383],{"class":92},[58,31544,31545],{"class":75},"nn.Sigmoid()\n",[58,31547,31548],{"class":60,"line":2321},[58,31549,31550],{"class":64},"        # 定义池化\n",[58,31552,31553,31555,31558,31560,31563,31565,31567,31569,31571,31574,31576,31578],{"class":60,"line":2326},[58,31554,31489],{"class":82},[58,31556,31557],{"class":75},".s2",[58,31559,383],{"class":92},[58,31561,31562],{"class":75},"nn.AvgPool2d(",[58,31564,31518],{"class":5862},[58,31566,383],{"class":92},[58,31568,867],{"class":82},[58,31570,1164],{"class":75},[58,31572,31573],{"class":5862},"stride",[58,31575,383],{"class":92},[58,31577,867],{"class":82},[58,31579,799],{"class":75},[58,31581,31582,31584,31587,31589,31591,31593,31595,31597,31599,31601,31603,31605,31607,31609,31611,31613],{"class":60,"line":2340},[58,31583,31489],{"class":82},[58,31585,31586],{"class":75},".c3",[58,31588,383],{"class":92},[58,31590,31497],{"class":75},[58,31592,31500],{"class":5862},[58,31594,383],{"class":92},[58,31596,1130],{"class":82},[58,31598,1164],{"class":75},[58,31600,31509],{"class":5862},[58,31602,383],{"class":92},[58,31604,1387],{"class":82},[58,31606,1164],{"class":75},[58,31608,31518],{"class":5862},[58,31610,383],{"class":92},[58,31612,1105],{"class":82},[58,31614,799],{"class":75},[58,31616,31617,31619,31622,31624,31626,31628,31630,31632,31634,31636,31638,31640],{"class":60,"line":2345},[58,31618,31489],{"class":82},[58,31620,31621],{"class":75},".s4",[58,31623,383],{"class":92},[58,31625,31562],{"class":75},[58,31627,31518],{"class":5862},[58,31629,383],{"class":92},[58,31631,867],{"class":82},[58,31633,1164],{"class":75},[58,31635,31573],{"class":5862},[58,31637,383],{"class":92},[58,31639,867],{"class":82},[58,31641,799],{"class":75},[58,31643,31644],{"class":60,"line":2374},[58,31645,31646],{"class":64},"        # 定义平展层\n",[58,31648,31649,31651,31654,31656],{"class":60,"line":2379},[58,31650,31489],{"class":82},[58,31652,31653],{"class":75},".flatten",[58,31655,383],{"class":92},[58,31657,31658],{"class":75},"nn.Flatten()\n",[58,31660,31661],{"class":60,"line":2396},[58,31662,31663],{"class":64},"        # 定义全连接层\n",[58,31665,31666,31668,31671,31673,31676,31678,31680,31682],{"class":60,"line":2401},[58,31667,31489],{"class":82},[58,31669,31670],{"class":75},".f5",[58,31672,383],{"class":92},[58,31674,31675],{"class":75},"nn.Linear(",[58,31677,4633],{"class":82},[58,31679,1164],{"class":75},[58,31681,1602],{"class":82},[58,31683,799],{"class":75},[58,31685,31686,31688,31691,31693,31695,31697,31699,31701],{"class":60,"line":2406},[58,31687,31489],{"class":82},[58,31689,31690],{"class":75},".f6",[58,31692,383],{"class":92},[58,31694,31675],{"class":75},[58,31696,1602],{"class":82},[58,31698,1164],{"class":75},[58,31700,1497],{"class":82},[58,31702,799],{"class":75},[58,31704,31705,31707,31710,31712,31714,31716,31718,31720],{"class":60,"line":2411},[58,31706,31489],{"class":82},[58,31708,31709],{"class":75},".f7",[58,31711,383],{"class":92},[58,31713,31675],{"class":75},[58,31715,1497],{"class":82},[58,31717,1164],{"class":75},[58,31719,1232],{"class":82},[58,31721,799],{"class":75},[58,31723,31724],{"class":60,"line":2425},[58,31725,3046],{"emptyLinePlaceholder":720},[58,31727,31728],{"class":60,"line":2430},[58,31729,31730],{"class":64},"    # 写工具->写前向传播\n",[58,31732,31733,31735,31738],{"class":60,"line":3223},[58,31734,31445],{"class":92},[58,31736,31737],{"class":379}," forward",[58,31739,31740],{"class":75},"(self,x):\n",[58,31742,31743,31746,31748,31750,31753,31755],{"class":60,"line":3237},[58,31744,31745],{"class":75},"        x",[58,31747,383],{"class":92},[58,31749,31467],{"class":82},[58,31751,31752],{"class":75},".sig(",[58,31754,31467],{"class":82},[58,31756,31757],{"class":75},".c1(x))\n",[58,31759,31760,31762,31764,31766],{"class":60,"line":3245},[58,31761,31745],{"class":75},[58,31763,383],{"class":92},[58,31765,31467],{"class":82},[58,31767,31768],{"class":75},".s2(x)\n",[58,31770,31771,31773,31775,31777,31779,31781],{"class":60,"line":3250},[58,31772,31745],{"class":75},[58,31774,383],{"class":92},[58,31776,31467],{"class":82},[58,31778,31752],{"class":75},[58,31780,31467],{"class":82},[58,31782,31783],{"class":75},".c3(x))\n",[58,31785,31786,31788,31790,31792],{"class":60,"line":3256},[58,31787,31745],{"class":75},[58,31789,383],{"class":92},[58,31791,31467],{"class":82},[58,31793,31794],{"class":75},".s4(x)\n",[58,31796,31797,31799,31801,31803],{"class":60,"line":3262},[58,31798,31745],{"class":75},[58,31800,383],{"class":92},[58,31802,31467],{"class":82},[58,31804,31805],{"class":75},".flatten(x)\n",[58,31807,31808,31810,31812,31814,31816,31818],{"class":60,"line":3267},[58,31809,31745],{"class":75},[58,31811,383],{"class":92},[58,31813,31467],{"class":82},[58,31815,31752],{"class":75},[58,31817,31467],{"class":82},[58,31819,31820],{"class":75},".f5(x))\n",[58,31822,31823,31825,31827,31829,31831,31833],{"class":60,"line":8594},[58,31824,31745],{"class":75},[58,31826,383],{"class":92},[58,31828,31467],{"class":82},[58,31830,31752],{"class":75},[58,31832,31467],{"class":82},[58,31834,31835],{"class":75},".f6(x))\n",[58,31837,31838,31840,31842,31844],{"class":60,"line":8618},[58,31839,31745],{"class":75},[58,31841,383],{"class":92},[58,31843,31467],{"class":82},[58,31845,31846],{"class":75},".f7(x)\n",[58,31848,31849,31851],{"class":60,"line":8623},[58,31850,15396],{"class":92},[58,31852,31853],{"class":75}," x\n",[58,31855,31856],{"class":60,"line":8629},[58,31857,3046],{"emptyLinePlaceholder":720},[58,31859,31860,31862,31865,31867,31870],{"class":60,"line":8656},[58,31861,2180],{"class":92},[58,31863,31864],{"class":82}," __name__",[58,31866,3595],{"class":92},[58,31868,31869],{"class":386},"\"__main__\"",[58,31871,4385],{"class":75},[58,31873,31874],{"class":60,"line":8661},[58,31875,31876],{"class":64},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[58,31878,31879,31882,31884,31886,31889,31891,31894,31896,31898],{"class":60,"line":8667},[58,31880,31881],{"class":75},"    device",[58,31883,383],{"class":92},[58,31885,31095],{"class":75},[58,31887,31888],{"class":386},"\"cuda\"",[58,31890,2351],{"class":92},[58,31892,31893],{"class":75}," torch.cuda.is_available() ",[58,31895,2348],{"class":92},[58,31897,31120],{"class":386},[58,31899,799],{"class":75},[58,31901,31902],{"class":60,"line":8679},[58,31903,31904],{"class":64},"    # 如果就是想指定用cpu用下方代码:\n",[58,31906,31907],{"class":60,"line":8691},[58,31908,31909],{"class":64},"    # device=\"cpu\"\n",[58,31911,31912],{"class":60,"line":8703},[58,31913,31914],{"class":64},"    # print(device)\n",[58,31916,31917],{"class":60,"line":10361},[58,31918,3046],{"emptyLinePlaceholder":720},[58,31920,31921],{"class":60,"line":10386},[58,31922,31923],{"class":64},"    # 实例化模型\n",[58,31925,31926],{"class":60,"line":10409},[58,31927,31928],{"class":64},"    # 将模型放到设备中去运行\n",[58,31930,31931,31934,31936],{"class":60,"line":10433},[58,31932,31933],{"class":75},"    model",[58,31935,383],{"class":92},[58,31937,31938],{"class":75},"LeNet().to(device)\n",[58,31940,31941,31944,31947,31949,31951,31953,31955,31957],{"class":60,"line":10438},[58,31942,31943],{"class":82},"    print",[58,31945,31946],{"class":75},"(summary(model,(",[58,31948,89],{"class":82},[58,31950,1164],{"class":75},[58,31952,1686],{"class":82},[58,31954,1164],{"class":75},[58,31956,1686],{"class":82},[58,31958,31959],{"class":75},")))\n",[175,31961,31962],{},[119,31963],{"alt":53,"src":31964},"\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",[175,31966,31967],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[19,31969,31970],{"start":68},[22,31971,31972],{},"训练",[175,31974,31975],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[175,31977,31978],{},"在训练之前可以将数据展示看一下",[48,31980,31982],{"className":31022,"code":31981,"language":31024,"meta":53,"style":53},"# 建立画图的函数，用于展示数据\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",[55,31983,31984,31989,31994,32006,32018,32031,32036,32048,32053,32065,32070,32082,32086,32090,32111,32123,32128,32149,32160,32164,32169,32187,32198,32203,32214,32219,32230,32234,32239,32254,32267,32272,32277,32290,32303,32316,32321,32325,32330,32350,32367,32387,32400,32413,32423,32438],{"__ignoreMap":53},[58,31985,31986],{"class":60,"line":61},[58,31987,31988],{"class":64},"# 建立画图的函数，用于展示数据\n",[58,31990,31991],{"class":60,"line":68},[58,31992,31993],{"class":64},"# torchvision中包含很多内置的数据集\n",[58,31995,31996,31998,32001,32003],{"class":60,"line":79},[58,31997,31381],{"class":92},[58,31999,32000],{"class":75}," sklearn.externals.array_api_compat.torch ",[58,32002,31036],{"class":92},[58,32004,32005],{"class":75}," squeeze\n",[58,32007,32008,32010,32013,32015],{"class":60,"line":105},[58,32009,31381],{"class":92},[58,32011,32012],{"class":75}," torchvision.datasets ",[58,32014,31036],{"class":92},[58,32016,32017],{"class":75}," FashionMNIST\n",[58,32019,32020,32022,32025,32028],{"class":60,"line":627},[58,32021,31036],{"class":92},[58,32023,32024],{"class":75}," numpy ",[58,32026,32027],{"class":92},"as",[58,32029,32030],{"class":75}," np\n",[58,32032,32033],{"class":60,"line":509},[58,32034,32035],{"class":64},"# 引入处理数据集的包\n",[58,32037,32038,32040,32043,32045],{"class":60,"line":559},[58,32039,31381],{"class":92},[58,32041,32042],{"class":75}," torchvision ",[58,32044,31036],{"class":92},[58,32046,32047],{"class":75}," transforms\n",[58,32049,32050],{"class":60,"line":654},[58,32051,32052],{"class":64},"# 从torch库中引入数据处理的包\n",[58,32054,32055,32057,32060,32062],{"class":60,"line":671},[58,32056,31036],{"class":92},[58,32058,32059],{"class":75}," torch.utils.data ",[58,32061,32027],{"class":92},[58,32063,32064],{"class":75}," Data\n",[58,32066,32067],{"class":60,"line":677},[58,32068,32069],{"class":64},"# 导入画图的库\n",[58,32071,32072,32074,32077,32079],{"class":60,"line":2260},[58,32073,31036],{"class":92},[58,32075,32076],{"class":75}," matplotlib.pyplot ",[58,32078,32027],{"class":92},[58,32080,32081],{"class":75}," plt\n",[58,32083,32084],{"class":60,"line":694},[58,32085,3046],{"emptyLinePlaceholder":720},[58,32087,32088],{"class":60,"line":2270},[58,32089,3046],{"emptyLinePlaceholder":720},[58,32091,32092,32095,32097,32100,32103,32105,32108],{"class":60,"line":2275},[58,32093,32094],{"class":75},"train_data",[58,32096,383],{"class":92},[58,32098,32099],{"class":75},"FashionMNIST(",[58,32101,32102],{"class":5862},"root",[58,32104,383],{"class":92},[58,32106,32107],{"class":386},"'.\u002Fdata'",[58,32109,32110],{"class":75},",\n",[58,32112,32113,32116,32118,32121],{"class":60,"line":2289},[58,32114,32115],{"class":5862},"                        train",[58,32117,383],{"class":92},[58,32119,32120],{"class":82},"True",[58,32122,32110],{"class":75},[58,32124,32125],{"class":60,"line":2294},[58,32126,32127],{"class":64},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[58,32129,32130,32133,32135,32138,32141,32143,32146],{"class":60,"line":2300},[58,32131,32132],{"class":5862},"                        transform",[58,32134,383],{"class":92},[58,32136,32137],{"class":75},"transforms.Compose([transforms.Resize(",[58,32139,32140],{"class":5862},"size",[58,32142,383],{"class":92},[58,32144,32145],{"class":82},"224",[58,32147,32148],{"class":75},"),transforms.ToTensor()]),\n",[58,32150,32151,32154,32156,32158],{"class":60,"line":2321},[58,32152,32153],{"class":5862},"                        download",[58,32155,383],{"class":92},[58,32157,32120],{"class":82},[58,32159,799],{"class":75},[58,32161,32162],{"class":60,"line":2326},[58,32163,3046],{"emptyLinePlaceholder":720},[58,32165,32166],{"class":60,"line":2340},[58,32167,32168],{"class":64},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[58,32170,32171,32174,32176,32179,32182,32184],{"class":60,"line":2345},[58,32172,32173],{"class":75},"train_loader",[58,32175,383],{"class":92},[58,32177,32178],{"class":75},"Data.DataLoader(",[58,32180,32181],{"class":5862},"dataset",[58,32183,383],{"class":92},[58,32185,32186],{"class":75},"train_data,\n",[58,32188,32189,32192,32194,32196],{"class":60,"line":2374},[58,32190,32191],{"class":5862},"                             batch_size",[58,32193,383],{"class":92},[58,32195,991],{"class":82},[58,32197,32110],{"class":75},[58,32199,32200],{"class":60,"line":2379},[58,32201,32202],{"class":64},"                             # 数据是否打乱\n",[58,32204,32205,32208,32210,32212],{"class":60,"line":2396},[58,32206,32207],{"class":5862},"                             shuffle",[58,32209,383],{"class":92},[58,32211,32120],{"class":82},[58,32213,32110],{"class":75},[58,32215,32216],{"class":60,"line":2401},[58,32217,32218],{"class":64},"                             # 规定加载数据的进程\n",[58,32220,32221,32224,32226,32228],{"class":60,"line":2406},[58,32222,32223],{"class":5862},"                             num_workers",[58,32225,383],{"class":92},[58,32227,979],{"class":82},[58,32229,799],{"class":75},[58,32231,32232],{"class":60,"line":2411},[58,32233,3046],{"emptyLinePlaceholder":720},[58,32235,32236],{"class":60,"line":2425},[58,32237,32238],{"class":64},"# 获得一个batch的数据\n",[58,32240,32241,32243,32246,32248,32251],{"class":60,"line":2430},[58,32242,3671],{"class":92},[58,32244,32245],{"class":75}," step,(b_x,b_y) ",[58,32247,26687],{"class":92},[58,32249,32250],{"class":82}," enumerate",[58,32252,32253],{"class":75},"(train_loader):\n",[58,32255,32256,32258,32261,32263,32265],{"class":60,"line":3223},[58,32257,3747],{"class":92},[58,32259,32260],{"class":75}," step ",[58,32262,1744],{"class":92},[58,32264,4739],{"class":82},[58,32266,4385],{"class":75},[58,32268,32269],{"class":60,"line":3237},[58,32270,32271],{"class":92},"        break\n",[58,32273,32274],{"class":60,"line":3245},[58,32275,32276],{"class":64},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[58,32278,32279,32282,32284,32287],{"class":60,"line":3250},[58,32280,32281],{"class":75},"batch_x",[58,32283,383],{"class":92},[58,32285,32286],{"class":75},"b_x.squeeze().numpy()  ",[58,32288,32289],{"class":64},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[58,32291,32292,32295,32297,32300],{"class":60,"line":3256},[58,32293,32294],{"class":75},"batch_y",[58,32296,383],{"class":92},[58,32298,32299],{"class":75},"b_y.numpy()   ",[58,32301,32302],{"class":64},"#将张量转换成功numpy数组\n",[58,32304,32305,32308,32310,32313],{"class":60,"line":3262},[58,32306,32307],{"class":75},"class_label",[58,32309,383],{"class":92},[58,32311,32312],{"class":75},"train_data.classes  ",[58,32314,32315],{"class":64},"#训练集标签\n",[58,32317,32318],{"class":60,"line":3267},[58,32319,32320],{"class":64},"# print(class_label)\n",[58,32322,32323],{"class":60,"line":8594},[58,32324,3046],{"emptyLinePlaceholder":720},[58,32326,32327],{"class":60,"line":8618},[58,32328,32329],{"class":64},"# 可视化一个batch的图像\n",[58,32331,32332,32335,32338,32340,32342,32344,32346,32348],{"class":60,"line":8623},[58,32333,32334],{"class":75},"plt.figure(",[58,32336,32337],{"class":5862},"figsize",[58,32339,383],{"class":92},[58,32341,793],{"class":75},[58,32343,1284],{"class":82},[58,32345,1164],{"class":75},[58,32347,1105],{"class":82},[58,32349,31141],{"class":75},[58,32351,32352,32354,32357,32359,32362,32364],{"class":60,"line":8629},[58,32353,3671],{"class":92},[58,32355,32356],{"class":75}," ii ",[58,32358,26687],{"class":92},[58,32360,32361],{"class":75}," np.arange(",[58,32363,8004],{"class":82},[58,32365,32366],{"class":75},"(batch_y)):\n",[58,32368,32369,32372,32374,32376,32378,32381,32383,32385],{"class":60,"line":8656},[58,32370,32371],{"class":75},"    plt.subplot(",[58,32373,1079],{"class":82},[58,32375,1164],{"class":75},[58,32377,1387],{"class":82},[58,32379,32380],{"class":75},",ii ",[58,32382,1267],{"class":92},[58,32384,25762],{"class":82},[58,32386,799],{"class":75},[58,32388,32389,32392,32395,32397],{"class":60,"line":8661},[58,32390,32391],{"class":75},"    plt.imshow(batch_x[ii,:,:],",[58,32393,32394],{"class":5862},"cmap",[58,32396,383],{"class":92},[58,32398,32399],{"class":75},"plt.cm.gray)\n",[58,32401,32402,32405,32407,32409,32411],{"class":60,"line":8667},[58,32403,32404],{"class":75},"    plt.title(class_label[batch_y[ii]],",[58,32406,32140],{"class":5862},[58,32408,383],{"class":92},[58,32410,1232],{"class":82},[58,32412,799],{"class":75},[58,32414,32415,32418,32421],{"class":60,"line":8679},[58,32416,32417],{"class":75},"    plt.axis(",[58,32419,32420],{"class":386},"\"off\"",[58,32422,799],{"class":75},[58,32424,32425,32428,32431,32433,32436],{"class":60,"line":8691},[58,32426,32427],{"class":75},"    plt.subplots_adjust(",[58,32429,32430],{"class":5862},"wspace",[58,32432,383],{"class":92},[58,32434,32435],{"class":82},"0.05",[58,32437,799],{"class":75},[58,32439,32440],{"class":60,"line":8703},[58,32441,32442],{"class":75},"plt.show()\n",[175,32444,32445],{},"用matplotlib进行展示的过程可以后续再补",[175,32447,32448],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[175,32450,32451],{},"训练次数就是按照批次过整个训练集数据的次数",[175,32453,32454],{},"模型训练：",[48,32456,32458],{"className":31022,"code":32457,"language":31024,"meta":53,"style":53},"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",[55,32459,32460,32467,32474,32478,32490,32496,32507,32517,32527,32537,32547,32552,32564,32574,32578,32582,32587,32598,32611,32622,32639,32650,32689,32705,32717,32728,32733,32744,32760,32771,32782,32793,32800,32804,32809,32814,32818,32823,32833,32854,32858,32862,32867,32872,32877,32897,32901,32906,32916,32920,32925,32934,32939,32944,32949,32959,32963,32967,32972,32977,32987,32992,33002,33007,33016,33021,33030,33035,33044,33048,33053,33063,33067,33071,33076,33091,33119,33134,33138,33143,33148,33157,33162,33171,33176,33185,33190,33199,33204,33213,33218,33227,33232,33245,33250,33260,33265,33275,33281,33287,33293,33299,33310,33316,33336,33342,33353,33359,33365,33371,33377,33383,33389,33395,33415,33421,33437,33443,33457,33463,33478,33484,33493,33499,33508,33514,33520,33529,33535,33546,33552,33571,33577,33588,33594,33614,33630,33636,33650,33656,33662,33673,33679,33685,33695,33701,33712,33718,33728,33733,33739,33788,33835,33840,33846,33865,33871,33891,33897,33903,33913,33918,33924,33940,33985,33991,33997,34003,34014,34020,34026,34032,34050,34064,34073,34082,34091,34100,34106,34112,34120,34125,34131,34142,34148,34168,34174,34180,34186,34203,34209,34215,34221,34227,34233,34260,34284,34290,34296,34302,34313,34324,34330,34347,34370,34393,34399,34404,34413,34423,34429,34434,34440,34453,34459,34470,34481,34500],{"__ignoreMap":53},[58,32461,32462,32464],{"class":60,"line":61},[58,32463,31036],{"class":92},[58,32465,32466],{"class":75}," copy\n",[58,32468,32469,32471],{"class":60,"line":68},[58,32470,31036],{"class":92},[58,32472,32473],{"class":75}," time\n",[58,32475,32476],{"class":60,"line":79},[58,32477,3046],{"emptyLinePlaceholder":720},[58,32479,32480,32482,32485,32487],{"class":60,"line":105},[58,32481,31036],{"class":92},[58,32483,32484],{"class":75}," pandas ",[58,32486,32027],{"class":92},[58,32488,32489],{"class":75}," pd\n",[58,32491,32492,32494],{"class":60,"line":627},[58,32493,31036],{"class":92},[58,32495,31039],{"class":75},[58,32497,32498,32500,32502,32504],{"class":60,"line":509},[58,32499,31381],{"class":92},[58,32501,32059],{"class":75},[58,32503,31036],{"class":92},[58,32505,32506],{"class":75}," Dataset\n",[58,32508,32509,32511,32513,32515],{"class":60,"line":559},[58,32510,31381],{"class":92},[58,32512,32012],{"class":75},[58,32514,31036],{"class":92},[58,32516,32017],{"class":75},[58,32518,32519,32521,32523,32525],{"class":60,"line":654},[58,32520,31381],{"class":92},[58,32522,32042],{"class":75},[58,32524,31036],{"class":92},[58,32526,32047],{"class":75},[58,32528,32529,32531,32533,32535],{"class":60,"line":671},[58,32530,31036],{"class":92},[58,32532,32059],{"class":75},[58,32534,32027],{"class":92},[58,32536,32064],{"class":75},[58,32538,32539,32541,32543,32545],{"class":60,"line":677},[58,32540,31036],{"class":92},[58,32542,32076],{"class":75},[58,32544,32027],{"class":92},[58,32546,32081],{"class":75},[58,32548,32549],{"class":60,"line":2260},[58,32550,32551],{"class":64},"# 导入模型\n",[58,32553,32554,32556,32559,32561],{"class":60,"line":694},[58,32555,31381],{"class":92},[58,32557,32558],{"class":75}," model ",[58,32560,31036],{"class":92},[58,32562,32563],{"class":75}," LeNet\n",[58,32565,32566,32568,32570,32572],{"class":60,"line":2270},[58,32567,31381],{"class":92},[58,32569,31384],{"class":75},[58,32571,31036],{"class":92},[58,32573,31389],{"class":75},[58,32575,32576],{"class":60,"line":2275},[58,32577,3046],{"emptyLinePlaceholder":720},[58,32579,32580],{"class":60,"line":2289},[58,32581,3046],{"emptyLinePlaceholder":720},[58,32583,32584],{"class":60,"line":2294},[58,32585,32586],{"class":64},"# 处理训练集与验证集函数--->划分数据集\n",[58,32588,32589,32592,32595],{"class":60,"line":2300},[58,32590,32591],{"class":92},"def",[58,32593,32594],{"class":379}," train_val_data_process",[58,32596,32597],{"class":75},"():\n",[58,32599,32600,32603,32605,32607,32609],{"class":60,"line":2321},[58,32601,32602],{"class":75},"    train_data",[58,32604,383],{"class":92},[58,32606,32099],{"class":75},[58,32608,32107],{"class":386},[58,32610,32110],{"class":75},[58,32612,32613,32616,32618,32620],{"class":60,"line":2326},[58,32614,32615],{"class":5862},"                            train",[58,32617,383],{"class":92},[58,32619,32120],{"class":82},[58,32621,32110],{"class":75},[58,32623,32624,32627,32629,32631,32633,32635,32637],{"class":60,"line":2340},[58,32625,32626],{"class":5862},"                            transform",[58,32628,383],{"class":92},[58,32630,32137],{"class":75},[58,32632,32140],{"class":5862},[58,32634,383],{"class":92},[58,32636,1686],{"class":82},[58,32638,32148],{"class":75},[58,32640,32641,32644,32646,32648],{"class":60,"line":2345},[58,32642,32643],{"class":5862},"                            download",[58,32645,383],{"class":92},[58,32647,32120],{"class":82},[58,32649,799],{"class":75},[58,32651,32652,32655,32657,32660,32663,32665,32668,32670,32672,32675,32677,32679,32682,32684,32686],{"class":60,"line":2374},[58,32653,32654],{"class":75},"    train_data,val_data",[58,32656,383],{"class":92},[58,32658,32659],{"class":75},"Data.random_split(train_data,[",[58,32661,32662],{"class":82},"round",[58,32664,793],{"class":75},[58,32666,32667],{"class":82},"0.8",[58,32669,1241],{"class":92},[58,32671,8004],{"class":82},[58,32673,32674],{"class":75},"(train_data)),",[58,32676,32662],{"class":82},[58,32678,793],{"class":75},[58,32680,32681],{"class":82},"0.2",[58,32683,1241],{"class":92},[58,32685,8004],{"class":82},[58,32687,32688],{"class":75},"(train_data))])\n",[58,32690,32691,32694,32696,32699,32701,32703],{"class":60,"line":2379},[58,32692,32693],{"class":75},"    train_dataloader ",[58,32695,383],{"class":92},[58,32697,32698],{"class":75}," Data.DataLoader(",[58,32700,32181],{"class":5862},[58,32702,383],{"class":92},[58,32704,32186],{"class":75},[58,32706,32707,32710,32712,32715],{"class":60,"line":2396},[58,32708,32709],{"class":5862},"                                       batch_size",[58,32711,383],{"class":92},[58,32713,32714],{"class":82},"128",[58,32716,32110],{"class":75},[58,32718,32719,32722,32724,32726],{"class":60,"line":2401},[58,32720,32721],{"class":5862},"                                       shuffle",[58,32723,383],{"class":92},[58,32725,32120],{"class":82},[58,32727,32110],{"class":75},[58,32729,32730],{"class":60,"line":2406},[58,32731,32732],{"class":64},"                                       # 规定8个进程\n",[58,32734,32735,32738,32740,32742],{"class":60,"line":2411},[58,32736,32737],{"class":5862},"                                       num_workers",[58,32739,383],{"class":92},[58,32741,1181],{"class":82},[58,32743,799],{"class":75},[58,32745,32746,32749,32751,32753,32755,32757],{"class":60,"line":2425},[58,32747,32748],{"class":75},"    val_dataloader",[58,32750,383],{"class":92},[58,32752,32178],{"class":75},[58,32754,32181],{"class":5862},[58,32756,383],{"class":92},[58,32758,32759],{"class":75},"val_data,\n",[58,32761,32762,32765,32767,32769],{"class":60,"line":2430},[58,32763,32764],{"class":5862},"                                   batch_size",[58,32766,383],{"class":92},[58,32768,32714],{"class":82},[58,32770,32110],{"class":75},[58,32772,32773,32776,32778,32780],{"class":60,"line":3223},[58,32774,32775],{"class":5862},"                                   shuffle",[58,32777,383],{"class":92},[58,32779,32120],{"class":82},[58,32781,32110],{"class":75},[58,32783,32784,32787,32789,32791],{"class":60,"line":3237},[58,32785,32786],{"class":5862},"                                   num_workers",[58,32788,383],{"class":92},[58,32790,1181],{"class":82},[58,32792,799],{"class":75},[58,32794,32795,32797],{"class":60,"line":3245},[58,32796,4736],{"class":92},[58,32798,32799],{"class":75}," train_dataloader,val_dataloader\n",[58,32801,32802],{"class":60,"line":3250},[58,32803,3046],{"emptyLinePlaceholder":720},[58,32805,32806],{"class":60,"line":3256},[58,32807,32808],{"class":64},"# 验证是否出错\n",[58,32810,32811],{"class":60,"line":3262},[58,32812,32813],{"class":64},"# train_val_data_process()\n",[58,32815,32816],{"class":60,"line":3267},[58,32817,3046],{"emptyLinePlaceholder":720},[58,32819,32820],{"class":60,"line":8594},[58,32821,32822],{"class":64},"# 定义模型训练函数\n",[58,32824,32825,32827,32830],{"class":60,"line":8618},[58,32826,32591],{"class":92},[58,32828,32829],{"class":379}," train_model_process",[58,32831,32832],{"class":75},"(model,train_dataloader,val_dataloader,num_epochs):\n",[58,32834,32835,32837,32839,32841,32843,32845,32847,32849,32852],{"class":60,"line":8623},[58,32836,31881],{"class":75},[58,32838,383],{"class":92},[58,32840,31095],{"class":75},[58,32842,31888],{"class":386},[58,32844,2351],{"class":92},[58,32846,31893],{"class":75},[58,32848,2348],{"class":92},[58,32850,32851],{"class":386}," 'cpu'",[58,32853,799],{"class":75},[58,32855,32856],{"class":60,"line":8629},[58,32857,3046],{"emptyLinePlaceholder":720},[58,32859,32860],{"class":60,"line":8656},[58,32861,3046],{"emptyLinePlaceholder":720},[58,32863,32864],{"class":60,"line":8661},[58,32865,32866],{"class":64},"    # 定义优化器\n",[58,32868,32869],{"class":60,"line":8667},[58,32870,32871],{"class":64},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[58,32873,32874],{"class":60,"line":8679},[58,32875,32876],{"class":64},"    # lr为学习率\n",[58,32878,32879,32882,32884,32887,32890,32892,32895],{"class":60,"line":8691},[58,32880,32881],{"class":75},"    optimizer",[58,32883,383],{"class":92},[58,32885,32886],{"class":75},"torch.optim.Adam(model.parameters(),",[58,32888,32889],{"class":5862},"lr",[58,32891,383],{"class":92},[58,32893,32894],{"class":82},"0.001",[58,32896,799],{"class":75},[58,32898,32899],{"class":60,"line":8703},[58,32900,3046],{"emptyLinePlaceholder":720},[58,32902,32903],{"class":60,"line":10361},[58,32904,32905],{"class":64},"    # 定义损失函数使用交叉熵损失函数\n",[58,32907,32908,32911,32913],{"class":60,"line":10386},[58,32909,32910],{"class":75},"    criterion",[58,32912,383],{"class":92},[58,32914,32915],{"class":75},"nn.CrossEntropyLoss()\n",[58,32917,32918],{"class":60,"line":10409},[58,32919,3046],{"emptyLinePlaceholder":720},[58,32921,32922],{"class":60,"line":10433},[58,32923,32924],{"class":64},"    # 将模型放到GPU中进行训练\n",[58,32926,32927,32929,32931],{"class":60,"line":10438},[58,32928,31933],{"class":75},[58,32930,383],{"class":92},[58,32932,32933],{"class":75},"model.to(device)\n",[58,32935,32936],{"class":60,"line":10443},[58,32937,32938],{"class":64},"    # 复制当前模型的参数\n",[58,32940,32941],{"class":60,"line":10448},[58,32942,32943],{"class":64},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[58,32945,32946],{"class":60,"line":10457},[58,32947,32948],{"class":64},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[58,32950,32951,32954,32956],{"class":60,"line":10462},[58,32952,32953],{"class":75},"    best_model_wts",[58,32955,383],{"class":92},[58,32957,32958],{"class":75},"copy.deepcopy(model.state_dict())\n",[58,32960,32961],{"class":60,"line":10468},[58,32962,3046],{"emptyLinePlaceholder":720},[58,32964,32965],{"class":60,"line":10489},[58,32966,3046],{"emptyLinePlaceholder":720},[58,32968,32969],{"class":60,"line":10495},[58,32970,32971],{"class":64},"    # 初始化参数\n",[58,32973,32974],{"class":60,"line":10509},[58,32975,32976],{"class":64},"    # 最高准确度\n",[58,32978,32979,32982,32984],{"class":60,"line":10515},[58,32980,32981],{"class":75},"    best_acc",[58,32983,383],{"class":92},[58,32985,32986],{"class":82},"0.0\n",[58,32988,32989],{"class":60,"line":10542},[58,32990,32991],{"class":64},"    # 训练集损失列表\n",[58,32993,32994,32997,32999],{"class":60,"line":10551},[58,32995,32996],{"class":75},"    train_loss_all",[58,32998,383],{"class":92},[58,33000,33001],{"class":75},"[]\n",[58,33003,33004],{"class":60,"line":10557},[58,33005,33006],{"class":64},"    # 验证集函数列表\n",[58,33008,33009,33012,33014],{"class":60,"line":10565},[58,33010,33011],{"class":75},"    val_loss_all",[58,33013,383],{"class":92},[58,33015,33001],{"class":75},[58,33017,33018],{"class":60,"line":10570},[58,33019,33020],{"class":64},"    # 训练集准确度列表\n",[58,33022,33023,33026,33028],{"class":60,"line":17247},[58,33024,33025],{"class":75},"    train_acc_all",[58,33027,383],{"class":92},[58,33029,33001],{"class":75},[58,33031,33032],{"class":60,"line":17253},[58,33033,33034],{"class":64},"    # 验证集准确度列表\n",[58,33036,33037,33040,33042],{"class":60,"line":17276},[58,33038,33039],{"class":75},"    val_acc_all",[58,33041,383],{"class":92},[58,33043,33001],{"class":75},[58,33045,33046],{"class":60,"line":17282},[58,33047,3046],{"emptyLinePlaceholder":720},[58,33049,33050],{"class":60,"line":17305},[58,33051,33052],{"class":64},"    # 保存当前时间--->方便看每轮训练的时间\n",[58,33054,33055,33058,33060],{"class":60,"line":17319},[58,33056,33057],{"class":75},"    since",[58,33059,383],{"class":92},[58,33061,33062],{"class":75},"time.time()\n",[58,33064,33065],{"class":60,"line":17339},[58,33066,3046],{"emptyLinePlaceholder":720},[58,33068,33069],{"class":60,"line":17345},[58,33070,3046],{"emptyLinePlaceholder":720},[58,33072,33073],{"class":60,"line":17356},[58,33074,33075],{"class":64},"    # 准备工作完成--->开始训练模型\n",[58,33077,33078,33080,33083,33085,33088],{"class":60,"line":17379},[58,33079,3847],{"class":92},[58,33081,33082],{"class":75}," epoch ",[58,33084,26687],{"class":92},[58,33086,33087],{"class":82}," range",[58,33089,33090],{"class":75},"(num_epochs):\n",[58,33092,33093,33096,33098,33101,33104,33106,33108,33110,33113,33115,33117],{"class":60,"line":17401},[58,33094,33095],{"class":82},"        print",[58,33097,793],{"class":75},[58,33099,33100],{"class":386},"\"Epoch ",[58,33102,33103],{"class":82},"{}",[58,33105,1370],{"class":386},[58,33107,33103],{"class":82},[58,33109,1037],{"class":386},[58,33111,33112],{"class":75},".format(epoch,num_epochs",[58,33114,1318],{"class":92},[58,33116,89],{"class":82},[58,33118,31141],{"class":75},[58,33120,33121,33123,33125,33128,33130,33132],{"class":60,"line":17406},[58,33122,33095],{"class":82},[58,33124,793],{"class":75},[58,33126,33127],{"class":386},"\"-\"",[58,33129,1241],{"class":92},[58,33131,1232],{"class":82},[58,33133,799],{"class":75},[58,33135,33136],{"class":60,"line":17412},[58,33137,3046],{"emptyLinePlaceholder":720},[58,33139,33140],{"class":60,"line":17426},[58,33141,33142],{"class":64},"        # 初始化参数\n",[58,33144,33145],{"class":60,"line":17439},[58,33146,33147],{"class":64},"        # 训练集损失函数\n",[58,33149,33150,33153,33155],{"class":60,"line":17444},[58,33151,33152],{"class":75},"        train_loss",[58,33154,383],{"class":92},[58,33156,32986],{"class":82},[58,33158,33159],{"class":60,"line":17458},[58,33160,33161],{"class":64},"        # 训练集准确度\n",[58,33163,33164,33167,33169],{"class":60,"line":17463},[58,33165,33166],{"class":75},"        train_corrects",[58,33168,383],{"class":92},[58,33170,3731],{"class":82},[58,33172,33173],{"class":60,"line":17469},[58,33174,33175],{"class":64},"        # 验证集损失函数\n",[58,33177,33178,33181,33183],{"class":60,"line":17474},[58,33179,33180],{"class":75},"        val_loss",[58,33182,383],{"class":92},[58,33184,32986],{"class":82},[58,33186,33187],{"class":60,"line":17488},[58,33188,33189],{"class":64},"        # 验证集准确度\n",[58,33191,33192,33195,33197],{"class":60,"line":17493},[58,33193,33194],{"class":75},"        val_corrects",[58,33196,383],{"class":92},[58,33198,3731],{"class":82},[58,33200,33201],{"class":60,"line":17498},[58,33202,33203],{"class":64},"        # 训练集样本数量\n",[58,33205,33206,33209,33211],{"class":60,"line":17512},[58,33207,33208],{"class":75},"        train_num",[58,33210,383],{"class":92},[58,33212,3731],{"class":82},[58,33214,33215],{"class":60,"line":17524},[58,33216,33217],{"class":64},"        # 验证集样本数量\n",[58,33219,33220,33223,33225],{"class":60,"line":17529},[58,33221,33222],{"class":75},"        val_num",[58,33224,383],{"class":92},[58,33226,3731],{"class":82},[58,33228,33229],{"class":60,"line":17542},[58,33230,33231],{"class":64},"        # 将数据放到设备,并开始训练\n",[58,33233,33234,33236,33238,33240,33242],{"class":60,"line":17547},[58,33235,4049],{"class":92},[58,33237,32245],{"class":75},[58,33239,26687],{"class":92},[58,33241,32250],{"class":82},[58,33243,33244],{"class":75},"(train_dataloader):\n",[58,33246,33247],{"class":60,"line":17552},[58,33248,33249],{"class":64},"            # 将特征放入到训练设备\n",[58,33251,33252,33255,33257],{"class":60,"line":17557},[58,33253,33254],{"class":75},"            b_x",[58,33256,383],{"class":92},[58,33258,33259],{"class":75},"b_x.to(device)\n",[58,33261,33262],{"class":60,"line":17570},[58,33263,33264],{"class":64},"            # 将标签放入到训练设备当中\n",[58,33266,33267,33270,33272],{"class":60,"line":17575},[58,33268,33269],{"class":75},"            b_y",[58,33271,383],{"class":92},[58,33273,33274],{"class":75},"b_y.to(device)\n",[58,33276,33278],{"class":60,"line":33277},98,[58,33279,33280],{"class":64},"            # 设置模型为训练模式\n",[58,33282,33284],{"class":60,"line":33283},99,[58,33285,33286],{"class":75},"            model.train()\n",[58,33288,33290],{"class":60,"line":33289},100,[58,33291,33292],{"class":64},"            # 将数据放到模型当中,开始前向传播\n",[58,33294,33296],{"class":60,"line":33295},101,[58,33297,33298],{"class":64},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[58,33300,33302,33305,33307],{"class":60,"line":33301},102,[58,33303,33304],{"class":75},"            output",[58,33306,383],{"class":92},[58,33308,33309],{"class":75},"model(b_x)\n",[58,33311,33313],{"class":60,"line":33312},103,[58,33314,33315],{"class":64},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[58,33317,33319,33322,33324,33327,33330,33332,33334],{"class":60,"line":33318},104,[58,33320,33321],{"class":75},"            pre_lab",[58,33323,383],{"class":92},[58,33325,33326],{"class":75},"torch.argmax(output,",[58,33328,33329],{"class":5862},"dim",[58,33331,383],{"class":92},[58,33333,89],{"class":82},[58,33335,799],{"class":75},[58,33337,33339],{"class":60,"line":33338},105,[58,33340,33341],{"class":64},"            # 计算每一个batch的损失函数\n",[58,33343,33345,33348,33350],{"class":60,"line":33344},106,[58,33346,33347],{"class":75},"            loss",[58,33349,383],{"class":92},[58,33351,33352],{"class":75},"criterion(output,b_y)\n",[58,33354,33356],{"class":60,"line":33355},107,[58,33357,33358],{"class":64},"            # 将梯度初始化为0\n",[58,33360,33362],{"class":60,"line":33361},108,[58,33363,33364],{"class":75},"            optimizer.zero_grad()\n",[58,33366,33368],{"class":60,"line":33367},109,[58,33369,33370],{"class":64},"            # 梯度置为0后再进行反向传播\n",[58,33372,33374],{"class":60,"line":33373},110,[58,33375,33376],{"class":75},"            loss.backward()\n",[58,33378,33380],{"class":60,"line":33379},111,[58,33381,33382],{"class":64},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[58,33384,33386],{"class":60,"line":33385},112,[58,33387,33388],{"class":75},"            optimizer.step()\n",[58,33390,33392],{"class":60,"line":33391},113,[58,33393,33394],{"class":64},"            # loss.item()指的是batch的平均损失\n",[58,33396,33398,33401,33403,33406,33408,33411,33413],{"class":60,"line":33397},114,[58,33399,33400],{"class":75},"            train_loss",[58,33402,10122],{"class":92},[58,33404,33405],{"class":75},"loss.item()",[58,33407,1241],{"class":92},[58,33409,33410],{"class":75},"b_x.size(",[58,33412,979],{"class":82},[58,33414,799],{"class":75},[58,33416,33418],{"class":60,"line":33417},115,[58,33419,33420],{"class":64},"            # 计算每个批次中正确预测的数量\n",[58,33422,33424,33427,33429,33432,33434],{"class":60,"line":33423},116,[58,33425,33426],{"class":75},"            train_corrects",[58,33428,10122],{"class":92},[58,33430,33431],{"class":75},"torch.sum(pre_lab",[58,33433,3595],{"class":92},[58,33435,33436],{"class":75},"b_y.data)\n",[58,33438,33440],{"class":60,"line":33439},117,[58,33441,33442],{"class":64},"            # 计算目前为止一共处理了多少样本\n",[58,33444,33446,33449,33451,33453,33455],{"class":60,"line":33445},118,[58,33447,33448],{"class":75},"            train_num",[58,33450,10122],{"class":92},[58,33452,33410],{"class":75},[58,33454,979],{"class":82},[58,33456,799],{"class":75},[58,33458,33460],{"class":60,"line":33459},119,[58,33461,33462],{"class":64},"        # 验证数据\n",[58,33464,33466,33468,33471,33473,33475],{"class":60,"line":33465},120,[58,33467,4049],{"class":92},[58,33469,33470],{"class":75}," step ,(b_x,b_y) ",[58,33472,26687],{"class":92},[58,33474,32250],{"class":82},[58,33476,33477],{"class":75},"(val_dataloader):\n",[58,33479,33481],{"class":60,"line":33480},121,[58,33482,33483],{"class":64},"            # 将特征放到验证设备当中\n",[58,33485,33487,33489,33491],{"class":60,"line":33486},122,[58,33488,33254],{"class":75},[58,33490,383],{"class":92},[58,33492,33259],{"class":75},[58,33494,33496],{"class":60,"line":33495},123,[58,33497,33498],{"class":64},"            # 将标签放到放到训练设备当中\n",[58,33500,33502,33504,33506],{"class":60,"line":33501},124,[58,33503,33269],{"class":75},[58,33505,383],{"class":92},[58,33507,33274],{"class":75},[58,33509,33511],{"class":60,"line":33510},125,[58,33512,33513],{"class":64},"            # 开启验证模式，设置模型为评估模式\n",[58,33515,33517],{"class":60,"line":33516},126,[58,33518,33519],{"class":75},"            model.eval()\n",[58,33521,33523,33526],{"class":60,"line":33522},127,[58,33524,33525],{"class":92},"            with",[58,33527,33528],{"class":75}," torch.no_grad():\n",[58,33530,33532],{"class":60,"line":33531},128,[58,33533,33534],{"class":64},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[58,33536,33538,33541,33543],{"class":60,"line":33537},129,[58,33539,33540],{"class":75},"                output ",[58,33542,383],{"class":92},[58,33544,33545],{"class":75}," model(b_x)\n",[58,33547,33549],{"class":60,"line":33548},130,[58,33550,33551],{"class":64},"                # 查找每一行中最大值对应的下标\n",[58,33553,33555,33558,33560,33563,33565,33567,33569],{"class":60,"line":33554},131,[58,33556,33557],{"class":75},"                pre_lab ",[58,33559,383],{"class":92},[58,33561,33562],{"class":75}," torch.argmax(output, ",[58,33564,33329],{"class":5862},[58,33566,383],{"class":92},[58,33568,89],{"class":82},[58,33570,799],{"class":75},[58,33572,33574],{"class":60,"line":33573},132,[58,33575,33576],{"class":64},"                # 计算验证集上的当前 batch 损失\n",[58,33578,33580,33583,33585],{"class":60,"line":33579},133,[58,33581,33582],{"class":75},"                val_batch_loss ",[58,33584,383],{"class":92},[58,33586,33587],{"class":75}," criterion(output, b_y)\n",[58,33589,33591],{"class":60,"line":33590},134,[58,33592,33593],{"class":64},"                # 对损失函数进行累加（按样本数加权）\n",[58,33595,33597,33600,33602,33605,33607,33610,33612],{"class":60,"line":33596},135,[58,33598,33599],{"class":75},"                val_loss ",[58,33601,10122],{"class":92},[58,33603,33604],{"class":75}," val_batch_loss.item() ",[58,33606,1241],{"class":92},[58,33608,33609],{"class":75}," b_x.size(",[58,33611,979],{"class":82},[58,33613,799],{"class":75},[58,33615,33617,33620,33622,33625,33627],{"class":60,"line":33616},136,[58,33618,33619],{"class":75},"                val_corrects ",[58,33621,10122],{"class":92},[58,33623,33624],{"class":75}," torch.sum(pre_lab ",[58,33626,3595],{"class":92},[58,33628,33629],{"class":75}," b_y.data)\n",[58,33631,33633],{"class":60,"line":33632},137,[58,33634,33635],{"class":64},"                # 当前用于验证的样本数量\n",[58,33637,33639,33642,33644,33646,33648],{"class":60,"line":33638},138,[58,33640,33641],{"class":75},"            val_num ",[58,33643,10122],{"class":92},[58,33645,33609],{"class":75},[58,33647,979],{"class":82},[58,33649,799],{"class":75},[58,33651,33653],{"class":60,"line":33652},139,[58,33654,33655],{"class":64},"        # 计算并保存每一次迭代的loss值和准确率\n",[58,33657,33659],{"class":60,"line":33658},140,[58,33660,33661],{"class":64},"        # 计算并保存训练集的loss值\n",[58,33663,33665,33668,33670],{"class":60,"line":33664},141,[58,33666,33667],{"class":75},"        train_loss_all.append(train_loss",[58,33669,1370],{"class":92},[58,33671,33672],{"class":75},"train_num)\n",[58,33674,33676],{"class":60,"line":33675},142,[58,33677,33678],{"class":64},"        # 取双精度\n",[58,33680,33682],{"class":60,"line":33681},143,[58,33683,33684],{"class":64},"        # 计算并保存训练集的准确率\n",[58,33686,33688,33691,33693],{"class":60,"line":33687},144,[58,33689,33690],{"class":75},"        train_acc_all.append(train_corrects.double().item()",[58,33692,1370],{"class":92},[58,33694,33672],{"class":75},[58,33696,33698],{"class":60,"line":33697},145,[58,33699,33700],{"class":64},"        # 计算并保存验证集的loss值\n",[58,33702,33704,33707,33709],{"class":60,"line":33703},146,[58,33705,33706],{"class":75},"        val_loss_all.append(val_loss",[58,33708,1370],{"class":92},[58,33710,33711],{"class":75},"val_num)\n",[58,33713,33715],{"class":60,"line":33714},147,[58,33716,33717],{"class":64},"        # 计算并保存验证集的准确率\n",[58,33719,33721,33724,33726],{"class":60,"line":33720},148,[58,33722,33723],{"class":75},"        val_acc_all.append(val_corrects.double().item()",[58,33725,1370],{"class":92},[58,33727,33711],{"class":75},[58,33729,33731],{"class":60,"line":33730},149,[58,33732,3046],{"emptyLinePlaceholder":720},[58,33734,33736],{"class":60,"line":33735},150,[58,33737,33738],{"class":64},"        # 打印训练一轮的loss值和准确率\n",[58,33740,33742,33744,33746,33748,33750,33753,33755,33758,33760,33763,33765,33767,33769,33771,33774,33776,33778,33781,33783,33785],{"class":60,"line":33741},151,[58,33743,33095],{"class":82},[58,33745,793],{"class":75},[58,33747,4238],{"class":386},[58,33749,33103],{"class":82},[58,33751,33752],{"class":386},"train loss:",[58,33754,1681],{"class":82},[58,33756,33757],{"class":92},":.4f",[58,33759,1730],{"class":82},[58,33761,33762],{"class":386}," train acc:",[58,33764,1681],{"class":82},[58,33766,33757],{"class":92},[58,33768,1730],{"class":82},[58,33770,4238],{"class":386},[58,33772,33773],{"class":75},".format(epoch,train_loss_all[",[58,33775,1318],{"class":92},[58,33777,89],{"class":82},[58,33779,33780],{"class":75},"],train_acc_all[",[58,33782,1318],{"class":92},[58,33784,89],{"class":82},[58,33786,33787],{"class":75},"]))\n",[58,33789,33791,33793,33795,33797,33799,33802,33804,33806,33808,33811,33813,33815,33817,33819,33822,33824,33826,33829,33831,33833],{"class":60,"line":33790},152,[58,33792,33095],{"class":82},[58,33794,793],{"class":75},[58,33796,4238],{"class":386},[58,33798,33103],{"class":82},[58,33800,33801],{"class":386},"val loss:",[58,33803,1681],{"class":82},[58,33805,33757],{"class":92},[58,33807,1730],{"class":82},[58,33809,33810],{"class":386}," val acc:",[58,33812,1681],{"class":82},[58,33814,33757],{"class":92},[58,33816,1730],{"class":82},[58,33818,4238],{"class":386},[58,33820,33821],{"class":75},".format(epoch,val_loss_all[",[58,33823,1318],{"class":92},[58,33825,89],{"class":82},[58,33827,33828],{"class":75},"],val_acc_all[",[58,33830,1318],{"class":92},[58,33832,89],{"class":82},[58,33834,33787],{"class":75},[58,33836,33838],{"class":60,"line":33837},153,[58,33839,3046],{"emptyLinePlaceholder":720},[58,33841,33843],{"class":60,"line":33842},154,[58,33844,33845],{"class":64},"        # 判断准确度--->保存最优模型\n",[58,33847,33849,33851,33854,33856,33858,33860,33862],{"class":60,"line":33848},155,[58,33850,3143],{"class":92},[58,33852,33853],{"class":75}," val_acc_all[",[58,33855,1318],{"class":92},[58,33857,89],{"class":82},[58,33859,1724],{"class":75},[58,33861,1744],{"class":92},[58,33863,33864],{"class":75},"best_acc:\n",[58,33866,33868],{"class":60,"line":33867},156,[58,33869,33870],{"class":64},"            # 保存当前模型准确度\n",[58,33872,33874,33877,33879,33881,33884,33886,33888],{"class":60,"line":33873},157,[58,33875,33876],{"class":75},"            best_acc:",[58,33878,832],{"class":82},[58,33880,383],{"class":92},[58,33882,33883],{"class":75},"val_acc_all[",[58,33885,1318],{"class":92},[58,33887,89],{"class":82},[58,33889,33890],{"class":75},"]\n",[58,33892,33894],{"class":60,"line":33893},158,[58,33895,33896],{"class":64},"            # 保存当前的准确度\n",[58,33898,33900],{"class":60,"line":33899},159,[58,33901,33902],{"class":64},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[58,33904,33906,33909,33911],{"class":60,"line":33905},160,[58,33907,33908],{"class":75},"            best_model_wts",[58,33910,383],{"class":92},[58,33912,32958],{"class":75},[58,33914,33916],{"class":60,"line":33915},161,[58,33917,3046],{"emptyLinePlaceholder":720},[58,33919,33921],{"class":60,"line":33920},162,[58,33922,33923],{"class":64},"        # 计算耗时\n",[58,33925,33927,33930,33932,33935,33937],{"class":60,"line":33926},163,[58,33928,33929],{"class":75},"        time_use",[58,33931,383],{"class":92},[58,33933,33934],{"class":75},"time.time()",[58,33936,1318],{"class":92},[58,33938,33939],{"class":75},"since\n",[58,33941,33943,33945,33947,33950,33952,33955,33957,33959,33961,33963,33965,33968,33971,33974,33976,33979,33981,33983],{"class":60,"line":33942},164,[58,33944,33095],{"class":82},[58,33946,793],{"class":75},[58,33948,33949],{"class":386},"'训练和验证耗费的时间",[58,33951,1681],{"class":82},[58,33953,33954],{"class":92},":.0f",[58,33956,1730],{"class":82},[58,33958,1330],{"class":386},[58,33960,1681],{"class":82},[58,33962,33954],{"class":92},[58,33964,1730],{"class":82},[58,33966,33967],{"class":386},"s'",[58,33969,33970],{"class":75},".format(time_use",[58,33972,33973],{"class":92},"\u002F\u002F",[58,33975,1692],{"class":82},[58,33977,33978],{"class":75},",time_use",[58,33980,1114],{"class":92},[58,33982,1692],{"class":82},[58,33984,31141],{"class":75},[58,33986,33988],{"class":60,"line":33987},165,[58,33989,33990],{"class":64},"    # 选择最优参数\n",[58,33992,33994],{"class":60,"line":33993},166,[58,33995,33996],{"class":64},"    # 加载最高准确率下的模型参数\n",[58,33998,34000],{"class":60,"line":33999},167,[58,34001,34002],{"class":64},"    # model.load_state_dict(best_model_wts)\n",[58,34004,34006,34009,34012],{"class":60,"line":34005},168,[58,34007,34008],{"class":75},"    torch.save(model.state_dict(best_model_wts), ",[58,34010,34011],{"class":386},"'.\u002Fbest_model.pth'",[58,34013,799],{"class":75},[58,34015,34017],{"class":60,"line":34016},169,[58,34018,34019],{"class":64},"    # 或者写成\n",[58,34021,34023],{"class":60,"line":34022},170,[58,34024,34025],{"class":64},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[58,34027,34029],{"class":60,"line":34028},171,[58,34030,34031],{"class":64},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[58,34033,34035,34038,34040,34043,34046,34048],{"class":60,"line":34034},172,[58,34036,34037],{"class":75},"    train_process",[58,34039,383],{"class":92},[58,34041,34042],{"class":75},"pd.DataFrame(",[58,34044,34045],{"class":5862},"data",[58,34047,383],{"class":92},[58,34049,2195],{"class":75},[58,34051,34053,34056,34058,34061],{"class":60,"line":34052},173,[58,34054,34055],{"class":386},"        \"epoch\"",[58,34057,1644],{"class":75},[58,34059,34060],{"class":82},"range",[58,34062,34063],{"class":75},"(num_epochs),\n",[58,34065,34067,34070],{"class":60,"line":34066},174,[58,34068,34069],{"class":386},"        \"train_loss_all\"",[58,34071,34072],{"class":75},":train_loss_all,\n",[58,34074,34076,34079],{"class":60,"line":34075},175,[58,34077,34078],{"class":386},"        \"val_loss_all\"",[58,34080,34081],{"class":75},":val_loss_all,\n",[58,34083,34085,34088],{"class":60,"line":34084},176,[58,34086,34087],{"class":386},"        \"train_acc_all\"",[58,34089,34090],{"class":75},":train_acc_all,\n",[58,34092,34094,34097],{"class":60,"line":34093},177,[58,34095,34096],{"class":386},"        \"val_acc_all\"",[58,34098,34099],{"class":75},":val_acc_all\n",[58,34101,34103],{"class":60,"line":34102},178,[58,34104,34105],{"class":75},"    })\n",[58,34107,34109],{"class":60,"line":34108},179,[58,34110,34111],{"class":64},"    # 返回训练保存的过程\n",[58,34113,34115,34117],{"class":60,"line":34114},180,[58,34116,4736],{"class":92},[58,34118,34119],{"class":75}," train_process\n",[58,34121,34123],{"class":60,"line":34122},181,[58,34124,3046],{"emptyLinePlaceholder":720},[58,34126,34128],{"class":60,"line":34127},182,[58,34129,34130],{"class":64},"# 将loss值和精度按照图片的形式展示出来\n",[58,34132,34134,34136,34139],{"class":60,"line":34133},183,[58,34135,32591],{"class":92},[58,34137,34138],{"class":379}," matplot_acc_loss",[58,34140,34141],{"class":75},"(train_process):\n",[58,34143,34145],{"class":60,"line":34144},184,[58,34146,34147],{"class":64},"    # 设置图的大小\n",[58,34149,34151,34154,34156,34158,34160,34162,34164,34166],{"class":60,"line":34150},185,[58,34152,34153],{"class":75},"    plt.figure(",[58,34155,32337],{"class":5862},[58,34157,383],{"class":92},[58,34159,793],{"class":75},[58,34161,1284],{"class":82},[58,34163,1164],{"class":75},[58,34165,1079],{"class":82},[58,34167,31141],{"class":75},[58,34169,34171],{"class":60,"line":34170},186,[58,34172,34173],{"class":64},"    # 设置图中有几张图\n",[58,34175,34177],{"class":60,"line":34176},187,[58,34178,34179],{"class":64},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[58,34181,34183],{"class":60,"line":34182},188,[58,34184,34185],{"class":64},"    # ①loss图\n",[58,34187,34189,34191,34193,34195,34197,34199,34201],{"class":60,"line":34188},189,[58,34190,32371],{"class":75},[58,34192,89],{"class":82},[58,34194,1164],{"class":75},[58,34196,867],{"class":82},[58,34198,1164],{"class":75},[58,34200,89],{"class":82},[58,34202,799],{"class":75},[58,34204,34206],{"class":60,"line":34205},190,[58,34207,34208],{"class":64},"    # 补充:\n",[58,34210,34212],{"class":60,"line":34211},191,[58,34213,34214],{"class":64},"    # plt.subplot(nrows, ncols, index)\n",[58,34216,34218],{"class":60,"line":34217},192,[58,34219,34220],{"class":64},"    # nrows：行数\n",[58,34222,34224],{"class":60,"line":34223},193,[58,34225,34226],{"class":64},"    # ncols：列数\n",[58,34228,34230],{"class":60,"line":34229},194,[58,34231,34232],{"class":64},"    # index：目前选中第几个子图（从1开始）\n",[58,34234,34236,34239,34242,34245,34248,34250,34253,34255,34258],{"class":60,"line":34235},195,[58,34237,34238],{"class":75},"    plt.plot(train_process[",[58,34240,34241],{"class":386},"\"epoch\"",[58,34243,34244],{"class":75},"],train_process.train_loss_all,",[58,34246,34247],{"class":386},"'ro-'",[58,34249,1164],{"class":75},[58,34251,34252],{"class":5862},"label",[58,34254,383],{"class":92},[58,34256,34257],{"class":386},"'train loss'",[58,34259,799],{"class":75},[58,34261,34263,34265,34267,34270,34273,34275,34277,34279,34282],{"class":60,"line":34262},196,[58,34264,34238],{"class":75},[58,34266,34241],{"class":386},[58,34268,34269],{"class":75},"],train_process.val_loss_all,",[58,34271,34272],{"class":386},"'bs--'",[58,34274,1164],{"class":75},[58,34276,34252],{"class":5862},[58,34278,383],{"class":92},[58,34280,34281],{"class":386},"'val loss'",[58,34283,799],{"class":75},[58,34285,34287],{"class":60,"line":34286},197,[58,34288,34289],{"class":64},"    # 添加一个图例\n",[58,34291,34293],{"class":60,"line":34292},198,[58,34294,34295],{"class":75},"    plt.legend()\n",[58,34297,34299],{"class":60,"line":34298},199,[58,34300,34301],{"class":64},"    # 给轴添加标签\n",[58,34303,34305,34308,34311],{"class":60,"line":34304},200,[58,34306,34307],{"class":75},"    plt.xlabel(",[58,34309,34310],{"class":386},"'epoch'",[58,34312,799],{"class":75},[58,34314,34316,34319,34322],{"class":60,"line":34315},201,[58,34317,34318],{"class":75},"    plt.ylabel(",[58,34320,34321],{"class":386},"'loss'",[58,34323,799],{"class":75},[58,34325,34327],{"class":60,"line":34326},202,[58,34328,34329],{"class":64},"    # ②准确度图\n",[58,34331,34333,34335,34337,34339,34341,34343,34345],{"class":60,"line":34332},203,[58,34334,32371],{"class":75},[58,34336,89],{"class":82},[58,34338,1164],{"class":75},[58,34340,867],{"class":82},[58,34342,1164],{"class":75},[58,34344,867],{"class":82},[58,34346,799],{"class":75},[58,34348,34350,34352,34354,34357,34359,34361,34363,34365,34368],{"class":60,"line":34349},204,[58,34351,34238],{"class":75},[58,34353,34241],{"class":386},[58,34355,34356],{"class":75},"],train_process.train_acc_all,",[58,34358,34247],{"class":386},[58,34360,1164],{"class":75},[58,34362,34252],{"class":5862},[58,34364,383],{"class":92},[58,34366,34367],{"class":386},"'train acc'",[58,34369,799],{"class":75},[58,34371,34373,34375,34377,34380,34382,34384,34386,34388,34391],{"class":60,"line":34372},205,[58,34374,34238],{"class":75},[58,34376,34241],{"class":386},[58,34378,34379],{"class":75},"],train_process.val_acc_all,",[58,34381,34272],{"class":386},[58,34383,1164],{"class":75},[58,34385,34252],{"class":5862},[58,34387,383],{"class":92},[58,34389,34390],{"class":386},"'val acc'",[58,34392,799],{"class":75},[58,34394,34396],{"class":60,"line":34395},206,[58,34397,34398],{"class":64},"    # 添加图例\n",[58,34400,34402],{"class":60,"line":34401},207,[58,34403,34295],{"class":75},[58,34405,34407,34409,34411],{"class":60,"line":34406},208,[58,34408,34307],{"class":75},[58,34410,34241],{"class":386},[58,34412,799],{"class":75},[58,34414,34416,34418,34421],{"class":60,"line":34415},209,[58,34417,34318],{"class":75},[58,34419,34420],{"class":386},"\"acc\"",[58,34422,799],{"class":75},[58,34424,34426],{"class":60,"line":34425},210,[58,34427,34428],{"class":75},"    plt.show()\n",[58,34430,34432],{"class":60,"line":34431},211,[58,34433,3046],{"emptyLinePlaceholder":720},[58,34435,34437],{"class":60,"line":34436},212,[58,34438,34439],{"class":64},"# 正式开始训练:\n",[58,34441,34443,34445,34447,34449,34451],{"class":60,"line":34442},213,[58,34444,2180],{"class":92},[58,34446,31864],{"class":82},[58,34448,3595],{"class":92},[58,34450,31869],{"class":386},[58,34452,4385],{"class":75},[58,34454,34456],{"class":60,"line":34455},214,[58,34457,34458],{"class":64},"    # 将模型实例化\n",[58,34460,34462,34465,34467],{"class":60,"line":34461},215,[58,34463,34464],{"class":75},"    LeNet",[58,34466,383],{"class":92},[58,34468,34469],{"class":75},"LeNet()\n",[58,34471,34473,34476,34478],{"class":60,"line":34472},216,[58,34474,34475],{"class":75},"    train_dataloader,val_dataloader",[58,34477,383],{"class":92},[58,34479,34480],{"class":75},"train_val_data_process()\n",[58,34482,34484,34486,34488,34491,34494,34496,34498],{"class":60,"line":34483},217,[58,34485,34037],{"class":75},[58,34487,383],{"class":92},[58,34489,34490],{"class":75},"train_model_process(LeNet,train_dataloader,val_dataloader,",[58,34492,34493],{"class":5862},"num_epochs",[58,34495,383],{"class":92},[58,34497,1486],{"class":82},[58,34499,799],{"class":75},[58,34501,34503],{"class":60,"line":34502},218,[58,34504,34505],{"class":75},"    matplot_acc_loss(train_process)\n",[175,34507,34508],{},"画图的补充点学习：",[175,34510,34511],{},[119,34512],{"alt":53,"src":34513},"\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",[19,34515,34516],{"start":79},[22,34517,34518],{},"测试",[48,34520,34522],{"className":31022,"code":34521,"language":31024,"meta":53,"style":53},"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",[55,34523,34524,34530,34540,34552,34562,34567,34577,34587,34591,34596,34605,34622,34634,34651,34662,34678,34683,34694,34705,34716,34723,34727,34732,34742,34747,34764,34772,34776,34781,34790,34799,34803,34808,34813,34818,34825,34830,34842,34852,34862,34867,34871,34876,34885,34890,34906,34911,34916,34921,34935,34940,34954,34958,34963,34978,34983,34995,34999,35004,35016,35021,35029,35034,35039,35049,35054,35063,35068,35073,35077,35082,35087,35103,35111,35116,35121,35180,35186,35191,35202,35210,35218,35222,35227,35231,35236,35244,35249,35265,35270,35280,35290],{"__ignoreMap":53},[58,34525,34526,34528],{"class":60,"line":61},[58,34527,31036],{"class":92},[58,34529,31039],{"class":75},[58,34531,34532,34534,34536,34538],{"class":60,"line":68},[58,34533,31036],{"class":92},[58,34535,32059],{"class":75},[58,34537,32027],{"class":92},[58,34539,32064],{"class":75},[58,34541,34542,34544,34547,34549],{"class":60,"line":79},[58,34543,31381],{"class":92},[58,34545,34546],{"class":75}," jupyter_client.consoleapp ",[58,34548,31036],{"class":92},[58,34550,34551],{"class":75}," classes\n",[58,34553,34554,34556,34558,34560],{"class":60,"line":105},[58,34555,31381],{"class":92},[58,34557,32042],{"class":75},[58,34559,31036],{"class":92},[58,34561,32047],{"class":75},[58,34563,34564],{"class":60,"line":627},[58,34565,34566],{"class":64},"# 导入数据集\n",[58,34568,34569,34571,34573,34575],{"class":60,"line":509},[58,34570,31381],{"class":92},[58,34572,32012],{"class":75},[58,34574,31036],{"class":92},[58,34576,32017],{"class":75},[58,34578,34579,34581,34583,34585],{"class":60,"line":559},[58,34580,31381],{"class":92},[58,34582,32558],{"class":75},[58,34584,31036],{"class":92},[58,34586,32563],{"class":75},[58,34588,34589],{"class":60,"line":654},[58,34590,3046],{"emptyLinePlaceholder":720},[58,34592,34593],{"class":60,"line":671},[58,34594,34595],{"class":64},"# 测试数据处理\n",[58,34597,34598,34600,34603],{"class":60,"line":677},[58,34599,32591],{"class":92},[58,34601,34602],{"class":379}," test_data_process",[58,34604,32597],{"class":75},[58,34606,34607,34610,34612,34614,34616,34618,34620],{"class":60,"line":2260},[58,34608,34609],{"class":75},"    test_data",[58,34611,383],{"class":92},[58,34613,32099],{"class":75},[58,34615,32102],{"class":5862},[58,34617,383],{"class":92},[58,34619,32107],{"class":386},[58,34621,32110],{"class":75},[58,34623,34624,34627,34629,34632],{"class":60,"line":694},[58,34625,34626],{"class":5862},"                           train",[58,34628,383],{"class":92},[58,34630,34631],{"class":82},"False",[58,34633,32110],{"class":75},[58,34635,34636,34639,34641,34643,34645,34647,34649],{"class":60,"line":2270},[58,34637,34638],{"class":5862},"                           transform",[58,34640,383],{"class":92},[58,34642,32137],{"class":75},[58,34644,32140],{"class":5862},[58,34646,383],{"class":92},[58,34648,1686],{"class":82},[58,34650,32148],{"class":75},[58,34652,34653,34656,34658,34660],{"class":60,"line":2275},[58,34654,34655],{"class":5862},"                           download",[58,34657,383],{"class":92},[58,34659,32120],{"class":82},[58,34661,799],{"class":75},[58,34663,34664,34667,34669,34671,34673,34675],{"class":60,"line":2289},[58,34665,34666],{"class":75},"    test_dataloader",[58,34668,383],{"class":92},[58,34670,32178],{"class":75},[58,34672,32181],{"class":5862},[58,34674,383],{"class":92},[58,34676,34677],{"class":75},"test_data,\n",[58,34679,34680],{"class":60,"line":2294},[58,34681,34682],{"class":64},"                                    # 这里是一张一张进行测试\n",[58,34684,34685,34688,34690,34692],{"class":60,"line":2300},[58,34686,34687],{"class":5862},"                                    batch_size",[58,34689,383],{"class":92},[58,34691,89],{"class":82},[58,34693,32110],{"class":75},[58,34695,34696,34699,34701,34703],{"class":60,"line":2321},[58,34697,34698],{"class":5862},"                                    shuffle",[58,34700,383],{"class":92},[58,34702,32120],{"class":82},[58,34704,32110],{"class":75},[58,34706,34707,34710,34712,34714],{"class":60,"line":2326},[58,34708,34709],{"class":5862},"                                    num_workers",[58,34711,383],{"class":92},[58,34713,979],{"class":82},[58,34715,799],{"class":75},[58,34717,34718,34720],{"class":60,"line":2340},[58,34719,4736],{"class":92},[58,34721,34722],{"class":75}," test_dataloader\n",[58,34724,34725],{"class":60,"line":2345},[58,34726,3046],{"emptyLinePlaceholder":720},[58,34728,34729],{"class":60,"line":2374},[58,34730,34731],{"class":64},"# 定义模型测试函数\n",[58,34733,34734,34736,34739],{"class":60,"line":2379},[58,34735,32591],{"class":92},[58,34737,34738],{"class":379}," test_model_process",[58,34740,34741],{"class":75},"(model,test_dataloader):\n",[58,34743,34744],{"class":60,"line":2396},[58,34745,34746],{"class":64},"    # 将模型放到设备当中，先进行判断\n",[58,34748,34749,34751,34753,34755,34757,34759,34761],{"class":60,"line":2401},[58,34750,31881],{"class":75},[58,34752,383],{"class":92},[58,34754,31888],{"class":386},[58,34756,2351],{"class":92},[58,34758,31893],{"class":75},[58,34760,2348],{"class":92},[58,34762,34763],{"class":386}," \"cpu\"\n",[58,34765,34766,34768,34770],{"class":60,"line":2406},[58,34767,31933],{"class":75},[58,34769,383],{"class":92},[58,34771,32933],{"class":75},[58,34773,34774],{"class":60,"line":2411},[58,34775,3046],{"emptyLinePlaceholder":720},[58,34777,34778],{"class":60,"line":2425},[58,34779,34780],{"class":64},"    # 设置初始化参数\n",[58,34782,34783,34786,34788],{"class":60,"line":2430},[58,34784,34785],{"class":75},"    test_corrects",[58,34787,383],{"class":92},[58,34789,32986],{"class":82},[58,34791,34792,34795,34797],{"class":60,"line":3223},[58,34793,34794],{"class":75},"    test_num",[58,34796,383],{"class":92},[58,34798,3731],{"class":82},[58,34800,34801],{"class":60,"line":3237},[58,34802,3046],{"emptyLinePlaceholder":720},[58,34804,34805],{"class":60,"line":3245},[58,34806,34807],{"class":64},"    # 进行模型测试\n",[58,34809,34810],{"class":60,"line":3250},[58,34811,34812],{"class":64},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[58,34814,34815],{"class":60,"line":3256},[58,34816,34817],{"class":64},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[58,34819,34820,34823],{"class":60,"line":3262},[58,34821,34822],{"class":92},"    with",[58,34824,33528],{"class":75},[58,34826,34827],{"class":60,"line":3267},[58,34828,34829],{"class":64},"        # 从数据中进行\n",[58,34831,34832,34834,34837,34839],{"class":60,"line":8594},[58,34833,4049],{"class":92},[58,34835,34836],{"class":75}," test_data_x,test_data_y ",[58,34838,26687],{"class":92},[58,34840,34841],{"class":75}," test_dataloader:\n",[58,34843,34844,34847,34849],{"class":60,"line":8618},[58,34845,34846],{"class":75},"            test_data_x",[58,34848,383],{"class":92},[58,34850,34851],{"class":75},"test_data_x.to(device)\n",[58,34853,34854,34857,34859],{"class":60,"line":8623},[58,34855,34856],{"class":75},"            test_data_y",[58,34858,383],{"class":92},[58,34860,34861],{"class":75},"test_data_y.to(device)\n",[58,34863,34864],{"class":60,"line":8629},[58,34865,34866],{"class":64},"            # 设置为验证模式\n",[58,34868,34869],{"class":60,"line":8656},[58,34870,33519],{"class":75},[58,34872,34873],{"class":60,"line":8661},[58,34874,34875],{"class":64},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[58,34877,34878,34880,34882],{"class":60,"line":8667},[58,34879,33304],{"class":75},[58,34881,383],{"class":92},[58,34883,34884],{"class":75},"model(test_data_x)\n",[58,34886,34887],{"class":60,"line":8679},[58,34888,34889],{"class":64},"            # 查找每一行中最大值对应的下标\n",[58,34891,34892,34894,34896,34898,34900,34902,34904],{"class":60,"line":8691},[58,34893,33321],{"class":75},[58,34895,383],{"class":92},[58,34897,33326],{"class":75},[58,34899,33329],{"class":5862},[58,34901,383],{"class":92},[58,34903,89],{"class":82},[58,34905,799],{"class":75},[58,34907,34908],{"class":60,"line":8703},[58,34909,34910],{"class":64},"            # 计算正确率\n",[58,34912,34913],{"class":60,"line":10361},[58,34914,34915],{"class":64},"            # .data表示是一个不带梯度信息的tensor\n",[58,34917,34918],{"class":60,"line":10386},[58,34919,34920],{"class":64},"            # 如果预测正确，则准确度test_corrects加1\n",[58,34922,34923,34926,34928,34930,34932],{"class":60,"line":10409},[58,34924,34925],{"class":75},"            test_corrects",[58,34927,10122],{"class":92},[58,34929,33431],{"class":75},[58,34931,3595],{"class":92},[58,34933,34934],{"class":75},"test_data_y.data)\n",[58,34936,34937],{"class":60,"line":10433},[58,34938,34939],{"class":64},"            # 将所有的测试样本进行累计\n",[58,34941,34942,34945,34947,34950,34952],{"class":60,"line":10438},[58,34943,34944],{"class":75},"            test_num",[58,34946,10122],{"class":92},[58,34948,34949],{"class":75},"test_data_x.size(",[58,34951,979],{"class":82},[58,34953,799],{"class":75},[58,34955,34956],{"class":60,"line":10443},[58,34957,3046],{"emptyLinePlaceholder":720},[58,34959,34960],{"class":60,"line":10448},[58,34961,34962],{"class":64},"        # 计算准确度\n",[58,34964,34965,34968,34970,34973,34975],{"class":60,"line":10457},[58,34966,34967],{"class":75},"        test_acc",[58,34969,383],{"class":92},[58,34971,34972],{"class":75},"test_corrects.double().item()",[58,34974,1370],{"class":92},[58,34976,34977],{"class":75},"test_num\n",[58,34979,34980],{"class":60,"line":10462},[58,34981,34982],{"class":64},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[58,34984,34985,34987,34989,34992],{"class":60,"line":10468},[58,34986,33095],{"class":82},[58,34988,793],{"class":75},[58,34990,34991],{"class":386},"\"测试的准确率：\"",[58,34993,34994],{"class":75},",test_acc)\n",[58,34996,34997],{"class":60,"line":10489},[58,34998,3046],{"emptyLinePlaceholder":720},[58,35000,35001],{"class":60,"line":10495},[58,35002,35003],{"class":64},"# 实现模型的测试功能\n",[58,35005,35006,35008,35010,35012,35014],{"class":60,"line":10509},[58,35007,2180],{"class":92},[58,35009,31864],{"class":82},[58,35011,3595],{"class":92},[58,35013,31869],{"class":386},[58,35015,4385],{"class":75},[58,35017,35018],{"class":60,"line":10515},[58,35019,35020],{"class":64},"    # 加载模型\n",[58,35022,35023,35025,35027],{"class":60,"line":10542},[58,35024,31933],{"class":75},[58,35026,383],{"class":92},[58,35028,34469],{"class":75},[58,35030,35031],{"class":60,"line":10551},[58,35032,35033],{"class":64},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[58,35035,35036],{"class":60,"line":10557},[58,35037,35038],{"class":64},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[58,35040,35041,35044,35047],{"class":60,"line":10565},[58,35042,35043],{"class":75},"    model.load_state_dict(torch.load(",[58,35045,35046],{"class":386},"'best_model.pth'",[58,35048,31141],{"class":75},[58,35050,35051],{"class":60,"line":10570},[58,35052,35053],{"class":64},"    # 数据加载\n",[58,35055,35056,35058,35060],{"class":60,"line":17247},[58,35057,34666],{"class":75},[58,35059,383],{"class":92},[58,35061,35062],{"class":75},"test_data_process()\n",[58,35064,35065],{"class":60,"line":17253},[58,35066,35067],{"class":64},"    # 加载模型测试的函数\n",[58,35069,35070],{"class":60,"line":17276},[58,35071,35072],{"class":75},"    test_model_process(model,test_dataloader)\n",[58,35074,35075],{"class":60,"line":17282},[58,35076,3046],{"emptyLinePlaceholder":720},[58,35078,35079],{"class":60,"line":17305},[58,35080,35081],{"class":64},"    # 验证集推理实现：\n",[58,35083,35084],{"class":60,"line":17319},[58,35085,35086],{"class":64},"    # 加载数据加载的更详细一些\n",[58,35088,35089,35091,35093,35095,35097,35099,35101],{"class":60,"line":17339},[58,35090,31881],{"class":75},[58,35092,383],{"class":92},[58,35094,31888],{"class":386},[58,35096,2351],{"class":92},[58,35098,31893],{"class":75},[58,35100,2348],{"class":92},[58,35102,34763],{"class":386},[58,35104,35105,35107,35109],{"class":60,"line":17345},[58,35106,31933],{"class":75},[58,35108,383],{"class":92},[58,35110,32933],{"class":75},[58,35112,35113],{"class":60,"line":17356},[58,35114,35115],{"class":64},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[58,35117,35118],{"class":60,"line":17379},[58,35119,35120],{"class":64},"    # 顺序不可改变\n",[58,35122,35123,35126,35128,35130,35133,35135,35138,35140,35143,35145,35148,35150,35153,35155,35158,35160,35163,35165,35168,35170,35173,35175,35178],{"class":60,"line":17401},[58,35124,35125],{"class":75},"    classes",[58,35127,383],{"class":92},[58,35129,1675],{"class":75},[58,35131,35132],{"class":386},"'T-shirt\u002Ftop'",[58,35134,1164],{"class":75},[58,35136,35137],{"class":386},"'Trouser'",[58,35139,1164],{"class":75},[58,35141,35142],{"class":386},"'Pullover'",[58,35144,1164],{"class":75},[58,35146,35147],{"class":386},"'Dress'",[58,35149,1164],{"class":75},[58,35151,35152],{"class":386},"'Coat'",[58,35154,1164],{"class":75},[58,35156,35157],{"class":386},"'Sandal'",[58,35159,1164],{"class":75},[58,35161,35162],{"class":386},"'Shirt'",[58,35164,1164],{"class":75},[58,35166,35167],{"class":386},"'Sneaker'",[58,35169,1164],{"class":75},[58,35171,35172],{"class":386},"'Bag'",[58,35174,1164],{"class":75},[58,35176,35177],{"class":386},"'Ankle boot'",[58,35179,33890],{"class":75},[58,35181,35182,35184],{"class":60,"line":17406},[58,35183,34822],{"class":92},[58,35185,33528],{"class":75},[58,35187,35188],{"class":60,"line":17412},[58,35189,35190],{"class":64},"        # 将数据和标签都放到设备当中\n",[58,35192,35193,35195,35198,35200],{"class":60,"line":17426},[58,35194,4049],{"class":92},[58,35196,35197],{"class":75}," b_x,b_y ",[58,35199,26687],{"class":92},[58,35201,34841],{"class":75},[58,35203,35204,35206,35208],{"class":60,"line":17439},[58,35205,33254],{"class":75},[58,35207,383],{"class":92},[58,35209,33259],{"class":75},[58,35211,35212,35214,35216],{"class":60,"line":17444},[58,35213,33269],{"class":75},[58,35215,383],{"class":92},[58,35217,33274],{"class":75},[58,35219,35220],{"class":60,"line":17458},[58,35221,3046],{"emptyLinePlaceholder":720},[58,35223,35224],{"class":60,"line":17463},[58,35225,35226],{"class":64},"            # 设置模型为验证模式\n",[58,35228,35229],{"class":60,"line":17469},[58,35230,33519],{"class":75},[58,35232,35233],{"class":60,"line":17474},[58,35234,35235],{"class":64},"            # 模型推理结果\n",[58,35237,35238,35240,35242],{"class":60,"line":17488},[58,35239,33304],{"class":75},[58,35241,383],{"class":92},[58,35243,33309],{"class":75},[58,35245,35246],{"class":60,"line":17493},[58,35247,35248],{"class":64},"            # 获取最大下标，最大下标就是类别号\n",[58,35250,35251,35253,35255,35257,35259,35261,35263],{"class":60,"line":17498},[58,35252,33321],{"class":75},[58,35254,383],{"class":92},[58,35256,33326],{"class":75},[58,35258,33329],{"class":5862},[58,35260,383],{"class":92},[58,35262,89],{"class":82},[58,35264,799],{"class":75},[58,35266,35267],{"class":60,"line":17512},[58,35268,35269],{"class":64},"            # 取出张量中的数值\n",[58,35271,35272,35275,35277],{"class":60,"line":17524},[58,35273,35274],{"class":75},"            result",[58,35276,383],{"class":92},[58,35278,35279],{"class":75},"pre_lab.item()\n",[58,35281,35282,35285,35287],{"class":60,"line":17529},[58,35283,35284],{"class":75},"            label",[58,35286,383],{"class":92},[58,35288,35289],{"class":75},"b_y.item()\n",[58,35291,35292,35295,35297,35300,35303,35306,35308,35311],{"class":60,"line":17542},[58,35293,35294],{"class":82},"            print",[58,35296,793],{"class":75},[58,35298,35299],{"class":386},"\"预测值：\"",[58,35301,35302],{"class":75},",classes[result],",[58,35304,35305],{"class":386},"\"------\"",[58,35307,1164],{"class":75},[58,35309,35310],{"class":386},"\"真实值：\"",[58,35312,35313],{"class":75},",classes[label])\n",[175,35315,35316],{},"（2）AlexNet",[19,35318,35319],{},[22,35320,35321],{},"神经网络构建",[48,35323,35325],{"className":31022,"code":35324,"language":31024,"meta":53,"style":53},"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",[55,35326,35327,35333,35343,35353,35365,35369,35386,35394,35409,35421,35463,35490,35533,35559,35603,35646,35689,35716,35720,35730,35735,35763,35782,35801,35805,35810,35818,35833,35843,35857,35867,35882,35897,35912,35923,35927,35932,35942,35957,35962,35976,35991,36003,36008,36019,36024,36030,36035,36047,36067,36072,36081],{"__ignoreMap":53},[58,35328,35329,35331],{"class":60,"line":61},[58,35330,31036],{"class":92},[58,35332,31039],{"class":75},[58,35334,35335,35337,35339,35341],{"class":60,"line":68},[58,35336,31381],{"class":92},[58,35338,31384],{"class":75},[58,35340,31036],{"class":92},[58,35342,31389],{"class":75},[58,35344,35345,35347,35349,35351],{"class":60,"line":79},[58,35346,31381],{"class":92},[58,35348,31401],{"class":75},[58,35350,31036],{"class":92},[58,35352,31406],{"class":75},[58,35354,35355,35357,35360,35362],{"class":60,"line":105},[58,35356,31036],{"class":92},[58,35358,35359],{"class":75}," torch.nn.functional ",[58,35361,32027],{"class":92},[58,35363,35364],{"class":75}," F\n",[58,35366,35367],{"class":60,"line":627},[58,35368,3046],{"emptyLinePlaceholder":720},[58,35370,35371,35373,35376,35378,35380,35382,35384],{"class":60,"line":509},[58,35372,15338],{"class":92},[58,35374,35375],{"class":379}," AlexNet",[58,35377,793],{"class":75},[58,35379,31422],{"class":379},[58,35381,1344],{"class":75},[58,35383,31427],{"class":379},[58,35385,31430],{"class":75},[58,35387,35388,35390,35392],{"class":60,"line":559},[58,35389,31445],{"class":92},[58,35391,31448],{"class":82},[58,35393,31451],{"class":75},[58,35395,35396,35398,35401,35403,35405,35407],{"class":60,"line":654},[58,35397,31461],{"class":82},[58,35399,35400],{"class":75},"(AlexNet,",[58,35402,31467],{"class":82},[58,35404,31470],{"class":75},[58,35406,31473],{"class":82},[58,35408,2622],{"class":75},[58,35410,35411,35413,35416,35418],{"class":60,"line":671},[58,35412,31489],{"class":82},[58,35414,35415],{"class":75},".ReLu",[58,35417,383],{"class":92},[58,35419,35420],{"class":75},"nn.ReLU()\n",[58,35422,35423,35425,35427,35429,35431,35433,35435,35437,35439,35441,35443,35445,35447,35449,35451,35453,35455,35457,35459,35461],{"class":60,"line":677},[58,35424,31489],{"class":82},[58,35426,31492],{"class":75},[58,35428,383],{"class":92},[58,35430,31497],{"class":75},[58,35432,31500],{"class":5862},[58,35434,383],{"class":92},[58,35436,89],{"class":82},[58,35438,1164],{"class":75},[58,35440,31509],{"class":5862},[58,35442,383],{"class":92},[58,35444,997],{"class":82},[58,35446,1164],{"class":75},[58,35448,31518],{"class":5862},[58,35450,383],{"class":92},[58,35452,1258],{"class":82},[58,35454,1164],{"class":75},[58,35456,31573],{"class":5862},[58,35458,383],{"class":92},[58,35460,1079],{"class":82},[58,35462,799],{"class":75},[58,35464,35465,35467,35469,35471,35474,35476,35478,35480,35482,35484,35486,35488],{"class":60,"line":2260},[58,35466,31489],{"class":82},[58,35468,31557],{"class":75},[58,35470,383],{"class":92},[58,35472,35473],{"class":75},"nn.MaxPool2d(",[58,35475,31518],{"class":5862},[58,35477,383],{"class":92},[58,35479,861],{"class":82},[58,35481,1164],{"class":75},[58,35483,31573],{"class":5862},[58,35485,383],{"class":92},[58,35487,867],{"class":82},[58,35489,799],{"class":75},[58,35491,35492,35494,35496,35498,35500,35502,35504,35506,35508,35510,35512,35515,35517,35519,35521,35523,35525,35527,35529,35531],{"class":60,"line":694},[58,35493,31489],{"class":82},[58,35495,31586],{"class":75},[58,35497,383],{"class":92},[58,35499,31497],{"class":75},[58,35501,31500],{"class":5862},[58,35503,383],{"class":92},[58,35505,997],{"class":82},[58,35507,1164],{"class":75},[58,35509,31509],{"class":5862},[58,35511,383],{"class":92},[58,35513,35514],{"class":82},"256",[58,35516,1164],{"class":75},[58,35518,31518],{"class":5862},[58,35520,383],{"class":92},[58,35522,1105],{"class":82},[58,35524,1164],{"class":75},[58,35526,31527],{"class":5862},[58,35528,383],{"class":92},[58,35530,867],{"class":82},[58,35532,799],{"class":75},[58,35534,35535,35537,35539,35541,35543,35545,35547,35549,35551,35553,35555,35557],{"class":60,"line":2270},[58,35536,31489],{"class":82},[58,35538,31621],{"class":75},[58,35540,383],{"class":92},[58,35542,35473],{"class":75},[58,35544,31518],{"class":5862},[58,35546,383],{"class":92},[58,35548,861],{"class":82},[58,35550,1164],{"class":75},[58,35552,31573],{"class":5862},[58,35554,383],{"class":92},[58,35556,867],{"class":82},[58,35558,799],{"class":75},[58,35560,35561,35563,35566,35568,35570,35572,35574,35576,35578,35580,35582,35585,35587,35589,35591,35593,35595,35597,35599,35601],{"class":60,"line":2275},[58,35562,31489],{"class":82},[58,35564,35565],{"class":75},".c5",[58,35567,383],{"class":92},[58,35569,31497],{"class":75},[58,35571,31500],{"class":5862},[58,35573,383],{"class":92},[58,35575,35514],{"class":82},[58,35577,1164],{"class":75},[58,35579,31509],{"class":5862},[58,35581,383],{"class":92},[58,35583,35584],{"class":82},"384",[58,35586,1164],{"class":75},[58,35588,31518],{"class":5862},[58,35590,383],{"class":92},[58,35592,861],{"class":82},[58,35594,1164],{"class":75},[58,35596,31527],{"class":5862},[58,35598,383],{"class":92},[58,35600,89],{"class":82},[58,35602,799],{"class":75},[58,35604,35605,35607,35610,35612,35614,35616,35618,35620,35622,35624,35626,35628,35630,35632,35634,35636,35638,35640,35642,35644],{"class":60,"line":2289},[58,35606,31489],{"class":82},[58,35608,35609],{"class":75},".c6",[58,35611,383],{"class":92},[58,35613,31497],{"class":75},[58,35615,31500],{"class":5862},[58,35617,383],{"class":92},[58,35619,35584],{"class":82},[58,35621,1164],{"class":75},[58,35623,31509],{"class":5862},[58,35625,383],{"class":92},[58,35627,35584],{"class":82},[58,35629,1164],{"class":75},[58,35631,31518],{"class":5862},[58,35633,383],{"class":92},[58,35635,861],{"class":82},[58,35637,1164],{"class":75},[58,35639,31527],{"class":5862},[58,35641,383],{"class":92},[58,35643,89],{"class":82},[58,35645,799],{"class":75},[58,35647,35648,35650,35653,35655,35657,35659,35661,35663,35665,35667,35669,35671,35673,35675,35677,35679,35681,35683,35685,35687],{"class":60,"line":2294},[58,35649,31489],{"class":82},[58,35651,35652],{"class":75},".c7",[58,35654,383],{"class":92},[58,35656,31497],{"class":75},[58,35658,31500],{"class":5862},[58,35660,383],{"class":92},[58,35662,35584],{"class":82},[58,35664,1164],{"class":75},[58,35666,31509],{"class":5862},[58,35668,383],{"class":92},[58,35670,35514],{"class":82},[58,35672,1164],{"class":75},[58,35674,31518],{"class":5862},[58,35676,383],{"class":92},[58,35678,861],{"class":82},[58,35680,1164],{"class":75},[58,35682,31527],{"class":5862},[58,35684,383],{"class":92},[58,35686,89],{"class":82},[58,35688,799],{"class":75},[58,35690,35691,35693,35696,35698,35700,35702,35704,35706,35708,35710,35712,35714],{"class":60,"line":2300},[58,35692,31489],{"class":82},[58,35694,35695],{"class":75},".s8",[58,35697,383],{"class":92},[58,35699,35473],{"class":75},[58,35701,31518],{"class":5862},[58,35703,383],{"class":92},[58,35705,861],{"class":82},[58,35707,1164],{"class":75},[58,35709,31573],{"class":5862},[58,35711,383],{"class":92},[58,35713,867],{"class":82},[58,35715,799],{"class":75},[58,35717,35718],{"class":60,"line":2321},[58,35719,31646],{"class":64},[58,35721,35722,35724,35726,35728],{"class":60,"line":2326},[58,35723,31489],{"class":82},[58,35725,31653],{"class":75},[58,35727,383],{"class":92},[58,35729,31658],{"class":75},[58,35731,35732],{"class":60,"line":2340},[58,35733,35734],{"class":64},"       # 定义全连接层\n",[58,35736,35737,35739,35742,35744,35746,35748,35750,35752,35754,35756,35758,35761],{"class":60,"line":2345},[58,35738,31489],{"class":82},[58,35740,35741],{"class":75},".f1",[58,35743,383],{"class":92},[58,35745,31675],{"class":75},[58,35747,1130],{"class":82},[58,35749,1241],{"class":92},[58,35751,1130],{"class":82},[58,35753,1241],{"class":92},[58,35755,35514],{"class":82},[58,35757,1164],{"class":75},[58,35759,35760],{"class":82},"4096",[58,35762,799],{"class":75},[58,35764,35765,35767,35770,35772,35774,35776,35778,35780],{"class":60,"line":2374},[58,35766,31489],{"class":82},[58,35768,35769],{"class":75},".f2",[58,35771,383],{"class":92},[58,35773,31675],{"class":75},[58,35775,35760],{"class":82},[58,35777,1164],{"class":75},[58,35779,35760],{"class":82},[58,35781,799],{"class":75},[58,35783,35784,35786,35789,35791,35793,35795,35797,35799],{"class":60,"line":2379},[58,35785,31489],{"class":82},[58,35787,35788],{"class":75},".f3",[58,35790,383],{"class":92},[58,35792,31675],{"class":75},[58,35794,35760],{"class":82},[58,35796,1164],{"class":75},[58,35798,1232],{"class":82},[58,35800,799],{"class":75},[58,35802,35803],{"class":60,"line":2396},[58,35804,3046],{"emptyLinePlaceholder":720},[58,35806,35807],{"class":60,"line":2401},[58,35808,35809],{"class":64},"    # 定义前向传播\n",[58,35811,35812,35814,35816],{"class":60,"line":2406},[58,35813,31445],{"class":92},[58,35815,31737],{"class":379},[58,35817,31740],{"class":75},[58,35819,35820,35822,35824,35826,35829,35831],{"class":60,"line":2411},[58,35821,31745],{"class":75},[58,35823,383],{"class":92},[58,35825,31467],{"class":82},[58,35827,35828],{"class":75},".ReLu(",[58,35830,31467],{"class":82},[58,35832,31757],{"class":75},[58,35834,35835,35837,35839,35841],{"class":60,"line":2425},[58,35836,31745],{"class":75},[58,35838,383],{"class":92},[58,35840,31467],{"class":82},[58,35842,31768],{"class":75},[58,35844,35845,35847,35849,35851,35853,35855],{"class":60,"line":2430},[58,35846,31745],{"class":75},[58,35848,383],{"class":92},[58,35850,31467],{"class":82},[58,35852,35828],{"class":75},[58,35854,31467],{"class":82},[58,35856,31783],{"class":75},[58,35858,35859,35861,35863,35865],{"class":60,"line":3223},[58,35860,31745],{"class":75},[58,35862,383],{"class":92},[58,35864,31467],{"class":82},[58,35866,31794],{"class":75},[58,35868,35869,35871,35873,35875,35877,35879],{"class":60,"line":3237},[58,35870,31745],{"class":75},[58,35872,383],{"class":92},[58,35874,31467],{"class":82},[58,35876,35828],{"class":75},[58,35878,31467],{"class":82},[58,35880,35881],{"class":75},".c5(x))\n",[58,35883,35884,35886,35888,35890,35892,35894],{"class":60,"line":3245},[58,35885,31745],{"class":75},[58,35887,383],{"class":92},[58,35889,31467],{"class":82},[58,35891,35828],{"class":75},[58,35893,31467],{"class":82},[58,35895,35896],{"class":75},".c6(x))\n",[58,35898,35899,35901,35903,35905,35907,35909],{"class":60,"line":3250},[58,35900,31745],{"class":75},[58,35902,383],{"class":92},[58,35904,31467],{"class":82},[58,35906,35828],{"class":75},[58,35908,31467],{"class":82},[58,35910,35911],{"class":75},".c7(x))\n",[58,35913,35914,35916,35918,35920],{"class":60,"line":3256},[58,35915,31745],{"class":75},[58,35917,383],{"class":92},[58,35919,31467],{"class":82},[58,35921,35922],{"class":75},".s8(x)\n",[58,35924,35925],{"class":60,"line":3262},[58,35926,3046],{"emptyLinePlaceholder":720},[58,35928,35929],{"class":60,"line":3267},[58,35930,35931],{"class":64},"        # 展平加线性全连接层\n",[58,35933,35934,35936,35938,35940],{"class":60,"line":8594},[58,35935,31745],{"class":75},[58,35937,383],{"class":92},[58,35939,31467],{"class":82},[58,35941,31805],{"class":75},[58,35943,35944,35946,35948,35950,35952,35954],{"class":60,"line":8618},[58,35945,31745],{"class":75},[58,35947,383],{"class":92},[58,35949,31467],{"class":82},[58,35951,35828],{"class":75},[58,35953,31467],{"class":82},[58,35955,35956],{"class":75},".f1(x))\n",[58,35958,35959],{"class":60,"line":8623},[58,35960,35961],{"class":64},"        # 还需要dropout对神经元随机进行失活\n",[58,35963,35964,35966,35968,35971,35974],{"class":60,"line":8629},[58,35965,31745],{"class":75},[58,35967,383],{"class":92},[58,35969,35970],{"class":75},"F.dropout(x,",[58,35972,35973],{"class":82},"0.5",[58,35975,799],{"class":75},[58,35977,35978,35980,35982,35984,35986,35988],{"class":60,"line":8656},[58,35979,31745],{"class":75},[58,35981,383],{"class":92},[58,35983,31467],{"class":82},[58,35985,35828],{"class":75},[58,35987,31467],{"class":82},[58,35989,35990],{"class":75},".f2(x))\n",[58,35992,35993,35995,35997,35999,36001],{"class":60,"line":8661},[58,35994,31745],{"class":75},[58,35996,383],{"class":92},[58,35998,35970],{"class":75},[58,36000,35973],{"class":82},[58,36002,799],{"class":75},[58,36004,36005],{"class":60,"line":8667},[58,36006,36007],{"class":64},"        # 直接输出\n",[58,36009,36010,36012,36014,36016],{"class":60,"line":8679},[58,36011,31745],{"class":75},[58,36013,383],{"class":92},[58,36015,31467],{"class":82},[58,36017,36018],{"class":75},".f3(x)\n",[58,36020,36021],{"class":60,"line":8691},[58,36022,36023],{"class":64},"        # 前向传播输出\n",[58,36025,36026,36028],{"class":60,"line":8703},[58,36027,15396],{"class":92},[58,36029,31853],{"class":75},[58,36031,36032],{"class":60,"line":10361},[58,36033,36034],{"class":64},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[58,36036,36037,36039,36041,36043,36045],{"class":60,"line":10386},[58,36038,2180],{"class":92},[58,36040,31864],{"class":82},[58,36042,3595],{"class":92},[58,36044,31869],{"class":386},[58,36046,4385],{"class":75},[58,36048,36049,36051,36053,36055,36057,36059,36061,36063,36065],{"class":60,"line":10409},[58,36050,31881],{"class":75},[58,36052,383],{"class":92},[58,36054,31095],{"class":75},[58,36056,31888],{"class":386},[58,36058,2351],{"class":92},[58,36060,31893],{"class":75},[58,36062,2348],{"class":92},[58,36064,31120],{"class":386},[58,36066,799],{"class":75},[58,36068,36069],{"class":60,"line":10433},[58,36070,36071],{"class":64},"    # 模型实例化，然后将实例化的模型放到设备中\n",[58,36073,36074,36076,36078],{"class":60,"line":10438},[58,36075,31933],{"class":75},[58,36077,383],{"class":92},[58,36079,36080],{"class":75},"AlexNet().to(device)\n",[58,36082,36083,36085,36087,36089,36091,36094,36096,36098],{"class":60,"line":10443},[58,36084,31943],{"class":82},[58,36086,31946],{"class":75},[58,36088,89],{"class":82},[58,36090,1164],{"class":75},[58,36092,36093],{"class":82},"227",[58,36095,1164],{"class":75},[58,36097,36093],{"class":82},[58,36099,31959],{"class":75},[19,36101,36102],{"start":68},[22,36103,31972],{},[48,36105,36107],{"className":31022,"code":36106,"language":31024,"meta":53,"style":53},"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",[55,36108,36109,36115,36121,36131,36137,36147,36157,36167,36177,36187,36191,36202,36212,36216,36220,36224,36232,36244,36254,36270,36280,36312,36326,36336,36346,36350,36360,36374,36384,36394,36404,36410,36414,36418,36422,36426,36430,36438,36458,36462,36466,36470,36474,36478,36494,36498,36502,36510,36514,36518,36526,36530,36534,36538,36546,36550,36554,36558,36562,36570,36574,36582,36586,36594,36598,36606,36610,36618,36622,36626,36634,36638,36642,36646,36658,36682,36696,36700,36704,36708,36716,36720,36728,36732,36740,36744,36752,36756,36764,36768,36776,36780,36792,36796,36804,36808,36816,36820,36824,36828,36832,36840,36844,36860,36864,36872,36876,36880,36884,36888,36892,36896,36900,36916,36920,36932,36936,36948,36952,36964,36968,36976,36980,36988,36992,36996,37001,37007,37011,37020,37024,37041,37045,37054,37058,37076,37089,37094,37107,37111,37115,37123,37127,37131,37139,37143,37151,37155,37163,37167,37171,37213,37255,37259,37263,37279,37283,37299,37303,37307,37315,37319,37323,37335,37373,37378,37383,37392,37396,37410,37420,37426,37432,37438,37444,37448,37452,37458,37462,37466,37474,37478,37496,37500,37504,37508,37524,37528,37532,37536,37540,37544,37564,37584,37588,37592,37596,37604,37612,37616,37632,37652,37672,37676,37680,37688,37696,37700,37704,37708,37720,37724,37734,37742,37759],{"__ignoreMap":53},[58,36110,36111,36113],{"class":60,"line":61},[58,36112,31036],{"class":92},[58,36114,32466],{"class":75},[58,36116,36117,36119],{"class":60,"line":68},[58,36118,31036],{"class":92},[58,36120,32473],{"class":75},[58,36122,36123,36125,36127,36129],{"class":60,"line":79},[58,36124,31036],{"class":92},[58,36126,32484],{"class":75},[58,36128,32027],{"class":92},[58,36130,32489],{"class":75},[58,36132,36133,36135],{"class":60,"line":105},[58,36134,31036],{"class":92},[58,36136,31039],{"class":75},[58,36138,36139,36141,36143,36145],{"class":60,"line":627},[58,36140,31381],{"class":92},[58,36142,32059],{"class":75},[58,36144,31036],{"class":92},[58,36146,32506],{"class":75},[58,36148,36149,36151,36153,36155],{"class":60,"line":509},[58,36150,31381],{"class":92},[58,36152,32012],{"class":75},[58,36154,31036],{"class":92},[58,36156,32017],{"class":75},[58,36158,36159,36161,36163,36165],{"class":60,"line":559},[58,36160,31381],{"class":92},[58,36162,32042],{"class":75},[58,36164,31036],{"class":92},[58,36166,32047],{"class":75},[58,36168,36169,36171,36173,36175],{"class":60,"line":654},[58,36170,31036],{"class":92},[58,36172,32059],{"class":75},[58,36174,32027],{"class":92},[58,36176,32064],{"class":75},[58,36178,36179,36181,36183,36185],{"class":60,"line":671},[58,36180,31036],{"class":92},[58,36182,32076],{"class":75},[58,36184,32027],{"class":92},[58,36186,32081],{"class":75},[58,36188,36189],{"class":60,"line":677},[58,36190,32551],{"class":64},[58,36192,36193,36195,36197,36199],{"class":60,"line":2260},[58,36194,31381],{"class":92},[58,36196,32558],{"class":75},[58,36198,31036],{"class":92},[58,36200,36201],{"class":75}," AlexNet\n",[58,36203,36204,36206,36208,36210],{"class":60,"line":694},[58,36205,31381],{"class":92},[58,36207,31384],{"class":75},[58,36209,31036],{"class":92},[58,36211,31389],{"class":75},[58,36213,36214],{"class":60,"line":2270},[58,36215,3046],{"emptyLinePlaceholder":720},[58,36217,36218],{"class":60,"line":2275},[58,36219,3046],{"emptyLinePlaceholder":720},[58,36221,36222],{"class":60,"line":2289},[58,36223,32586],{"class":64},[58,36225,36226,36228,36230],{"class":60,"line":2294},[58,36227,32591],{"class":92},[58,36229,32594],{"class":379},[58,36231,32597],{"class":75},[58,36233,36234,36236,36238,36240,36242],{"class":60,"line":2300},[58,36235,32602],{"class":75},[58,36237,383],{"class":92},[58,36239,32099],{"class":75},[58,36241,32107],{"class":386},[58,36243,32110],{"class":75},[58,36245,36246,36248,36250,36252],{"class":60,"line":2321},[58,36247,32615],{"class":5862},[58,36249,383],{"class":92},[58,36251,32120],{"class":82},[58,36253,32110],{"class":75},[58,36255,36256,36258,36260,36262,36264,36266,36268],{"class":60,"line":2326},[58,36257,32626],{"class":5862},[58,36259,383],{"class":92},[58,36261,32137],{"class":75},[58,36263,32140],{"class":5862},[58,36265,383],{"class":92},[58,36267,36093],{"class":82},[58,36269,32148],{"class":75},[58,36271,36272,36274,36276,36278],{"class":60,"line":2340},[58,36273,32643],{"class":5862},[58,36275,383],{"class":92},[58,36277,32120],{"class":82},[58,36279,799],{"class":75},[58,36281,36282,36284,36286,36288,36290,36292,36294,36296,36298,36300,36302,36304,36306,36308,36310],{"class":60,"line":2345},[58,36283,32654],{"class":75},[58,36285,383],{"class":92},[58,36287,32659],{"class":75},[58,36289,32662],{"class":82},[58,36291,793],{"class":75},[58,36293,32667],{"class":82},[58,36295,1241],{"class":92},[58,36297,8004],{"class":82},[58,36299,32674],{"class":75},[58,36301,32662],{"class":82},[58,36303,793],{"class":75},[58,36305,32681],{"class":82},[58,36307,1241],{"class":92},[58,36309,8004],{"class":82},[58,36311,32688],{"class":75},[58,36313,36314,36316,36318,36320,36322,36324],{"class":60,"line":2374},[58,36315,32693],{"class":75},[58,36317,383],{"class":92},[58,36319,32698],{"class":75},[58,36321,32181],{"class":5862},[58,36323,383],{"class":92},[58,36325,32186],{"class":75},[58,36327,36328,36330,36332,36334],{"class":60,"line":2379},[58,36329,32709],{"class":5862},[58,36331,383],{"class":92},[58,36333,32714],{"class":82},[58,36335,32110],{"class":75},[58,36337,36338,36340,36342,36344],{"class":60,"line":2396},[58,36339,32721],{"class":5862},[58,36341,383],{"class":92},[58,36343,32120],{"class":82},[58,36345,32110],{"class":75},[58,36347,36348],{"class":60,"line":2401},[58,36349,32732],{"class":64},[58,36351,36352,36354,36356,36358],{"class":60,"line":2406},[58,36353,32737],{"class":5862},[58,36355,383],{"class":92},[58,36357,1181],{"class":82},[58,36359,799],{"class":75},[58,36361,36362,36364,36366,36368,36370,36372],{"class":60,"line":2411},[58,36363,32748],{"class":75},[58,36365,383],{"class":92},[58,36367,32178],{"class":75},[58,36369,32181],{"class":5862},[58,36371,383],{"class":92},[58,36373,32759],{"class":75},[58,36375,36376,36378,36380,36382],{"class":60,"line":2425},[58,36377,32764],{"class":5862},[58,36379,383],{"class":92},[58,36381,32714],{"class":82},[58,36383,32110],{"class":75},[58,36385,36386,36388,36390,36392],{"class":60,"line":2430},[58,36387,32775],{"class":5862},[58,36389,383],{"class":92},[58,36391,32120],{"class":82},[58,36393,32110],{"class":75},[58,36395,36396,36398,36400,36402],{"class":60,"line":3223},[58,36397,32786],{"class":5862},[58,36399,383],{"class":92},[58,36401,1181],{"class":82},[58,36403,799],{"class":75},[58,36405,36406,36408],{"class":60,"line":3237},[58,36407,4736],{"class":92},[58,36409,32799],{"class":75},[58,36411,36412],{"class":60,"line":3245},[58,36413,3046],{"emptyLinePlaceholder":720},[58,36415,36416],{"class":60,"line":3250},[58,36417,32808],{"class":64},[58,36419,36420],{"class":60,"line":3256},[58,36421,32813],{"class":64},[58,36423,36424],{"class":60,"line":3262},[58,36425,3046],{"emptyLinePlaceholder":720},[58,36427,36428],{"class":60,"line":3267},[58,36429,32822],{"class":64},[58,36431,36432,36434,36436],{"class":60,"line":8594},[58,36433,32591],{"class":92},[58,36435,32829],{"class":379},[58,36437,32832],{"class":75},[58,36439,36440,36442,36444,36446,36448,36450,36452,36454,36456],{"class":60,"line":8618},[58,36441,31881],{"class":75},[58,36443,383],{"class":92},[58,36445,31095],{"class":75},[58,36447,31888],{"class":386},[58,36449,2351],{"class":92},[58,36451,31893],{"class":75},[58,36453,2348],{"class":92},[58,36455,32851],{"class":386},[58,36457,799],{"class":75},[58,36459,36460],{"class":60,"line":8623},[58,36461,3046],{"emptyLinePlaceholder":720},[58,36463,36464],{"class":60,"line":8629},[58,36465,3046],{"emptyLinePlaceholder":720},[58,36467,36468],{"class":60,"line":8656},[58,36469,32866],{"class":64},[58,36471,36472],{"class":60,"line":8661},[58,36473,32871],{"class":64},[58,36475,36476],{"class":60,"line":8667},[58,36477,32876],{"class":64},[58,36479,36480,36482,36484,36486,36488,36490,36492],{"class":60,"line":8679},[58,36481,32881],{"class":75},[58,36483,383],{"class":92},[58,36485,32886],{"class":75},[58,36487,32889],{"class":5862},[58,36489,383],{"class":92},[58,36491,32894],{"class":82},[58,36493,799],{"class":75},[58,36495,36496],{"class":60,"line":8691},[58,36497,3046],{"emptyLinePlaceholder":720},[58,36499,36500],{"class":60,"line":8703},[58,36501,32905],{"class":64},[58,36503,36504,36506,36508],{"class":60,"line":10361},[58,36505,32910],{"class":75},[58,36507,383],{"class":92},[58,36509,32915],{"class":75},[58,36511,36512],{"class":60,"line":10386},[58,36513,3046],{"emptyLinePlaceholder":720},[58,36515,36516],{"class":60,"line":10409},[58,36517,32924],{"class":64},[58,36519,36520,36522,36524],{"class":60,"line":10433},[58,36521,31933],{"class":75},[58,36523,383],{"class":92},[58,36525,32933],{"class":75},[58,36527,36528],{"class":60,"line":10438},[58,36529,32938],{"class":64},[58,36531,36532],{"class":60,"line":10443},[58,36533,32943],{"class":64},[58,36535,36536],{"class":60,"line":10448},[58,36537,32948],{"class":64},[58,36539,36540,36542,36544],{"class":60,"line":10457},[58,36541,32953],{"class":75},[58,36543,383],{"class":92},[58,36545,32958],{"class":75},[58,36547,36548],{"class":60,"line":10462},[58,36549,3046],{"emptyLinePlaceholder":720},[58,36551,36552],{"class":60,"line":10468},[58,36553,3046],{"emptyLinePlaceholder":720},[58,36555,36556],{"class":60,"line":10489},[58,36557,32971],{"class":64},[58,36559,36560],{"class":60,"line":10495},[58,36561,32976],{"class":64},[58,36563,36564,36566,36568],{"class":60,"line":10509},[58,36565,32981],{"class":75},[58,36567,383],{"class":92},[58,36569,32986],{"class":82},[58,36571,36572],{"class":60,"line":10515},[58,36573,32991],{"class":64},[58,36575,36576,36578,36580],{"class":60,"line":10542},[58,36577,32996],{"class":75},[58,36579,383],{"class":92},[58,36581,33001],{"class":75},[58,36583,36584],{"class":60,"line":10551},[58,36585,33006],{"class":64},[58,36587,36588,36590,36592],{"class":60,"line":10557},[58,36589,33011],{"class":75},[58,36591,383],{"class":92},[58,36593,33001],{"class":75},[58,36595,36596],{"class":60,"line":10565},[58,36597,33020],{"class":64},[58,36599,36600,36602,36604],{"class":60,"line":10570},[58,36601,33025],{"class":75},[58,36603,383],{"class":92},[58,36605,33001],{"class":75},[58,36607,36608],{"class":60,"line":17247},[58,36609,33034],{"class":64},[58,36611,36612,36614,36616],{"class":60,"line":17253},[58,36613,33039],{"class":75},[58,36615,383],{"class":92},[58,36617,33001],{"class":75},[58,36619,36620],{"class":60,"line":17276},[58,36621,3046],{"emptyLinePlaceholder":720},[58,36623,36624],{"class":60,"line":17282},[58,36625,33052],{"class":64},[58,36627,36628,36630,36632],{"class":60,"line":17305},[58,36629,33057],{"class":75},[58,36631,383],{"class":92},[58,36633,33062],{"class":75},[58,36635,36636],{"class":60,"line":17319},[58,36637,3046],{"emptyLinePlaceholder":720},[58,36639,36640],{"class":60,"line":17339},[58,36641,3046],{"emptyLinePlaceholder":720},[58,36643,36644],{"class":60,"line":17345},[58,36645,33075],{"class":64},[58,36647,36648,36650,36652,36654,36656],{"class":60,"line":17356},[58,36649,3847],{"class":92},[58,36651,33082],{"class":75},[58,36653,26687],{"class":92},[58,36655,33087],{"class":82},[58,36657,33090],{"class":75},[58,36659,36660,36662,36664,36666,36668,36670,36672,36674,36676,36678,36680],{"class":60,"line":17379},[58,36661,33095],{"class":82},[58,36663,793],{"class":75},[58,36665,33100],{"class":386},[58,36667,33103],{"class":82},[58,36669,1370],{"class":386},[58,36671,33103],{"class":82},[58,36673,1037],{"class":386},[58,36675,33112],{"class":75},[58,36677,1318],{"class":92},[58,36679,89],{"class":82},[58,36681,31141],{"class":75},[58,36683,36684,36686,36688,36690,36692,36694],{"class":60,"line":17401},[58,36685,33095],{"class":82},[58,36687,793],{"class":75},[58,36689,33127],{"class":386},[58,36691,1241],{"class":92},[58,36693,1232],{"class":82},[58,36695,799],{"class":75},[58,36697,36698],{"class":60,"line":17406},[58,36699,3046],{"emptyLinePlaceholder":720},[58,36701,36702],{"class":60,"line":17412},[58,36703,33142],{"class":64},[58,36705,36706],{"class":60,"line":17426},[58,36707,33147],{"class":64},[58,36709,36710,36712,36714],{"class":60,"line":17439},[58,36711,33152],{"class":75},[58,36713,383],{"class":92},[58,36715,32986],{"class":82},[58,36717,36718],{"class":60,"line":17444},[58,36719,33161],{"class":64},[58,36721,36722,36724,36726],{"class":60,"line":17458},[58,36723,33166],{"class":75},[58,36725,383],{"class":92},[58,36727,3731],{"class":82},[58,36729,36730],{"class":60,"line":17463},[58,36731,33175],{"class":64},[58,36733,36734,36736,36738],{"class":60,"line":17469},[58,36735,33180],{"class":75},[58,36737,383],{"class":92},[58,36739,32986],{"class":82},[58,36741,36742],{"class":60,"line":17474},[58,36743,33189],{"class":64},[58,36745,36746,36748,36750],{"class":60,"line":17488},[58,36747,33194],{"class":75},[58,36749,383],{"class":92},[58,36751,3731],{"class":82},[58,36753,36754],{"class":60,"line":17493},[58,36755,33203],{"class":64},[58,36757,36758,36760,36762],{"class":60,"line":17498},[58,36759,33208],{"class":75},[58,36761,383],{"class":92},[58,36763,3731],{"class":82},[58,36765,36766],{"class":60,"line":17512},[58,36767,33217],{"class":64},[58,36769,36770,36772,36774],{"class":60,"line":17524},[58,36771,33222],{"class":75},[58,36773,383],{"class":92},[58,36775,3731],{"class":82},[58,36777,36778],{"class":60,"line":17529},[58,36779,33231],{"class":64},[58,36781,36782,36784,36786,36788,36790],{"class":60,"line":17542},[58,36783,4049],{"class":92},[58,36785,32245],{"class":75},[58,36787,26687],{"class":92},[58,36789,32250],{"class":82},[58,36791,33244],{"class":75},[58,36793,36794],{"class":60,"line":17547},[58,36795,33249],{"class":64},[58,36797,36798,36800,36802],{"class":60,"line":17552},[58,36799,33254],{"class":75},[58,36801,383],{"class":92},[58,36803,33259],{"class":75},[58,36805,36806],{"class":60,"line":17557},[58,36807,33264],{"class":64},[58,36809,36810,36812,36814],{"class":60,"line":17570},[58,36811,33269],{"class":75},[58,36813,383],{"class":92},[58,36815,33274],{"class":75},[58,36817,36818],{"class":60,"line":17575},[58,36819,33280],{"class":64},[58,36821,36822],{"class":60,"line":33277},[58,36823,33286],{"class":75},[58,36825,36826],{"class":60,"line":33283},[58,36827,33292],{"class":64},[58,36829,36830],{"class":60,"line":33289},[58,36831,33298],{"class":64},[58,36833,36834,36836,36838],{"class":60,"line":33295},[58,36835,33304],{"class":75},[58,36837,383],{"class":92},[58,36839,33309],{"class":75},[58,36841,36842],{"class":60,"line":33301},[58,36843,33315],{"class":64},[58,36845,36846,36848,36850,36852,36854,36856,36858],{"class":60,"line":33312},[58,36847,33321],{"class":75},[58,36849,383],{"class":92},[58,36851,33326],{"class":75},[58,36853,33329],{"class":5862},[58,36855,383],{"class":92},[58,36857,89],{"class":82},[58,36859,799],{"class":75},[58,36861,36862],{"class":60,"line":33318},[58,36863,33341],{"class":64},[58,36865,36866,36868,36870],{"class":60,"line":33338},[58,36867,33347],{"class":75},[58,36869,383],{"class":92},[58,36871,33352],{"class":75},[58,36873,36874],{"class":60,"line":33344},[58,36875,33358],{"class":64},[58,36877,36878],{"class":60,"line":33355},[58,36879,33364],{"class":75},[58,36881,36882],{"class":60,"line":33361},[58,36883,33370],{"class":64},[58,36885,36886],{"class":60,"line":33367},[58,36887,33376],{"class":75},[58,36889,36890],{"class":60,"line":33373},[58,36891,33382],{"class":64},[58,36893,36894],{"class":60,"line":33379},[58,36895,33388],{"class":75},[58,36897,36898],{"class":60,"line":33385},[58,36899,33394],{"class":64},[58,36901,36902,36904,36906,36908,36910,36912,36914],{"class":60,"line":33391},[58,36903,33400],{"class":75},[58,36905,10122],{"class":92},[58,36907,33405],{"class":75},[58,36909,1241],{"class":92},[58,36911,33410],{"class":75},[58,36913,979],{"class":82},[58,36915,799],{"class":75},[58,36917,36918],{"class":60,"line":33397},[58,36919,33420],{"class":64},[58,36921,36922,36924,36926,36928,36930],{"class":60,"line":33417},[58,36923,33426],{"class":75},[58,36925,10122],{"class":92},[58,36927,33431],{"class":75},[58,36929,3595],{"class":92},[58,36931,33436],{"class":75},[58,36933,36934],{"class":60,"line":33423},[58,36935,33442],{"class":64},[58,36937,36938,36940,36942,36944,36946],{"class":60,"line":33439},[58,36939,33448],{"class":75},[58,36941,10122],{"class":92},[58,36943,33410],{"class":75},[58,36945,979],{"class":82},[58,36947,799],{"class":75},[58,36949,36950],{"class":60,"line":33445},[58,36951,33462],{"class":64},[58,36953,36954,36956,36958,36960,36962],{"class":60,"line":33459},[58,36955,4049],{"class":92},[58,36957,33470],{"class":75},[58,36959,26687],{"class":92},[58,36961,32250],{"class":82},[58,36963,33477],{"class":75},[58,36965,36966],{"class":60,"line":33465},[58,36967,33483],{"class":64},[58,36969,36970,36972,36974],{"class":60,"line":33480},[58,36971,33254],{"class":75},[58,36973,383],{"class":92},[58,36975,33259],{"class":75},[58,36977,36978],{"class":60,"line":33486},[58,36979,33498],{"class":64},[58,36981,36982,36984,36986],{"class":60,"line":33495},[58,36983,33269],{"class":75},[58,36985,383],{"class":92},[58,36987,33274],{"class":75},[58,36989,36990],{"class":60,"line":33501},[58,36991,33513],{"class":64},[58,36993,36994],{"class":60,"line":33510},[58,36995,33519],{"class":75},[58,36997,36998],{"class":60,"line":33516},[58,36999,37000],{"class":64},"            # 验证时不计算梯度以节省内存\u002F计算\n",[58,37002,37003,37005],{"class":60,"line":33522},[58,37004,33525],{"class":92},[58,37006,33528],{"class":75},[58,37008,37009],{"class":60,"line":33531},[58,37010,33534],{"class":64},[58,37012,37013,37016,37018],{"class":60,"line":33537},[58,37014,37015],{"class":75},"                output",[58,37017,383],{"class":92},[58,37019,33309],{"class":75},[58,37021,37022],{"class":60,"line":33548},[58,37023,33551],{"class":64},[58,37025,37026,37029,37031,37033,37035,37037,37039],{"class":60,"line":33554},[58,37027,37028],{"class":75},"                pre_lab",[58,37030,383],{"class":92},[58,37032,33326],{"class":75},[58,37034,33329],{"class":5862},[58,37036,383],{"class":92},[58,37038,89],{"class":82},[58,37040,799],{"class":75},[58,37042,37043],{"class":60,"line":33573},[58,37044,33576],{"class":64},[58,37046,37047,37050,37052],{"class":60,"line":33579},[58,37048,37049],{"class":75},"                val_batch_loss",[58,37051,383],{"class":92},[58,37053,33352],{"class":75},[58,37055,37056],{"class":60,"line":33590},[58,37057,33593],{"class":64},[58,37059,37060,37063,37065,37068,37070,37072,37074],{"class":60,"line":33596},[58,37061,37062],{"class":75},"                val_loss",[58,37064,10122],{"class":92},[58,37066,37067],{"class":75},"val_batch_loss.item()",[58,37069,1241],{"class":92},[58,37071,33410],{"class":75},[58,37073,979],{"class":82},[58,37075,799],{"class":75},[58,37077,37078,37081,37083,37085,37087],{"class":60,"line":33616},[58,37079,37080],{"class":75},"                val_corrects",[58,37082,10122],{"class":92},[58,37084,33431],{"class":75},[58,37086,3595],{"class":92},[58,37088,33436],{"class":75},[58,37090,37091],{"class":60,"line":33632},[58,37092,37093],{"class":64},"            # 当前用于验证的样本数量\n",[58,37095,37096,37099,37101,37103,37105],{"class":60,"line":33638},[58,37097,37098],{"class":75},"            val_num",[58,37100,10122],{"class":92},[58,37102,33410],{"class":75},[58,37104,979],{"class":82},[58,37106,799],{"class":75},[58,37108,37109],{"class":60,"line":33652},[58,37110,33655],{"class":64},[58,37112,37113],{"class":60,"line":33658},[58,37114,33661],{"class":64},[58,37116,37117,37119,37121],{"class":60,"line":33664},[58,37118,33667],{"class":75},[58,37120,1370],{"class":92},[58,37122,33672],{"class":75},[58,37124,37125],{"class":60,"line":33675},[58,37126,33678],{"class":64},[58,37128,37129],{"class":60,"line":33681},[58,37130,33684],{"class":64},[58,37132,37133,37135,37137],{"class":60,"line":33687},[58,37134,33690],{"class":75},[58,37136,1370],{"class":92},[58,37138,33672],{"class":75},[58,37140,37141],{"class":60,"line":33697},[58,37142,33700],{"class":64},[58,37144,37145,37147,37149],{"class":60,"line":33703},[58,37146,33706],{"class":75},[58,37148,1370],{"class":92},[58,37150,33711],{"class":75},[58,37152,37153],{"class":60,"line":33714},[58,37154,33717],{"class":64},[58,37156,37157,37159,37161],{"class":60,"line":33720},[58,37158,33723],{"class":75},[58,37160,1370],{"class":92},[58,37162,33711],{"class":75},[58,37164,37165],{"class":60,"line":33730},[58,37166,3046],{"emptyLinePlaceholder":720},[58,37168,37169],{"class":60,"line":33735},[58,37170,33738],{"class":64},[58,37172,37173,37175,37177,37179,37181,37183,37185,37187,37189,37191,37193,37195,37197,37199,37201,37203,37205,37207,37209,37211],{"class":60,"line":33741},[58,37174,33095],{"class":82},[58,37176,793],{"class":75},[58,37178,4238],{"class":386},[58,37180,33103],{"class":82},[58,37182,33752],{"class":386},[58,37184,1681],{"class":82},[58,37186,33757],{"class":92},[58,37188,1730],{"class":82},[58,37190,33762],{"class":386},[58,37192,1681],{"class":82},[58,37194,33757],{"class":92},[58,37196,1730],{"class":82},[58,37198,4238],{"class":386},[58,37200,33773],{"class":75},[58,37202,1318],{"class":92},[58,37204,89],{"class":82},[58,37206,33780],{"class":75},[58,37208,1318],{"class":92},[58,37210,89],{"class":82},[58,37212,33787],{"class":75},[58,37214,37215,37217,37219,37221,37223,37225,37227,37229,37231,37233,37235,37237,37239,37241,37243,37245,37247,37249,37251,37253],{"class":60,"line":33790},[58,37216,33095],{"class":82},[58,37218,793],{"class":75},[58,37220,4238],{"class":386},[58,37222,33103],{"class":82},[58,37224,33801],{"class":386},[58,37226,1681],{"class":82},[58,37228,33757],{"class":92},[58,37230,1730],{"class":82},[58,37232,33810],{"class":386},[58,37234,1681],{"class":82},[58,37236,33757],{"class":92},[58,37238,1730],{"class":82},[58,37240,4238],{"class":386},[58,37242,33821],{"class":75},[58,37244,1318],{"class":92},[58,37246,89],{"class":82},[58,37248,33828],{"class":75},[58,37250,1318],{"class":92},[58,37252,89],{"class":82},[58,37254,33787],{"class":75},[58,37256,37257],{"class":60,"line":33837},[58,37258,3046],{"emptyLinePlaceholder":720},[58,37260,37261],{"class":60,"line":33842},[58,37262,33845],{"class":64},[58,37264,37265,37267,37269,37271,37273,37275,37277],{"class":60,"line":33848},[58,37266,3143],{"class":92},[58,37268,33853],{"class":75},[58,37270,1318],{"class":92},[58,37272,89],{"class":82},[58,37274,1724],{"class":75},[58,37276,1744],{"class":92},[58,37278,33864],{"class":75},[58,37280,37281],{"class":60,"line":33867},[58,37282,33870],{"class":64},[58,37284,37285,37287,37289,37291,37293,37295,37297],{"class":60,"line":33873},[58,37286,33876],{"class":75},[58,37288,832],{"class":82},[58,37290,383],{"class":92},[58,37292,33883],{"class":75},[58,37294,1318],{"class":92},[58,37296,89],{"class":82},[58,37298,33890],{"class":75},[58,37300,37301],{"class":60,"line":33893},[58,37302,33896],{"class":64},[58,37304,37305],{"class":60,"line":33899},[58,37306,33902],{"class":64},[58,37308,37309,37311,37313],{"class":60,"line":33905},[58,37310,33908],{"class":75},[58,37312,383],{"class":92},[58,37314,32958],{"class":75},[58,37316,37317],{"class":60,"line":33915},[58,37318,3046],{"emptyLinePlaceholder":720},[58,37320,37321],{"class":60,"line":33920},[58,37322,33923],{"class":64},[58,37324,37325,37327,37329,37331,37333],{"class":60,"line":33926},[58,37326,33929],{"class":75},[58,37328,383],{"class":92},[58,37330,33934],{"class":75},[58,37332,1318],{"class":92},[58,37334,33939],{"class":75},[58,37336,37337,37339,37341,37343,37345,37347,37349,37351,37353,37355,37357,37359,37361,37363,37365,37367,37369,37371],{"class":60,"line":33942},[58,37338,33095],{"class":82},[58,37340,793],{"class":75},[58,37342,33949],{"class":386},[58,37344,1681],{"class":82},[58,37346,33954],{"class":92},[58,37348,1730],{"class":82},[58,37350,1330],{"class":386},[58,37352,1681],{"class":82},[58,37354,33954],{"class":92},[58,37356,1730],{"class":82},[58,37358,33967],{"class":386},[58,37360,33970],{"class":75},[58,37362,33973],{"class":92},[58,37364,1692],{"class":82},[58,37366,33978],{"class":75},[58,37368,1114],{"class":92},[58,37370,1692],{"class":82},[58,37372,31141],{"class":75},[58,37374,37375],{"class":60,"line":33987},[58,37376,37377],{"class":64},"    # 选择最优参数并保存\n",[58,37379,37380],{"class":60,"line":33993},[58,37381,37382],{"class":64},"    # 保存最佳模型权重字典\n",[58,37384,37385,37388,37390],{"class":60,"line":33999},[58,37386,37387],{"class":75},"    torch.save(best_model_wts,",[58,37389,34011],{"class":386},[58,37391,799],{"class":75},[58,37393,37394],{"class":60,"line":34005},[58,37395,34031],{"class":64},[58,37397,37398,37400,37402,37404,37406,37408],{"class":60,"line":34016},[58,37399,34037],{"class":75},[58,37401,383],{"class":92},[58,37403,34042],{"class":75},[58,37405,34045],{"class":5862},[58,37407,383],{"class":92},[58,37409,2195],{"class":75},[58,37411,37412,37414,37416,37418],{"class":60,"line":34022},[58,37413,34055],{"class":386},[58,37415,1644],{"class":75},[58,37417,34060],{"class":82},[58,37419,34063],{"class":75},[58,37421,37422,37424],{"class":60,"line":34028},[58,37423,34069],{"class":386},[58,37425,34072],{"class":75},[58,37427,37428,37430],{"class":60,"line":34034},[58,37429,34078],{"class":386},[58,37431,34081],{"class":75},[58,37433,37434,37436],{"class":60,"line":34052},[58,37435,34087],{"class":386},[58,37437,34090],{"class":75},[58,37439,37440,37442],{"class":60,"line":34066},[58,37441,34096],{"class":386},[58,37443,34099],{"class":75},[58,37445,37446],{"class":60,"line":34075},[58,37447,34105],{"class":75},[58,37449,37450],{"class":60,"line":34084},[58,37451,34111],{"class":64},[58,37453,37454,37456],{"class":60,"line":34093},[58,37455,4736],{"class":92},[58,37457,34119],{"class":75},[58,37459,37460],{"class":60,"line":34102},[58,37461,3046],{"emptyLinePlaceholder":720},[58,37463,37464],{"class":60,"line":34108},[58,37465,34130],{"class":64},[58,37467,37468,37470,37472],{"class":60,"line":34114},[58,37469,32591],{"class":92},[58,37471,34138],{"class":379},[58,37473,34141],{"class":75},[58,37475,37476],{"class":60,"line":34122},[58,37477,34147],{"class":64},[58,37479,37480,37482,37484,37486,37488,37490,37492,37494],{"class":60,"line":34127},[58,37481,34153],{"class":75},[58,37483,32337],{"class":5862},[58,37485,383],{"class":92},[58,37487,793],{"class":75},[58,37489,1284],{"class":82},[58,37491,1164],{"class":75},[58,37493,1079],{"class":82},[58,37495,31141],{"class":75},[58,37497,37498],{"class":60,"line":34133},[58,37499,34173],{"class":64},[58,37501,37502],{"class":60,"line":34144},[58,37503,34179],{"class":64},[58,37505,37506],{"class":60,"line":34150},[58,37507,34185],{"class":64},[58,37509,37510,37512,37514,37516,37518,37520,37522],{"class":60,"line":34170},[58,37511,32371],{"class":75},[58,37513,89],{"class":82},[58,37515,1164],{"class":75},[58,37517,867],{"class":82},[58,37519,1164],{"class":75},[58,37521,89],{"class":82},[58,37523,799],{"class":75},[58,37525,37526],{"class":60,"line":34176},[58,37527,34208],{"class":64},[58,37529,37530],{"class":60,"line":34182},[58,37531,34214],{"class":64},[58,37533,37534],{"class":60,"line":34188},[58,37535,34220],{"class":64},[58,37537,37538],{"class":60,"line":34205},[58,37539,34226],{"class":64},[58,37541,37542],{"class":60,"line":34211},[58,37543,34232],{"class":64},[58,37545,37546,37548,37550,37552,37554,37556,37558,37560,37562],{"class":60,"line":34217},[58,37547,34238],{"class":75},[58,37549,34241],{"class":386},[58,37551,34244],{"class":75},[58,37553,34247],{"class":386},[58,37555,1164],{"class":75},[58,37557,34252],{"class":5862},[58,37559,383],{"class":92},[58,37561,34257],{"class":386},[58,37563,799],{"class":75},[58,37565,37566,37568,37570,37572,37574,37576,37578,37580,37582],{"class":60,"line":34223},[58,37567,34238],{"class":75},[58,37569,34241],{"class":386},[58,37571,34269],{"class":75},[58,37573,34272],{"class":386},[58,37575,1164],{"class":75},[58,37577,34252],{"class":5862},[58,37579,383],{"class":92},[58,37581,34281],{"class":386},[58,37583,799],{"class":75},[58,37585,37586],{"class":60,"line":34229},[58,37587,34289],{"class":64},[58,37589,37590],{"class":60,"line":34235},[58,37591,34295],{"class":75},[58,37593,37594],{"class":60,"line":34262},[58,37595,34301],{"class":64},[58,37597,37598,37600,37602],{"class":60,"line":34286},[58,37599,34307],{"class":75},[58,37601,34310],{"class":386},[58,37603,799],{"class":75},[58,37605,37606,37608,37610],{"class":60,"line":34292},[58,37607,34318],{"class":75},[58,37609,34321],{"class":386},[58,37611,799],{"class":75},[58,37613,37614],{"class":60,"line":34298},[58,37615,34329],{"class":64},[58,37617,37618,37620,37622,37624,37626,37628,37630],{"class":60,"line":34304},[58,37619,32371],{"class":75},[58,37621,89],{"class":82},[58,37623,1164],{"class":75},[58,37625,867],{"class":82},[58,37627,1164],{"class":75},[58,37629,867],{"class":82},[58,37631,799],{"class":75},[58,37633,37634,37636,37638,37640,37642,37644,37646,37648,37650],{"class":60,"line":34315},[58,37635,34238],{"class":75},[58,37637,34241],{"class":386},[58,37639,34356],{"class":75},[58,37641,34247],{"class":386},[58,37643,1164],{"class":75},[58,37645,34252],{"class":5862},[58,37647,383],{"class":92},[58,37649,34367],{"class":386},[58,37651,799],{"class":75},[58,37653,37654,37656,37658,37660,37662,37664,37666,37668,37670],{"class":60,"line":34326},[58,37655,34238],{"class":75},[58,37657,34241],{"class":386},[58,37659,34379],{"class":75},[58,37661,34272],{"class":386},[58,37663,1164],{"class":75},[58,37665,34252],{"class":5862},[58,37667,383],{"class":92},[58,37669,34390],{"class":386},[58,37671,799],{"class":75},[58,37673,37674],{"class":60,"line":34332},[58,37675,34398],{"class":64},[58,37677,37678],{"class":60,"line":34349},[58,37679,34295],{"class":75},[58,37681,37682,37684,37686],{"class":60,"line":34372},[58,37683,34307],{"class":75},[58,37685,34241],{"class":386},[58,37687,799],{"class":75},[58,37689,37690,37692,37694],{"class":60,"line":34395},[58,37691,34318],{"class":75},[58,37693,34420],{"class":386},[58,37695,799],{"class":75},[58,37697,37698],{"class":60,"line":34401},[58,37699,34428],{"class":75},[58,37701,37702],{"class":60,"line":34406},[58,37703,3046],{"emptyLinePlaceholder":720},[58,37705,37706],{"class":60,"line":34415},[58,37707,34439],{"class":64},[58,37709,37710,37712,37714,37716,37718],{"class":60,"line":34425},[58,37711,2180],{"class":92},[58,37713,31864],{"class":82},[58,37715,3595],{"class":92},[58,37717,31869],{"class":386},[58,37719,4385],{"class":75},[58,37721,37722],{"class":60,"line":34431},[58,37723,34458],{"class":64},[58,37725,37726,37729,37731],{"class":60,"line":34436},[58,37727,37728],{"class":75},"    AlexNet",[58,37730,383],{"class":92},[58,37732,37733],{"class":75},"AlexNet()\n",[58,37735,37736,37738,37740],{"class":60,"line":34442},[58,37737,34475],{"class":75},[58,37739,383],{"class":92},[58,37741,34480],{"class":75},[58,37743,37744,37746,37748,37751,37753,37755,37757],{"class":60,"line":34455},[58,37745,34037],{"class":75},[58,37747,383],{"class":92},[58,37749,37750],{"class":75},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[58,37752,34493],{"class":5862},[58,37754,383],{"class":92},[58,37756,1486],{"class":82},[58,37758,799],{"class":75},[58,37760,37761],{"class":60,"line":34461},[58,37762,34505],{"class":75},[19,37764,37765],{"start":79},[22,37766,34518],{},[48,37768,37770],{"className":31022,"code":37769,"language":31024,"meta":53,"style":53},"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",[55,37771,37772,37778,37788,37798,37808,37812,37822,37832,37843,37847,37851,37855,37863,37879,37889,37905,37915,37929,37933,37943,37953,37963,37969,37973,37977,37985,37989,38005,38013,38017,38021,38029,38037,38041,38045,38049,38053,38059,38063,38073,38081,38089,38093,38097,38101,38109,38113,38129,38133,38137,38141,38153,38157,38169,38173,38177,38189,38193,38203,38207,38211,38223,38227,38235,38239,38243,38251,38255,38263,38267,38271,38275,38279,38283,38299,38307,38311,38315,38363,38369,38373,38383,38391,38399,38403,38407,38411,38415,38423,38427,38443,38447,38455,38463],{"__ignoreMap":53},[58,37773,37774,37776],{"class":60,"line":61},[58,37775,31036],{"class":92},[58,37777,31039],{"class":75},[58,37779,37780,37782,37784,37786],{"class":60,"line":68},[58,37781,31036],{"class":92},[58,37783,32059],{"class":75},[58,37785,32027],{"class":92},[58,37787,32064],{"class":75},[58,37789,37790,37792,37794,37796],{"class":60,"line":79},[58,37791,31381],{"class":92},[58,37793,34546],{"class":75},[58,37795,31036],{"class":92},[58,37797,34551],{"class":75},[58,37799,37800,37802,37804,37806],{"class":60,"line":105},[58,37801,31381],{"class":92},[58,37803,32042],{"class":75},[58,37805,31036],{"class":92},[58,37807,32047],{"class":75},[58,37809,37810],{"class":60,"line":627},[58,37811,34566],{"class":64},[58,37813,37814,37816,37818,37820],{"class":60,"line":509},[58,37815,31381],{"class":92},[58,37817,32012],{"class":75},[58,37819,31036],{"class":92},[58,37821,32017],{"class":75},[58,37823,37824,37826,37828,37830],{"class":60,"line":559},[58,37825,31381],{"class":92},[58,37827,32558],{"class":75},[58,37829,31036],{"class":92},[58,37831,36201],{"class":75},[58,37833,37834,37836,37839,37841],{"class":60,"line":654},[58,37835,31381],{"class":92},[58,37837,37838],{"class":75}," 练习.AlexNet.model ",[58,37840,31036],{"class":92},[58,37842,36201],{"class":75},[58,37844,37845],{"class":60,"line":671},[58,37846,3046],{"emptyLinePlaceholder":720},[58,37848,37849],{"class":60,"line":677},[58,37850,3046],{"emptyLinePlaceholder":720},[58,37852,37853],{"class":60,"line":2260},[58,37854,34595],{"class":64},[58,37856,37857,37859,37861],{"class":60,"line":694},[58,37858,32591],{"class":92},[58,37860,34602],{"class":379},[58,37862,32597],{"class":75},[58,37864,37865,37867,37869,37871,37873,37875,37877],{"class":60,"line":2270},[58,37866,34609],{"class":75},[58,37868,383],{"class":92},[58,37870,32099],{"class":75},[58,37872,32102],{"class":5862},[58,37874,383],{"class":92},[58,37876,32107],{"class":386},[58,37878,32110],{"class":75},[58,37880,37881,37883,37885,37887],{"class":60,"line":2275},[58,37882,34626],{"class":5862},[58,37884,383],{"class":92},[58,37886,34631],{"class":82},[58,37888,32110],{"class":75},[58,37890,37891,37893,37895,37897,37899,37901,37903],{"class":60,"line":2289},[58,37892,34638],{"class":5862},[58,37894,383],{"class":92},[58,37896,32137],{"class":75},[58,37898,32140],{"class":5862},[58,37900,383],{"class":92},[58,37902,36093],{"class":82},[58,37904,32148],{"class":75},[58,37906,37907,37909,37911,37913],{"class":60,"line":2294},[58,37908,34655],{"class":5862},[58,37910,383],{"class":92},[58,37912,32120],{"class":82},[58,37914,799],{"class":75},[58,37916,37917,37919,37921,37923,37925,37927],{"class":60,"line":2300},[58,37918,34666],{"class":75},[58,37920,383],{"class":92},[58,37922,32178],{"class":75},[58,37924,32181],{"class":5862},[58,37926,383],{"class":92},[58,37928,34677],{"class":75},[58,37930,37931],{"class":60,"line":2321},[58,37932,34682],{"class":64},[58,37934,37935,37937,37939,37941],{"class":60,"line":2326},[58,37936,34687],{"class":5862},[58,37938,383],{"class":92},[58,37940,89],{"class":82},[58,37942,32110],{"class":75},[58,37944,37945,37947,37949,37951],{"class":60,"line":2340},[58,37946,34698],{"class":5862},[58,37948,383],{"class":92},[58,37950,32120],{"class":82},[58,37952,32110],{"class":75},[58,37954,37955,37957,37959,37961],{"class":60,"line":2345},[58,37956,34709],{"class":5862},[58,37958,383],{"class":92},[58,37960,979],{"class":82},[58,37962,799],{"class":75},[58,37964,37965,37967],{"class":60,"line":2374},[58,37966,4736],{"class":92},[58,37968,34722],{"class":75},[58,37970,37971],{"class":60,"line":2379},[58,37972,3046],{"emptyLinePlaceholder":720},[58,37974,37975],{"class":60,"line":2396},[58,37976,34731],{"class":64},[58,37978,37979,37981,37983],{"class":60,"line":2401},[58,37980,32591],{"class":92},[58,37982,34738],{"class":379},[58,37984,34741],{"class":75},[58,37986,37987],{"class":60,"line":2406},[58,37988,34746],{"class":64},[58,37990,37991,37993,37995,37997,37999,38001,38003],{"class":60,"line":2411},[58,37992,31881],{"class":75},[58,37994,383],{"class":92},[58,37996,31888],{"class":386},[58,37998,2351],{"class":92},[58,38000,31893],{"class":75},[58,38002,2348],{"class":92},[58,38004,34763],{"class":386},[58,38006,38007,38009,38011],{"class":60,"line":2425},[58,38008,31933],{"class":75},[58,38010,383],{"class":92},[58,38012,32933],{"class":75},[58,38014,38015],{"class":60,"line":2430},[58,38016,3046],{"emptyLinePlaceholder":720},[58,38018,38019],{"class":60,"line":3223},[58,38020,34780],{"class":64},[58,38022,38023,38025,38027],{"class":60,"line":3237},[58,38024,34785],{"class":75},[58,38026,383],{"class":92},[58,38028,32986],{"class":82},[58,38030,38031,38033,38035],{"class":60,"line":3245},[58,38032,34794],{"class":75},[58,38034,383],{"class":92},[58,38036,3731],{"class":82},[58,38038,38039],{"class":60,"line":3250},[58,38040,3046],{"emptyLinePlaceholder":720},[58,38042,38043],{"class":60,"line":3256},[58,38044,34807],{"class":64},[58,38046,38047],{"class":60,"line":3262},[58,38048,34812],{"class":64},[58,38050,38051],{"class":60,"line":3267},[58,38052,34817],{"class":64},[58,38054,38055,38057],{"class":60,"line":8594},[58,38056,34822],{"class":92},[58,38058,33528],{"class":75},[58,38060,38061],{"class":60,"line":8618},[58,38062,34829],{"class":64},[58,38064,38065,38067,38069,38071],{"class":60,"line":8623},[58,38066,4049],{"class":92},[58,38068,34836],{"class":75},[58,38070,26687],{"class":92},[58,38072,34841],{"class":75},[58,38074,38075,38077,38079],{"class":60,"line":8629},[58,38076,34846],{"class":75},[58,38078,383],{"class":92},[58,38080,34851],{"class":75},[58,38082,38083,38085,38087],{"class":60,"line":8656},[58,38084,34856],{"class":75},[58,38086,383],{"class":92},[58,38088,34861],{"class":75},[58,38090,38091],{"class":60,"line":8661},[58,38092,34866],{"class":64},[58,38094,38095],{"class":60,"line":8667},[58,38096,33519],{"class":75},[58,38098,38099],{"class":60,"line":8679},[58,38100,34875],{"class":64},[58,38102,38103,38105,38107],{"class":60,"line":8691},[58,38104,33304],{"class":75},[58,38106,383],{"class":92},[58,38108,34884],{"class":75},[58,38110,38111],{"class":60,"line":8703},[58,38112,34889],{"class":64},[58,38114,38115,38117,38119,38121,38123,38125,38127],{"class":60,"line":10361},[58,38116,33321],{"class":75},[58,38118,383],{"class":92},[58,38120,33326],{"class":75},[58,38122,33329],{"class":5862},[58,38124,383],{"class":92},[58,38126,89],{"class":82},[58,38128,799],{"class":75},[58,38130,38131],{"class":60,"line":10386},[58,38132,34910],{"class":64},[58,38134,38135],{"class":60,"line":10409},[58,38136,34915],{"class":64},[58,38138,38139],{"class":60,"line":10433},[58,38140,34920],{"class":64},[58,38142,38143,38145,38147,38149,38151],{"class":60,"line":10438},[58,38144,34925],{"class":75},[58,38146,10122],{"class":92},[58,38148,33431],{"class":75},[58,38150,3595],{"class":92},[58,38152,34934],{"class":75},[58,38154,38155],{"class":60,"line":10443},[58,38156,34939],{"class":64},[58,38158,38159,38161,38163,38165,38167],{"class":60,"line":10448},[58,38160,34944],{"class":75},[58,38162,10122],{"class":92},[58,38164,34949],{"class":75},[58,38166,979],{"class":82},[58,38168,799],{"class":75},[58,38170,38171],{"class":60,"line":10457},[58,38172,3046],{"emptyLinePlaceholder":720},[58,38174,38175],{"class":60,"line":10462},[58,38176,34962],{"class":64},[58,38178,38179,38181,38183,38185,38187],{"class":60,"line":10468},[58,38180,34967],{"class":75},[58,38182,383],{"class":92},[58,38184,34972],{"class":75},[58,38186,1370],{"class":92},[58,38188,34977],{"class":75},[58,38190,38191],{"class":60,"line":10489},[58,38192,34982],{"class":64},[58,38194,38195,38197,38199,38201],{"class":60,"line":10495},[58,38196,33095],{"class":82},[58,38198,793],{"class":75},[58,38200,34991],{"class":386},[58,38202,34994],{"class":75},[58,38204,38205],{"class":60,"line":10509},[58,38206,3046],{"emptyLinePlaceholder":720},[58,38208,38209],{"class":60,"line":10515},[58,38210,35003],{"class":64},[58,38212,38213,38215,38217,38219,38221],{"class":60,"line":10542},[58,38214,2180],{"class":92},[58,38216,31864],{"class":82},[58,38218,3595],{"class":92},[58,38220,31869],{"class":386},[58,38222,4385],{"class":75},[58,38224,38225],{"class":60,"line":10551},[58,38226,35020],{"class":64},[58,38228,38229,38231,38233],{"class":60,"line":10557},[58,38230,31933],{"class":75},[58,38232,383],{"class":92},[58,38234,37733],{"class":75},[58,38236,38237],{"class":60,"line":10565},[58,38238,35033],{"class":64},[58,38240,38241],{"class":60,"line":10570},[58,38242,35038],{"class":64},[58,38244,38245,38247,38249],{"class":60,"line":17247},[58,38246,35043],{"class":75},[58,38248,35046],{"class":386},[58,38250,31141],{"class":75},[58,38252,38253],{"class":60,"line":17253},[58,38254,35053],{"class":64},[58,38256,38257,38259,38261],{"class":60,"line":17276},[58,38258,34666],{"class":75},[58,38260,383],{"class":92},[58,38262,35062],{"class":75},[58,38264,38265],{"class":60,"line":17282},[58,38266,35067],{"class":64},[58,38268,38269],{"class":60,"line":17305},[58,38270,35072],{"class":75},[58,38272,38273],{"class":60,"line":17319},[58,38274,3046],{"emptyLinePlaceholder":720},[58,38276,38277],{"class":60,"line":17339},[58,38278,35081],{"class":64},[58,38280,38281],{"class":60,"line":17345},[58,38282,35086],{"class":64},[58,38284,38285,38287,38289,38291,38293,38295,38297],{"class":60,"line":17356},[58,38286,31881],{"class":75},[58,38288,383],{"class":92},[58,38290,31888],{"class":386},[58,38292,2351],{"class":92},[58,38294,31893],{"class":75},[58,38296,2348],{"class":92},[58,38298,34763],{"class":386},[58,38300,38301,38303,38305],{"class":60,"line":17379},[58,38302,31933],{"class":75},[58,38304,383],{"class":92},[58,38306,32933],{"class":75},[58,38308,38309],{"class":60,"line":17401},[58,38310,35115],{"class":64},[58,38312,38313],{"class":60,"line":17406},[58,38314,35120],{"class":64},[58,38316,38317,38319,38321,38323,38325,38327,38329,38331,38333,38335,38337,38339,38341,38343,38345,38347,38349,38351,38353,38355,38357,38359,38361],{"class":60,"line":17412},[58,38318,35125],{"class":75},[58,38320,383],{"class":92},[58,38322,1675],{"class":75},[58,38324,35132],{"class":386},[58,38326,1164],{"class":75},[58,38328,35137],{"class":386},[58,38330,1164],{"class":75},[58,38332,35142],{"class":386},[58,38334,1164],{"class":75},[58,38336,35147],{"class":386},[58,38338,1164],{"class":75},[58,38340,35152],{"class":386},[58,38342,1164],{"class":75},[58,38344,35157],{"class":386},[58,38346,1164],{"class":75},[58,38348,35162],{"class":386},[58,38350,1164],{"class":75},[58,38352,35167],{"class":386},[58,38354,1164],{"class":75},[58,38356,35172],{"class":386},[58,38358,1164],{"class":75},[58,38360,35177],{"class":386},[58,38362,33890],{"class":75},[58,38364,38365,38367],{"class":60,"line":17426},[58,38366,34822],{"class":92},[58,38368,33528],{"class":75},[58,38370,38371],{"class":60,"line":17439},[58,38372,35190],{"class":64},[58,38374,38375,38377,38379,38381],{"class":60,"line":17444},[58,38376,4049],{"class":92},[58,38378,35197],{"class":75},[58,38380,26687],{"class":92},[58,38382,34841],{"class":75},[58,38384,38385,38387,38389],{"class":60,"line":17458},[58,38386,33254],{"class":75},[58,38388,383],{"class":92},[58,38390,33259],{"class":75},[58,38392,38393,38395,38397],{"class":60,"line":17463},[58,38394,33269],{"class":75},[58,38396,383],{"class":92},[58,38398,33274],{"class":75},[58,38400,38401],{"class":60,"line":17469},[58,38402,3046],{"emptyLinePlaceholder":720},[58,38404,38405],{"class":60,"line":17474},[58,38406,35226],{"class":64},[58,38408,38409],{"class":60,"line":17488},[58,38410,33519],{"class":75},[58,38412,38413],{"class":60,"line":17493},[58,38414,35235],{"class":64},[58,38416,38417,38419,38421],{"class":60,"line":17498},[58,38418,33304],{"class":75},[58,38420,383],{"class":92},[58,38422,33309],{"class":75},[58,38424,38425],{"class":60,"line":17512},[58,38426,35248],{"class":64},[58,38428,38429,38431,38433,38435,38437,38439,38441],{"class":60,"line":17524},[58,38430,33321],{"class":75},[58,38432,383],{"class":92},[58,38434,33326],{"class":75},[58,38436,33329],{"class":5862},[58,38438,383],{"class":92},[58,38440,89],{"class":82},[58,38442,799],{"class":75},[58,38444,38445],{"class":60,"line":17529},[58,38446,35269],{"class":64},[58,38448,38449,38451,38453],{"class":60,"line":17542},[58,38450,35274],{"class":75},[58,38452,383],{"class":92},[58,38454,35279],{"class":75},[58,38456,38457,38459,38461],{"class":60,"line":17547},[58,38458,35284],{"class":75},[58,38460,383],{"class":92},[58,38462,35289],{"class":75},[58,38464,38465,38467,38469,38471,38473,38475,38477,38479],{"class":60,"line":17552},[58,38466,35294],{"class":82},[58,38468,793],{"class":75},[58,38470,35299],{"class":386},[58,38472,35302],{"class":75},[58,38474,35305],{"class":386},[58,38476,1164],{"class":75},[58,38478,35310],{"class":386},[58,38480,35313],{"class":75},[114,38482,38484],{"id":38483},"_22vgg","2.2.VGG",[22641,38486,38488],{"id":38487},"_221原理","2.2.1.原理",[175,38490,38491],{},[119,38492],{"alt":53,"src":38493},"\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",[175,38495,38496],{},[119,38497],{"alt":53,"src":38498},"\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",[175,38500,38501],{},[119,38502],{"alt":53,"src":38503},"\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",[175,38505,38506],{},"参数详细描述：",[175,38508,38509],{},[119,38510],{"alt":53,"src":38511},"\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",[175,38513,38514],{},[119,38515],{"alt":53,"src":38516},"\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",[175,38518,38519],{},[119,38520],{"alt":53,"src":38521},"\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",[175,38523,38524],{},[119,38525],{"alt":53,"src":38526},"\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",[175,38528,38529],{},[119,38530],{"alt":53,"src":38531},"\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",[22641,38533,38535],{"id":38534},"_222代码实现","2.2.2.代码实现",[19,38537,38538],{},[22,38539,38540],{},"网络搭建",[48,38542,38544],{"className":31022,"code":38543,"language":31024,"meta":53,"style":53},"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",[55,38545,38546,38552,38564,38574,38584,38588,38605,38613,38632,38637,38642,38654,38692,38697,38733,38737,38766,38771,38776,38787,38823,38827,38863,38867,38895,38899,38904,38915,38951,38955,38991,38995,39031,39035,39063,39067,39072,39083,39120,39124,39160,39164,39200,39204,39232,39236,39241,39252,39288,39292,39328,39332,39368,39372,39400,39404,39409,39420,39425,39430,39435,39456,39460,39472,39476,39488,39492,39496,39501,39506,39521,39526,39536,39541,39556,39561,39580,39585,39594,39599,39609,39614,39619,39633,39638,39652,39660,39664,39668,39676,39687,39698,39709,39720,39731,39742,39748,39752,39757,39770,39790,39796,39805],{"__ignoreMap":53},[58,38547,38548,38550],{"class":60,"line":61},[58,38549,31036],{"class":92},[58,38551,31039],{"class":75},[58,38553,38554,38556,38559,38561],{"class":60,"line":68},[58,38555,31381],{"class":92},[58,38557,38558],{"class":75}," sympy.core.sympify ",[58,38560,31036],{"class":92},[58,38562,38563],{"class":75}," kernS\n",[58,38565,38566,38568,38570,38572],{"class":60,"line":79},[58,38567,31381],{"class":92},[58,38569,31384],{"class":75},[58,38571,31036],{"class":92},[58,38573,31389],{"class":75},[58,38575,38576,38578,38580,38582],{"class":60,"line":105},[58,38577,31381],{"class":92},[58,38579,31401],{"class":75},[58,38581,31036],{"class":92},[58,38583,31406],{"class":75},[58,38585,38586],{"class":60,"line":627},[58,38587,3046],{"emptyLinePlaceholder":720},[58,38589,38590,38592,38595,38597,38599,38601,38603],{"class":60,"line":509},[58,38591,15338],{"class":92},[58,38593,38594],{"class":379}," VGG16",[58,38596,793],{"class":75},[58,38598,31422],{"class":379},[58,38600,1344],{"class":75},[58,38602,31427],{"class":379},[58,38604,31430],{"class":75},[58,38606,38607,38609,38611],{"class":60,"line":559},[58,38608,31445],{"class":92},[58,38610,31448],{"class":82},[58,38612,31451],{"class":75},[58,38614,38615,38617,38619,38622,38624,38626,38628,38630],{"class":60,"line":654},[58,38616,31461],{"class":82},[58,38618,793],{"class":75},[58,38620,38621],{"class":82},"VGG16",[58,38623,469],{"class":75},[58,38625,31467],{"class":82},[58,38627,31470],{"class":75},[58,38629,31473],{"class":82},[58,38631,2622],{"class":75},[58,38633,38634],{"class":60,"line":671},[58,38635,38636],{"class":64},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[58,38638,38639],{"class":60,"line":677},[58,38640,38641],{"class":64},"        # 这里用的是灰度图\n",[58,38643,38644,38646,38649,38651],{"class":60,"line":2260},[58,38645,31489],{"class":82},[58,38647,38648],{"class":75},".block1",[58,38650,383],{"class":92},[58,38652,38653],{"class":75},"nn.Sequential(\n",[58,38655,38656,38659,38661,38663,38665,38667,38669,38671,38673,38675,38677,38679,38681,38683,38685,38687,38689],{"class":60,"line":694},[58,38657,38658],{"class":75},"            nn.Conv2d(",[58,38660,31500],{"class":5862},[58,38662,383],{"class":92},[58,38664,89],{"class":82},[58,38666,1164],{"class":75},[58,38668,31509],{"class":5862},[58,38670,383],{"class":92},[58,38672,991],{"class":82},[58,38674,1164],{"class":75},[58,38676,31518],{"class":5862},[58,38678,383],{"class":92},[58,38680,861],{"class":82},[58,38682,1164],{"class":75},[58,38684,31527],{"class":5862},[58,38686,383],{"class":92},[58,38688,89],{"class":82},[58,38690,38691],{"class":75},"),\n",[58,38693,38694],{"class":60,"line":2270},[58,38695,38696],{"class":75},"            nn.ReLU(),\n",[58,38698,38699,38701,38703,38705,38707,38709,38711,38713,38715,38717,38719,38721,38723,38725,38727,38729,38731],{"class":60,"line":2275},[58,38700,38658],{"class":75},[58,38702,31500],{"class":5862},[58,38704,383],{"class":92},[58,38706,991],{"class":82},[58,38708,1164],{"class":75},[58,38710,31509],{"class":5862},[58,38712,383],{"class":92},[58,38714,991],{"class":82},[58,38716,1164],{"class":75},[58,38718,31518],{"class":5862},[58,38720,383],{"class":92},[58,38722,861],{"class":82},[58,38724,1164],{"class":75},[58,38726,31527],{"class":5862},[58,38728,383],{"class":92},[58,38730,89],{"class":82},[58,38732,38691],{"class":75},[58,38734,38735],{"class":60,"line":2289},[58,38736,38696],{"class":75},[58,38738,38739,38742,38744,38746,38748,38750,38752,38754,38756,38758,38760,38762,38764],{"class":60,"line":2294},[58,38740,38741],{"class":75},"            nn.MaxPool2d(",[58,38743,31518],{"class":5862},[58,38745,383],{"class":92},[58,38747,867],{"class":82},[58,38749,1164],{"class":75},[58,38751,31573],{"class":5862},[58,38753,383],{"class":92},[58,38755,867],{"class":82},[58,38757,1164],{"class":75},[58,38759,31527],{"class":5862},[58,38761,383],{"class":92},[58,38763,979],{"class":82},[58,38765,799],{"class":75},[58,38767,38768],{"class":60,"line":2300},[58,38769,38770],{"class":75},"        )\n",[58,38772,38773],{"class":60,"line":2321},[58,38774,38775],{"class":64},"        # 第二层\n",[58,38777,38778,38780,38783,38785],{"class":60,"line":2326},[58,38779,31489],{"class":82},[58,38781,38782],{"class":75},".block2",[58,38784,383],{"class":92},[58,38786,38653],{"class":75},[58,38788,38789,38791,38793,38795,38797,38799,38801,38803,38805,38807,38809,38811,38813,38815,38817,38819,38821],{"class":60,"line":2340},[58,38790,38658],{"class":75},[58,38792,31500],{"class":5862},[58,38794,383],{"class":92},[58,38796,991],{"class":82},[58,38798,1164],{"class":75},[58,38800,31509],{"class":5862},[58,38802,383],{"class":92},[58,38804,32714],{"class":82},[58,38806,1164],{"class":75},[58,38808,31518],{"class":5862},[58,38810,383],{"class":92},[58,38812,861],{"class":82},[58,38814,1164],{"class":75},[58,38816,31527],{"class":5862},[58,38818,383],{"class":92},[58,38820,89],{"class":82},[58,38822,38691],{"class":75},[58,38824,38825],{"class":60,"line":2345},[58,38826,38696],{"class":75},[58,38828,38829,38831,38833,38835,38837,38839,38841,38843,38845,38847,38849,38851,38853,38855,38857,38859,38861],{"class":60,"line":2374},[58,38830,38658],{"class":75},[58,38832,31500],{"class":5862},[58,38834,383],{"class":92},[58,38836,32714],{"class":82},[58,38838,1164],{"class":75},[58,38840,31509],{"class":5862},[58,38842,383],{"class":92},[58,38844,32714],{"class":82},[58,38846,1164],{"class":75},[58,38848,31518],{"class":5862},[58,38850,383],{"class":92},[58,38852,861],{"class":82},[58,38854,1164],{"class":75},[58,38856,31527],{"class":5862},[58,38858,383],{"class":92},[58,38860,89],{"class":82},[58,38862,38691],{"class":75},[58,38864,38865],{"class":60,"line":2379},[58,38866,38696],{"class":75},[58,38868,38869,38871,38873,38875,38877,38879,38881,38883,38885,38887,38889,38891,38893],{"class":60,"line":2396},[58,38870,38741],{"class":75},[58,38872,31518],{"class":5862},[58,38874,383],{"class":92},[58,38876,867],{"class":82},[58,38878,1164],{"class":75},[58,38880,31573],{"class":5862},[58,38882,383],{"class":92},[58,38884,867],{"class":82},[58,38886,1164],{"class":75},[58,38888,31527],{"class":5862},[58,38890,383],{"class":92},[58,38892,979],{"class":82},[58,38894,799],{"class":75},[58,38896,38897],{"class":60,"line":2401},[58,38898,38770],{"class":75},[58,38900,38901],{"class":60,"line":2406},[58,38902,38903],{"class":64},"        # 第三层\n",[58,38905,38906,38908,38911,38913],{"class":60,"line":2411},[58,38907,31489],{"class":82},[58,38909,38910],{"class":75},".block3",[58,38912,383],{"class":92},[58,38914,38653],{"class":75},[58,38916,38917,38919,38921,38923,38925,38927,38929,38931,38933,38935,38937,38939,38941,38943,38945,38947,38949],{"class":60,"line":2425},[58,38918,38658],{"class":75},[58,38920,31500],{"class":5862},[58,38922,383],{"class":92},[58,38924,32714],{"class":82},[58,38926,1164],{"class":75},[58,38928,31509],{"class":5862},[58,38930,383],{"class":92},[58,38932,35514],{"class":82},[58,38934,1164],{"class":75},[58,38936,31518],{"class":5862},[58,38938,383],{"class":92},[58,38940,861],{"class":82},[58,38942,1164],{"class":75},[58,38944,31527],{"class":5862},[58,38946,383],{"class":92},[58,38948,89],{"class":82},[58,38950,38691],{"class":75},[58,38952,38953],{"class":60,"line":2430},[58,38954,38696],{"class":75},[58,38956,38957,38959,38961,38963,38965,38967,38969,38971,38973,38975,38977,38979,38981,38983,38985,38987,38989],{"class":60,"line":3223},[58,38958,38658],{"class":75},[58,38960,31500],{"class":5862},[58,38962,383],{"class":92},[58,38964,35514],{"class":82},[58,38966,1164],{"class":75},[58,38968,31509],{"class":5862},[58,38970,383],{"class":92},[58,38972,35514],{"class":82},[58,38974,1164],{"class":75},[58,38976,31518],{"class":5862},[58,38978,383],{"class":92},[58,38980,861],{"class":82},[58,38982,1164],{"class":75},[58,38984,31527],{"class":5862},[58,38986,383],{"class":92},[58,38988,89],{"class":82},[58,38990,38691],{"class":75},[58,38992,38993],{"class":60,"line":3237},[58,38994,38696],{"class":75},[58,38996,38997,38999,39001,39003,39005,39007,39009,39011,39013,39015,39017,39019,39021,39023,39025,39027,39029],{"class":60,"line":3245},[58,38998,38658],{"class":75},[58,39000,31500],{"class":5862},[58,39002,383],{"class":92},[58,39004,35514],{"class":82},[58,39006,1164],{"class":75},[58,39008,31509],{"class":5862},[58,39010,383],{"class":92},[58,39012,35514],{"class":82},[58,39014,1164],{"class":75},[58,39016,31518],{"class":5862},[58,39018,383],{"class":92},[58,39020,861],{"class":82},[58,39022,1164],{"class":75},[58,39024,31527],{"class":5862},[58,39026,383],{"class":92},[58,39028,89],{"class":82},[58,39030,38691],{"class":75},[58,39032,39033],{"class":60,"line":3250},[58,39034,38696],{"class":75},[58,39036,39037,39039,39041,39043,39045,39047,39049,39051,39053,39055,39057,39059,39061],{"class":60,"line":3256},[58,39038,38741],{"class":75},[58,39040,31518],{"class":5862},[58,39042,383],{"class":92},[58,39044,867],{"class":82},[58,39046,1164],{"class":75},[58,39048,31573],{"class":5862},[58,39050,383],{"class":92},[58,39052,867],{"class":82},[58,39054,1164],{"class":75},[58,39056,31527],{"class":5862},[58,39058,383],{"class":92},[58,39060,979],{"class":82},[58,39062,799],{"class":75},[58,39064,39065],{"class":60,"line":3262},[58,39066,38770],{"class":75},[58,39068,39069],{"class":60,"line":3267},[58,39070,39071],{"class":64},"        # 第四层\n",[58,39073,39074,39076,39079,39081],{"class":60,"line":8594},[58,39075,31489],{"class":82},[58,39077,39078],{"class":75},".block4",[58,39080,383],{"class":92},[58,39082,38653],{"class":75},[58,39084,39085,39087,39089,39091,39093,39095,39097,39099,39102,39104,39106,39108,39110,39112,39114,39116,39118],{"class":60,"line":8618},[58,39086,38658],{"class":75},[58,39088,31500],{"class":5862},[58,39090,383],{"class":92},[58,39092,35514],{"class":82},[58,39094,1164],{"class":75},[58,39096,31509],{"class":5862},[58,39098,383],{"class":92},[58,39100,39101],{"class":82},"512",[58,39103,1164],{"class":75},[58,39105,31518],{"class":5862},[58,39107,383],{"class":92},[58,39109,861],{"class":82},[58,39111,1164],{"class":75},[58,39113,31527],{"class":5862},[58,39115,383],{"class":92},[58,39117,89],{"class":82},[58,39119,38691],{"class":75},[58,39121,39122],{"class":60,"line":8623},[58,39123,38696],{"class":75},[58,39125,39126,39128,39130,39132,39134,39136,39138,39140,39142,39144,39146,39148,39150,39152,39154,39156,39158],{"class":60,"line":8629},[58,39127,38658],{"class":75},[58,39129,31500],{"class":5862},[58,39131,383],{"class":92},[58,39133,39101],{"class":82},[58,39135,1164],{"class":75},[58,39137,31509],{"class":5862},[58,39139,383],{"class":92},[58,39141,39101],{"class":82},[58,39143,1164],{"class":75},[58,39145,31518],{"class":5862},[58,39147,383],{"class":92},[58,39149,861],{"class":82},[58,39151,1164],{"class":75},[58,39153,31527],{"class":5862},[58,39155,383],{"class":92},[58,39157,89],{"class":82},[58,39159,38691],{"class":75},[58,39161,39162],{"class":60,"line":8656},[58,39163,38696],{"class":75},[58,39165,39166,39168,39170,39172,39174,39176,39178,39180,39182,39184,39186,39188,39190,39192,39194,39196,39198],{"class":60,"line":8661},[58,39167,38658],{"class":75},[58,39169,31500],{"class":5862},[58,39171,383],{"class":92},[58,39173,39101],{"class":82},[58,39175,1164],{"class":75},[58,39177,31509],{"class":5862},[58,39179,383],{"class":92},[58,39181,39101],{"class":82},[58,39183,1164],{"class":75},[58,39185,31518],{"class":5862},[58,39187,383],{"class":92},[58,39189,861],{"class":82},[58,39191,1164],{"class":75},[58,39193,31527],{"class":5862},[58,39195,383],{"class":92},[58,39197,89],{"class":82},[58,39199,38691],{"class":75},[58,39201,39202],{"class":60,"line":8667},[58,39203,38696],{"class":75},[58,39205,39206,39208,39210,39212,39214,39216,39218,39220,39222,39224,39226,39228,39230],{"class":60,"line":8679},[58,39207,38741],{"class":75},[58,39209,31518],{"class":5862},[58,39211,383],{"class":92},[58,39213,867],{"class":82},[58,39215,1164],{"class":75},[58,39217,31573],{"class":5862},[58,39219,383],{"class":92},[58,39221,867],{"class":82},[58,39223,1164],{"class":75},[58,39225,31527],{"class":5862},[58,39227,383],{"class":92},[58,39229,979],{"class":82},[58,39231,799],{"class":75},[58,39233,39234],{"class":60,"line":8691},[58,39235,38770],{"class":75},[58,39237,39238],{"class":60,"line":8703},[58,39239,39240],{"class":64},"        # 第五层\n",[58,39242,39243,39245,39248,39250],{"class":60,"line":10361},[58,39244,31489],{"class":82},[58,39246,39247],{"class":75},".block5",[58,39249,383],{"class":92},[58,39251,38653],{"class":75},[58,39253,39254,39256,39258,39260,39262,39264,39266,39268,39270,39272,39274,39276,39278,39280,39282,39284,39286],{"class":60,"line":10386},[58,39255,38658],{"class":75},[58,39257,31500],{"class":5862},[58,39259,383],{"class":92},[58,39261,39101],{"class":82},[58,39263,1164],{"class":75},[58,39265,31509],{"class":5862},[58,39267,383],{"class":92},[58,39269,39101],{"class":82},[58,39271,1164],{"class":75},[58,39273,31518],{"class":5862},[58,39275,383],{"class":92},[58,39277,861],{"class":82},[58,39279,1164],{"class":75},[58,39281,31527],{"class":5862},[58,39283,383],{"class":92},[58,39285,89],{"class":82},[58,39287,38691],{"class":75},[58,39289,39290],{"class":60,"line":10409},[58,39291,38696],{"class":75},[58,39293,39294,39296,39298,39300,39302,39304,39306,39308,39310,39312,39314,39316,39318,39320,39322,39324,39326],{"class":60,"line":10433},[58,39295,38658],{"class":75},[58,39297,31500],{"class":5862},[58,39299,383],{"class":92},[58,39301,39101],{"class":82},[58,39303,1164],{"class":75},[58,39305,31509],{"class":5862},[58,39307,383],{"class":92},[58,39309,39101],{"class":82},[58,39311,1164],{"class":75},[58,39313,31518],{"class":5862},[58,39315,383],{"class":92},[58,39317,861],{"class":82},[58,39319,1164],{"class":75},[58,39321,31527],{"class":5862},[58,39323,383],{"class":92},[58,39325,89],{"class":82},[58,39327,38691],{"class":75},[58,39329,39330],{"class":60,"line":10438},[58,39331,38696],{"class":75},[58,39333,39334,39336,39338,39340,39342,39344,39346,39348,39350,39352,39354,39356,39358,39360,39362,39364,39366],{"class":60,"line":10443},[58,39335,38658],{"class":75},[58,39337,31500],{"class":5862},[58,39339,383],{"class":92},[58,39341,39101],{"class":82},[58,39343,1164],{"class":75},[58,39345,31509],{"class":5862},[58,39347,383],{"class":92},[58,39349,39101],{"class":82},[58,39351,1164],{"class":75},[58,39353,31518],{"class":5862},[58,39355,383],{"class":92},[58,39357,861],{"class":82},[58,39359,1164],{"class":75},[58,39361,31527],{"class":5862},[58,39363,383],{"class":92},[58,39365,89],{"class":82},[58,39367,38691],{"class":75},[58,39369,39370],{"class":60,"line":10448},[58,39371,38696],{"class":75},[58,39373,39374,39376,39378,39380,39382,39384,39386,39388,39390,39392,39394,39396,39398],{"class":60,"line":10457},[58,39375,38741],{"class":75},[58,39377,31518],{"class":5862},[58,39379,383],{"class":92},[58,39381,867],{"class":82},[58,39383,1164],{"class":75},[58,39385,31573],{"class":5862},[58,39387,383],{"class":92},[58,39389,867],{"class":82},[58,39391,1164],{"class":75},[58,39393,31527],{"class":5862},[58,39395,383],{"class":92},[58,39397,979],{"class":82},[58,39399,799],{"class":75},[58,39401,39402],{"class":60,"line":10462},[58,39403,38770],{"class":75},[58,39405,39406],{"class":60,"line":10468},[58,39407,39408],{"class":64},"        # 全连接层\n",[58,39410,39411,39413,39416,39418],{"class":60,"line":10489},[58,39412,31489],{"class":82},[58,39414,39415],{"class":75},".block6",[58,39417,383],{"class":92},[58,39419,38653],{"class":75},[58,39421,39422],{"class":60,"line":10495},[58,39423,39424],{"class":64},"            # 平展操作\n",[58,39426,39427],{"class":60,"line":10509},[58,39428,39429],{"class":64},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[58,39431,39432],{"class":60,"line":10515},[58,39433,39434],{"class":75},"            nn.Flatten(),\n",[58,39436,39437,39440,39442,39444,39446,39448,39450,39452,39454],{"class":60,"line":10542},[58,39438,39439],{"class":75},"            nn.Linear(",[58,39441,1155],{"class":82},[58,39443,1241],{"class":92},[58,39445,1155],{"class":82},[58,39447,1241],{"class":92},[58,39449,39101],{"class":82},[58,39451,1164],{"class":75},[58,39453,35514],{"class":82},[58,39455,38691],{"class":75},[58,39457,39458],{"class":60,"line":10551},[58,39459,38696],{"class":75},[58,39461,39462,39464,39466,39468,39470],{"class":60,"line":10557},[58,39463,39439],{"class":75},[58,39465,35514],{"class":82},[58,39467,1164],{"class":75},[58,39469,32714],{"class":82},[58,39471,38691],{"class":75},[58,39473,39474],{"class":60,"line":10565},[58,39475,38696],{"class":75},[58,39477,39478,39480,39482,39484,39486],{"class":60,"line":10570},[58,39479,39439],{"class":75},[58,39481,32714],{"class":82},[58,39483,1164],{"class":75},[58,39485,1232],{"class":82},[58,39487,799],{"class":75},[58,39489,39490],{"class":60,"line":17247},[58,39491,38770],{"class":75},[58,39493,39494],{"class":60,"line":17253},[58,39495,3046],{"emptyLinePlaceholder":720},[58,39497,39498],{"class":60,"line":17276},[58,39499,39500],{"class":64},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[58,39502,39503],{"class":60,"line":17282},[58,39504,39505],{"class":64},"        # 循环遍历模型\n",[58,39507,39508,39510,39513,39515,39518],{"class":60,"line":17305},[58,39509,4049],{"class":92},[58,39511,39512],{"class":75}," m ",[58,39514,26687],{"class":92},[58,39516,39517],{"class":82}," self",[58,39519,39520],{"class":75},".modules():\n",[58,39522,39523],{"class":60,"line":17319},[58,39524,39525],{"class":64},"            # print(m)\n",[58,39527,39528,39530,39533],{"class":60,"line":17339},[58,39529,5288],{"class":92},[58,39531,39532],{"class":82}," isinstance",[58,39534,39535],{"class":75},"(m,nn.Conv2d):\n",[58,39537,39538],{"class":60,"line":17345},[58,39539,39540],{"class":64},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[58,39542,39543,39546,39549,39551,39554],{"class":60,"line":17356},[58,39544,39545],{"class":75},"                nn.init.kaiming_normal_(m.weight,",[58,39547,39548],{"class":5862},"nonlinearity",[58,39550,383],{"class":92},[58,39552,39553],{"class":386},"'relu'",[58,39555,799],{"class":75},[58,39557,39558],{"class":60,"line":17379},[58,39559,39560],{"class":64},"                # 判断b参数是否存在\n",[58,39562,39563,39566,39569,39572,39575,39578],{"class":60,"line":17401},[58,39564,39565],{"class":92},"                if",[58,39567,39568],{"class":75}," m.bias ",[58,39570,39571],{"class":92},"is",[58,39573,39574],{"class":92}," not",[58,39576,39577],{"class":82}," None",[58,39579,4385],{"class":75},[58,39581,39582],{"class":60,"line":17406},[58,39583,39584],{"class":64},"                    # 如果参数不存在的化初始化b=0\n",[58,39586,39587,39590,39592],{"class":60,"line":17412},[58,39588,39589],{"class":75},"                    nn.init.constant_(m.bias,",[58,39591,979],{"class":82},[58,39593,799],{"class":75},[58,39595,39596],{"class":60,"line":17426},[58,39597,39598],{"class":64},"            # 全连接层初始化\n",[58,39600,39601,39604,39606],{"class":60,"line":17439},[58,39602,39603],{"class":92},"            elif",[58,39605,39532],{"class":82},[58,39607,39608],{"class":75},"(m,nn.Linear):\n",[58,39610,39611],{"class":60,"line":17444},[58,39612,39613],{"class":64},"                # 这个初始化方法是利用的是正太分布的方式\n",[58,39615,39616],{"class":60,"line":17458},[58,39617,39618],{"class":64},"                # 均值为0，方差为0.01\n",[58,39620,39621,39624,39626,39628,39631],{"class":60,"line":17463},[58,39622,39623],{"class":75},"                nn.init.normal_(m.weight,",[58,39625,979],{"class":82},[58,39627,1164],{"class":75},[58,39629,39630],{"class":82},"0.01",[58,39632,799],{"class":75},[58,39634,39635],{"class":60,"line":17469},[58,39636,39637],{"class":64},"                # 初始化b参数\n",[58,39639,39640,39642,39644,39646,39648,39650],{"class":60,"line":17474},[58,39641,39565],{"class":92},[58,39643,39568],{"class":75},[58,39645,39571],{"class":92},[58,39647,39574],{"class":92},[58,39649,39577],{"class":82},[58,39651,4385],{"class":75},[58,39653,39654,39656,39658],{"class":60,"line":17488},[58,39655,39589],{"class":75},[58,39657,979],{"class":82},[58,39659,799],{"class":75},[58,39661,39662],{"class":60,"line":17493},[58,39663,3046],{"emptyLinePlaceholder":720},[58,39665,39666],{"class":60,"line":17498},[58,39667,35809],{"class":64},[58,39669,39670,39672,39674],{"class":60,"line":17512},[58,39671,31445],{"class":92},[58,39673,31737],{"class":379},[58,39675,31740],{"class":75},[58,39677,39678,39680,39682,39684],{"class":60,"line":17524},[58,39679,31745],{"class":75},[58,39681,383],{"class":92},[58,39683,31467],{"class":82},[58,39685,39686],{"class":75},".block1(x)\n",[58,39688,39689,39691,39693,39695],{"class":60,"line":17529},[58,39690,31745],{"class":75},[58,39692,383],{"class":92},[58,39694,31467],{"class":82},[58,39696,39697],{"class":75},".block2(x)\n",[58,39699,39700,39702,39704,39706],{"class":60,"line":17542},[58,39701,31745],{"class":75},[58,39703,383],{"class":92},[58,39705,31467],{"class":82},[58,39707,39708],{"class":75},".block3(x)\n",[58,39710,39711,39713,39715,39717],{"class":60,"line":17547},[58,39712,31745],{"class":75},[58,39714,383],{"class":92},[58,39716,31467],{"class":82},[58,39718,39719],{"class":75},".block4(x)\n",[58,39721,39722,39724,39726,39728],{"class":60,"line":17552},[58,39723,31745],{"class":75},[58,39725,383],{"class":92},[58,39727,31467],{"class":82},[58,39729,39730],{"class":75},".block5(x)\n",[58,39732,39733,39735,39737,39739],{"class":60,"line":17557},[58,39734,31745],{"class":75},[58,39736,383],{"class":92},[58,39738,31467],{"class":82},[58,39740,39741],{"class":75},".block6(x)\n",[58,39743,39744,39746],{"class":60,"line":17570},[58,39745,15396],{"class":92},[58,39747,31853],{"class":75},[58,39749,39750],{"class":60,"line":17575},[58,39751,3046],{"emptyLinePlaceholder":720},[58,39753,39754],{"class":60,"line":33277},[58,39755,39756],{"class":64},"# 验证模型\n",[58,39758,39759,39761,39763,39765,39768],{"class":60,"line":33283},[58,39760,2180],{"class":92},[58,39762,31864],{"class":82},[58,39764,3595],{"class":92},[58,39766,39767],{"class":386},"'__main__'",[58,39769,4385],{"class":75},[58,39771,39772,39774,39776,39778,39780,39782,39784,39786,39788],{"class":60,"line":33289},[58,39773,31881],{"class":75},[58,39775,383],{"class":92},[58,39777,31095],{"class":75},[58,39779,31888],{"class":386},[58,39781,2351],{"class":92},[58,39783,31893],{"class":75},[58,39785,2348],{"class":92},[58,39787,31120],{"class":386},[58,39789,799],{"class":75},[58,39791,39792,39794],{"class":60,"line":33295},[58,39793,31943],{"class":82},[58,39795,31129],{"class":75},[58,39797,39798,39800,39802],{"class":60,"line":33301},[58,39799,31933],{"class":75},[58,39801,383],{"class":92},[58,39803,39804],{"class":75},"VGG16().to(device)\n",[58,39806,39807,39809,39811,39813,39815,39817,39819,39821],{"class":60,"line":33312},[58,39808,31943],{"class":82},[58,39810,31946],{"class":75},[58,39812,89],{"class":82},[58,39814,1164],{"class":75},[58,39816,32145],{"class":82},[58,39818,1164],{"class":75},[58,39820,32145],{"class":82},[58,39822,31959],{"class":75},[19,39824,39825],{"start":68},[22,39826,39827],{},"训练代码",[175,39829,39830],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[175,39832,39833],{},"解决方式:",[175,39835,39836],{},"①权重初始化",[48,39838,39840],{"className":31022,"code":39839,"language":31024,"meta":53,"style":53},"# 权重初始化,保证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",[55,39841,39842,39847,39852,39864,39869,39877,39882,39895,39900,39914,39919,39928,39933,39942,39947,39952,39965,39970,39984],{"__ignoreMap":53},[58,39843,39844],{"class":60,"line":61},[58,39845,39846],{"class":64},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[58,39848,39849],{"class":60,"line":68},[58,39850,39851],{"class":64},"# 循环遍历模型\n",[58,39853,39854,39856,39858,39860,39862],{"class":60,"line":79},[58,39855,3671],{"class":92},[58,39857,39512],{"class":75},[58,39859,26687],{"class":92},[58,39861,39517],{"class":82},[58,39863,39520],{"class":75},[58,39865,39866],{"class":60,"line":105},[58,39867,39868],{"class":64},"    # print(m)\n",[58,39870,39871,39873,39875],{"class":60,"line":627},[58,39872,3747],{"class":92},[58,39874,39532],{"class":82},[58,39876,39535],{"class":75},[58,39878,39879],{"class":60,"line":509},[58,39880,39881],{"class":64},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[58,39883,39884,39887,39889,39891,39893],{"class":60,"line":559},[58,39885,39886],{"class":75},"        nn.init.kaiming_normal_(m.weight,",[58,39888,39548],{"class":5862},[58,39890,383],{"class":92},[58,39892,39553],{"class":386},[58,39894,799],{"class":75},[58,39896,39897],{"class":60,"line":654},[58,39898,39899],{"class":64},"        # 判断b参数是否存在\n",[58,39901,39902,39904,39906,39908,39910,39912],{"class":60,"line":671},[58,39903,3143],{"class":92},[58,39905,39568],{"class":75},[58,39907,39571],{"class":92},[58,39909,39574],{"class":92},[58,39911,39577],{"class":82},[58,39913,4385],{"class":75},[58,39915,39916],{"class":60,"line":677},[58,39917,39918],{"class":64},"            # 如果参数不存在的化初始化b=0\n",[58,39920,39921,39924,39926],{"class":60,"line":2260},[58,39922,39923],{"class":75},"            nn.init.constant_(m.bias,",[58,39925,979],{"class":82},[58,39927,799],{"class":75},[58,39929,39930],{"class":60,"line":694},[58,39931,39932],{"class":64},"    # 全连接层初始化\n",[58,39934,39935,39938,39940],{"class":60,"line":2270},[58,39936,39937],{"class":92},"    elif",[58,39939,39532],{"class":82},[58,39941,39608],{"class":75},[58,39943,39944],{"class":60,"line":2275},[58,39945,39946],{"class":64},"        # 这个初始化方法是利用的是正太分布的方式\n",[58,39948,39949],{"class":60,"line":2289},[58,39950,39951],{"class":64},"        # 均值为0，方差为0.01\n",[58,39953,39954,39957,39959,39961,39963],{"class":60,"line":2294},[58,39955,39956],{"class":75},"        nn.init.normal_(m.weight,",[58,39958,979],{"class":82},[58,39960,1164],{"class":75},[58,39962,39630],{"class":82},[58,39964,799],{"class":75},[58,39966,39967],{"class":60,"line":2300},[58,39968,39969],{"class":64},"        # 初始化b参数\n",[58,39971,39972,39974,39976,39978,39980,39982],{"class":60,"line":2321},[58,39973,3143],{"class":92},[58,39975,39568],{"class":75},[58,39977,39571],{"class":92},[58,39979,39574],{"class":92},[58,39981,39577],{"class":82},[58,39983,4385],{"class":75},[58,39985,39986,39988,39990],{"class":60,"line":2326},[58,39987,39923],{"class":75},[58,39989,979],{"class":82},[58,39991,799],{"class":75},[175,39993,39994],{},"②尽可能地增加批次",[175,39996,39997],{},"训练完整代码：",[48,39999,40000],{"className":31022,"code":38543,"language":31024,"meta":53,"style":53},[55,40001,40002,40008,40018,40028,40038,40042,40058,40066,40084,40088,40092,40102,40138,40142,40178,40182,40210,40214,40218,40228,40264,40268,40304,40308,40336,40340,40344,40354,40390,40394,40430,40434,40470,40474,40502,40506,40510,40520,40556,40560,40596,40600,40636,40640,40668,40672,40676,40686,40722,40726,40762,40766,40802,40806,40834,40838,40842,40852,40856,40860,40864,40884,40888,40900,40904,40916,40920,40924,40928,40932,40944,40948,40956,40960,40972,40976,40990,40994,41002,41006,41014,41018,41022,41034,41038,41052,41060,41064,41068,41076,41086,41096,41106,41116,41126,41136,41142,41146,41150,41162,41182,41188,41196],{"__ignoreMap":53},[58,40003,40004,40006],{"class":60,"line":61},[58,40005,31036],{"class":92},[58,40007,31039],{"class":75},[58,40009,40010,40012,40014,40016],{"class":60,"line":68},[58,40011,31381],{"class":92},[58,40013,38558],{"class":75},[58,40015,31036],{"class":92},[58,40017,38563],{"class":75},[58,40019,40020,40022,40024,40026],{"class":60,"line":79},[58,40021,31381],{"class":92},[58,40023,31384],{"class":75},[58,40025,31036],{"class":92},[58,40027,31389],{"class":75},[58,40029,40030,40032,40034,40036],{"class":60,"line":105},[58,40031,31381],{"class":92},[58,40033,31401],{"class":75},[58,40035,31036],{"class":92},[58,40037,31406],{"class":75},[58,40039,40040],{"class":60,"line":627},[58,40041,3046],{"emptyLinePlaceholder":720},[58,40043,40044,40046,40048,40050,40052,40054,40056],{"class":60,"line":509},[58,40045,15338],{"class":92},[58,40047,38594],{"class":379},[58,40049,793],{"class":75},[58,40051,31422],{"class":379},[58,40053,1344],{"class":75},[58,40055,31427],{"class":379},[58,40057,31430],{"class":75},[58,40059,40060,40062,40064],{"class":60,"line":559},[58,40061,31445],{"class":92},[58,40063,31448],{"class":82},[58,40065,31451],{"class":75},[58,40067,40068,40070,40072,40074,40076,40078,40080,40082],{"class":60,"line":654},[58,40069,31461],{"class":82},[58,40071,793],{"class":75},[58,40073,38621],{"class":82},[58,40075,469],{"class":75},[58,40077,31467],{"class":82},[58,40079,31470],{"class":75},[58,40081,31473],{"class":82},[58,40083,2622],{"class":75},[58,40085,40086],{"class":60,"line":671},[58,40087,38636],{"class":64},[58,40089,40090],{"class":60,"line":677},[58,40091,38641],{"class":64},[58,40093,40094,40096,40098,40100],{"class":60,"line":2260},[58,40095,31489],{"class":82},[58,40097,38648],{"class":75},[58,40099,383],{"class":92},[58,40101,38653],{"class":75},[58,40103,40104,40106,40108,40110,40112,40114,40116,40118,40120,40122,40124,40126,40128,40130,40132,40134,40136],{"class":60,"line":694},[58,40105,38658],{"class":75},[58,40107,31500],{"class":5862},[58,40109,383],{"class":92},[58,40111,89],{"class":82},[58,40113,1164],{"class":75},[58,40115,31509],{"class":5862},[58,40117,383],{"class":92},[58,40119,991],{"class":82},[58,40121,1164],{"class":75},[58,40123,31518],{"class":5862},[58,40125,383],{"class":92},[58,40127,861],{"class":82},[58,40129,1164],{"class":75},[58,40131,31527],{"class":5862},[58,40133,383],{"class":92},[58,40135,89],{"class":82},[58,40137,38691],{"class":75},[58,40139,40140],{"class":60,"line":2270},[58,40141,38696],{"class":75},[58,40143,40144,40146,40148,40150,40152,40154,40156,40158,40160,40162,40164,40166,40168,40170,40172,40174,40176],{"class":60,"line":2275},[58,40145,38658],{"class":75},[58,40147,31500],{"class":5862},[58,40149,383],{"class":92},[58,40151,991],{"class":82},[58,40153,1164],{"class":75},[58,40155,31509],{"class":5862},[58,40157,383],{"class":92},[58,40159,991],{"class":82},[58,40161,1164],{"class":75},[58,40163,31518],{"class":5862},[58,40165,383],{"class":92},[58,40167,861],{"class":82},[58,40169,1164],{"class":75},[58,40171,31527],{"class":5862},[58,40173,383],{"class":92},[58,40175,89],{"class":82},[58,40177,38691],{"class":75},[58,40179,40180],{"class":60,"line":2289},[58,40181,38696],{"class":75},[58,40183,40184,40186,40188,40190,40192,40194,40196,40198,40200,40202,40204,40206,40208],{"class":60,"line":2294},[58,40185,38741],{"class":75},[58,40187,31518],{"class":5862},[58,40189,383],{"class":92},[58,40191,867],{"class":82},[58,40193,1164],{"class":75},[58,40195,31573],{"class":5862},[58,40197,383],{"class":92},[58,40199,867],{"class":82},[58,40201,1164],{"class":75},[58,40203,31527],{"class":5862},[58,40205,383],{"class":92},[58,40207,979],{"class":82},[58,40209,799],{"class":75},[58,40211,40212],{"class":60,"line":2300},[58,40213,38770],{"class":75},[58,40215,40216],{"class":60,"line":2321},[58,40217,38775],{"class":64},[58,40219,40220,40222,40224,40226],{"class":60,"line":2326},[58,40221,31489],{"class":82},[58,40223,38782],{"class":75},[58,40225,383],{"class":92},[58,40227,38653],{"class":75},[58,40229,40230,40232,40234,40236,40238,40240,40242,40244,40246,40248,40250,40252,40254,40256,40258,40260,40262],{"class":60,"line":2340},[58,40231,38658],{"class":75},[58,40233,31500],{"class":5862},[58,40235,383],{"class":92},[58,40237,991],{"class":82},[58,40239,1164],{"class":75},[58,40241,31509],{"class":5862},[58,40243,383],{"class":92},[58,40245,32714],{"class":82},[58,40247,1164],{"class":75},[58,40249,31518],{"class":5862},[58,40251,383],{"class":92},[58,40253,861],{"class":82},[58,40255,1164],{"class":75},[58,40257,31527],{"class":5862},[58,40259,383],{"class":92},[58,40261,89],{"class":82},[58,40263,38691],{"class":75},[58,40265,40266],{"class":60,"line":2345},[58,40267,38696],{"class":75},[58,40269,40270,40272,40274,40276,40278,40280,40282,40284,40286,40288,40290,40292,40294,40296,40298,40300,40302],{"class":60,"line":2374},[58,40271,38658],{"class":75},[58,40273,31500],{"class":5862},[58,40275,383],{"class":92},[58,40277,32714],{"class":82},[58,40279,1164],{"class":75},[58,40281,31509],{"class":5862},[58,40283,383],{"class":92},[58,40285,32714],{"class":82},[58,40287,1164],{"class":75},[58,40289,31518],{"class":5862},[58,40291,383],{"class":92},[58,40293,861],{"class":82},[58,40295,1164],{"class":75},[58,40297,31527],{"class":5862},[58,40299,383],{"class":92},[58,40301,89],{"class":82},[58,40303,38691],{"class":75},[58,40305,40306],{"class":60,"line":2379},[58,40307,38696],{"class":75},[58,40309,40310,40312,40314,40316,40318,40320,40322,40324,40326,40328,40330,40332,40334],{"class":60,"line":2396},[58,40311,38741],{"class":75},[58,40313,31518],{"class":5862},[58,40315,383],{"class":92},[58,40317,867],{"class":82},[58,40319,1164],{"class":75},[58,40321,31573],{"class":5862},[58,40323,383],{"class":92},[58,40325,867],{"class":82},[58,40327,1164],{"class":75},[58,40329,31527],{"class":5862},[58,40331,383],{"class":92},[58,40333,979],{"class":82},[58,40335,799],{"class":75},[58,40337,40338],{"class":60,"line":2401},[58,40339,38770],{"class":75},[58,40341,40342],{"class":60,"line":2406},[58,40343,38903],{"class":64},[58,40345,40346,40348,40350,40352],{"class":60,"line":2411},[58,40347,31489],{"class":82},[58,40349,38910],{"class":75},[58,40351,383],{"class":92},[58,40353,38653],{"class":75},[58,40355,40356,40358,40360,40362,40364,40366,40368,40370,40372,40374,40376,40378,40380,40382,40384,40386,40388],{"class":60,"line":2425},[58,40357,38658],{"class":75},[58,40359,31500],{"class":5862},[58,40361,383],{"class":92},[58,40363,32714],{"class":82},[58,40365,1164],{"class":75},[58,40367,31509],{"class":5862},[58,40369,383],{"class":92},[58,40371,35514],{"class":82},[58,40373,1164],{"class":75},[58,40375,31518],{"class":5862},[58,40377,383],{"class":92},[58,40379,861],{"class":82},[58,40381,1164],{"class":75},[58,40383,31527],{"class":5862},[58,40385,383],{"class":92},[58,40387,89],{"class":82},[58,40389,38691],{"class":75},[58,40391,40392],{"class":60,"line":2430},[58,40393,38696],{"class":75},[58,40395,40396,40398,40400,40402,40404,40406,40408,40410,40412,40414,40416,40418,40420,40422,40424,40426,40428],{"class":60,"line":3223},[58,40397,38658],{"class":75},[58,40399,31500],{"class":5862},[58,40401,383],{"class":92},[58,40403,35514],{"class":82},[58,40405,1164],{"class":75},[58,40407,31509],{"class":5862},[58,40409,383],{"class":92},[58,40411,35514],{"class":82},[58,40413,1164],{"class":75},[58,40415,31518],{"class":5862},[58,40417,383],{"class":92},[58,40419,861],{"class":82},[58,40421,1164],{"class":75},[58,40423,31527],{"class":5862},[58,40425,383],{"class":92},[58,40427,89],{"class":82},[58,40429,38691],{"class":75},[58,40431,40432],{"class":60,"line":3237},[58,40433,38696],{"class":75},[58,40435,40436,40438,40440,40442,40444,40446,40448,40450,40452,40454,40456,40458,40460,40462,40464,40466,40468],{"class":60,"line":3245},[58,40437,38658],{"class":75},[58,40439,31500],{"class":5862},[58,40441,383],{"class":92},[58,40443,35514],{"class":82},[58,40445,1164],{"class":75},[58,40447,31509],{"class":5862},[58,40449,383],{"class":92},[58,40451,35514],{"class":82},[58,40453,1164],{"class":75},[58,40455,31518],{"class":5862},[58,40457,383],{"class":92},[58,40459,861],{"class":82},[58,40461,1164],{"class":75},[58,40463,31527],{"class":5862},[58,40465,383],{"class":92},[58,40467,89],{"class":82},[58,40469,38691],{"class":75},[58,40471,40472],{"class":60,"line":3250},[58,40473,38696],{"class":75},[58,40475,40476,40478,40480,40482,40484,40486,40488,40490,40492,40494,40496,40498,40500],{"class":60,"line":3256},[58,40477,38741],{"class":75},[58,40479,31518],{"class":5862},[58,40481,383],{"class":92},[58,40483,867],{"class":82},[58,40485,1164],{"class":75},[58,40487,31573],{"class":5862},[58,40489,383],{"class":92},[58,40491,867],{"class":82},[58,40493,1164],{"class":75},[58,40495,31527],{"class":5862},[58,40497,383],{"class":92},[58,40499,979],{"class":82},[58,40501,799],{"class":75},[58,40503,40504],{"class":60,"line":3262},[58,40505,38770],{"class":75},[58,40507,40508],{"class":60,"line":3267},[58,40509,39071],{"class":64},[58,40511,40512,40514,40516,40518],{"class":60,"line":8594},[58,40513,31489],{"class":82},[58,40515,39078],{"class":75},[58,40517,383],{"class":92},[58,40519,38653],{"class":75},[58,40521,40522,40524,40526,40528,40530,40532,40534,40536,40538,40540,40542,40544,40546,40548,40550,40552,40554],{"class":60,"line":8618},[58,40523,38658],{"class":75},[58,40525,31500],{"class":5862},[58,40527,383],{"class":92},[58,40529,35514],{"class":82},[58,40531,1164],{"class":75},[58,40533,31509],{"class":5862},[58,40535,383],{"class":92},[58,40537,39101],{"class":82},[58,40539,1164],{"class":75},[58,40541,31518],{"class":5862},[58,40543,383],{"class":92},[58,40545,861],{"class":82},[58,40547,1164],{"class":75},[58,40549,31527],{"class":5862},[58,40551,383],{"class":92},[58,40553,89],{"class":82},[58,40555,38691],{"class":75},[58,40557,40558],{"class":60,"line":8623},[58,40559,38696],{"class":75},[58,40561,40562,40564,40566,40568,40570,40572,40574,40576,40578,40580,40582,40584,40586,40588,40590,40592,40594],{"class":60,"line":8629},[58,40563,38658],{"class":75},[58,40565,31500],{"class":5862},[58,40567,383],{"class":92},[58,40569,39101],{"class":82},[58,40571,1164],{"class":75},[58,40573,31509],{"class":5862},[58,40575,383],{"class":92},[58,40577,39101],{"class":82},[58,40579,1164],{"class":75},[58,40581,31518],{"class":5862},[58,40583,383],{"class":92},[58,40585,861],{"class":82},[58,40587,1164],{"class":75},[58,40589,31527],{"class":5862},[58,40591,383],{"class":92},[58,40593,89],{"class":82},[58,40595,38691],{"class":75},[58,40597,40598],{"class":60,"line":8656},[58,40599,38696],{"class":75},[58,40601,40602,40604,40606,40608,40610,40612,40614,40616,40618,40620,40622,40624,40626,40628,40630,40632,40634],{"class":60,"line":8661},[58,40603,38658],{"class":75},[58,40605,31500],{"class":5862},[58,40607,383],{"class":92},[58,40609,39101],{"class":82},[58,40611,1164],{"class":75},[58,40613,31509],{"class":5862},[58,40615,383],{"class":92},[58,40617,39101],{"class":82},[58,40619,1164],{"class":75},[58,40621,31518],{"class":5862},[58,40623,383],{"class":92},[58,40625,861],{"class":82},[58,40627,1164],{"class":75},[58,40629,31527],{"class":5862},[58,40631,383],{"class":92},[58,40633,89],{"class":82},[58,40635,38691],{"class":75},[58,40637,40638],{"class":60,"line":8667},[58,40639,38696],{"class":75},[58,40641,40642,40644,40646,40648,40650,40652,40654,40656,40658,40660,40662,40664,40666],{"class":60,"line":8679},[58,40643,38741],{"class":75},[58,40645,31518],{"class":5862},[58,40647,383],{"class":92},[58,40649,867],{"class":82},[58,40651,1164],{"class":75},[58,40653,31573],{"class":5862},[58,40655,383],{"class":92},[58,40657,867],{"class":82},[58,40659,1164],{"class":75},[58,40661,31527],{"class":5862},[58,40663,383],{"class":92},[58,40665,979],{"class":82},[58,40667,799],{"class":75},[58,40669,40670],{"class":60,"line":8691},[58,40671,38770],{"class":75},[58,40673,40674],{"class":60,"line":8703},[58,40675,39240],{"class":64},[58,40677,40678,40680,40682,40684],{"class":60,"line":10361},[58,40679,31489],{"class":82},[58,40681,39247],{"class":75},[58,40683,383],{"class":92},[58,40685,38653],{"class":75},[58,40687,40688,40690,40692,40694,40696,40698,40700,40702,40704,40706,40708,40710,40712,40714,40716,40718,40720],{"class":60,"line":10386},[58,40689,38658],{"class":75},[58,40691,31500],{"class":5862},[58,40693,383],{"class":92},[58,40695,39101],{"class":82},[58,40697,1164],{"class":75},[58,40699,31509],{"class":5862},[58,40701,383],{"class":92},[58,40703,39101],{"class":82},[58,40705,1164],{"class":75},[58,40707,31518],{"class":5862},[58,40709,383],{"class":92},[58,40711,861],{"class":82},[58,40713,1164],{"class":75},[58,40715,31527],{"class":5862},[58,40717,383],{"class":92},[58,40719,89],{"class":82},[58,40721,38691],{"class":75},[58,40723,40724],{"class":60,"line":10409},[58,40725,38696],{"class":75},[58,40727,40728,40730,40732,40734,40736,40738,40740,40742,40744,40746,40748,40750,40752,40754,40756,40758,40760],{"class":60,"line":10433},[58,40729,38658],{"class":75},[58,40731,31500],{"class":5862},[58,40733,383],{"class":92},[58,40735,39101],{"class":82},[58,40737,1164],{"class":75},[58,40739,31509],{"class":5862},[58,40741,383],{"class":92},[58,40743,39101],{"class":82},[58,40745,1164],{"class":75},[58,40747,31518],{"class":5862},[58,40749,383],{"class":92},[58,40751,861],{"class":82},[58,40753,1164],{"class":75},[58,40755,31527],{"class":5862},[58,40757,383],{"class":92},[58,40759,89],{"class":82},[58,40761,38691],{"class":75},[58,40763,40764],{"class":60,"line":10438},[58,40765,38696],{"class":75},[58,40767,40768,40770,40772,40774,40776,40778,40780,40782,40784,40786,40788,40790,40792,40794,40796,40798,40800],{"class":60,"line":10443},[58,40769,38658],{"class":75},[58,40771,31500],{"class":5862},[58,40773,383],{"class":92},[58,40775,39101],{"class":82},[58,40777,1164],{"class":75},[58,40779,31509],{"class":5862},[58,40781,383],{"class":92},[58,40783,39101],{"class":82},[58,40785,1164],{"class":75},[58,40787,31518],{"class":5862},[58,40789,383],{"class":92},[58,40791,861],{"class":82},[58,40793,1164],{"class":75},[58,40795,31527],{"class":5862},[58,40797,383],{"class":92},[58,40799,89],{"class":82},[58,40801,38691],{"class":75},[58,40803,40804],{"class":60,"line":10448},[58,40805,38696],{"class":75},[58,40807,40808,40810,40812,40814,40816,40818,40820,40822,40824,40826,40828,40830,40832],{"class":60,"line":10457},[58,40809,38741],{"class":75},[58,40811,31518],{"class":5862},[58,40813,383],{"class":92},[58,40815,867],{"class":82},[58,40817,1164],{"class":75},[58,40819,31573],{"class":5862},[58,40821,383],{"class":92},[58,40823,867],{"class":82},[58,40825,1164],{"class":75},[58,40827,31527],{"class":5862},[58,40829,383],{"class":92},[58,40831,979],{"class":82},[58,40833,799],{"class":75},[58,40835,40836],{"class":60,"line":10462},[58,40837,38770],{"class":75},[58,40839,40840],{"class":60,"line":10468},[58,40841,39408],{"class":64},[58,40843,40844,40846,40848,40850],{"class":60,"line":10489},[58,40845,31489],{"class":82},[58,40847,39415],{"class":75},[58,40849,383],{"class":92},[58,40851,38653],{"class":75},[58,40853,40854],{"class":60,"line":10495},[58,40855,39424],{"class":64},[58,40857,40858],{"class":60,"line":10509},[58,40859,39429],{"class":64},[58,40861,40862],{"class":60,"line":10515},[58,40863,39434],{"class":75},[58,40865,40866,40868,40870,40872,40874,40876,40878,40880,40882],{"class":60,"line":10542},[58,40867,39439],{"class":75},[58,40869,1155],{"class":82},[58,40871,1241],{"class":92},[58,40873,1155],{"class":82},[58,40875,1241],{"class":92},[58,40877,39101],{"class":82},[58,40879,1164],{"class":75},[58,40881,35514],{"class":82},[58,40883,38691],{"class":75},[58,40885,40886],{"class":60,"line":10551},[58,40887,38696],{"class":75},[58,40889,40890,40892,40894,40896,40898],{"class":60,"line":10557},[58,40891,39439],{"class":75},[58,40893,35514],{"class":82},[58,40895,1164],{"class":75},[58,40897,32714],{"class":82},[58,40899,38691],{"class":75},[58,40901,40902],{"class":60,"line":10565},[58,40903,38696],{"class":75},[58,40905,40906,40908,40910,40912,40914],{"class":60,"line":10570},[58,40907,39439],{"class":75},[58,40909,32714],{"class":82},[58,40911,1164],{"class":75},[58,40913,1232],{"class":82},[58,40915,799],{"class":75},[58,40917,40918],{"class":60,"line":17247},[58,40919,38770],{"class":75},[58,40921,40922],{"class":60,"line":17253},[58,40923,3046],{"emptyLinePlaceholder":720},[58,40925,40926],{"class":60,"line":17276},[58,40927,39500],{"class":64},[58,40929,40930],{"class":60,"line":17282},[58,40931,39505],{"class":64},[58,40933,40934,40936,40938,40940,40942],{"class":60,"line":17305},[58,40935,4049],{"class":92},[58,40937,39512],{"class":75},[58,40939,26687],{"class":92},[58,40941,39517],{"class":82},[58,40943,39520],{"class":75},[58,40945,40946],{"class":60,"line":17319},[58,40947,39525],{"class":64},[58,40949,40950,40952,40954],{"class":60,"line":17339},[58,40951,5288],{"class":92},[58,40953,39532],{"class":82},[58,40955,39535],{"class":75},[58,40957,40958],{"class":60,"line":17345},[58,40959,39540],{"class":64},[58,40961,40962,40964,40966,40968,40970],{"class":60,"line":17356},[58,40963,39545],{"class":75},[58,40965,39548],{"class":5862},[58,40967,383],{"class":92},[58,40969,39553],{"class":386},[58,40971,799],{"class":75},[58,40973,40974],{"class":60,"line":17379},[58,40975,39560],{"class":64},[58,40977,40978,40980,40982,40984,40986,40988],{"class":60,"line":17401},[58,40979,39565],{"class":92},[58,40981,39568],{"class":75},[58,40983,39571],{"class":92},[58,40985,39574],{"class":92},[58,40987,39577],{"class":82},[58,40989,4385],{"class":75},[58,40991,40992],{"class":60,"line":17406},[58,40993,39584],{"class":64},[58,40995,40996,40998,41000],{"class":60,"line":17412},[58,40997,39589],{"class":75},[58,40999,979],{"class":82},[58,41001,799],{"class":75},[58,41003,41004],{"class":60,"line":17426},[58,41005,39598],{"class":64},[58,41007,41008,41010,41012],{"class":60,"line":17439},[58,41009,39603],{"class":92},[58,41011,39532],{"class":82},[58,41013,39608],{"class":75},[58,41015,41016],{"class":60,"line":17444},[58,41017,39613],{"class":64},[58,41019,41020],{"class":60,"line":17458},[58,41021,39618],{"class":64},[58,41023,41024,41026,41028,41030,41032],{"class":60,"line":17463},[58,41025,39623],{"class":75},[58,41027,979],{"class":82},[58,41029,1164],{"class":75},[58,41031,39630],{"class":82},[58,41033,799],{"class":75},[58,41035,41036],{"class":60,"line":17469},[58,41037,39637],{"class":64},[58,41039,41040,41042,41044,41046,41048,41050],{"class":60,"line":17474},[58,41041,39565],{"class":92},[58,41043,39568],{"class":75},[58,41045,39571],{"class":92},[58,41047,39574],{"class":92},[58,41049,39577],{"class":82},[58,41051,4385],{"class":75},[58,41053,41054,41056,41058],{"class":60,"line":17488},[58,41055,39589],{"class":75},[58,41057,979],{"class":82},[58,41059,799],{"class":75},[58,41061,41062],{"class":60,"line":17493},[58,41063,3046],{"emptyLinePlaceholder":720},[58,41065,41066],{"class":60,"line":17498},[58,41067,35809],{"class":64},[58,41069,41070,41072,41074],{"class":60,"line":17512},[58,41071,31445],{"class":92},[58,41073,31737],{"class":379},[58,41075,31740],{"class":75},[58,41077,41078,41080,41082,41084],{"class":60,"line":17524},[58,41079,31745],{"class":75},[58,41081,383],{"class":92},[58,41083,31467],{"class":82},[58,41085,39686],{"class":75},[58,41087,41088,41090,41092,41094],{"class":60,"line":17529},[58,41089,31745],{"class":75},[58,41091,383],{"class":92},[58,41093,31467],{"class":82},[58,41095,39697],{"class":75},[58,41097,41098,41100,41102,41104],{"class":60,"line":17542},[58,41099,31745],{"class":75},[58,41101,383],{"class":92},[58,41103,31467],{"class":82},[58,41105,39708],{"class":75},[58,41107,41108,41110,41112,41114],{"class":60,"line":17547},[58,41109,31745],{"class":75},[58,41111,383],{"class":92},[58,41113,31467],{"class":82},[58,41115,39719],{"class":75},[58,41117,41118,41120,41122,41124],{"class":60,"line":17552},[58,41119,31745],{"class":75},[58,41121,383],{"class":92},[58,41123,31467],{"class":82},[58,41125,39730],{"class":75},[58,41127,41128,41130,41132,41134],{"class":60,"line":17557},[58,41129,31745],{"class":75},[58,41131,383],{"class":92},[58,41133,31467],{"class":82},[58,41135,39741],{"class":75},[58,41137,41138,41140],{"class":60,"line":17570},[58,41139,15396],{"class":92},[58,41141,31853],{"class":75},[58,41143,41144],{"class":60,"line":17575},[58,41145,3046],{"emptyLinePlaceholder":720},[58,41147,41148],{"class":60,"line":33277},[58,41149,39756],{"class":64},[58,41151,41152,41154,41156,41158,41160],{"class":60,"line":33283},[58,41153,2180],{"class":92},[58,41155,31864],{"class":82},[58,41157,3595],{"class":92},[58,41159,39767],{"class":386},[58,41161,4385],{"class":75},[58,41163,41164,41166,41168,41170,41172,41174,41176,41178,41180],{"class":60,"line":33289},[58,41165,31881],{"class":75},[58,41167,383],{"class":92},[58,41169,31095],{"class":75},[58,41171,31888],{"class":386},[58,41173,2351],{"class":92},[58,41175,31893],{"class":75},[58,41177,2348],{"class":92},[58,41179,31120],{"class":386},[58,41181,799],{"class":75},[58,41183,41184,41186],{"class":60,"line":33295},[58,41185,31943],{"class":82},[58,41187,31129],{"class":75},[58,41189,41190,41192,41194],{"class":60,"line":33301},[58,41191,31933],{"class":75},[58,41193,383],{"class":92},[58,41195,39804],{"class":75},[58,41197,41198,41200,41202,41204,41206,41208,41210,41212],{"class":60,"line":33312},[58,41199,31943],{"class":82},[58,41201,31946],{"class":75},[58,41203,89],{"class":82},[58,41205,1164],{"class":75},[58,41207,32145],{"class":82},[58,41209,1164],{"class":75},[58,41211,32145],{"class":82},[58,41213,31959],{"class":75},[19,41215,41216],{"start":79},[22,41217,41218],{},"测试代码",[48,41220,41222],{"className":31022,"code":41221,"language":31024,"meta":53,"style":53},"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",[55,41223,41224,41230,41240,41250,41254,41264,41275,41279,41283,41287,41295,41311,41321,41337,41347,41361,41365,41375,41385,41395,41401,41405,41409,41417,41421,41437,41445,41449,41453,41461,41469,41473,41477,41481,41485,41491,41495,41505,41513,41521,41525,41529,41533,41541,41545,41561,41565,41569,41573,41585,41589,41601,41605,41609,41621,41625,41635,41639,41643,41655,41659,41668,41672,41676,41684,41688,41696,41700,41704,41708,41712,41716,41732,41740,41744,41748,41796,41802,41806,41816,41824,41832,41836,41840,41844,41848,41856,41860,41876,41880,41888,41896],{"__ignoreMap":53},[58,41225,41226,41228],{"class":60,"line":61},[58,41227,31036],{"class":92},[58,41229,31039],{"class":75},[58,41231,41232,41234,41236,41238],{"class":60,"line":68},[58,41233,31036],{"class":92},[58,41235,32059],{"class":75},[58,41237,32027],{"class":92},[58,41239,32064],{"class":75},[58,41241,41242,41244,41246,41248],{"class":60,"line":79},[58,41243,31381],{"class":92},[58,41245,32042],{"class":75},[58,41247,31036],{"class":92},[58,41249,32047],{"class":75},[58,41251,41252],{"class":60,"line":105},[58,41253,34566],{"class":64},[58,41255,41256,41258,41260,41262],{"class":60,"line":627},[58,41257,31381],{"class":92},[58,41259,32012],{"class":75},[58,41261,31036],{"class":92},[58,41263,32017],{"class":75},[58,41265,41266,41268,41270,41272],{"class":60,"line":509},[58,41267,31381],{"class":92},[58,41269,32558],{"class":75},[58,41271,31036],{"class":92},[58,41273,41274],{"class":82}," VGG16\n",[58,41276,41277],{"class":60,"line":559},[58,41278,3046],{"emptyLinePlaceholder":720},[58,41280,41281],{"class":60,"line":654},[58,41282,3046],{"emptyLinePlaceholder":720},[58,41284,41285],{"class":60,"line":671},[58,41286,34595],{"class":64},[58,41288,41289,41291,41293],{"class":60,"line":677},[58,41290,32591],{"class":92},[58,41292,34602],{"class":379},[58,41294,32597],{"class":75},[58,41296,41297,41299,41301,41303,41305,41307,41309],{"class":60,"line":2260},[58,41298,34609],{"class":75},[58,41300,383],{"class":92},[58,41302,32099],{"class":75},[58,41304,32102],{"class":5862},[58,41306,383],{"class":92},[58,41308,32107],{"class":386},[58,41310,32110],{"class":75},[58,41312,41313,41315,41317,41319],{"class":60,"line":694},[58,41314,34626],{"class":5862},[58,41316,383],{"class":92},[58,41318,34631],{"class":82},[58,41320,32110],{"class":75},[58,41322,41323,41325,41327,41329,41331,41333,41335],{"class":60,"line":2270},[58,41324,34638],{"class":5862},[58,41326,383],{"class":92},[58,41328,32137],{"class":75},[58,41330,32140],{"class":5862},[58,41332,383],{"class":92},[58,41334,32145],{"class":82},[58,41336,32148],{"class":75},[58,41338,41339,41341,41343,41345],{"class":60,"line":2275},[58,41340,34655],{"class":5862},[58,41342,383],{"class":92},[58,41344,32120],{"class":82},[58,41346,799],{"class":75},[58,41348,41349,41351,41353,41355,41357,41359],{"class":60,"line":2289},[58,41350,34666],{"class":75},[58,41352,383],{"class":92},[58,41354,32178],{"class":75},[58,41356,32181],{"class":5862},[58,41358,383],{"class":92},[58,41360,34677],{"class":75},[58,41362,41363],{"class":60,"line":2294},[58,41364,34682],{"class":64},[58,41366,41367,41369,41371,41373],{"class":60,"line":2300},[58,41368,34687],{"class":5862},[58,41370,383],{"class":92},[58,41372,89],{"class":82},[58,41374,32110],{"class":75},[58,41376,41377,41379,41381,41383],{"class":60,"line":2321},[58,41378,34698],{"class":5862},[58,41380,383],{"class":92},[58,41382,32120],{"class":82},[58,41384,32110],{"class":75},[58,41386,41387,41389,41391,41393],{"class":60,"line":2326},[58,41388,34709],{"class":5862},[58,41390,383],{"class":92},[58,41392,979],{"class":82},[58,41394,799],{"class":75},[58,41396,41397,41399],{"class":60,"line":2340},[58,41398,4736],{"class":92},[58,41400,34722],{"class":75},[58,41402,41403],{"class":60,"line":2345},[58,41404,3046],{"emptyLinePlaceholder":720},[58,41406,41407],{"class":60,"line":2374},[58,41408,34731],{"class":64},[58,41410,41411,41413,41415],{"class":60,"line":2379},[58,41412,32591],{"class":92},[58,41414,34738],{"class":379},[58,41416,34741],{"class":75},[58,41418,41419],{"class":60,"line":2396},[58,41420,34746],{"class":64},[58,41422,41423,41425,41427,41429,41431,41433,41435],{"class":60,"line":2401},[58,41424,31881],{"class":75},[58,41426,383],{"class":92},[58,41428,31888],{"class":386},[58,41430,2351],{"class":92},[58,41432,31893],{"class":75},[58,41434,2348],{"class":92},[58,41436,34763],{"class":386},[58,41438,41439,41441,41443],{"class":60,"line":2406},[58,41440,31933],{"class":75},[58,41442,383],{"class":92},[58,41444,32933],{"class":75},[58,41446,41447],{"class":60,"line":2411},[58,41448,3046],{"emptyLinePlaceholder":720},[58,41450,41451],{"class":60,"line":2425},[58,41452,34780],{"class":64},[58,41454,41455,41457,41459],{"class":60,"line":2430},[58,41456,34785],{"class":75},[58,41458,383],{"class":92},[58,41460,32986],{"class":82},[58,41462,41463,41465,41467],{"class":60,"line":3223},[58,41464,34794],{"class":75},[58,41466,383],{"class":92},[58,41468,3731],{"class":82},[58,41470,41471],{"class":60,"line":3237},[58,41472,3046],{"emptyLinePlaceholder":720},[58,41474,41475],{"class":60,"line":3245},[58,41476,34807],{"class":64},[58,41478,41479],{"class":60,"line":3250},[58,41480,34812],{"class":64},[58,41482,41483],{"class":60,"line":3256},[58,41484,34817],{"class":64},[58,41486,41487,41489],{"class":60,"line":3262},[58,41488,34822],{"class":92},[58,41490,33528],{"class":75},[58,41492,41493],{"class":60,"line":3267},[58,41494,34829],{"class":64},[58,41496,41497,41499,41501,41503],{"class":60,"line":8594},[58,41498,4049],{"class":92},[58,41500,34836],{"class":75},[58,41502,26687],{"class":92},[58,41504,34841],{"class":75},[58,41506,41507,41509,41511],{"class":60,"line":8618},[58,41508,34846],{"class":75},[58,41510,383],{"class":92},[58,41512,34851],{"class":75},[58,41514,41515,41517,41519],{"class":60,"line":8623},[58,41516,34856],{"class":75},[58,41518,383],{"class":92},[58,41520,34861],{"class":75},[58,41522,41523],{"class":60,"line":8629},[58,41524,34866],{"class":64},[58,41526,41527],{"class":60,"line":8656},[58,41528,33519],{"class":75},[58,41530,41531],{"class":60,"line":8661},[58,41532,34875],{"class":64},[58,41534,41535,41537,41539],{"class":60,"line":8667},[58,41536,33304],{"class":75},[58,41538,383],{"class":92},[58,41540,34884],{"class":75},[58,41542,41543],{"class":60,"line":8679},[58,41544,34889],{"class":64},[58,41546,41547,41549,41551,41553,41555,41557,41559],{"class":60,"line":8691},[58,41548,33321],{"class":75},[58,41550,383],{"class":92},[58,41552,33326],{"class":75},[58,41554,33329],{"class":5862},[58,41556,383],{"class":92},[58,41558,89],{"class":82},[58,41560,799],{"class":75},[58,41562,41563],{"class":60,"line":8703},[58,41564,34910],{"class":64},[58,41566,41567],{"class":60,"line":10361},[58,41568,34915],{"class":64},[58,41570,41571],{"class":60,"line":10386},[58,41572,34920],{"class":64},[58,41574,41575,41577,41579,41581,41583],{"class":60,"line":10409},[58,41576,34925],{"class":75},[58,41578,10122],{"class":92},[58,41580,33431],{"class":75},[58,41582,3595],{"class":92},[58,41584,34934],{"class":75},[58,41586,41587],{"class":60,"line":10433},[58,41588,34939],{"class":64},[58,41590,41591,41593,41595,41597,41599],{"class":60,"line":10438},[58,41592,34944],{"class":75},[58,41594,10122],{"class":92},[58,41596,34949],{"class":75},[58,41598,979],{"class":82},[58,41600,799],{"class":75},[58,41602,41603],{"class":60,"line":10443},[58,41604,3046],{"emptyLinePlaceholder":720},[58,41606,41607],{"class":60,"line":10448},[58,41608,34962],{"class":64},[58,41610,41611,41613,41615,41617,41619],{"class":60,"line":10457},[58,41612,34967],{"class":75},[58,41614,383],{"class":92},[58,41616,34972],{"class":75},[58,41618,1370],{"class":92},[58,41620,34977],{"class":75},[58,41622,41623],{"class":60,"line":10462},[58,41624,34982],{"class":64},[58,41626,41627,41629,41631,41633],{"class":60,"line":10468},[58,41628,33095],{"class":82},[58,41630,793],{"class":75},[58,41632,34991],{"class":386},[58,41634,34994],{"class":75},[58,41636,41637],{"class":60,"line":10489},[58,41638,3046],{"emptyLinePlaceholder":720},[58,41640,41641],{"class":60,"line":10495},[58,41642,35003],{"class":64},[58,41644,41645,41647,41649,41651,41653],{"class":60,"line":10509},[58,41646,2180],{"class":92},[58,41648,31864],{"class":82},[58,41650,3595],{"class":92},[58,41652,31869],{"class":386},[58,41654,4385],{"class":75},[58,41656,41657],{"class":60,"line":10515},[58,41658,35020],{"class":64},[58,41660,41661,41663,41665],{"class":60,"line":10542},[58,41662,31933],{"class":75},[58,41664,383],{"class":92},[58,41666,41667],{"class":75},"VGG16()\n",[58,41669,41670],{"class":60,"line":10551},[58,41671,35033],{"class":64},[58,41673,41674],{"class":60,"line":10557},[58,41675,35038],{"class":64},[58,41677,41678,41680,41682],{"class":60,"line":10565},[58,41679,35043],{"class":75},[58,41681,35046],{"class":386},[58,41683,31141],{"class":75},[58,41685,41686],{"class":60,"line":10570},[58,41687,35053],{"class":64},[58,41689,41690,41692,41694],{"class":60,"line":17247},[58,41691,34666],{"class":75},[58,41693,383],{"class":92},[58,41695,35062],{"class":75},[58,41697,41698],{"class":60,"line":17253},[58,41699,35067],{"class":64},[58,41701,41702],{"class":60,"line":17276},[58,41703,35072],{"class":75},[58,41705,41706],{"class":60,"line":17282},[58,41707,3046],{"emptyLinePlaceholder":720},[58,41709,41710],{"class":60,"line":17305},[58,41711,35081],{"class":64},[58,41713,41714],{"class":60,"line":17319},[58,41715,35086],{"class":64},[58,41717,41718,41720,41722,41724,41726,41728,41730],{"class":60,"line":17339},[58,41719,31881],{"class":75},[58,41721,383],{"class":92},[58,41723,31888],{"class":386},[58,41725,2351],{"class":92},[58,41727,31893],{"class":75},[58,41729,2348],{"class":92},[58,41731,34763],{"class":386},[58,41733,41734,41736,41738],{"class":60,"line":17345},[58,41735,31933],{"class":75},[58,41737,383],{"class":92},[58,41739,32933],{"class":75},[58,41741,41742],{"class":60,"line":17356},[58,41743,35115],{"class":64},[58,41745,41746],{"class":60,"line":17379},[58,41747,35120],{"class":64},[58,41749,41750,41752,41754,41756,41758,41760,41762,41764,41766,41768,41770,41772,41774,41776,41778,41780,41782,41784,41786,41788,41790,41792,41794],{"class":60,"line":17401},[58,41751,35125],{"class":75},[58,41753,383],{"class":92},[58,41755,1675],{"class":75},[58,41757,35132],{"class":386},[58,41759,1164],{"class":75},[58,41761,35137],{"class":386},[58,41763,1164],{"class":75},[58,41765,35142],{"class":386},[58,41767,1164],{"class":75},[58,41769,35147],{"class":386},[58,41771,1164],{"class":75},[58,41773,35152],{"class":386},[58,41775,1164],{"class":75},[58,41777,35157],{"class":386},[58,41779,1164],{"class":75},[58,41781,35162],{"class":386},[58,41783,1164],{"class":75},[58,41785,35167],{"class":386},[58,41787,1164],{"class":75},[58,41789,35172],{"class":386},[58,41791,1164],{"class":75},[58,41793,35177],{"class":386},[58,41795,33890],{"class":75},[58,41797,41798,41800],{"class":60,"line":17406},[58,41799,34822],{"class":92},[58,41801,33528],{"class":75},[58,41803,41804],{"class":60,"line":17412},[58,41805,35190],{"class":64},[58,41807,41808,41810,41812,41814],{"class":60,"line":17426},[58,41809,4049],{"class":92},[58,41811,35197],{"class":75},[58,41813,26687],{"class":92},[58,41815,34841],{"class":75},[58,41817,41818,41820,41822],{"class":60,"line":17439},[58,41819,33254],{"class":75},[58,41821,383],{"class":92},[58,41823,33259],{"class":75},[58,41825,41826,41828,41830],{"class":60,"line":17444},[58,41827,33269],{"class":75},[58,41829,383],{"class":92},[58,41831,33274],{"class":75},[58,41833,41834],{"class":60,"line":17458},[58,41835,3046],{"emptyLinePlaceholder":720},[58,41837,41838],{"class":60,"line":17463},[58,41839,35226],{"class":64},[58,41841,41842],{"class":60,"line":17469},[58,41843,33519],{"class":75},[58,41845,41846],{"class":60,"line":17474},[58,41847,35235],{"class":64},[58,41849,41850,41852,41854],{"class":60,"line":17488},[58,41851,33304],{"class":75},[58,41853,383],{"class":92},[58,41855,33309],{"class":75},[58,41857,41858],{"class":60,"line":17493},[58,41859,35248],{"class":64},[58,41861,41862,41864,41866,41868,41870,41872,41874],{"class":60,"line":17498},[58,41863,33321],{"class":75},[58,41865,383],{"class":92},[58,41867,33326],{"class":75},[58,41869,33329],{"class":5862},[58,41871,383],{"class":92},[58,41873,89],{"class":82},[58,41875,799],{"class":75},[58,41877,41878],{"class":60,"line":17512},[58,41879,35269],{"class":64},[58,41881,41882,41884,41886],{"class":60,"line":17524},[58,41883,35274],{"class":75},[58,41885,383],{"class":92},[58,41887,35279],{"class":75},[58,41889,41890,41892,41894],{"class":60,"line":17529},[58,41891,35284],{"class":75},[58,41893,383],{"class":92},[58,41895,35289],{"class":75},[58,41897,41898,41900,41902,41904,41906,41908,41910,41912],{"class":60,"line":17542},[58,41899,35294],{"class":82},[58,41901,793],{"class":75},[58,41903,35299],{"class":386},[58,41905,35302],{"class":75},[58,41907,35305],{"class":386},[58,41909,1164],{"class":75},[58,41911,35310],{"class":386},[58,41913,35313],{"class":75},[114,41915,41917],{"id":41916},"_23googlenet","2.3.GoogLeNet",[22641,41919,41921],{"id":41920},"_231原理","2.3.1.原理",[19,41923,41924],{},[22,41925,41926],{},"网络结构",[175,41928,41929],{},[119,41930],{"alt":53,"src":41931},"\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",[175,41933,41934],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[175,41936,41937],{},[119,41938],{"alt":53,"src":41939},"\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",[175,41941,41942],{},[119,41943],{"alt":53,"src":41944},"\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",[175,41946,41947],{},[119,41948],{"alt":53,"src":41949},"\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",[19,41951,41952],{"start":68},[22,41953,41954],{},"1x1卷积的优点",[175,41956,41957],{},[119,41958],{"alt":53,"src":41959},"\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",[19,41961,41962],{"start":79},[22,41963,41964],{},"全局平均池化层优点",[175,41966,41967],{},[119,41968],{"alt":53,"src":41969},"\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",[175,41971,41972],{},[119,41973],{"alt":53,"src":41974},"\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",[19,41976,41977],{"start":105},[22,41978,41979],{},"参数详细描述",[175,41981,41982],{},[119,41983],{"alt":53,"src":41984},"\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",[175,41986,41987],{},[119,41988],{"alt":53,"src":41989},"\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",[175,41991,41992],{},[119,41993],{"alt":53,"src":41994},"\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",[175,41996,41997],{},[119,41998],{"alt":53,"src":41999},"\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",[175,42001,42002],{},[119,42003],{"alt":53,"src":42004},"\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",[175,42006,42007],{},[119,42008],{"alt":53,"src":42009},"\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",[175,42011,42012],{},[119,42013],{"alt":53,"src":42014},"\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",[175,42016,42017],{},[119,42018],{"alt":53,"src":42019},"\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",[175,42021,42022],{},[119,42023],{"alt":53,"src":42024},"\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",[175,42026,42027],{},[119,42028],{"alt":53,"src":42029},"\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",[175,42031,42032],{},[119,42033],{"alt":53,"src":42034},"\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",[175,42036,42037],{},[119,42038],{"alt":53,"src":42039},"\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",[175,42041,42042],{},[119,42043],{"alt":53,"src":42044},"\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",[175,42046,42047],{},[119,42048],{"alt":53,"src":42049},"\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",[175,42051,42052],{},[119,42053],{"alt":53,"src":42054},"\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",[175,42056,42057],{},[119,42058],{"alt":53,"src":42059},"\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",[175,42061,42062],{},[119,42063],{"alt":53,"src":42064},"\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",[175,42066,42067],{},[119,42068],{"alt":53,"src":42069},"\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",[175,42071,42072],{},[119,42073],{"alt":53,"src":42074},"\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",[175,42076,42077],{},[119,42078],{"alt":53,"src":42079},"\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",[175,42081,42082],{},[119,42083],{"alt":53,"src":42084},"\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",[22641,42086,42088],{"id":42087},"_232代码实现","2.3.2.代码实现",[19,42090,42091],{},[22,42092,31355],{},[175,42094,42095],{},"根据原理一步一步搭建即可",[48,42097,42099],{"className":31022,"code":42098,"language":31024,"meta":53,"style":53},"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",[55,42100,42101,42107,42117,42127,42131,42148,42157,42172,42182,42187,42220,42225,42262,42309,42314,42350,42397,42402,42407,42442,42474,42478,42486,42502,42526,42551,42572,42577,42592,42596,42600,42605,42622,42627,42636,42651,42662,42706,42710,42738,42742,42753,42781,42785,42822,42826,42854,42858,42869,42905,42937,42965,42969,42980,43014,43046,43078,43111,43145,43173,43177,43188,43221,43253,43267,43271,43284,43288,43293,43305,43313,43335,43340,43345,43350,43355,43360,43365,43379,43387,43396,43409,43424,43433,43437,43445,43456,43467,43478,43489,43500,43506,43510,43515,43527,43547,43556],{"__ignoreMap":53},[58,42102,42103,42105],{"class":60,"line":61},[58,42104,31036],{"class":92},[58,42106,31039],{"class":75},[58,42108,42109,42111,42113,42115],{"class":60,"line":68},[58,42110,31381],{"class":92},[58,42112,31384],{"class":75},[58,42114,31036],{"class":92},[58,42116,31389],{"class":75},[58,42118,42119,42121,42123,42125],{"class":60,"line":79},[58,42120,31381],{"class":92},[58,42122,31401],{"class":75},[58,42124,31036],{"class":92},[58,42126,31406],{"class":75},[58,42128,42129],{"class":60,"line":105},[58,42130,3046],{"emptyLinePlaceholder":720},[58,42132,42133,42135,42138,42140,42142,42144,42146],{"class":60,"line":627},[58,42134,15338],{"class":92},[58,42136,42137],{"class":379}," Inception",[58,42139,793],{"class":75},[58,42141,31422],{"class":379},[58,42143,1344],{"class":75},[58,42145,31427],{"class":379},[58,42147,31430],{"class":75},[58,42149,42150,42152,42154],{"class":60,"line":509},[58,42151,31445],{"class":92},[58,42153,31448],{"class":82},[58,42155,42156],{"class":75},"(self,in_channels,c1,c2,c3,c4):\n",[58,42158,42159,42161,42164,42166,42168,42170],{"class":60,"line":559},[58,42160,31461],{"class":82},[58,42162,42163],{"class":75},"(Inception,",[58,42165,31467],{"class":82},[58,42167,31470],{"class":75},[58,42169,31473],{"class":82},[58,42171,2622],{"class":75},[58,42173,42174,42176,42178,42180],{"class":60,"line":654},[58,42175,31489],{"class":82},[58,42177,35415],{"class":75},[58,42179,383],{"class":92},[58,42181,35420],{"class":75},[58,42183,42184],{"class":60,"line":671},[58,42185,42186],{"class":64},"        # 路线1：定义1*1卷积\n",[58,42188,42189,42191,42194,42196,42198,42200,42202,42205,42207,42209,42212,42214,42216,42218],{"class":60,"line":677},[58,42190,31489],{"class":82},[58,42192,42193],{"class":75},".p1_1",[58,42195,383],{"class":92},[58,42197,31497],{"class":75},[58,42199,31500],{"class":5862},[58,42201,383],{"class":92},[58,42203,42204],{"class":75},"in_channels,",[58,42206,31509],{"class":5862},[58,42208,383],{"class":92},[58,42210,42211],{"class":75},"c1,",[58,42213,31518],{"class":5862},[58,42215,383],{"class":92},[58,42217,89],{"class":82},[58,42219,799],{"class":75},[58,42221,42222],{"class":60,"line":2260},[58,42223,42224],{"class":64},"        # 路线2：定义1*1卷积和3*3\n",[58,42226,42227,42229,42232,42234,42236,42238,42240,42242,42244,42246,42249,42251,42254,42256,42258,42260],{"class":60,"line":694},[58,42228,31489],{"class":82},[58,42230,42231],{"class":75},".p2_1",[58,42233,383],{"class":92},[58,42235,31497],{"class":75},[58,42237,31500],{"class":5862},[58,42239,383],{"class":92},[58,42241,42204],{"class":75},[58,42243,31509],{"class":5862},[58,42245,383],{"class":92},[58,42247,42248],{"class":75},"c2[",[58,42250,979],{"class":82},[58,42252,42253],{"class":75},"],",[58,42255,31518],{"class":5862},[58,42257,383],{"class":92},[58,42259,89],{"class":82},[58,42261,799],{"class":75},[58,42263,42264,42266,42269,42271,42273,42275,42277,42279,42281,42283,42285,42287,42289,42291,42293,42295,42297,42299,42301,42303,42305,42307],{"class":60,"line":2270},[58,42265,31489],{"class":82},[58,42267,42268],{"class":75},".p2_2",[58,42270,383],{"class":92},[58,42272,31497],{"class":75},[58,42274,31500],{"class":5862},[58,42276,383],{"class":92},[58,42278,42248],{"class":75},[58,42280,979],{"class":82},[58,42282,42253],{"class":75},[58,42284,31509],{"class":5862},[58,42286,383],{"class":92},[58,42288,42248],{"class":75},[58,42290,89],{"class":82},[58,42292,42253],{"class":75},[58,42294,31518],{"class":5862},[58,42296,383],{"class":92},[58,42298,861],{"class":82},[58,42300,1164],{"class":75},[58,42302,31527],{"class":5862},[58,42304,383],{"class":92},[58,42306,89],{"class":82},[58,42308,799],{"class":75},[58,42310,42311],{"class":60,"line":2275},[58,42312,42313],{"class":64},"        # 路线3：定义1*1卷积和5*5\n",[58,42315,42316,42318,42321,42323,42325,42327,42329,42331,42333,42335,42338,42340,42342,42344,42346,42348],{"class":60,"line":2289},[58,42317,31489],{"class":82},[58,42319,42320],{"class":75},".p3_1",[58,42322,383],{"class":92},[58,42324,31497],{"class":75},[58,42326,31500],{"class":5862},[58,42328,383],{"class":92},[58,42330,42204],{"class":75},[58,42332,31509],{"class":5862},[58,42334,383],{"class":92},[58,42336,42337],{"class":75},"c3[",[58,42339,979],{"class":82},[58,42341,42253],{"class":75},[58,42343,31518],{"class":5862},[58,42345,383],{"class":92},[58,42347,89],{"class":82},[58,42349,799],{"class":75},[58,42351,42352,42354,42357,42359,42361,42363,42365,42367,42369,42371,42373,42375,42377,42379,42381,42383,42385,42387,42389,42391,42393,42395],{"class":60,"line":2294},[58,42353,31489],{"class":82},[58,42355,42356],{"class":75},".p3_2",[58,42358,383],{"class":92},[58,42360,31497],{"class":75},[58,42362,31500],{"class":5862},[58,42364,383],{"class":92},[58,42366,42337],{"class":75},[58,42368,979],{"class":82},[58,42370,42253],{"class":75},[58,42372,31509],{"class":5862},[58,42374,383],{"class":92},[58,42376,42337],{"class":75},[58,42378,89],{"class":82},[58,42380,42253],{"class":75},[58,42382,31518],{"class":5862},[58,42384,383],{"class":92},[58,42386,1105],{"class":82},[58,42388,1164],{"class":75},[58,42390,31527],{"class":5862},[58,42392,383],{"class":92},[58,42394,867],{"class":82},[58,42396,799],{"class":75},[58,42398,42399],{"class":60,"line":2300},[58,42400,42401],{"class":64},"        # 路线4：定义3*3最大池化和1*1卷积\n",[58,42403,42404],{"class":60,"line":2321},[58,42405,42406],{"class":64},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[58,42408,42409,42411,42414,42416,42418,42420,42422,42424,42426,42428,42430,42432,42434,42436,42438,42440],{"class":60,"line":2326},[58,42410,31489],{"class":82},[58,42412,42413],{"class":75},".p4_1",[58,42415,383],{"class":92},[58,42417,35473],{"class":75},[58,42419,31518],{"class":5862},[58,42421,383],{"class":92},[58,42423,861],{"class":82},[58,42425,1164],{"class":75},[58,42427,31573],{"class":5862},[58,42429,383],{"class":92},[58,42431,89],{"class":82},[58,42433,1164],{"class":75},[58,42435,31527],{"class":5862},[58,42437,383],{"class":92},[58,42439,89],{"class":82},[58,42441,799],{"class":75},[58,42443,42444,42446,42449,42451,42453,42455,42457,42459,42461,42463,42466,42468,42470,42472],{"class":60,"line":2340},[58,42445,31489],{"class":82},[58,42447,42448],{"class":75},".p4_2",[58,42450,383],{"class":92},[58,42452,31497],{"class":75},[58,42454,31500],{"class":5862},[58,42456,383],{"class":92},[58,42458,42204],{"class":75},[58,42460,31509],{"class":5862},[58,42462,383],{"class":92},[58,42464,42465],{"class":75},"c4,",[58,42467,31518],{"class":5862},[58,42469,383],{"class":92},[58,42471,89],{"class":82},[58,42473,799],{"class":75},[58,42475,42476],{"class":60,"line":2345},[58,42477,3046],{"emptyLinePlaceholder":720},[58,42479,42480,42482,42484],{"class":60,"line":2374},[58,42481,31445],{"class":92},[58,42483,31737],{"class":379},[58,42485,31740],{"class":75},[58,42487,42488,42491,42493,42495,42497,42499],{"class":60,"line":2379},[58,42489,42490],{"class":75},"        p1",[58,42492,383],{"class":92},[58,42494,31467],{"class":82},[58,42496,35828],{"class":75},[58,42498,31467],{"class":82},[58,42500,42501],{"class":75},".p1_1(x))\n",[58,42503,42504,42506,42508,42510,42512,42514,42517,42519,42521,42523],{"class":60,"line":2396},[58,42505,7731],{"class":75},[58,42507,383],{"class":92},[58,42509,31467],{"class":82},[58,42511,35828],{"class":75},[58,42513,31467],{"class":82},[58,42515,42516],{"class":75},".p2_2(",[58,42518,31467],{"class":82},[58,42520,35828],{"class":75},[58,42522,31467],{"class":82},[58,42524,42525],{"class":75},".p2_1(x))))\n",[58,42527,42528,42531,42533,42535,42537,42539,42542,42544,42546,42548],{"class":60,"line":2401},[58,42529,42530],{"class":75},"        p3",[58,42532,383],{"class":92},[58,42534,31467],{"class":82},[58,42536,35828],{"class":75},[58,42538,31467],{"class":82},[58,42540,42541],{"class":75},".p3_2(",[58,42543,31467],{"class":82},[58,42545,35828],{"class":75},[58,42547,31467],{"class":82},[58,42549,42550],{"class":75},".p3_1(x))))\n",[58,42552,42553,42556,42558,42560,42562,42564,42567,42569],{"class":60,"line":2406},[58,42554,42555],{"class":75},"        p4",[58,42557,383],{"class":92},[58,42559,31467],{"class":82},[58,42561,35828],{"class":75},[58,42563,31467],{"class":82},[58,42565,42566],{"class":75},".p4_2(",[58,42568,31467],{"class":82},[58,42570,42571],{"class":75},".p4_1(x)))\n",[58,42573,42574],{"class":60,"line":2411},[58,42575,42576],{"class":64},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[58,42578,42579,42581,42584,42586,42588,42590],{"class":60,"line":2425},[58,42580,15396],{"class":92},[58,42582,42583],{"class":75}," torch.cat((p1,p2,p3,p4),",[58,42585,33329],{"class":5862},[58,42587,383],{"class":92},[58,42589,89],{"class":82},[58,42591,799],{"class":75},[58,42593,42594],{"class":60,"line":2430},[58,42595,3046],{"emptyLinePlaceholder":720},[58,42597,42598],{"class":60,"line":3223},[58,42599,3046],{"emptyLinePlaceholder":720},[58,42601,42602],{"class":60,"line":3237},[58,42603,42604],{"class":64},"# 搭建GoogLeNet网络\n",[58,42606,42607,42609,42612,42614,42616,42618,42620],{"class":60,"line":3245},[58,42608,15338],{"class":92},[58,42610,42611],{"class":379}," GoogLeNet",[58,42613,793],{"class":75},[58,42615,31422],{"class":379},[58,42617,1344],{"class":75},[58,42619,31427],{"class":379},[58,42621,31430],{"class":75},[58,42623,42624],{"class":60,"line":3250},[58,42625,42626],{"class":64},"    # 必须把Inception导入到里边\n",[58,42628,42629,42631,42633],{"class":60,"line":3256},[58,42630,31445],{"class":92},[58,42632,31448],{"class":82},[58,42634,42635],{"class":75},"(self,Inception):\n",[58,42637,42638,42640,42643,42645,42647,42649],{"class":60,"line":3262},[58,42639,31461],{"class":82},[58,42641,42642],{"class":75},"(GoogLeNet,",[58,42644,31467],{"class":82},[58,42646,31470],{"class":75},[58,42648,31473],{"class":82},[58,42650,2622],{"class":75},[58,42652,42653,42655,42658,42660],{"class":60,"line":3267},[58,42654,31489],{"class":82},[58,42656,42657],{"class":75},".b1",[58,42659,383],{"class":92},[58,42661,38653],{"class":75},[58,42663,42664,42666,42668,42670,42672,42674,42676,42678,42680,42682,42684,42686,42688,42690,42692,42694,42696,42698,42700,42702,42704],{"class":60,"line":8594},[58,42665,38658],{"class":75},[58,42667,31500],{"class":5862},[58,42669,383],{"class":92},[58,42671,89],{"class":82},[58,42673,1164],{"class":75},[58,42675,31509],{"class":5862},[58,42677,383],{"class":92},[58,42679,991],{"class":82},[58,42681,1164],{"class":75},[58,42683,31518],{"class":5862},[58,42685,383],{"class":92},[58,42687,1155],{"class":82},[58,42689,1164],{"class":75},[58,42691,31573],{"class":5862},[58,42693,383],{"class":92},[58,42695,867],{"class":82},[58,42697,1164],{"class":75},[58,42699,31527],{"class":5862},[58,42701,383],{"class":92},[58,42703,861],{"class":82},[58,42705,38691],{"class":75},[58,42707,42708],{"class":60,"line":8618},[58,42709,38696],{"class":75},[58,42711,42712,42714,42716,42718,42720,42722,42724,42726,42728,42730,42732,42734,42736],{"class":60,"line":8623},[58,42713,38741],{"class":75},[58,42715,31518],{"class":5862},[58,42717,383],{"class":92},[58,42719,861],{"class":82},[58,42721,1164],{"class":75},[58,42723,31573],{"class":5862},[58,42725,383],{"class":92},[58,42727,867],{"class":82},[58,42729,1164],{"class":75},[58,42731,31527],{"class":5862},[58,42733,383],{"class":92},[58,42735,89],{"class":82},[58,42737,799],{"class":75},[58,42739,42740],{"class":60,"line":8629},[58,42741,38770],{"class":75},[58,42743,42744,42746,42749,42751],{"class":60,"line":8656},[58,42745,31489],{"class":82},[58,42747,42748],{"class":75},".b2",[58,42750,383],{"class":92},[58,42752,38653],{"class":75},[58,42754,42755,42757,42759,42761,42763,42765,42767,42769,42771,42773,42775,42777,42779],{"class":60,"line":8661},[58,42756,38658],{"class":75},[58,42758,31500],{"class":5862},[58,42760,383],{"class":92},[58,42762,991],{"class":82},[58,42764,1164],{"class":75},[58,42766,31509],{"class":5862},[58,42768,383],{"class":92},[58,42770,991],{"class":82},[58,42772,1164],{"class":75},[58,42774,31518],{"class":5862},[58,42776,383],{"class":92},[58,42778,89],{"class":82},[58,42780,38691],{"class":75},[58,42782,42783],{"class":60,"line":8667},[58,42784,38696],{"class":75},[58,42786,42787,42789,42791,42793,42795,42797,42799,42801,42804,42806,42808,42810,42812,42814,42816,42818,42820],{"class":60,"line":8679},[58,42788,38658],{"class":75},[58,42790,31500],{"class":5862},[58,42792,383],{"class":92},[58,42794,991],{"class":82},[58,42796,1164],{"class":75},[58,42798,31509],{"class":5862},[58,42800,383],{"class":92},[58,42802,42803],{"class":82},"192",[58,42805,1164],{"class":75},[58,42807,31518],{"class":5862},[58,42809,383],{"class":92},[58,42811,861],{"class":82},[58,42813,1164],{"class":75},[58,42815,31527],{"class":5862},[58,42817,383],{"class":92},[58,42819,89],{"class":82},[58,42821,38691],{"class":75},[58,42823,42824],{"class":60,"line":8691},[58,42825,38696],{"class":75},[58,42827,42828,42830,42832,42834,42836,42838,42840,42842,42844,42846,42848,42850,42852],{"class":60,"line":8703},[58,42829,38741],{"class":75},[58,42831,31518],{"class":5862},[58,42833,383],{"class":92},[58,42835,861],{"class":82},[58,42837,1164],{"class":75},[58,42839,31573],{"class":5862},[58,42841,383],{"class":92},[58,42843,867],{"class":82},[58,42845,1164],{"class":75},[58,42847,31527],{"class":5862},[58,42849,383],{"class":92},[58,42851,89],{"class":82},[58,42853,799],{"class":75},[58,42855,42856],{"class":60,"line":10361},[58,42857,38770],{"class":75},[58,42859,42860,42862,42865,42867],{"class":60,"line":10386},[58,42861,31489],{"class":82},[58,42863,42864],{"class":75},".b3",[58,42866,383],{"class":92},[58,42868,38653],{"class":75},[58,42870,42871,42874,42876,42878,42880,42883,42885,42887,42889,42892,42894,42896,42898,42901,42903],{"class":60,"line":10409},[58,42872,42873],{"class":75},"            Inception(",[58,42875,42803],{"class":82},[58,42877,1164],{"class":75},[58,42879,991],{"class":82},[58,42881,42882],{"class":75},",(",[58,42884,997],{"class":82},[58,42886,1164],{"class":75},[58,42888,32714],{"class":82},[58,42890,42891],{"class":75},"),(",[58,42893,1387],{"class":82},[58,42895,1164],{"class":75},[58,42897,985],{"class":82},[58,42899,42900],{"class":75},"),",[58,42902,985],{"class":82},[58,42904,38691],{"class":75},[58,42906,42907,42909,42911,42913,42915,42917,42919,42921,42923,42925,42927,42929,42931,42933,42935],{"class":60,"line":10433},[58,42908,42873],{"class":75},[58,42910,35514],{"class":82},[58,42912,1164],{"class":75},[58,42914,32714],{"class":82},[58,42916,42882],{"class":75},[58,42918,32714],{"class":82},[58,42920,1164],{"class":75},[58,42922,42803],{"class":82},[58,42924,42891],{"class":75},[58,42926,985],{"class":82},[58,42928,1164],{"class":75},[58,42930,997],{"class":82},[58,42932,42900],{"class":75},[58,42934,991],{"class":82},[58,42936,38691],{"class":75},[58,42938,42939,42941,42943,42945,42947,42949,42951,42953,42955,42957,42959,42961,42963],{"class":60,"line":10438},[58,42940,38741],{"class":75},[58,42942,31518],{"class":5862},[58,42944,383],{"class":92},[58,42946,861],{"class":82},[58,42948,1164],{"class":75},[58,42950,31573],{"class":5862},[58,42952,383],{"class":92},[58,42954,867],{"class":82},[58,42956,1164],{"class":75},[58,42958,31527],{"class":5862},[58,42960,383],{"class":92},[58,42962,89],{"class":82},[58,42964,799],{"class":75},[58,42966,42967],{"class":60,"line":10443},[58,42968,38770],{"class":75},[58,42970,42971,42973,42976,42978],{"class":60,"line":10448},[58,42972,31489],{"class":82},[58,42974,42975],{"class":75},".b4",[58,42977,383],{"class":92},[58,42979,38653],{"class":75},[58,42981,42982,42984,42987,42989,42991,42993,42995,42997,43000,43002,43004,43006,43008,43010,43012],{"class":60,"line":10457},[58,42983,42873],{"class":75},[58,42985,42986],{"class":82},"480",[58,42988,1164],{"class":75},[58,42990,42803],{"class":82},[58,42992,42882],{"class":75},[58,42994,997],{"class":82},[58,42996,1164],{"class":75},[58,42998,42999],{"class":82},"208",[58,43001,42891],{"class":75},[58,43003,1387],{"class":82},[58,43005,1164],{"class":75},[58,43007,1393],{"class":82},[58,43009,42900],{"class":75},[58,43011,991],{"class":82},[58,43013,38691],{"class":75},[58,43015,43016,43018,43020,43022,43024,43026,43028,43030,43032,43034,43036,43038,43040,43042,43044],{"class":60,"line":10462},[58,43017,42873],{"class":75},[58,43019,39101],{"class":82},[58,43021,1164],{"class":75},[58,43023,21691],{"class":82},[58,43025,42882],{"class":75},[58,43027,1404],{"class":82},[58,43029,1164],{"class":75},[58,43031,32145],{"class":82},[58,43033,42891],{"class":75},[58,43035,1585],{"class":82},[58,43037,1164],{"class":75},[58,43039,991],{"class":82},[58,43041,42900],{"class":75},[58,43043,991],{"class":82},[58,43045,38691],{"class":75},[58,43047,43048,43050,43052,43054,43056,43058,43060,43062,43064,43066,43068,43070,43072,43074,43076],{"class":60,"line":10468},[58,43049,42873],{"class":75},[58,43051,39101],{"class":82},[58,43053,1164],{"class":75},[58,43055,32714],{"class":82},[58,43057,42882],{"class":75},[58,43059,32714],{"class":82},[58,43061,1164],{"class":75},[58,43063,35514],{"class":82},[58,43065,42891],{"class":75},[58,43067,1585],{"class":82},[58,43069,1164],{"class":75},[58,43071,991],{"class":82},[58,43073,42900],{"class":75},[58,43075,991],{"class":82},[58,43077,38691],{"class":75},[58,43079,43080,43082,43084,43086,43088,43090,43092,43094,43097,43099,43101,43103,43105,43107,43109],{"class":60,"line":10489},[58,43081,42873],{"class":75},[58,43083,39101],{"class":82},[58,43085,1164],{"class":75},[58,43087,1404],{"class":82},[58,43089,42882],{"class":75},[58,43091,32714],{"class":82},[58,43093,1164],{"class":75},[58,43095,43096],{"class":82},"288",[58,43098,42891],{"class":75},[58,43100,985],{"class":82},[58,43102,1164],{"class":75},[58,43104,991],{"class":82},[58,43106,42900],{"class":75},[58,43108,991],{"class":82},[58,43110,38691],{"class":75},[58,43112,43113,43115,43118,43120,43122,43124,43126,43128,43131,43133,43135,43137,43139,43141,43143],{"class":60,"line":10495},[58,43114,42873],{"class":75},[58,43116,43117],{"class":82},"528",[58,43119,1164],{"class":75},[58,43121,35514],{"class":82},[58,43123,42882],{"class":75},[58,43125,21691],{"class":82},[58,43127,1164],{"class":75},[58,43129,43130],{"class":82},"320",[58,43132,42891],{"class":75},[58,43134,985],{"class":82},[58,43136,1164],{"class":75},[58,43138,32714],{"class":82},[58,43140,42900],{"class":75},[58,43142,32714],{"class":82},[58,43144,38691],{"class":75},[58,43146,43147,43149,43151,43153,43155,43157,43159,43161,43163,43165,43167,43169,43171],{"class":60,"line":10509},[58,43148,38741],{"class":75},[58,43150,31518],{"class":5862},[58,43152,383],{"class":92},[58,43154,861],{"class":82},[58,43156,1164],{"class":75},[58,43158,31573],{"class":5862},[58,43160,383],{"class":92},[58,43162,867],{"class":82},[58,43164,1164],{"class":75},[58,43166,31527],{"class":5862},[58,43168,383],{"class":92},[58,43170,89],{"class":82},[58,43172,799],{"class":75},[58,43174,43175],{"class":60,"line":10515},[58,43176,38770],{"class":75},[58,43178,43179,43181,43184,43186],{"class":60,"line":10542},[58,43180,31489],{"class":82},[58,43182,43183],{"class":75},".b5",[58,43185,383],{"class":92},[58,43187,38653],{"class":75},[58,43189,43190,43192,43195,43197,43199,43201,43203,43205,43207,43209,43211,43213,43215,43217,43219],{"class":60,"line":10551},[58,43191,42873],{"class":75},[58,43193,43194],{"class":82},"832",[58,43196,1164],{"class":75},[58,43198,35514],{"class":82},[58,43200,42882],{"class":75},[58,43202,21691],{"class":82},[58,43204,1164],{"class":75},[58,43206,43130],{"class":82},[58,43208,42891],{"class":75},[58,43210,985],{"class":82},[58,43212,1164],{"class":75},[58,43214,32714],{"class":82},[58,43216,42900],{"class":75},[58,43218,32714],{"class":82},[58,43220,38691],{"class":75},[58,43222,43223,43225,43227,43229,43231,43233,43235,43237,43239,43241,43243,43245,43247,43249,43251],{"class":60,"line":10557},[58,43224,42873],{"class":75},[58,43226,43194],{"class":82},[58,43228,1164],{"class":75},[58,43230,35584],{"class":82},[58,43232,42882],{"class":75},[58,43234,42803],{"class":82},[58,43236,1164],{"class":75},[58,43238,35584],{"class":82},[58,43240,42891],{"class":75},[58,43242,1393],{"class":82},[58,43244,1164],{"class":75},[58,43246,32714],{"class":82},[58,43248,42900],{"class":75},[58,43250,32714],{"class":82},[58,43252,38691],{"class":75},[58,43254,43255,43258,43260,43262,43264],{"class":60,"line":10565},[58,43256,43257],{"class":75},"            nn.AdaptiveAvgPool2d((",[58,43259,89],{"class":82},[58,43261,1164],{"class":75},[58,43263,89],{"class":82},[58,43265,43266],{"class":75},")),\n",[58,43268,43269],{"class":60,"line":10570},[58,43270,39434],{"class":75},[58,43272,43273,43275,43278,43280,43282],{"class":60,"line":17247},[58,43274,39439],{"class":75},[58,43276,43277],{"class":82},"1024",[58,43279,1164],{"class":75},[58,43281,1232],{"class":82},[58,43283,799],{"class":75},[58,43285,43286],{"class":60,"line":17253},[58,43287,38770],{"class":75},[58,43289,43290],{"class":60,"line":17276},[58,43291,43292],{"class":64},"        # 对模型参数初始化\n",[58,43294,43295,43297,43299,43301,43303],{"class":60,"line":17282},[58,43296,4049],{"class":92},[58,43298,39512],{"class":75},[58,43300,26687],{"class":92},[58,43302,39517],{"class":82},[58,43304,39520],{"class":75},[58,43306,43307,43309,43311],{"class":60,"line":17305},[58,43308,5288],{"class":92},[58,43310,39532],{"class":82},[58,43312,39535],{"class":75},[58,43314,43315,43317,43320,43322,43325,43327,43329,43331,43333],{"class":60,"line":17319},[58,43316,39545],{"class":75},[58,43318,43319],{"class":5862},"mode",[58,43321,383],{"class":92},[58,43323,43324],{"class":386},"'fan_out'",[58,43326,1164],{"class":75},[58,43328,39548],{"class":5862},[58,43330,383],{"class":92},[58,43332,39553],{"class":386},[58,43334,799],{"class":75},[58,43336,43337],{"class":60,"line":17339},[58,43338,43339],{"class":64},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[58,43341,43342],{"class":60,"line":17345},[58,43343,43344],{"class":64},"                # ② mode = 'fan_out'决定使用的fan值：\n",[58,43346,43347],{"class":60,"line":17356},[58,43348,43349],{"class":64},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[58,43351,43352],{"class":60,"line":17379},[58,43353,43354],{"class":64},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[58,43356,43357],{"class":60,"line":17401},[58,43358,43359],{"class":64},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[58,43361,43362],{"class":60,"line":17406},[58,43363,43364],{"class":64},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[58,43366,43367,43369,43371,43373,43375,43377],{"class":60,"line":17412},[58,43368,39565],{"class":92},[58,43370,39568],{"class":75},[58,43372,39571],{"class":92},[58,43374,39574],{"class":92},[58,43376,39577],{"class":82},[58,43378,4385],{"class":75},[58,43380,43381,43383,43385],{"class":60,"line":17426},[58,43382,39589],{"class":75},[58,43384,979],{"class":82},[58,43386,799],{"class":75},[58,43388,43389,43392,43394],{"class":60,"line":17439},[58,43390,43391],{"class":92},"                elif",[58,43393,39532],{"class":82},[58,43395,39608],{"class":75},[58,43397,43398,43401,43403,43405,43407],{"class":60,"line":17444},[58,43399,43400],{"class":75},"                    nn.init.normal_(m.weight,",[58,43402,979],{"class":82},[58,43404,1164],{"class":75},[58,43406,39630],{"class":82},[58,43408,799],{"class":75},[58,43410,43411,43414,43416,43418,43420,43422],{"class":60,"line":17458},[58,43412,43413],{"class":92},"                    if",[58,43415,39568],{"class":75},[58,43417,39571],{"class":92},[58,43419,39574],{"class":92},[58,43421,39577],{"class":82},[58,43423,4385],{"class":75},[58,43425,43426,43429,43431],{"class":60,"line":17463},[58,43427,43428],{"class":75},"                        nn.init.constant_(m.bias,",[58,43430,979],{"class":82},[58,43432,799],{"class":75},[58,43434,43435],{"class":60,"line":17469},[58,43436,35809],{"class":64},[58,43438,43439,43441,43443],{"class":60,"line":17474},[58,43440,31445],{"class":92},[58,43442,31737],{"class":379},[58,43444,31740],{"class":75},[58,43446,43447,43449,43451,43453],{"class":60,"line":17488},[58,43448,31745],{"class":75},[58,43450,383],{"class":92},[58,43452,31467],{"class":82},[58,43454,43455],{"class":75},".b1(x)\n",[58,43457,43458,43460,43462,43464],{"class":60,"line":17493},[58,43459,31745],{"class":75},[58,43461,383],{"class":92},[58,43463,31467],{"class":82},[58,43465,43466],{"class":75},".b2(x)\n",[58,43468,43469,43471,43473,43475],{"class":60,"line":17498},[58,43470,31745],{"class":75},[58,43472,383],{"class":92},[58,43474,31467],{"class":82},[58,43476,43477],{"class":75},".b3(x)\n",[58,43479,43480,43482,43484,43486],{"class":60,"line":17512},[58,43481,31745],{"class":75},[58,43483,383],{"class":92},[58,43485,31467],{"class":82},[58,43487,43488],{"class":75},".b4(x)\n",[58,43490,43491,43493,43495,43497],{"class":60,"line":17524},[58,43492,31745],{"class":75},[58,43494,383],{"class":92},[58,43496,31467],{"class":82},[58,43498,43499],{"class":75},".b5(x)\n",[58,43501,43502,43504],{"class":60,"line":17529},[58,43503,15396],{"class":92},[58,43505,31853],{"class":75},[58,43507,43508],{"class":60,"line":17542},[58,43509,3046],{"emptyLinePlaceholder":720},[58,43511,43512],{"class":60,"line":17547},[58,43513,43514],{"class":64},"# 模型展示\n",[58,43516,43517,43519,43521,43523,43525],{"class":60,"line":17552},[58,43518,2180],{"class":92},[58,43520,31864],{"class":82},[58,43522,3595],{"class":92},[58,43524,31869],{"class":386},[58,43526,4385],{"class":75},[58,43528,43529,43531,43533,43535,43537,43539,43541,43543,43545],{"class":60,"line":17557},[58,43530,31881],{"class":75},[58,43532,383],{"class":92},[58,43534,31095],{"class":75},[58,43536,31888],{"class":386},[58,43538,2351],{"class":92},[58,43540,31893],{"class":75},[58,43542,2348],{"class":92},[58,43544,31120],{"class":386},[58,43546,799],{"class":75},[58,43548,43549,43551,43553],{"class":60,"line":17570},[58,43550,31933],{"class":75},[58,43552,383],{"class":92},[58,43554,43555],{"class":75},"GoogLeNet(Inception).to(device)\n",[58,43557,43558,43560,43562,43564,43566,43568,43570,43572],{"class":60,"line":17575},[58,43559,31943],{"class":82},[58,43561,31946],{"class":75},[58,43563,89],{"class":82},[58,43565,1164],{"class":75},[58,43567,32145],{"class":82},[58,43569,1164],{"class":75},[58,43571,32145],{"class":82},[58,43573,31959],{"class":75},[19,43575,43576],{"start":68},[22,43577,39827],{},[48,43579,43581],{"className":31022,"code":43580,"language":31024,"meta":53,"style":53},"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",[55,43582,43583,43589,43595,43605,43611,43621,43631,43641,43651,43661,43665,43676,43686,43690,43694,43698,43706,43718,43728,43744,43754,43786,43800,43810,43820,43824,43834,43848,43858,43868,43878,43884,43888,43892,43896,43900,43904,43912,43932,43936,43940,43944,43948,43952,43968,43972,43976,43984,43988,43992,44000,44004,44008,44012,44020,44024,44028,44032,44036,44044,44048,44056,44060,44068,44072,44080,44084,44092,44096,44100,44108,44112,44116,44120,44132,44156,44170,44174,44178,44182,44190,44194,44202,44206,44214,44218,44226,44230,44238,44242,44250,44254,44266,44270,44278,44282,44290,44294,44298,44302,44306,44314,44318,44334,44338,44346,44350,44354,44358,44362,44366,44370,44374,44390,44394,44406,44410,44422,44426,44438,44442,44450,44454,44462,44466,44470,44474,44480,44484,44492,44496,44512,44516,44524,44528,44544,44556,44560,44572,44576,44580,44588,44592,44596,44604,44608,44616,44620,44628,44632,44636,44678,44720,44724,44728,44744,44748,44764,44768,44772,44780,44784,44788,44800,44838,44842,44846,44854,44858,44872,44882,44888,44894,44900,44906,44910,44914,44920,44924,44928,44936,44940,44958,44962,44966,44970,44986,44990,44994,44998,45002,45006,45026,45046,45050,45054,45058,45066,45074,45078,45094,45114,45134,45138,45142,45150,45158,45162,45166,45170,45182,45186,45196,45204,45221],{"__ignoreMap":53},[58,43584,43585,43587],{"class":60,"line":61},[58,43586,31036],{"class":92},[58,43588,32466],{"class":75},[58,43590,43591,43593],{"class":60,"line":68},[58,43592,31036],{"class":92},[58,43594,32473],{"class":75},[58,43596,43597,43599,43601,43603],{"class":60,"line":79},[58,43598,31036],{"class":92},[58,43600,32484],{"class":75},[58,43602,32027],{"class":92},[58,43604,32489],{"class":75},[58,43606,43607,43609],{"class":60,"line":105},[58,43608,31036],{"class":92},[58,43610,31039],{"class":75},[58,43612,43613,43615,43617,43619],{"class":60,"line":627},[58,43614,31381],{"class":92},[58,43616,32059],{"class":75},[58,43618,31036],{"class":92},[58,43620,32506],{"class":75},[58,43622,43623,43625,43627,43629],{"class":60,"line":509},[58,43624,31381],{"class":92},[58,43626,32012],{"class":75},[58,43628,31036],{"class":92},[58,43630,32017],{"class":75},[58,43632,43633,43635,43637,43639],{"class":60,"line":559},[58,43634,31381],{"class":92},[58,43636,32042],{"class":75},[58,43638,31036],{"class":92},[58,43640,32047],{"class":75},[58,43642,43643,43645,43647,43649],{"class":60,"line":654},[58,43644,31036],{"class":92},[58,43646,32059],{"class":75},[58,43648,32027],{"class":92},[58,43650,32064],{"class":75},[58,43652,43653,43655,43657,43659],{"class":60,"line":671},[58,43654,31036],{"class":92},[58,43656,32076],{"class":75},[58,43658,32027],{"class":92},[58,43660,32081],{"class":75},[58,43662,43663],{"class":60,"line":677},[58,43664,32551],{"class":64},[58,43666,43667,43669,43671,43673],{"class":60,"line":2260},[58,43668,31381],{"class":92},[58,43670,32558],{"class":75},[58,43672,31036],{"class":92},[58,43674,43675],{"class":75}," GoogLeNet, Inception\n",[58,43677,43678,43680,43682,43684],{"class":60,"line":694},[58,43679,31381],{"class":92},[58,43681,31384],{"class":75},[58,43683,31036],{"class":92},[58,43685,31389],{"class":75},[58,43687,43688],{"class":60,"line":2270},[58,43689,3046],{"emptyLinePlaceholder":720},[58,43691,43692],{"class":60,"line":2275},[58,43693,3046],{"emptyLinePlaceholder":720},[58,43695,43696],{"class":60,"line":2289},[58,43697,32586],{"class":64},[58,43699,43700,43702,43704],{"class":60,"line":2294},[58,43701,32591],{"class":92},[58,43703,32594],{"class":379},[58,43705,32597],{"class":75},[58,43707,43708,43710,43712,43714,43716],{"class":60,"line":2300},[58,43709,32602],{"class":75},[58,43711,383],{"class":92},[58,43713,32099],{"class":75},[58,43715,32107],{"class":386},[58,43717,32110],{"class":75},[58,43719,43720,43722,43724,43726],{"class":60,"line":2321},[58,43721,32615],{"class":5862},[58,43723,383],{"class":92},[58,43725,32120],{"class":82},[58,43727,32110],{"class":75},[58,43729,43730,43732,43734,43736,43738,43740,43742],{"class":60,"line":2326},[58,43731,32626],{"class":5862},[58,43733,383],{"class":92},[58,43735,32137],{"class":75},[58,43737,32140],{"class":5862},[58,43739,383],{"class":92},[58,43741,36093],{"class":82},[58,43743,32148],{"class":75},[58,43745,43746,43748,43750,43752],{"class":60,"line":2340},[58,43747,32643],{"class":5862},[58,43749,383],{"class":92},[58,43751,32120],{"class":82},[58,43753,799],{"class":75},[58,43755,43756,43758,43760,43762,43764,43766,43768,43770,43772,43774,43776,43778,43780,43782,43784],{"class":60,"line":2345},[58,43757,32654],{"class":75},[58,43759,383],{"class":92},[58,43761,32659],{"class":75},[58,43763,32662],{"class":82},[58,43765,793],{"class":75},[58,43767,32667],{"class":82},[58,43769,1241],{"class":92},[58,43771,8004],{"class":82},[58,43773,32674],{"class":75},[58,43775,32662],{"class":82},[58,43777,793],{"class":75},[58,43779,32681],{"class":82},[58,43781,1241],{"class":92},[58,43783,8004],{"class":82},[58,43785,32688],{"class":75},[58,43787,43788,43790,43792,43794,43796,43798],{"class":60,"line":2374},[58,43789,32693],{"class":75},[58,43791,383],{"class":92},[58,43793,32698],{"class":75},[58,43795,32181],{"class":5862},[58,43797,383],{"class":92},[58,43799,32186],{"class":75},[58,43801,43802,43804,43806,43808],{"class":60,"line":2379},[58,43803,32709],{"class":5862},[58,43805,383],{"class":92},[58,43807,985],{"class":82},[58,43809,32110],{"class":75},[58,43811,43812,43814,43816,43818],{"class":60,"line":2396},[58,43813,32721],{"class":5862},[58,43815,383],{"class":92},[58,43817,32120],{"class":82},[58,43819,32110],{"class":75},[58,43821,43822],{"class":60,"line":2401},[58,43823,32732],{"class":64},[58,43825,43826,43828,43830,43832],{"class":60,"line":2406},[58,43827,32737],{"class":5862},[58,43829,383],{"class":92},[58,43831,1181],{"class":82},[58,43833,799],{"class":75},[58,43835,43836,43838,43840,43842,43844,43846],{"class":60,"line":2411},[58,43837,32748],{"class":75},[58,43839,383],{"class":92},[58,43841,32178],{"class":75},[58,43843,32181],{"class":5862},[58,43845,383],{"class":92},[58,43847,32759],{"class":75},[58,43849,43850,43852,43854,43856],{"class":60,"line":2425},[58,43851,32764],{"class":5862},[58,43853,383],{"class":92},[58,43855,985],{"class":82},[58,43857,32110],{"class":75},[58,43859,43860,43862,43864,43866],{"class":60,"line":2430},[58,43861,32775],{"class":5862},[58,43863,383],{"class":92},[58,43865,32120],{"class":82},[58,43867,32110],{"class":75},[58,43869,43870,43872,43874,43876],{"class":60,"line":3223},[58,43871,32786],{"class":5862},[58,43873,383],{"class":92},[58,43875,1181],{"class":82},[58,43877,799],{"class":75},[58,43879,43880,43882],{"class":60,"line":3237},[58,43881,4736],{"class":92},[58,43883,32799],{"class":75},[58,43885,43886],{"class":60,"line":3245},[58,43887,3046],{"emptyLinePlaceholder":720},[58,43889,43890],{"class":60,"line":3250},[58,43891,32808],{"class":64},[58,43893,43894],{"class":60,"line":3256},[58,43895,32813],{"class":64},[58,43897,43898],{"class":60,"line":3262},[58,43899,3046],{"emptyLinePlaceholder":720},[58,43901,43902],{"class":60,"line":3267},[58,43903,32822],{"class":64},[58,43905,43906,43908,43910],{"class":60,"line":8594},[58,43907,32591],{"class":92},[58,43909,32829],{"class":379},[58,43911,32832],{"class":75},[58,43913,43914,43916,43918,43920,43922,43924,43926,43928,43930],{"class":60,"line":8618},[58,43915,31881],{"class":75},[58,43917,383],{"class":92},[58,43919,31095],{"class":75},[58,43921,31888],{"class":386},[58,43923,2351],{"class":92},[58,43925,31893],{"class":75},[58,43927,2348],{"class":92},[58,43929,32851],{"class":386},[58,43931,799],{"class":75},[58,43933,43934],{"class":60,"line":8623},[58,43935,3046],{"emptyLinePlaceholder":720},[58,43937,43938],{"class":60,"line":8629},[58,43939,3046],{"emptyLinePlaceholder":720},[58,43941,43942],{"class":60,"line":8656},[58,43943,32866],{"class":64},[58,43945,43946],{"class":60,"line":8661},[58,43947,32871],{"class":64},[58,43949,43950],{"class":60,"line":8667},[58,43951,32876],{"class":64},[58,43953,43954,43956,43958,43960,43962,43964,43966],{"class":60,"line":8679},[58,43955,32881],{"class":75},[58,43957,383],{"class":92},[58,43959,32886],{"class":75},[58,43961,32889],{"class":5862},[58,43963,383],{"class":92},[58,43965,32894],{"class":82},[58,43967,799],{"class":75},[58,43969,43970],{"class":60,"line":8691},[58,43971,3046],{"emptyLinePlaceholder":720},[58,43973,43974],{"class":60,"line":8703},[58,43975,32905],{"class":64},[58,43977,43978,43980,43982],{"class":60,"line":10361},[58,43979,32910],{"class":75},[58,43981,383],{"class":92},[58,43983,32915],{"class":75},[58,43985,43986],{"class":60,"line":10386},[58,43987,3046],{"emptyLinePlaceholder":720},[58,43989,43990],{"class":60,"line":10409},[58,43991,32924],{"class":64},[58,43993,43994,43996,43998],{"class":60,"line":10433},[58,43995,31933],{"class":75},[58,43997,383],{"class":92},[58,43999,32933],{"class":75},[58,44001,44002],{"class":60,"line":10438},[58,44003,32938],{"class":64},[58,44005,44006],{"class":60,"line":10443},[58,44007,32943],{"class":64},[58,44009,44010],{"class":60,"line":10448},[58,44011,32948],{"class":64},[58,44013,44014,44016,44018],{"class":60,"line":10457},[58,44015,32953],{"class":75},[58,44017,383],{"class":92},[58,44019,32958],{"class":75},[58,44021,44022],{"class":60,"line":10462},[58,44023,3046],{"emptyLinePlaceholder":720},[58,44025,44026],{"class":60,"line":10468},[58,44027,3046],{"emptyLinePlaceholder":720},[58,44029,44030],{"class":60,"line":10489},[58,44031,32971],{"class":64},[58,44033,44034],{"class":60,"line":10495},[58,44035,32976],{"class":64},[58,44037,44038,44040,44042],{"class":60,"line":10509},[58,44039,32981],{"class":75},[58,44041,383],{"class":92},[58,44043,32986],{"class":82},[58,44045,44046],{"class":60,"line":10515},[58,44047,32991],{"class":64},[58,44049,44050,44052,44054],{"class":60,"line":10542},[58,44051,32996],{"class":75},[58,44053,383],{"class":92},[58,44055,33001],{"class":75},[58,44057,44058],{"class":60,"line":10551},[58,44059,33006],{"class":64},[58,44061,44062,44064,44066],{"class":60,"line":10557},[58,44063,33011],{"class":75},[58,44065,383],{"class":92},[58,44067,33001],{"class":75},[58,44069,44070],{"class":60,"line":10565},[58,44071,33020],{"class":64},[58,44073,44074,44076,44078],{"class":60,"line":10570},[58,44075,33025],{"class":75},[58,44077,383],{"class":92},[58,44079,33001],{"class":75},[58,44081,44082],{"class":60,"line":17247},[58,44083,33034],{"class":64},[58,44085,44086,44088,44090],{"class":60,"line":17253},[58,44087,33039],{"class":75},[58,44089,383],{"class":92},[58,44091,33001],{"class":75},[58,44093,44094],{"class":60,"line":17276},[58,44095,3046],{"emptyLinePlaceholder":720},[58,44097,44098],{"class":60,"line":17282},[58,44099,33052],{"class":64},[58,44101,44102,44104,44106],{"class":60,"line":17305},[58,44103,33057],{"class":75},[58,44105,383],{"class":92},[58,44107,33062],{"class":75},[58,44109,44110],{"class":60,"line":17319},[58,44111,3046],{"emptyLinePlaceholder":720},[58,44113,44114],{"class":60,"line":17339},[58,44115,3046],{"emptyLinePlaceholder":720},[58,44117,44118],{"class":60,"line":17345},[58,44119,33075],{"class":64},[58,44121,44122,44124,44126,44128,44130],{"class":60,"line":17356},[58,44123,3847],{"class":92},[58,44125,33082],{"class":75},[58,44127,26687],{"class":92},[58,44129,33087],{"class":82},[58,44131,33090],{"class":75},[58,44133,44134,44136,44138,44140,44142,44144,44146,44148,44150,44152,44154],{"class":60,"line":17379},[58,44135,33095],{"class":82},[58,44137,793],{"class":75},[58,44139,33100],{"class":386},[58,44141,33103],{"class":82},[58,44143,1370],{"class":386},[58,44145,33103],{"class":82},[58,44147,1037],{"class":386},[58,44149,33112],{"class":75},[58,44151,1318],{"class":92},[58,44153,89],{"class":82},[58,44155,31141],{"class":75},[58,44157,44158,44160,44162,44164,44166,44168],{"class":60,"line":17401},[58,44159,33095],{"class":82},[58,44161,793],{"class":75},[58,44163,33127],{"class":386},[58,44165,1241],{"class":92},[58,44167,1232],{"class":82},[58,44169,799],{"class":75},[58,44171,44172],{"class":60,"line":17406},[58,44173,3046],{"emptyLinePlaceholder":720},[58,44175,44176],{"class":60,"line":17412},[58,44177,33142],{"class":64},[58,44179,44180],{"class":60,"line":17426},[58,44181,33147],{"class":64},[58,44183,44184,44186,44188],{"class":60,"line":17439},[58,44185,33152],{"class":75},[58,44187,383],{"class":92},[58,44189,32986],{"class":82},[58,44191,44192],{"class":60,"line":17444},[58,44193,33161],{"class":64},[58,44195,44196,44198,44200],{"class":60,"line":17458},[58,44197,33166],{"class":75},[58,44199,383],{"class":92},[58,44201,3731],{"class":82},[58,44203,44204],{"class":60,"line":17463},[58,44205,33175],{"class":64},[58,44207,44208,44210,44212],{"class":60,"line":17469},[58,44209,33180],{"class":75},[58,44211,383],{"class":92},[58,44213,32986],{"class":82},[58,44215,44216],{"class":60,"line":17474},[58,44217,33189],{"class":64},[58,44219,44220,44222,44224],{"class":60,"line":17488},[58,44221,33194],{"class":75},[58,44223,383],{"class":92},[58,44225,3731],{"class":82},[58,44227,44228],{"class":60,"line":17493},[58,44229,33203],{"class":64},[58,44231,44232,44234,44236],{"class":60,"line":17498},[58,44233,33208],{"class":75},[58,44235,383],{"class":92},[58,44237,3731],{"class":82},[58,44239,44240],{"class":60,"line":17512},[58,44241,33217],{"class":64},[58,44243,44244,44246,44248],{"class":60,"line":17524},[58,44245,33222],{"class":75},[58,44247,383],{"class":92},[58,44249,3731],{"class":82},[58,44251,44252],{"class":60,"line":17529},[58,44253,33231],{"class":64},[58,44255,44256,44258,44260,44262,44264],{"class":60,"line":17542},[58,44257,4049],{"class":92},[58,44259,32245],{"class":75},[58,44261,26687],{"class":92},[58,44263,32250],{"class":82},[58,44265,33244],{"class":75},[58,44267,44268],{"class":60,"line":17547},[58,44269,33249],{"class":64},[58,44271,44272,44274,44276],{"class":60,"line":17552},[58,44273,33254],{"class":75},[58,44275,383],{"class":92},[58,44277,33259],{"class":75},[58,44279,44280],{"class":60,"line":17557},[58,44281,33264],{"class":64},[58,44283,44284,44286,44288],{"class":60,"line":17570},[58,44285,33269],{"class":75},[58,44287,383],{"class":92},[58,44289,33274],{"class":75},[58,44291,44292],{"class":60,"line":17575},[58,44293,33280],{"class":64},[58,44295,44296],{"class":60,"line":33277},[58,44297,33286],{"class":75},[58,44299,44300],{"class":60,"line":33283},[58,44301,33292],{"class":64},[58,44303,44304],{"class":60,"line":33289},[58,44305,33298],{"class":64},[58,44307,44308,44310,44312],{"class":60,"line":33295},[58,44309,33304],{"class":75},[58,44311,383],{"class":92},[58,44313,33309],{"class":75},[58,44315,44316],{"class":60,"line":33301},[58,44317,33315],{"class":64},[58,44319,44320,44322,44324,44326,44328,44330,44332],{"class":60,"line":33312},[58,44321,33321],{"class":75},[58,44323,383],{"class":92},[58,44325,33326],{"class":75},[58,44327,33329],{"class":5862},[58,44329,383],{"class":92},[58,44331,89],{"class":82},[58,44333,799],{"class":75},[58,44335,44336],{"class":60,"line":33318},[58,44337,33341],{"class":64},[58,44339,44340,44342,44344],{"class":60,"line":33338},[58,44341,33347],{"class":75},[58,44343,383],{"class":92},[58,44345,33352],{"class":75},[58,44347,44348],{"class":60,"line":33344},[58,44349,33358],{"class":64},[58,44351,44352],{"class":60,"line":33355},[58,44353,33364],{"class":75},[58,44355,44356],{"class":60,"line":33361},[58,44357,33370],{"class":64},[58,44359,44360],{"class":60,"line":33367},[58,44361,33376],{"class":75},[58,44363,44364],{"class":60,"line":33373},[58,44365,33382],{"class":64},[58,44367,44368],{"class":60,"line":33379},[58,44369,33388],{"class":75},[58,44371,44372],{"class":60,"line":33385},[58,44373,33394],{"class":64},[58,44375,44376,44378,44380,44382,44384,44386,44388],{"class":60,"line":33391},[58,44377,33400],{"class":75},[58,44379,10122],{"class":92},[58,44381,33405],{"class":75},[58,44383,1241],{"class":92},[58,44385,33410],{"class":75},[58,44387,979],{"class":82},[58,44389,799],{"class":75},[58,44391,44392],{"class":60,"line":33397},[58,44393,33420],{"class":64},[58,44395,44396,44398,44400,44402,44404],{"class":60,"line":33417},[58,44397,33426],{"class":75},[58,44399,10122],{"class":92},[58,44401,33431],{"class":75},[58,44403,3595],{"class":92},[58,44405,33436],{"class":75},[58,44407,44408],{"class":60,"line":33423},[58,44409,33442],{"class":64},[58,44411,44412,44414,44416,44418,44420],{"class":60,"line":33439},[58,44413,33448],{"class":75},[58,44415,10122],{"class":92},[58,44417,33410],{"class":75},[58,44419,979],{"class":82},[58,44421,799],{"class":75},[58,44423,44424],{"class":60,"line":33445},[58,44425,33462],{"class":64},[58,44427,44428,44430,44432,44434,44436],{"class":60,"line":33459},[58,44429,4049],{"class":92},[58,44431,33470],{"class":75},[58,44433,26687],{"class":92},[58,44435,32250],{"class":82},[58,44437,33477],{"class":75},[58,44439,44440],{"class":60,"line":33465},[58,44441,33483],{"class":64},[58,44443,44444,44446,44448],{"class":60,"line":33480},[58,44445,33254],{"class":75},[58,44447,383],{"class":92},[58,44449,33259],{"class":75},[58,44451,44452],{"class":60,"line":33486},[58,44453,33498],{"class":64},[58,44455,44456,44458,44460],{"class":60,"line":33495},[58,44457,33269],{"class":75},[58,44459,383],{"class":92},[58,44461,33274],{"class":75},[58,44463,44464],{"class":60,"line":33501},[58,44465,33513],{"class":64},[58,44467,44468],{"class":60,"line":33510},[58,44469,33519],{"class":75},[58,44471,44472],{"class":60,"line":33516},[58,44473,37000],{"class":64},[58,44475,44476,44478],{"class":60,"line":33522},[58,44477,33525],{"class":92},[58,44479,33528],{"class":75},[58,44481,44482],{"class":60,"line":33531},[58,44483,33534],{"class":64},[58,44485,44486,44488,44490],{"class":60,"line":33537},[58,44487,37015],{"class":75},[58,44489,383],{"class":92},[58,44491,33309],{"class":75},[58,44493,44494],{"class":60,"line":33548},[58,44495,33551],{"class":64},[58,44497,44498,44500,44502,44504,44506,44508,44510],{"class":60,"line":33554},[58,44499,37028],{"class":75},[58,44501,383],{"class":92},[58,44503,33326],{"class":75},[58,44505,33329],{"class":5862},[58,44507,383],{"class":92},[58,44509,89],{"class":82},[58,44511,799],{"class":75},[58,44513,44514],{"class":60,"line":33573},[58,44515,33576],{"class":64},[58,44517,44518,44520,44522],{"class":60,"line":33579},[58,44519,37049],{"class":75},[58,44521,383],{"class":92},[58,44523,33352],{"class":75},[58,44525,44526],{"class":60,"line":33590},[58,44527,33593],{"class":64},[58,44529,44530,44532,44534,44536,44538,44540,44542],{"class":60,"line":33596},[58,44531,37062],{"class":75},[58,44533,10122],{"class":92},[58,44535,37067],{"class":75},[58,44537,1241],{"class":92},[58,44539,33410],{"class":75},[58,44541,979],{"class":82},[58,44543,799],{"class":75},[58,44545,44546,44548,44550,44552,44554],{"class":60,"line":33616},[58,44547,37080],{"class":75},[58,44549,10122],{"class":92},[58,44551,33431],{"class":75},[58,44553,3595],{"class":92},[58,44555,33436],{"class":75},[58,44557,44558],{"class":60,"line":33632},[58,44559,37093],{"class":64},[58,44561,44562,44564,44566,44568,44570],{"class":60,"line":33638},[58,44563,37098],{"class":75},[58,44565,10122],{"class":92},[58,44567,33410],{"class":75},[58,44569,979],{"class":82},[58,44571,799],{"class":75},[58,44573,44574],{"class":60,"line":33652},[58,44575,33655],{"class":64},[58,44577,44578],{"class":60,"line":33658},[58,44579,33661],{"class":64},[58,44581,44582,44584,44586],{"class":60,"line":33664},[58,44583,33667],{"class":75},[58,44585,1370],{"class":92},[58,44587,33672],{"class":75},[58,44589,44590],{"class":60,"line":33675},[58,44591,33678],{"class":64},[58,44593,44594],{"class":60,"line":33681},[58,44595,33684],{"class":64},[58,44597,44598,44600,44602],{"class":60,"line":33687},[58,44599,33690],{"class":75},[58,44601,1370],{"class":92},[58,44603,33672],{"class":75},[58,44605,44606],{"class":60,"line":33697},[58,44607,33700],{"class":64},[58,44609,44610,44612,44614],{"class":60,"line":33703},[58,44611,33706],{"class":75},[58,44613,1370],{"class":92},[58,44615,33711],{"class":75},[58,44617,44618],{"class":60,"line":33714},[58,44619,33717],{"class":64},[58,44621,44622,44624,44626],{"class":60,"line":33720},[58,44623,33723],{"class":75},[58,44625,1370],{"class":92},[58,44627,33711],{"class":75},[58,44629,44630],{"class":60,"line":33730},[58,44631,3046],{"emptyLinePlaceholder":720},[58,44633,44634],{"class":60,"line":33735},[58,44635,33738],{"class":64},[58,44637,44638,44640,44642,44644,44646,44648,44650,44652,44654,44656,44658,44660,44662,44664,44666,44668,44670,44672,44674,44676],{"class":60,"line":33741},[58,44639,33095],{"class":82},[58,44641,793],{"class":75},[58,44643,4238],{"class":386},[58,44645,33103],{"class":82},[58,44647,33752],{"class":386},[58,44649,1681],{"class":82},[58,44651,33757],{"class":92},[58,44653,1730],{"class":82},[58,44655,33762],{"class":386},[58,44657,1681],{"class":82},[58,44659,33757],{"class":92},[58,44661,1730],{"class":82},[58,44663,4238],{"class":386},[58,44665,33773],{"class":75},[58,44667,1318],{"class":92},[58,44669,89],{"class":82},[58,44671,33780],{"class":75},[58,44673,1318],{"class":92},[58,44675,89],{"class":82},[58,44677,33787],{"class":75},[58,44679,44680,44682,44684,44686,44688,44690,44692,44694,44696,44698,44700,44702,44704,44706,44708,44710,44712,44714,44716,44718],{"class":60,"line":33790},[58,44681,33095],{"class":82},[58,44683,793],{"class":75},[58,44685,4238],{"class":386},[58,44687,33103],{"class":82},[58,44689,33801],{"class":386},[58,44691,1681],{"class":82},[58,44693,33757],{"class":92},[58,44695,1730],{"class":82},[58,44697,33810],{"class":386},[58,44699,1681],{"class":82},[58,44701,33757],{"class":92},[58,44703,1730],{"class":82},[58,44705,4238],{"class":386},[58,44707,33821],{"class":75},[58,44709,1318],{"class":92},[58,44711,89],{"class":82},[58,44713,33828],{"class":75},[58,44715,1318],{"class":92},[58,44717,89],{"class":82},[58,44719,33787],{"class":75},[58,44721,44722],{"class":60,"line":33837},[58,44723,3046],{"emptyLinePlaceholder":720},[58,44725,44726],{"class":60,"line":33842},[58,44727,33845],{"class":64},[58,44729,44730,44732,44734,44736,44738,44740,44742],{"class":60,"line":33848},[58,44731,3143],{"class":92},[58,44733,33853],{"class":75},[58,44735,1318],{"class":92},[58,44737,89],{"class":82},[58,44739,1724],{"class":75},[58,44741,1744],{"class":92},[58,44743,33864],{"class":75},[58,44745,44746],{"class":60,"line":33867},[58,44747,33870],{"class":64},[58,44749,44750,44752,44754,44756,44758,44760,44762],{"class":60,"line":33873},[58,44751,33876],{"class":75},[58,44753,832],{"class":82},[58,44755,383],{"class":92},[58,44757,33883],{"class":75},[58,44759,1318],{"class":92},[58,44761,89],{"class":82},[58,44763,33890],{"class":75},[58,44765,44766],{"class":60,"line":33893},[58,44767,33896],{"class":64},[58,44769,44770],{"class":60,"line":33899},[58,44771,33902],{"class":64},[58,44773,44774,44776,44778],{"class":60,"line":33905},[58,44775,33908],{"class":75},[58,44777,383],{"class":92},[58,44779,32958],{"class":75},[58,44781,44782],{"class":60,"line":33915},[58,44783,3046],{"emptyLinePlaceholder":720},[58,44785,44786],{"class":60,"line":33920},[58,44787,33923],{"class":64},[58,44789,44790,44792,44794,44796,44798],{"class":60,"line":33926},[58,44791,33929],{"class":75},[58,44793,383],{"class":92},[58,44795,33934],{"class":75},[58,44797,1318],{"class":92},[58,44799,33939],{"class":75},[58,44801,44802,44804,44806,44808,44810,44812,44814,44816,44818,44820,44822,44824,44826,44828,44830,44832,44834,44836],{"class":60,"line":33942},[58,44803,33095],{"class":82},[58,44805,793],{"class":75},[58,44807,33949],{"class":386},[58,44809,1681],{"class":82},[58,44811,33954],{"class":92},[58,44813,1730],{"class":82},[58,44815,1330],{"class":386},[58,44817,1681],{"class":82},[58,44819,33954],{"class":92},[58,44821,1730],{"class":82},[58,44823,33967],{"class":386},[58,44825,33970],{"class":75},[58,44827,33973],{"class":92},[58,44829,1692],{"class":82},[58,44831,33978],{"class":75},[58,44833,1114],{"class":92},[58,44835,1692],{"class":82},[58,44837,31141],{"class":75},[58,44839,44840],{"class":60,"line":33987},[58,44841,37377],{"class":64},[58,44843,44844],{"class":60,"line":33993},[58,44845,37382],{"class":64},[58,44847,44848,44850,44852],{"class":60,"line":33999},[58,44849,37387],{"class":75},[58,44851,34011],{"class":386},[58,44853,799],{"class":75},[58,44855,44856],{"class":60,"line":34005},[58,44857,34031],{"class":64},[58,44859,44860,44862,44864,44866,44868,44870],{"class":60,"line":34016},[58,44861,34037],{"class":75},[58,44863,383],{"class":92},[58,44865,34042],{"class":75},[58,44867,34045],{"class":5862},[58,44869,383],{"class":92},[58,44871,2195],{"class":75},[58,44873,44874,44876,44878,44880],{"class":60,"line":34022},[58,44875,34055],{"class":386},[58,44877,1644],{"class":75},[58,44879,34060],{"class":82},[58,44881,34063],{"class":75},[58,44883,44884,44886],{"class":60,"line":34028},[58,44885,34069],{"class":386},[58,44887,34072],{"class":75},[58,44889,44890,44892],{"class":60,"line":34034},[58,44891,34078],{"class":386},[58,44893,34081],{"class":75},[58,44895,44896,44898],{"class":60,"line":34052},[58,44897,34087],{"class":386},[58,44899,34090],{"class":75},[58,44901,44902,44904],{"class":60,"line":34066},[58,44903,34096],{"class":386},[58,44905,34099],{"class":75},[58,44907,44908],{"class":60,"line":34075},[58,44909,34105],{"class":75},[58,44911,44912],{"class":60,"line":34084},[58,44913,34111],{"class":64},[58,44915,44916,44918],{"class":60,"line":34093},[58,44917,4736],{"class":92},[58,44919,34119],{"class":75},[58,44921,44922],{"class":60,"line":34102},[58,44923,3046],{"emptyLinePlaceholder":720},[58,44925,44926],{"class":60,"line":34108},[58,44927,34130],{"class":64},[58,44929,44930,44932,44934],{"class":60,"line":34114},[58,44931,32591],{"class":92},[58,44933,34138],{"class":379},[58,44935,34141],{"class":75},[58,44937,44938],{"class":60,"line":34122},[58,44939,34147],{"class":64},[58,44941,44942,44944,44946,44948,44950,44952,44954,44956],{"class":60,"line":34127},[58,44943,34153],{"class":75},[58,44945,32337],{"class":5862},[58,44947,383],{"class":92},[58,44949,793],{"class":75},[58,44951,1284],{"class":82},[58,44953,1164],{"class":75},[58,44955,1079],{"class":82},[58,44957,31141],{"class":75},[58,44959,44960],{"class":60,"line":34133},[58,44961,34173],{"class":64},[58,44963,44964],{"class":60,"line":34144},[58,44965,34179],{"class":64},[58,44967,44968],{"class":60,"line":34150},[58,44969,34185],{"class":64},[58,44971,44972,44974,44976,44978,44980,44982,44984],{"class":60,"line":34170},[58,44973,32371],{"class":75},[58,44975,89],{"class":82},[58,44977,1164],{"class":75},[58,44979,867],{"class":82},[58,44981,1164],{"class":75},[58,44983,89],{"class":82},[58,44985,799],{"class":75},[58,44987,44988],{"class":60,"line":34176},[58,44989,34208],{"class":64},[58,44991,44992],{"class":60,"line":34182},[58,44993,34214],{"class":64},[58,44995,44996],{"class":60,"line":34188},[58,44997,34220],{"class":64},[58,44999,45000],{"class":60,"line":34205},[58,45001,34226],{"class":64},[58,45003,45004],{"class":60,"line":34211},[58,45005,34232],{"class":64},[58,45007,45008,45010,45012,45014,45016,45018,45020,45022,45024],{"class":60,"line":34217},[58,45009,34238],{"class":75},[58,45011,34241],{"class":386},[58,45013,34244],{"class":75},[58,45015,34247],{"class":386},[58,45017,1164],{"class":75},[58,45019,34252],{"class":5862},[58,45021,383],{"class":92},[58,45023,34257],{"class":386},[58,45025,799],{"class":75},[58,45027,45028,45030,45032,45034,45036,45038,45040,45042,45044],{"class":60,"line":34223},[58,45029,34238],{"class":75},[58,45031,34241],{"class":386},[58,45033,34269],{"class":75},[58,45035,34272],{"class":386},[58,45037,1164],{"class":75},[58,45039,34252],{"class":5862},[58,45041,383],{"class":92},[58,45043,34281],{"class":386},[58,45045,799],{"class":75},[58,45047,45048],{"class":60,"line":34229},[58,45049,34289],{"class":64},[58,45051,45052],{"class":60,"line":34235},[58,45053,34295],{"class":75},[58,45055,45056],{"class":60,"line":34262},[58,45057,34301],{"class":64},[58,45059,45060,45062,45064],{"class":60,"line":34286},[58,45061,34307],{"class":75},[58,45063,34310],{"class":386},[58,45065,799],{"class":75},[58,45067,45068,45070,45072],{"class":60,"line":34292},[58,45069,34318],{"class":75},[58,45071,34321],{"class":386},[58,45073,799],{"class":75},[58,45075,45076],{"class":60,"line":34298},[58,45077,34329],{"class":64},[58,45079,45080,45082,45084,45086,45088,45090,45092],{"class":60,"line":34304},[58,45081,32371],{"class":75},[58,45083,89],{"class":82},[58,45085,1164],{"class":75},[58,45087,867],{"class":82},[58,45089,1164],{"class":75},[58,45091,867],{"class":82},[58,45093,799],{"class":75},[58,45095,45096,45098,45100,45102,45104,45106,45108,45110,45112],{"class":60,"line":34315},[58,45097,34238],{"class":75},[58,45099,34241],{"class":386},[58,45101,34356],{"class":75},[58,45103,34247],{"class":386},[58,45105,1164],{"class":75},[58,45107,34252],{"class":5862},[58,45109,383],{"class":92},[58,45111,34367],{"class":386},[58,45113,799],{"class":75},[58,45115,45116,45118,45120,45122,45124,45126,45128,45130,45132],{"class":60,"line":34326},[58,45117,34238],{"class":75},[58,45119,34241],{"class":386},[58,45121,34379],{"class":75},[58,45123,34272],{"class":386},[58,45125,1164],{"class":75},[58,45127,34252],{"class":5862},[58,45129,383],{"class":92},[58,45131,34390],{"class":386},[58,45133,799],{"class":75},[58,45135,45136],{"class":60,"line":34332},[58,45137,34398],{"class":64},[58,45139,45140],{"class":60,"line":34349},[58,45141,34295],{"class":75},[58,45143,45144,45146,45148],{"class":60,"line":34372},[58,45145,34307],{"class":75},[58,45147,34241],{"class":386},[58,45149,799],{"class":75},[58,45151,45152,45154,45156],{"class":60,"line":34395},[58,45153,34318],{"class":75},[58,45155,34420],{"class":386},[58,45157,799],{"class":75},[58,45159,45160],{"class":60,"line":34401},[58,45161,34428],{"class":75},[58,45163,45164],{"class":60,"line":34406},[58,45165,3046],{"emptyLinePlaceholder":720},[58,45167,45168],{"class":60,"line":34415},[58,45169,34439],{"class":64},[58,45171,45172,45174,45176,45178,45180],{"class":60,"line":34425},[58,45173,2180],{"class":92},[58,45175,31864],{"class":82},[58,45177,3595],{"class":92},[58,45179,31869],{"class":386},[58,45181,4385],{"class":75},[58,45183,45184],{"class":60,"line":34431},[58,45185,34458],{"class":64},[58,45187,45188,45191,45193],{"class":60,"line":34436},[58,45189,45190],{"class":75},"    GoogLeNet",[58,45192,383],{"class":92},[58,45194,45195],{"class":75},"GoogLeNet(Inception)\n",[58,45197,45198,45200,45202],{"class":60,"line":34442},[58,45199,34475],{"class":75},[58,45201,383],{"class":92},[58,45203,34480],{"class":75},[58,45205,45206,45208,45210,45213,45215,45217,45219],{"class":60,"line":34455},[58,45207,34037],{"class":75},[58,45209,383],{"class":92},[58,45211,45212],{"class":75},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[58,45214,34493],{"class":5862},[58,45216,383],{"class":92},[58,45218,1735],{"class":82},[58,45220,799],{"class":75},[58,45222,45223],{"class":60,"line":34461},[58,45224,34505],{"class":75},[19,45226,45227],{"start":79},[22,45228,41218],{},[48,45230,45232],{"className":31022,"code":45231,"language":31024,"meta":53,"style":53},"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",[55,45233,45234,45240,45250,45260,45264,45274,45285,45289,45293,45297,45305,45321,45331,45347,45357,45371,45375,45385,45395,45405,45411,45415,45419,45427,45431,45447,45455,45459,45463,45471,45479,45483,45487,45491,45495,45501,45505,45515,45523,45531,45535,45539,45543,45551,45555,45571,45575,45579,45583,45595,45599,45611,45615,45619,45631,45635,45645,45649,45653,45665,45669,45677,45681,45685,45693,45697,45705,45709,45713,45717,45721,45725,45741,45749,45753,45757,45805,45811,45815,45825,45833,45841,45845,45849,45853,45857,45865,45869,45885,45889,45897,45905],{"__ignoreMap":53},[58,45235,45236,45238],{"class":60,"line":61},[58,45237,31036],{"class":92},[58,45239,31039],{"class":75},[58,45241,45242,45244,45246,45248],{"class":60,"line":68},[58,45243,31036],{"class":92},[58,45245,32059],{"class":75},[58,45247,32027],{"class":92},[58,45249,32064],{"class":75},[58,45251,45252,45254,45256,45258],{"class":60,"line":79},[58,45253,31381],{"class":92},[58,45255,32042],{"class":75},[58,45257,31036],{"class":92},[58,45259,32047],{"class":75},[58,45261,45262],{"class":60,"line":105},[58,45263,34566],{"class":64},[58,45265,45266,45268,45270,45272],{"class":60,"line":627},[58,45267,31381],{"class":92},[58,45269,32012],{"class":75},[58,45271,31036],{"class":92},[58,45273,32017],{"class":75},[58,45275,45276,45278,45280,45282],{"class":60,"line":509},[58,45277,31381],{"class":92},[58,45279,32558],{"class":75},[58,45281,31036],{"class":92},[58,45283,45284],{"class":75}," GoogLeNet,Inception\n",[58,45286,45287],{"class":60,"line":559},[58,45288,3046],{"emptyLinePlaceholder":720},[58,45290,45291],{"class":60,"line":654},[58,45292,3046],{"emptyLinePlaceholder":720},[58,45294,45295],{"class":60,"line":671},[58,45296,34595],{"class":64},[58,45298,45299,45301,45303],{"class":60,"line":677},[58,45300,32591],{"class":92},[58,45302,34602],{"class":379},[58,45304,32597],{"class":75},[58,45306,45307,45309,45311,45313,45315,45317,45319],{"class":60,"line":2260},[58,45308,34609],{"class":75},[58,45310,383],{"class":92},[58,45312,32099],{"class":75},[58,45314,32102],{"class":5862},[58,45316,383],{"class":92},[58,45318,32107],{"class":386},[58,45320,32110],{"class":75},[58,45322,45323,45325,45327,45329],{"class":60,"line":694},[58,45324,34626],{"class":5862},[58,45326,383],{"class":92},[58,45328,34631],{"class":82},[58,45330,32110],{"class":75},[58,45332,45333,45335,45337,45339,45341,45343,45345],{"class":60,"line":2270},[58,45334,34638],{"class":5862},[58,45336,383],{"class":92},[58,45338,32137],{"class":75},[58,45340,32140],{"class":5862},[58,45342,383],{"class":92},[58,45344,36093],{"class":82},[58,45346,32148],{"class":75},[58,45348,45349,45351,45353,45355],{"class":60,"line":2275},[58,45350,34655],{"class":5862},[58,45352,383],{"class":92},[58,45354,32120],{"class":82},[58,45356,799],{"class":75},[58,45358,45359,45361,45363,45365,45367,45369],{"class":60,"line":2289},[58,45360,34666],{"class":75},[58,45362,383],{"class":92},[58,45364,32178],{"class":75},[58,45366,32181],{"class":5862},[58,45368,383],{"class":92},[58,45370,34677],{"class":75},[58,45372,45373],{"class":60,"line":2294},[58,45374,34682],{"class":64},[58,45376,45377,45379,45381,45383],{"class":60,"line":2300},[58,45378,34687],{"class":5862},[58,45380,383],{"class":92},[58,45382,89],{"class":82},[58,45384,32110],{"class":75},[58,45386,45387,45389,45391,45393],{"class":60,"line":2321},[58,45388,34698],{"class":5862},[58,45390,383],{"class":92},[58,45392,32120],{"class":82},[58,45394,32110],{"class":75},[58,45396,45397,45399,45401,45403],{"class":60,"line":2326},[58,45398,34709],{"class":5862},[58,45400,383],{"class":92},[58,45402,979],{"class":82},[58,45404,799],{"class":75},[58,45406,45407,45409],{"class":60,"line":2340},[58,45408,4736],{"class":92},[58,45410,34722],{"class":75},[58,45412,45413],{"class":60,"line":2345},[58,45414,3046],{"emptyLinePlaceholder":720},[58,45416,45417],{"class":60,"line":2374},[58,45418,34731],{"class":64},[58,45420,45421,45423,45425],{"class":60,"line":2379},[58,45422,32591],{"class":92},[58,45424,34738],{"class":379},[58,45426,34741],{"class":75},[58,45428,45429],{"class":60,"line":2396},[58,45430,34746],{"class":64},[58,45432,45433,45435,45437,45439,45441,45443,45445],{"class":60,"line":2401},[58,45434,31881],{"class":75},[58,45436,383],{"class":92},[58,45438,31888],{"class":386},[58,45440,2351],{"class":92},[58,45442,31893],{"class":75},[58,45444,2348],{"class":92},[58,45446,34763],{"class":386},[58,45448,45449,45451,45453],{"class":60,"line":2406},[58,45450,31933],{"class":75},[58,45452,383],{"class":92},[58,45454,32933],{"class":75},[58,45456,45457],{"class":60,"line":2411},[58,45458,3046],{"emptyLinePlaceholder":720},[58,45460,45461],{"class":60,"line":2425},[58,45462,34780],{"class":64},[58,45464,45465,45467,45469],{"class":60,"line":2430},[58,45466,34785],{"class":75},[58,45468,383],{"class":92},[58,45470,32986],{"class":82},[58,45472,45473,45475,45477],{"class":60,"line":3223},[58,45474,34794],{"class":75},[58,45476,383],{"class":92},[58,45478,3731],{"class":82},[58,45480,45481],{"class":60,"line":3237},[58,45482,3046],{"emptyLinePlaceholder":720},[58,45484,45485],{"class":60,"line":3245},[58,45486,34807],{"class":64},[58,45488,45489],{"class":60,"line":3250},[58,45490,34812],{"class":64},[58,45492,45493],{"class":60,"line":3256},[58,45494,34817],{"class":64},[58,45496,45497,45499],{"class":60,"line":3262},[58,45498,34822],{"class":92},[58,45500,33528],{"class":75},[58,45502,45503],{"class":60,"line":3267},[58,45504,34829],{"class":64},[58,45506,45507,45509,45511,45513],{"class":60,"line":8594},[58,45508,4049],{"class":92},[58,45510,34836],{"class":75},[58,45512,26687],{"class":92},[58,45514,34841],{"class":75},[58,45516,45517,45519,45521],{"class":60,"line":8618},[58,45518,34846],{"class":75},[58,45520,383],{"class":92},[58,45522,34851],{"class":75},[58,45524,45525,45527,45529],{"class":60,"line":8623},[58,45526,34856],{"class":75},[58,45528,383],{"class":92},[58,45530,34861],{"class":75},[58,45532,45533],{"class":60,"line":8629},[58,45534,34866],{"class":64},[58,45536,45537],{"class":60,"line":8656},[58,45538,33519],{"class":75},[58,45540,45541],{"class":60,"line":8661},[58,45542,34875],{"class":64},[58,45544,45545,45547,45549],{"class":60,"line":8667},[58,45546,33304],{"class":75},[58,45548,383],{"class":92},[58,45550,34884],{"class":75},[58,45552,45553],{"class":60,"line":8679},[58,45554,34889],{"class":64},[58,45556,45557,45559,45561,45563,45565,45567,45569],{"class":60,"line":8691},[58,45558,33321],{"class":75},[58,45560,383],{"class":92},[58,45562,33326],{"class":75},[58,45564,33329],{"class":5862},[58,45566,383],{"class":92},[58,45568,89],{"class":82},[58,45570,799],{"class":75},[58,45572,45573],{"class":60,"line":8703},[58,45574,34910],{"class":64},[58,45576,45577],{"class":60,"line":10361},[58,45578,34915],{"class":64},[58,45580,45581],{"class":60,"line":10386},[58,45582,34920],{"class":64},[58,45584,45585,45587,45589,45591,45593],{"class":60,"line":10409},[58,45586,34925],{"class":75},[58,45588,10122],{"class":92},[58,45590,33431],{"class":75},[58,45592,3595],{"class":92},[58,45594,34934],{"class":75},[58,45596,45597],{"class":60,"line":10433},[58,45598,34939],{"class":64},[58,45600,45601,45603,45605,45607,45609],{"class":60,"line":10438},[58,45602,34944],{"class":75},[58,45604,10122],{"class":92},[58,45606,34949],{"class":75},[58,45608,979],{"class":82},[58,45610,799],{"class":75},[58,45612,45613],{"class":60,"line":10443},[58,45614,3046],{"emptyLinePlaceholder":720},[58,45616,45617],{"class":60,"line":10448},[58,45618,34962],{"class":64},[58,45620,45621,45623,45625,45627,45629],{"class":60,"line":10457},[58,45622,34967],{"class":75},[58,45624,383],{"class":92},[58,45626,34972],{"class":75},[58,45628,1370],{"class":92},[58,45630,34977],{"class":75},[58,45632,45633],{"class":60,"line":10462},[58,45634,34982],{"class":64},[58,45636,45637,45639,45641,45643],{"class":60,"line":10468},[58,45638,33095],{"class":82},[58,45640,793],{"class":75},[58,45642,34991],{"class":386},[58,45644,34994],{"class":75},[58,45646,45647],{"class":60,"line":10489},[58,45648,3046],{"emptyLinePlaceholder":720},[58,45650,45651],{"class":60,"line":10495},[58,45652,35003],{"class":64},[58,45654,45655,45657,45659,45661,45663],{"class":60,"line":10509},[58,45656,2180],{"class":92},[58,45658,31864],{"class":82},[58,45660,3595],{"class":92},[58,45662,31869],{"class":386},[58,45664,4385],{"class":75},[58,45666,45667],{"class":60,"line":10515},[58,45668,35020],{"class":64},[58,45670,45671,45673,45675],{"class":60,"line":10542},[58,45672,31933],{"class":75},[58,45674,383],{"class":92},[58,45676,45195],{"class":75},[58,45678,45679],{"class":60,"line":10551},[58,45680,35033],{"class":64},[58,45682,45683],{"class":60,"line":10557},[58,45684,35038],{"class":64},[58,45686,45687,45689,45691],{"class":60,"line":10565},[58,45688,35043],{"class":75},[58,45690,35046],{"class":386},[58,45692,31141],{"class":75},[58,45694,45695],{"class":60,"line":10570},[58,45696,35053],{"class":64},[58,45698,45699,45701,45703],{"class":60,"line":17247},[58,45700,34666],{"class":75},[58,45702,383],{"class":92},[58,45704,35062],{"class":75},[58,45706,45707],{"class":60,"line":17253},[58,45708,35067],{"class":64},[58,45710,45711],{"class":60,"line":17276},[58,45712,35072],{"class":75},[58,45714,45715],{"class":60,"line":17282},[58,45716,3046],{"emptyLinePlaceholder":720},[58,45718,45719],{"class":60,"line":17305},[58,45720,35081],{"class":64},[58,45722,45723],{"class":60,"line":17319},[58,45724,35086],{"class":64},[58,45726,45727,45729,45731,45733,45735,45737,45739],{"class":60,"line":17339},[58,45728,31881],{"class":75},[58,45730,383],{"class":92},[58,45732,31888],{"class":386},[58,45734,2351],{"class":92},[58,45736,31893],{"class":75},[58,45738,2348],{"class":92},[58,45740,34763],{"class":386},[58,45742,45743,45745,45747],{"class":60,"line":17345},[58,45744,31933],{"class":75},[58,45746,383],{"class":92},[58,45748,32933],{"class":75},[58,45750,45751],{"class":60,"line":17356},[58,45752,35115],{"class":64},[58,45754,45755],{"class":60,"line":17379},[58,45756,35120],{"class":64},[58,45758,45759,45761,45763,45765,45767,45769,45771,45773,45775,45777,45779,45781,45783,45785,45787,45789,45791,45793,45795,45797,45799,45801,45803],{"class":60,"line":17401},[58,45760,35125],{"class":75},[58,45762,383],{"class":92},[58,45764,1675],{"class":75},[58,45766,35132],{"class":386},[58,45768,1164],{"class":75},[58,45770,35137],{"class":386},[58,45772,1164],{"class":75},[58,45774,35142],{"class":386},[58,45776,1164],{"class":75},[58,45778,35147],{"class":386},[58,45780,1164],{"class":75},[58,45782,35152],{"class":386},[58,45784,1164],{"class":75},[58,45786,35157],{"class":386},[58,45788,1164],{"class":75},[58,45790,35162],{"class":386},[58,45792,1164],{"class":75},[58,45794,35167],{"class":386},[58,45796,1164],{"class":75},[58,45798,35172],{"class":386},[58,45800,1164],{"class":75},[58,45802,35177],{"class":386},[58,45804,33890],{"class":75},[58,45806,45807,45809],{"class":60,"line":17406},[58,45808,34822],{"class":92},[58,45810,33528],{"class":75},[58,45812,45813],{"class":60,"line":17412},[58,45814,35190],{"class":64},[58,45816,45817,45819,45821,45823],{"class":60,"line":17426},[58,45818,4049],{"class":92},[58,45820,35197],{"class":75},[58,45822,26687],{"class":92},[58,45824,34841],{"class":75},[58,45826,45827,45829,45831],{"class":60,"line":17439},[58,45828,33254],{"class":75},[58,45830,383],{"class":92},[58,45832,33259],{"class":75},[58,45834,45835,45837,45839],{"class":60,"line":17444},[58,45836,33269],{"class":75},[58,45838,383],{"class":92},[58,45840,33274],{"class":75},[58,45842,45843],{"class":60,"line":17458},[58,45844,3046],{"emptyLinePlaceholder":720},[58,45846,45847],{"class":60,"line":17463},[58,45848,35226],{"class":64},[58,45850,45851],{"class":60,"line":17469},[58,45852,33519],{"class":75},[58,45854,45855],{"class":60,"line":17474},[58,45856,35235],{"class":64},[58,45858,45859,45861,45863],{"class":60,"line":17488},[58,45860,33304],{"class":75},[58,45862,383],{"class":92},[58,45864,33309],{"class":75},[58,45866,45867],{"class":60,"line":17493},[58,45868,35248],{"class":64},[58,45870,45871,45873,45875,45877,45879,45881,45883],{"class":60,"line":17498},[58,45872,33321],{"class":75},[58,45874,383],{"class":92},[58,45876,33326],{"class":75},[58,45878,33329],{"class":5862},[58,45880,383],{"class":92},[58,45882,89],{"class":82},[58,45884,799],{"class":75},[58,45886,45887],{"class":60,"line":17512},[58,45888,35269],{"class":64},[58,45890,45891,45893,45895],{"class":60,"line":17524},[58,45892,35274],{"class":75},[58,45894,383],{"class":92},[58,45896,35279],{"class":75},[58,45898,45899,45901,45903],{"class":60,"line":17529},[58,45900,35284],{"class":75},[58,45902,383],{"class":92},[58,45904,35289],{"class":75},[58,45906,45907,45909,45911,45913,45915,45917,45919,45921],{"class":60,"line":17542},[58,45908,35294],{"class":82},[58,45910,793],{"class":75},[58,45912,35299],{"class":386},[58,45914,35302],{"class":75},[58,45916,35305],{"class":386},[58,45918,1164],{"class":75},[58,45920,35310],{"class":386},[58,45922,35313],{"class":75},[114,45924,45926],{"id":45925},"_24训练自己的数据集","2.4.训练自己的数据集",[175,45928,45929],{},"猫狗分类任务",[175,45931,45932],{},"划分数据集和验证集",[48,45934,45936],{"className":31022,"code":45935,"language":31024,"meta":53,"style":53},"# 创建脚本，用于划分数据集和验证集\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",[55,45937,45938,45943,45950,45955,45966,45973,45977,45987,46001,46010,46014,46019,46029,46049,46053,46058,46068,46079,46092,46096,46101,46110,46120,46131,46135,46140,46150,46154,46159,46164,46169,46174,46179,46183,46193,46220,46233,46245,46272,46277,46282,46296,46301,46313,46328,46343,46351,46355,46360,46366,46378,46391,46396,46401,46406,46456,46462,46466],{"__ignoreMap":53},[58,45939,45940],{"class":60,"line":61},[58,45941,45942],{"class":64},"# 创建脚本，用于划分数据集和验证集\n",[58,45944,45945,45947],{"class":60,"line":68},[58,45946,31036],{"class":92},[58,45948,45949],{"class":75}," os\n",[58,45951,45952],{"class":60,"line":79},[58,45953,45954],{"class":64},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[58,45956,45957,45959,45962,45964],{"class":60,"line":105},[58,45958,31381],{"class":92},[58,45960,45961],{"class":75}," shutil ",[58,45963,31036],{"class":92},[58,45965,32466],{"class":75},[58,45967,45968,45970],{"class":60,"line":627},[58,45969,31036],{"class":92},[58,45971,45972],{"class":75}," random\n",[58,45974,45975],{"class":60,"line":509},[58,45976,3046],{"emptyLinePlaceholder":720},[58,45978,45979,45981,45984],{"class":60,"line":559},[58,45980,32591],{"class":92},[58,45982,45983],{"class":379}," mkfile",[58,45985,45986],{"class":75},"(file):\n",[58,45988,45989,45991,45993,45996,45999],{"class":60,"line":654},[58,45990,3747],{"class":92},[58,45992,39574],{"class":92},[58,45994,45995],{"class":75}," os.path.exists(",[58,45997,45998],{"class":5862},"file",[58,46000,31430],{"class":75},[58,46002,46003,46006,46008],{"class":60,"line":671},[58,46004,46005],{"class":75},"        os.makedirs(",[58,46007,45998],{"class":5862},[58,46009,799],{"class":75},[58,46011,46012],{"class":60,"line":677},[58,46013,3046],{"emptyLinePlaceholder":720},[58,46015,46016],{"class":60,"line":2260},[58,46017,46018],{"class":64},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[58,46020,46021,46024,46026],{"class":60,"line":694},[58,46022,46023],{"class":75},"file_path",[58,46025,383],{"class":92},[58,46027,46028],{"class":386},"'data_cat_dog'\n",[58,46030,46031,46034,46036,46039,46041,46044,46046],{"class":60,"line":2270},[58,46032,46033],{"class":75},"flower_class",[58,46035,383],{"class":92},[58,46037,46038],{"class":75},"[cla ",[58,46040,3671],{"class":92},[58,46042,46043],{"class":75}," cla ",[58,46045,26687],{"class":92},[58,46047,46048],{"class":75}," os.listdir(file_path)]\n",[58,46050,46051],{"class":60,"line":2275},[58,46052,3046],{"emptyLinePlaceholder":720},[58,46054,46055],{"class":60,"line":2289},[58,46056,46057],{"class":64},"# 创建训练集train文件夹\n",[58,46059,46060,46063,46066],{"class":60,"line":2294},[58,46061,46062],{"class":75},"mkfile(",[58,46064,46065],{"class":386},"'data\u002Ftrain'",[58,46067,799],{"class":75},[58,46069,46070,46072,46074,46076],{"class":60,"line":2300},[58,46071,3671],{"class":92},[58,46073,46043],{"class":75},[58,46075,26687],{"class":92},[58,46077,46078],{"class":75}," flower_class:\n",[58,46080,46081,46084,46087,46089],{"class":60,"line":2321},[58,46082,46083],{"class":75},"    mkfile(",[58,46085,46086],{"class":386},"'data\u002Ftrain\u002F'",[58,46088,1267],{"class":92},[58,46090,46091],{"class":75},"cla)\n",[58,46093,46094],{"class":60,"line":2326},[58,46095,3046],{"emptyLinePlaceholder":720},[58,46097,46098],{"class":60,"line":2340},[58,46099,46100],{"class":64},"# 创建验证集val文件夹\n",[58,46102,46103,46105,46108],{"class":60,"line":2345},[58,46104,46062],{"class":75},[58,46106,46107],{"class":386},"'data\u002Ftest'",[58,46109,799],{"class":75},[58,46111,46112,46114,46116,46118],{"class":60,"line":2374},[58,46113,3671],{"class":92},[58,46115,46043],{"class":75},[58,46117,26687],{"class":92},[58,46119,46078],{"class":75},[58,46121,46122,46124,46127,46129],{"class":60,"line":2379},[58,46123,46083],{"class":75},[58,46125,46126],{"class":386},"'data\u002Ftest\u002F'",[58,46128,1267],{"class":92},[58,46130,46091],{"class":75},[58,46132,46133],{"class":60,"line":2396},[58,46134,3046],{"emptyLinePlaceholder":720},[58,46136,46137],{"class":60,"line":2401},[58,46138,46139],{"class":64},"# 划分比例，训练集：测试集=9：1\n",[58,46141,46142,46145,46147],{"class":60,"line":2406},[58,46143,46144],{"class":75},"split_rate",[58,46146,383],{"class":92},[58,46148,46149],{"class":82},"0.1\n",[58,46151,46152],{"class":60,"line":2411},[58,46153,3046],{"emptyLinePlaceholder":720},[58,46155,46156],{"class":60,"line":2425},[58,46157,46158],{"class":64},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[58,46160,46161],{"class":60,"line":2430},[58,46162,46163],{"class":64},"# cla_path：当前类别的原始图片路径\n",[58,46165,46166],{"class":60,"line":3223},[58,46167,46168],{"class":64},"# images：当前类别下所有图片的文件名列表\n",[58,46170,46171],{"class":60,"line":3237},[58,46172,46173],{"class":64},"# num：该类别图片总数\n",[58,46175,46176],{"class":60,"line":3245},[58,46177,46178],{"class":64},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[58,46180,46181],{"class":60,"line":3250},[58,46182,3046],{"emptyLinePlaceholder":720},[58,46184,46185,46187,46189,46191],{"class":60,"line":3256},[58,46186,3671],{"class":92},[58,46188,46043],{"class":75},[58,46190,26687],{"class":92},[58,46192,46078],{"class":75},[58,46194,46195,46198,46200,46203,46205,46208,46211,46213,46215,46217],{"class":60,"line":3262},[58,46196,46197],{"class":75},"    cla_path ",[58,46199,383],{"class":92},[58,46201,46202],{"class":75}," file_path ",[58,46204,1267],{"class":92},[58,46206,46207],{"class":386}," '\u002F'",[58,46209,46210],{"class":92}," +",[58,46212,46043],{"class":75},[58,46214,1267],{"class":92},[58,46216,46207],{"class":386},[58,46218,46219],{"class":64},"  # 某一类别的子目录\n",[58,46221,46222,46225,46227,46230],{"class":60,"line":3267},[58,46223,46224],{"class":75},"    images ",[58,46226,383],{"class":92},[58,46228,46229],{"class":75}," os.listdir(cla_path)  ",[58,46231,46232],{"class":64},"# iamges 列表存储了该目录下所有图像的名称\n",[58,46234,46235,46238,46240,46242],{"class":60,"line":8594},[58,46236,46237],{"class":75},"    num ",[58,46239,383],{"class":92},[58,46241,7977],{"class":82},[58,46243,46244],{"class":75},"(images)\n",[58,46246,46247,46250,46252,46255,46257,46259,46261,46264,46266,46269],{"class":60,"line":8618},[58,46248,46249],{"class":75},"    eval_index ",[58,46251,383],{"class":92},[58,46253,46254],{"class":75}," random.sample(images, ",[58,46256,1279],{"class":5862},[58,46258,383],{"class":92},[58,46260,796],{"class":82},[58,46262,46263],{"class":75},"(num ",[58,46265,1241],{"class":92},[58,46267,46268],{"class":75}," split_rate))  ",[58,46270,46271],{"class":64},"# 从images列表中随机抽取 k 个图像名称\n",[58,46273,46274],{"class":60,"line":8623},[58,46275,46276],{"class":64},"    # 遍历该类别下的所有图片\n",[58,46278,46279],{"class":60,"line":8629},[58,46280,46281],{"class":64},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[58,46283,46284,46286,46289,46291,46293],{"class":60,"line":8656},[58,46285,3847],{"class":92},[58,46287,46288],{"class":75}," index, image ",[58,46290,26687],{"class":92},[58,46292,32250],{"class":82},[58,46294,46295],{"class":75},"(images):\n",[58,46297,46298],{"class":60,"line":8661},[58,46299,46300],{"class":64},"        # eval_index 中保存验证集val的图像名称\n",[58,46302,46303,46305,46308,46310],{"class":60,"line":8667},[58,46304,3143],{"class":92},[58,46306,46307],{"class":75}," image ",[58,46309,26687],{"class":92},[58,46311,46312],{"class":75}," eval_index:\n",[58,46314,46315,46318,46320,46323,46325],{"class":60,"line":8679},[58,46316,46317],{"class":75},"            image_path ",[58,46319,383],{"class":92},[58,46321,46322],{"class":75}," cla_path ",[58,46324,1267],{"class":92},[58,46326,46327],{"class":75}," image\n",[58,46329,46330,46333,46335,46338,46340],{"class":60,"line":8691},[58,46331,46332],{"class":75},"            new_path ",[58,46334,383],{"class":92},[58,46336,46337],{"class":386}," 'data\u002Ftest\u002F'",[58,46339,46210],{"class":92},[58,46341,46342],{"class":75}," cla\n",[58,46344,46345,46348],{"class":60,"line":8703},[58,46346,46347],{"class":75},"            copy(image_path, new_path)  ",[58,46349,46350],{"class":64},"# 将选中的图像复制到新路径\n",[58,46352,46353],{"class":60,"line":10361},[58,46354,3046],{"emptyLinePlaceholder":720},[58,46356,46357],{"class":60,"line":10386},[58,46358,46359],{"class":64},"        # 其余的图像保存在训练集train中\n",[58,46361,46362,46364],{"class":60,"line":10409},[58,46363,3180],{"class":92},[58,46365,4385],{"class":75},[58,46367,46368,46370,46372,46374,46376],{"class":60,"line":10433},[58,46369,46317],{"class":75},[58,46371,383],{"class":92},[58,46373,46322],{"class":75},[58,46375,1267],{"class":92},[58,46377,46327],{"class":75},[58,46379,46380,46382,46384,46387,46389],{"class":60,"line":10438},[58,46381,46332],{"class":75},[58,46383,383],{"class":92},[58,46385,46386],{"class":386}," 'data\u002Ftrain\u002F'",[58,46388,46210],{"class":92},[58,46390,46342],{"class":75},[58,46392,46393],{"class":60,"line":10443},[58,46394,46395],{"class":75},"            copy(image_path, new_path)\n",[58,46397,46398],{"class":60,"line":10448},[58,46399,46400],{"class":64},"            # 打印进度条信息\n",[58,46402,46403],{"class":60,"line":10457},[58,46404,46405],{"class":64},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[58,46407,46408,46410,46412,46414,46417,46419,46421,46424,46426,46428,46430,46433,46436,46438,46440,46443,46446,46448,46450,46453],{"class":60,"line":10462},[58,46409,33095],{"class":82},[58,46411,793],{"class":75},[58,46413,1037],{"class":386},[58,46415,46416],{"class":82},"\\r",[58,46418,1675],{"class":386},[58,46420,33103],{"class":82},[58,46422,46423],{"class":386},"] processing [",[58,46425,33103],{"class":82},[58,46427,1370],{"class":386},[58,46429,33103],{"class":82},[58,46431,46432],{"class":386},"]\"",[58,46434,46435],{"class":75},".format(cla, index ",[58,46437,1267],{"class":92},[58,46439,25762],{"class":82},[58,46441,46442],{"class":75},", num), ",[58,46444,46445],{"class":5862},"end",[58,46447,383],{"class":92},[58,46449,8298],{"class":386},[58,46451,46452],{"class":75},")  ",[58,46454,46455],{"class":64},"# processing bar\n",[58,46457,46458,46460],{"class":60,"line":10468},[58,46459,31943],{"class":82},[58,46461,2622],{"class":75},[58,46463,46464],{"class":60,"line":10489},[58,46465,3046],{"emptyLinePlaceholder":720},[58,46467,46468,46470,46472,46475],{"class":60,"line":10495},[58,46469,31059],{"class":82},[58,46471,793],{"class":75},[58,46473,46474],{"class":386},"\"processing done!\"",[58,46476,799],{"class":75},[175,46478,46479],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22641,46481,46483],{"id":46482},"_242模型代码","2.4.2.模型代码",[175,46485,46486],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[48,46488,46490],{"className":31022,"code":46489,"language":31024,"meta":53,"style":53},"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",[55,46491,46492,46498,46508,46518,46522,46538,46546,46560,46570,46574,46604,46608,46642,46688,46692,46726,46772,46776,46780,46814,46844,46848,46856,46870,46892,46914,46932,46936,46950,46954,46958,46974,46978,46986,47000,47010,47054,47058,47086,47090,47100,47128,47132,47168,47172,47200,47204,47214,47246,47278,47306,47310,47320,47352,47384,47416,47448,47480,47508,47512,47522,47554,47586,47598,47602,47614,47618,47622,47634,47642,47662,47666,47670,47674,47678,47682,47686,47700,47708,47716,47728,47742,47750,47754,47762,47772,47782,47792,47802,47812,47818,47822,47826,47838,47858,47866],{"__ignoreMap":53},[58,46493,46494,46496],{"class":60,"line":61},[58,46495,31036],{"class":92},[58,46497,31039],{"class":75},[58,46499,46500,46502,46504,46506],{"class":60,"line":68},[58,46501,31381],{"class":92},[58,46503,31384],{"class":75},[58,46505,31036],{"class":92},[58,46507,31389],{"class":75},[58,46509,46510,46512,46514,46516],{"class":60,"line":79},[58,46511,31381],{"class":92},[58,46513,31401],{"class":75},[58,46515,31036],{"class":92},[58,46517,31406],{"class":75},[58,46519,46520],{"class":60,"line":105},[58,46521,3046],{"emptyLinePlaceholder":720},[58,46523,46524,46526,46528,46530,46532,46534,46536],{"class":60,"line":627},[58,46525,15338],{"class":92},[58,46527,42137],{"class":379},[58,46529,793],{"class":75},[58,46531,31422],{"class":379},[58,46533,1344],{"class":75},[58,46535,31427],{"class":379},[58,46537,31430],{"class":75},[58,46539,46540,46542,46544],{"class":60,"line":509},[58,46541,31445],{"class":92},[58,46543,31448],{"class":82},[58,46545,42156],{"class":75},[58,46547,46548,46550,46552,46554,46556,46558],{"class":60,"line":559},[58,46549,31461],{"class":82},[58,46551,42163],{"class":75},[58,46553,31467],{"class":82},[58,46555,31470],{"class":75},[58,46557,31473],{"class":82},[58,46559,2622],{"class":75},[58,46561,46562,46564,46566,46568],{"class":60,"line":654},[58,46563,31489],{"class":82},[58,46565,35415],{"class":75},[58,46567,383],{"class":92},[58,46569,35420],{"class":75},[58,46571,46572],{"class":60,"line":671},[58,46573,42186],{"class":64},[58,46575,46576,46578,46580,46582,46584,46586,46588,46590,46592,46594,46596,46598,46600,46602],{"class":60,"line":677},[58,46577,31489],{"class":82},[58,46579,42193],{"class":75},[58,46581,383],{"class":92},[58,46583,31497],{"class":75},[58,46585,31500],{"class":5862},[58,46587,383],{"class":92},[58,46589,42204],{"class":75},[58,46591,31509],{"class":5862},[58,46593,383],{"class":92},[58,46595,42211],{"class":75},[58,46597,31518],{"class":5862},[58,46599,383],{"class":92},[58,46601,89],{"class":82},[58,46603,799],{"class":75},[58,46605,46606],{"class":60,"line":2260},[58,46607,42224],{"class":64},[58,46609,46610,46612,46614,46616,46618,46620,46622,46624,46626,46628,46630,46632,46634,46636,46638,46640],{"class":60,"line":694},[58,46611,31489],{"class":82},[58,46613,42231],{"class":75},[58,46615,383],{"class":92},[58,46617,31497],{"class":75},[58,46619,31500],{"class":5862},[58,46621,383],{"class":92},[58,46623,42204],{"class":75},[58,46625,31509],{"class":5862},[58,46627,383],{"class":92},[58,46629,42248],{"class":75},[58,46631,979],{"class":82},[58,46633,42253],{"class":75},[58,46635,31518],{"class":5862},[58,46637,383],{"class":92},[58,46639,89],{"class":82},[58,46641,799],{"class":75},[58,46643,46644,46646,46648,46650,46652,46654,46656,46658,46660,46662,46664,46666,46668,46670,46672,46674,46676,46678,46680,46682,46684,46686],{"class":60,"line":2270},[58,46645,31489],{"class":82},[58,46647,42268],{"class":75},[58,46649,383],{"class":92},[58,46651,31497],{"class":75},[58,46653,31500],{"class":5862},[58,46655,383],{"class":92},[58,46657,42248],{"class":75},[58,46659,979],{"class":82},[58,46661,42253],{"class":75},[58,46663,31509],{"class":5862},[58,46665,383],{"class":92},[58,46667,42248],{"class":75},[58,46669,89],{"class":82},[58,46671,42253],{"class":75},[58,46673,31518],{"class":5862},[58,46675,383],{"class":92},[58,46677,861],{"class":82},[58,46679,1164],{"class":75},[58,46681,31527],{"class":5862},[58,46683,383],{"class":92},[58,46685,89],{"class":82},[58,46687,799],{"class":75},[58,46689,46690],{"class":60,"line":2275},[58,46691,42313],{"class":64},[58,46693,46694,46696,46698,46700,46702,46704,46706,46708,46710,46712,46714,46716,46718,46720,46722,46724],{"class":60,"line":2289},[58,46695,31489],{"class":82},[58,46697,42320],{"class":75},[58,46699,383],{"class":92},[58,46701,31497],{"class":75},[58,46703,31500],{"class":5862},[58,46705,383],{"class":92},[58,46707,42204],{"class":75},[58,46709,31509],{"class":5862},[58,46711,383],{"class":92},[58,46713,42337],{"class":75},[58,46715,979],{"class":82},[58,46717,42253],{"class":75},[58,46719,31518],{"class":5862},[58,46721,383],{"class":92},[58,46723,89],{"class":82},[58,46725,799],{"class":75},[58,46727,46728,46730,46732,46734,46736,46738,46740,46742,46744,46746,46748,46750,46752,46754,46756,46758,46760,46762,46764,46766,46768,46770],{"class":60,"line":2294},[58,46729,31489],{"class":82},[58,46731,42356],{"class":75},[58,46733,383],{"class":92},[58,46735,31497],{"class":75},[58,46737,31500],{"class":5862},[58,46739,383],{"class":92},[58,46741,42337],{"class":75},[58,46743,979],{"class":82},[58,46745,42253],{"class":75},[58,46747,31509],{"class":5862},[58,46749,383],{"class":92},[58,46751,42337],{"class":75},[58,46753,89],{"class":82},[58,46755,42253],{"class":75},[58,46757,31518],{"class":5862},[58,46759,383],{"class":92},[58,46761,1105],{"class":82},[58,46763,1164],{"class":75},[58,46765,31527],{"class":5862},[58,46767,383],{"class":92},[58,46769,867],{"class":82},[58,46771,799],{"class":75},[58,46773,46774],{"class":60,"line":2300},[58,46775,42401],{"class":64},[58,46777,46778],{"class":60,"line":2321},[58,46779,42406],{"class":64},[58,46781,46782,46784,46786,46788,46790,46792,46794,46796,46798,46800,46802,46804,46806,46808,46810,46812],{"class":60,"line":2326},[58,46783,31489],{"class":82},[58,46785,42413],{"class":75},[58,46787,383],{"class":92},[58,46789,35473],{"class":75},[58,46791,31518],{"class":5862},[58,46793,383],{"class":92},[58,46795,861],{"class":82},[58,46797,1164],{"class":75},[58,46799,31573],{"class":5862},[58,46801,383],{"class":92},[58,46803,89],{"class":82},[58,46805,1164],{"class":75},[58,46807,31527],{"class":5862},[58,46809,383],{"class":92},[58,46811,89],{"class":82},[58,46813,799],{"class":75},[58,46815,46816,46818,46820,46822,46824,46826,46828,46830,46832,46834,46836,46838,46840,46842],{"class":60,"line":2340},[58,46817,31489],{"class":82},[58,46819,42448],{"class":75},[58,46821,383],{"class":92},[58,46823,31497],{"class":75},[58,46825,31500],{"class":5862},[58,46827,383],{"class":92},[58,46829,42204],{"class":75},[58,46831,31509],{"class":5862},[58,46833,383],{"class":92},[58,46835,42465],{"class":75},[58,46837,31518],{"class":5862},[58,46839,383],{"class":92},[58,46841,89],{"class":82},[58,46843,799],{"class":75},[58,46845,46846],{"class":60,"line":2345},[58,46847,3046],{"emptyLinePlaceholder":720},[58,46849,46850,46852,46854],{"class":60,"line":2374},[58,46851,31445],{"class":92},[58,46853,31737],{"class":379},[58,46855,31740],{"class":75},[58,46857,46858,46860,46862,46864,46866,46868],{"class":60,"line":2379},[58,46859,42490],{"class":75},[58,46861,383],{"class":92},[58,46863,31467],{"class":82},[58,46865,35828],{"class":75},[58,46867,31467],{"class":82},[58,46869,42501],{"class":75},[58,46871,46872,46874,46876,46878,46880,46882,46884,46886,46888,46890],{"class":60,"line":2396},[58,46873,7731],{"class":75},[58,46875,383],{"class":92},[58,46877,31467],{"class":82},[58,46879,35828],{"class":75},[58,46881,31467],{"class":82},[58,46883,42516],{"class":75},[58,46885,31467],{"class":82},[58,46887,35828],{"class":75},[58,46889,31467],{"class":82},[58,46891,42525],{"class":75},[58,46893,46894,46896,46898,46900,46902,46904,46906,46908,46910,46912],{"class":60,"line":2401},[58,46895,42530],{"class":75},[58,46897,383],{"class":92},[58,46899,31467],{"class":82},[58,46901,35828],{"class":75},[58,46903,31467],{"class":82},[58,46905,42541],{"class":75},[58,46907,31467],{"class":82},[58,46909,35828],{"class":75},[58,46911,31467],{"class":82},[58,46913,42550],{"class":75},[58,46915,46916,46918,46920,46922,46924,46926,46928,46930],{"class":60,"line":2406},[58,46917,42555],{"class":75},[58,46919,383],{"class":92},[58,46921,31467],{"class":82},[58,46923,35828],{"class":75},[58,46925,31467],{"class":82},[58,46927,42566],{"class":75},[58,46929,31467],{"class":82},[58,46931,42571],{"class":75},[58,46933,46934],{"class":60,"line":2411},[58,46935,42576],{"class":64},[58,46937,46938,46940,46942,46944,46946,46948],{"class":60,"line":2425},[58,46939,15396],{"class":92},[58,46941,42583],{"class":75},[58,46943,33329],{"class":5862},[58,46945,383],{"class":92},[58,46947,89],{"class":82},[58,46949,799],{"class":75},[58,46951,46952],{"class":60,"line":2430},[58,46953,3046],{"emptyLinePlaceholder":720},[58,46955,46956],{"class":60,"line":3223},[58,46957,42604],{"class":64},[58,46959,46960,46962,46964,46966,46968,46970,46972],{"class":60,"line":3237},[58,46961,15338],{"class":92},[58,46963,42611],{"class":379},[58,46965,793],{"class":75},[58,46967,31422],{"class":379},[58,46969,1344],{"class":75},[58,46971,31427],{"class":379},[58,46973,31430],{"class":75},[58,46975,46976],{"class":60,"line":3245},[58,46977,42626],{"class":64},[58,46979,46980,46982,46984],{"class":60,"line":3250},[58,46981,31445],{"class":92},[58,46983,31448],{"class":82},[58,46985,42635],{"class":75},[58,46987,46988,46990,46992,46994,46996,46998],{"class":60,"line":3256},[58,46989,31461],{"class":82},[58,46991,42642],{"class":75},[58,46993,31467],{"class":82},[58,46995,31470],{"class":75},[58,46997,31473],{"class":82},[58,46999,2622],{"class":75},[58,47001,47002,47004,47006,47008],{"class":60,"line":3262},[58,47003,31489],{"class":82},[58,47005,42657],{"class":75},[58,47007,383],{"class":92},[58,47009,38653],{"class":75},[58,47011,47012,47014,47016,47018,47020,47022,47024,47026,47028,47030,47032,47034,47036,47038,47040,47042,47044,47046,47048,47050,47052],{"class":60,"line":3267},[58,47013,38658],{"class":75},[58,47015,31500],{"class":5862},[58,47017,383],{"class":92},[58,47019,861],{"class":82},[58,47021,1164],{"class":75},[58,47023,31509],{"class":5862},[58,47025,383],{"class":92},[58,47027,991],{"class":82},[58,47029,1164],{"class":75},[58,47031,31518],{"class":5862},[58,47033,383],{"class":92},[58,47035,1155],{"class":82},[58,47037,1164],{"class":75},[58,47039,31573],{"class":5862},[58,47041,383],{"class":92},[58,47043,867],{"class":82},[58,47045,1164],{"class":75},[58,47047,31527],{"class":5862},[58,47049,383],{"class":92},[58,47051,861],{"class":82},[58,47053,38691],{"class":75},[58,47055,47056],{"class":60,"line":8594},[58,47057,38696],{"class":75},[58,47059,47060,47062,47064,47066,47068,47070,47072,47074,47076,47078,47080,47082,47084],{"class":60,"line":8618},[58,47061,38741],{"class":75},[58,47063,31518],{"class":5862},[58,47065,383],{"class":92},[58,47067,861],{"class":82},[58,47069,1164],{"class":75},[58,47071,31573],{"class":5862},[58,47073,383],{"class":92},[58,47075,867],{"class":82},[58,47077,1164],{"class":75},[58,47079,31527],{"class":5862},[58,47081,383],{"class":92},[58,47083,89],{"class":82},[58,47085,799],{"class":75},[58,47087,47088],{"class":60,"line":8623},[58,47089,38770],{"class":75},[58,47091,47092,47094,47096,47098],{"class":60,"line":8629},[58,47093,31489],{"class":82},[58,47095,42748],{"class":75},[58,47097,383],{"class":92},[58,47099,38653],{"class":75},[58,47101,47102,47104,47106,47108,47110,47112,47114,47116,47118,47120,47122,47124,47126],{"class":60,"line":8656},[58,47103,38658],{"class":75},[58,47105,31500],{"class":5862},[58,47107,383],{"class":92},[58,47109,991],{"class":82},[58,47111,1164],{"class":75},[58,47113,31509],{"class":5862},[58,47115,383],{"class":92},[58,47117,991],{"class":82},[58,47119,1164],{"class":75},[58,47121,31518],{"class":5862},[58,47123,383],{"class":92},[58,47125,89],{"class":82},[58,47127,38691],{"class":75},[58,47129,47130],{"class":60,"line":8661},[58,47131,38696],{"class":75},[58,47133,47134,47136,47138,47140,47142,47144,47146,47148,47150,47152,47154,47156,47158,47160,47162,47164,47166],{"class":60,"line":8667},[58,47135,38658],{"class":75},[58,47137,31500],{"class":5862},[58,47139,383],{"class":92},[58,47141,991],{"class":82},[58,47143,1164],{"class":75},[58,47145,31509],{"class":5862},[58,47147,383],{"class":92},[58,47149,42803],{"class":82},[58,47151,1164],{"class":75},[58,47153,31518],{"class":5862},[58,47155,383],{"class":92},[58,47157,861],{"class":82},[58,47159,1164],{"class":75},[58,47161,31527],{"class":5862},[58,47163,383],{"class":92},[58,47165,89],{"class":82},[58,47167,38691],{"class":75},[58,47169,47170],{"class":60,"line":8679},[58,47171,38696],{"class":75},[58,47173,47174,47176,47178,47180,47182,47184,47186,47188,47190,47192,47194,47196,47198],{"class":60,"line":8691},[58,47175,38741],{"class":75},[58,47177,31518],{"class":5862},[58,47179,383],{"class":92},[58,47181,861],{"class":82},[58,47183,1164],{"class":75},[58,47185,31573],{"class":5862},[58,47187,383],{"class":92},[58,47189,867],{"class":82},[58,47191,1164],{"class":75},[58,47193,31527],{"class":5862},[58,47195,383],{"class":92},[58,47197,89],{"class":82},[58,47199,799],{"class":75},[58,47201,47202],{"class":60,"line":8703},[58,47203,38770],{"class":75},[58,47205,47206,47208,47210,47212],{"class":60,"line":10361},[58,47207,31489],{"class":82},[58,47209,42864],{"class":75},[58,47211,383],{"class":92},[58,47213,38653],{"class":75},[58,47215,47216,47218,47220,47222,47224,47226,47228,47230,47232,47234,47236,47238,47240,47242,47244],{"class":60,"line":10386},[58,47217,42873],{"class":75},[58,47219,42803],{"class":82},[58,47221,1164],{"class":75},[58,47223,991],{"class":82},[58,47225,42882],{"class":75},[58,47227,997],{"class":82},[58,47229,1164],{"class":75},[58,47231,32714],{"class":82},[58,47233,42891],{"class":75},[58,47235,1387],{"class":82},[58,47237,1164],{"class":75},[58,47239,985],{"class":82},[58,47241,42900],{"class":75},[58,47243,985],{"class":82},[58,47245,38691],{"class":75},[58,47247,47248,47250,47252,47254,47256,47258,47260,47262,47264,47266,47268,47270,47272,47274,47276],{"class":60,"line":10409},[58,47249,42873],{"class":75},[58,47251,35514],{"class":82},[58,47253,1164],{"class":75},[58,47255,32714],{"class":82},[58,47257,42882],{"class":75},[58,47259,32714],{"class":82},[58,47261,1164],{"class":75},[58,47263,42803],{"class":82},[58,47265,42891],{"class":75},[58,47267,985],{"class":82},[58,47269,1164],{"class":75},[58,47271,997],{"class":82},[58,47273,42900],{"class":75},[58,47275,991],{"class":82},[58,47277,38691],{"class":75},[58,47279,47280,47282,47284,47286,47288,47290,47292,47294,47296,47298,47300,47302,47304],{"class":60,"line":10433},[58,47281,38741],{"class":75},[58,47283,31518],{"class":5862},[58,47285,383],{"class":92},[58,47287,861],{"class":82},[58,47289,1164],{"class":75},[58,47291,31573],{"class":5862},[58,47293,383],{"class":92},[58,47295,867],{"class":82},[58,47297,1164],{"class":75},[58,47299,31527],{"class":5862},[58,47301,383],{"class":92},[58,47303,89],{"class":82},[58,47305,799],{"class":75},[58,47307,47308],{"class":60,"line":10438},[58,47309,38770],{"class":75},[58,47311,47312,47314,47316,47318],{"class":60,"line":10443},[58,47313,31489],{"class":82},[58,47315,42975],{"class":75},[58,47317,383],{"class":92},[58,47319,38653],{"class":75},[58,47321,47322,47324,47326,47328,47330,47332,47334,47336,47338,47340,47342,47344,47346,47348,47350],{"class":60,"line":10448},[58,47323,42873],{"class":75},[58,47325,42986],{"class":82},[58,47327,1164],{"class":75},[58,47329,42803],{"class":82},[58,47331,42882],{"class":75},[58,47333,997],{"class":82},[58,47335,1164],{"class":75},[58,47337,42999],{"class":82},[58,47339,42891],{"class":75},[58,47341,1387],{"class":82},[58,47343,1164],{"class":75},[58,47345,1393],{"class":82},[58,47347,42900],{"class":75},[58,47349,991],{"class":82},[58,47351,38691],{"class":75},[58,47353,47354,47356,47358,47360,47362,47364,47366,47368,47370,47372,47374,47376,47378,47380,47382],{"class":60,"line":10457},[58,47355,42873],{"class":75},[58,47357,39101],{"class":82},[58,47359,1164],{"class":75},[58,47361,21691],{"class":82},[58,47363,42882],{"class":75},[58,47365,1404],{"class":82},[58,47367,1164],{"class":75},[58,47369,32145],{"class":82},[58,47371,42891],{"class":75},[58,47373,1585],{"class":82},[58,47375,1164],{"class":75},[58,47377,991],{"class":82},[58,47379,42900],{"class":75},[58,47381,991],{"class":82},[58,47383,38691],{"class":75},[58,47385,47386,47388,47390,47392,47394,47396,47398,47400,47402,47404,47406,47408,47410,47412,47414],{"class":60,"line":10462},[58,47387,42873],{"class":75},[58,47389,39101],{"class":82},[58,47391,1164],{"class":75},[58,47393,32714],{"class":82},[58,47395,42882],{"class":75},[58,47397,32714],{"class":82},[58,47399,1164],{"class":75},[58,47401,35514],{"class":82},[58,47403,42891],{"class":75},[58,47405,1585],{"class":82},[58,47407,1164],{"class":75},[58,47409,991],{"class":82},[58,47411,42900],{"class":75},[58,47413,991],{"class":82},[58,47415,38691],{"class":75},[58,47417,47418,47420,47422,47424,47426,47428,47430,47432,47434,47436,47438,47440,47442,47444,47446],{"class":60,"line":10468},[58,47419,42873],{"class":75},[58,47421,39101],{"class":82},[58,47423,1164],{"class":75},[58,47425,1404],{"class":82},[58,47427,42882],{"class":75},[58,47429,32714],{"class":82},[58,47431,1164],{"class":75},[58,47433,43096],{"class":82},[58,47435,42891],{"class":75},[58,47437,985],{"class":82},[58,47439,1164],{"class":75},[58,47441,991],{"class":82},[58,47443,42900],{"class":75},[58,47445,991],{"class":82},[58,47447,38691],{"class":75},[58,47449,47450,47452,47454,47456,47458,47460,47462,47464,47466,47468,47470,47472,47474,47476,47478],{"class":60,"line":10489},[58,47451,42873],{"class":75},[58,47453,43117],{"class":82},[58,47455,1164],{"class":75},[58,47457,35514],{"class":82},[58,47459,42882],{"class":75},[58,47461,21691],{"class":82},[58,47463,1164],{"class":75},[58,47465,43130],{"class":82},[58,47467,42891],{"class":75},[58,47469,985],{"class":82},[58,47471,1164],{"class":75},[58,47473,32714],{"class":82},[58,47475,42900],{"class":75},[58,47477,32714],{"class":82},[58,47479,38691],{"class":75},[58,47481,47482,47484,47486,47488,47490,47492,47494,47496,47498,47500,47502,47504,47506],{"class":60,"line":10495},[58,47483,38741],{"class":75},[58,47485,31518],{"class":5862},[58,47487,383],{"class":92},[58,47489,861],{"class":82},[58,47491,1164],{"class":75},[58,47493,31573],{"class":5862},[58,47495,383],{"class":92},[58,47497,867],{"class":82},[58,47499,1164],{"class":75},[58,47501,31527],{"class":5862},[58,47503,383],{"class":92},[58,47505,89],{"class":82},[58,47507,799],{"class":75},[58,47509,47510],{"class":60,"line":10509},[58,47511,38770],{"class":75},[58,47513,47514,47516,47518,47520],{"class":60,"line":10515},[58,47515,31489],{"class":82},[58,47517,43183],{"class":75},[58,47519,383],{"class":92},[58,47521,38653],{"class":75},[58,47523,47524,47526,47528,47530,47532,47534,47536,47538,47540,47542,47544,47546,47548,47550,47552],{"class":60,"line":10542},[58,47525,42873],{"class":75},[58,47527,43194],{"class":82},[58,47529,1164],{"class":75},[58,47531,35514],{"class":82},[58,47533,42882],{"class":75},[58,47535,21691],{"class":82},[58,47537,1164],{"class":75},[58,47539,43130],{"class":82},[58,47541,42891],{"class":75},[58,47543,985],{"class":82},[58,47545,1164],{"class":75},[58,47547,32714],{"class":82},[58,47549,42900],{"class":75},[58,47551,32714],{"class":82},[58,47553,38691],{"class":75},[58,47555,47556,47558,47560,47562,47564,47566,47568,47570,47572,47574,47576,47578,47580,47582,47584],{"class":60,"line":10551},[58,47557,42873],{"class":75},[58,47559,43194],{"class":82},[58,47561,1164],{"class":75},[58,47563,35584],{"class":82},[58,47565,42882],{"class":75},[58,47567,42803],{"class":82},[58,47569,1164],{"class":75},[58,47571,35584],{"class":82},[58,47573,42891],{"class":75},[58,47575,1393],{"class":82},[58,47577,1164],{"class":75},[58,47579,32714],{"class":82},[58,47581,42900],{"class":75},[58,47583,32714],{"class":82},[58,47585,38691],{"class":75},[58,47587,47588,47590,47592,47594,47596],{"class":60,"line":10557},[58,47589,43257],{"class":75},[58,47591,89],{"class":82},[58,47593,1164],{"class":75},[58,47595,89],{"class":82},[58,47597,43266],{"class":75},[58,47599,47600],{"class":60,"line":10565},[58,47601,39434],{"class":75},[58,47603,47604,47606,47608,47610,47612],{"class":60,"line":10570},[58,47605,39439],{"class":75},[58,47607,43277],{"class":82},[58,47609,1164],{"class":75},[58,47611,867],{"class":82},[58,47613,799],{"class":75},[58,47615,47616],{"class":60,"line":17247},[58,47617,38770],{"class":75},[58,47619,47620],{"class":60,"line":17253},[58,47621,43292],{"class":64},[58,47623,47624,47626,47628,47630,47632],{"class":60,"line":17276},[58,47625,4049],{"class":92},[58,47627,39512],{"class":75},[58,47629,26687],{"class":92},[58,47631,39517],{"class":82},[58,47633,39520],{"class":75},[58,47635,47636,47638,47640],{"class":60,"line":17282},[58,47637,5288],{"class":92},[58,47639,39532],{"class":82},[58,47641,39535],{"class":75},[58,47643,47644,47646,47648,47650,47652,47654,47656,47658,47660],{"class":60,"line":17305},[58,47645,39545],{"class":75},[58,47647,43319],{"class":5862},[58,47649,383],{"class":92},[58,47651,43324],{"class":386},[58,47653,1164],{"class":75},[58,47655,39548],{"class":5862},[58,47657,383],{"class":92},[58,47659,39553],{"class":386},[58,47661,799],{"class":75},[58,47663,47664],{"class":60,"line":17319},[58,47665,43339],{"class":64},[58,47667,47668],{"class":60,"line":17339},[58,47669,43344],{"class":64},[58,47671,47672],{"class":60,"line":17345},[58,47673,43349],{"class":64},[58,47675,47676],{"class":60,"line":17356},[58,47677,43354],{"class":64},[58,47679,47680],{"class":60,"line":17379},[58,47681,43359],{"class":64},[58,47683,47684],{"class":60,"line":17401},[58,47685,43364],{"class":64},[58,47687,47688,47690,47692,47694,47696,47698],{"class":60,"line":17406},[58,47689,39565],{"class":92},[58,47691,39568],{"class":75},[58,47693,39571],{"class":92},[58,47695,39574],{"class":92},[58,47697,39577],{"class":82},[58,47699,4385],{"class":75},[58,47701,47702,47704,47706],{"class":60,"line":17412},[58,47703,39589],{"class":75},[58,47705,979],{"class":82},[58,47707,799],{"class":75},[58,47709,47710,47712,47714],{"class":60,"line":17426},[58,47711,43391],{"class":92},[58,47713,39532],{"class":82},[58,47715,39608],{"class":75},[58,47717,47718,47720,47722,47724,47726],{"class":60,"line":17439},[58,47719,43400],{"class":75},[58,47721,979],{"class":82},[58,47723,1164],{"class":75},[58,47725,39630],{"class":82},[58,47727,799],{"class":75},[58,47729,47730,47732,47734,47736,47738,47740],{"class":60,"line":17444},[58,47731,43413],{"class":92},[58,47733,39568],{"class":75},[58,47735,39571],{"class":92},[58,47737,39574],{"class":92},[58,47739,39577],{"class":82},[58,47741,4385],{"class":75},[58,47743,47744,47746,47748],{"class":60,"line":17458},[58,47745,43428],{"class":75},[58,47747,979],{"class":82},[58,47749,799],{"class":75},[58,47751,47752],{"class":60,"line":17463},[58,47753,35809],{"class":64},[58,47755,47756,47758,47760],{"class":60,"line":17469},[58,47757,31445],{"class":92},[58,47759,31737],{"class":379},[58,47761,31740],{"class":75},[58,47763,47764,47766,47768,47770],{"class":60,"line":17474},[58,47765,31745],{"class":75},[58,47767,383],{"class":92},[58,47769,31467],{"class":82},[58,47771,43455],{"class":75},[58,47773,47774,47776,47778,47780],{"class":60,"line":17488},[58,47775,31745],{"class":75},[58,47777,383],{"class":92},[58,47779,31467],{"class":82},[58,47781,43466],{"class":75},[58,47783,47784,47786,47788,47790],{"class":60,"line":17493},[58,47785,31745],{"class":75},[58,47787,383],{"class":92},[58,47789,31467],{"class":82},[58,47791,43477],{"class":75},[58,47793,47794,47796,47798,47800],{"class":60,"line":17498},[58,47795,31745],{"class":75},[58,47797,383],{"class":92},[58,47799,31467],{"class":82},[58,47801,43488],{"class":75},[58,47803,47804,47806,47808,47810],{"class":60,"line":17512},[58,47805,31745],{"class":75},[58,47807,383],{"class":92},[58,47809,31467],{"class":82},[58,47811,43499],{"class":75},[58,47813,47814,47816],{"class":60,"line":17524},[58,47815,15396],{"class":92},[58,47817,31853],{"class":75},[58,47819,47820],{"class":60,"line":17529},[58,47821,3046],{"emptyLinePlaceholder":720},[58,47823,47824],{"class":60,"line":17542},[58,47825,43514],{"class":64},[58,47827,47828,47830,47832,47834,47836],{"class":60,"line":17547},[58,47829,2180],{"class":92},[58,47831,31864],{"class":82},[58,47833,3595],{"class":92},[58,47835,31869],{"class":386},[58,47837,4385],{"class":75},[58,47839,47840,47842,47844,47846,47848,47850,47852,47854,47856],{"class":60,"line":17552},[58,47841,31881],{"class":75},[58,47843,383],{"class":92},[58,47845,31095],{"class":75},[58,47847,31888],{"class":386},[58,47849,2351],{"class":92},[58,47851,31893],{"class":75},[58,47853,2348],{"class":92},[58,47855,31120],{"class":386},[58,47857,799],{"class":75},[58,47859,47860,47862,47864],{"class":60,"line":17557},[58,47861,31933],{"class":75},[58,47863,383],{"class":92},[58,47865,43555],{"class":75},[58,47867,47868,47870,47872,47874,47876,47878,47880,47882],{"class":60,"line":17570},[58,47869,31943],{"class":82},[58,47871,31946],{"class":75},[58,47873,89],{"class":82},[58,47875,1164],{"class":75},[58,47877,32145],{"class":82},[58,47879,1164],{"class":75},[58,47881,32145],{"class":82},[58,47883,31959],{"class":75},[22641,47885,47887],{"id":47886},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[175,47889,47890],{},"计算图片的均值与方差，用于训练中归一化处理操作",[48,47892,47894],{"className":31022,"code":47893,"language":31024,"meta":53,"style":53},"# 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",[55,47895,47896,47901,47914,47919,47925,47930,47940,47944,47949,47959,47963,47968,47978,47995,47999,48004,48016,48028,48059,48068,48078,48088,48092,48097,48112,48116,48121,48126,48131,48141,48146,48171,48175,48180,48195,48199,48212,48216,48221,48226,48231,48236,48241,48251,48261,48284,48292,48300,48308,48312,48324,48328,48333,48337,48341,48348,48368,48392,48399,48413,48418,48423,48427,48441,48445,48457],{"__ignoreMap":53},[58,47897,47898],{"class":60,"line":61},[58,47899,47900],{"class":64},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[58,47902,47903,47905,47908,47911],{"class":60,"line":68},[58,47904,31381],{"class":92},[58,47906,47907],{"class":82}," PIL",[58,47909,47910],{"class":92}," import",[58,47912,47913],{"class":75}," Image\n",[58,47915,47916],{"class":60,"line":79},[58,47917,47918],{"class":64},"# os 用来处理文件夹和文件路径\n",[58,47920,47921,47923],{"class":60,"line":105},[58,47922,31036],{"class":92},[58,47924,45949],{"class":75},[58,47926,47927],{"class":60,"line":627},[58,47928,47929],{"class":64},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[58,47931,47932,47934,47936,47938],{"class":60,"line":509},[58,47933,31036],{"class":92},[58,47935,32024],{"class":75},[58,47937,32027],{"class":92},[58,47939,32030],{"class":75},[58,47941,47942],{"class":60,"line":559},[58,47943,3046],{"emptyLinePlaceholder":720},[58,47945,47946],{"class":60,"line":654},[58,47947,47948],{"class":64},"# 文件夹路径，包含所有图片文件\n",[58,47950,47951,47954,47956],{"class":60,"line":671},[58,47952,47953],{"class":75},"folder_path ",[58,47955,383],{"class":92},[58,47957,47958],{"class":386}," 'data_cat_dog'\n",[58,47960,47961],{"class":60,"line":677},[58,47962,3046],{"emptyLinePlaceholder":720},[58,47964,47965],{"class":60,"line":2260},[58,47966,47967],{"class":64},"# 初始化累积变量\n",[58,47969,47970,47973,47975],{"class":60,"line":694},[58,47971,47972],{"class":75},"total_pixels ",[58,47974,383],{"class":92},[58,47976,47977],{"class":82}," 0\n",[58,47979,47980,47983,47985,47988,47990,47992],{"class":60,"line":2270},[58,47981,47982],{"class":75},"sum_normalized_pixel_values ",[58,47984,383],{"class":92},[58,47986,47987],{"class":75}," np.zeros(",[58,47989,861],{"class":82},[58,47991,46452],{"class":75},[58,47993,47994],{"class":64},"# 如果是RGB图像，需要三个通道的均值和方差\n",[58,47996,47997],{"class":60,"line":2275},[58,47998,3046],{"emptyLinePlaceholder":720},[58,48000,48001],{"class":60,"line":2289},[58,48002,48003],{"class":64},"# 遍历文件夹中的图片文件\n",[58,48005,48006,48008,48011,48013],{"class":60,"line":2294},[58,48007,3671],{"class":92},[58,48009,48010],{"class":75}," root, dirs, files ",[58,48012,26687],{"class":92},[58,48014,48015],{"class":75}," os.walk(folder_path):\n",[58,48017,48018,48020,48023,48025],{"class":60,"line":2300},[58,48019,3847],{"class":92},[58,48021,48022],{"class":75}," filename ",[58,48024,26687],{"class":92},[58,48026,48027],{"class":75}," files:\n",[58,48029,48030,48032,48035,48038,48040,48043,48045,48048,48050,48053,48056],{"class":60,"line":2321},[58,48031,3143],{"class":92},[58,48033,48034],{"class":75}," filename.endswith((",[58,48036,48037],{"class":386},"'.jpg'",[58,48039,469],{"class":75},[58,48041,48042],{"class":386},"'.jpeg'",[58,48044,469],{"class":75},[58,48046,48047],{"class":386},"'.png'",[58,48049,469],{"class":75},[58,48051,48052],{"class":386},"'.bmp'",[58,48054,48055],{"class":75},")):  ",[58,48057,48058],{"class":64},"# 可根据实际情况添加其他格式\n",[58,48060,48061,48063,48065],{"class":60,"line":2326},[58,48062,46317],{"class":75},[58,48064,383],{"class":92},[58,48066,48067],{"class":75}," os.path.join(root, filename)\n",[58,48069,48070,48073,48075],{"class":60,"line":2340},[58,48071,48072],{"class":75},"            image ",[58,48074,383],{"class":92},[58,48076,48077],{"class":75}," Image.open(image_path)\n",[58,48079,48080,48083,48085],{"class":60,"line":2345},[58,48081,48082],{"class":75},"            image_array ",[58,48084,383],{"class":92},[58,48086,48087],{"class":75}," np.array(image)\n",[58,48089,48090],{"class":60,"line":2374},[58,48091,3046],{"emptyLinePlaceholder":720},[58,48093,48094],{"class":60,"line":2379},[58,48095,48096],{"class":64},"            # 归一化像素值到0-1之间\n",[58,48098,48099,48102,48104,48107,48109],{"class":60,"line":2396},[58,48100,48101],{"class":75},"            normalized_image_array ",[58,48103,383],{"class":92},[58,48105,48106],{"class":75}," image_array ",[58,48108,1370],{"class":92},[58,48110,48111],{"class":82}," 255.0\n",[58,48113,48114],{"class":60,"line":2401},[58,48115,3046],{"emptyLinePlaceholder":720},[58,48117,48118],{"class":60,"line":2406},[58,48119,48120],{"class":64},"            # print(image_path)\n",[58,48122,48123],{"class":60,"line":2411},[58,48124,48125],{"class":64},"            # print(normalized_image_array.shape)\n",[58,48127,48128],{"class":60,"line":2425},[58,48129,48130],{"class":64},"            # 累积归一化后的像素值和像素数量\n",[58,48132,48133,48136,48138],{"class":60,"line":2430},[58,48134,48135],{"class":75},"            total_pixels ",[58,48137,10122],{"class":92},[58,48139,48140],{"class":75}," normalized_image_array.size\n",[58,48142,48143],{"class":60,"line":3223},[58,48144,48145],{"class":64},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[58,48147,48148,48151,48153,48156,48159,48161,48163,48165,48167,48169],{"class":60,"line":3237},[58,48149,48150],{"class":75},"            sum_normalized_pixel_values ",[58,48152,10122],{"class":92},[58,48154,48155],{"class":75}," np.sum(normalized_image_array, ",[58,48157,48158],{"class":5862},"axis",[58,48160,383],{"class":92},[58,48162,793],{"class":75},[58,48164,979],{"class":82},[58,48166,469],{"class":75},[58,48168,89],{"class":82},[58,48170,31141],{"class":75},[58,48172,48173],{"class":60,"line":3245},[58,48174,3046],{"emptyLinePlaceholder":720},[58,48176,48177],{"class":60,"line":3250},[58,48178,48179],{"class":64},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[58,48181,48182,48185,48187,48190,48192],{"class":60,"line":3256},[58,48183,48184],{"class":75},"mean ",[58,48186,383],{"class":92},[58,48188,48189],{"class":75}," sum_normalized_pixel_values ",[58,48191,1370],{"class":92},[58,48193,48194],{"class":75}," total_pixels\n",[58,48196,48197],{"class":60,"line":3262},[58,48198,3046],{"emptyLinePlaceholder":720},[58,48200,48201,48204,48206,48208,48210],{"class":60,"line":3267},[58,48202,48203],{"class":75},"sum_squared_diff ",[58,48205,383],{"class":92},[58,48207,47987],{"class":75},[58,48209,861],{"class":82},[58,48211,799],{"class":75},[58,48213,48214],{"class":60,"line":8594},[58,48215,3046],{"emptyLinePlaceholder":720},[58,48217,48218],{"class":60,"line":8618},[58,48219,48220],{"class":64},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[58,48222,48223],{"class":60,"line":8623},[58,48224,48225],{"class":64},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[58,48227,48228],{"class":60,"line":8629},[58,48229,48230],{"class":64},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[58,48232,48233],{"class":60,"line":8656},[58,48234,48235],{"class":64},"# Image.open(image_path)：打开图片\n",[58,48237,48238],{"class":60,"line":8661},[58,48239,48240],{"class":64},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[58,48242,48243,48245,48247,48249],{"class":60,"line":8667},[58,48244,3671],{"class":92},[58,48246,48010],{"class":75},[58,48248,26687],{"class":92},[58,48250,48015],{"class":75},[58,48252,48253,48255,48257,48259],{"class":60,"line":8679},[58,48254,3847],{"class":92},[58,48256,48022],{"class":75},[58,48258,26687],{"class":92},[58,48260,48027],{"class":75},[58,48262,48263,48265,48267,48269,48271,48273,48275,48277,48279,48281],{"class":60,"line":8691},[58,48264,3143],{"class":92},[58,48266,48034],{"class":75},[58,48268,48037],{"class":386},[58,48270,469],{"class":75},[58,48272,48042],{"class":386},[58,48274,469],{"class":75},[58,48276,48047],{"class":386},[58,48278,469],{"class":75},[58,48280,48052],{"class":386},[58,48282,48283],{"class":75},")):\n",[58,48285,48286,48288,48290],{"class":60,"line":8703},[58,48287,46317],{"class":75},[58,48289,383],{"class":92},[58,48291,48067],{"class":75},[58,48293,48294,48296,48298],{"class":60,"line":10361},[58,48295,48072],{"class":75},[58,48297,383],{"class":92},[58,48299,48077],{"class":75},[58,48301,48302,48304,48306],{"class":60,"line":10386},[58,48303,48082],{"class":75},[58,48305,383],{"class":92},[58,48307,48087],{"class":75},[58,48309,48310],{"class":60,"line":10409},[58,48311,48096],{"class":64},[58,48313,48314,48316,48318,48320,48322],{"class":60,"line":10433},[58,48315,48101],{"class":75},[58,48317,383],{"class":92},[58,48319,48106],{"class":75},[58,48321,1370],{"class":92},[58,48323,48111],{"class":82},[58,48325,48326],{"class":60,"line":10438},[58,48327,48125],{"class":64},[58,48329,48330],{"class":60,"line":10443},[58,48331,48332],{"class":64},"            # print(mean.shape)\n",[58,48334,48335],{"class":60,"line":10448},[58,48336,48120],{"class":64},[58,48338,48339],{"class":60,"line":10457},[58,48340,3046],{"emptyLinePlaceholder":720},[58,48342,48343,48346],{"class":60,"line":10462},[58,48344,48345],{"class":92},"            try",[58,48347,4385],{"class":75},[58,48349,48350,48353,48355,48358,48360,48363,48365],{"class":60,"line":10468},[58,48351,48352],{"class":75},"                diff ",[58,48354,383],{"class":92},[58,48356,48357],{"class":75}," (normalized_image_array ",[58,48359,1318],{"class":92},[58,48361,48362],{"class":75}," mean) ",[58,48364,11306],{"class":92},[58,48366,48367],{"class":82}," 2\n",[58,48369,48370,48373,48375,48378,48380,48382,48384,48386,48388,48390],{"class":60,"line":10489},[58,48371,48372],{"class":75},"                sum_squared_diff ",[58,48374,10122],{"class":92},[58,48376,48377],{"class":75}," np.sum(diff, ",[58,48379,48158],{"class":5862},[58,48381,383],{"class":92},[58,48383,793],{"class":75},[58,48385,979],{"class":82},[58,48387,469],{"class":75},[58,48389,89],{"class":82},[58,48391,31141],{"class":75},[58,48393,48394,48397],{"class":60,"line":10495},[58,48395,48396],{"class":92},"            except",[58,48398,4385],{"class":75},[58,48400,48401,48404,48406,48408,48411],{"class":60,"line":10509},[58,48402,48403],{"class":82},"                print",[58,48405,793],{"class":75},[58,48407,843],{"class":92},[58,48409,48410],{"class":386},"\"捕获到自定义异常\"",[58,48412,799],{"class":75},[58,48414,48415],{"class":60,"line":10515},[58,48416,48417],{"class":64},"            # diff = (normalized_image_array - mean) ** 2\n",[58,48419,48420],{"class":60,"line":10542},[58,48421,48422],{"class":64},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[58,48424,48425],{"class":60,"line":10551},[58,48426,3046],{"emptyLinePlaceholder":720},[58,48428,48429,48432,48434,48437,48439],{"class":60,"line":10557},[58,48430,48431],{"class":75},"variance ",[58,48433,383],{"class":92},[58,48435,48436],{"class":75}," sum_squared_diff ",[58,48438,1370],{"class":92},[58,48440,48194],{"class":75},[58,48442,48443],{"class":60,"line":10565},[58,48444,3046],{"emptyLinePlaceholder":720},[58,48446,48447,48449,48451,48454],{"class":60,"line":10570},[58,48448,31059],{"class":82},[58,48450,793],{"class":75},[58,48452,48453],{"class":386},"\"Mean:\"",[58,48455,48456],{"class":75},", mean)\n",[58,48458,48459,48461,48463,48466],{"class":60,"line":17247},[58,48460,31059],{"class":82},[58,48462,793],{"class":75},[58,48464,48465],{"class":386},"\"Variance:\"",[58,48467,48468],{"class":75},", variance)\n",[48,48470,48472],{"className":31022,"code":48471,"language":31024,"meta":53,"style":53},"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",[55,48473,48474,48480,48486,48496,48502,48512,48526,48536,48546,48556,48560,48570,48580,48584,48588,48596,48601,48606,48625,48629,48634,48639,48644,48649,48690,48695,48705,48710,48723,48728,48733,48738,48743,48748,48752,48757,48762,48784,48788,48820,48834,48844,48854,48858,48868,48882,48892,48902,48912,48918,48922,48926,48930,48934,48938,48946,48966,48970,48974,48978,48982,48998,49002,49006,49014,49018,49022,49030,49034,49038,49042,49050,49054,49058,49062,49070,49074,49082,49086,49094,49098,49106,49110,49118,49122,49126,49134,49138,49142,49154,49178,49192,49196,49200,49204,49212,49216,49224,49228,49236,49240,49248,49252,49260,49264,49272,49276,49288,49292,49300,49304,49312,49316,49320,49324,49328,49336,49340,49356,49360,49368,49372,49376,49380,49384,49388,49392,49396,49412,49416,49428,49432,49444,49448,49460,49464,49472,49476,49484,49488,49492,49496,49502,49506,49514,49518,49534,49538,49546,49550,49566,49578,49582,49594,49598,49602,49610,49614,49618,49626,49630,49638,49642,49650,49654,49658,49700,49742,49746,49750,49766,49770,49786,49790,49794,49802,49806,49810,49822,49860,49864,49868,49876,49880,49894,49904,49910,49916,49922,49928,49932,49936,49942,49946,49950,49958,49962,49980,49984,49988,49992,50008,50012,50016,50020,50024,50028,50048,50068,50072,50076,50080,50088,50096,50100,50116,50136,50156,50160,50165,50174,50183,50188,50193,50198,50211,50216,50225,50234,50251],{"__ignoreMap":53},[58,48475,48476,48478],{"class":60,"line":61},[58,48477,31036],{"class":92},[58,48479,32466],{"class":75},[58,48481,48482,48484],{"class":60,"line":68},[58,48483,31036],{"class":92},[58,48485,32473],{"class":75},[58,48487,48488,48490,48492,48494],{"class":60,"line":79},[58,48489,31036],{"class":92},[58,48491,32484],{"class":75},[58,48493,32027],{"class":92},[58,48495,32489],{"class":75},[58,48497,48498,48500],{"class":60,"line":105},[58,48499,31036],{"class":92},[58,48501,31039],{"class":75},[58,48503,48504,48506,48508,48510],{"class":60,"line":627},[58,48505,31381],{"class":92},[58,48507,32059],{"class":75},[58,48509,31036],{"class":92},[58,48511,32506],{"class":75},[58,48513,48514,48516,48518,48520,48523],{"class":60,"line":509},[58,48515,31381],{"class":92},[58,48517,32012],{"class":75},[58,48519,31036],{"class":92},[58,48521,48522],{"class":75}," ImageFolder ",[58,48524,48525],{"class":64},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[58,48527,48528,48530,48532,48534],{"class":60,"line":559},[58,48529,31381],{"class":92},[58,48531,32042],{"class":75},[58,48533,31036],{"class":92},[58,48535,32047],{"class":75},[58,48537,48538,48540,48542,48544],{"class":60,"line":654},[58,48539,31036],{"class":92},[58,48541,32059],{"class":75},[58,48543,32027],{"class":92},[58,48545,32064],{"class":75},[58,48547,48548,48550,48552,48554],{"class":60,"line":671},[58,48549,31036],{"class":92},[58,48551,32076],{"class":75},[58,48553,32027],{"class":92},[58,48555,32081],{"class":75},[58,48557,48558],{"class":60,"line":677},[58,48559,32551],{"class":64},[58,48561,48562,48564,48566,48568],{"class":60,"line":2260},[58,48563,31381],{"class":92},[58,48565,32558],{"class":75},[58,48567,31036],{"class":92},[58,48569,43675],{"class":75},[58,48571,48572,48574,48576,48578],{"class":60,"line":694},[58,48573,31381],{"class":92},[58,48575,31384],{"class":75},[58,48577,31036],{"class":92},[58,48579,31389],{"class":75},[58,48581,48582],{"class":60,"line":2270},[58,48583,3046],{"emptyLinePlaceholder":720},[58,48585,48586],{"class":60,"line":2275},[58,48587,32586],{"class":64},[58,48589,48590,48592,48594],{"class":60,"line":2289},[58,48591,32591],{"class":92},[58,48593,32594],{"class":379},[58,48595,32597],{"class":75},[58,48597,48598],{"class":60,"line":2294},[58,48599,48600],{"class":64},"    # 导入自己的数据集，并进行数据处理\n",[58,48602,48603],{"class":60,"line":2300},[58,48604,48605],{"class":64},"    # 定义数据集的路径\n",[58,48607,48608,48611,48613,48615,48617,48619,48623],{"class":60,"line":2321},[58,48609,48610],{"class":82},"    ROOT_PATH",[58,48612,383],{"class":92},[58,48614,1456],{"class":92},[58,48616,1037],{"class":386},[58,48618,1344],{"class":82},[58,48620,48622],{"class":48621},"sA_wV","\u002Fdata\u002Ftrain",[58,48624,25777],{"class":386},[58,48626,48627],{"class":60,"line":2326},[58,48628,3046],{"emptyLinePlaceholder":720},[58,48630,48631],{"class":60,"line":2340},[58,48632,48633],{"class":64},"    # 定义归一化方法\n",[58,48635,48636],{"class":60,"line":2345},[58,48637,48638],{"class":64},"    # 这里需要先计算一下数据集的均值和方差\n",[58,48640,48641],{"class":60,"line":2374},[58,48642,48643],{"class":64},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[58,48645,48646],{"class":60,"line":2379},[58,48647,48648],{"class":64},"    # 第一个参数是均值，第二个参数是方差\n",[58,48650,48651,48654,48656,48659,48662,48664,48667,48669,48672,48675,48678,48680,48683,48685,48688],{"class":60,"line":2396},[58,48652,48653],{"class":75},"    normalize",[58,48655,383],{"class":92},[58,48657,48658],{"class":75},"transforms.Normalize([",[58,48660,48661],{"class":82},"0.162",[58,48663,1164],{"class":75},[58,48665,48666],{"class":82},"0.151",[58,48668,1164],{"class":75},[58,48670,48671],{"class":82},"0.138",[58,48673,48674],{"class":75},"],[",[58,48676,48677],{"class":82},"0.058",[58,48679,1164],{"class":75},[58,48681,48682],{"class":82},"0.052",[58,48684,1164],{"class":75},[58,48686,48687],{"class":82},"0.048",[58,48689,5303],{"class":75},[58,48691,48692],{"class":60,"line":2401},[58,48693,48694],{"class":64},"    # 定义数据集处理方法变量\n",[58,48696,48697,48700,48702],{"class":60,"line":2406},[58,48698,48699],{"class":75},"    train_transform",[58,48701,383],{"class":92},[58,48703,48704],{"class":75},"transforms.Compose([\n",[58,48706,48707],{"class":60,"line":2411},[58,48708,48709],{"class":64},"        # 调整图像大小为224*224\n",[58,48711,48712,48715,48717,48719,48721],{"class":60,"line":2425},[58,48713,48714],{"class":75},"        transforms.Resize((",[58,48716,32145],{"class":82},[58,48718,1164],{"class":75},[58,48720,32145],{"class":82},[58,48722,43266],{"class":75},[58,48724,48725],{"class":60,"line":2430},[58,48726,48727],{"class":64},"        # 将图像转换为张量\n",[58,48729,48730],{"class":60,"line":3223},[58,48731,48732],{"class":75},"        transforms.ToTensor(),\n",[58,48734,48735],{"class":60,"line":3237},[58,48736,48737],{"class":75},"        normalize])\n",[58,48739,48740],{"class":60,"line":3245},[58,48741,48742],{"class":64},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[58,48744,48745],{"class":60,"line":3250},[58,48746,48747],{"class":64},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[58,48749,48750],{"class":60,"line":3256},[58,48751,3046],{"emptyLinePlaceholder":720},[58,48753,48754],{"class":60,"line":3262},[58,48755,48756],{"class":64},"    # 加载数据集\n",[58,48758,48759],{"class":60,"line":3267},[58,48760,48761],{"class":64},"    # 传入数据集路径与处理方法\n",[58,48763,48764,48766,48768,48771,48774,48776,48779,48781],{"class":60,"line":8594},[58,48765,32602],{"class":75},[58,48767,383],{"class":92},[58,48769,48770],{"class":75},"ImageFolder(",[58,48772,48773],{"class":82},"ROOT_PATH",[58,48775,1164],{"class":75},[58,48777,48778],{"class":5862},"transform",[58,48780,383],{"class":92},[58,48782,48783],{"class":75},"train_transform)\n",[58,48785,48786],{"class":60,"line":8618},[58,48787,3046],{"emptyLinePlaceholder":720},[58,48789,48790,48792,48794,48796,48798,48800,48802,48804,48806,48808,48810,48812,48814,48816,48818],{"class":60,"line":8623},[58,48791,32654],{"class":75},[58,48793,383],{"class":92},[58,48795,32659],{"class":75},[58,48797,32662],{"class":82},[58,48799,793],{"class":75},[58,48801,32667],{"class":82},[58,48803,1241],{"class":92},[58,48805,8004],{"class":82},[58,48807,32674],{"class":75},[58,48809,32662],{"class":82},[58,48811,793],{"class":75},[58,48813,32681],{"class":82},[58,48815,1241],{"class":92},[58,48817,8004],{"class":82},[58,48819,32688],{"class":75},[58,48821,48822,48824,48826,48828,48830,48832],{"class":60,"line":8629},[58,48823,32693],{"class":75},[58,48825,383],{"class":92},[58,48827,32698],{"class":75},[58,48829,32181],{"class":5862},[58,48831,383],{"class":92},[58,48833,32186],{"class":75},[58,48835,48836,48838,48840,48842],{"class":60,"line":8656},[58,48837,32709],{"class":5862},[58,48839,383],{"class":92},[58,48841,985],{"class":82},[58,48843,32110],{"class":75},[58,48845,48846,48848,48850,48852],{"class":60,"line":8661},[58,48847,32721],{"class":5862},[58,48849,383],{"class":92},[58,48851,32120],{"class":82},[58,48853,32110],{"class":75},[58,48855,48856],{"class":60,"line":8667},[58,48857,32732],{"class":64},[58,48859,48860,48862,48864,48866],{"class":60,"line":8679},[58,48861,32737],{"class":5862},[58,48863,383],{"class":92},[58,48865,1181],{"class":82},[58,48867,799],{"class":75},[58,48869,48870,48872,48874,48876,48878,48880],{"class":60,"line":8691},[58,48871,32748],{"class":75},[58,48873,383],{"class":92},[58,48875,32178],{"class":75},[58,48877,32181],{"class":5862},[58,48879,383],{"class":92},[58,48881,32759],{"class":75},[58,48883,48884,48886,48888,48890],{"class":60,"line":8703},[58,48885,32764],{"class":5862},[58,48887,383],{"class":92},[58,48889,985],{"class":82},[58,48891,32110],{"class":75},[58,48893,48894,48896,48898,48900],{"class":60,"line":10361},[58,48895,32775],{"class":5862},[58,48897,383],{"class":92},[58,48899,32120],{"class":82},[58,48901,32110],{"class":75},[58,48903,48904,48906,48908,48910],{"class":60,"line":10386},[58,48905,32786],{"class":5862},[58,48907,383],{"class":92},[58,48909,1181],{"class":82},[58,48911,799],{"class":75},[58,48913,48914,48916],{"class":60,"line":10409},[58,48915,4736],{"class":92},[58,48917,32799],{"class":75},[58,48919,48920],{"class":60,"line":10433},[58,48921,3046],{"emptyLinePlaceholder":720},[58,48923,48924],{"class":60,"line":10438},[58,48925,32808],{"class":64},[58,48927,48928],{"class":60,"line":10443},[58,48929,32813],{"class":64},[58,48931,48932],{"class":60,"line":10448},[58,48933,3046],{"emptyLinePlaceholder":720},[58,48935,48936],{"class":60,"line":10457},[58,48937,32822],{"class":64},[58,48939,48940,48942,48944],{"class":60,"line":10462},[58,48941,32591],{"class":92},[58,48943,32829],{"class":379},[58,48945,32832],{"class":75},[58,48947,48948,48950,48952,48954,48956,48958,48960,48962,48964],{"class":60,"line":10468},[58,48949,31881],{"class":75},[58,48951,383],{"class":92},[58,48953,31095],{"class":75},[58,48955,31888],{"class":386},[58,48957,2351],{"class":92},[58,48959,31893],{"class":75},[58,48961,2348],{"class":92},[58,48963,32851],{"class":386},[58,48965,799],{"class":75},[58,48967,48968],{"class":60,"line":10489},[58,48969,3046],{"emptyLinePlaceholder":720},[58,48971,48972],{"class":60,"line":10495},[58,48973,32866],{"class":64},[58,48975,48976],{"class":60,"line":10509},[58,48977,32871],{"class":64},[58,48979,48980],{"class":60,"line":10515},[58,48981,32876],{"class":64},[58,48983,48984,48986,48988,48990,48992,48994,48996],{"class":60,"line":10542},[58,48985,32881],{"class":75},[58,48987,383],{"class":92},[58,48989,32886],{"class":75},[58,48991,32889],{"class":5862},[58,48993,383],{"class":92},[58,48995,32894],{"class":82},[58,48997,799],{"class":75},[58,48999,49000],{"class":60,"line":10551},[58,49001,3046],{"emptyLinePlaceholder":720},[58,49003,49004],{"class":60,"line":10557},[58,49005,32905],{"class":64},[58,49007,49008,49010,49012],{"class":60,"line":10565},[58,49009,32910],{"class":75},[58,49011,383],{"class":92},[58,49013,32915],{"class":75},[58,49015,49016],{"class":60,"line":10570},[58,49017,3046],{"emptyLinePlaceholder":720},[58,49019,49020],{"class":60,"line":17247},[58,49021,32924],{"class":64},[58,49023,49024,49026,49028],{"class":60,"line":17253},[58,49025,31933],{"class":75},[58,49027,383],{"class":92},[58,49029,32933],{"class":75},[58,49031,49032],{"class":60,"line":17276},[58,49033,32938],{"class":64},[58,49035,49036],{"class":60,"line":17282},[58,49037,32943],{"class":64},[58,49039,49040],{"class":60,"line":17305},[58,49041,32948],{"class":64},[58,49043,49044,49046,49048],{"class":60,"line":17319},[58,49045,32953],{"class":75},[58,49047,383],{"class":92},[58,49049,32958],{"class":75},[58,49051,49052],{"class":60,"line":17339},[58,49053,3046],{"emptyLinePlaceholder":720},[58,49055,49056],{"class":60,"line":17345},[58,49057,32971],{"class":64},[58,49059,49060],{"class":60,"line":17356},[58,49061,32976],{"class":64},[58,49063,49064,49066,49068],{"class":60,"line":17379},[58,49065,32981],{"class":75},[58,49067,383],{"class":92},[58,49069,32986],{"class":82},[58,49071,49072],{"class":60,"line":17401},[58,49073,32991],{"class":64},[58,49075,49076,49078,49080],{"class":60,"line":17406},[58,49077,32996],{"class":75},[58,49079,383],{"class":92},[58,49081,33001],{"class":75},[58,49083,49084],{"class":60,"line":17412},[58,49085,33006],{"class":64},[58,49087,49088,49090,49092],{"class":60,"line":17426},[58,49089,33011],{"class":75},[58,49091,383],{"class":92},[58,49093,33001],{"class":75},[58,49095,49096],{"class":60,"line":17439},[58,49097,33020],{"class":64},[58,49099,49100,49102,49104],{"class":60,"line":17444},[58,49101,33025],{"class":75},[58,49103,383],{"class":92},[58,49105,33001],{"class":75},[58,49107,49108],{"class":60,"line":17458},[58,49109,33034],{"class":64},[58,49111,49112,49114,49116],{"class":60,"line":17463},[58,49113,33039],{"class":75},[58,49115,383],{"class":92},[58,49117,33001],{"class":75},[58,49119,49120],{"class":60,"line":17469},[58,49121,3046],{"emptyLinePlaceholder":720},[58,49123,49124],{"class":60,"line":17474},[58,49125,33052],{"class":64},[58,49127,49128,49130,49132],{"class":60,"line":17488},[58,49129,33057],{"class":75},[58,49131,383],{"class":92},[58,49133,33062],{"class":75},[58,49135,49136],{"class":60,"line":17493},[58,49137,3046],{"emptyLinePlaceholder":720},[58,49139,49140],{"class":60,"line":17498},[58,49141,33075],{"class":64},[58,49143,49144,49146,49148,49150,49152],{"class":60,"line":17512},[58,49145,3847],{"class":92},[58,49147,33082],{"class":75},[58,49149,26687],{"class":92},[58,49151,33087],{"class":82},[58,49153,33090],{"class":75},[58,49155,49156,49158,49160,49162,49164,49166,49168,49170,49172,49174,49176],{"class":60,"line":17524},[58,49157,33095],{"class":82},[58,49159,793],{"class":75},[58,49161,33100],{"class":386},[58,49163,33103],{"class":82},[58,49165,1370],{"class":386},[58,49167,33103],{"class":82},[58,49169,1037],{"class":386},[58,49171,33112],{"class":75},[58,49173,1318],{"class":92},[58,49175,89],{"class":82},[58,49177,31141],{"class":75},[58,49179,49180,49182,49184,49186,49188,49190],{"class":60,"line":17529},[58,49181,33095],{"class":82},[58,49183,793],{"class":75},[58,49185,33127],{"class":386},[58,49187,1241],{"class":92},[58,49189,1232],{"class":82},[58,49191,799],{"class":75},[58,49193,49194],{"class":60,"line":17542},[58,49195,3046],{"emptyLinePlaceholder":720},[58,49197,49198],{"class":60,"line":17547},[58,49199,33142],{"class":64},[58,49201,49202],{"class":60,"line":17552},[58,49203,33147],{"class":64},[58,49205,49206,49208,49210],{"class":60,"line":17557},[58,49207,33152],{"class":75},[58,49209,383],{"class":92},[58,49211,32986],{"class":82},[58,49213,49214],{"class":60,"line":17570},[58,49215,33161],{"class":64},[58,49217,49218,49220,49222],{"class":60,"line":17575},[58,49219,33166],{"class":75},[58,49221,383],{"class":92},[58,49223,3731],{"class":82},[58,49225,49226],{"class":60,"line":33277},[58,49227,33175],{"class":64},[58,49229,49230,49232,49234],{"class":60,"line":33283},[58,49231,33180],{"class":75},[58,49233,383],{"class":92},[58,49235,32986],{"class":82},[58,49237,49238],{"class":60,"line":33289},[58,49239,33189],{"class":64},[58,49241,49242,49244,49246],{"class":60,"line":33295},[58,49243,33194],{"class":75},[58,49245,383],{"class":92},[58,49247,3731],{"class":82},[58,49249,49250],{"class":60,"line":33301},[58,49251,33203],{"class":64},[58,49253,49254,49256,49258],{"class":60,"line":33312},[58,49255,33208],{"class":75},[58,49257,383],{"class":92},[58,49259,3731],{"class":82},[58,49261,49262],{"class":60,"line":33318},[58,49263,33217],{"class":64},[58,49265,49266,49268,49270],{"class":60,"line":33338},[58,49267,33222],{"class":75},[58,49269,383],{"class":92},[58,49271,3731],{"class":82},[58,49273,49274],{"class":60,"line":33344},[58,49275,33231],{"class":64},[58,49277,49278,49280,49282,49284,49286],{"class":60,"line":33355},[58,49279,4049],{"class":92},[58,49281,32245],{"class":75},[58,49283,26687],{"class":92},[58,49285,32250],{"class":82},[58,49287,33244],{"class":75},[58,49289,49290],{"class":60,"line":33361},[58,49291,33249],{"class":64},[58,49293,49294,49296,49298],{"class":60,"line":33367},[58,49295,33254],{"class":75},[58,49297,383],{"class":92},[58,49299,33259],{"class":75},[58,49301,49302],{"class":60,"line":33373},[58,49303,33264],{"class":64},[58,49305,49306,49308,49310],{"class":60,"line":33379},[58,49307,33269],{"class":75},[58,49309,383],{"class":92},[58,49311,33274],{"class":75},[58,49313,49314],{"class":60,"line":33385},[58,49315,33280],{"class":64},[58,49317,49318],{"class":60,"line":33391},[58,49319,33286],{"class":75},[58,49321,49322],{"class":60,"line":33397},[58,49323,33292],{"class":64},[58,49325,49326],{"class":60,"line":33417},[58,49327,33298],{"class":64},[58,49329,49330,49332,49334],{"class":60,"line":33423},[58,49331,33304],{"class":75},[58,49333,383],{"class":92},[58,49335,33309],{"class":75},[58,49337,49338],{"class":60,"line":33439},[58,49339,33315],{"class":64},[58,49341,49342,49344,49346,49348,49350,49352,49354],{"class":60,"line":33445},[58,49343,33321],{"class":75},[58,49345,383],{"class":92},[58,49347,33326],{"class":75},[58,49349,33329],{"class":5862},[58,49351,383],{"class":92},[58,49353,89],{"class":82},[58,49355,799],{"class":75},[58,49357,49358],{"class":60,"line":33459},[58,49359,33341],{"class":64},[58,49361,49362,49364,49366],{"class":60,"line":33465},[58,49363,33347],{"class":75},[58,49365,383],{"class":92},[58,49367,33352],{"class":75},[58,49369,49370],{"class":60,"line":33480},[58,49371,33358],{"class":64},[58,49373,49374],{"class":60,"line":33486},[58,49375,33364],{"class":75},[58,49377,49378],{"class":60,"line":33495},[58,49379,33370],{"class":64},[58,49381,49382],{"class":60,"line":33501},[58,49383,33376],{"class":75},[58,49385,49386],{"class":60,"line":33510},[58,49387,33382],{"class":64},[58,49389,49390],{"class":60,"line":33516},[58,49391,33388],{"class":75},[58,49393,49394],{"class":60,"line":33522},[58,49395,33394],{"class":64},[58,49397,49398,49400,49402,49404,49406,49408,49410],{"class":60,"line":33531},[58,49399,33400],{"class":75},[58,49401,10122],{"class":92},[58,49403,33405],{"class":75},[58,49405,1241],{"class":92},[58,49407,33410],{"class":75},[58,49409,979],{"class":82},[58,49411,799],{"class":75},[58,49413,49414],{"class":60,"line":33537},[58,49415,33420],{"class":64},[58,49417,49418,49420,49422,49424,49426],{"class":60,"line":33548},[58,49419,33426],{"class":75},[58,49421,10122],{"class":92},[58,49423,33431],{"class":75},[58,49425,3595],{"class":92},[58,49427,33436],{"class":75},[58,49429,49430],{"class":60,"line":33554},[58,49431,33442],{"class":64},[58,49433,49434,49436,49438,49440,49442],{"class":60,"line":33573},[58,49435,33448],{"class":75},[58,49437,10122],{"class":92},[58,49439,33410],{"class":75},[58,49441,979],{"class":82},[58,49443,799],{"class":75},[58,49445,49446],{"class":60,"line":33579},[58,49447,33462],{"class":64},[58,49449,49450,49452,49454,49456,49458],{"class":60,"line":33590},[58,49451,4049],{"class":92},[58,49453,33470],{"class":75},[58,49455,26687],{"class":92},[58,49457,32250],{"class":82},[58,49459,33477],{"class":75},[58,49461,49462],{"class":60,"line":33596},[58,49463,33483],{"class":64},[58,49465,49466,49468,49470],{"class":60,"line":33616},[58,49467,33254],{"class":75},[58,49469,383],{"class":92},[58,49471,33259],{"class":75},[58,49473,49474],{"class":60,"line":33632},[58,49475,33498],{"class":64},[58,49477,49478,49480,49482],{"class":60,"line":33638},[58,49479,33269],{"class":75},[58,49481,383],{"class":92},[58,49483,33274],{"class":75},[58,49485,49486],{"class":60,"line":33652},[58,49487,33513],{"class":64},[58,49489,49490],{"class":60,"line":33658},[58,49491,33519],{"class":75},[58,49493,49494],{"class":60,"line":33664},[58,49495,37000],{"class":64},[58,49497,49498,49500],{"class":60,"line":33675},[58,49499,33525],{"class":92},[58,49501,33528],{"class":75},[58,49503,49504],{"class":60,"line":33681},[58,49505,33534],{"class":64},[58,49507,49508,49510,49512],{"class":60,"line":33687},[58,49509,37015],{"class":75},[58,49511,383],{"class":92},[58,49513,33309],{"class":75},[58,49515,49516],{"class":60,"line":33697},[58,49517,33551],{"class":64},[58,49519,49520,49522,49524,49526,49528,49530,49532],{"class":60,"line":33703},[58,49521,37028],{"class":75},[58,49523,383],{"class":92},[58,49525,33326],{"class":75},[58,49527,33329],{"class":5862},[58,49529,383],{"class":92},[58,49531,89],{"class":82},[58,49533,799],{"class":75},[58,49535,49536],{"class":60,"line":33714},[58,49537,33576],{"class":64},[58,49539,49540,49542,49544],{"class":60,"line":33720},[58,49541,37049],{"class":75},[58,49543,383],{"class":92},[58,49545,33352],{"class":75},[58,49547,49548],{"class":60,"line":33730},[58,49549,33593],{"class":64},[58,49551,49552,49554,49556,49558,49560,49562,49564],{"class":60,"line":33735},[58,49553,37062],{"class":75},[58,49555,10122],{"class":92},[58,49557,37067],{"class":75},[58,49559,1241],{"class":92},[58,49561,33410],{"class":75},[58,49563,979],{"class":82},[58,49565,799],{"class":75},[58,49567,49568,49570,49572,49574,49576],{"class":60,"line":33741},[58,49569,37080],{"class":75},[58,49571,10122],{"class":92},[58,49573,33431],{"class":75},[58,49575,3595],{"class":92},[58,49577,33436],{"class":75},[58,49579,49580],{"class":60,"line":33790},[58,49581,37093],{"class":64},[58,49583,49584,49586,49588,49590,49592],{"class":60,"line":33837},[58,49585,37098],{"class":75},[58,49587,10122],{"class":92},[58,49589,33410],{"class":75},[58,49591,979],{"class":82},[58,49593,799],{"class":75},[58,49595,49596],{"class":60,"line":33842},[58,49597,33655],{"class":64},[58,49599,49600],{"class":60,"line":33848},[58,49601,33661],{"class":64},[58,49603,49604,49606,49608],{"class":60,"line":33867},[58,49605,33667],{"class":75},[58,49607,1370],{"class":92},[58,49609,33672],{"class":75},[58,49611,49612],{"class":60,"line":33873},[58,49613,33678],{"class":64},[58,49615,49616],{"class":60,"line":33893},[58,49617,33684],{"class":64},[58,49619,49620,49622,49624],{"class":60,"line":33899},[58,49621,33690],{"class":75},[58,49623,1370],{"class":92},[58,49625,33672],{"class":75},[58,49627,49628],{"class":60,"line":33905},[58,49629,33700],{"class":64},[58,49631,49632,49634,49636],{"class":60,"line":33915},[58,49633,33706],{"class":75},[58,49635,1370],{"class":92},[58,49637,33711],{"class":75},[58,49639,49640],{"class":60,"line":33920},[58,49641,33717],{"class":64},[58,49643,49644,49646,49648],{"class":60,"line":33926},[58,49645,33723],{"class":75},[58,49647,1370],{"class":92},[58,49649,33711],{"class":75},[58,49651,49652],{"class":60,"line":33942},[58,49653,3046],{"emptyLinePlaceholder":720},[58,49655,49656],{"class":60,"line":33987},[58,49657,33738],{"class":64},[58,49659,49660,49662,49664,49666,49668,49670,49672,49674,49676,49678,49680,49682,49684,49686,49688,49690,49692,49694,49696,49698],{"class":60,"line":33993},[58,49661,33095],{"class":82},[58,49663,793],{"class":75},[58,49665,4238],{"class":386},[58,49667,33103],{"class":82},[58,49669,33752],{"class":386},[58,49671,1681],{"class":82},[58,49673,33757],{"class":92},[58,49675,1730],{"class":82},[58,49677,33762],{"class":386},[58,49679,1681],{"class":82},[58,49681,33757],{"class":92},[58,49683,1730],{"class":82},[58,49685,4238],{"class":386},[58,49687,33773],{"class":75},[58,49689,1318],{"class":92},[58,49691,89],{"class":82},[58,49693,33780],{"class":75},[58,49695,1318],{"class":92},[58,49697,89],{"class":82},[58,49699,33787],{"class":75},[58,49701,49702,49704,49706,49708,49710,49712,49714,49716,49718,49720,49722,49724,49726,49728,49730,49732,49734,49736,49738,49740],{"class":60,"line":33999},[58,49703,33095],{"class":82},[58,49705,793],{"class":75},[58,49707,4238],{"class":386},[58,49709,33103],{"class":82},[58,49711,33801],{"class":386},[58,49713,1681],{"class":82},[58,49715,33757],{"class":92},[58,49717,1730],{"class":82},[58,49719,33810],{"class":386},[58,49721,1681],{"class":82},[58,49723,33757],{"class":92},[58,49725,1730],{"class":82},[58,49727,4238],{"class":386},[58,49729,33821],{"class":75},[58,49731,1318],{"class":92},[58,49733,89],{"class":82},[58,49735,33828],{"class":75},[58,49737,1318],{"class":92},[58,49739,89],{"class":82},[58,49741,33787],{"class":75},[58,49743,49744],{"class":60,"line":34005},[58,49745,3046],{"emptyLinePlaceholder":720},[58,49747,49748],{"class":60,"line":34016},[58,49749,33845],{"class":64},[58,49751,49752,49754,49756,49758,49760,49762,49764],{"class":60,"line":34022},[58,49753,3143],{"class":92},[58,49755,33853],{"class":75},[58,49757,1318],{"class":92},[58,49759,89],{"class":82},[58,49761,1724],{"class":75},[58,49763,1744],{"class":92},[58,49765,33864],{"class":75},[58,49767,49768],{"class":60,"line":34028},[58,49769,33870],{"class":64},[58,49771,49772,49774,49776,49778,49780,49782,49784],{"class":60,"line":34034},[58,49773,33876],{"class":75},[58,49775,832],{"class":82},[58,49777,383],{"class":92},[58,49779,33883],{"class":75},[58,49781,1318],{"class":92},[58,49783,89],{"class":82},[58,49785,33890],{"class":75},[58,49787,49788],{"class":60,"line":34052},[58,49789,33896],{"class":64},[58,49791,49792],{"class":60,"line":34066},[58,49793,33902],{"class":64},[58,49795,49796,49798,49800],{"class":60,"line":34075},[58,49797,33908],{"class":75},[58,49799,383],{"class":92},[58,49801,32958],{"class":75},[58,49803,49804],{"class":60,"line":34084},[58,49805,3046],{"emptyLinePlaceholder":720},[58,49807,49808],{"class":60,"line":34093},[58,49809,33923],{"class":64},[58,49811,49812,49814,49816,49818,49820],{"class":60,"line":34102},[58,49813,33929],{"class":75},[58,49815,383],{"class":92},[58,49817,33934],{"class":75},[58,49819,1318],{"class":92},[58,49821,33939],{"class":75},[58,49823,49824,49826,49828,49830,49832,49834,49836,49838,49840,49842,49844,49846,49848,49850,49852,49854,49856,49858],{"class":60,"line":34108},[58,49825,33095],{"class":82},[58,49827,793],{"class":75},[58,49829,33949],{"class":386},[58,49831,1681],{"class":82},[58,49833,33954],{"class":92},[58,49835,1730],{"class":82},[58,49837,1330],{"class":386},[58,49839,1681],{"class":82},[58,49841,33954],{"class":92},[58,49843,1730],{"class":82},[58,49845,33967],{"class":386},[58,49847,33970],{"class":75},[58,49849,33973],{"class":92},[58,49851,1692],{"class":82},[58,49853,33978],{"class":75},[58,49855,1114],{"class":92},[58,49857,1692],{"class":82},[58,49859,31141],{"class":75},[58,49861,49862],{"class":60,"line":34114},[58,49863,37377],{"class":64},[58,49865,49866],{"class":60,"line":34122},[58,49867,37382],{"class":64},[58,49869,49870,49872,49874],{"class":60,"line":34127},[58,49871,37387],{"class":75},[58,49873,34011],{"class":386},[58,49875,799],{"class":75},[58,49877,49878],{"class":60,"line":34133},[58,49879,34031],{"class":64},[58,49881,49882,49884,49886,49888,49890,49892],{"class":60,"line":34144},[58,49883,34037],{"class":75},[58,49885,383],{"class":92},[58,49887,34042],{"class":75},[58,49889,34045],{"class":5862},[58,49891,383],{"class":92},[58,49893,2195],{"class":75},[58,49895,49896,49898,49900,49902],{"class":60,"line":34150},[58,49897,34055],{"class":386},[58,49899,1644],{"class":75},[58,49901,34060],{"class":82},[58,49903,34063],{"class":75},[58,49905,49906,49908],{"class":60,"line":34170},[58,49907,34069],{"class":386},[58,49909,34072],{"class":75},[58,49911,49912,49914],{"class":60,"line":34176},[58,49913,34078],{"class":386},[58,49915,34081],{"class":75},[58,49917,49918,49920],{"class":60,"line":34182},[58,49919,34087],{"class":386},[58,49921,34090],{"class":75},[58,49923,49924,49926],{"class":60,"line":34188},[58,49925,34096],{"class":386},[58,49927,34099],{"class":75},[58,49929,49930],{"class":60,"line":34205},[58,49931,34105],{"class":75},[58,49933,49934],{"class":60,"line":34211},[58,49935,34111],{"class":64},[58,49937,49938,49940],{"class":60,"line":34217},[58,49939,4736],{"class":92},[58,49941,34119],{"class":75},[58,49943,49944],{"class":60,"line":34223},[58,49945,3046],{"emptyLinePlaceholder":720},[58,49947,49948],{"class":60,"line":34229},[58,49949,34130],{"class":64},[58,49951,49952,49954,49956],{"class":60,"line":34235},[58,49953,32591],{"class":92},[58,49955,34138],{"class":379},[58,49957,34141],{"class":75},[58,49959,49960],{"class":60,"line":34262},[58,49961,34147],{"class":64},[58,49963,49964,49966,49968,49970,49972,49974,49976,49978],{"class":60,"line":34286},[58,49965,34153],{"class":75},[58,49967,32337],{"class":5862},[58,49969,383],{"class":92},[58,49971,793],{"class":75},[58,49973,1284],{"class":82},[58,49975,1164],{"class":75},[58,49977,1079],{"class":82},[58,49979,31141],{"class":75},[58,49981,49982],{"class":60,"line":34292},[58,49983,34173],{"class":64},[58,49985,49986],{"class":60,"line":34298},[58,49987,34179],{"class":64},[58,49989,49990],{"class":60,"line":34304},[58,49991,34185],{"class":64},[58,49993,49994,49996,49998,50000,50002,50004,50006],{"class":60,"line":34315},[58,49995,32371],{"class":75},[58,49997,89],{"class":82},[58,49999,1164],{"class":75},[58,50001,867],{"class":82},[58,50003,1164],{"class":75},[58,50005,89],{"class":82},[58,50007,799],{"class":75},[58,50009,50010],{"class":60,"line":34326},[58,50011,34208],{"class":64},[58,50013,50014],{"class":60,"line":34332},[58,50015,34214],{"class":64},[58,50017,50018],{"class":60,"line":34349},[58,50019,34220],{"class":64},[58,50021,50022],{"class":60,"line":34372},[58,50023,34226],{"class":64},[58,50025,50026],{"class":60,"line":34395},[58,50027,34232],{"class":64},[58,50029,50030,50032,50034,50036,50038,50040,50042,50044,50046],{"class":60,"line":34401},[58,50031,34238],{"class":75},[58,50033,34241],{"class":386},[58,50035,34244],{"class":75},[58,50037,34247],{"class":386},[58,50039,1164],{"class":75},[58,50041,34252],{"class":5862},[58,50043,383],{"class":92},[58,50045,34257],{"class":386},[58,50047,799],{"class":75},[58,50049,50050,50052,50054,50056,50058,50060,50062,50064,50066],{"class":60,"line":34406},[58,50051,34238],{"class":75},[58,50053,34241],{"class":386},[58,50055,34269],{"class":75},[58,50057,34272],{"class":386},[58,50059,1164],{"class":75},[58,50061,34252],{"class":5862},[58,50063,383],{"class":92},[58,50065,34281],{"class":386},[58,50067,799],{"class":75},[58,50069,50070],{"class":60,"line":34415},[58,50071,34289],{"class":64},[58,50073,50074],{"class":60,"line":34425},[58,50075,34295],{"class":75},[58,50077,50078],{"class":60,"line":34431},[58,50079,34301],{"class":64},[58,50081,50082,50084,50086],{"class":60,"line":34436},[58,50083,34307],{"class":75},[58,50085,34310],{"class":386},[58,50087,799],{"class":75},[58,50089,50090,50092,50094],{"class":60,"line":34442},[58,50091,34318],{"class":75},[58,50093,34321],{"class":386},[58,50095,799],{"class":75},[58,50097,50098],{"class":60,"line":34455},[58,50099,34329],{"class":64},[58,50101,50102,50104,50106,50108,50110,50112,50114],{"class":60,"line":34461},[58,50103,32371],{"class":75},[58,50105,89],{"class":82},[58,50107,1164],{"class":75},[58,50109,867],{"class":82},[58,50111,1164],{"class":75},[58,50113,867],{"class":82},[58,50115,799],{"class":75},[58,50117,50118,50120,50122,50124,50126,50128,50130,50132,50134],{"class":60,"line":34472},[58,50119,34238],{"class":75},[58,50121,34241],{"class":386},[58,50123,34356],{"class":75},[58,50125,34247],{"class":386},[58,50127,1164],{"class":75},[58,50129,34252],{"class":5862},[58,50131,383],{"class":92},[58,50133,34367],{"class":386},[58,50135,799],{"class":75},[58,50137,50138,50140,50142,50144,50146,50148,50150,50152,50154],{"class":60,"line":34483},[58,50139,34238],{"class":75},[58,50141,34241],{"class":386},[58,50143,34379],{"class":75},[58,50145,34272],{"class":386},[58,50147,1164],{"class":75},[58,50149,34252],{"class":5862},[58,50151,383],{"class":92},[58,50153,34390],{"class":386},[58,50155,799],{"class":75},[58,50157,50158],{"class":60,"line":34502},[58,50159,34398],{"class":64},[58,50161,50163],{"class":60,"line":50162},219,[58,50164,34295],{"class":75},[58,50166,50168,50170,50172],{"class":60,"line":50167},220,[58,50169,34307],{"class":75},[58,50171,34241],{"class":386},[58,50173,799],{"class":75},[58,50175,50177,50179,50181],{"class":60,"line":50176},221,[58,50178,34318],{"class":75},[58,50180,34420],{"class":386},[58,50182,799],{"class":75},[58,50184,50186],{"class":60,"line":50185},222,[58,50187,34428],{"class":75},[58,50189,50191],{"class":60,"line":50190},223,[58,50192,3046],{"emptyLinePlaceholder":720},[58,50194,50196],{"class":60,"line":50195},224,[58,50197,34439],{"class":64},[58,50199,50201,50203,50205,50207,50209],{"class":60,"line":50200},225,[58,50202,2180],{"class":92},[58,50204,31864],{"class":82},[58,50206,3595],{"class":92},[58,50208,31869],{"class":386},[58,50210,4385],{"class":75},[58,50212,50214],{"class":60,"line":50213},226,[58,50215,34458],{"class":64},[58,50217,50219,50221,50223],{"class":60,"line":50218},227,[58,50220,45190],{"class":75},[58,50222,383],{"class":92},[58,50224,45195],{"class":75},[58,50226,50228,50230,50232],{"class":60,"line":50227},228,[58,50229,34475],{"class":75},[58,50231,383],{"class":92},[58,50233,34480],{"class":75},[58,50235,50237,50239,50241,50243,50245,50247,50249],{"class":60,"line":50236},229,[58,50238,34037],{"class":75},[58,50240,383],{"class":92},[58,50242,45212],{"class":75},[58,50244,34493],{"class":5862},[58,50246,383],{"class":92},[58,50248,1692],{"class":82},[58,50250,799],{"class":75},[58,50252,50254],{"class":60,"line":50253},230,[58,50255,34505],{"class":75},[22641,50257,50259],{"id":50258},"_242测试代码","2.4.2.测试代码",[175,50261,50262],{},"使用测试集进行测试与推理",[48,50264,50266],{"className":31022,"code":50265,"language":31024,"meta":53,"style":53},"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",[55,50267,50268,50274,50284,50294,50305,50315,50319,50323,50331,50336,50340,50357,50361,50365,50369,50373,50377,50409,50413,50421,50425,50437,50441,50445,50449,50453,50457,50461,50465,50469,50487,50501,50505,50515,50525,50535,50541,50545,50549,50557,50561,50577,50585,50589,50593,50601,50609,50613,50617,50621,50625,50631,50635,50645,50653,50661,50665,50669,50673,50681,50685,50701,50705,50709,50713,50725,50729,50741,50745,50749,50761,50765,50775,50779,50783,50795,50799,50807,50811,50815,50823,50827,50835,50839,50843,50847,50851,50855,50871,50879,50883,50887,50905,50911,50915,50925,50933,50941,50945,50949,50953,50957,50965,50969,50985,50989,50997,51005],{"__ignoreMap":53},[58,50269,50270,50272],{"class":60,"line":61},[58,50271,31036],{"class":92},[58,50273,31039],{"class":75},[58,50275,50276,50278,50280,50282],{"class":60,"line":68},[58,50277,31036],{"class":92},[58,50279,32059],{"class":75},[58,50281,32027],{"class":92},[58,50283,32064],{"class":75},[58,50285,50286,50288,50290,50292],{"class":60,"line":79},[58,50287,31381],{"class":92},[58,50289,32042],{"class":75},[58,50291,31036],{"class":92},[58,50293,32047],{"class":75},[58,50295,50296,50298,50300,50302],{"class":60,"line":105},[58,50297,31381],{"class":92},[58,50299,32012],{"class":75},[58,50301,31036],{"class":92},[58,50303,50304],{"class":75}," ImageFolder\n",[58,50306,50307,50309,50311,50313],{"class":60,"line":627},[58,50308,31381],{"class":92},[58,50310,32558],{"class":75},[58,50312,31036],{"class":92},[58,50314,45284],{"class":75},[58,50316,50317],{"class":60,"line":509},[58,50318,3046],{"emptyLinePlaceholder":720},[58,50320,50321],{"class":60,"line":559},[58,50322,34595],{"class":64},[58,50324,50325,50327,50329],{"class":60,"line":654},[58,50326,32591],{"class":92},[58,50328,34602],{"class":379},[58,50330,32597],{"class":75},[58,50332,50333],{"class":60,"line":671},[58,50334,50335],{"class":64},"   # 导入自己的数据集，并进行数据处理\n",[58,50337,50338],{"class":60,"line":677},[58,50339,48605],{"class":64},[58,50341,50342,50344,50346,50348,50350,50352,50355],{"class":60,"line":2260},[58,50343,48610],{"class":82},[58,50345,383],{"class":92},[58,50347,1456],{"class":92},[58,50349,1037],{"class":386},[58,50351,1344],{"class":82},[58,50353,50354],{"class":48621},"\u002Fdata\u002Ftest",[58,50356,25777],{"class":386},[58,50358,50359],{"class":60,"line":694},[58,50360,3046],{"emptyLinePlaceholder":720},[58,50362,50363],{"class":60,"line":2270},[58,50364,48633],{"class":64},[58,50366,50367],{"class":60,"line":2275},[58,50368,48638],{"class":64},[58,50370,50371],{"class":60,"line":2289},[58,50372,48643],{"class":64},[58,50374,50375],{"class":60,"line":2294},[58,50376,48648],{"class":64},[58,50378,50379,50381,50383,50385,50387,50389,50391,50393,50395,50397,50399,50401,50403,50405,50407],{"class":60,"line":2300},[58,50380,48653],{"class":75},[58,50382,383],{"class":92},[58,50384,48658],{"class":75},[58,50386,48661],{"class":82},[58,50388,1164],{"class":75},[58,50390,48666],{"class":82},[58,50392,1164],{"class":75},[58,50394,48671],{"class":82},[58,50396,48674],{"class":75},[58,50398,48677],{"class":82},[58,50400,1164],{"class":75},[58,50402,48682],{"class":82},[58,50404,1164],{"class":75},[58,50406,48687],{"class":82},[58,50408,5303],{"class":75},[58,50410,50411],{"class":60,"line":2321},[58,50412,48694],{"class":64},[58,50414,50415,50417,50419],{"class":60,"line":2326},[58,50416,48699],{"class":75},[58,50418,383],{"class":92},[58,50420,48704],{"class":75},[58,50422,50423],{"class":60,"line":2340},[58,50424,48709],{"class":64},[58,50426,50427,50429,50431,50433,50435],{"class":60,"line":2345},[58,50428,48714],{"class":75},[58,50430,32145],{"class":82},[58,50432,1164],{"class":75},[58,50434,32145],{"class":82},[58,50436,43266],{"class":75},[58,50438,50439],{"class":60,"line":2374},[58,50440,48727],{"class":64},[58,50442,50443],{"class":60,"line":2379},[58,50444,48732],{"class":75},[58,50446,50447],{"class":60,"line":2396},[58,50448,48737],{"class":75},[58,50450,50451],{"class":60,"line":2401},[58,50452,48742],{"class":64},[58,50454,50455],{"class":60,"line":2406},[58,50456,48747],{"class":64},[58,50458,50459],{"class":60,"line":2411},[58,50460,3046],{"emptyLinePlaceholder":720},[58,50462,50463],{"class":60,"line":2425},[58,50464,48756],{"class":64},[58,50466,50467],{"class":60,"line":2430},[58,50468,48761],{"class":64},[58,50470,50471,50473,50475,50477,50479,50481,50483,50485],{"class":60,"line":3223},[58,50472,34609],{"class":75},[58,50474,383],{"class":92},[58,50476,48770],{"class":75},[58,50478,48773],{"class":82},[58,50480,1164],{"class":75},[58,50482,48778],{"class":5862},[58,50484,383],{"class":92},[58,50486,48783],{"class":75},[58,50488,50489,50491,50493,50495,50497,50499],{"class":60,"line":3237},[58,50490,34666],{"class":75},[58,50492,383],{"class":92},[58,50494,32178],{"class":75},[58,50496,32181],{"class":5862},[58,50498,383],{"class":92},[58,50500,34677],{"class":75},[58,50502,50503],{"class":60,"line":3245},[58,50504,34682],{"class":64},[58,50506,50507,50509,50511,50513],{"class":60,"line":3250},[58,50508,34687],{"class":5862},[58,50510,383],{"class":92},[58,50512,89],{"class":82},[58,50514,32110],{"class":75},[58,50516,50517,50519,50521,50523],{"class":60,"line":3256},[58,50518,34698],{"class":5862},[58,50520,383],{"class":92},[58,50522,32120],{"class":82},[58,50524,32110],{"class":75},[58,50526,50527,50529,50531,50533],{"class":60,"line":3262},[58,50528,34709],{"class":5862},[58,50530,383],{"class":92},[58,50532,979],{"class":82},[58,50534,799],{"class":75},[58,50536,50537,50539],{"class":60,"line":3267},[58,50538,4736],{"class":92},[58,50540,34722],{"class":75},[58,50542,50543],{"class":60,"line":8594},[58,50544,3046],{"emptyLinePlaceholder":720},[58,50546,50547],{"class":60,"line":8618},[58,50548,34731],{"class":64},[58,50550,50551,50553,50555],{"class":60,"line":8623},[58,50552,32591],{"class":92},[58,50554,34738],{"class":379},[58,50556,34741],{"class":75},[58,50558,50559],{"class":60,"line":8629},[58,50560,34746],{"class":64},[58,50562,50563,50565,50567,50569,50571,50573,50575],{"class":60,"line":8656},[58,50564,31881],{"class":75},[58,50566,383],{"class":92},[58,50568,31888],{"class":386},[58,50570,2351],{"class":92},[58,50572,31893],{"class":75},[58,50574,2348],{"class":92},[58,50576,34763],{"class":386},[58,50578,50579,50581,50583],{"class":60,"line":8661},[58,50580,31933],{"class":75},[58,50582,383],{"class":92},[58,50584,32933],{"class":75},[58,50586,50587],{"class":60,"line":8667},[58,50588,3046],{"emptyLinePlaceholder":720},[58,50590,50591],{"class":60,"line":8679},[58,50592,34780],{"class":64},[58,50594,50595,50597,50599],{"class":60,"line":8691},[58,50596,34785],{"class":75},[58,50598,383],{"class":92},[58,50600,32986],{"class":82},[58,50602,50603,50605,50607],{"class":60,"line":8703},[58,50604,34794],{"class":75},[58,50606,383],{"class":92},[58,50608,3731],{"class":82},[58,50610,50611],{"class":60,"line":10361},[58,50612,3046],{"emptyLinePlaceholder":720},[58,50614,50615],{"class":60,"line":10386},[58,50616,34807],{"class":64},[58,50618,50619],{"class":60,"line":10409},[58,50620,34812],{"class":64},[58,50622,50623],{"class":60,"line":10433},[58,50624,34817],{"class":64},[58,50626,50627,50629],{"class":60,"line":10438},[58,50628,34822],{"class":92},[58,50630,33528],{"class":75},[58,50632,50633],{"class":60,"line":10443},[58,50634,34829],{"class":64},[58,50636,50637,50639,50641,50643],{"class":60,"line":10448},[58,50638,4049],{"class":92},[58,50640,34836],{"class":75},[58,50642,26687],{"class":92},[58,50644,34841],{"class":75},[58,50646,50647,50649,50651],{"class":60,"line":10457},[58,50648,34846],{"class":75},[58,50650,383],{"class":92},[58,50652,34851],{"class":75},[58,50654,50655,50657,50659],{"class":60,"line":10462},[58,50656,34856],{"class":75},[58,50658,383],{"class":92},[58,50660,34861],{"class":75},[58,50662,50663],{"class":60,"line":10468},[58,50664,34866],{"class":64},[58,50666,50667],{"class":60,"line":10489},[58,50668,33519],{"class":75},[58,50670,50671],{"class":60,"line":10495},[58,50672,34875],{"class":64},[58,50674,50675,50677,50679],{"class":60,"line":10509},[58,50676,33304],{"class":75},[58,50678,383],{"class":92},[58,50680,34884],{"class":75},[58,50682,50683],{"class":60,"line":10515},[58,50684,34889],{"class":64},[58,50686,50687,50689,50691,50693,50695,50697,50699],{"class":60,"line":10542},[58,50688,33321],{"class":75},[58,50690,383],{"class":92},[58,50692,33326],{"class":75},[58,50694,33329],{"class":5862},[58,50696,383],{"class":92},[58,50698,89],{"class":82},[58,50700,799],{"class":75},[58,50702,50703],{"class":60,"line":10551},[58,50704,34910],{"class":64},[58,50706,50707],{"class":60,"line":10557},[58,50708,34915],{"class":64},[58,50710,50711],{"class":60,"line":10565},[58,50712,34920],{"class":64},[58,50714,50715,50717,50719,50721,50723],{"class":60,"line":10570},[58,50716,34925],{"class":75},[58,50718,10122],{"class":92},[58,50720,33431],{"class":75},[58,50722,3595],{"class":92},[58,50724,34934],{"class":75},[58,50726,50727],{"class":60,"line":17247},[58,50728,34939],{"class":64},[58,50730,50731,50733,50735,50737,50739],{"class":60,"line":17253},[58,50732,34944],{"class":75},[58,50734,10122],{"class":92},[58,50736,34949],{"class":75},[58,50738,979],{"class":82},[58,50740,799],{"class":75},[58,50742,50743],{"class":60,"line":17276},[58,50744,3046],{"emptyLinePlaceholder":720},[58,50746,50747],{"class":60,"line":17282},[58,50748,34962],{"class":64},[58,50750,50751,50753,50755,50757,50759],{"class":60,"line":17305},[58,50752,34967],{"class":75},[58,50754,383],{"class":92},[58,50756,34972],{"class":75},[58,50758,1370],{"class":92},[58,50760,34977],{"class":75},[58,50762,50763],{"class":60,"line":17319},[58,50764,34982],{"class":64},[58,50766,50767,50769,50771,50773],{"class":60,"line":17339},[58,50768,33095],{"class":82},[58,50770,793],{"class":75},[58,50772,34991],{"class":386},[58,50774,34994],{"class":75},[58,50776,50777],{"class":60,"line":17345},[58,50778,3046],{"emptyLinePlaceholder":720},[58,50780,50781],{"class":60,"line":17356},[58,50782,35003],{"class":64},[58,50784,50785,50787,50789,50791,50793],{"class":60,"line":17379},[58,50786,2180],{"class":92},[58,50788,31864],{"class":82},[58,50790,3595],{"class":92},[58,50792,31869],{"class":386},[58,50794,4385],{"class":75},[58,50796,50797],{"class":60,"line":17401},[58,50798,35020],{"class":64},[58,50800,50801,50803,50805],{"class":60,"line":17406},[58,50802,31933],{"class":75},[58,50804,383],{"class":92},[58,50806,45195],{"class":75},[58,50808,50809],{"class":60,"line":17412},[58,50810,35033],{"class":64},[58,50812,50813],{"class":60,"line":17426},[58,50814,35038],{"class":64},[58,50816,50817,50819,50821],{"class":60,"line":17439},[58,50818,35043],{"class":75},[58,50820,35046],{"class":386},[58,50822,31141],{"class":75},[58,50824,50825],{"class":60,"line":17444},[58,50826,35053],{"class":64},[58,50828,50829,50831,50833],{"class":60,"line":17458},[58,50830,34666],{"class":75},[58,50832,383],{"class":92},[58,50834,35062],{"class":75},[58,50836,50837],{"class":60,"line":17463},[58,50838,35067],{"class":64},[58,50840,50841],{"class":60,"line":17469},[58,50842,35072],{"class":75},[58,50844,50845],{"class":60,"line":17474},[58,50846,3046],{"emptyLinePlaceholder":720},[58,50848,50849],{"class":60,"line":17488},[58,50850,35081],{"class":64},[58,50852,50853],{"class":60,"line":17493},[58,50854,35086],{"class":64},[58,50856,50857,50859,50861,50863,50865,50867,50869],{"class":60,"line":17498},[58,50858,31881],{"class":75},[58,50860,383],{"class":92},[58,50862,31888],{"class":386},[58,50864,2351],{"class":92},[58,50866,31893],{"class":75},[58,50868,2348],{"class":92},[58,50870,34763],{"class":386},[58,50872,50873,50875,50877],{"class":60,"line":17512},[58,50874,31933],{"class":75},[58,50876,383],{"class":92},[58,50878,32933],{"class":75},[58,50880,50881],{"class":60,"line":17524},[58,50882,35115],{"class":64},[58,50884,50885],{"class":60,"line":17529},[58,50886,35120],{"class":64},[58,50888,50889,50891,50893,50895,50898,50900,50903],{"class":60,"line":17542},[58,50890,35125],{"class":75},[58,50892,383],{"class":92},[58,50894,1675],{"class":75},[58,50896,50897],{"class":386},"'猫'",[58,50899,1164],{"class":75},[58,50901,50902],{"class":386},"'狗'",[58,50904,33890],{"class":75},[58,50906,50907,50909],{"class":60,"line":17547},[58,50908,34822],{"class":92},[58,50910,33528],{"class":75},[58,50912,50913],{"class":60,"line":17552},[58,50914,35190],{"class":64},[58,50916,50917,50919,50921,50923],{"class":60,"line":17557},[58,50918,4049],{"class":92},[58,50920,35197],{"class":75},[58,50922,26687],{"class":92},[58,50924,34841],{"class":75},[58,50926,50927,50929,50931],{"class":60,"line":17570},[58,50928,33254],{"class":75},[58,50930,383],{"class":92},[58,50932,33259],{"class":75},[58,50934,50935,50937,50939],{"class":60,"line":17575},[58,50936,33269],{"class":75},[58,50938,383],{"class":92},[58,50940,33274],{"class":75},[58,50942,50943],{"class":60,"line":33277},[58,50944,3046],{"emptyLinePlaceholder":720},[58,50946,50947],{"class":60,"line":33283},[58,50948,35226],{"class":64},[58,50950,50951],{"class":60,"line":33289},[58,50952,33519],{"class":75},[58,50954,50955],{"class":60,"line":33295},[58,50956,35235],{"class":64},[58,50958,50959,50961,50963],{"class":60,"line":33301},[58,50960,33304],{"class":75},[58,50962,383],{"class":92},[58,50964,33309],{"class":75},[58,50966,50967],{"class":60,"line":33312},[58,50968,35248],{"class":64},[58,50970,50971,50973,50975,50977,50979,50981,50983],{"class":60,"line":33318},[58,50972,33321],{"class":75},[58,50974,383],{"class":92},[58,50976,33326],{"class":75},[58,50978,33329],{"class":5862},[58,50980,383],{"class":92},[58,50982,89],{"class":82},[58,50984,799],{"class":75},[58,50986,50987],{"class":60,"line":33338},[58,50988,35269],{"class":64},[58,50990,50991,50993,50995],{"class":60,"line":33344},[58,50992,35274],{"class":75},[58,50994,383],{"class":92},[58,50996,35279],{"class":75},[58,50998,50999,51001,51003],{"class":60,"line":33355},[58,51000,35284],{"class":75},[58,51002,383],{"class":92},[58,51004,35289],{"class":75},[58,51006,51007,51009,51011,51013,51015,51017,51019,51021],{"class":60,"line":33361},[58,51008,35294],{"class":82},[58,51010,793],{"class":75},[58,51012,35299],{"class":386},[58,51014,35302],{"class":75},[58,51016,35305],{"class":386},[58,51018,1164],{"class":75},[58,51020,35310],{"class":386},[58,51022,35313],{"class":75},[702,51024,51025],{},"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":53,"searchDepth":68,"depth":68,"links":51027},[51028,51029,51030,51031],{"id":31235,"depth":79,"text":31236},{"id":38483,"depth":79,"text":38484},{"id":41916,"depth":79,"text":41917},{"id":45925,"depth":79,"text":45926},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31227,"description":717},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51038,"title":51039,"body":51040,"description":717,"extension":718,"meta":51047,"navigation":720,"path":51048,"seo":51049,"stem":51050,"__hash__":51051},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51041,"toc":51045},[51042],[10,51043,51039],{"id":51044},"_3yolo模型学习",{"title":53,"searchDepth":68,"depth":68,"links":51046},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51039,"description":717},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51053,"title":51054,"body":51055,"description":51062,"extension":718,"meta":51063,"navigation":720,"path":51065,"seo":51066,"stem":51067,"__hash__":51068},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51056,"toc":51060},[51057],[175,51058,51059],{},"yolo模型还未补充",{"title":53,"searchDepth":68,"depth":68,"links":51061},[],"深度学习学习",{"category":51064},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51054,"description":51062},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51070,"title":51071,"body":51072,"description":717,"extension":718,"meta":51097,"navigation":720,"path":51098,"seo":51099,"stem":51100,"__hash__":51101},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51073,"toc":51095},[51074,51077,51080,51085,51092],[10,51075,51071],{"id":51076},"_1工具",[175,51078,51079],{},"提示错误插件：有问题会提前报错",[175,51081,51082],{},[119,51083],{"alt":53,"src":51084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[175,51086,51087],{},[376,51088,51091],{"href":51089,"rel":51090},"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",[24508],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[175,51093,51094],{},"alt键加上下箭头可以实现语句的移动",{"title":53,"searchDepth":68,"depth":68,"links":51096},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51071,"description":717},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51103,"title":51104,"body":51105,"description":717,"extension":718,"meta":53963,"navigation":720,"path":53964,"seo":53965,"stem":53966,"__hash__":53967},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51106,"toc":53914},[51107,51110,51114,51118,51123,51126,51131,51135,51142,51147,51154,51159,51166,51171,51175,51180,51183,51187,51192,51196,51201,51204,51207,51210,51213,51216,51219,51222,51225,51230,51235,51240,51244,51247,51250,51254,51259,51262,51270,51275,51292,51300,51305,51310,51315,51320,51325,51328,51333,51338,51342,51351,51356,51361,51365,51370,51373,51377,51382,51390,51395,51400,51403,51408,51413,51418,51421,51424,51427,51432,51437,51440,51445,51448,51453,51456,51459,51462,51467,51470,51473,51488,51493,51498,51503,51506,51509,51512,51526,51529,51534,51539,51542,51545,51548,51551,51554,51557,51560,51564,51568,51573,51577,51580,51585,51590,51593,51598,51601,51605,51610,51613,51616,51619,51622,51625,51628,51631,51634,51637,51641,51646,51651,51656,51659,51662,51666,51671,51674,51678,51681,51684,51689,51692,51695,51699,51703,51706,51711,51716,51719,51748,51753,51758,51763,51768,51772,51777,51781,51786,51789,51793,51797,51802,51806,51811,51816,51820,51825,51828,51830,51833,51838,51842,51847,51851,51855,51860,51865,51870,51875,51879,51884,51889,51894,51897,51900,51905,51908,51913,51918,51923,51928,51932,52733,52737,53080,53085,53088,53091,53094,53097,53100,53103,53106,53109,53111,53114,53116,53119,53123,53128,53131,53134,53137,53141,53146,53151,53171,53174,53178,53183,53188,53205,53209,53238,53242,53264,53266,53305,53313,53319,53323,53326,53329,53334,53339,53342,53345,53348,53353,53358,53361,53364,53367,53370,53373,53376,53379,53382,53385,53388,53391,53393,53396,53399,53402,53405,53408,53411,53414,53417,53421,53426,53429,53434,53437,53440,53443,53446,53449,53452,53455,53457,53460,53463,53466,53469,53472,53475,53479,53482,53491,53494,53499,53502,53507,53510,53513,53516,53519,53522,53525,53528,53532,53536,53539,53542,53547,53552,53557,53561,53566,53571,53574,53577,53580,53583,53586,53591,53594,53599,53601,53606,53609,53613,53618,53621,53624,53629,53633,53636,53641,53644,53647,53676,53681,53684,53687,53690,53693,53696,53700,53703,53789,53793,53796,53801,53806,53813,53816,53819,53822,53825,53828,53833,53838,53841,53844,53847,53850,53853,53856,53859,53862,53865,53867,53870,53874,53879,53884,53889,53892,53897,53902,53905,53908,53911],[10,51108,51104],{"id":51109},"_2基础语法",[14,51111,51113],{"id":51112},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[114,51115,51117],{"id":51116},"_211-js组成","2.1.1 js组成",[19,51119,51120],{},[22,51121,51122],{},"js是编程语言，html和css不是编程语言，是标记语言",[175,51124,51125],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[19,51127,51128],{"start":68},[22,51129,51130],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[114,51132,51134],{"id":51133},"_212-js书写位置","2.1.2 js书写位置",[19,51136,51137],{},[22,51138,51139],{},[25,51140,51141],{},"内部 JavaScript",[175,51143,51144],{},[119,51145],{"alt":53,"src":51146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[19,51148,51149],{"start":68},[22,51150,51151],{},[25,51152,51153],{},"外部 JavaScript",[175,51155,51156],{},[119,51157],{"alt":53,"src":51158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[19,51160,51161],{"start":79},[22,51162,51163],{},[25,51164,51165],{},"内联 JavaScript",[175,51167,51168],{},[119,51169],{"alt":53,"src":51170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[114,51172,51174],{"id":51173},"_213-javascript注释","2.1.3 JavaScript注释",[175,51176,51177],{},[119,51178],{"alt":53,"src":51179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[175,51181,51182],{},"alt+shift+a一定要记住！",[114,51184,51186],{"id":51185},"_214-javascript结束符","2.1.4 JavaScript结束符",[175,51188,51189],{},[119,51190],{"alt":53,"src":51191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[114,51193,51195],{"id":51194},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[19,51197,51198],{},[22,51199,51200],{},"输出语法：",[175,51202,51203],{},"①document.write('要出的内容')",[175,51205,51206],{},"向body内输出内容；",[175,51208,51209],{},"如果输出的内容写的是标签，也会被解析cheng",[175,51211,51212],{},"②alert('要出的内容')",[175,51214,51215],{},"页面弹出警告对话框",[175,51217,51218],{},"③console.log('控制台打印')",[175,51220,51221],{},"控制台输出语法，程序员调试使用",[175,51223,51224],{},"输入log就行，自动生成：",[175,51226,51227],{},[119,51228],{"alt":53,"src":51229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[19,51231,51232],{"start":68},[22,51233,51234],{},"输入语法：",[175,51236,51237],{},[119,51238],{"alt":53,"src":51239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[114,51241,51243],{"id":51242},"_2116-字面量","21.1.6 字面量",[175,51245,51246],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[175,51248,51249],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,51251,51253],{"id":51252},"_22-变量","2.2 变量",[19,51255,51256],{},[22,51257,51258],{},"变量声明",[175,51260,51261],{},"let 变量名",[124,51263,51264,51267],{},[22,51265,51266],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[22,51268,51269],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[19,51271,51272],{"start":68},[22,51273,51274],{},"变量赋值",[48,51276,51280],{"className":51277,"code":51278,"language":51279,"meta":53,"style":53},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[55,51281,51282,51287],{"__ignoreMap":53},[58,51283,51284],{"class":60,"line":61},[58,51285,51286],{"class":75},"let age\n",[58,51288,51289],{"class":60,"line":68},[58,51290,51291],{"class":75},"age=18\n",[19,51293,51294,51297],{"start":79},[22,51295,51296],{},"连这些（变量的初始化）：let age=18",[22,51298,51299],{},"更新变量",[175,51301,51302],{},[119,51303],{"alt":53,"src":51304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[19,51306,51307],{"start":627},[22,51308,51309],{},"声明多个变量",[175,51311,51312],{},[119,51313],{"alt":53,"src":51314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[19,51316,51317],{"start":509},[22,51318,51319],{},"变量命名规则与规范",[175,51321,51322],{},[119,51323],{"alt":53,"src":51324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[175,51326,51327],{},"遵守小驼峰！",[19,51329,51330],{"start":559},[22,51331,51332],{},"变量拓展-let和var的区别",[175,51334,51335],{},[119,51336],{"alt":53,"src":51337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,51339,51341],{"id":51340},"_23-数组","2.3 数组",[48,51343,51345],{"className":51277,"code":51344,"language":51279,"meta":53,"style":53},"let arr = []\n",[55,51346,51347],{"__ignoreMap":53},[58,51348,51349],{"class":60,"line":61},[58,51350,51344],{"class":75},[175,51352,51353],{},[119,51354],{"alt":53,"src":51355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[175,51357,51358],{},[119,51359],{"alt":53,"src":51360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,51362,51364],{"id":51363},"_24-常量","2.4 常量",[175,51366,51367],{},[119,51368],{"alt":53,"src":51369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[175,51371,51372],{},"const — 类似于 let ，但是变量的值无法被修改",[14,51374,51376],{"id":51375},"_25-数据类型","2.5 数据类型",[175,51378,51379],{},[119,51380],{"alt":53,"src":51381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[19,51383,51384,51387],{},[22,51385,51386],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[22,51388,51389],{},"算数运算符：",[175,51391,51392],{},[119,51393],{"alt":53,"src":51394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[19,51396,51397],{"start":79},[22,51398,51399],{},"数字类型（Number）",[175,51401,51402],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[175,51404,51405],{},[119,51406],{"alt":53,"src":51407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[19,51409,51410],{"start":105},[22,51411,51412],{},"字符串类型（string）",[175,51414,51415],{},[119,51416],{"alt":53,"src":51417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[175,51419,51420],{},"反引号也是可以使用的",[175,51422,51423],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[175,51425,51426],{},"例如：document.write(\"我今年\"+age+\"岁\")",[19,51428,51429],{"start":627},[22,51430,51431],{},"模板字符串",[175,51433,51434],{},[119,51435],{"alt":53,"src":51436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[175,51438,51439],{},"类似于python的字符串格式化",[19,51441,51442],{"start":509},[22,51443,51444],{},"布尔类型",[175,51446,51447],{},"true 和 false",[19,51449,51450],{"start":559},[22,51451,51452],{},"未定义类型（underfined）",[175,51454,51455],{},"表示没有赋值",[175,51457,51458],{},"未定义类型是比较特殊的类型，只有一个值undefined",[175,51460,51461],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[19,51463,51464],{"start":654},[22,51465,51466],{},"null（空类型）",[175,51468,51469],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[175,51471,51472],{},"赋值了，但是内容为空",[48,51474,51476],{"className":51277,"code":51475,"language":51279,"meta":53,"style":53},"typeof null\n输出的是'object'，是一个对象数据类型\n",[55,51477,51478,51483],{"__ignoreMap":53},[58,51479,51480],{"class":60,"line":61},[58,51481,51482],{"class":75},"typeof null\n",[58,51484,51485],{"class":60,"line":68},[58,51486,51487],{"class":75},"输出的是'object'，是一个对象数据类型\n",[19,51489,51490],{"start":671},[22,51491,51492],{},"控制台检测数据类型",[175,51494,51495],{},[119,51496],{"alt":53,"src":51497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[19,51499,51500],{"start":677},[22,51501,51502],{},"类型转换",[175,51504,51505],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[175,51507,51508],{},"转换方式：隐式转换和显示转换",[175,51510,51511],{},"①隐式转换",[124,51513,51514,51517,51520,51523],{},[22,51515,51516],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[22,51518,51519],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[22,51521,51522],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[22,51524,51525],{},"任何数据和字符串相加结果都是字符串",[175,51527,51528],{},"②显示转换",[175,51530,51531],{},[119,51532],{"alt":53,"src":51533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[175,51535,51536],{},[119,51537],{"alt":53,"src":51538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[175,51540,51541],{},"在输入的时候要用好隐式转换，简单写起来",[175,51543,51544],{},"let num = +prompt(’请输入数字：‘)",[175,51546,51547],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[175,51549,51550],{},"console.log(parseInt('12.333px'))",[175,51552,51553],{},"输出为：12",[175,51555,51556],{},"console.log(parseInt('a'a'a12.333px'))",[175,51558,51559],{},"输出：NaN",[14,51561,51563],{"id":51562},"_26-运算符","2.6 运算符",[114,51565,51567],{"id":51566},"_261-赋值运算符","2.6.1 赋值运算符",[175,51569,51570],{},[119,51571],{"alt":53,"src":51572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[114,51574,51576],{"id":51575},"_262-一元运算符","2.6.2 一元运算符",[175,51578,51579],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[175,51581,51582],{},[119,51583],{"alt":53,"src":51584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[175,51586,51587],{},[119,51588],{"alt":53,"src":51589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[175,51591,51592],{},"两者的区别：",[175,51594,51595],{},[119,51596],{"alt":53,"src":51597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[175,51599,51600],{},"前置先自加；后置后加，代码执行完之后再加",[114,51602,51604],{"id":51603},"_263-比较运算符","2.6.3 比较运算符",[175,51606,51607],{},[119,51608],{"alt":53,"src":51609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[175,51611,51612],{},"比较运算符也有隐式转换",[175,51614,51615],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[175,51617,51618],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[175,51620,51621],{},"要使用三等，开发的时候",[175,51623,51624],{},"NaN不等于任何人，包括它自己",[175,51626,51627],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[175,51629,51630],{},"7\u002F10=0.7",[175,51632,51633],{},"最后：0.5+0.2=0.7",[175,51635,51636],{},"字符串比较，比较的是字符对应的ASCII码",[114,51638,51640],{"id":51639},"_264-逻辑运算符","2.6.4 逻辑运算符",[175,51642,51643],{},[119,51644],{"alt":53,"src":51645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[175,51647,51648],{},[119,51649],{"alt":53,"src":51650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[175,51652,51653],{},[119,51654],{"alt":53,"src":51655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[175,51657,51658],{},"上述题目选D",[175,51660,51661],{},"与真2假1；或真1假2",[114,51663,51665],{"id":51664},"_265-运算符优先级","2.6.5 运算符优先级",[175,51667,51668],{},[119,51669],{"alt":53,"src":51670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[175,51672,51673],{},"先算逻辑与，后算逻辑或",[14,51675,51677],{"id":51676},"_27-语句","2.7 语句",[175,51679,51680],{},"表达式：是可以被求值的代码，会有结果给我们",[175,51682,51683],{},"语句：语句是可以被执行的代码，例如prompt()",[175,51685,51686],{},[119,51687],{"alt":53,"src":51688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[175,51690,51691],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[175,51693,51694],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[114,51696,51698],{"id":51697},"_271-分支语句","2.7.1 分支语句",[22641,51700,51702],{"id":51701},"_2711-if分支语句","2.7.1.1 if分支语句",[175,51704,51705],{},"if语句单行简单的话，可以不写{}，写在一行就行",[19,51707,51708],{},[22,51709,51710],{},"单分支语句",[175,51712,51713],{},[119,51714],{"alt":53,"src":51715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[175,51717,51718],{},"除了0，所有数字都为真",[48,51720,51722],{"className":51277,"code":51721,"language":51279,"meta":53,"style":53},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[55,51723,51724,51729,51734,51739,51743],{"__ignoreMap":53},[58,51725,51726],{"class":60,"line":61},[58,51727,51728],{"class":75},"if（0) {\n",[58,51730,51731],{"class":60,"line":68},[58,51732,51733],{"class":75},"    let a=1\n",[58,51735,51736],{"class":60,"line":79},[58,51737,51738],{"class":75},"    alert(typeof a)\n",[58,51740,51741],{"class":60,"line":105},[58,51742,108],{"class":75},[58,51744,51745],{"class":60,"line":627},[58,51746,51747],{"class":75},"不输出，括号为假\n",[19,51749,51750],{"start":68},[22,51751,51752],{},"双分支语句",[175,51754,51755],{},[119,51756],{"alt":53,"src":51757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[19,51759,51760],{"start":79},[22,51761,51762],{},"多分支语句",[175,51764,51765],{},[119,51766],{"alt":53,"src":51767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22641,51769,51771],{"id":51770},"_2712-三元运算符","2.7.1.2 三元运算符",[175,51773,51774],{},[119,51775],{"alt":53,"src":51776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22641,51778,51780],{"id":51779},"_2713-switch语句","2.7.1.3 switch语句",[175,51782,51783],{},[119,51784],{"alt":53,"src":51785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[175,51787,51788],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[114,51790,51792],{"id":51791},"_272-循环语句","2.7.2 循环语句",[22641,51794,51796],{"id":51795},"_2721-断点演示","2.7.2.1 断点演示",[175,51798,51799],{},[119,51800],{"alt":53,"src":51801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22641,51803,51805],{"id":51804},"_2722-while循环","2.7.2.2 while循环",[175,51807,51808],{},[119,51809],{"alt":53,"src":51810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[175,51812,51813],{},[119,51814],{"alt":53,"src":51815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22641,51817,51819],{"id":51818},"_2723-for循环","2.7.2.3 for循环",[175,51821,51822],{},[119,51823],{"alt":53,"src":51824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[175,51826,51827],{},"for(;;) {",[175,51829,1730],{},[175,51831,51832],{},"表示无限循环",[175,51834,51835],{},[119,51836],{"alt":53,"src":51837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22641,51839,51841],{"id":51840},"_2724-循环的退出","2.7.2.4 循环的退出",[175,51843,51844],{},[119,51845],{"alt":53,"src":51846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,51848,51850],{"id":51849},"_28-数组","2.8 数组",[114,51852,51854],{"id":51853},"_281-基础认识","2.8.1 基础认识",[175,51856,51857],{},[119,51858],{"alt":53,"src":51859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[175,51861,51862],{},[119,51863],{"alt":53,"src":51864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[175,51866,51867],{},[119,51868],{"alt":53,"src":51869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[175,51871,51872],{},[119,51873],{"alt":53,"src":51874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[114,51876,51878],{"id":51877},"_282-操作数组","2.8.2 操作数组",[175,51880,51881],{},[119,51882],{"alt":53,"src":51883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[19,51885,51886],{},[22,51887,51888],{},"添加元素",[175,51890,51891],{},[119,51892],{"alt":53,"src":51893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[175,51895,51896],{},"console.log(arr.push('green'))",[175,51898,51899],{},"输出结果：为新数组的长度",[175,51901,51902],{},[119,51903],{"alt":53,"src":51904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[175,51906,51907],{},"push用的非常多，一定要记住",[19,51909,51910],{},[22,51911,51912],{},"删除元素",[175,51914,51915],{},[119,51916],{"alt":53,"src":51917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[175,51919,51920],{},[119,51921],{"alt":53,"src":51922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[175,51924,51925],{},[119,51926],{"alt":53,"src":51927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[114,51929,51931],{"id":51930},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[48,51933,51935],{"className":51277,"code":51934,"language":51279,"meta":53,"style":53},"\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",[55,51936,51937,51950,51966,51970,51979,51997,52021,52043,52057,52065,52072,52083,52094,52098,52102,52109,52121,52135,52148,52166,52183,52198,52210,52222,52234,52238,52242,52252,52262,52274,52286,52298,52309,52313,52317,52329,52333,52347,52351,52355,52366,52380,52392,52406,52410,52419,52428,52432,52441,52445,52454,52459,52464,52477,52505,52510,52515,52540,52545,52549,52554,52559,52574,52578,52583,52613,52625,52641,52657,52671,52676,52683,52687,52692,52705,52713,52721,52725],{"__ignoreMap":53},[58,51938,51939,51942,51945,51948],{"class":60,"line":61},[58,51940,51941],{"class":75},"\u003C!",[58,51943,51944],{"class":71},"DOCTYPE",[58,51946,51947],{"class":379}," html",[58,51949,403],{"class":75},[58,51951,51952,51954,51956,51959,51961,51964],{"class":60,"line":68},[58,51953,373],{"class":75},[58,51955,51279],{"class":71},[58,51957,51958],{"class":379}," lang",[58,51960,383],{"class":75},[58,51962,51963],{"class":386},"\"en\"",[58,51965,403],{"class":75},[58,51967,51968],{"class":60,"line":79},[58,51969,3046],{"emptyLinePlaceholder":720},[58,51971,51972,51974,51977],{"class":60,"line":105},[58,51973,373],{"class":75},[58,51975,51976],{"class":71},"head",[58,51978,403],{"class":75},[58,51980,51981,51984,51987,51990,51992,51995],{"class":60,"line":627},[58,51982,51983],{"class":75},"    \u003C",[58,51985,51986],{"class":71},"meta",[58,51988,51989],{"class":379}," charset",[58,51991,383],{"class":75},[58,51993,51994],{"class":386},"\"UTF-8\"",[58,51996,403],{"class":75},[58,51998,51999,52001,52003,52006,52008,52011,52014,52016,52019],{"class":60,"line":509},[58,52000,51983],{"class":75},[58,52002,51986],{"class":71},[58,52004,52005],{"class":379}," http-equiv",[58,52007,383],{"class":75},[58,52009,52010],{"class":386},"\"X-UA-Compatible\"",[58,52012,52013],{"class":379}," content",[58,52015,383],{"class":75},[58,52017,52018],{"class":386},"\"IE=edge\"",[58,52020,403],{"class":75},[58,52022,52023,52025,52027,52029,52031,52034,52036,52038,52041],{"class":60,"line":559},[58,52024,51983],{"class":75},[58,52026,51986],{"class":71},[58,52028,15564],{"class":379},[58,52030,383],{"class":75},[58,52032,52033],{"class":386},"\"viewport\"",[58,52035,52013],{"class":379},[58,52037,383],{"class":75},[58,52039,52040],{"class":386},"\"width=device-width, initial-scale=1.0\"",[58,52042,403],{"class":75},[58,52044,52045,52047,52050,52053,52055],{"class":60,"line":654},[58,52046,51983],{"class":75},[58,52048,52049],{"class":71},"title",[58,52051,52052],{"class":75},">Document\u003C\u002F",[58,52054,52049],{"class":71},[58,52056,403],{"class":75},[58,52058,52059,52061,52063],{"class":60,"line":671},[58,52060,51983],{"class":75},[58,52062,702],{"class":71},[58,52064,403],{"class":75},[58,52066,52067,52070],{"class":60,"line":677},[58,52068,52069],{"class":71},"        *",[58,52071,76],{"class":75},[58,52073,52074,52077,52079,52081],{"class":60,"line":2260},[58,52075,52076],{"class":82},"            margin",[58,52078,86],{"class":75},[58,52080,979],{"class":82},[58,52082,102],{"class":75},[58,52084,52085,52088,52090,52092],{"class":60,"line":694},[58,52086,52087],{"class":82},"            padding",[58,52089,86],{"class":75},[58,52091,979],{"class":82},[58,52093,102],{"class":75},[58,52095,52096],{"class":60,"line":2270},[58,52097,3175],{"class":75},[58,52099,52100],{"class":60,"line":2275},[58,52101,3046],{"emptyLinePlaceholder":720},[58,52103,52104,52107],{"class":60,"line":2289},[58,52105,52106],{"class":379},"        .box",[58,52108,76],{"class":75},[58,52110,52111,52114,52116,52119],{"class":60,"line":2294},[58,52112,52113],{"class":82},"            display",[58,52115,86],{"class":75},[58,52117,52118],{"class":82},"flex",[58,52120,102],{"class":75},[58,52122,52123,52126,52128,52131,52133],{"class":60,"line":2300},[58,52124,52125],{"class":82},"            width",[58,52127,86],{"class":75},[58,52129,52130],{"class":82},"700",[58,52132,93],{"class":92},[58,52134,102],{"class":75},[58,52136,52137,52140,52142,52144,52146],{"class":60,"line":2321},[58,52138,52139],{"class":82},"            height",[58,52141,86],{"class":75},[58,52143,4619],{"class":82},[58,52145,93],{"class":92},[58,52147,102],{"class":75},[58,52149,52150,52153,52155,52157,52159,52161,52164],{"class":60,"line":2326},[58,52151,52152],{"class":82},"            border-left",[58,52154,86],{"class":75},[58,52156,89],{"class":82},[58,52158,93],{"class":92},[58,52160,96],{"class":82},[58,52162,52163],{"class":82}," pink",[58,52165,102],{"class":75},[58,52167,52168,52171,52173,52175,52177,52179,52181],{"class":60,"line":2340},[58,52169,52170],{"class":82},"            border-bottom",[58,52172,86],{"class":75},[58,52174,89],{"class":82},[58,52176,93],{"class":92},[58,52178,96],{"class":82},[58,52180,52163],{"class":82},[58,52182,102],{"class":75},[58,52184,52185,52187,52189,52191,52193,52196],{"class":60,"line":2345},[58,52186,52076],{"class":82},[58,52188,86],{"class":75},[58,52190,1442],{"class":82},[58,52192,93],{"class":92},[58,52194,52195],{"class":82}," auto",[58,52197,102],{"class":75},[58,52199,52200,52203,52205,52208],{"class":60,"line":2374},[58,52201,52202],{"class":82},"            justify-content",[58,52204,86],{"class":75},[58,52206,52207],{"class":82},"space-around",[58,52209,102],{"class":75},[58,52211,52212,52215,52217,52220],{"class":60,"line":2379},[58,52213,52214],{"class":82},"            align-items",[58,52216,86],{"class":75},[58,52218,52219],{"class":82},"flex-end",[58,52221,102],{"class":75},[58,52223,52224,52227,52229,52232],{"class":60,"line":2396},[58,52225,52226],{"class":82},"            text-align",[58,52228,86],{"class":75},[58,52230,52231],{"class":82},"center",[58,52233,102],{"class":75},[58,52235,52236],{"class":60,"line":2401},[58,52237,3175],{"class":75},[58,52239,52240],{"class":60,"line":2406},[58,52241,3046],{"emptyLinePlaceholder":720},[58,52243,52244,52246,52248,52250],{"class":60,"line":2411},[58,52245,52106],{"class":379},[58,52247,1744],{"class":92},[58,52249,72],{"class":71},[58,52251,76],{"class":75},[58,52253,52254,52256,52258,52260],{"class":60,"line":2425},[58,52255,52113],{"class":82},[58,52257,86],{"class":75},[58,52259,52118],{"class":82},[58,52261,102],{"class":75},[58,52263,52264,52266,52268,52270,52272],{"class":60,"line":2430},[58,52265,52125],{"class":82},[58,52267,86],{"class":75},[58,52269,1442],{"class":82},[58,52271,93],{"class":92},[58,52273,102],{"class":75},[58,52275,52276,52279,52281,52284],{"class":60,"line":3223},[58,52277,52278],{"class":82},"            background-color",[58,52280,86],{"class":75},[58,52282,52283],{"class":82},"pink",[58,52285,102],{"class":75},[58,52287,52288,52291,52293,52296],{"class":60,"line":3237},[58,52289,52290],{"class":82},"            flex-direction",[58,52292,86],{"class":75},[58,52294,52295],{"class":82},"column",[58,52297,102],{"class":75},[58,52299,52300,52302,52304,52307],{"class":60,"line":3245},[58,52301,52202],{"class":82},[58,52303,86],{"class":75},[58,52305,52306],{"class":82},"space-between",[58,52308,102],{"class":75},[58,52310,52311],{"class":60,"line":3250},[58,52312,3175],{"class":75},[58,52314,52315],{"class":60,"line":3256},[58,52316,3046],{"emptyLinePlaceholder":720},[58,52318,52319,52321,52324,52327],{"class":60,"line":3262},[58,52320,52106],{"class":379},[58,52322,52323],{"class":71}," div",[58,52325,52326],{"class":71}," span",[58,52328,76],{"class":75},[58,52330,52331],{"class":60,"line":3267},[58,52332,3046],{"emptyLinePlaceholder":720},[58,52334,52335,52338,52340,52343,52345],{"class":60,"line":8594},[58,52336,52337],{"class":82},"            margin-top",[58,52339,86],{"class":75},[58,52341,52342],{"class":82},"-20",[58,52344,93],{"class":92},[58,52346,102],{"class":75},[58,52348,52349],{"class":60,"line":8618},[58,52350,3175],{"class":75},[58,52352,52353],{"class":60,"line":8623},[58,52354,3046],{"emptyLinePlaceholder":720},[58,52356,52357,52359,52361,52364],{"class":60,"line":8629},[58,52358,52106],{"class":379},[58,52360,52323],{"class":71},[58,52362,52363],{"class":71}," h4",[58,52365,76],{"class":75},[58,52367,52368,52371,52373,52376,52378],{"class":60,"line":8656},[58,52369,52370],{"class":82},"            margin-bottom",[58,52372,86],{"class":75},[58,52374,52375],{"class":82},"-35",[58,52377,93],{"class":92},[58,52379,102],{"class":75},[58,52381,52382,52384,52386,52388,52390],{"class":60,"line":8661},[58,52383,52125],{"class":82},[58,52385,86],{"class":75},[58,52387,1142],{"class":82},[58,52389,93],{"class":92},[58,52391,102],{"class":75},[58,52393,52394,52397,52399,52402,52404],{"class":60,"line":8667},[58,52395,52396],{"class":82},"            margin-left",[58,52398,86],{"class":75},[58,52400,52401],{"class":82},"-10",[58,52403,93],{"class":92},[58,52405,102],{"class":75},[58,52407,52408],{"class":60,"line":8679},[58,52409,3175],{"class":75},[58,52411,52412,52415,52417],{"class":60,"line":8691},[58,52413,52414],{"class":75},"    \u003C\u002F",[58,52416,702],{"class":71},[58,52418,403],{"class":75},[58,52420,52421,52424,52426],{"class":60,"line":8703},[58,52422,52423],{"class":75},"\u003C\u002F",[58,52425,51976],{"class":71},[58,52427,403],{"class":75},[58,52429,52430],{"class":60,"line":10361},[58,52431,3046],{"emptyLinePlaceholder":720},[58,52433,52434,52436,52439],{"class":60,"line":10386},[58,52435,373],{"class":75},[58,52437,52438],{"class":71},"body",[58,52440,403],{"class":75},[58,52442,52443],{"class":60,"line":10409},[58,52444,3046],{"emptyLinePlaceholder":720},[58,52446,52447,52449,52452],{"class":60,"line":10433},[58,52448,51983],{"class":75},[58,52450,52451],{"class":71},"script",[58,52453,403],{"class":75},[58,52455,52456],{"class":60,"line":10438},[58,52457,52458],{"class":64},"        \u002F\u002F 1. 四次弹框效果\n",[58,52460,52461],{"class":60,"line":10443},[58,52462,52463],{"class":64},"        \u002F\u002F 声明一个新的数组\n",[58,52465,52466,52469,52472,52474],{"class":60,"line":10448},[58,52467,52468],{"class":92},"        let",[58,52470,52471],{"class":75}," arr ",[58,52473,383],{"class":92},[58,52475,52476],{"class":75}," []\n",[58,52478,52479,52481,52483,52486,52488,52490,52492,52494,52496,52499,52501,52503],{"class":60,"line":10457},[58,52480,4049],{"class":92},[58,52482,2305],{"class":75},[58,52484,52485],{"class":92},"let",[58,52487,10083],{"class":75},[58,52489,383],{"class":92},[58,52491,25762],{"class":82},[58,52493,10090],{"class":75},[58,52495,2236],{"class":92},[58,52497,52498],{"class":82}," 4",[58,52500,3860],{"class":75},[58,52502,2938],{"class":92},[58,52504,13086],{"class":75},[58,52506,52507],{"class":60,"line":10462},[58,52508,52509],{"class":64},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[58,52511,52512],{"class":60,"line":10468},[58,52513,52514],{"class":64},"            \u002F\u002F arr.push(num)\n",[58,52516,52517,52520,52523,52525,52528,52530,52533,52535,52538],{"class":60,"line":10489},[58,52518,52519],{"class":75},"            arr.",[58,52521,52522],{"class":379},"push",[58,52524,793],{"class":75},[58,52526,52527],{"class":379},"prompt",[58,52529,793],{"class":75},[58,52531,52532],{"class":386},"`请输入第${",[58,52534,1227],{"class":75},[58,52536,52537],{"class":386},"}季度的数据:`",[58,52539,31141],{"class":75},[58,52541,52542],{"class":60,"line":10495},[58,52543,52544],{"class":64},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[58,52546,52547],{"class":60,"line":10509},[58,52548,3175],{"class":75},[58,52550,52551],{"class":60,"line":10515},[58,52552,52553],{"class":64},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[58,52555,52556],{"class":60,"line":10542},[58,52557,52558],{"class":64},"        \u002F\u002F 盒子开头\n",[58,52560,52561,52564,52567,52569,52572],{"class":60,"line":10551},[58,52562,52563],{"class":75},"        document.",[58,52565,52566],{"class":379},"write",[58,52568,793],{"class":75},[58,52570,52571],{"class":386},"` \u003Cdiv class=\"box\">`",[58,52573,799],{"class":75},[58,52575,52576],{"class":60,"line":10557},[58,52577,3046],{"emptyLinePlaceholder":720},[58,52579,52580],{"class":60,"line":10565},[58,52581,52582],{"class":64},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[58,52584,52585,52587,52589,52591,52593,52595,52597,52599,52601,52604,52607,52609,52611],{"class":60,"line":10570},[58,52586,4049],{"class":92},[58,52588,2305],{"class":75},[58,52590,52485],{"class":92},[58,52592,10083],{"class":75},[58,52594,383],{"class":92},[58,52596,4739],{"class":82},[58,52598,10090],{"class":75},[58,52600,373],{"class":92},[58,52602,52603],{"class":75}," arr.",[58,52605,52606],{"class":82},"length",[58,52608,3860],{"class":75},[58,52610,2938],{"class":92},[58,52612,13086],{"class":75},[58,52614,52615,52618,52620,52622],{"class":60,"line":17247},[58,52616,52617],{"class":75},"            document.",[58,52619,52566],{"class":379},[58,52621,793],{"class":75},[58,52623,52624],{"class":386},"`\n",[58,52626,52627,52630,52632,52634,52636,52638],{"class":60,"line":17253},[58,52628,52629],{"class":386},"              \u003Cdiv style=\"height: ${",[58,52631,4526],{"class":75},[58,52633,1675],{"class":386},[58,52635,1227],{"class":75},[58,52637,1724],{"class":386},[58,52639,52640],{"class":386},"}px;\">\n",[58,52642,52643,52646,52648,52650,52652,52654],{"class":60,"line":17276},[58,52644,52645],{"class":386},"                \u003Cspan>${",[58,52647,4526],{"class":75},[58,52649,1675],{"class":386},[58,52651,1227],{"class":75},[58,52653,1724],{"class":386},[58,52655,52656],{"class":386},"}\u003C\u002Fspan>\n",[58,52658,52659,52662,52664,52666,52668],{"class":60,"line":17282},[58,52660,52661],{"class":386},"                \u003Ch4>第${",[58,52663,1227],{"class":75},[58,52665,46210],{"class":92},[58,52667,25762],{"class":82},[58,52669,52670],{"class":386},"}季度\u003C\u002Fh4>\n",[58,52672,52673],{"class":60,"line":17305},[58,52674,52675],{"class":386},"              \u003C\u002Fdiv>          \n",[58,52677,52678,52681],{"class":60,"line":17319},[58,52679,52680],{"class":386},"            `",[58,52682,799],{"class":75},[58,52684,52685],{"class":60,"line":17339},[58,52686,3175],{"class":75},[58,52688,52689],{"class":60,"line":17345},[58,52690,52691],{"class":64},"        \u002F\u002F 盒子结尾\n",[58,52693,52694,52696,52698,52700,52703],{"class":60,"line":17356},[58,52695,52563],{"class":75},[58,52697,52566],{"class":379},[58,52699,793],{"class":75},[58,52701,52702],{"class":386},"` \u003C\u002Fdiv>`",[58,52704,799],{"class":75},[58,52706,52707,52709,52711],{"class":60,"line":17379},[58,52708,52414],{"class":75},[58,52710,52451],{"class":71},[58,52712,403],{"class":75},[58,52714,52715,52717,52719],{"class":60,"line":17401},[58,52716,52423],{"class":75},[58,52718,52438],{"class":71},[58,52720,403],{"class":75},[58,52722,52723],{"class":60,"line":17406},[58,52724,3046],{"emptyLinePlaceholder":720},[58,52726,52727,52729,52731],{"class":60,"line":17412},[58,52728,52423],{"class":75},[58,52730,51279],{"class":71},[58,52732,403],{"class":75},[114,52734,52736],{"id":52735},"_284-冒泡排序","2.8.4 冒泡排序",[48,52738,52740],{"className":51277,"code":52739,"language":51279,"meta":53,"style":53},"\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",[55,52741,52742,52752,52766,52770,52778,52793,52813,52825,52833,52837,52845,52853,52885,52918,52955,52960,52979,52984,52997,53012,53028,53032,53037,53041,53051,53060,53068,53072],{"__ignoreMap":53},[58,52743,52744,52746,52748,52750],{"class":60,"line":61},[58,52745,51941],{"class":75},[58,52747,51944],{"class":71},[58,52749,51947],{"class":379},[58,52751,403],{"class":75},[58,52753,52754,52756,52758,52760,52762,52764],{"class":60,"line":68},[58,52755,373],{"class":75},[58,52757,51279],{"class":71},[58,52759,51958],{"class":379},[58,52761,383],{"class":75},[58,52763,51963],{"class":386},[58,52765,403],{"class":75},[58,52767,52768],{"class":60,"line":79},[58,52769,3046],{"emptyLinePlaceholder":720},[58,52771,52772,52774,52776],{"class":60,"line":105},[58,52773,373],{"class":75},[58,52775,51976],{"class":71},[58,52777,403],{"class":75},[58,52779,52780,52783,52785,52787,52789,52791],{"class":60,"line":627},[58,52781,52782],{"class":75},"  \u003C",[58,52784,51986],{"class":71},[58,52786,51989],{"class":379},[58,52788,383],{"class":75},[58,52790,51994],{"class":386},[58,52792,403],{"class":75},[58,52794,52795,52797,52799,52801,52803,52805,52807,52809,52811],{"class":60,"line":509},[58,52796,52782],{"class":75},[58,52798,51986],{"class":71},[58,52800,15564],{"class":379},[58,52802,383],{"class":75},[58,52804,52033],{"class":386},[58,52806,52013],{"class":379},[58,52808,383],{"class":75},[58,52810,52040],{"class":386},[58,52812,403],{"class":75},[58,52814,52815,52817,52819,52821,52823],{"class":60,"line":559},[58,52816,52782],{"class":75},[58,52818,52049],{"class":71},[58,52820,52052],{"class":75},[58,52822,52049],{"class":71},[58,52824,403],{"class":75},[58,52826,52827,52829,52831],{"class":60,"line":654},[58,52828,52423],{"class":75},[58,52830,51976],{"class":71},[58,52832,403],{"class":75},[58,52834,52835],{"class":60,"line":671},[58,52836,3046],{"emptyLinePlaceholder":720},[58,52838,52839,52841,52843],{"class":60,"line":677},[58,52840,373],{"class":75},[58,52842,52438],{"class":71},[58,52844,403],{"class":75},[58,52846,52847,52849,52851],{"class":60,"line":2260},[58,52848,52782],{"class":75},[58,52850,52451],{"class":71},[58,52852,403],{"class":75},[58,52854,52855,52858,52860,52862,52865,52867,52869,52871,52873,52875,52877,52879,52881,52883],{"class":60,"line":694},[58,52856,52857],{"class":92},"    let",[58,52859,52471],{"class":75},[58,52861,383],{"class":92},[58,52863,52864],{"class":75}," [",[58,52866,1105],{"class":82},[58,52868,469],{"class":75},[58,52870,1079],{"class":82},[58,52872,469],{"class":75},[58,52874,861],{"class":82},[58,52876,469],{"class":75},[58,52878,867],{"class":82},[58,52880,469],{"class":75},[58,52882,89],{"class":82},[58,52884,33890],{"class":75},[58,52886,52887,52889,52891,52893,52895,52897,52899,52901,52903,52905,52907,52910,52912,52914,52916],{"class":60,"line":2270},[58,52888,3847],{"class":92},[58,52890,2305],{"class":75},[58,52892,52485],{"class":92},[58,52894,10083],{"class":75},[58,52896,383],{"class":92},[58,52898,4739],{"class":82},[58,52900,10090],{"class":75},[58,52902,373],{"class":92},[58,52904,52603],{"class":75},[58,52906,52606],{"class":82},[58,52908,52909],{"class":92}," -",[58,52911,25762],{"class":82},[58,52913,3860],{"class":75},[58,52915,2938],{"class":92},[58,52917,13086],{"class":75},[58,52919,52920,52923,52925,52927,52929,52931,52933,52935,52937,52939,52941,52943,52945,52947,52949,52951,52953],{"class":60,"line":2275},[58,52921,52922],{"class":92},"      for",[58,52924,2305],{"class":75},[58,52926,52485],{"class":92},[58,52928,10145],{"class":75},[58,52930,383],{"class":92},[58,52932,4739],{"class":82},[58,52934,10152],{"class":75},[58,52936,373],{"class":92},[58,52938,52603],{"class":75},[58,52940,52606],{"class":82},[58,52942,52909],{"class":92},[58,52944,10083],{"class":75},[58,52946,1318],{"class":92},[58,52948,25762],{"class":82},[58,52950,10159],{"class":75},[58,52952,2938],{"class":92},[58,52954,13086],{"class":75},[58,52956,52957],{"class":60,"line":2289},[58,52958,52959],{"class":64},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[58,52961,52962,52964,52967,52969,52972,52974,52976],{"class":60,"line":2294},[58,52963,3143],{"class":92},[58,52965,52966],{"class":75}," (arr[j] ",[58,52968,1744],{"class":92},[58,52970,52971],{"class":75}," arr[j ",[58,52973,1267],{"class":92},[58,52975,25762],{"class":82},[58,52977,52978],{"class":75},"]) {\n",[58,52980,52981],{"class":60,"line":2300},[58,52982,52983],{"class":64},"          \u002F\u002F 交换两个变量\n",[58,52985,52986,52989,52992,52994],{"class":60,"line":2321},[58,52987,52988],{"class":92},"          let",[58,52990,52991],{"class":75}," tmp ",[58,52993,383],{"class":92},[58,52995,52996],{"class":75}," arr[j]\n",[58,52998,52999,53002,53004,53006,53008,53010],{"class":60,"line":2326},[58,53000,53001],{"class":75},"          arr[j] ",[58,53003,383],{"class":92},[58,53005,52971],{"class":75},[58,53007,1267],{"class":92},[58,53009,25762],{"class":82},[58,53011,33890],{"class":75},[58,53013,53014,53017,53019,53021,53023,53025],{"class":60,"line":2340},[58,53015,53016],{"class":75},"          arr[j ",[58,53018,1267],{"class":92},[58,53020,25762],{"class":82},[58,53022,5089],{"class":75},[58,53024,383],{"class":92},[58,53026,53027],{"class":75}," tmp\n",[58,53029,53030],{"class":60,"line":2345},[58,53031,3175],{"class":75},[58,53033,53034],{"class":60,"line":2374},[58,53035,53036],{"class":75},"      }\n",[58,53038,53039],{"class":60,"line":2379},[58,53040,2833],{"class":75},[58,53042,53043,53046,53048],{"class":60,"line":2396},[58,53044,53045],{"class":75},"    document.",[58,53047,52566],{"class":379},[58,53049,53050],{"class":75},"(arr)\n",[58,53052,53053,53056,53058],{"class":60,"line":2401},[58,53054,53055],{"class":75},"  \u003C\u002F",[58,53057,52451],{"class":71},[58,53059,403],{"class":75},[58,53061,53062,53064,53066],{"class":60,"line":2406},[58,53063,52423],{"class":75},[58,53065,52438],{"class":71},[58,53067,403],{"class":75},[58,53069,53070],{"class":60,"line":2411},[58,53071,3046],{"emptyLinePlaceholder":720},[58,53073,53074,53076,53078],{"class":60,"line":2425},[58,53075,52423],{"class":75},[58,53077,51279],{"class":71},[58,53079,403],{"class":75},[175,53081,53082],{},[119,53083],{"alt":53,"src":53084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[175,53086,53087],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[175,53089,53090],{},"let arr = [4, 2, 5, 1, 3]",[175,53092,53093],{},"\u002F\u002F 1.升序排列写法",[175,53095,53096],{},"arr.sort(function (a, b) {",[175,53098,53099],{},"return a - b",[175,53101,53102],{},"})",[175,53104,53105],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[175,53107,53108],{},"\u002F\u002F 降序排列写法",[175,53110,53096],{},[175,53112,53113],{},"return b - a",[175,53115,53102],{},[175,53117,53118],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,53120,53122],{"id":53121},"_29-函数","2.9 函数",[175,53124,53125],{},[119,53126],{"alt":53,"src":53127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[175,53129,53130],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[175,53132,53133],{},"函数的声明用function",[175,53135,53136],{},"函数里边可以嵌套函数",[114,53138,53140],{"id":53139},"_291-函数传参","2.9.1 函数传参",[175,53142,53143],{},[119,53144],{"alt":53,"src":53145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[175,53147,53148],{},[119,53149],{"alt":53,"src":53150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[124,53152,53153,53156,53159,53162,53165,53168],{},[22,53154,53155],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[22,53157,53158],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[22,53160,53161],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[22,53163,53164],{},"开发中尽量保持形参和实参个数一致",[22,53166,53167],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[22,53169,53170],{},"形参只在函数中有用，所以不需要进行声明这个变量",[175,53172,53173],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[114,53175,53177],{"id":53176},"_292-函数的返回值","2.9.2 函数的返回值",[175,53179,53180],{},[119,53181],{"alt":53,"src":53182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[175,53184,53185],{},[119,53186],{"alt":53,"src":53187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[124,53189,53190,53193,53196,53199,53202],{},[22,53191,53192],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[22,53194,53195],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[22,53197,53198],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[22,53200,53201],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[22,53203,53204],{},"断点调试:进入函数内部看执行过程F11",[114,53206,53208],{"id":53207},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[48,53210,53212],{"className":51277,"code":53211,"language":51279,"meta":53,"style":53},"    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",[55,53213,53214,53219,53224,53228,53233],{"__ignoreMap":53},[58,53215,53216],{"class":60,"line":61},[58,53217,53218],{"class":75},"    function fn(a, b) {\n",[58,53220,53221],{"class":60,"line":68},[58,53222,53223],{"class":75},"      console.log(a + b);\n",[58,53225,53226],{"class":60,"line":79},[58,53227,2833],{"class":75},[58,53229,53230],{"class":60,"line":105},[58,53231,53232],{"class":75},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[58,53234,53235],{"class":60,"line":627},[58,53236,53237],{"class":75},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[114,53239,53241],{"id":53240},"_294-作用域","2.9.4 作用域",[124,53243,53244,53250,53255,53258,53261],{},[22,53245,53246,53247],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[25,53248,53249],{},"作用域",[22,53251,53252],{},[25,53253,53254],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[22,53256,53257],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[22,53259,53260],{},"函数内部可以直接所使用全局变量",[22,53262,53263],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[175,53265,15277],{},[48,53267,53269],{"className":51277,"code":53268,"language":51279,"meta":53,"style":53},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[55,53270,53271,53276,53281,53285,53290,53295,53300],{"__ignoreMap":53},[58,53272,53273],{"class":60,"line":61},[58,53274,53275],{"class":75},"    function fun() {\n",[58,53277,53278],{"class":60,"line":68},[58,53279,53280],{"class":75},"      num = 10\n",[58,53282,53283],{"class":60,"line":79},[58,53284,2833],{"class":75},[58,53286,53287],{"class":60,"line":105},[58,53288,53289],{"class":75},"    fun()\n",[58,53291,53292],{"class":60,"line":627},[58,53293,53294],{"class":75},"    console.log(num)\n",[58,53296,53297],{"class":60,"line":509},[58,53298,53299],{"class":75},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[58,53301,53302],{"class":60,"line":559},[58,53303,53304],{"class":75},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[124,53306,53307,53310],{},[22,53308,53309],{},"函数内部的形参可以看做是局部变量",[22,53311,53312],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[175,53314,53315,53316],{},"变量访问原则： ",[25,53317,53318],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[114,53320,53322],{"id":53321},"_295-匿名函数","2.9.5 匿名函数",[175,53324,53325],{},"函数可以分为具名函数和匿名函数",[175,53327,53328],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[19,53330,53331],{},[22,53332,53333],{},"函数表达式",[175,53335,53336],{},[119,53337],{"alt":53,"src":53338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[175,53340,53341],{},"里边也可以写参数",[175,53343,53344],{},"具名函数调用位置可以随意调整；",[175,53346,53347],{},"匿名函数函数表达式形式只能在声明后才可以使用",[19,53349,53350],{"start":68},[22,53351,53352],{},"立即执行函数",[175,53354,53355],{},[119,53356],{"alt":53,"src":53357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[175,53359,53360],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[175,53362,53363],{},"写法：两个小括号，然后在第一个小括号中写function",[175,53365,53366],{},"(function () {})();",[175,53368,53369],{},"不要落下最后的;",[175,53371,53372],{},"立即执行函数必须要加;",[175,53374,53375],{},"分号写前写后都没问题",[175,53377,53378],{},"写前：",[175,53380,53381],{},"(function() {})()",[175,53383,53384],{},";(function () {})();",[175,53386,53387],{},"写后:",[175,53389,53390],{},"(function() {})();",[175,53392,53366],{},[175,53394,53395],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[175,53397,53398],{},"还有一种写法：",[175,53400,53401],{},"(function(){}());",[175,53403,53404],{},"或者:",[175,53406,53407],{},"!function(){}();",[175,53409,53410],{},"立即执行函数有时候也是可以加名字的：",[175,53412,53413],{},"(function flexible(window,document) {}(window,document));",[175,53415,53416],{},"省一些调用方法",[114,53418,53420],{"id":53419},"_296-逻辑中断","2.9.6 逻辑中断!!!",[175,53422,53423],{},[119,53424],{"alt":53,"src":53425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[175,53427,53428],{},"这样就不用非得给x,y初始化了",[175,53430,53431],{},[119,53432],{"alt":53,"src":53433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[175,53435,53436],{},"代码执行时先看左边",[175,53438,53439],{},"例如：console.log(false && 3+5)",[175,53441,53442],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[175,53444,53445],{},"&&都是真时，就返回最后一个真值",[175,53447,53448],{},"console.log(11 && 22)",[175,53450,53451],{},"输出22",[175,53453,53454],{},"逻辑与：遇真则真",[175,53456,15277],{},[175,53458,53459],{},"let age=1",[175,53461,53462],{},"console.log(11 || age++)",[175,53464,53465],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[175,53467,53468],{},"console.log(11 || 22)",[175,53470,53471],{},"||逻辑或遇到真就直接输出，输出结果为11",[175,53473,53474],{},"||如果都是假的话，就取最后一个假的值了",[114,53476,53478],{"id":53477},"_297-转换为boolean型","2.9.7 转换为Boolean型",[175,53480,53481],{},"显示转换：",[175,53483,53484,53487,53488],{},[25,53485,53486],{},"记忆","： ",[25,53489,53490],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[175,53492,53493],{},"空字符串为假，其他字符串全为真",[175,53495,53496],{},[119,53497],{"alt":53,"src":53498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[175,53500,53501],{},"隐式转换：",[175,53503,53504],{},[119,53505],{"alt":53,"src":53506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[175,53508,53509],{},"隐式转换:",[175,53511,53512],{},"null+3=3",[175,53514,53515],{},"undefined+3=NaN",[175,53517,53518],{},"null==undefined 输出true,他两个都当0看",[175,53520,53521],{},"null===undefined 输出false",[175,53523,53524],{},"undefined做任何操作都是NaN",[175,53526,53527],{},"NaN不等于NaN，NaN表示计算错误",[14,53529,53531],{"id":53530},"_210-对象","2.10 对象",[114,53533,53535],{"id":53534},"_2101-对象的介绍","2.10.1 对象的介绍",[175,53537,53538],{},"对象也是一种数据类型，里边的数据是无序的",[175,53540,53541],{},"对象由属性和方法组成",[175,53543,53544],{},[119,53545],{"alt":53,"src":53546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[175,53548,53549],{},[119,53550],{"alt":53,"src":53551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[175,53553,53554],{},[119,53555],{"alt":53,"src":53556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[114,53558,53560],{"id":53559},"_2102-对象属性","2.10.2 对象属性",[175,53562,53563],{},[119,53564],{"alt":53,"src":53565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[19,53567,53568],{},[22,53569,53570],{},"查询对象",[175,53572,53573],{},"对象名.属性 goods.uname",[175,53575,53576],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[175,53578,53579],{},"不带字符串的属性名也可以使用 对象名['属性名']",[175,53581,53582],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[175,53584,53585],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[19,53587,53588],{"start":68},[22,53589,53590],{},"重新赋值",[175,53592,53593],{},"对象名.属性=新值",[19,53595,53596],{"start":79},[22,53597,53598],{},"增加新数据",[175,53600,53593],{},[19,53602,53603],{"start":105},[22,53604,53605],{},"删除对象中的属性",[175,53607,53608],{},"delete 对象名.属性",[114,53610,53612],{"id":53611},"_2103-对象方法","2.10.3 对象方法",[175,53614,53615],{},[119,53616],{"alt":53,"src":53617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[175,53619,53620],{},"后边跟的是匿名函数",[175,53622,53623],{},"对象外面的叫函数；对象内部的叫方法",[175,53625,53626],{},[119,53627],{"alt":53,"src":53628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[114,53630,53632],{"id":53631},"_2104-遍历对象","2.10.4 遍历对象",[175,53634,53635],{},"理解为加括号的python字典遍历",[175,53637,53638],{},[119,53639],{"alt":53,"src":53640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[175,53642,53643],{},"k是字符串类型",[175,53645,53646],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[48,53648,53650],{"className":51277,"code":53649,"language":51279,"meta":53,"style":53},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[55,53651,53652,53657,53662,53667,53672],{"__ignoreMap":53},[58,53653,53654],{"class":60,"line":61},[58,53655,53656],{"class":75},"   let arr = [1, 2, 3]\n",[58,53658,53659],{"class":60,"line":68},[58,53660,53661],{"class":75},"    for (let k in arr) {\n",[58,53663,53664],{"class":60,"line":79},[58,53665,53666],{"class":75},"      console.log(k)\n",[58,53668,53669],{"class":60,"line":105},[58,53670,53671],{"class":75},"      console.log(arr[k])\n",[58,53673,53674],{"class":60,"line":627},[58,53675,2833],{"class":75},[175,53677,53678],{},[119,53679],{"alt":53,"src":53680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[175,53682,53683],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[175,53685,53686],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[175,53688,53689],{},"for in 得到的k是属性名",[52451,53691,53692],{},"\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",[175,53694,53695],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[114,53697,53699],{"id":53698},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[175,53701,53702],{},"数组中放对象信息",[48,53704,53708],{"className":53705,"code":53706,"language":53707,"meta":53,"style":53},"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",[55,53709,53710,53718,53723,53728,53733,53738,53743,53748,53753,53758,53763,53768,53773,53777,53781],{"__ignoreMap":53},[58,53711,53712,53714,53716],{"class":60,"line":61},[58,53713,373],{"class":75},[58,53715,52451],{"class":71},[58,53717,403],{"class":75},[58,53719,53720],{"class":60,"line":68},[58,53721,53722],{"class":75},"    let students = [\n",[58,53724,53725],{"class":60,"line":79},[58,53726,53727],{"class":75},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[58,53729,53730],{"class":60,"line":105},[58,53731,53732],{"class":75},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[58,53734,53735],{"class":60,"line":627},[58,53736,53737],{"class":75},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[58,53739,53740],{"class":60,"line":509},[58,53741,53742],{"class":75},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[58,53744,53745],{"class":60,"line":559},[58,53746,53747],{"class":75},"    ]\n",[58,53749,53750],{"class":60,"line":654},[58,53751,53752],{"class":75},"    for (let i = 0; i \u003C students.length; i++) {\n",[58,53754,53755],{"class":60,"line":671},[58,53756,53757],{"class":75},"      for (let k in students[i]) {\n",[58,53759,53760],{"class":60,"line":677},[58,53761,53762],{"class":75},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[58,53764,53765],{"class":60,"line":2260},[58,53766,53767],{"class":75},"        \u002F\u002F输出每个人的名字：\n",[58,53769,53770],{"class":60,"line":694},[58,53771,53772],{"class":75},"        \u002F\u002Fconsole.log(students[i].name)\n",[58,53774,53775],{"class":60,"line":2270},[58,53776,53036],{"class":75},[58,53778,53779],{"class":60,"line":2275},[58,53780,2833],{"class":75},[58,53782,53783,53785,53787],{"class":60,"line":2289},[58,53784,53055],{"class":75},[58,53786,52451],{"class":71},[58,53788,403],{"class":75},[114,53790,53792],{"id":53791},"_2106-内置对象","2.10.6 内置对象",[175,53794,53795],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[19,53797,53798],{},[22,53799,53800],{},"数学对象Math",[175,53802,53803],{},[119,53804],{"alt":53,"src":53805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[175,53807,53808],{},[376,53809,53812],{"href":53810,"rel":53811},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24508],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[175,53814,53815],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[175,53817,53818],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[175,53820,53821],{},"数组不可以使用Math中的max,min来求最大值与最小值",[175,53823,53824],{},"null是一个空对象，可以认为：null类似于let obj={}",[175,53826,53827],{},"null属于对象数据类型",[19,53829,53830],{"start":68},[22,53831,53832],{},"生成任意范围随机数",[175,53834,53835],{},[119,53836],{"alt":53,"src":53837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[175,53839,53840],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[175,53842,53843],{},"乘以几就取不到几",[175,53845,53846],{},"取数组中的随机元素：",[175,53848,53849],{},"let arr = ['red', 'green', 'blue']",[175,53851,53852],{},"let random = Math.floor(Math.random() * arr.length)",[175,53854,53855],{},"console.log(arr[random])",[175,53857,53858],{},"这个函数得到的是全闭区间",[175,53860,53861],{},"function getRandom(N, M) {",[175,53863,53864],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[175,53866,1730],{},[175,53868,53869],{},"console.log(getRandom(4, 8))",[114,53871,53873],{"id":53872},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[175,53875,53876],{},[119,53877],{"alt":53,"src":53878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[175,53880,53881],{},[119,53882],{"alt":53,"src":53883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[175,53885,53886],{},[119,53887],{"alt":53,"src":53888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[175,53890,53891],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[175,53893,53894],{},[119,53895],{"alt":53,"src":53896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[175,53898,53899],{},[119,53900],{"alt":53,"src":53901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[175,53903,53904],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[175,53906,53907],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[175,53909,53910],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[702,53912,53913],{},"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":53,"searchDepth":68,"depth":68,"links":53915},[53916,53924,53925,53926,53927,53928,53935,53939,53945,53954],{"id":51112,"depth":68,"text":51113,"children":53917},[53918,53919,53920,53921,53922,53923],{"id":51116,"depth":79,"text":51117},{"id":51133,"depth":79,"text":51134},{"id":51173,"depth":79,"text":51174},{"id":51185,"depth":79,"text":51186},{"id":51194,"depth":79,"text":51195},{"id":51242,"depth":79,"text":51243},{"id":51252,"depth":68,"text":51253},{"id":51340,"depth":68,"text":51341},{"id":51363,"depth":68,"text":51364},{"id":51375,"depth":68,"text":51376},{"id":51562,"depth":68,"text":51563,"children":53929},[53930,53931,53932,53933,53934],{"id":51566,"depth":79,"text":51567},{"id":51575,"depth":79,"text":51576},{"id":51603,"depth":79,"text":51604},{"id":51639,"depth":79,"text":51640},{"id":51664,"depth":79,"text":51665},{"id":51676,"depth":68,"text":51677,"children":53936},[53937,53938],{"id":51697,"depth":79,"text":51698},{"id":51791,"depth":79,"text":51792},{"id":51849,"depth":68,"text":51850,"children":53940},[53941,53942,53943,53944],{"id":51853,"depth":79,"text":51854},{"id":51877,"depth":79,"text":51878},{"id":51930,"depth":79,"text":51931},{"id":52735,"depth":79,"text":52736},{"id":53121,"depth":68,"text":53122,"children":53946},[53947,53948,53949,53950,53951,53952,53953],{"id":53139,"depth":79,"text":53140},{"id":53176,"depth":79,"text":53177},{"id":53207,"depth":79,"text":53208},{"id":53240,"depth":79,"text":53241},{"id":53321,"depth":79,"text":53322},{"id":53419,"depth":79,"text":53420},{"id":53477,"depth":79,"text":53478},{"id":53530,"depth":68,"text":53531,"children":53955},[53956,53957,53958,53959,53960,53961,53962],{"id":53534,"depth":79,"text":53535},{"id":53559,"depth":79,"text":53560},{"id":53611,"depth":79,"text":53612},{"id":53631,"depth":79,"text":53632},{"id":53698,"depth":79,"text":53699},{"id":53791,"depth":79,"text":53792},{"id":53872,"depth":79,"text":53873},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51104,"description":717},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53969,"title":53970,"body":53971,"description":717,"extension":718,"meta":77304,"navigation":720,"path":77305,"seo":77306,"stem":77307,"__hash__":77308},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53972,"toc":77244},[53973,53976,53979,53982,53987,53990,53993,53996,54000,54004,54010,54015,54023,54030,54033,54037,54042,54047,54052,54055,54058,54069,54072,54076,54079,54082,54087,54092,54097,54100,54103,54195,54198,54203,54206,54211,54214,54217,54222,54225,54230,54234,54237,54251,54255,54260,54263,54266,54270,54275,54278,54282,54286,54291,54295,54300,54303,54306,54309,54312,54315,54318,54323,54328,54354,54357,54360,54363,54368,54371,54374,54377,54380,54384,54413,54417,54422,54427,54430,54433,54436,54441,54556,54561,54566,54727,54732,54735,54739,54744,54749,54752,54755,54758,54761,54764,54767,54770,54773,54776,54779,54782,54785,54788,54791,54793,54796,54799,54802,54807,54811,55208,55211,55217,55221,55226,56506,56511,56514,56517,56520,56525,57721,57725,57731,57736,57739,57744,57749,57753,57757,57762,57765,57770,57773,57776,57780,58688,58691,58695,58916,58919,58922,58925,59151,59154,59378,59381,59385,59390,59393,59396,59624,59627,59660,59663,59667,59672,59676,59679,59682,59685,59688,59691,59694,59697,59702,60982,60986,60989,62080,62084,62087,62090,62093,62096,62100,62103,62106,62108,62116,63597,63601,63604,63607,63610,63819,63822,63826,63830,63835,63840,63843,63846,63851,63855,63860,63863,63972,63976,63981,63986,63989,63992,63996,64001,64006,64011,64014,64017,64028,64031,64036,64041,64044,64047,64120,64124,64129,64132,64134,64145,64149,64154,65480,65483,65486,65489,65491,65494,65497,65500,65503,65506,65509,65512,65515,65518,65521,65524,65527,65529,65531,65534,65538,66632,66635,66638,66654,66668,66671,66676,66682,66687,66691,66695,66700,66704,66709,67151,67156,67159,67163,67168,67171,67174,67178,67183,67187,67192,67197,67201,67206,67211,67214,67219,67224,67228,67233,67238,67342,67345,67349,67354,67720,67723,67726,67729,67732,67735,67738,67741,67744,69040,69044,69049,69054,69057,69060,69063,69066,69068,69073,69078,69081,69085,69090,69095,69100,69103,69106,69109,69112,69115,69120,69123,69127,69132,69137,69141,69146,69149,69154,69157,69160,69163,69166,69169,69174,69177,69180,69183,69186,69190,69195,69198,69202,69207,69210,69213,69217,69246,69249,69253,69257,69262,69266,69271,69274,69277,69280,69283,69286,69289,69292,69295,69298,69301,69304,69307,69310,69313,69317,69322,69327,69330,69334,69338,69343,69346,69350,69353,69356,69361,69366,69371,69376,69381,69384,69387,69392,69397,69401,69406,69409,69414,69417,69420,69423,69426,69431,69434,69443,69447,69452,69455,69458,69462,69465,69470,69474,69477,69483,69489,69493,69519,69522,71083,71086,71581,71584,71589,71594,71599,71603,71608,71613,71618,71622,71627,71630,71633,71636,71639,71643,71646,71651,71654,71659,71663,71668,71671,71676,71681,71686,71689,71692,71697,71702,71705,71708,71712,71715,71720,71723,71728,71731,71736,71741,71746,71749,71754,71819,71822,71833,71837,71842,72014,72018,72023,72026,72029,72032,72036,72047,72051,72054,72059,72064,72067,72070,72073,72076,72079,72081,72084,72087,72090,72095,72098,72103,72106,72110,72113,72116,72130,72134,72137,72192,72197,72200,72203,72208,72211,72215,72220,72350,72354,72359,72364,72445,72450,72454,72457,72462,72467,72473,72476,72479,72482,72486,72491,72494,72505,72509,72526,75573,75577,75580,75583,75586,75607,75611,75614,75622,75625,75630,75633,75636,75641,75646,75650,75671,75675,75680,75683,75686,75689,75692,75696,75701,75704,75708,75713,75716,75721,75724,75729,75732,75737,76940,76944,76949,76952,76957,77241],[10,53974,53970],{"id":53975},"_3web-apis",[175,53977,53978],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[175,53980,53981],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[175,53983,53984],{},[119,53985],{"alt":53,"src":53986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[175,53988,53989],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[175,53991,53992],{},"建议数组和对象使用 const 来声明",[175,53994,53995],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,53997,53999],{"id":53998},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[114,54001,54003],{"id":54002},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[175,54005,54006,54009],{},[55,54007,54008],{},"document"," = HTML 文件解析后的对象化表示；",[175,54011,54012,54014],{},[55,54013,54008],{}," ≠ HTML 文件本身",[175,54016,54017,54022],{},[25,54018,54019],{},[55,54020,54021],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[175,54024,54025,54029],{},[25,54026,54027],{},[55,54028,54008],{}," ：容器里的内容，代表当前加载的网页（DOM）",[175,54031,54032],{},"document实际上为window.document的简写",[114,54034,54036],{"id":54035},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[175,54038,54039],{},[119,54040],{"alt":53,"src":54041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[175,54043,54044],{},[119,54045],{"alt":53,"src":54046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[175,54048,54049],{},[119,54050],{"alt":53,"src":54051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[175,54053,54054],{},"console.dir()",[175,54056,54057],{},"dir用来打印对象",[124,54059,54060,54063,54066],{},[22,54061,54062],{},"任何一个标签，都是一个对象",[22,54064,54065],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[22,54067,54068],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[175,54070,54071],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[114,54073,54075],{"id":54074},"_312-获取dom对象","3.1.2 获取DoM对象",[175,54077,54078],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[175,54080,54081],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[175,54083,54084],{},[25,54085,54086],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[19,54088,54089],{},[22,54090,54091],{},"利用CSS选择器来获取标签元素",[175,54093,54094],{},[119,54095],{"alt":53,"src":54096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[175,54098,54099],{},"里边的选择器必须必须加引号！！！",[175,54101,54102],{},"只选择第一个元素",[48,54104,54106],{"className":53705,"code":54105,"language":53707,"meta":53,"style":53},"\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",[55,54107,54108,54116,54137,54156,54164,54169,54174,54179,54187],{"__ignoreMap":53},[58,54109,54110,54112,54114],{"class":60,"line":61},[58,54111,373],{"class":75},[58,54113,52438],{"class":71},[58,54115,403],{"class":75},[58,54117,54118,54120,54122,54125,54127,54130,54133,54135],{"class":60,"line":68},[58,54119,52782],{"class":75},[58,54121,72],{"class":71},[58,54123,54124],{"class":379}," class",[58,54126,383],{"class":75},[58,54128,54129],{"class":386},"\"box\"",[58,54131,54132],{"class":75},">123\u003C\u002F",[58,54134,72],{"class":71},[58,54136,403],{"class":75},[58,54138,54139,54141,54143,54145,54147,54149,54152,54154],{"class":60,"line":79},[58,54140,52782],{"class":75},[58,54142,72],{"class":71},[58,54144,54124],{"class":379},[58,54146,383],{"class":75},[58,54148,54129],{"class":386},[58,54150,54151],{"class":75},">456\u003C\u002F",[58,54153,72],{"class":71},[58,54155,403],{"class":75},[58,54157,54158,54160,54162],{"class":60,"line":105},[58,54159,52782],{"class":75},[58,54161,52451],{"class":71},[58,54163,403],{"class":75},[58,54165,54166],{"class":60,"line":627},[58,54167,54168],{"class":75},"    \u002F\u002F 1.获取匹配的第一个元素\n",[58,54170,54171],{"class":60,"line":509},[58,54172,54173],{"class":75},"    const box = document.querySelector('div')\n",[58,54175,54176],{"class":60,"line":559},[58,54177,54178],{"class":75},"    console.dir(box)\n",[58,54180,54181,54183,54185],{"class":60,"line":654},[58,54182,53055],{"class":75},[58,54184,52451],{"class":71},[58,54186,403],{"class":75},[58,54188,54189,54191,54193],{"class":60,"line":671},[58,54190,52423],{"class":75},[58,54192,52438],{"class":71},[58,54194,403],{"class":75},[175,54196,54197],{},"只选123，不选456",[175,54199,54200],{},[119,54201],{"alt":53,"src":54202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[175,54204,54205],{},"返回的是一个数组的集合，不能对其进行直接修改",[175,54207,54208],{},[119,54209],{"alt":53,"src":54210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[175,54212,54213],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[175,54215,54216],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[19,54218,54219],{"start":68},[22,54220,54221],{},"其他方法来获取标签元素",[175,54223,54224],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[175,54226,54227],{},[119,54228],{"alt":53,"src":54229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[114,54231,54233],{"id":54232},"_313-操作元素的内容","3.1.3 操作元素的内容",[175,54235,54236],{},"设置修改DOM元素内容有两种方式：",[124,54238,54239,54242,54245,54248],{},[22,54240,54241],{},"元素.innerText=''",[22,54243,54244],{},"元素.innerHTML=''",[22,54246,54247],{},"不写字符串输出数字也是可以的",[22,54249,54250],{},"元素.innerHtml=1",[22641,54252,54254],{"id":54253},"_3131-innertext","3.1.3.1 innerText",[175,54256,54257],{},[119,54258],{"alt":53,"src":54259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[175,54261,54262],{},"思路：实现了修改盒子中的内容！",[175,54264,54265],{},"它只显示纯文本，不解析标签",[22641,54267,54269],{"id":54268},"_3132-innerhtml","3.1.3.2 innerHTML",[175,54271,54272],{},[119,54273],{"alt":53,"src":54274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[175,54276,54277],{},"相比于innerText，他的强大之处在于可以解析标签",[114,54279,54281],{"id":54280},"_314-操作元素属性","3.1.4 操作元素属性",[22641,54283,54285],{"id":54284},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[175,54287,54288],{},[119,54289],{"alt":53,"src":54290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22641,54292,54294],{"id":54293},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[175,54296,54297],{},[119,54298],{"alt":53,"src":54299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[175,54301,54302],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[175,54304,54305],{},"div.style.backgroundColor = 'hotpink'",[175,54307,54308],{},"如果按照css的写法，-表示减，就会出错",[175,54310,54311],{},"body元素不需要再获取，直接用就行！！！！！！",[175,54313,54314],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[175,54316,54317],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[175,54319,54320],{},[119,54321],{"alt":53,"src":54322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[175,54324,54325],{},[119,54326],{"alt":53,"src":54327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[19,54329,54330,54333,54336,54339,54342,54345],{},[22,54331,54332],{},"className这个方式就是修改很多样式的时候来使用的！",[22,54334,54335],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[22,54337,54338],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[22,54340,54341],{},"className为属性名，如果还用class的话就导致与关键字冲突",[22,54343,54344],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[22,54346,54347,54348,54351],{},"解析标签的时候就变为了",[72,54349],{"className":54350},[145,298],[54352,54353],"br",{},[175,54355,54356],{},"例子：",[72,54358],{"className":54359},[145],[52451,54361,54362],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[175,54364,54365],{},[119,54366],{"alt":53,"src":54367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[175,54369,54370],{},"追加和删除类名用classList",[175,54372,54373],{},"常用于类似于开关的操作",[175,54375,54376],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[175,54378,54379],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22641,54381,54383],{"id":54382},"_3143-牢记点","3.1.4.3 牢记点",[19,54385,54386,54389,54392,54395,54398,54401,54404,54407,54410],{},[22,54387,54388],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[22,54390,54391],{},"使用style属性操作css时不要忘记引号",[22,54393,54394],{},"使用className或者classList时也不要忘记引号",[22,54396,54397],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[22,54399,54400],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[22,54402,54403],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[22,54405,54406],{},"若： let arr=['1','2',3] arr[0]=1",[22,54408,54409],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[22,54411,54412],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[114,54414,54416],{"id":54415},"_315-操作表单元素","3.1.5 操作表单元素",[19,54418,54419],{},[22,54420,54421],{},"天生的属性",[175,54423,54424],{},[119,54425],{"alt":53,"src":54426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[175,54428,54429],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[175,54431,54432],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[175,54434,54435],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[175,54437,54438],{},[119,54439],{"alt":53,"src":54440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[48,54442,54444],{"className":51277,"code":54443,"language":51279,"meta":53,"style":53},"在复选框中如果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",[55,54445,54446,54451,54483,54488,54493,54498,54503,54507,54512,54517,54534,54546,54551],{"__ignoreMap":53},[58,54447,54448],{"class":60,"line":61},[58,54449,54450],{"class":75},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[58,54452,54453,54455,54458,54461,54463,54466,54468,54470,54472,54474,54476,54478,54481],{"class":60,"line":68},[58,54454,373],{"class":75},[58,54456,54457],{"class":71},"input",[58,54459,54460],{"class":379}," type",[58,54462,383],{"class":75},[58,54464,54465],{"class":386},"\"checkbox\"",[58,54467,15564],{"class":379},[58,54469,383],{"class":75},[58,54471,8298],{"class":386},[58,54473,15603],{"class":379},[58,54475,383],{"class":75},[58,54477,8298],{"class":386},[58,54479,54480],{"class":379}," checked",[58,54482,403],{"class":75},[58,54484,54485],{"class":60,"line":79},[58,54486,54487],{"class":75},"不选的话：\n",[58,54489,54490],{"class":60,"line":105},[58,54491,54492],{"class":75},"const input = document.querySelector('input')\n",[58,54494,54495],{"class":60,"line":627},[58,54496,54497],{"class":75},"input.checked=false\n",[58,54499,54500],{"class":60,"line":509},[58,54501,54502],{"class":75},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[58,54504,54505],{"class":60,"line":559},[58,54506,3046],{"emptyLinePlaceholder":720},[58,54508,54509],{"class":60,"line":654},[58,54510,54511],{"class":75},"禁用按钮：\n",[58,54513,54514],{"class":60,"line":671},[58,54515,54516],{"class":75},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[58,54518,54519,54521,54524,54527,54530,54532],{"class":60,"line":677},[58,54520,373],{"class":75},[58,54522,54523],{"class":71},"button",[58,54525,54526],{"class":379}," disabled",[58,54528,54529],{"class":75},">点击\u003C\u002F",[58,54531,54523],{"class":71},[58,54533,403],{"class":75},[58,54535,54536,54538,54540,54542,54544],{"class":60,"line":2260},[58,54537,373],{"class":75},[58,54539,54523],{"class":71},[58,54541,54529],{"class":75},[58,54543,54523],{"class":71},[58,54545,403],{"class":75},[58,54547,54548],{"class":60,"line":694},[58,54549,54550],{"class":75},"const bt = document.querySelector('button')\n",[58,54552,54553],{"class":60,"line":2270},[58,54554,54555],{"class":75},"bt.disabled = false\n",[19,54557,54558],{"start":68},[22,54559,54560],{},"自定义属性",[175,54562,54563],{},[119,54564],{"alt":53,"src":54565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[48,54567,54569],{"className":53705,"code":54568,"language":53707,"meta":53,"style":53},"\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",[55,54570,54571,54579,54607,54626,54645,54664,54683,54691,54696,54701,54706,54711,54719],{"__ignoreMap":53},[58,54572,54573,54575,54577],{"class":60,"line":61},[58,54574,373],{"class":75},[58,54576,52438],{"class":71},[58,54578,403],{"class":75},[58,54580,54581,54583,54585,54588,54590,54592,54595,54597,54600,54603,54605],{"class":60,"line":68},[58,54582,52782],{"class":75},[58,54584,72],{"class":71},[58,54586,54587],{"class":379}," data-id",[58,54589,383],{"class":75},[58,54591,4324],{"class":386},[58,54593,54594],{"class":379}," data-spm",[58,54596,383],{"class":75},[58,54598,54599],{"class":386},"\"我不知道\"",[58,54601,54602],{"class":75},">1\u003C\u002F",[58,54604,72],{"class":71},[58,54606,403],{"class":75},[58,54608,54609,54611,54613,54615,54617,54619,54622,54624],{"class":60,"line":79},[58,54610,52782],{"class":75},[58,54612,72],{"class":71},[58,54614,54587],{"class":379},[58,54616,383],{"class":75},[58,54618,4347],{"class":386},[58,54620,54621],{"class":75},">2\u003C\u002F",[58,54623,72],{"class":71},[58,54625,403],{"class":75},[58,54627,54628,54630,54632,54634,54636,54638,54641,54643],{"class":60,"line":105},[58,54629,52782],{"class":75},[58,54631,72],{"class":71},[58,54633,54587],{"class":379},[58,54635,383],{"class":75},[58,54637,4360],{"class":386},[58,54639,54640],{"class":75},">3\u003C\u002F",[58,54642,72],{"class":71},[58,54644,403],{"class":75},[58,54646,54647,54649,54651,54653,54655,54657,54660,54662],{"class":60,"line":627},[58,54648,52782],{"class":75},[58,54650,72],{"class":71},[58,54652,54587],{"class":379},[58,54654,383],{"class":75},[58,54656,4373],{"class":386},[58,54658,54659],{"class":75},">4\u003C\u002F",[58,54661,72],{"class":71},[58,54663,403],{"class":75},[58,54665,54666,54668,54670,54672,54674,54676,54679,54681],{"class":60,"line":509},[58,54667,52782],{"class":75},[58,54669,72],{"class":71},[58,54671,54587],{"class":379},[58,54673,383],{"class":75},[58,54675,4394],{"class":386},[58,54677,54678],{"class":75},">5\u003C\u002F",[58,54680,72],{"class":71},[58,54682,403],{"class":75},[58,54684,54685,54687,54689],{"class":60,"line":559},[58,54686,52782],{"class":75},[58,54688,52451],{"class":71},[58,54690,403],{"class":75},[58,54692,54693],{"class":60,"line":654},[58,54694,54695],{"class":75},"    const one = document.querySelector('div')\n",[58,54697,54698],{"class":60,"line":671},[58,54699,54700],{"class":75},"    console.log(one.dataset)\n",[58,54702,54703],{"class":60,"line":677},[58,54704,54705],{"class":75},"    console.log(one.dataset.id)\n",[58,54707,54708],{"class":60,"line":2260},[58,54709,54710],{"class":75},"    console.log(one.dataset.spm)\n",[58,54712,54713,54715,54717],{"class":60,"line":694},[58,54714,53055],{"class":75},[58,54716,52451],{"class":71},[58,54718,403],{"class":75},[58,54720,54721,54723,54725],{"class":60,"line":2270},[58,54722,52423],{"class":75},[58,54724,52438],{"class":71},[58,54726,403],{"class":75},[175,54728,54729],{},[119,54730],{"alt":53,"src":54731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[175,54733,54734],{},"document.querySelector选择的是第一个对象（元素）",[114,54736,54738],{"id":54737},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[175,54740,54741],{},[119,54742],{"alt":53,"src":54743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[175,54745,54746],{},[119,54747],{"alt":53,"src":54748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[175,54750,54751],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52451,54753,54754],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[175,54756,54757],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52451,54759,54760],{},"\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",[175,54762,54763],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[175,54765,54766],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[175,54768,54769],{},"单位为毫秒！！！",[175,54771,54772],{},"可以搭配匿名函数来用！！！",[175,54774,54775],{},"setInterval(function () {",[175,54777,54778],{},"alert('两秒执行一次')",[175,54780,54781],{},"}, 2000)",[175,54783,54784],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[175,54786,54787],{},"function fn() {",[175,54789,54790],{},"document.write(1)",[175,54792,1730],{},[175,54794,54795],{},"setInterval(fn, 1000)",[175,54797,54798],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[175,54800,54801],{},"setInterval('fn()', 1000)",[175,54803,54804],{},[119,54805],{"alt":53,"src":54806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22641,54808,54810],{"id":54809},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[48,54812,54814],{"className":51277,"code":54813,"language":51279,"meta":53,"style":53},"\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",[55,54815,54816,54826,54840,54844,54852,54866,54886,54898,54906,54910,54918,54955,54960,54965,54970,54978,54986,55008,55016,55021,55043,55048,55053,55064,55069,55089,55097,55112,55127,55138,55143,55153,55163,55167,55176,55180,55188,55196,55200],{"__ignoreMap":53},[58,54817,54818,54820,54822,54824],{"class":60,"line":61},[58,54819,51941],{"class":75},[58,54821,51944],{"class":71},[58,54823,51947],{"class":379},[58,54825,403],{"class":75},[58,54827,54828,54830,54832,54834,54836,54838],{"class":60,"line":68},[58,54829,373],{"class":75},[58,54831,51279],{"class":71},[58,54833,51958],{"class":379},[58,54835,383],{"class":75},[58,54837,51963],{"class":386},[58,54839,403],{"class":75},[58,54841,54842],{"class":60,"line":79},[58,54843,3046],{"emptyLinePlaceholder":720},[58,54845,54846,54848,54850],{"class":60,"line":105},[58,54847,373],{"class":75},[58,54849,51976],{"class":71},[58,54851,403],{"class":75},[58,54853,54854,54856,54858,54860,54862,54864],{"class":60,"line":627},[58,54855,52782],{"class":75},[58,54857,51986],{"class":71},[58,54859,51989],{"class":379},[58,54861,383],{"class":75},[58,54863,51994],{"class":386},[58,54865,403],{"class":75},[58,54867,54868,54870,54872,54874,54876,54878,54880,54882,54884],{"class":60,"line":509},[58,54869,52782],{"class":75},[58,54871,51986],{"class":71},[58,54873,15564],{"class":379},[58,54875,383],{"class":75},[58,54877,52033],{"class":386},[58,54879,52013],{"class":379},[58,54881,383],{"class":75},[58,54883,52040],{"class":386},[58,54885,403],{"class":75},[58,54887,54888,54890,54892,54894,54896],{"class":60,"line":559},[58,54889,52782],{"class":75},[58,54891,52049],{"class":71},[58,54893,52052],{"class":75},[58,54895,52049],{"class":71},[58,54897,403],{"class":75},[58,54899,54900,54902,54904],{"class":60,"line":654},[58,54901,52423],{"class":75},[58,54903,51976],{"class":71},[58,54905,403],{"class":75},[58,54907,54908],{"class":60,"line":671},[58,54909,3046],{"emptyLinePlaceholder":720},[58,54911,54912,54914,54916],{"class":60,"line":677},[58,54913,373],{"class":75},[58,54915,52438],{"class":71},[58,54917,403],{"class":75},[58,54919,54920,54922,54925,54927,54929,54931,54933,54935,54937,54940,54942,54945,54948,54950,54953],{"class":60,"line":2260},[58,54921,52782],{"class":75},[58,54923,54924],{"class":71},"textarea",[58,54926,15564],{"class":379},[58,54928,383],{"class":75},[58,54930,8298],{"class":386},[58,54932,15603],{"class":379},[58,54934,383],{"class":75},[58,54936,8298],{"class":386},[58,54938,54939],{"class":379}," cols",[58,54941,383],{"class":75},[58,54943,54944],{"class":386},"\"30\"",[58,54946,54947],{"class":379}," rows",[58,54949,383],{"class":75},[58,54951,54952],{"class":386},"\"10\"",[58,54954,403],{"class":75},[58,54956,54957],{"class":60,"line":694},[58,54958,54959],{"class":75},"        用户注册协议\n",[58,54961,54962],{"class":60,"line":2270},[58,54963,54964],{"class":75},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[58,54966,54967],{"class":60,"line":2275},[58,54968,54969],{"class":75},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[58,54971,54972,54974,54976],{"class":60,"line":2289},[58,54973,52414],{"class":75},[58,54975,54924],{"class":71},[58,54977,403],{"class":75},[58,54979,54980,54982,54984],{"class":60,"line":2294},[58,54981,52782],{"class":75},[58,54983,54352],{"class":71},[58,54985,403],{"class":75},[58,54987,54988,54990,54992,54994,54996,54999,55001,55004,55006],{"class":60,"line":2300},[58,54989,52782],{"class":75},[58,54991,54523],{"class":71},[58,54993,54124],{"class":379},[58,54995,383],{"class":75},[58,54997,54998],{"class":386},"\"btn\"",[58,55000,54526],{"class":379},[58,55002,55003],{"class":75},">我已经阅读用户协议(5)\u003C\u002F",[58,55005,54523],{"class":71},[58,55007,403],{"class":75},[58,55009,55010,55012,55014],{"class":60,"line":2321},[58,55011,52782],{"class":75},[58,55013,52451],{"class":71},[58,55015,403],{"class":75},[58,55017,55018],{"class":60,"line":2326},[58,55019,55020],{"class":64},"    \u002F\u002F 1. 获取元素\n",[58,55022,55023,55025,55028,55030,55033,55036,55038,55041],{"class":60,"line":2340},[58,55024,11866],{"class":92},[58,55026,55027],{"class":82}," btn",[58,55029,14208],{"class":92},[58,55031,55032],{"class":75}," document.",[58,55034,55035],{"class":379},"querySelector",[58,55037,793],{"class":75},[58,55039,55040],{"class":386},"'.btn'",[58,55042,799],{"class":75},[58,55044,55045],{"class":60,"line":2345},[58,55046,55047],{"class":64},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[58,55049,55050],{"class":60,"line":2374},[58,55051,55052],{"class":64},"    \u002F\u002F 2. 倒计时\n",[58,55054,55055,55057,55059,55061],{"class":60,"line":2379},[58,55056,52857],{"class":92},[58,55058,10083],{"class":75},[58,55060,383],{"class":92},[58,55062,55063],{"class":82}," 5\n",[58,55065,55066],{"class":60,"line":2396},[58,55067,55068],{"class":64},"    \u002F\u002F 2.1 开启定时器\n",[58,55070,55071,55073,55076,55078,55081,55083,55086],{"class":60,"line":2401},[58,55072,52857],{"class":92},[58,55074,55075],{"class":75}," n ",[58,55077,383],{"class":92},[58,55079,55080],{"class":379}," setInterval",[58,55082,793],{"class":75},[58,55084,55085],{"class":92},"function",[58,55087,55088],{"class":75}," () {\n",[58,55090,55091,55094],{"class":60,"line":2406},[58,55092,55093],{"class":75},"      i",[58,55095,55096],{"class":92},"--\n",[58,55098,55099,55102,55104,55107,55109],{"class":60,"line":2411},[58,55100,55101],{"class":75},"      btn.innerHTML ",[58,55103,383],{"class":92},[58,55105,55106],{"class":386}," `我已经阅读用户协议(${",[58,55108,1227],{"class":75},[58,55110,55111],{"class":386},"})`\n",[58,55113,55114,55117,55120,55123,55125],{"class":60,"line":2425},[58,55115,55116],{"class":92},"      if",[58,55118,55119],{"class":75}," (i ",[58,55121,55122],{"class":92},"===",[58,55124,4739],{"class":82},[58,55126,13086],{"class":75},[58,55128,55129,55132,55135],{"class":60,"line":2430},[58,55130,55131],{"class":379},"        clearInterval",[58,55133,55134],{"class":75},"(n)  ",[58,55136,55137],{"class":64},"\u002F\u002F 关闭定时器\n",[58,55139,55140],{"class":60,"line":3223},[58,55141,55142],{"class":64},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[58,55144,55145,55148,55150],{"class":60,"line":3237},[58,55146,55147],{"class":75},"        btn.disabled ",[58,55149,383],{"class":92},[58,55151,55152],{"class":82}," false\n",[58,55154,55155,55158,55160],{"class":60,"line":3245},[58,55156,55157],{"class":75},"        btn.innerHTML ",[58,55159,383],{"class":92},[58,55161,55162],{"class":386}," '同意'\n",[58,55164,55165],{"class":60,"line":3250},[58,55166,53036],{"class":75},[58,55168,55169,55172,55174],{"class":60,"line":3256},[58,55170,55171],{"class":75},"    }, ",[58,55173,7056],{"class":82},[58,55175,799],{"class":75},[58,55177,55178],{"class":60,"line":3262},[58,55179,3046],{"emptyLinePlaceholder":720},[58,55181,55182,55184,55186],{"class":60,"line":3267},[58,55183,53055],{"class":75},[58,55185,52451],{"class":71},[58,55187,403],{"class":75},[58,55189,55190,55192,55194],{"class":60,"line":8594},[58,55191,52423],{"class":75},[58,55193,52438],{"class":71},[58,55195,403],{"class":75},[58,55197,55198],{"class":60,"line":8618},[58,55199,3046],{"emptyLinePlaceholder":720},[58,55201,55202,55204,55206],{"class":60,"line":8623},[58,55203,52423],{"class":75},[58,55205,51279],{"class":71},[58,55207,403],{"class":75},[175,55209,55210],{},"不要一直想着用死循环,避免死循环",[175,55212,55213,55216],{},[55,55214,55215],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22641,55218,55220],{"id":55219},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[19,55222,55223],{},[22,55224,55225],{},"法1",[48,55227,55229],{"className":51277,"code":55228,"language":51279,"meta":53,"style":53},"\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",[55,55230,55231,55241,55255,55259,55267,55281,55301,55313,55321,55327,55338,55349,55353,55357,55364,55376,55380,55384,55391,55402,55416,55429,55443,55447,55451,55458,55468,55479,55490,55502,55514,55526,55530,55534,55542,55552,55565,55577,55590,55594,55598,55605,55615,55627,55639,55650,55661,55671,55683,55695,55699,55703,55712,55724,55736,55764,55777,55781,55785,55792,55803,55807,55815,55823,55827,55835,55849,55864,55888,55896,55911,55924,55932,55953,55965,55977,55989,56001,56013,56025,56037,56046,56054,56062,56070,56082,56105,56124,56143,56162,56181,56200,56219,56239,56243,56263,56282,56302,56323,56334,56351,56361,56371,56381,56386,56391,56396,56401,56426,56439,56443,56466,56470,56478,56486,56494,56498],{"__ignoreMap":53},[58,55232,55233,55235,55237,55239],{"class":60,"line":61},[58,55234,51941],{"class":75},[58,55236,51944],{"class":71},[58,55238,51947],{"class":379},[58,55240,403],{"class":75},[58,55242,55243,55245,55247,55249,55251,55253],{"class":60,"line":68},[58,55244,373],{"class":75},[58,55246,51279],{"class":71},[58,55248,51958],{"class":379},[58,55250,383],{"class":75},[58,55252,51963],{"class":386},[58,55254,403],{"class":75},[58,55256,55257],{"class":60,"line":79},[58,55258,3046],{"emptyLinePlaceholder":720},[58,55260,55261,55263,55265],{"class":60,"line":105},[58,55262,373],{"class":75},[58,55264,51976],{"class":71},[58,55266,403],{"class":75},[58,55268,55269,55271,55273,55275,55277,55279],{"class":60,"line":627},[58,55270,52782],{"class":75},[58,55272,51986],{"class":71},[58,55274,51989],{"class":379},[58,55276,383],{"class":75},[58,55278,51994],{"class":386},[58,55280,403],{"class":75},[58,55282,55283,55285,55287,55289,55291,55293,55295,55297,55299],{"class":60,"line":509},[58,55284,52782],{"class":75},[58,55286,51986],{"class":71},[58,55288,15564],{"class":379},[58,55290,383],{"class":75},[58,55292,52033],{"class":386},[58,55294,52013],{"class":379},[58,55296,383],{"class":75},[58,55298,52040],{"class":386},[58,55300,403],{"class":75},[58,55302,55303,55305,55307,55309,55311],{"class":60,"line":559},[58,55304,52782],{"class":75},[58,55306,52049],{"class":71},[58,55308,52052],{"class":75},[58,55310,52049],{"class":71},[58,55312,403],{"class":75},[58,55314,55315,55317,55319],{"class":60,"line":654},[58,55316,52782],{"class":75},[58,55318,702],{"class":71},[58,55320,403],{"class":75},[58,55322,55323,55325],{"class":60,"line":671},[58,55324,7049],{"class":71},[58,55326,76],{"class":75},[58,55328,55329,55332,55334,55336],{"class":60,"line":677},[58,55330,55331],{"class":82},"      padding",[58,55333,86],{"class":75},[58,55335,979],{"class":82},[58,55337,102],{"class":75},[58,55339,55340,55343,55345,55347],{"class":60,"line":2260},[58,55341,55342],{"class":82},"      margin",[58,55344,86],{"class":75},[58,55346,979],{"class":82},[58,55348,102],{"class":75},[58,55350,55351],{"class":60,"line":694},[58,55352,2833],{"class":75},[58,55354,55355],{"class":60,"line":2270},[58,55356,3046],{"emptyLinePlaceholder":720},[58,55358,55359,55362],{"class":60,"line":2275},[58,55360,55361],{"class":71},"    li",[58,55363,76],{"class":75},[58,55365,55366,55369,55371,55374],{"class":60,"line":2289},[58,55367,55368],{"class":82},"      list-style",[58,55370,86],{"class":75},[58,55372,55373],{"class":82},"none",[58,55375,102],{"class":75},[58,55377,55378],{"class":60,"line":2294},[58,55379,2833],{"class":75},[58,55381,55382],{"class":60,"line":2300},[58,55383,3046],{"emptyLinePlaceholder":720},[58,55385,55386,55389],{"class":60,"line":2321},[58,55387,55388],{"class":379},"    .box",[58,55390,76],{"class":75},[58,55392,55393,55396,55398,55400],{"class":60,"line":2326},[58,55394,55395],{"class":82},"      position",[58,55397,86],{"class":75},[58,55399,622],{"class":82},[58,55401,102],{"class":75},[58,55403,55404,55407,55409,55412,55414],{"class":60,"line":2340},[58,55405,55406],{"class":82},"      width",[58,55408,86],{"class":75},[58,55410,55411],{"class":82},"976",[58,55413,93],{"class":92},[58,55415,102],{"class":75},[58,55417,55418,55421,55423,55425,55427],{"class":60,"line":2345},[58,55419,55420],{"class":82},"      height",[58,55422,86],{"class":75},[58,55424,2188],{"class":82},[58,55426,93],{"class":92},[58,55428,102],{"class":75},[58,55430,55431,55433,55435,55437,55439,55441],{"class":60,"line":2374},[58,55432,55342],{"class":82},[58,55434,86],{"class":75},[58,55436,1097],{"class":82},[58,55438,93],{"class":92},[58,55440,52195],{"class":82},[58,55442,102],{"class":75},[58,55444,55445],{"class":60,"line":2379},[58,55446,2833],{"class":75},[58,55448,55449],{"class":60,"line":2396},[58,55450,3046],{"emptyLinePlaceholder":720},[58,55452,55453,55456],{"class":60,"line":2401},[58,55454,55455],{"class":379},"    .slider-footer",[58,55457,76],{"class":75},[58,55459,55460,55462,55464,55466],{"class":60,"line":2406},[58,55461,55395],{"class":82},[58,55463,86],{"class":75},[58,55465,644],{"class":82},[58,55467,102],{"class":75},[58,55469,55470,55473,55475,55477],{"class":60,"line":2411},[58,55471,55472],{"class":82},"      left",[58,55474,86],{"class":75},[58,55476,979],{"class":82},[58,55478,102],{"class":75},[58,55480,55481,55484,55486,55488],{"class":60,"line":2425},[58,55482,55483],{"class":82},"      bottom",[58,55485,86],{"class":75},[58,55487,979],{"class":82},[58,55489,102],{"class":75},[58,55491,55492,55494,55496,55498,55500],{"class":60,"line":2430},[58,55493,55406],{"class":82},[58,55495,86],{"class":75},[58,55497,1097],{"class":82},[58,55499,1114],{"class":92},[58,55501,102],{"class":75},[58,55503,55504,55506,55508,55510,55512],{"class":60,"line":3223},[58,55505,55420],{"class":82},[58,55507,86],{"class":75},[58,55509,1361],{"class":82},[58,55511,1114],{"class":92},[58,55513,102],{"class":75},[58,55515,55516,55519,55521,55524],{"class":60,"line":3237},[58,55517,55518],{"class":82},"      background-color",[58,55520,86],{"class":75},[58,55522,55523],{"class":82},"skyblue",[58,55525,102],{"class":75},[58,55527,55528],{"class":60,"line":3245},[58,55529,2833],{"class":75},[58,55531,55532],{"class":60,"line":3250},[58,55533,3046],{"emptyLinePlaceholder":720},[58,55535,55536,55538,55540],{"class":60,"line":3256},[58,55537,55455],{"class":379},[58,55539,7471],{"class":71},[58,55541,76],{"class":75},[58,55543,55544,55546,55548,55550],{"class":60,"line":3262},[58,55545,55395],{"class":82},[58,55547,86],{"class":75},[58,55549,644],{"class":82},[58,55551,102],{"class":75},[58,55553,55554,55557,55559,55561,55563],{"class":60,"line":3267},[58,55555,55556],{"class":82},"      font-size",[58,55558,86],{"class":75},[58,55560,1686],{"class":82},[58,55562,93],{"class":92},[58,55564,102],{"class":75},[58,55566,55567,55569,55571,55573,55575],{"class":60,"line":8594},[58,55568,55472],{"class":82},[58,55570,86],{"class":75},[58,55572,1486],{"class":82},[58,55574,93],{"class":92},[58,55576,102],{"class":75},[58,55578,55579,55582,55584,55586,55588],{"class":60,"line":8618},[58,55580,55581],{"class":82},"      top",[58,55583,86],{"class":75},[58,55585,1105],{"class":82},[58,55587,93],{"class":92},[58,55589,102],{"class":75},[58,55591,55592],{"class":60,"line":8623},[58,55593,2833],{"class":75},[58,55595,55596],{"class":60,"line":8629},[58,55597,3046],{"emptyLinePlaceholder":720},[58,55599,55600,55603],{"class":60,"line":8656},[58,55601,55602],{"class":71},"    ul",[58,55604,76],{"class":75},[58,55606,55607,55609,55611,55613],{"class":60,"line":8661},[58,55608,55395],{"class":82},[58,55610,86],{"class":75},[58,55612,644],{"class":82},[58,55614,102],{"class":75},[58,55616,55617,55619,55621,55623,55625],{"class":60,"line":8667},[58,55618,55581],{"class":82},[58,55620,86],{"class":75},[58,55622,1567],{"class":82},[58,55624,93],{"class":92},[58,55626,102],{"class":75},[58,55628,55629,55631,55633,55635,55637],{"class":60,"line":8679},[58,55630,55472],{"class":82},[58,55632,86],{"class":75},[58,55634,1486],{"class":82},[58,55636,93],{"class":92},[58,55638,102],{"class":75},[58,55640,55641,55644,55646,55648],{"class":60,"line":8691},[58,55642,55643],{"class":82},"      display",[58,55645,86],{"class":75},[58,55647,52118],{"class":82},[58,55649,102],{"class":75},[58,55651,55652,55655,55657,55659],{"class":60,"line":8703},[58,55653,55654],{"class":82},"      justify-content",[58,55656,86],{"class":75},[58,55658,52306],{"class":82},[58,55660,102],{"class":75},[58,55662,55663,55665,55667,55669],{"class":60,"line":10361},[58,55664,55395],{"class":82},[58,55666,86],{"class":75},[58,55668,644],{"class":82},[58,55670,102],{"class":75},[58,55672,55673,55675,55677,55679,55681],{"class":60,"line":10386},[58,55674,55406],{"class":82},[58,55676,86],{"class":75},[58,55678,4638],{"class":82},[58,55680,93],{"class":92},[58,55682,102],{"class":75},[58,55684,55685,55687,55689,55691,55693],{"class":60,"line":10409},[58,55686,55420],{"class":82},[58,55688,86],{"class":75},[58,55690,1486],{"class":82},[58,55692,93],{"class":92},[58,55694,102],{"class":75},[58,55696,55697],{"class":60,"line":10433},[58,55698,2833],{"class":75},[58,55700,55701],{"class":60,"line":10438},[58,55702,3046],{"emptyLinePlaceholder":720},[58,55704,55705,55707,55710],{"class":60,"line":10443},[58,55706,55602],{"class":71},[58,55708,55709],{"class":71}," li",[58,55711,76],{"class":75},[58,55713,55714,55716,55718,55720,55722],{"class":60,"line":10448},[58,55715,55406],{"class":82},[58,55717,86],{"class":75},[58,55719,1486],{"class":82},[58,55721,93],{"class":92},[58,55723,102],{"class":75},[58,55725,55726,55728,55730,55732,55734],{"class":60,"line":10457},[58,55727,55420],{"class":82},[58,55729,86],{"class":75},[58,55731,1486],{"class":82},[58,55733,93],{"class":92},[58,55735,102],{"class":75},[58,55737,55738,55740,55742,55745,55747,55749,55751,55753,55755,55757,55759,55762],{"class":60,"line":10462},[58,55739,55518],{"class":82},[58,55741,86],{"class":75},[58,55743,55744],{"class":82},"rgba",[58,55746,793],{"class":75},[58,55748,979],{"class":82},[58,55750,469],{"class":75},[58,55752,979],{"class":82},[58,55754,469],{"class":75},[58,55756,979],{"class":82},[58,55758,469],{"class":75},[58,55760,55761],{"class":82},".4",[58,55763,3365],{"class":75},[58,55765,55766,55769,55771,55773,55775],{"class":60,"line":10468},[58,55767,55768],{"class":82},"      border-radius",[58,55770,86],{"class":75},[58,55772,1232],{"class":82},[58,55774,93],{"class":92},[58,55776,102],{"class":75},[58,55778,55779],{"class":60,"line":10489},[58,55780,2833],{"class":75},[58,55782,55783],{"class":60,"line":10495},[58,55784,3046],{"emptyLinePlaceholder":720},[58,55786,55787,55790],{"class":60,"line":10509},[58,55788,55789],{"class":379},"    .activate",[58,55791,76],{"class":75},[58,55793,55794,55796,55798,55801],{"class":60,"line":10515},[58,55795,55518],{"class":82},[58,55797,86],{"class":75},[58,55799,55800],{"class":82},"#f7f7f7",[58,55802,102],{"class":75},[58,55804,55805],{"class":60,"line":10542},[58,55806,2833],{"class":75},[58,55808,55809,55811,55813],{"class":60,"line":10551},[58,55810,53055],{"class":75},[58,55812,702],{"class":71},[58,55814,403],{"class":75},[58,55816,55817,55819,55821],{"class":60,"line":10557},[58,55818,52423],{"class":75},[58,55820,51976],{"class":71},[58,55822,403],{"class":75},[58,55824,55825],{"class":60,"line":10565},[58,55826,3046],{"emptyLinePlaceholder":720},[58,55828,55829,55831,55833],{"class":60,"line":10570},[58,55830,373],{"class":75},[58,55832,52438],{"class":71},[58,55834,403],{"class":75},[58,55836,55837,55839,55841,55843,55845,55847],{"class":60,"line":17247},[58,55838,52782],{"class":75},[58,55840,72],{"class":71},[58,55842,54124],{"class":379},[58,55844,383],{"class":75},[58,55846,54129],{"class":386},[58,55848,403],{"class":75},[58,55850,55851,55853,55855,55857,55859,55862],{"class":60,"line":17253},[58,55852,51983],{"class":75},[58,55854,72],{"class":71},[58,55856,54124],{"class":379},[58,55858,383],{"class":75},[58,55860,55861],{"class":386},"\"slider-wrapper\"",[58,55863,403],{"class":75},[58,55865,55866,55869,55871,55874,55876,55879,55882,55884,55886],{"class":60,"line":17276},[58,55867,55868],{"class":75},"      \u003C",[58,55870,119],{"class":71},[58,55872,55873],{"class":379}," src",[58,55875,383],{"class":75},[58,55877,55878],{"class":386},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[58,55880,55881],{"class":379}," alt",[58,55883,383],{"class":75},[58,55885,8298],{"class":386},[58,55887,403],{"class":75},[58,55889,55890,55892,55894],{"class":60,"line":17282},[58,55891,52414],{"class":75},[58,55893,72],{"class":71},[58,55895,403],{"class":75},[58,55897,55898,55900,55902,55904,55906,55909],{"class":60,"line":17305},[58,55899,51983],{"class":75},[58,55901,72],{"class":71},[58,55903,54124],{"class":379},[58,55905,383],{"class":75},[58,55907,55908],{"class":386},"\"slider-footer\"",[58,55910,403],{"class":75},[58,55912,55913,55915,55917,55920,55922],{"class":60,"line":17319},[58,55914,55868],{"class":75},[58,55916,175],{"class":71},[58,55918,55919],{"class":75},">对人类来说会不会太超前了?\u003C\u002F",[58,55921,175],{"class":71},[58,55923,403],{"class":75},[58,55925,55926,55928,55930],{"class":60,"line":17339},[58,55927,55868],{"class":75},[58,55929,124],{"class":71},[58,55931,403],{"class":75},[58,55933,55934,55937,55939,55941,55943,55946,55949,55951],{"class":60,"line":17345},[58,55935,55936],{"class":75},"        \u003C",[58,55938,22],{"class":71},[58,55940,54124],{"class":379},[58,55942,383],{"class":75},[58,55944,55945],{"class":386},"\"activate\"",[58,55947,55948],{"class":75},">\u003C\u002F",[58,55950,22],{"class":71},[58,55952,403],{"class":75},[58,55954,55955,55957,55959,55961,55963],{"class":60,"line":17356},[58,55956,55936],{"class":75},[58,55958,22],{"class":71},[58,55960,55948],{"class":75},[58,55962,22],{"class":71},[58,55964,403],{"class":75},[58,55966,55967,55969,55971,55973,55975],{"class":60,"line":17379},[58,55968,55936],{"class":75},[58,55970,22],{"class":71},[58,55972,55948],{"class":75},[58,55974,22],{"class":71},[58,55976,403],{"class":75},[58,55978,55979,55981,55983,55985,55987],{"class":60,"line":17401},[58,55980,55936],{"class":75},[58,55982,22],{"class":71},[58,55984,55948],{"class":75},[58,55986,22],{"class":71},[58,55988,403],{"class":75},[58,55990,55991,55993,55995,55997,55999],{"class":60,"line":17406},[58,55992,55936],{"class":75},[58,55994,22],{"class":71},[58,55996,55948],{"class":75},[58,55998,22],{"class":71},[58,56000,403],{"class":75},[58,56002,56003,56005,56007,56009,56011],{"class":60,"line":17412},[58,56004,55936],{"class":75},[58,56006,22],{"class":71},[58,56008,55948],{"class":75},[58,56010,22],{"class":71},[58,56012,403],{"class":75},[58,56014,56015,56017,56019,56021,56023],{"class":60,"line":17426},[58,56016,55936],{"class":75},[58,56018,22],{"class":71},[58,56020,55948],{"class":75},[58,56022,22],{"class":71},[58,56024,403],{"class":75},[58,56026,56027,56029,56031,56033,56035],{"class":60,"line":17439},[58,56028,55936],{"class":75},[58,56030,22],{"class":71},[58,56032,55948],{"class":75},[58,56034,22],{"class":71},[58,56036,403],{"class":75},[58,56038,56039,56042,56044],{"class":60,"line":17444},[58,56040,56041],{"class":75},"      \u003C\u002F",[58,56043,124],{"class":71},[58,56045,403],{"class":75},[58,56047,56048,56050,56052],{"class":60,"line":17458},[58,56049,52414],{"class":75},[58,56051,72],{"class":71},[58,56053,403],{"class":75},[58,56055,56056,56058,56060],{"class":60,"line":17463},[58,56057,53055],{"class":75},[58,56059,72],{"class":71},[58,56061,403],{"class":75},[58,56063,56064,56066,56068],{"class":60,"line":17469},[58,56065,52782],{"class":75},[58,56067,52451],{"class":71},[58,56069,403],{"class":75},[58,56071,56072,56074,56077,56079],{"class":60,"line":17474},[58,56073,11866],{"class":92},[58,56075,56076],{"class":82}," arrImage",[58,56078,14208],{"class":92},[58,56080,56081],{"class":75}," [\n",[58,56083,56084,56087,56090,56093,56096,56099,56102],{"class":60,"line":17488},[58,56085,56086],{"class":75},"      { url: ",[58,56088,56089],{"class":386},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[58,56091,56092],{"class":75},", title: ",[58,56094,56095],{"class":386},"'对人类来说会不会太超前了?'",[58,56097,56098],{"class":75},", color: ",[58,56100,56101],{"class":386},"'rgba(100,67,68)'",[58,56103,56104],{"class":75}," },\n",[58,56106,56107,56109,56112,56114,56117,56119,56122],{"class":60,"line":17493},[58,56108,56086],{"class":75},[58,56110,56111],{"class":386},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[58,56113,56092],{"class":75},[58,56115,56116],{"class":386},"'开启剑与雪的黑暗传说!'",[58,56118,56098],{"class":75},[58,56120,56121],{"class":386},"'rgba(43,35,26)'",[58,56123,56104],{"class":75},[58,56125,56126,56128,56131,56133,56136,56138,56141],{"class":60,"line":17498},[58,56127,56086],{"class":75},[58,56129,56130],{"class":386},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[58,56132,56092],{"class":75},[58,56134,56135],{"class":386},"'真正的jo厨出现了!'",[58,56137,56098],{"class":75},[58,56139,56140],{"class":386},"'rgba(36,31,33)'",[58,56142,56104],{"class":75},[58,56144,56145,56147,56150,56152,56155,56157,56160],{"class":60,"line":17512},[58,56146,56086],{"class":75},[58,56148,56149],{"class":386},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[58,56151,56092],{"class":75},[58,56153,56154],{"class":386},"'李玉刚:让世界通过b站看到东方大国文化'",[58,56156,56098],{"class":75},[58,56158,56159],{"class":386},"'rgba(139,98,66)'",[58,56161,56104],{"class":75},[58,56163,56164,56166,56169,56171,56174,56176,56179],{"class":60,"line":17524},[58,56165,56086],{"class":75},[58,56167,56168],{"class":386},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[58,56170,56092],{"class":75},[58,56172,56173],{"class":386},"'快来分享你的寒假日常吧'",[58,56175,56098],{"class":75},[58,56177,56178],{"class":386},"'rgba(67,90,92)'",[58,56180,56104],{"class":75},[58,56182,56183,56185,56188,56190,56193,56195,56198],{"class":60,"line":17529},[58,56184,56086],{"class":75},[58,56186,56187],{"class":386},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[58,56189,56092],{"class":75},[58,56191,56192],{"class":386},"'哔哩哔哩小年YEAR'",[58,56194,56098],{"class":75},[58,56196,56197],{"class":386},"'rgba(166,131,143)'",[58,56199,56104],{"class":75},[58,56201,56202,56204,56207,56209,56212,56214,56217],{"class":60,"line":17542},[58,56203,56086],{"class":75},[58,56205,56206],{"class":386},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[58,56208,56092],{"class":75},[58,56210,56211],{"class":386},"'一站式解决你的电脑配置问题'",[58,56213,56098],{"class":75},[58,56215,56216],{"class":386},"'rgba(53,29,25)'",[58,56218,56104],{"class":75},[58,56220,56221,56223,56226,56228,56231,56233,56236],{"class":60,"line":17547},[58,56222,56086],{"class":75},[58,56224,56225],{"class":386},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[58,56227,56092],{"class":75},[58,56229,56230],{"class":386},"'谁不想和小猫咪贴贴呢?'",[58,56232,56098],{"class":75},[58,56234,56235],{"class":386},"'rgba(99,72,114)'",[58,56237,56238],{"class":75}," }\n",[58,56240,56241],{"class":60,"line":17552},[58,56242,53747],{"class":75},[58,56244,56245,56247,56250,56252,56254,56256,56258,56261],{"class":60,"line":17557},[58,56246,11866],{"class":92},[58,56248,56249],{"class":82}," img",[58,56251,14208],{"class":92},[58,56253,55032],{"class":75},[58,56255,55035],{"class":379},[58,56257,793],{"class":75},[58,56259,56260],{"class":386},"'.slider-wrapper img'",[58,56262,799],{"class":75},[58,56264,56265,56267,56269,56271,56273,56275,56277,56280],{"class":60,"line":17570},[58,56266,11866],{"class":92},[58,56268,7471],{"class":82},[58,56270,14208],{"class":92},[58,56272,55032],{"class":75},[58,56274,55035],{"class":379},[58,56276,793],{"class":75},[58,56278,56279],{"class":386},"'.slider-footer p'",[58,56281,799],{"class":75},[58,56283,56284,56286,56289,56291,56293,56295,56297,56300],{"class":60,"line":17575},[58,56285,11866],{"class":92},[58,56287,56288],{"class":82}," color",[58,56290,14208],{"class":92},[58,56292,55032],{"class":75},[58,56294,55035],{"class":379},[58,56296,793],{"class":75},[58,56298,56299],{"class":386},"'.slider-footer'",[58,56301,799],{"class":75},[58,56303,56304,56306,56309,56311,56313,56316,56318,56321],{"class":60,"line":33277},[58,56305,11866],{"class":92},[58,56307,56308],{"class":82}," lis",[58,56310,14208],{"class":92},[58,56312,55032],{"class":75},[58,56314,56315],{"class":379},"querySelectorAll",[58,56317,793],{"class":75},[58,56319,56320],{"class":386},"'.slider-footer ul li'",[58,56322,799],{"class":75},[58,56324,56325,56327,56329,56331],{"class":60,"line":33283},[58,56326,52857],{"class":92},[58,56328,10083],{"class":75},[58,56330,383],{"class":92},[58,56332,56333],{"class":82}," 1\n",[58,56335,56336,56338,56341,56343,56345,56347,56349],{"class":60,"line":33289},[58,56337,52857],{"class":92},[58,56339,56340],{"class":75}," timer ",[58,56342,383],{"class":92},[58,56344,55080],{"class":379},[58,56346,793],{"class":75},[58,56348,55085],{"class":92},[58,56350,55088],{"class":75},[58,56352,56353,56356,56358],{"class":60,"line":33295},[58,56354,56355],{"class":75},"      img.src ",[58,56357,383],{"class":92},[58,56359,56360],{"class":75}," arrImage[i].url\n",[58,56362,56363,56366,56368],{"class":60,"line":33301},[58,56364,56365],{"class":75},"      p.innerHTML ",[58,56367,383],{"class":92},[58,56369,56370],{"class":75}," arrImage[i].title\n",[58,56372,56373,56376,56378],{"class":60,"line":33312},[58,56374,56375],{"class":75},"      color.style.backgroundColor ",[58,56377,383],{"class":92},[58,56379,56380],{"class":75}," arrImage[i].color\n",[58,56382,56383],{"class":60,"line":33318},[58,56384,56385],{"class":64},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[58,56387,56388],{"class":60,"line":33338},[58,56389,56390],{"class":64},"      \u002F\u002F li.classList.add('activate')\n",[58,56392,56393],{"class":60,"line":33344},[58,56394,56395],{"class":64},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[58,56397,56398],{"class":60,"line":33355},[58,56399,56400],{"class":64},"      \u002F\u002F lis[i].classList.remove('activate')\n",[58,56402,56403,56406,56408,56410,56413,56416,56419,56421,56424],{"class":60,"line":33361},[58,56404,56405],{"class":75},"      document.",[58,56407,55035],{"class":379},[58,56409,793],{"class":75},[58,56411,56412],{"class":386},"'.activate'",[58,56414,56415],{"class":75},")?.classList.",[58,56417,56418],{"class":379},"toggle",[58,56420,793],{"class":75},[58,56422,56423],{"class":386},"'activate'",[58,56425,799],{"class":75},[58,56427,56428,56431,56433,56435,56437],{"class":60,"line":33367},[58,56429,56430],{"class":75},"      lis[i].classList.",[58,56432,5980],{"class":379},[58,56434,793],{"class":75},[58,56436,56423],{"class":386},[58,56438,799],{"class":75},[58,56440,56441],{"class":60,"line":33373},[58,56442,3046],{"emptyLinePlaceholder":720},[58,56444,56445,56448,56450,56452,56454,56456,56458,56460,56463],{"class":60,"line":33379},[58,56446,56447],{"class":75},"      i ",[58,56449,383],{"class":92},[58,56451,55119],{"class":75},[58,56453,1267],{"class":92},[58,56455,25762],{"class":82},[58,56457,14358],{"class":75},[58,56459,1114],{"class":92},[58,56461,56462],{"class":75}," arrImage.",[58,56464,56465],{"class":82},"length\n",[58,56467,56468],{"class":60,"line":33385},[58,56469,3046],{"emptyLinePlaceholder":720},[58,56471,56472,56474,56476],{"class":60,"line":33391},[58,56473,55171],{"class":75},[58,56475,7056],{"class":82},[58,56477,799],{"class":75},[58,56479,56480,56482,56484],{"class":60,"line":33397},[58,56481,53055],{"class":75},[58,56483,52451],{"class":71},[58,56485,403],{"class":75},[58,56487,56488,56490,56492],{"class":60,"line":33417},[58,56489,52423],{"class":75},[58,56491,52438],{"class":71},[58,56493,403],{"class":75},[58,56495,56496],{"class":60,"line":33423},[58,56497,3046],{"emptyLinePlaceholder":720},[58,56499,56500,56502,56504],{"class":60,"line":33439},[58,56501,52423],{"class":75},[58,56503,51279],{"class":71},[58,56505,403],{"class":75},[175,56507,56508],{},[119,56509],{"alt":53,"src":56510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[175,56512,56513],{},"?.就是短路保护,确保输出正常进行",[175,56515,56516],{},"不要忘记取余%,有时候可以用",[175,56518,56519],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[19,56521,56522],{"start":68},[22,56523,56524],{},"法2",[48,56526,56528],{"className":51277,"code":56527,"language":51279,"meta":53,"style":53},"\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",[55,56529,56530,56540,56554,56558,56566,56580,56600,56612,56620,56626,56636,56646,56650,56654,56660,56670,56674,56678,56684,56694,56706,56718,56732,56736,56740,56746,56756,56766,56776,56788,56800,56810,56814,56818,56826,56836,56848,56860,56872,56876,56880,56886,56896,56908,56920,56930,56940,56950,56962,56974,56978,56982,56990,57002,57014,57040,57052,57056,57060,57066,57076,57080,57088,57096,57100,57108,57122,57136,57156,57164,57178,57190,57198,57216,57228,57240,57252,57264,57276,57288,57300,57308,57316,57324,57332,57343,57359,57375,57391,57407,57423,57439,57455,57471,57475,57480,57498,57516,57526,57531,57536,57547,57553,57568,57577,57581,57586,57595,57600,57609,57614,57619,57624,57647,57677,57681,57689,57693,57701,57709,57713],{"__ignoreMap":53},[58,56531,56532,56534,56536,56538],{"class":60,"line":61},[58,56533,51941],{"class":75},[58,56535,51944],{"class":71},[58,56537,51947],{"class":379},[58,56539,403],{"class":75},[58,56541,56542,56544,56546,56548,56550,56552],{"class":60,"line":68},[58,56543,373],{"class":75},[58,56545,51279],{"class":71},[58,56547,51958],{"class":379},[58,56549,383],{"class":75},[58,56551,51963],{"class":386},[58,56553,403],{"class":75},[58,56555,56556],{"class":60,"line":79},[58,56557,3046],{"emptyLinePlaceholder":720},[58,56559,56560,56562,56564],{"class":60,"line":105},[58,56561,373],{"class":75},[58,56563,51976],{"class":71},[58,56565,403],{"class":75},[58,56567,56568,56570,56572,56574,56576,56578],{"class":60,"line":627},[58,56569,52782],{"class":75},[58,56571,51986],{"class":71},[58,56573,51989],{"class":379},[58,56575,383],{"class":75},[58,56577,51994],{"class":386},[58,56579,403],{"class":75},[58,56581,56582,56584,56586,56588,56590,56592,56594,56596,56598],{"class":60,"line":509},[58,56583,52782],{"class":75},[58,56585,51986],{"class":71},[58,56587,15564],{"class":379},[58,56589,383],{"class":75},[58,56591,52033],{"class":386},[58,56593,52013],{"class":379},[58,56595,383],{"class":75},[58,56597,52040],{"class":386},[58,56599,403],{"class":75},[58,56601,56602,56604,56606,56608,56610],{"class":60,"line":559},[58,56603,52782],{"class":75},[58,56605,52049],{"class":71},[58,56607,52052],{"class":75},[58,56609,52049],{"class":71},[58,56611,403],{"class":75},[58,56613,56614,56616,56618],{"class":60,"line":654},[58,56615,52782],{"class":75},[58,56617,702],{"class":71},[58,56619,403],{"class":75},[58,56621,56622,56624],{"class":60,"line":671},[58,56623,7049],{"class":71},[58,56625,76],{"class":75},[58,56627,56628,56630,56632,56634],{"class":60,"line":677},[58,56629,55331],{"class":82},[58,56631,86],{"class":75},[58,56633,979],{"class":82},[58,56635,102],{"class":75},[58,56637,56638,56640,56642,56644],{"class":60,"line":2260},[58,56639,55342],{"class":82},[58,56641,86],{"class":75},[58,56643,979],{"class":82},[58,56645,102],{"class":75},[58,56647,56648],{"class":60,"line":694},[58,56649,2833],{"class":75},[58,56651,56652],{"class":60,"line":2270},[58,56653,3046],{"emptyLinePlaceholder":720},[58,56655,56656,56658],{"class":60,"line":2275},[58,56657,55361],{"class":71},[58,56659,76],{"class":75},[58,56661,56662,56664,56666,56668],{"class":60,"line":2289},[58,56663,55368],{"class":82},[58,56665,86],{"class":75},[58,56667,55373],{"class":82},[58,56669,102],{"class":75},[58,56671,56672],{"class":60,"line":2294},[58,56673,2833],{"class":75},[58,56675,56676],{"class":60,"line":2300},[58,56677,3046],{"emptyLinePlaceholder":720},[58,56679,56680,56682],{"class":60,"line":2321},[58,56681,55388],{"class":379},[58,56683,76],{"class":75},[58,56685,56686,56688,56690,56692],{"class":60,"line":2326},[58,56687,55395],{"class":82},[58,56689,86],{"class":75},[58,56691,622],{"class":82},[58,56693,102],{"class":75},[58,56695,56696,56698,56700,56702,56704],{"class":60,"line":2340},[58,56697,55406],{"class":82},[58,56699,86],{"class":75},[58,56701,55411],{"class":82},[58,56703,93],{"class":92},[58,56705,102],{"class":75},[58,56707,56708,56710,56712,56714,56716],{"class":60,"line":2345},[58,56709,55420],{"class":82},[58,56711,86],{"class":75},[58,56713,2188],{"class":82},[58,56715,93],{"class":92},[58,56717,102],{"class":75},[58,56719,56720,56722,56724,56726,56728,56730],{"class":60,"line":2374},[58,56721,55342],{"class":82},[58,56723,86],{"class":75},[58,56725,1097],{"class":82},[58,56727,93],{"class":92},[58,56729,52195],{"class":82},[58,56731,102],{"class":75},[58,56733,56734],{"class":60,"line":2379},[58,56735,2833],{"class":75},[58,56737,56738],{"class":60,"line":2396},[58,56739,3046],{"emptyLinePlaceholder":720},[58,56741,56742,56744],{"class":60,"line":2401},[58,56743,55455],{"class":379},[58,56745,76],{"class":75},[58,56747,56748,56750,56752,56754],{"class":60,"line":2406},[58,56749,55395],{"class":82},[58,56751,86],{"class":75},[58,56753,644],{"class":82},[58,56755,102],{"class":75},[58,56757,56758,56760,56762,56764],{"class":60,"line":2411},[58,56759,55472],{"class":82},[58,56761,86],{"class":75},[58,56763,979],{"class":82},[58,56765,102],{"class":75},[58,56767,56768,56770,56772,56774],{"class":60,"line":2425},[58,56769,55483],{"class":82},[58,56771,86],{"class":75},[58,56773,979],{"class":82},[58,56775,102],{"class":75},[58,56777,56778,56780,56782,56784,56786],{"class":60,"line":2430},[58,56779,55406],{"class":82},[58,56781,86],{"class":75},[58,56783,1097],{"class":82},[58,56785,1114],{"class":92},[58,56787,102],{"class":75},[58,56789,56790,56792,56794,56796,56798],{"class":60,"line":3223},[58,56791,55420],{"class":82},[58,56793,86],{"class":75},[58,56795,1361],{"class":82},[58,56797,1114],{"class":92},[58,56799,102],{"class":75},[58,56801,56802,56804,56806,56808],{"class":60,"line":3237},[58,56803,55518],{"class":82},[58,56805,86],{"class":75},[58,56807,55523],{"class":82},[58,56809,102],{"class":75},[58,56811,56812],{"class":60,"line":3245},[58,56813,2833],{"class":75},[58,56815,56816],{"class":60,"line":3250},[58,56817,3046],{"emptyLinePlaceholder":720},[58,56819,56820,56822,56824],{"class":60,"line":3256},[58,56821,55455],{"class":379},[58,56823,7471],{"class":71},[58,56825,76],{"class":75},[58,56827,56828,56830,56832,56834],{"class":60,"line":3262},[58,56829,55395],{"class":82},[58,56831,86],{"class":75},[58,56833,644],{"class":82},[58,56835,102],{"class":75},[58,56837,56838,56840,56842,56844,56846],{"class":60,"line":3267},[58,56839,55556],{"class":82},[58,56841,86],{"class":75},[58,56843,1686],{"class":82},[58,56845,93],{"class":92},[58,56847,102],{"class":75},[58,56849,56850,56852,56854,56856,56858],{"class":60,"line":8594},[58,56851,55472],{"class":82},[58,56853,86],{"class":75},[58,56855,1486],{"class":82},[58,56857,93],{"class":92},[58,56859,102],{"class":75},[58,56861,56862,56864,56866,56868,56870],{"class":60,"line":8618},[58,56863,55581],{"class":82},[58,56865,86],{"class":75},[58,56867,1105],{"class":82},[58,56869,93],{"class":92},[58,56871,102],{"class":75},[58,56873,56874],{"class":60,"line":8623},[58,56875,2833],{"class":75},[58,56877,56878],{"class":60,"line":8629},[58,56879,3046],{"emptyLinePlaceholder":720},[58,56881,56882,56884],{"class":60,"line":8656},[58,56883,55602],{"class":71},[58,56885,76],{"class":75},[58,56887,56888,56890,56892,56894],{"class":60,"line":8661},[58,56889,55395],{"class":82},[58,56891,86],{"class":75},[58,56893,644],{"class":82},[58,56895,102],{"class":75},[58,56897,56898,56900,56902,56904,56906],{"class":60,"line":8667},[58,56899,55581],{"class":82},[58,56901,86],{"class":75},[58,56903,1567],{"class":82},[58,56905,93],{"class":92},[58,56907,102],{"class":75},[58,56909,56910,56912,56914,56916,56918],{"class":60,"line":8679},[58,56911,55472],{"class":82},[58,56913,86],{"class":75},[58,56915,1486],{"class":82},[58,56917,93],{"class":92},[58,56919,102],{"class":75},[58,56921,56922,56924,56926,56928],{"class":60,"line":8691},[58,56923,55643],{"class":82},[58,56925,86],{"class":75},[58,56927,52118],{"class":82},[58,56929,102],{"class":75},[58,56931,56932,56934,56936,56938],{"class":60,"line":8703},[58,56933,55654],{"class":82},[58,56935,86],{"class":75},[58,56937,52306],{"class":82},[58,56939,102],{"class":75},[58,56941,56942,56944,56946,56948],{"class":60,"line":10361},[58,56943,55395],{"class":82},[58,56945,86],{"class":75},[58,56947,644],{"class":82},[58,56949,102],{"class":75},[58,56951,56952,56954,56956,56958,56960],{"class":60,"line":10386},[58,56953,55406],{"class":82},[58,56955,86],{"class":75},[58,56957,4638],{"class":82},[58,56959,93],{"class":92},[58,56961,102],{"class":75},[58,56963,56964,56966,56968,56970,56972],{"class":60,"line":10409},[58,56965,55420],{"class":82},[58,56967,86],{"class":75},[58,56969,1486],{"class":82},[58,56971,93],{"class":92},[58,56973,102],{"class":75},[58,56975,56976],{"class":60,"line":10433},[58,56977,2833],{"class":75},[58,56979,56980],{"class":60,"line":10438},[58,56981,3046],{"emptyLinePlaceholder":720},[58,56983,56984,56986,56988],{"class":60,"line":10443},[58,56985,55602],{"class":71},[58,56987,55709],{"class":71},[58,56989,76],{"class":75},[58,56991,56992,56994,56996,56998,57000],{"class":60,"line":10448},[58,56993,55406],{"class":82},[58,56995,86],{"class":75},[58,56997,1486],{"class":82},[58,56999,93],{"class":92},[58,57001,102],{"class":75},[58,57003,57004,57006,57008,57010,57012],{"class":60,"line":10457},[58,57005,55420],{"class":82},[58,57007,86],{"class":75},[58,57009,1486],{"class":82},[58,57011,93],{"class":92},[58,57013,102],{"class":75},[58,57015,57016,57018,57020,57022,57024,57026,57028,57030,57032,57034,57036,57038],{"class":60,"line":10462},[58,57017,55518],{"class":82},[58,57019,86],{"class":75},[58,57021,55744],{"class":82},[58,57023,793],{"class":75},[58,57025,979],{"class":82},[58,57027,469],{"class":75},[58,57029,979],{"class":82},[58,57031,469],{"class":75},[58,57033,979],{"class":82},[58,57035,469],{"class":75},[58,57037,55761],{"class":82},[58,57039,3365],{"class":75},[58,57041,57042,57044,57046,57048,57050],{"class":60,"line":10468},[58,57043,55768],{"class":82},[58,57045,86],{"class":75},[58,57047,1232],{"class":82},[58,57049,93],{"class":92},[58,57051,102],{"class":75},[58,57053,57054],{"class":60,"line":10489},[58,57055,2833],{"class":75},[58,57057,57058],{"class":60,"line":10495},[58,57059,3046],{"emptyLinePlaceholder":720},[58,57061,57062,57064],{"class":60,"line":10509},[58,57063,55789],{"class":379},[58,57065,76],{"class":75},[58,57067,57068,57070,57072,57074],{"class":60,"line":10515},[58,57069,55518],{"class":82},[58,57071,86],{"class":75},[58,57073,55800],{"class":82},[58,57075,102],{"class":75},[58,57077,57078],{"class":60,"line":10542},[58,57079,2833],{"class":75},[58,57081,57082,57084,57086],{"class":60,"line":10551},[58,57083,53055],{"class":75},[58,57085,702],{"class":71},[58,57087,403],{"class":75},[58,57089,57090,57092,57094],{"class":60,"line":10557},[58,57091,52423],{"class":75},[58,57093,51976],{"class":71},[58,57095,403],{"class":75},[58,57097,57098],{"class":60,"line":10565},[58,57099,3046],{"emptyLinePlaceholder":720},[58,57101,57102,57104,57106],{"class":60,"line":10570},[58,57103,373],{"class":75},[58,57105,52438],{"class":71},[58,57107,403],{"class":75},[58,57109,57110,57112,57114,57116,57118,57120],{"class":60,"line":17247},[58,57111,52782],{"class":75},[58,57113,72],{"class":71},[58,57115,54124],{"class":379},[58,57117,383],{"class":75},[58,57119,54129],{"class":386},[58,57121,403],{"class":75},[58,57123,57124,57126,57128,57130,57132,57134],{"class":60,"line":17253},[58,57125,51983],{"class":75},[58,57127,72],{"class":71},[58,57129,54124],{"class":379},[58,57131,383],{"class":75},[58,57133,55861],{"class":386},[58,57135,403],{"class":75},[58,57137,57138,57140,57142,57144,57146,57148,57150,57152,57154],{"class":60,"line":17276},[58,57139,55868],{"class":75},[58,57141,119],{"class":71},[58,57143,55873],{"class":379},[58,57145,383],{"class":75},[58,57147,55878],{"class":386},[58,57149,55881],{"class":379},[58,57151,383],{"class":75},[58,57153,8298],{"class":386},[58,57155,403],{"class":75},[58,57157,57158,57160,57162],{"class":60,"line":17282},[58,57159,52414],{"class":75},[58,57161,72],{"class":71},[58,57163,403],{"class":75},[58,57165,57166,57168,57170,57172,57174,57176],{"class":60,"line":17305},[58,57167,51983],{"class":75},[58,57169,72],{"class":71},[58,57171,54124],{"class":379},[58,57173,383],{"class":75},[58,57175,55908],{"class":386},[58,57177,403],{"class":75},[58,57179,57180,57182,57184,57186,57188],{"class":60,"line":17319},[58,57181,55868],{"class":75},[58,57183,175],{"class":71},[58,57185,55919],{"class":75},[58,57187,175],{"class":71},[58,57189,403],{"class":75},[58,57191,57192,57194,57196],{"class":60,"line":17339},[58,57193,55868],{"class":75},[58,57195,124],{"class":71},[58,57197,403],{"class":75},[58,57199,57200,57202,57204,57206,57208,57210,57212,57214],{"class":60,"line":17345},[58,57201,55936],{"class":75},[58,57203,22],{"class":71},[58,57205,54124],{"class":379},[58,57207,383],{"class":75},[58,57209,55945],{"class":386},[58,57211,55948],{"class":75},[58,57213,22],{"class":71},[58,57215,403],{"class":75},[58,57217,57218,57220,57222,57224,57226],{"class":60,"line":17356},[58,57219,55936],{"class":75},[58,57221,22],{"class":71},[58,57223,55948],{"class":75},[58,57225,22],{"class":71},[58,57227,403],{"class":75},[58,57229,57230,57232,57234,57236,57238],{"class":60,"line":17379},[58,57231,55936],{"class":75},[58,57233,22],{"class":71},[58,57235,55948],{"class":75},[58,57237,22],{"class":71},[58,57239,403],{"class":75},[58,57241,57242,57244,57246,57248,57250],{"class":60,"line":17401},[58,57243,55936],{"class":75},[58,57245,22],{"class":71},[58,57247,55948],{"class":75},[58,57249,22],{"class":71},[58,57251,403],{"class":75},[58,57253,57254,57256,57258,57260,57262],{"class":60,"line":17406},[58,57255,55936],{"class":75},[58,57257,22],{"class":71},[58,57259,55948],{"class":75},[58,57261,22],{"class":71},[58,57263,403],{"class":75},[58,57265,57266,57268,57270,57272,57274],{"class":60,"line":17412},[58,57267,55936],{"class":75},[58,57269,22],{"class":71},[58,57271,55948],{"class":75},[58,57273,22],{"class":71},[58,57275,403],{"class":75},[58,57277,57278,57280,57282,57284,57286],{"class":60,"line":17426},[58,57279,55936],{"class":75},[58,57281,22],{"class":71},[58,57283,55948],{"class":75},[58,57285,22],{"class":71},[58,57287,403],{"class":75},[58,57289,57290,57292,57294,57296,57298],{"class":60,"line":17439},[58,57291,55936],{"class":75},[58,57293,22],{"class":71},[58,57295,55948],{"class":75},[58,57297,22],{"class":71},[58,57299,403],{"class":75},[58,57301,57302,57304,57306],{"class":60,"line":17444},[58,57303,56041],{"class":75},[58,57305,124],{"class":71},[58,57307,403],{"class":75},[58,57309,57310,57312,57314],{"class":60,"line":17458},[58,57311,52414],{"class":75},[58,57313,72],{"class":71},[58,57315,403],{"class":75},[58,57317,57318,57320,57322],{"class":60,"line":17463},[58,57319,53055],{"class":75},[58,57321,72],{"class":71},[58,57323,403],{"class":75},[58,57325,57326,57328,57330],{"class":60,"line":17469},[58,57327,52782],{"class":75},[58,57329,52451],{"class":71},[58,57331,403],{"class":75},[58,57333,57334,57336,57339,57341],{"class":60,"line":17474},[58,57335,11866],{"class":92},[58,57337,57338],{"class":82}," sliderData",[58,57340,14208],{"class":92},[58,57342,56081],{"class":75},[58,57344,57345,57347,57349,57351,57353,57355,57357],{"class":60,"line":17488},[58,57346,56086],{"class":75},[58,57348,56089],{"class":386},[58,57350,56092],{"class":75},[58,57352,56095],{"class":386},[58,57354,56098],{"class":75},[58,57356,56101],{"class":386},[58,57358,56104],{"class":75},[58,57360,57361,57363,57365,57367,57369,57371,57373],{"class":60,"line":17493},[58,57362,56086],{"class":75},[58,57364,56111],{"class":386},[58,57366,56092],{"class":75},[58,57368,56116],{"class":386},[58,57370,56098],{"class":75},[58,57372,56121],{"class":386},[58,57374,56104],{"class":75},[58,57376,57377,57379,57381,57383,57385,57387,57389],{"class":60,"line":17498},[58,57378,56086],{"class":75},[58,57380,56130],{"class":386},[58,57382,56092],{"class":75},[58,57384,56135],{"class":386},[58,57386,56098],{"class":75},[58,57388,56140],{"class":386},[58,57390,56104],{"class":75},[58,57392,57393,57395,57397,57399,57401,57403,57405],{"class":60,"line":17512},[58,57394,56086],{"class":75},[58,57396,56149],{"class":386},[58,57398,56092],{"class":75},[58,57400,56154],{"class":386},[58,57402,56098],{"class":75},[58,57404,56159],{"class":386},[58,57406,56104],{"class":75},[58,57408,57409,57411,57413,57415,57417,57419,57421],{"class":60,"line":17524},[58,57410,56086],{"class":75},[58,57412,56168],{"class":386},[58,57414,56092],{"class":75},[58,57416,56173],{"class":386},[58,57418,56098],{"class":75},[58,57420,56178],{"class":386},[58,57422,56104],{"class":75},[58,57424,57425,57427,57429,57431,57433,57435,57437],{"class":60,"line":17529},[58,57426,56086],{"class":75},[58,57428,56187],{"class":386},[58,57430,56092],{"class":75},[58,57432,56192],{"class":386},[58,57434,56098],{"class":75},[58,57436,56197],{"class":386},[58,57438,56104],{"class":75},[58,57440,57441,57443,57445,57447,57449,57451,57453],{"class":60,"line":17542},[58,57442,56086],{"class":75},[58,57444,56206],{"class":386},[58,57446,56092],{"class":75},[58,57448,56211],{"class":386},[58,57450,56098],{"class":75},[58,57452,56216],{"class":386},[58,57454,56104],{"class":75},[58,57456,57457,57459,57461,57463,57465,57467,57469],{"class":60,"line":17547},[58,57458,56086],{"class":75},[58,57460,56225],{"class":386},[58,57462,56092],{"class":75},[58,57464,56230],{"class":386},[58,57466,56098],{"class":75},[58,57468,56235],{"class":386},[58,57470,56238],{"class":75},[58,57472,57473],{"class":60,"line":17552},[58,57474,53747],{"class":75},[58,57476,57477],{"class":60,"line":17557},[58,57478,57479],{"class":64},"    \u002F\u002F 1.获取元素\n",[58,57481,57482,57484,57486,57488,57490,57492,57494,57496],{"class":60,"line":17570},[58,57483,11866],{"class":92},[58,57485,56249],{"class":82},[58,57487,14208],{"class":92},[58,57489,55032],{"class":75},[58,57491,55035],{"class":379},[58,57493,793],{"class":75},[58,57495,56260],{"class":386},[58,57497,799],{"class":75},[58,57499,57500,57502,57504,57506,57508,57510,57512,57514],{"class":60,"line":17575},[58,57501,11866],{"class":92},[58,57503,7471],{"class":82},[58,57505,14208],{"class":92},[58,57507,55032],{"class":75},[58,57509,55035],{"class":379},[58,57511,793],{"class":75},[58,57513,56279],{"class":386},[58,57515,799],{"class":75},[58,57517,57518,57520,57522,57524],{"class":60,"line":33277},[58,57519,52857],{"class":92},[58,57521,10083],{"class":75},[58,57523,383],{"class":92},[58,57525,47977],{"class":82},[58,57527,57528],{"class":60,"line":33283},[58,57529,57530],{"class":64},"    \u002F\u002F 2.开启定时器\n",[58,57532,57533],{"class":60,"line":33289},[58,57534,57535],{"class":64},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[58,57537,57538,57541,57543,57545],{"class":60,"line":33295},[58,57539,57540],{"class":379},"    setInterval",[58,57542,793],{"class":75},[58,57544,55085],{"class":92},[58,57546,55088],{"class":75},[58,57548,57549,57551],{"class":60,"line":33301},[58,57550,55093],{"class":75},[58,57552,3348],{"class":92},[58,57554,57555,57557,57559,57561,57564,57566],{"class":60,"line":33312},[58,57556,55116],{"class":92},[58,57558,55119],{"class":75},[58,57560,2357],{"class":92},[58,57562,57563],{"class":75}," sliderData.",[58,57565,52606],{"class":82},[58,57567,13086],{"class":75},[58,57569,57570,57573,57575],{"class":60,"line":33318},[58,57571,57572],{"class":75},"        i ",[58,57574,383],{"class":92},[58,57576,47977],{"class":82},[58,57578,57579],{"class":60,"line":33338},[58,57580,53036],{"class":75},[58,57582,57583],{"class":60,"line":33344},[58,57584,57585],{"class":64},"      \u002F\u002F 更换图片路径\n",[58,57587,57588,57590,57592],{"class":60,"line":33355},[58,57589,56355],{"class":75},[58,57591,383],{"class":92},[58,57593,57594],{"class":75}," sliderData[i].url\n",[58,57596,57597],{"class":60,"line":33361},[58,57598,57599],{"class":64},"      \u002F\u002F 把文字写到p里面\n",[58,57601,57602,57604,57606],{"class":60,"line":33367},[58,57603,56365],{"class":75},[58,57605,383],{"class":92},[58,57607,57608],{"class":75}," sliderData[i].title\n",[58,57610,57611],{"class":60,"line":33373},[58,57612,57613],{"class":64},"      \u002F\u002F 小圆点\n",[58,57615,57616],{"class":60,"line":33379},[58,57617,57618],{"class":64},"      \u002F\u002F 先删除以前的active\n",[58,57620,57621],{"class":60,"line":33385},[58,57622,57623],{"class":64},"      \u002F\u002F 只让当前li添加active\n",[58,57625,57626,57628,57630,57632,57635,57638,57641,57643,57645],{"class":60,"line":33391},[58,57627,56405],{"class":75},[58,57629,55035],{"class":379},[58,57631,793],{"class":75},[58,57633,57634],{"class":386},"'.slider-footer .activate'",[58,57636,57637],{"class":75},").classList.",[58,57639,57640],{"class":379},"remove",[58,57642,793],{"class":75},[58,57644,56423],{"class":386},[58,57646,799],{"class":75},[58,57648,57649,57651,57653,57655,57658,57660,57662,57664,57667,57669,57671,57673,57675],{"class":60,"line":33397},[58,57650,56405],{"class":75},[58,57652,55035],{"class":379},[58,57654,793],{"class":75},[58,57656,57657],{"class":386},"`.slider-footer ul li:nth-child(${",[58,57659,1227],{"class":75},[58,57661,46210],{"class":92},[58,57663,25762],{"class":82},[58,57665,57666],{"class":386},"})`",[58,57668,57637],{"class":75},[58,57670,5980],{"class":379},[58,57672,793],{"class":75},[58,57674,56423],{"class":386},[58,57676,799],{"class":75},[58,57678,57679],{"class":60,"line":33417},[58,57680,3046],{"emptyLinePlaceholder":720},[58,57682,57683,57685,57687],{"class":60,"line":33423},[58,57684,55171],{"class":75},[58,57686,7056],{"class":82},[58,57688,799],{"class":75},[58,57690,57691],{"class":60,"line":33439},[58,57692,3046],{"emptyLinePlaceholder":720},[58,57694,57695,57697,57699],{"class":60,"line":33445},[58,57696,53055],{"class":75},[58,57698,52451],{"class":71},[58,57700,403],{"class":75},[58,57702,57703,57705,57707],{"class":60,"line":33459},[58,57704,52423],{"class":75},[58,57706,52438],{"class":71},[58,57708,403],{"class":75},[58,57710,57711],{"class":60,"line":33465},[58,57712,3046],{"emptyLinePlaceholder":720},[58,57714,57715,57717,57719],{"class":60,"line":33480},[58,57716,52423],{"class":75},[58,57718,51279],{"class":71},[58,57720,403],{"class":75},[114,57722,57724],{"id":57723},"_317-重要知识点","3.1.7 重要知识点",[175,57726,57727,57728],{},"浏览器在渲染文本时， ",[25,57729,57730],{},"没有空格或换行符就没有“断行点”",[175,57732,57733],{},[119,57734],{"alt":53,"src":57735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[175,57737,57738],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[175,57740,57741],{},[119,57742],{"alt":53,"src":57743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[175,57745,57746],{},[119,57747],{"alt":53,"src":57748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57750,57752],{"id":57751},"_32-dom事件基础","3.2 DOM事件基础",[114,57754,57756],{"id":57755},"_321-事件监听","3.2.1 事件监听",[175,57758,57759],{},[119,57760],{"alt":53,"src":57761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[175,57763,57764],{},"事件监听有响应的发生",[175,57766,57767],{},[119,57768],{"alt":53,"src":57769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[175,57771,57772],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[175,57774,57775],{},"对于有名函数,要执行的函数名后边不要加()",[114,57777,57779],{"id":57778},"_322-随机点名案例","3.2.2 随机点名案例",[48,57781,57783],{"className":51277,"code":57782,"language":51279,"meta":53,"style":53},"\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",[55,57784,57785,57795,57809,57813,57821,57835,57855,57867,57875,57881,57891,57901,57905,57909,57916,57927,57931,57935,57941,57953,57967,57977,57989,58002,58006,58010,58017,58021,58034,58046,58058,58062,58066,58070,58077,58087,58091,58095,58104,58116,58128,58143,58147,58155,58163,58167,58175,58188,58202,58215,58235,58243,58258,58278,58298,58306,58310,58318,58323,58359,58379,58384,58403,58408,58419,58424,58435,58440,58459,58474,58479,58505,58515,58524,58529,58545,58550,58555,58560,58575,58579,58583,58588,58607,58624,58632,58637,58652,58656,58660,58668,58676,58680],{"__ignoreMap":53},[58,57786,57787,57789,57791,57793],{"class":60,"line":61},[58,57788,51941],{"class":75},[58,57790,51944],{"class":71},[58,57792,51947],{"class":379},[58,57794,403],{"class":75},[58,57796,57797,57799,57801,57803,57805,57807],{"class":60,"line":68},[58,57798,373],{"class":75},[58,57800,51279],{"class":71},[58,57802,51958],{"class":379},[58,57804,383],{"class":75},[58,57806,51963],{"class":386},[58,57808,403],{"class":75},[58,57810,57811],{"class":60,"line":79},[58,57812,3046],{"emptyLinePlaceholder":720},[58,57814,57815,57817,57819],{"class":60,"line":105},[58,57816,373],{"class":75},[58,57818,51976],{"class":71},[58,57820,403],{"class":75},[58,57822,57823,57825,57827,57829,57831,57833],{"class":60,"line":627},[58,57824,52782],{"class":75},[58,57826,51986],{"class":71},[58,57828,51989],{"class":379},[58,57830,383],{"class":75},[58,57832,51994],{"class":386},[58,57834,403],{"class":75},[58,57836,57837,57839,57841,57843,57845,57847,57849,57851,57853],{"class":60,"line":509},[58,57838,52782],{"class":75},[58,57840,51986],{"class":71},[58,57842,15564],{"class":379},[58,57844,383],{"class":75},[58,57846,52033],{"class":386},[58,57848,52013],{"class":379},[58,57850,383],{"class":75},[58,57852,52040],{"class":386},[58,57854,403],{"class":75},[58,57856,57857,57859,57861,57863,57865],{"class":60,"line":559},[58,57858,52782],{"class":75},[58,57860,52049],{"class":71},[58,57862,52052],{"class":75},[58,57864,52049],{"class":71},[58,57866,403],{"class":75},[58,57868,57869,57871,57873],{"class":60,"line":654},[58,57870,52782],{"class":75},[58,57872,702],{"class":71},[58,57874,403],{"class":75},[58,57876,57877,57879],{"class":60,"line":671},[58,57878,7049],{"class":71},[58,57880,76],{"class":75},[58,57882,57883,57885,57887,57889],{"class":60,"line":677},[58,57884,55342],{"class":82},[58,57886,86],{"class":75},[58,57888,979],{"class":82},[58,57890,102],{"class":75},[58,57892,57893,57895,57897,57899],{"class":60,"line":2260},[58,57894,55331],{"class":82},[58,57896,86],{"class":75},[58,57898,979],{"class":82},[58,57900,102],{"class":75},[58,57902,57903],{"class":60,"line":694},[58,57904,2833],{"class":75},[58,57906,57907],{"class":60,"line":2270},[58,57908,3046],{"emptyLinePlaceholder":720},[58,57910,57911,57914],{"class":60,"line":2275},[58,57912,57913],{"class":71},"    h2",[58,57915,76],{"class":75},[58,57917,57918,57921,57923,57925],{"class":60,"line":2289},[58,57919,57920],{"class":82},"      text-align",[58,57922,86],{"class":75},[58,57924,52231],{"class":82},[58,57926,102],{"class":75},[58,57928,57929],{"class":60,"line":2294},[58,57930,2833],{"class":75},[58,57932,57933],{"class":60,"line":2300},[58,57934,3046],{"emptyLinePlaceholder":720},[58,57936,57937,57939],{"class":60,"line":2321},[58,57938,55388],{"class":379},[58,57940,76],{"class":75},[58,57942,57943,57945,57947,57949,57951],{"class":60,"line":2326},[58,57944,55406],{"class":82},[58,57946,86],{"class":75},[58,57948,2188],{"class":82},[58,57950,93],{"class":92},[58,57952,102],{"class":75},[58,57954,57955,57957,57959,57961,57963,57965],{"class":60,"line":2340},[58,57956,55342],{"class":82},[58,57958,86],{"class":75},[58,57960,1442],{"class":82},[58,57962,93],{"class":92},[58,57964,52195],{"class":82},[58,57966,102],{"class":75},[58,57968,57969,57971,57973,57975],{"class":60,"line":2345},[58,57970,55643],{"class":82},[58,57972,86],{"class":75},[58,57974,52118],{"class":82},[58,57976,102],{"class":75},[58,57978,57979,57981,57983,57985,57987],{"class":60,"line":2374},[58,57980,55556],{"class":82},[58,57982,86],{"class":75},[58,57984,1610],{"class":82},[58,57986,93],{"class":92},[58,57988,102],{"class":75},[58,57990,57991,57994,57996,57998,58000],{"class":60,"line":2379},[58,57992,57993],{"class":82},"      line-height",[58,57995,86],{"class":75},[58,57997,1187],{"class":82},[58,57999,93],{"class":92},[58,58001,102],{"class":75},[58,58003,58004],{"class":60,"line":2396},[58,58005,2833],{"class":75},[58,58007,58008],{"class":60,"line":2401},[58,58009,3046],{"emptyLinePlaceholder":720},[58,58011,58012,58015],{"class":60,"line":2406},[58,58013,58014],{"class":379},"    .qs",[58,58016,76],{"class":75},[58,58018,58019],{"class":60,"line":2411},[58,58020,3046],{"emptyLinePlaceholder":720},[58,58022,58023,58025,58027,58030,58032],{"class":60,"line":2425},[58,58024,55406],{"class":82},[58,58026,86],{"class":75},[58,58028,58029],{"class":82},"450",[58,58031,93],{"class":92},[58,58033,102],{"class":75},[58,58035,58036,58038,58040,58042,58044],{"class":60,"line":2430},[58,58037,55420],{"class":82},[58,58039,86],{"class":75},[58,58041,1187],{"class":82},[58,58043,93],{"class":92},[58,58045,102],{"class":75},[58,58047,58048,58051,58053,58056],{"class":60,"line":3223},[58,58049,58050],{"class":82},"      color",[58,58052,86],{"class":75},[58,58054,58055],{"class":82},"red",[58,58057,102],{"class":75},[58,58059,58060],{"class":60,"line":3237},[58,58061,3046],{"emptyLinePlaceholder":720},[58,58063,58064],{"class":60,"line":3245},[58,58065,2833],{"class":75},[58,58067,58068],{"class":60,"line":3250},[58,58069,3046],{"emptyLinePlaceholder":720},[58,58071,58072,58075],{"class":60,"line":3256},[58,58073,58074],{"class":379},"    .btns",[58,58076,76],{"class":75},[58,58078,58079,58081,58083,58085],{"class":60,"line":3262},[58,58080,57920],{"class":82},[58,58082,86],{"class":75},[58,58084,52231],{"class":82},[58,58086,102],{"class":75},[58,58088,58089],{"class":60,"line":3267},[58,58090,2833],{"class":75},[58,58092,58093],{"class":60,"line":8594},[58,58094,3046],{"emptyLinePlaceholder":720},[58,58096,58097,58099,58102],{"class":60,"line":8618},[58,58098,58074],{"class":379},[58,58100,58101],{"class":71}," button",[58,58103,76],{"class":75},[58,58105,58106,58108,58110,58112,58114],{"class":60,"line":8623},[58,58107,55406],{"class":82},[58,58109,86],{"class":75},[58,58111,1602],{"class":82},[58,58113,93],{"class":92},[58,58115,102],{"class":75},[58,58117,58118,58120,58122,58124,58126],{"class":60,"line":8629},[58,58119,55420],{"class":82},[58,58121,86],{"class":75},[58,58123,1059],{"class":82},[58,58125,93],{"class":92},[58,58127,102],{"class":75},[58,58129,58130,58132,58134,58136,58139,58141],{"class":60,"line":8656},[58,58131,55342],{"class":82},[58,58133,86],{"class":75},[58,58135,979],{"class":82},[58,58137,58138],{"class":82}," 50",[58,58140,93],{"class":92},[58,58142,102],{"class":75},[58,58144,58145],{"class":60,"line":8661},[58,58146,2833],{"class":75},[58,58148,58149,58151,58153],{"class":60,"line":8667},[58,58150,53055],{"class":75},[58,58152,702],{"class":71},[58,58154,403],{"class":75},[58,58156,58157,58159,58161],{"class":60,"line":8679},[58,58158,52423],{"class":75},[58,58160,51976],{"class":71},[58,58162,403],{"class":75},[58,58164,58165],{"class":60,"line":8691},[58,58166,3046],{"emptyLinePlaceholder":720},[58,58168,58169,58171,58173],{"class":60,"line":8703},[58,58170,373],{"class":75},[58,58172,52438],{"class":71},[58,58174,403],{"class":75},[58,58176,58177,58179,58181,58184,58186],{"class":60,"line":10361},[58,58178,52782],{"class":75},[58,58180,14],{"class":71},[58,58182,58183],{"class":75},">随机点名\u003C\u002F",[58,58185,14],{"class":71},[58,58187,403],{"class":75},[58,58189,58190,58192,58194,58196,58198,58200],{"class":60,"line":10386},[58,58191,52782],{"class":75},[58,58193,72],{"class":71},[58,58195,54124],{"class":379},[58,58197,383],{"class":75},[58,58199,54129],{"class":386},[58,58201,403],{"class":75},[58,58203,58204,58206,58208,58211,58213],{"class":60,"line":10409},[58,58205,51983],{"class":75},[58,58207,58],{"class":71},[58,58209,58210],{"class":75},">名字是：\u003C\u002F",[58,58212,58],{"class":71},[58,58214,403],{"class":75},[58,58216,58217,58219,58221,58223,58225,58228,58231,58233],{"class":60,"line":10433},[58,58218,51983],{"class":75},[58,58220,72],{"class":71},[58,58222,54124],{"class":379},[58,58224,383],{"class":75},[58,58226,58227],{"class":386},"\"qs\"",[58,58229,58230],{"class":75},">这里显示姓名\u003C\u002F",[58,58232,72],{"class":71},[58,58234,403],{"class":75},[58,58236,58237,58239,58241],{"class":60,"line":10438},[58,58238,53055],{"class":75},[58,58240,72],{"class":71},[58,58242,403],{"class":75},[58,58244,58245,58247,58249,58251,58253,58256],{"class":60,"line":10443},[58,58246,52782],{"class":75},[58,58248,72],{"class":71},[58,58250,54124],{"class":379},[58,58252,383],{"class":75},[58,58254,58255],{"class":386},"\"btns\"",[58,58257,403],{"class":75},[58,58259,58260,58262,58264,58266,58268,58271,58274,58276],{"class":60,"line":10448},[58,58261,51983],{"class":75},[58,58263,54523],{"class":71},[58,58265,54124],{"class":379},[58,58267,383],{"class":75},[58,58269,58270],{"class":386},"\"start\"",[58,58272,58273],{"class":75},">开始\u003C\u002F",[58,58275,54523],{"class":71},[58,58277,403],{"class":75},[58,58279,58280,58282,58284,58286,58288,58291,58294,58296],{"class":60,"line":10457},[58,58281,51983],{"class":75},[58,58283,54523],{"class":71},[58,58285,54124],{"class":379},[58,58287,383],{"class":75},[58,58289,58290],{"class":386},"\"end\"",[58,58292,58293],{"class":75},">结束\u003C\u002F",[58,58295,54523],{"class":71},[58,58297,403],{"class":75},[58,58299,58300,58302,58304],{"class":60,"line":10462},[58,58301,53055],{"class":75},[58,58303,72],{"class":71},[58,58305,403],{"class":75},[58,58307,58308],{"class":60,"line":10468},[58,58309,3046],{"emptyLinePlaceholder":720},[58,58311,58312,58314,58316],{"class":60,"line":10489},[58,58313,52782],{"class":75},[58,58315,52451],{"class":71},[58,58317,403],{"class":75},[58,58319,58320],{"class":60,"line":10495},[58,58321,58322],{"class":64},"    \u002F\u002F 数据数组\n",[58,58324,58325,58327,58330,58332,58334,58337,58339,58342,58344,58347,58349,58352,58354,58357],{"class":60,"line":10509},[58,58326,11866],{"class":92},[58,58328,58329],{"class":82}," arr",[58,58331,14208],{"class":92},[58,58333,52864],{"class":75},[58,58335,58336],{"class":386},"'马超'",[58,58338,469],{"class":75},[58,58340,58341],{"class":386},"'黄忠'",[58,58343,469],{"class":75},[58,58345,58346],{"class":386},"'赵云'",[58,58348,469],{"class":75},[58,58350,58351],{"class":386},"'关羽'",[58,58353,469],{"class":75},[58,58355,58356],{"class":386},"'张飞'",[58,58358,33890],{"class":75},[58,58360,58361,58363,58366,58368,58370,58372,58374,58377],{"class":60,"line":10515},[58,58362,11866],{"class":92},[58,58364,58365],{"class":82}," qs",[58,58367,14208],{"class":92},[58,58369,55032],{"class":75},[58,58371,55035],{"class":379},[58,58373,793],{"class":75},[58,58375,58376],{"class":386},"'.qs'",[58,58378,799],{"class":75},[58,58380,58381],{"class":60,"line":10542},[58,58382,58383],{"class":64},"    \u002F\u002F 1.业务1.开始按钮模块\n",[58,58385,58386,58388,58390,58392,58394,58396,58398,58401],{"class":60,"line":10551},[58,58387,11866],{"class":92},[58,58389,4830],{"class":82},[58,58391,14208],{"class":92},[58,58393,55032],{"class":75},[58,58395,55035],{"class":379},[58,58397,793],{"class":75},[58,58399,58400],{"class":386},"'.start'",[58,58402,799],{"class":75},[58,58404,58405],{"class":60,"line":10557},[58,58406,58407],{"class":64},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[58,58409,58410,58412,58415,58417],{"class":60,"line":10565},[58,58411,52857],{"class":92},[58,58413,58414],{"class":75}," timerId ",[58,58416,383],{"class":92},[58,58418,47977],{"class":82},[58,58420,58421],{"class":60,"line":10570},[58,58422,58423],{"class":64},"    \u002F\u002F 随机号要全局变量\n",[58,58425,58426,58428,58431,58433],{"class":60,"line":17247},[58,58427,52857],{"class":92},[58,58429,58430],{"class":75}," random ",[58,58432,383],{"class":92},[58,58434,47977],{"class":82},[58,58436,58437],{"class":60,"line":17253},[58,58438,58439],{"class":64},"    \u002F\u002F 1.1 添加点击事件\n",[58,58441,58442,58445,58448,58450,58453,58455,58457],{"class":60,"line":17276},[58,58443,58444],{"class":75},"    start.",[58,58446,58447],{"class":379},"addEventListener",[58,58449,793],{"class":75},[58,58451,58452],{"class":386},"'click'",[58,58454,469],{"class":75},[58,58456,55085],{"class":92},[58,58458,55088],{"class":75},[58,58460,58461,58464,58466,58468,58470,58472],{"class":60,"line":17282},[58,58462,58463],{"class":75},"      timerId ",[58,58465,383],{"class":92},[58,58467,55080],{"class":379},[58,58469,793],{"class":75},[58,58471,55085],{"class":92},[58,58473,55088],{"class":75},[58,58475,58476],{"class":60,"line":17305},[58,58477,58478],{"class":64},"        \u002F\u002F 随机数\n",[58,58480,58481,58484,58486,58489,58492,58495,58497,58499,58501,58503],{"class":60,"line":17319},[58,58482,58483],{"class":75},"        random ",[58,58485,383],{"class":92},[58,58487,58488],{"class":379}," parseInt",[58,58490,58491],{"class":75},"(Math.",[58,58493,58494],{"class":379},"random",[58,58496,13694],{"class":75},[58,58498,1241],{"class":92},[58,58500,52603],{"class":75},[58,58502,52606],{"class":82},[58,58504,799],{"class":75},[58,58506,58507,58510,58512],{"class":60,"line":17339},[58,58508,58509],{"class":75},"        qs.innerHTML ",[58,58511,383],{"class":92},[58,58513,58514],{"class":75}," arr[random]\n",[58,58516,58517,58520,58522],{"class":60,"line":17345},[58,58518,58519],{"class":75},"      }, ",[58,58521,1059],{"class":82},[58,58523,799],{"class":75},[58,58525,58526],{"class":60,"line":17356},[58,58527,58528],{"class":64},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[58,58530,58531,58533,58536,58538,58541,58543],{"class":60,"line":17379},[58,58532,55116],{"class":92},[58,58534,58535],{"class":75}," (arr.",[58,58537,52606],{"class":82},[58,58539,58540],{"class":92}," ===",[58,58542,25762],{"class":82},[58,58544,13086],{"class":75},[58,58546,58547],{"class":60,"line":17401},[58,58548,58549],{"class":64},"        \u002F\u002F start.disabled = true\n",[58,58551,58552],{"class":60,"line":17406},[58,58553,58554],{"class":64},"        \u002F\u002F end.disabled = true\n",[58,58556,58557],{"class":60,"line":17412},[58,58558,58559],{"class":64},"        \u002F\u002F 可以合起来写\n",[58,58561,58562,58565,58567,58570,58572],{"class":60,"line":17426},[58,58563,58564],{"class":75},"        start.disabled ",[58,58566,383],{"class":92},[58,58568,58569],{"class":75}," end.disabled ",[58,58571,383],{"class":92},[58,58573,58574],{"class":82}," true\n",[58,58576,58577],{"class":60,"line":17439},[58,58578,53036],{"class":75},[58,58580,58581],{"class":60,"line":17444},[58,58582,34105],{"class":75},[58,58584,58585],{"class":60,"line":17458},[58,58586,58587],{"class":64},"    \u002F\u002F 1.2 关闭按钮模块\n",[58,58589,58590,58592,58594,58596,58598,58600,58602,58605],{"class":60,"line":17463},[58,58591,11866],{"class":92},[58,58593,4846],{"class":82},[58,58595,14208],{"class":92},[58,58597,55032],{"class":75},[58,58599,55035],{"class":379},[58,58601,793],{"class":75},[58,58603,58604],{"class":386},"'.end'",[58,58606,799],{"class":75},[58,58608,58609,58612,58614,58616,58618,58620,58622],{"class":60,"line":17469},[58,58610,58611],{"class":75},"    end.",[58,58613,58447],{"class":379},[58,58615,793],{"class":75},[58,58617,58452],{"class":386},[58,58619,469],{"class":75},[58,58621,55085],{"class":92},[58,58623,55088],{"class":75},[58,58625,58626,58629],{"class":60,"line":17474},[58,58627,58628],{"class":379},"      clearInterval",[58,58630,58631],{"class":75},"(timerId)\n",[58,58633,58634],{"class":60,"line":17488},[58,58635,58636],{"class":64},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[58,58638,58639,58642,58645,58648,58650],{"class":60,"line":17493},[58,58640,58641],{"class":75},"      arr.",[58,58643,58644],{"class":379},"splice",[58,58646,58647],{"class":75},"(random, ",[58,58649,89],{"class":82},[58,58651,799],{"class":75},[58,58653,58654],{"class":60,"line":17498},[58,58655,34105],{"class":75},[58,58657,58658],{"class":60,"line":17512},[58,58659,3046],{"emptyLinePlaceholder":720},[58,58661,58662,58664,58666],{"class":60,"line":17524},[58,58663,53055],{"class":75},[58,58665,52451],{"class":71},[58,58667,403],{"class":75},[58,58669,58670,58672,58674],{"class":60,"line":17529},[58,58671,52423],{"class":75},[58,58673,52438],{"class":71},[58,58675,403],{"class":75},[58,58677,58678],{"class":60,"line":17542},[58,58679,3046],{"emptyLinePlaceholder":720},[58,58681,58682,58684,58686],{"class":60,"line":17547},[58,58683,52423],{"class":75},[58,58685,51279],{"class":71},[58,58687,403],{"class":75},[175,58689,58690],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[114,58692,58694],{"id":58693},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[48,58696,58698],{"className":51277,"code":58697,"language":51279,"meta":53,"style":53},"\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",[55,58699,58700,58710,58724,58728,58736,58750,58770,58782,58790,58794,58802,58814,58822,58841,58858,58874,58884,58888,58896,58904,58908],{"__ignoreMap":53},[58,58701,58702,58704,58706,58708],{"class":60,"line":61},[58,58703,51941],{"class":75},[58,58705,51944],{"class":71},[58,58707,51947],{"class":379},[58,58709,403],{"class":75},[58,58711,58712,58714,58716,58718,58720,58722],{"class":60,"line":68},[58,58713,373],{"class":75},[58,58715,51279],{"class":71},[58,58717,51958],{"class":379},[58,58719,383],{"class":75},[58,58721,51963],{"class":386},[58,58723,403],{"class":75},[58,58725,58726],{"class":60,"line":79},[58,58727,3046],{"emptyLinePlaceholder":720},[58,58729,58730,58732,58734],{"class":60,"line":105},[58,58731,373],{"class":75},[58,58733,51976],{"class":71},[58,58735,403],{"class":75},[58,58737,58738,58740,58742,58744,58746,58748],{"class":60,"line":627},[58,58739,52782],{"class":75},[58,58741,51986],{"class":71},[58,58743,51989],{"class":379},[58,58745,383],{"class":75},[58,58747,51994],{"class":386},[58,58749,403],{"class":75},[58,58751,58752,58754,58756,58758,58760,58762,58764,58766,58768],{"class":60,"line":509},[58,58753,52782],{"class":75},[58,58755,51986],{"class":71},[58,58757,15564],{"class":379},[58,58759,383],{"class":75},[58,58761,52033],{"class":386},[58,58763,52013],{"class":379},[58,58765,383],{"class":75},[58,58767,52040],{"class":386},[58,58769,403],{"class":75},[58,58771,58772,58774,58776,58778,58780],{"class":60,"line":559},[58,58773,52782],{"class":75},[58,58775,52049],{"class":71},[58,58777,52052],{"class":75},[58,58779,52049],{"class":71},[58,58781,403],{"class":75},[58,58783,58784,58786,58788],{"class":60,"line":654},[58,58785,52423],{"class":75},[58,58787,51976],{"class":71},[58,58789,403],{"class":75},[58,58791,58792],{"class":60,"line":671},[58,58793,3046],{"emptyLinePlaceholder":720},[58,58795,58796,58798,58800],{"class":60,"line":677},[58,58797,373],{"class":75},[58,58799,52438],{"class":71},[58,58801,403],{"class":75},[58,58803,58804,58806,58808,58810,58812],{"class":60,"line":2260},[58,58805,52782],{"class":75},[58,58807,54523],{"class":71},[58,58809,54529],{"class":75},[58,58811,54523],{"class":71},[58,58813,403],{"class":75},[58,58815,58816,58818,58820],{"class":60,"line":694},[58,58817,52782],{"class":75},[58,58819,52451],{"class":71},[58,58821,403],{"class":75},[58,58823,58824,58826,58828,58830,58832,58834,58836,58839],{"class":60,"line":2270},[58,58825,11866],{"class":92},[58,58827,55027],{"class":82},[58,58829,14208],{"class":92},[58,58831,55032],{"class":75},[58,58833,55035],{"class":379},[58,58835,793],{"class":75},[58,58837,58838],{"class":386},"'button'",[58,58840,799],{"class":75},[58,58842,58843,58846,58848,58850,58852,58854,58856],{"class":60,"line":2275},[58,58844,58845],{"class":75},"    btn.",[58,58847,58447],{"class":379},[58,58849,793],{"class":75},[58,58851,58452],{"class":386},[58,58853,469],{"class":75},[58,58855,55085],{"class":92},[58,58857,55088],{"class":75},[58,58859,58860,58863,58865,58867,58870,58872],{"class":60,"line":2289},[58,58861,58862],{"class":92},"      const",[58,58864,2886],{"class":82},[58,58866,14208],{"class":92},[58,58868,58869],{"class":75}," Math.",[58,58871,58494],{"class":379},[58,58873,2622],{"class":75},[58,58875,58876,58879,58882],{"class":60,"line":2294},[58,58877,58878],{"class":75},"      console.",[58,58880,58881],{"class":379},"log",[58,58883,806],{"class":75},[58,58885,58886],{"class":60,"line":2300},[58,58887,34105],{"class":75},[58,58889,58890,58892,58894],{"class":60,"line":2321},[58,58891,53055],{"class":75},[58,58893,52451],{"class":71},[58,58895,403],{"class":75},[58,58897,58898,58900,58902],{"class":60,"line":2326},[58,58899,52423],{"class":75},[58,58901,52438],{"class":71},[58,58903,403],{"class":75},[58,58905,58906],{"class":60,"line":2340},[58,58907,3046],{"emptyLinePlaceholder":720},[58,58909,58910,58912,58914],{"class":60,"line":2345},[58,58911,52423],{"class":75},[58,58913,51279],{"class":71},[58,58915,403],{"class":75},[175,58917,58918],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[175,58920,58921],{},"常量不可以重新赋值",[175,58923,58924],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[48,58926,58928],{"className":51277,"code":58927,"language":51279,"meta":53,"style":53},"\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",[55,58929,58930,58940,58954,58958,58966,58980,59000,59012,59020,59024,59032,59044,59052,59063,59081,59097,59111,59119,59123,59131,59139,59143],{"__ignoreMap":53},[58,58931,58932,58934,58936,58938],{"class":60,"line":61},[58,58933,51941],{"class":75},[58,58935,51944],{"class":71},[58,58937,51947],{"class":379},[58,58939,403],{"class":75},[58,58941,58942,58944,58946,58948,58950,58952],{"class":60,"line":68},[58,58943,373],{"class":75},[58,58945,51279],{"class":71},[58,58947,51958],{"class":379},[58,58949,383],{"class":75},[58,58951,51963],{"class":386},[58,58953,403],{"class":75},[58,58955,58956],{"class":60,"line":79},[58,58957,3046],{"emptyLinePlaceholder":720},[58,58959,58960,58962,58964],{"class":60,"line":105},[58,58961,373],{"class":75},[58,58963,51976],{"class":71},[58,58965,403],{"class":75},[58,58967,58968,58970,58972,58974,58976,58978],{"class":60,"line":627},[58,58969,52782],{"class":75},[58,58971,51986],{"class":71},[58,58973,51989],{"class":379},[58,58975,383],{"class":75},[58,58977,51994],{"class":386},[58,58979,403],{"class":75},[58,58981,58982,58984,58986,58988,58990,58992,58994,58996,58998],{"class":60,"line":509},[58,58983,52782],{"class":75},[58,58985,51986],{"class":71},[58,58987,15564],{"class":379},[58,58989,383],{"class":75},[58,58991,52033],{"class":386},[58,58993,52013],{"class":379},[58,58995,383],{"class":75},[58,58997,52040],{"class":386},[58,58999,403],{"class":75},[58,59001,59002,59004,59006,59008,59010],{"class":60,"line":559},[58,59003,52782],{"class":75},[58,59005,52049],{"class":71},[58,59007,52052],{"class":75},[58,59009,52049],{"class":71},[58,59011,403],{"class":75},[58,59013,59014,59016,59018],{"class":60,"line":654},[58,59015,52423],{"class":75},[58,59017,51976],{"class":71},[58,59019,403],{"class":75},[58,59021,59022],{"class":60,"line":671},[58,59023,3046],{"emptyLinePlaceholder":720},[58,59025,59026,59028,59030],{"class":60,"line":677},[58,59027,373],{"class":75},[58,59029,52438],{"class":71},[58,59031,403],{"class":75},[58,59033,59034,59036,59038,59040,59042],{"class":60,"line":2260},[58,59035,52782],{"class":75},[58,59037,54523],{"class":71},[58,59039,54529],{"class":75},[58,59041,54523],{"class":71},[58,59043,403],{"class":75},[58,59045,59046,59048,59050],{"class":60,"line":694},[58,59047,52782],{"class":75},[58,59049,52451],{"class":71},[58,59051,403],{"class":75},[58,59053,59054,59056,59058,59060],{"class":60,"line":2270},[58,59055,11866],{"class":92},[58,59057,2886],{"class":82},[58,59059,14208],{"class":92},[58,59061,59062],{"class":82}," 10\n",[58,59064,59065,59067,59069,59071,59073,59075,59077,59079],{"class":60,"line":2275},[58,59066,11866],{"class":92},[58,59068,55027],{"class":82},[58,59070,14208],{"class":92},[58,59072,55032],{"class":75},[58,59074,55035],{"class":379},[58,59076,793],{"class":75},[58,59078,58838],{"class":386},[58,59080,799],{"class":75},[58,59082,59083,59085,59087,59089,59091,59093,59095],{"class":60,"line":2289},[58,59084,58845],{"class":75},[58,59086,58447],{"class":379},[58,59088,793],{"class":75},[58,59090,58452],{"class":386},[58,59092,469],{"class":75},[58,59094,55085],{"class":92},[58,59096,55088],{"class":75},[58,59098,59099,59101,59103,59105,59107,59109],{"class":60,"line":2294},[58,59100,58862],{"class":92},[58,59102,2886],{"class":82},[58,59104,14208],{"class":92},[58,59106,58869],{"class":75},[58,59108,58494],{"class":379},[58,59110,2622],{"class":75},[58,59112,59113,59115,59117],{"class":60,"line":2300},[58,59114,58878],{"class":75},[58,59116,58881],{"class":379},[58,59118,806],{"class":75},[58,59120,59121],{"class":60,"line":2321},[58,59122,34105],{"class":75},[58,59124,59125,59127,59129],{"class":60,"line":2326},[58,59126,53055],{"class":75},[58,59128,52451],{"class":71},[58,59130,403],{"class":75},[58,59132,59133,59135,59137],{"class":60,"line":2340},[58,59134,52423],{"class":75},[58,59136,52438],{"class":71},[58,59138,403],{"class":75},[58,59140,59141],{"class":60,"line":2345},[58,59142,3046],{"emptyLinePlaceholder":720},[58,59144,59145,59147,59149],{"class":60,"line":2374},[58,59146,52423],{"class":75},[58,59148,51279],{"class":71},[58,59150,403],{"class":75},[175,59152,59153],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[48,59155,59157],{"className":51277,"code":59156,"language":51279,"meta":53,"style":53},"\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",[55,59158,59159,59169,59183,59187,59195,59209,59229,59241,59249,59253,59261,59273,59281,59291,59309,59325,59338,59346,59350,59358,59366,59370],{"__ignoreMap":53},[58,59160,59161,59163,59165,59167],{"class":60,"line":61},[58,59162,51941],{"class":75},[58,59164,51944],{"class":71},[58,59166,51947],{"class":379},[58,59168,403],{"class":75},[58,59170,59171,59173,59175,59177,59179,59181],{"class":60,"line":68},[58,59172,373],{"class":75},[58,59174,51279],{"class":71},[58,59176,51958],{"class":379},[58,59178,383],{"class":75},[58,59180,51963],{"class":386},[58,59182,403],{"class":75},[58,59184,59185],{"class":60,"line":79},[58,59186,3046],{"emptyLinePlaceholder":720},[58,59188,59189,59191,59193],{"class":60,"line":105},[58,59190,373],{"class":75},[58,59192,51976],{"class":71},[58,59194,403],{"class":75},[58,59196,59197,59199,59201,59203,59205,59207],{"class":60,"line":627},[58,59198,52782],{"class":75},[58,59200,51986],{"class":71},[58,59202,51989],{"class":379},[58,59204,383],{"class":75},[58,59206,51994],{"class":386},[58,59208,403],{"class":75},[58,59210,59211,59213,59215,59217,59219,59221,59223,59225,59227],{"class":60,"line":509},[58,59212,52782],{"class":75},[58,59214,51986],{"class":71},[58,59216,15564],{"class":379},[58,59218,383],{"class":75},[58,59220,52033],{"class":386},[58,59222,52013],{"class":379},[58,59224,383],{"class":75},[58,59226,52040],{"class":386},[58,59228,403],{"class":75},[58,59230,59231,59233,59235,59237,59239],{"class":60,"line":559},[58,59232,52782],{"class":75},[58,59234,52049],{"class":71},[58,59236,52052],{"class":75},[58,59238,52049],{"class":71},[58,59240,403],{"class":75},[58,59242,59243,59245,59247],{"class":60,"line":654},[58,59244,52423],{"class":75},[58,59246,51976],{"class":71},[58,59248,403],{"class":75},[58,59250,59251],{"class":60,"line":671},[58,59252,3046],{"emptyLinePlaceholder":720},[58,59254,59255,59257,59259],{"class":60,"line":677},[58,59256,373],{"class":75},[58,59258,52438],{"class":71},[58,59260,403],{"class":75},[58,59262,59263,59265,59267,59269,59271],{"class":60,"line":2260},[58,59264,52782],{"class":75},[58,59266,54523],{"class":71},[58,59268,54529],{"class":75},[58,59270,54523],{"class":71},[58,59272,403],{"class":75},[58,59274,59275,59277,59279],{"class":60,"line":694},[58,59276,52782],{"class":75},[58,59278,52451],{"class":71},[58,59280,403],{"class":75},[58,59282,59283,59285,59287,59289],{"class":60,"line":2270},[58,59284,11866],{"class":92},[58,59286,2886],{"class":82},[58,59288,14208],{"class":92},[58,59290,59062],{"class":82},[58,59292,59293,59295,59297,59299,59301,59303,59305,59307],{"class":60,"line":2275},[58,59294,11866],{"class":92},[58,59296,55027],{"class":82},[58,59298,14208],{"class":92},[58,59300,55032],{"class":75},[58,59302,55035],{"class":379},[58,59304,793],{"class":75},[58,59306,58838],{"class":386},[58,59308,799],{"class":75},[58,59310,59311,59313,59315,59317,59319,59321,59323],{"class":60,"line":2289},[58,59312,58845],{"class":75},[58,59314,58447],{"class":379},[58,59316,793],{"class":75},[58,59318,58452],{"class":386},[58,59320,469],{"class":75},[58,59322,55085],{"class":92},[58,59324,55088],{"class":75},[58,59326,59327,59330,59332,59334,59336],{"class":60,"line":2294},[58,59328,59329],{"class":75},"      num ",[58,59331,383],{"class":92},[58,59333,58869],{"class":75},[58,59335,58494],{"class":379},[58,59337,2622],{"class":75},[58,59339,59340,59342,59344],{"class":60,"line":2300},[58,59341,58878],{"class":75},[58,59343,58881],{"class":379},[58,59345,806],{"class":75},[58,59347,59348],{"class":60,"line":2321},[58,59349,34105],{"class":75},[58,59351,59352,59354,59356],{"class":60,"line":2326},[58,59353,53055],{"class":75},[58,59355,52451],{"class":71},[58,59357,403],{"class":75},[58,59359,59360,59362,59364],{"class":60,"line":2340},[58,59361,52423],{"class":75},[58,59363,52438],{"class":71},[58,59365,403],{"class":75},[58,59367,59368],{"class":60,"line":2345},[58,59369,3046],{"emptyLinePlaceholder":720},[58,59371,59372,59374,59376],{"class":60,"line":2374},[58,59373,52423],{"class":75},[58,59375,51279],{"class":71},[58,59377,403],{"class":75},[175,59379,59380],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[114,59382,59384],{"id":59383},"_324-事件监听版本","3.2.4 事件监听版本",[175,59386,59387],{},[119,59388],{"alt":53,"src":59389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[175,59391,59392],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[175,59394,59395],{},"这种方式会覆盖前边的事件监听:",[48,59397,59399],{"className":51277,"code":59398,"language":51279,"meta":53,"style":53},"\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",[55,59400,59401,59411,59425,59429,59437,59451,59471,59483,59491,59495,59503,59515,59523,59541,59555,59566,59570,59582,59592,59596,59604,59612,59616],{"__ignoreMap":53},[58,59402,59403,59405,59407,59409],{"class":60,"line":61},[58,59404,51941],{"class":75},[58,59406,51944],{"class":71},[58,59408,51947],{"class":379},[58,59410,403],{"class":75},[58,59412,59413,59415,59417,59419,59421,59423],{"class":60,"line":68},[58,59414,373],{"class":75},[58,59416,51279],{"class":71},[58,59418,51958],{"class":379},[58,59420,383],{"class":75},[58,59422,51963],{"class":386},[58,59424,403],{"class":75},[58,59426,59427],{"class":60,"line":79},[58,59428,3046],{"emptyLinePlaceholder":720},[58,59430,59431,59433,59435],{"class":60,"line":105},[58,59432,373],{"class":75},[58,59434,51976],{"class":71},[58,59436,403],{"class":75},[58,59438,59439,59441,59443,59445,59447,59449],{"class":60,"line":627},[58,59440,52782],{"class":75},[58,59442,51986],{"class":71},[58,59444,51989],{"class":379},[58,59446,383],{"class":75},[58,59448,51994],{"class":386},[58,59450,403],{"class":75},[58,59452,59453,59455,59457,59459,59461,59463,59465,59467,59469],{"class":60,"line":509},[58,59454,52782],{"class":75},[58,59456,51986],{"class":71},[58,59458,15564],{"class":379},[58,59460,383],{"class":75},[58,59462,52033],{"class":386},[58,59464,52013],{"class":379},[58,59466,383],{"class":75},[58,59468,52040],{"class":386},[58,59470,403],{"class":75},[58,59472,59473,59475,59477,59479,59481],{"class":60,"line":559},[58,59474,52782],{"class":75},[58,59476,52049],{"class":71},[58,59478,52052],{"class":75},[58,59480,52049],{"class":71},[58,59482,403],{"class":75},[58,59484,59485,59487,59489],{"class":60,"line":654},[58,59486,52423],{"class":75},[58,59488,51976],{"class":71},[58,59490,403],{"class":75},[58,59492,59493],{"class":60,"line":671},[58,59494,3046],{"emptyLinePlaceholder":720},[58,59496,59497,59499,59501],{"class":60,"line":677},[58,59498,373],{"class":75},[58,59500,52438],{"class":71},[58,59502,403],{"class":75},[58,59504,59505,59507,59509,59511,59513],{"class":60,"line":2260},[58,59506,52782],{"class":75},[58,59508,54523],{"class":71},[58,59510,54529],{"class":75},[58,59512,54523],{"class":71},[58,59514,403],{"class":75},[58,59516,59517,59519,59521],{"class":60,"line":694},[58,59518,52782],{"class":75},[58,59520,52451],{"class":71},[58,59522,403],{"class":75},[58,59524,59525,59527,59529,59531,59533,59535,59537,59539],{"class":60,"line":2270},[58,59526,11866],{"class":92},[58,59528,55027],{"class":82},[58,59530,14208],{"class":92},[58,59532,55032],{"class":75},[58,59534,55035],{"class":379},[58,59536,793],{"class":75},[58,59538,58838],{"class":386},[58,59540,799],{"class":75},[58,59542,59543,59545,59548,59550,59553],{"class":60,"line":2275},[58,59544,58845],{"class":75},[58,59546,59547],{"class":379},"onclick",[58,59549,14208],{"class":92},[58,59551,59552],{"class":92}," function",[58,59554,55088],{"class":75},[58,59556,59557,59560,59562,59564],{"class":60,"line":2289},[58,59558,59559],{"class":379},"      alert",[58,59561,793],{"class":75},[58,59563,1258],{"class":82},[58,59565,799],{"class":75},[58,59567,59568],{"class":60,"line":2294},[58,59569,2833],{"class":75},[58,59571,59572,59574,59576,59578,59580],{"class":60,"line":2300},[58,59573,58845],{"class":75},[58,59575,59547],{"class":379},[58,59577,14208],{"class":92},[58,59579,59552],{"class":92},[58,59581,55088],{"class":75},[58,59583,59584,59586,59588,59590],{"class":60,"line":2321},[58,59585,59559],{"class":379},[58,59587,793],{"class":75},[58,59589,1536],{"class":82},[58,59591,799],{"class":75},[58,59593,59594],{"class":60,"line":2326},[58,59595,2833],{"class":75},[58,59597,59598,59600,59602],{"class":60,"line":2340},[58,59599,53055],{"class":75},[58,59601,52451],{"class":71},[58,59603,403],{"class":75},[58,59605,59606,59608,59610],{"class":60,"line":2345},[58,59607,52423],{"class":75},[58,59609,52438],{"class":71},[58,59611,403],{"class":75},[58,59613,59614],{"class":60,"line":2374},[58,59615,3046],{"emptyLinePlaceholder":720},[58,59617,59618,59620,59622],{"class":60,"line":2379},[58,59619,52423],{"class":75},[58,59621,51279],{"class":71},[58,59623,403],{"class":75},[175,59625,59626],{},"只要点击就输出结果为22,前边11被覆盖了",[48,59628,59630],{"className":51277,"code":59629,"language":51279,"meta":53,"style":53},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[55,59631,59632,59637,59642,59646,59651,59656],{"__ignoreMap":53},[58,59633,59634],{"class":60,"line":61},[58,59635,59636],{"class":75},"  btn.addEventListener('click', function () {\n",[58,59638,59639],{"class":60,"line":68},[58,59640,59641],{"class":75},"      alert(11)\n",[58,59643,59644],{"class":60,"line":79},[58,59645,34105],{"class":75},[58,59647,59648],{"class":60,"line":105},[58,59649,59650],{"class":75},"    btn.addEventListener('click', function () {\n",[58,59652,59653],{"class":60,"line":627},[58,59654,59655],{"class":75},"      alert(22)\n",[58,59657,59658],{"class":60,"line":509},[58,59659,34105],{"class":75},[175,59661,59662],{},"点击第一次输出11,第二次点击为22",[114,59664,59666],{"id":59665},"_325-事件类型","3.2.5 事件类型",[175,59668,59669],{},[119,59670],{"alt":53,"src":59671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22641,59673,59675],{"id":59674},"_3251-鼠标事件","3.2.5.1 鼠标事件",[175,59677,59678],{},"补充知识:",[175,59680,59681],{},"轮播图自动播放模块,可以使用",[175,59683,59684],{},"let timerId = setInterval(function () {",[175,59686,59687],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[175,59689,59690],{},"用js方法模拟进行点击事件,click必须加()",[175,59692,59693],{},"next.click()",[175,59695,59696],{},"}, 1000)",[175,59698,59699],{},[119,59700],{"alt":53,"src":59701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[48,59703,59705],{"className":53705,"code":59704,"language":53707,"meta":53,"style":53},"\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",[55,59706,59707,59711,59721,59735,59739,59747,59762,59782,59802,59815,59823,59828,59833,59837,59841,59846,59851,59856,59861,59865,59869,59874,59879,59884,59888,59892,59897,59901,59906,59911,59915,59919,59924,59929,59934,59939,59944,59948,59952,59957,59962,59967,59972,59977,59981,59985,59990,59995,60000,60005,60010,60015,60020,60025,60030,60035,60039,60043,60048,60053,60057,60061,60066,60071,60075,60080,60085,60089,60093,60098,60102,60107,60112,60116,60121,60125,60129,60134,60139,60144,60149,60154,60159,60164,60168,60172,60176,60181,60186,60191,60196,60200,60208,60216,60220,60228,60243,60257,60278,60286,60300,60313,60328,60347,60359,60371,60383,60395,60407,60419,60431,60439,60454,60478,60502,60510,60518,60526,60534,60539,60544,60549,60554,60559,60564,60569,60574,60579,60584,60588,60593,60598,60603,60608,60613,60618,60623,60628,60633,60637,60642,60647,60652,60657,60662,60667,60672,60677,60682,60687,60692,60697,60701,60705,60710,60715,60720,60724,60729,60734,60739,60744,60749,60753,60758,60762,60766,60770,60774,60778,60782,60787,60792,60797,60802,60807,60812,60817,60822,60827,60831,60835,60840,60845,60850,60855,60860,60864,60869,60874,60879,60884,60889,60894,60898,60902,60907,60911,60916,60920,60925,60930,60935,60940,60945,60950,60954,60962,60970,60974],{"__ignoreMap":53},[58,59708,59709],{"class":60,"line":61},[58,59710,3046],{"emptyLinePlaceholder":720},[58,59712,59713,59715,59717,59719],{"class":60,"line":68},[58,59714,51941],{"class":75},[58,59716,51944],{"class":92},[58,59718,51947],{"class":82},[58,59720,403],{"class":75},[58,59722,59723,59725,59727,59729,59731,59733],{"class":60,"line":79},[58,59724,373],{"class":75},[58,59726,51279],{"class":71},[58,59728,51958],{"class":379},[58,59730,383],{"class":75},[58,59732,51963],{"class":386},[58,59734,403],{"class":75},[58,59736,59737],{"class":60,"line":105},[58,59738,3046],{"emptyLinePlaceholder":720},[58,59740,59741,59743,59745],{"class":60,"line":627},[58,59742,373],{"class":75},[58,59744,51976],{"class":71},[58,59746,403],{"class":75},[58,59748,59749,59751,59753,59755,59757,59759],{"class":60,"line":509},[58,59750,52782],{"class":75},[58,59752,51986],{"class":71},[58,59754,51989],{"class":379},[58,59756,383],{"class":75},[58,59758,51994],{"class":386},[58,59760,59761],{"class":75}," \u002F>\n",[58,59763,59764,59766,59768,59770,59772,59774,59776,59778,59780],{"class":60,"line":559},[58,59765,52782],{"class":75},[58,59767,51986],{"class":71},[58,59769,52005],{"class":379},[58,59771,383],{"class":75},[58,59773,52010],{"class":386},[58,59775,52013],{"class":379},[58,59777,383],{"class":75},[58,59779,52018],{"class":386},[58,59781,59761],{"class":75},[58,59783,59784,59786,59788,59790,59792,59794,59796,59798,59800],{"class":60,"line":654},[58,59785,52782],{"class":75},[58,59787,51986],{"class":71},[58,59789,15564],{"class":379},[58,59791,383],{"class":75},[58,59793,52033],{"class":386},[58,59795,52013],{"class":379},[58,59797,383],{"class":75},[58,59799,52040],{"class":386},[58,59801,59761],{"class":75},[58,59803,59804,59806,59808,59811,59813],{"class":60,"line":671},[58,59805,52782],{"class":75},[58,59807,52049],{"class":71},[58,59809,59810],{"class":75},">轮播图点击切换\u003C\u002F",[58,59812,52049],{"class":71},[58,59814,403],{"class":75},[58,59816,59817,59819,59821],{"class":60,"line":677},[58,59818,52782],{"class":75},[58,59820,702],{"class":71},[58,59822,403],{"class":75},[58,59824,59825],{"class":60,"line":2260},[58,59826,59827],{"class":75},"    * {\n",[58,59829,59830],{"class":60,"line":694},[58,59831,59832],{"class":75},"      box-sizing: border-box;\n",[58,59834,59835],{"class":60,"line":2270},[58,59836,2833],{"class":75},[58,59838,59839],{"class":60,"line":2275},[58,59840,3046],{"emptyLinePlaceholder":720},[58,59842,59843],{"class":60,"line":2289},[58,59844,59845],{"class":75},"    .slider {\n",[58,59847,59848],{"class":60,"line":2294},[58,59849,59850],{"class":75},"      width: 560px;\n",[58,59852,59853],{"class":60,"line":2300},[58,59854,59855],{"class":75},"      height: 400px;\n",[58,59857,59858],{"class":60,"line":2321},[58,59859,59860],{"class":75},"      overflow: hidden;\n",[58,59862,59863],{"class":60,"line":2326},[58,59864,2833],{"class":75},[58,59866,59867],{"class":60,"line":2340},[58,59868,3046],{"emptyLinePlaceholder":720},[58,59870,59871],{"class":60,"line":2345},[58,59872,59873],{"class":75},"    .slider-wrapper {\n",[58,59875,59876],{"class":60,"line":2374},[58,59877,59878],{"class":75},"      width: 100%;\n",[58,59880,59881],{"class":60,"line":2379},[58,59882,59883],{"class":75},"      height: 320px;\n",[58,59885,59886],{"class":60,"line":2396},[58,59887,2833],{"class":75},[58,59889,59890],{"class":60,"line":2401},[58,59891,3046],{"emptyLinePlaceholder":720},[58,59893,59894],{"class":60,"line":2406},[58,59895,59896],{"class":75},"    .slider-wrapper img {\n",[58,59898,59899],{"class":60,"line":2411},[58,59900,59878],{"class":75},[58,59902,59903],{"class":60,"line":2425},[58,59904,59905],{"class":75},"      height: 100%;\n",[58,59907,59908],{"class":60,"line":2430},[58,59909,59910],{"class":75},"      display: block;\n",[58,59912,59913],{"class":60,"line":3223},[58,59914,2833],{"class":75},[58,59916,59917],{"class":60,"line":3237},[58,59918,3046],{"emptyLinePlaceholder":720},[58,59920,59921],{"class":60,"line":3245},[58,59922,59923],{"class":75},"    .slider-footer {\n",[58,59925,59926],{"class":60,"line":3250},[58,59927,59928],{"class":75},"      height: 80px;\n",[58,59930,59931],{"class":60,"line":3256},[58,59932,59933],{"class":75},"      background-color: rgb(100, 67, 68);\n",[58,59935,59936],{"class":60,"line":3262},[58,59937,59938],{"class":75},"      padding: 12px 12px 0 12px;\n",[58,59940,59941],{"class":60,"line":3267},[58,59942,59943],{"class":75},"      position: relative;\n",[58,59945,59946],{"class":60,"line":8594},[58,59947,2833],{"class":75},[58,59949,59950],{"class":60,"line":8618},[58,59951,3046],{"emptyLinePlaceholder":720},[58,59953,59954],{"class":60,"line":8623},[58,59955,59956],{"class":75},"    .slider-footer .toggle {\n",[58,59958,59959],{"class":60,"line":8629},[58,59960,59961],{"class":75},"      position: absolute;\n",[58,59963,59964],{"class":60,"line":8656},[58,59965,59966],{"class":75},"      right: 0;\n",[58,59968,59969],{"class":60,"line":8661},[58,59970,59971],{"class":75},"      top: 12px;\n",[58,59973,59974],{"class":60,"line":8667},[58,59975,59976],{"class":75},"      display: flex;\n",[58,59978,59979],{"class":60,"line":8679},[58,59980,2833],{"class":75},[58,59982,59983],{"class":60,"line":8691},[58,59984,3046],{"emptyLinePlaceholder":720},[58,59986,59987],{"class":60,"line":8703},[58,59988,59989],{"class":75},"    .slider-footer .toggle button {\n",[58,59991,59992],{"class":60,"line":10361},[58,59993,59994],{"class":75},"      margin-right: 12px;\n",[58,59996,59997],{"class":60,"line":10386},[58,59998,59999],{"class":75},"      width: 28px;\n",[58,60001,60002],{"class":60,"line":10409},[58,60003,60004],{"class":75},"      height: 28px;\n",[58,60006,60007],{"class":60,"line":10433},[58,60008,60009],{"class":75},"      appearance: none;\n",[58,60011,60012],{"class":60,"line":10438},[58,60013,60014],{"class":75},"      border: none;\n",[58,60016,60017],{"class":60,"line":10443},[58,60018,60019],{"class":75},"      background: rgba(255, 255, 255, 0.1);\n",[58,60021,60022],{"class":60,"line":10448},[58,60023,60024],{"class":75},"      color: #fff;\n",[58,60026,60027],{"class":60,"line":10457},[58,60028,60029],{"class":75},"      border-radius: 4px;\n",[58,60031,60032],{"class":60,"line":10462},[58,60033,60034],{"class":75},"      cursor: pointer;\n",[58,60036,60037],{"class":60,"line":10468},[58,60038,2833],{"class":75},[58,60040,60041],{"class":60,"line":10489},[58,60042,3046],{"emptyLinePlaceholder":720},[58,60044,60045],{"class":60,"line":10495},[58,60046,60047],{"class":75},"    .slider-footer .toggle button:hover {\n",[58,60049,60050],{"class":60,"line":10509},[58,60051,60052],{"class":75},"      background: rgba(255, 255, 255, 0.2);\n",[58,60054,60055],{"class":60,"line":10515},[58,60056,2833],{"class":75},[58,60058,60059],{"class":60,"line":10542},[58,60060,3046],{"emptyLinePlaceholder":720},[58,60062,60063],{"class":60,"line":10551},[58,60064,60065],{"class":75},"    .slider-footer p {\n",[58,60067,60068],{"class":60,"line":10557},[58,60069,60070],{"class":75},"      margin: 0;\n",[58,60072,60073],{"class":60,"line":10565},[58,60074,60024],{"class":75},[58,60076,60077],{"class":60,"line":10570},[58,60078,60079],{"class":75},"      font-size: 18px;\n",[58,60081,60082],{"class":60,"line":17247},[58,60083,60084],{"class":75},"      margin-bottom: 10px;\n",[58,60086,60087],{"class":60,"line":17253},[58,60088,2833],{"class":75},[58,60090,60091],{"class":60,"line":17276},[58,60092,3046],{"emptyLinePlaceholder":720},[58,60094,60095],{"class":60,"line":17282},[58,60096,60097],{"class":75},"    .slider-indicator {\n",[58,60099,60100],{"class":60,"line":17305},[58,60101,60070],{"class":75},[58,60103,60104],{"class":60,"line":17319},[58,60105,60106],{"class":75},"      padding: 0;\n",[58,60108,60109],{"class":60,"line":17339},[58,60110,60111],{"class":75},"      list-style: none;\n",[58,60113,60114],{"class":60,"line":17345},[58,60115,59976],{"class":75},[58,60117,60118],{"class":60,"line":17356},[58,60119,60120],{"class":75},"      align-items: center;\n",[58,60122,60123],{"class":60,"line":17379},[58,60124,2833],{"class":75},[58,60126,60127],{"class":60,"line":17401},[58,60128,3046],{"emptyLinePlaceholder":720},[58,60130,60131],{"class":60,"line":17406},[58,60132,60133],{"class":75},"    .slider-indicator li {\n",[58,60135,60136],{"class":60,"line":17412},[58,60137,60138],{"class":75},"      width: 8px;\n",[58,60140,60141],{"class":60,"line":17426},[58,60142,60143],{"class":75},"      height: 8px;\n",[58,60145,60146],{"class":60,"line":17439},[58,60147,60148],{"class":75},"      margin: 4px;\n",[58,60150,60151],{"class":60,"line":17444},[58,60152,60153],{"class":75},"      border-radius: 50%;\n",[58,60155,60156],{"class":60,"line":17458},[58,60157,60158],{"class":75},"      background: #fff;\n",[58,60160,60161],{"class":60,"line":17463},[58,60162,60163],{"class":75},"      opacity: 0.4;\n",[58,60165,60166],{"class":60,"line":17469},[58,60167,60034],{"class":75},[58,60169,60170],{"class":60,"line":17474},[58,60171,2833],{"class":75},[58,60173,60174],{"class":60,"line":17488},[58,60175,3046],{"emptyLinePlaceholder":720},[58,60177,60178],{"class":60,"line":17493},[58,60179,60180],{"class":75},"    .slider-indicator li.active {\n",[58,60182,60183],{"class":60,"line":17498},[58,60184,60185],{"class":75},"      width: 12px;\n",[58,60187,60188],{"class":60,"line":17512},[58,60189,60190],{"class":75},"      height: 12px;\n",[58,60192,60193],{"class":60,"line":17524},[58,60194,60195],{"class":75},"      opacity: 1;\n",[58,60197,60198],{"class":60,"line":17529},[58,60199,2833],{"class":75},[58,60201,60202,60204,60206],{"class":60,"line":17542},[58,60203,53055],{"class":75},[58,60205,702],{"class":71},[58,60207,403],{"class":75},[58,60209,60210,60212,60214],{"class":60,"line":17547},[58,60211,52423],{"class":75},[58,60213,51976],{"class":71},[58,60215,403],{"class":75},[58,60217,60218],{"class":60,"line":17552},[58,60219,3046],{"emptyLinePlaceholder":720},[58,60221,60222,60224,60226],{"class":60,"line":17557},[58,60223,373],{"class":75},[58,60225,52438],{"class":71},[58,60227,403],{"class":75},[58,60229,60230,60232,60234,60236,60238,60241],{"class":60,"line":17570},[58,60231,52782],{"class":75},[58,60233,72],{"class":71},[58,60235,54124],{"class":379},[58,60237,383],{"class":75},[58,60239,60240],{"class":386},"\"slider\"",[58,60242,403],{"class":75},[58,60244,60245,60247,60249,60251,60253,60255],{"class":60,"line":17575},[58,60246,51983],{"class":75},[58,60248,72],{"class":71},[58,60250,54124],{"class":379},[58,60252,383],{"class":75},[58,60254,55861],{"class":386},[58,60256,403],{"class":75},[58,60258,60259,60261,60263,60265,60267,60270,60272,60274,60276],{"class":60,"line":33277},[58,60260,55868],{"class":75},[58,60262,119],{"class":71},[58,60264,55873],{"class":379},[58,60266,383],{"class":75},[58,60268,60269],{"class":386},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[58,60271,55881],{"class":379},[58,60273,383],{"class":75},[58,60275,8298],{"class":386},[58,60277,59761],{"class":75},[58,60279,60280,60282,60284],{"class":60,"line":33283},[58,60281,52414],{"class":75},[58,60283,72],{"class":71},[58,60285,403],{"class":75},[58,60287,60288,60290,60292,60294,60296,60298],{"class":60,"line":33289},[58,60289,51983],{"class":75},[58,60291,72],{"class":71},[58,60293,54124],{"class":379},[58,60295,383],{"class":75},[58,60297,55908],{"class":386},[58,60299,403],{"class":75},[58,60301,60302,60304,60306,60309,60311],{"class":60,"line":33295},[58,60303,55868],{"class":75},[58,60305,175],{"class":71},[58,60307,60308],{"class":75},">对人类来说会不会太超前了？\u003C\u002F",[58,60310,175],{"class":71},[58,60312,403],{"class":75},[58,60314,60315,60317,60319,60321,60323,60326],{"class":60,"line":33301},[58,60316,55868],{"class":75},[58,60318,124],{"class":71},[58,60320,54124],{"class":379},[58,60322,383],{"class":75},[58,60324,60325],{"class":386},"\"slider-indicator\"",[58,60327,403],{"class":75},[58,60329,60330,60332,60334,60336,60338,60341,60343,60345],{"class":60,"line":33312},[58,60331,55936],{"class":75},[58,60333,22],{"class":71},[58,60335,54124],{"class":379},[58,60337,383],{"class":75},[58,60339,60340],{"class":386},"\"active\"",[58,60342,55948],{"class":75},[58,60344,22],{"class":71},[58,60346,403],{"class":75},[58,60348,60349,60351,60353,60355,60357],{"class":60,"line":33318},[58,60350,55936],{"class":75},[58,60352,22],{"class":71},[58,60354,55948],{"class":75},[58,60356,22],{"class":71},[58,60358,403],{"class":75},[58,60360,60361,60363,60365,60367,60369],{"class":60,"line":33338},[58,60362,55936],{"class":75},[58,60364,22],{"class":71},[58,60366,55948],{"class":75},[58,60368,22],{"class":71},[58,60370,403],{"class":75},[58,60372,60373,60375,60377,60379,60381],{"class":60,"line":33344},[58,60374,55936],{"class":75},[58,60376,22],{"class":71},[58,60378,55948],{"class":75},[58,60380,22],{"class":71},[58,60382,403],{"class":75},[58,60384,60385,60387,60389,60391,60393],{"class":60,"line":33355},[58,60386,55936],{"class":75},[58,60388,22],{"class":71},[58,60390,55948],{"class":75},[58,60392,22],{"class":71},[58,60394,403],{"class":75},[58,60396,60397,60399,60401,60403,60405],{"class":60,"line":33361},[58,60398,55936],{"class":75},[58,60400,22],{"class":71},[58,60402,55948],{"class":75},[58,60404,22],{"class":71},[58,60406,403],{"class":75},[58,60408,60409,60411,60413,60415,60417],{"class":60,"line":33367},[58,60410,55936],{"class":75},[58,60412,22],{"class":71},[58,60414,55948],{"class":75},[58,60416,22],{"class":71},[58,60418,403],{"class":75},[58,60420,60421,60423,60425,60427,60429],{"class":60,"line":33373},[58,60422,55936],{"class":75},[58,60424,22],{"class":71},[58,60426,55948],{"class":75},[58,60428,22],{"class":71},[58,60430,403],{"class":75},[58,60432,60433,60435,60437],{"class":60,"line":33379},[58,60434,56041],{"class":75},[58,60436,124],{"class":71},[58,60438,403],{"class":75},[58,60440,60441,60443,60445,60447,60449,60452],{"class":60,"line":33385},[58,60442,55868],{"class":75},[58,60444,72],{"class":71},[58,60446,54124],{"class":379},[58,60448,383],{"class":75},[58,60450,60451],{"class":386},"\"toggle\"",[58,60453,403],{"class":75},[58,60455,60456,60458,60460,60462,60464,60467,60469,60472,60474,60476],{"class":60,"line":33391},[58,60457,55936],{"class":75},[58,60459,54523],{"class":71},[58,60461,54124],{"class":379},[58,60463,383],{"class":75},[58,60465,60466],{"class":386},"\"prev\"",[58,60468,1744],{"class":75},[58,60470,60471],{"class":82},"&lt;",[58,60473,52423],{"class":75},[58,60475,54523],{"class":71},[58,60477,403],{"class":75},[58,60479,60480,60482,60484,60486,60488,60491,60493,60496,60498,60500],{"class":60,"line":33397},[58,60481,55936],{"class":75},[58,60483,54523],{"class":71},[58,60485,54124],{"class":379},[58,60487,383],{"class":75},[58,60489,60490],{"class":386},"\"next\"",[58,60492,1744],{"class":75},[58,60494,60495],{"class":82},"&gt;",[58,60497,52423],{"class":75},[58,60499,54523],{"class":71},[58,60501,403],{"class":75},[58,60503,60504,60506,60508],{"class":60,"line":33417},[58,60505,56041],{"class":75},[58,60507,72],{"class":71},[58,60509,403],{"class":75},[58,60511,60512,60514,60516],{"class":60,"line":33423},[58,60513,52414],{"class":75},[58,60515,72],{"class":71},[58,60517,403],{"class":75},[58,60519,60520,60522,60524],{"class":60,"line":33439},[58,60521,53055],{"class":75},[58,60523,72],{"class":71},[58,60525,403],{"class":75},[58,60527,60528,60530,60532],{"class":60,"line":33445},[58,60529,52782],{"class":75},[58,60531,52451],{"class":71},[58,60533,403],{"class":75},[58,60535,60536],{"class":60,"line":33459},[58,60537,60538],{"class":75},"    \u002F\u002F 1. 初始数据\n",[58,60540,60541],{"class":60,"line":33465},[58,60542,60543],{"class":75},"    const data = [\n",[58,60545,60546],{"class":60,"line":33480},[58,60547,60548],{"class":75},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[58,60550,60551],{"class":60,"line":33486},[58,60552,60553],{"class":75},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[58,60555,60556],{"class":60,"line":33495},[58,60557,60558],{"class":75},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[58,60560,60561],{"class":60,"line":33501},[58,60562,60563],{"class":75},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[58,60565,60566],{"class":60,"line":33510},[58,60567,60568],{"class":75},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[58,60570,60571],{"class":60,"line":33516},[58,60572,60573],{"class":75},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[58,60575,60576],{"class":60,"line":33522},[58,60577,60578],{"class":75},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[58,60580,60581],{"class":60,"line":33531},[58,60582,60583],{"class":75},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[58,60585,60586],{"class":60,"line":33537},[58,60587,53747],{"class":75},[58,60589,60590],{"class":60,"line":33548},[58,60591,60592],{"class":75},"    \u002F\u002F 获取元素\n",[58,60594,60595],{"class":60,"line":33554},[58,60596,60597],{"class":75},"    const img = document.querySelector('.slider-wrapper img')\n",[58,60599,60600],{"class":60,"line":33573},[58,60601,60602],{"class":75},"    const p = document.querySelector('.slider-footer p')\n",[58,60604,60605],{"class":60,"line":33579},[58,60606,60607],{"class":75},"    const footer = document.querySelector('.slider-footer')\n",[58,60609,60610],{"class":60,"line":33590},[58,60611,60612],{"class":75},"    \u002F\u002F 1. 右按钮业务\n",[58,60614,60615],{"class":60,"line":33596},[58,60616,60617],{"class":75},"    \u002F\u002F 1.1 获取右侧按钮 \n",[58,60619,60620],{"class":60,"line":33616},[58,60621,60622],{"class":75},"    const next = document.querySelector('.next')\n",[58,60624,60625],{"class":60,"line":33632},[58,60626,60627],{"class":75},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[58,60629,60630],{"class":60,"line":33638},[58,60631,60632],{"class":75},"    \u002F\u002F 1.2 注册点击事件\n",[58,60634,60635],{"class":60,"line":33652},[58,60636,3046],{"emptyLinePlaceholder":720},[58,60638,60639],{"class":60,"line":33658},[58,60640,60641],{"class":75},"    next.addEventListener('click', function () {\n",[58,60643,60644],{"class":60,"line":33664},[58,60645,60646],{"class":75},"      \u002F\u002F console.log(11)\n",[58,60648,60649],{"class":60,"line":33675},[58,60650,60651],{"class":75},"      i++\n",[58,60653,60654],{"class":60,"line":33681},[58,60655,60656],{"class":75},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[58,60658,60659],{"class":60,"line":33687},[58,60660,60661],{"class":75},"      \u002F\u002F if (i >= 8) {\n",[58,60663,60664],{"class":60,"line":33697},[58,60665,60666],{"class":75},"      \u002F\u002F   i = 0\n",[58,60668,60669],{"class":60,"line":33703},[58,60670,60671],{"class":75},"      \u002F\u002F }\n",[58,60673,60674],{"class":60,"line":33714},[58,60675,60676],{"class":75},"      i = i >= data.length ? 0 : i\n",[58,60678,60679],{"class":60,"line":33720},[58,60680,60681],{"class":75},"      \u002F\u002F 1.3 得到对应的对象\n",[58,60683,60684],{"class":60,"line":33730},[58,60685,60686],{"class":75},"      \u002F\u002F console.log(data[i])\n",[58,60688,60689],{"class":60,"line":33735},[58,60690,60691],{"class":75},"      \u002F\u002F 调用函数\n",[58,60693,60694],{"class":60,"line":33741},[58,60695,60696],{"class":75},"      toggle()\n",[58,60698,60699],{"class":60,"line":33790},[58,60700,34105],{"class":75},[58,60702,60703],{"class":60,"line":33837},[58,60704,3046],{"emptyLinePlaceholder":720},[58,60706,60707],{"class":60,"line":33842},[58,60708,60709],{"class":75},"    \u002F\u002F 2. 左侧按钮业务\n",[58,60711,60712],{"class":60,"line":33848},[58,60713,60714],{"class":75},"    \u002F\u002F 2.1 获取左侧按钮 \n",[58,60716,60717],{"class":60,"line":33867},[58,60718,60719],{"class":75},"    const prev = document.querySelector('.prev')\n",[58,60721,60722],{"class":60,"line":33873},[58,60723,60632],{"class":75},[58,60725,60726],{"class":60,"line":33893},[58,60727,60728],{"class":75},"    prev.addEventListener('click', function () {\n",[58,60730,60731],{"class":60,"line":33899},[58,60732,60733],{"class":75},"      i--\n",[58,60735,60736],{"class":60,"line":33905},[58,60737,60738],{"class":75},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[58,60740,60741],{"class":60,"line":33915},[58,60742,60743],{"class":75},"      \u002F\u002F if (i \u003C 0) {\n",[58,60745,60746],{"class":60,"line":33920},[58,60747,60748],{"class":75},"      \u002F\u002F   i = 7\n",[58,60750,60751],{"class":60,"line":33926},[58,60752,60671],{"class":75},[58,60754,60755],{"class":60,"line":33942},[58,60756,60757],{"class":75},"      i = i \u003C 0 ? data.length - 1 : i\n",[58,60759,60760],{"class":60,"line":33987},[58,60761,60681],{"class":75},[58,60763,60764],{"class":60,"line":33993},[58,60765,60686],{"class":75},[58,60767,60768],{"class":60,"line":33999},[58,60769,60691],{"class":75},[58,60771,60772],{"class":60,"line":34005},[58,60773,60696],{"class":75},[58,60775,60776],{"class":60,"line":34016},[58,60777,34105],{"class":75},[58,60779,60780],{"class":60,"line":34022},[58,60781,3046],{"emptyLinePlaceholder":720},[58,60783,60784],{"class":60,"line":34028},[58,60785,60786],{"class":75},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[58,60788,60789],{"class":60,"line":34034},[58,60790,60791],{"class":75},"    function toggle() {\n",[58,60793,60794],{"class":60,"line":34052},[58,60795,60796],{"class":75},"      \u002F\u002F 1.4 渲染对应的数据\n",[58,60798,60799],{"class":60,"line":34066},[58,60800,60801],{"class":75},"      img.src = data[i].url\n",[58,60803,60804],{"class":60,"line":34075},[58,60805,60806],{"class":75},"      p.innerHTML = data[i].title\n",[58,60808,60809],{"class":60,"line":34084},[58,60810,60811],{"class":75},"      footer.style.backgroundColor = data[i].color\n",[58,60813,60814],{"class":60,"line":34093},[58,60815,60816],{"class":75},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[58,60818,60819],{"class":60,"line":34102},[58,60820,60821],{"class":75},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[58,60823,60824],{"class":60,"line":34108},[58,60825,60826],{"class":75},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[58,60828,60829],{"class":60,"line":34114},[58,60830,2833],{"class":75},[58,60832,60833],{"class":60,"line":34122},[58,60834,3046],{"emptyLinePlaceholder":720},[58,60836,60837],{"class":60,"line":34127},[58,60838,60839],{"class":75},"    \u002F\u002F 3. 自动播放模块\n",[58,60841,60842],{"class":60,"line":34133},[58,60843,60844],{"class":75},"    let timerId = setInterval(function () {\n",[58,60846,60847],{"class":60,"line":34144},[58,60848,60849],{"class":75},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[58,60851,60852],{"class":60,"line":34150},[58,60853,60854],{"class":75},"      next.click()\n",[58,60856,60857],{"class":60,"line":34170},[58,60858,60859],{"class":75},"    }, 1000)\n",[58,60861,60862],{"class":60,"line":34176},[58,60863,3046],{"emptyLinePlaceholder":720},[58,60865,60866],{"class":60,"line":34182},[58,60867,60868],{"class":75},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[58,60870,60871],{"class":60,"line":34188},[58,60872,60873],{"class":75},"    const slider = document.querySelector('.slider')\n",[58,60875,60876],{"class":60,"line":34205},[58,60877,60878],{"class":75},"    \u002F\u002F 注册事件\n",[58,60880,60881],{"class":60,"line":34211},[58,60882,60883],{"class":75},"    slider.addEventListener('mouseenter', function () {\n",[58,60885,60886],{"class":60,"line":34217},[58,60887,60888],{"class":75},"      \u002F\u002F 停止定时器\n",[58,60890,60891],{"class":60,"line":34223},[58,60892,60893],{"class":75},"      clearInterval(timerId)\n",[58,60895,60896],{"class":60,"line":34229},[58,60897,34105],{"class":75},[58,60899,60900],{"class":60,"line":34235},[58,60901,3046],{"emptyLinePlaceholder":720},[58,60903,60904],{"class":60,"line":34262},[58,60905,60906],{"class":75},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[58,60908,60909],{"class":60,"line":34286},[58,60910,60878],{"class":75},[58,60912,60913],{"class":60,"line":34292},[58,60914,60915],{"class":75},"    slider.addEventListener('mouseleave', function () {\n",[58,60917,60918],{"class":60,"line":34298},[58,60919,60888],{"class":75},[58,60921,60922],{"class":60,"line":34304},[58,60923,60924],{"class":75},"      if (timerId) clearInterval(timerId)\n",[58,60926,60927],{"class":60,"line":34315},[58,60928,60929],{"class":75},"      \u002F\u002F 开启定时器\n",[58,60931,60932],{"class":60,"line":34326},[58,60933,60934],{"class":75},"      timerId = setInterval(function () {\n",[58,60936,60937],{"class":60,"line":34332},[58,60938,60939],{"class":75},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[58,60941,60942],{"class":60,"line":34349},[58,60943,60944],{"class":75},"        next.click()\n",[58,60946,60947],{"class":60,"line":34372},[58,60948,60949],{"class":75},"      }, 1000)\n",[58,60951,60952],{"class":60,"line":34395},[58,60953,34105],{"class":75},[58,60955,60956,60958,60960],{"class":60,"line":34401},[58,60957,53055],{"class":75},[58,60959,52451],{"class":71},[58,60961,403],{"class":75},[58,60963,60964,60966,60968],{"class":60,"line":34406},[58,60965,52423],{"class":75},[58,60967,52438],{"class":71},[58,60969,403],{"class":75},[58,60971,60972],{"class":60,"line":34415},[58,60973,3046],{"emptyLinePlaceholder":720},[58,60975,60976,60978,60980],{"class":60,"line":34425},[58,60977,52423],{"class":75},[58,60979,51279],{"class":71},[58,60981,403],{"class":75},[22641,60983,60985],{"id":60984},"_3252-焦点事件","3.2.5.2 焦点事件",[175,60987,60988],{},"小米搜索框案例：",[48,60990,60992],{"className":51277,"code":60991,"language":51279,"meta":53,"style":53},"\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",[55,60993,60994,61004,61018,61022,61030,61044,61064,61084,61096,61104,61110,61120,61130,61142,61146,61150,61157,61161,61172,61176,61180,61187,61198,61211,61225,61229,61233,61242,61254,61266,61280,61293,61306,61324,61335,61339,61343,61352,61369,61373,61377,61384,61394,61404,61415,61428,61440,61456,61467,61479,61483,61487,61495,61505,61522,61534,61546,61557,61561,61565,61576,61587,61591,61599,61603,61611,61615,61623,61638,61661,61676,61706,61733,61760,61787,61814,61841,61868,61877,61885,61893,61898,61918,61938,61943,61948,61966,61971,61981,61986,62000,62005,62010,62027,62036,62048,62052,62060,62068,62072],{"__ignoreMap":53},[58,60995,60996,60998,61000,61002],{"class":60,"line":61},[58,60997,51941],{"class":75},[58,60999,51944],{"class":71},[58,61001,51947],{"class":379},[58,61003,403],{"class":75},[58,61005,61006,61008,61010,61012,61014,61016],{"class":60,"line":68},[58,61007,373],{"class":75},[58,61009,51279],{"class":71},[58,61011,51958],{"class":379},[58,61013,383],{"class":75},[58,61015,51963],{"class":386},[58,61017,403],{"class":75},[58,61019,61020],{"class":60,"line":79},[58,61021,3046],{"emptyLinePlaceholder":720},[58,61023,61024,61026,61028],{"class":60,"line":105},[58,61025,373],{"class":75},[58,61027,51976],{"class":71},[58,61029,403],{"class":75},[58,61031,61032,61034,61036,61038,61040,61042],{"class":60,"line":627},[58,61033,51983],{"class":75},[58,61035,51986],{"class":71},[58,61037,51989],{"class":379},[58,61039,383],{"class":75},[58,61041,51994],{"class":386},[58,61043,403],{"class":75},[58,61045,61046,61048,61050,61052,61054,61056,61058,61060,61062],{"class":60,"line":509},[58,61047,51983],{"class":75},[58,61049,51986],{"class":71},[58,61051,52005],{"class":379},[58,61053,383],{"class":75},[58,61055,52010],{"class":386},[58,61057,52013],{"class":379},[58,61059,383],{"class":75},[58,61061,52018],{"class":386},[58,61063,403],{"class":75},[58,61065,61066,61068,61070,61072,61074,61076,61078,61080,61082],{"class":60,"line":559},[58,61067,51983],{"class":75},[58,61069,51986],{"class":71},[58,61071,15564],{"class":379},[58,61073,383],{"class":75},[58,61075,52033],{"class":386},[58,61077,52013],{"class":379},[58,61079,383],{"class":75},[58,61081,52040],{"class":386},[58,61083,403],{"class":75},[58,61085,61086,61088,61090,61092,61094],{"class":60,"line":654},[58,61087,51983],{"class":75},[58,61089,52049],{"class":71},[58,61091,52052],{"class":75},[58,61093,52049],{"class":71},[58,61095,403],{"class":75},[58,61097,61098,61100,61102],{"class":60,"line":671},[58,61099,51983],{"class":75},[58,61101,702],{"class":71},[58,61103,403],{"class":75},[58,61105,61106,61108],{"class":60,"line":677},[58,61107,52069],{"class":71},[58,61109,76],{"class":75},[58,61111,61112,61114,61116,61118],{"class":60,"line":2260},[58,61113,52076],{"class":82},[58,61115,86],{"class":75},[58,61117,979],{"class":82},[58,61119,102],{"class":75},[58,61121,61122,61124,61126,61128],{"class":60,"line":694},[58,61123,52087],{"class":82},[58,61125,86],{"class":75},[58,61127,979],{"class":82},[58,61129,102],{"class":75},[58,61131,61132,61135,61137,61140],{"class":60,"line":2270},[58,61133,61134],{"class":82},"            box-sizing",[58,61136,86],{"class":75},[58,61138,61139],{"class":82},"border-box",[58,61141,102],{"class":75},[58,61143,61144],{"class":60,"line":2275},[58,61145,3175],{"class":75},[58,61147,61148],{"class":60,"line":2289},[58,61149,3046],{"emptyLinePlaceholder":720},[58,61151,61152,61155],{"class":60,"line":2294},[58,61153,61154],{"class":71},"        ul",[58,61156,76],{"class":75},[58,61158,61159],{"class":60,"line":2300},[58,61160,3046],{"emptyLinePlaceholder":720},[58,61162,61163,61166,61168,61170],{"class":60,"line":2321},[58,61164,61165],{"class":82},"            list-style",[58,61167,86],{"class":75},[58,61169,55373],{"class":82},[58,61171,102],{"class":75},[58,61173,61174],{"class":60,"line":2326},[58,61175,3175],{"class":75},[58,61177,61178],{"class":60,"line":2340},[58,61179,3046],{"emptyLinePlaceholder":720},[58,61181,61182,61185],{"class":60,"line":2345},[58,61183,61184],{"class":379},"        .mi",[58,61186,76],{"class":75},[58,61188,61189,61192,61194,61196],{"class":60,"line":2374},[58,61190,61191],{"class":82},"            position",[58,61193,86],{"class":75},[58,61195,622],{"class":82},[58,61197,102],{"class":75},[58,61199,61200,61202,61204,61207,61209],{"class":60,"line":2379},[58,61201,52125],{"class":82},[58,61203,86],{"class":75},[58,61205,61206],{"class":82},"223",[58,61208,93],{"class":92},[58,61210,102],{"class":75},[58,61212,61213,61215,61217,61219,61221,61223],{"class":60,"line":2396},[58,61214,52076],{"class":82},[58,61216,86],{"class":75},[58,61218,1097],{"class":82},[58,61220,93],{"class":92},[58,61222,52195],{"class":82},[58,61224,102],{"class":75},[58,61226,61227],{"class":60,"line":2401},[58,61228,3175],{"class":75},[58,61230,61231],{"class":60,"line":2406},[58,61232,3046],{"emptyLinePlaceholder":720},[58,61234,61235,61237,61240],{"class":60,"line":2411},[58,61236,61184],{"class":379},[58,61238,61239],{"class":71}," input",[58,61241,76],{"class":75},[58,61243,61244,61246,61248,61250,61252],{"class":60,"line":2425},[58,61245,52125],{"class":82},[58,61247,86],{"class":75},[58,61249,61206],{"class":82},[58,61251,93],{"class":92},[58,61253,102],{"class":75},[58,61255,61256,61258,61260,61262,61264],{"class":60,"line":2430},[58,61257,52139],{"class":82},[58,61259,86],{"class":75},[58,61261,1393],{"class":82},[58,61263,93],{"class":92},[58,61265,102],{"class":75},[58,61267,61268,61270,61272,61274,61276,61278],{"class":60,"line":3223},[58,61269,52087],{"class":82},[58,61271,86],{"class":75},[58,61273,979],{"class":82},[58,61275,2684],{"class":82},[58,61277,93],{"class":92},[58,61279,102],{"class":75},[58,61281,61282,61285,61287,61289,61291],{"class":60,"line":3237},[58,61283,61284],{"class":82},"            font-size",[58,61286,86],{"class":75},[58,61288,1335],{"class":82},[58,61290,93],{"class":92},[58,61292,102],{"class":75},[58,61294,61295,61298,61300,61302,61304],{"class":60,"line":3245},[58,61296,61297],{"class":82},"            line-height",[58,61299,86],{"class":75},[58,61301,1393],{"class":82},[58,61303,93],{"class":92},[58,61305,102],{"class":75},[58,61307,61308,61311,61313,61315,61317,61319,61322],{"class":60,"line":3250},[58,61309,61310],{"class":82},"            border",[58,61312,86],{"class":75},[58,61314,89],{"class":82},[58,61316,93],{"class":92},[58,61318,96],{"class":82},[58,61320,61321],{"class":82}," #e0e0e0",[58,61323,102],{"class":75},[58,61325,61326,61329,61331,61333],{"class":60,"line":3256},[58,61327,61328],{"class":82},"            outline",[58,61330,86],{"class":75},[58,61332,55373],{"class":82},[58,61334,102],{"class":75},[58,61336,61337],{"class":60,"line":3262},[58,61338,3175],{"class":75},[58,61340,61341],{"class":60,"line":3267},[58,61342,3046],{"emptyLinePlaceholder":720},[58,61344,61345,61347,61350],{"class":60,"line":8594},[58,61346,61184],{"class":379},[58,61348,61349],{"class":379}," .search",[58,61351,76],{"class":75},[58,61353,61354,61356,61358,61360,61362,61364,61367],{"class":60,"line":8618},[58,61355,61310],{"class":82},[58,61357,86],{"class":75},[58,61359,89],{"class":82},[58,61361,93],{"class":92},[58,61363,96],{"class":82},[58,61365,61366],{"class":82}," #ff6700",[58,61368,102],{"class":75},[58,61370,61371],{"class":60,"line":8623},[58,61372,3175],{"class":75},[58,61374,61375],{"class":60,"line":8629},[58,61376,3046],{"emptyLinePlaceholder":720},[58,61378,61379,61382],{"class":60,"line":8656},[58,61380,61381],{"class":379},"        .result-list",[58,61383,76],{"class":75},[58,61385,61386,61388,61390,61392],{"class":60,"line":8661},[58,61387,52113],{"class":82},[58,61389,86],{"class":75},[58,61391,55373],{"class":82},[58,61393,102],{"class":75},[58,61395,61396,61398,61400,61402],{"class":60,"line":8667},[58,61397,61191],{"class":82},[58,61399,86],{"class":75},[58,61401,644],{"class":82},[58,61403,102],{"class":75},[58,61405,61406,61409,61411,61413],{"class":60,"line":8679},[58,61407,61408],{"class":82},"            left",[58,61410,86],{"class":75},[58,61412,979],{"class":82},[58,61414,102],{"class":75},[58,61416,61417,61420,61422,61424,61426],{"class":60,"line":8691},[58,61418,61419],{"class":82},"            top",[58,61421,86],{"class":75},[58,61423,1393],{"class":82},[58,61425,93],{"class":92},[58,61427,102],{"class":75},[58,61429,61430,61432,61434,61436,61438],{"class":60,"line":8703},[58,61431,52125],{"class":82},[58,61433,86],{"class":75},[58,61435,61206],{"class":82},[58,61437,93],{"class":92},[58,61439,102],{"class":75},[58,61441,61442,61444,61446,61448,61450,61452,61454],{"class":60,"line":10361},[58,61443,61310],{"class":82},[58,61445,86],{"class":75},[58,61447,89],{"class":82},[58,61449,93],{"class":92},[58,61451,96],{"class":82},[58,61453,61366],{"class":82},[58,61455,102],{"class":75},[58,61457,61458,61461,61463,61465],{"class":60,"line":10386},[58,61459,61460],{"class":82},"            border-top",[58,61462,86],{"class":75},[58,61464,979],{"class":82},[58,61466,102],{"class":75},[58,61468,61469,61472,61474,61477],{"class":60,"line":10409},[58,61470,61471],{"class":82},"            background",[58,61473,86],{"class":75},[58,61475,61476],{"class":82},"#fff",[58,61478,102],{"class":75},[58,61480,61481],{"class":60,"line":10433},[58,61482,3175],{"class":75},[58,61484,61485],{"class":60,"line":10438},[58,61486,3046],{"emptyLinePlaceholder":720},[58,61488,61489,61491,61493],{"class":60,"line":10443},[58,61490,61381],{"class":379},[58,61492,2048],{"class":71},[58,61494,76],{"class":75},[58,61496,61497,61499,61501,61503],{"class":60,"line":10448},[58,61498,52113],{"class":82},[58,61500,86],{"class":75},[58,61502,500],{"class":82},[58,61504,102],{"class":75},[58,61506,61507,61509,61511,61513,61515,61518,61520],{"class":60,"line":10457},[58,61508,52087],{"class":82},[58,61510,86],{"class":75},[58,61512,1130],{"class":82},[58,61514,93],{"class":92},[58,61516,61517],{"class":82}," 15",[58,61519,93],{"class":92},[58,61521,102],{"class":75},[58,61523,61524,61526,61528,61530,61532],{"class":60,"line":10462},[58,61525,61284],{"class":82},[58,61527,86],{"class":75},[58,61529,1284],{"class":82},[58,61531,93],{"class":92},[58,61533,102],{"class":75},[58,61535,61536,61539,61541,61544],{"class":60,"line":10468},[58,61537,61538],{"class":82},"            color",[58,61540,86],{"class":75},[58,61542,61543],{"class":82},"#424242",[58,61545,102],{"class":75},[58,61547,61548,61551,61553,61555],{"class":60,"line":10489},[58,61549,61550],{"class":82},"            text-decoration",[58,61552,86],{"class":75},[58,61554,55373],{"class":82},[58,61556,102],{"class":75},[58,61558,61559],{"class":60,"line":10495},[58,61560,3175],{"class":75},[58,61562,61563],{"class":60,"line":10509},[58,61564,3046],{"emptyLinePlaceholder":720},[58,61566,61567,61569,61571,61574],{"class":60,"line":10515},[58,61568,61381],{"class":379},[58,61570,2048],{"class":71},[58,61572,61573],{"class":379},":hover",[58,61575,76],{"class":75},[58,61577,61578,61580,61582,61585],{"class":60,"line":10542},[58,61579,52278],{"class":82},[58,61581,86],{"class":75},[58,61583,61584],{"class":82},"#eee",[58,61586,102],{"class":75},[58,61588,61589],{"class":60,"line":10551},[58,61590,3175],{"class":75},[58,61592,61593,61595,61597],{"class":60,"line":10557},[58,61594,52414],{"class":75},[58,61596,702],{"class":71},[58,61598,403],{"class":75},[58,61600,61601],{"class":60,"line":10565},[58,61602,3046],{"emptyLinePlaceholder":720},[58,61604,61605,61607,61609],{"class":60,"line":10570},[58,61606,52423],{"class":75},[58,61608,51976],{"class":71},[58,61610,403],{"class":75},[58,61612,61613],{"class":60,"line":17247},[58,61614,3046],{"emptyLinePlaceholder":720},[58,61616,61617,61619,61621],{"class":60,"line":17253},[58,61618,373],{"class":75},[58,61620,52438],{"class":71},[58,61622,403],{"class":75},[58,61624,61625,61627,61629,61631,61633,61636],{"class":60,"line":17276},[58,61626,51983],{"class":75},[58,61628,72],{"class":71},[58,61630,54124],{"class":379},[58,61632,383],{"class":75},[58,61634,61635],{"class":386},"\"mi\"",[58,61637,403],{"class":75},[58,61639,61640,61642,61644,61646,61648,61651,61654,61656,61659],{"class":60,"line":17282},[58,61641,55936],{"class":75},[58,61643,54457],{"class":71},[58,61645,54460],{"class":379},[58,61647,383],{"class":75},[58,61649,61650],{"class":386},"\"search\"",[58,61652,61653],{"class":379}," placeholder",[58,61655,383],{"class":75},[58,61657,61658],{"class":386},"\"小米笔记本\"",[58,61660,403],{"class":75},[58,61662,61663,61665,61667,61669,61671,61674],{"class":60,"line":17305},[58,61664,55936],{"class":75},[58,61666,124],{"class":71},[58,61668,54124],{"class":379},[58,61670,383],{"class":75},[58,61672,61673],{"class":386},"\"result-list\"",[58,61675,403],{"class":75},[58,61677,61678,61681,61683,61686,61688,61690,61692,61695,61698,61700,61702,61704],{"class":60,"line":17319},[58,61679,61680],{"class":75},"            \u003C",[58,61682,22],{"class":71},[58,61684,61685],{"class":75},">\u003C",[58,61687,376],{"class":71},[58,61689,380],{"class":379},[58,61691,383],{"class":75},[58,61693,61694],{"class":386},"\"#\"",[58,61696,61697],{"class":75},">全部商品\u003C\u002F",[58,61699,376],{"class":71},[58,61701,55948],{"class":75},[58,61703,22],{"class":71},[58,61705,403],{"class":75},[58,61707,61708,61710,61712,61714,61716,61718,61720,61722,61725,61727,61729,61731],{"class":60,"line":17339},[58,61709,61680],{"class":75},[58,61711,22],{"class":71},[58,61713,61685],{"class":75},[58,61715,376],{"class":71},[58,61717,380],{"class":379},[58,61719,383],{"class":75},[58,61721,61694],{"class":386},[58,61723,61724],{"class":75},">小米11\u003C\u002F",[58,61726,376],{"class":71},[58,61728,55948],{"class":75},[58,61730,22],{"class":71},[58,61732,403],{"class":75},[58,61734,61735,61737,61739,61741,61743,61745,61747,61749,61752,61754,61756,61758],{"class":60,"line":17345},[58,61736,61680],{"class":75},[58,61738,22],{"class":71},[58,61740,61685],{"class":75},[58,61742,376],{"class":71},[58,61744,380],{"class":379},[58,61746,383],{"class":75},[58,61748,61694],{"class":386},[58,61750,61751],{"class":75},">小米10S\u003C\u002F",[58,61753,376],{"class":71},[58,61755,55948],{"class":75},[58,61757,22],{"class":71},[58,61759,403],{"class":75},[58,61761,61762,61764,61766,61768,61770,61772,61774,61776,61779,61781,61783,61785],{"class":60,"line":17356},[58,61763,61680],{"class":75},[58,61765,22],{"class":71},[58,61767,61685],{"class":75},[58,61769,376],{"class":71},[58,61771,380],{"class":379},[58,61773,383],{"class":75},[58,61775,61694],{"class":386},[58,61777,61778],{"class":75},">小米笔记本\u003C\u002F",[58,61780,376],{"class":71},[58,61782,55948],{"class":75},[58,61784,22],{"class":71},[58,61786,403],{"class":75},[58,61788,61789,61791,61793,61795,61797,61799,61801,61803,61806,61808,61810,61812],{"class":60,"line":17379},[58,61790,61680],{"class":75},[58,61792,22],{"class":71},[58,61794,61685],{"class":75},[58,61796,376],{"class":71},[58,61798,380],{"class":379},[58,61800,383],{"class":75},[58,61802,61694],{"class":386},[58,61804,61805],{"class":75},">小米手机\u003C\u002F",[58,61807,376],{"class":71},[58,61809,55948],{"class":75},[58,61811,22],{"class":71},[58,61813,403],{"class":75},[58,61815,61816,61818,61820,61822,61824,61826,61828,61830,61833,61835,61837,61839],{"class":60,"line":17401},[58,61817,61680],{"class":75},[58,61819,22],{"class":71},[58,61821,61685],{"class":75},[58,61823,376],{"class":71},[58,61825,380],{"class":379},[58,61827,383],{"class":75},[58,61829,61694],{"class":386},[58,61831,61832],{"class":75},">黑鲨4\u003C\u002F",[58,61834,376],{"class":71},[58,61836,55948],{"class":75},[58,61838,22],{"class":71},[58,61840,403],{"class":75},[58,61842,61843,61845,61847,61849,61851,61853,61855,61857,61860,61862,61864,61866],{"class":60,"line":17406},[58,61844,61680],{"class":75},[58,61846,22],{"class":71},[58,61848,61685],{"class":75},[58,61850,376],{"class":71},[58,61852,380],{"class":379},[58,61854,383],{"class":75},[58,61856,61694],{"class":386},[58,61858,61859],{"class":75},">空调\u003C\u002F",[58,61861,376],{"class":71},[58,61863,55948],{"class":75},[58,61865,22],{"class":71},[58,61867,403],{"class":75},[58,61869,61870,61873,61875],{"class":60,"line":17412},[58,61871,61872],{"class":75},"        \u003C\u002F",[58,61874,124],{"class":71},[58,61876,403],{"class":75},[58,61878,61879,61881,61883],{"class":60,"line":17426},[58,61880,52414],{"class":75},[58,61882,72],{"class":71},[58,61884,403],{"class":75},[58,61886,61887,61889,61891],{"class":60,"line":17439},[58,61888,51983],{"class":75},[58,61890,52451],{"class":71},[58,61892,403],{"class":75},[58,61894,61895],{"class":60,"line":17444},[58,61896,61897],{"class":64},"        \u002F\u002F 1. 获取元素\n",[58,61899,61900,61903,61905,61907,61909,61911,61913,61916],{"class":60,"line":17458},[58,61901,61902],{"class":92},"        const",[58,61904,61239],{"class":82},[58,61906,14208],{"class":92},[58,61908,55032],{"class":75},[58,61910,55035],{"class":379},[58,61912,793],{"class":75},[58,61914,61915],{"class":386},"'[type=search]'",[58,61917,799],{"class":75},[58,61919,61920,61922,61925,61927,61929,61931,61933,61936],{"class":60,"line":17463},[58,61921,61902],{"class":92},[58,61923,61924],{"class":82}," ul",[58,61926,14208],{"class":92},[58,61928,55032],{"class":75},[58,61930,55035],{"class":379},[58,61932,793],{"class":75},[58,61934,61935],{"class":386},"'.result-list'",[58,61937,799],{"class":75},[58,61939,61940],{"class":60,"line":17469},[58,61941,61942],{"class":64},"        \u002F\u002F console.log(input)\n",[58,61944,61945],{"class":60,"line":17474},[58,61946,61947],{"class":64},"        \u002F\u002F 2. 监听事件 获得焦点\n",[58,61949,61950,61953,61955,61957,61960,61962,61964],{"class":60,"line":17488},[58,61951,61952],{"class":75},"        input.",[58,61954,58447],{"class":379},[58,61956,793],{"class":75},[58,61958,61959],{"class":386},"'focus'",[58,61961,469],{"class":75},[58,61963,55085],{"class":92},[58,61965,55088],{"class":75},[58,61967,61968],{"class":60,"line":17493},[58,61969,61970],{"class":64},"            \u002F\u002F ul显示\n",[58,61972,61973,61976,61978],{"class":60,"line":17498},[58,61974,61975],{"class":75},"            ul.style.display ",[58,61977,383],{"class":92},[58,61979,61980],{"class":386}," 'block'\n",[58,61982,61983],{"class":60,"line":17512},[58,61984,61985],{"class":64},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[58,61987,61988,61991,61993,61995,61998],{"class":60,"line":17524},[58,61989,61990],{"class":75},"            input.classList.",[58,61992,5980],{"class":379},[58,61994,793],{"class":75},[58,61996,61997],{"class":386},"'search'",[58,61999,799],{"class":75},[58,62001,62002],{"class":60,"line":17529},[58,62003,62004],{"class":75},"        })\n",[58,62006,62007],{"class":60,"line":17542},[58,62008,62009],{"class":64},"        \u002F\u002F 3. 监听事件 失去焦点\n",[58,62011,62012,62014,62016,62018,62021,62023,62025],{"class":60,"line":17547},[58,62013,61952],{"class":75},[58,62015,58447],{"class":379},[58,62017,793],{"class":75},[58,62019,62020],{"class":386},"'blur'",[58,62022,469],{"class":75},[58,62024,55085],{"class":92},[58,62026,55088],{"class":75},[58,62028,62029,62031,62033],{"class":60,"line":17552},[58,62030,61975],{"class":75},[58,62032,383],{"class":92},[58,62034,62035],{"class":386}," 'none'\n",[58,62037,62038,62040,62042,62044,62046],{"class":60,"line":17557},[58,62039,61990],{"class":75},[58,62041,57640],{"class":379},[58,62043,793],{"class":75},[58,62045,61997],{"class":386},[58,62047,799],{"class":75},[58,62049,62050],{"class":60,"line":17570},[58,62051,62004],{"class":75},[58,62053,62054,62056,62058],{"class":60,"line":17575},[58,62055,52414],{"class":75},[58,62057,52451],{"class":71},[58,62059,403],{"class":75},[58,62061,62062,62064,62066],{"class":60,"line":33277},[58,62063,52423],{"class":75},[58,62065,52438],{"class":71},[58,62067,403],{"class":75},[58,62069,62070],{"class":60,"line":33283},[58,62071,3046],{"emptyLinePlaceholder":720},[58,62073,62074,62076,62078],{"class":60,"line":33289},[58,62075,52423],{"class":75},[58,62077,51279],{"class":71},[58,62079,403],{"class":75},[22641,62081,62083],{"id":62082},"_3253-键盘事件","3.2.5.3 键盘事件",[175,62085,62086],{},"评论字数统计案例",[175,62088,62089],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[175,62091,62092],{},"牢记focus伪类选择器",[51986,62094],{"charSet":62095},"UTF-8",[51986,62097],{"name":62098,"content":62099},"viewport","width=device-width, initial-scale=1.0",[52049,62101,62102],{},"Document",[702,62104,62105],{},"\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",[54457,62107],{"type":5833},[124,62109,62110,62113],{},[22,62111,62112],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[22,62114,62115],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[48,62117,62119],{"className":51277,"code":62118,"language":51279,"meta":53,"style":53},"\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",[55,62120,62121,62131,62145,62149,62157,62171,62191,62211,62224,62232,62239,62252,62266,62276,62286,62290,62294,62301,62313,62325,62337,62349,62378,62391,62395,62399,62408,62419,62431,62442,62453,62465,62476,62488,62504,62516,62520,62524,62535,62546,62556,62568,62572,62576,62584,62595,62605,62616,62628,62641,62653,62665,62669,62673,62682,62694,62705,62718,62729,62743,62747,62751,62758,62770,62782,62792,62796,62800,62809,62821,62831,62835,62839,62850,62860,62879,62892,62896,62900,62910,62920,62924,62928,62939,62950,62962,62974,62978,62982,62993,63004,63018,63022,63026,63037,63047,63059,63063,63071,63079,63083,63091,63106,63125,63165,63178,63186,63200,63220,63228,63243,63266,63284,63299,63319,63339,63359,63367,63375,63383,63391,63411,63431,63436,63453,63462,63466,63471,63487,63495,63499,63504,63521,63526,63551,63555,63559,63564,63569,63577,63585,63589],{"__ignoreMap":53},[58,62122,62123,62125,62127,62129],{"class":60,"line":61},[58,62124,51941],{"class":75},[58,62126,51944],{"class":71},[58,62128,51947],{"class":379},[58,62130,403],{"class":75},[58,62132,62133,62135,62137,62139,62141,62143],{"class":60,"line":68},[58,62134,373],{"class":75},[58,62136,51279],{"class":71},[58,62138,51958],{"class":379},[58,62140,383],{"class":75},[58,62142,51963],{"class":386},[58,62144,403],{"class":75},[58,62146,62147],{"class":60,"line":79},[58,62148,3046],{"emptyLinePlaceholder":720},[58,62150,62151,62153,62155],{"class":60,"line":105},[58,62152,373],{"class":75},[58,62154,51976],{"class":71},[58,62156,403],{"class":75},[58,62158,62159,62161,62163,62165,62167,62169],{"class":60,"line":627},[58,62160,52782],{"class":75},[58,62162,51986],{"class":71},[58,62164,51989],{"class":379},[58,62166,383],{"class":75},[58,62168,51994],{"class":386},[58,62170,403],{"class":75},[58,62172,62173,62175,62177,62179,62181,62183,62185,62187,62189],{"class":60,"line":509},[58,62174,52782],{"class":75},[58,62176,51986],{"class":71},[58,62178,52005],{"class":379},[58,62180,383],{"class":75},[58,62182,52010],{"class":386},[58,62184,52013],{"class":379},[58,62186,383],{"class":75},[58,62188,52018],{"class":386},[58,62190,403],{"class":75},[58,62192,62193,62195,62197,62199,62201,62203,62205,62207,62209],{"class":60,"line":559},[58,62194,52782],{"class":75},[58,62196,51986],{"class":71},[58,62198,15564],{"class":379},[58,62200,383],{"class":75},[58,62202,52033],{"class":386},[58,62204,52013],{"class":379},[58,62206,383],{"class":75},[58,62208,52040],{"class":386},[58,62210,403],{"class":75},[58,62212,62213,62215,62217,62220,62222],{"class":60,"line":654},[58,62214,52782],{"class":75},[58,62216,52049],{"class":71},[58,62218,62219],{"class":75},">评论回车发布\u003C\u002F",[58,62221,52049],{"class":71},[58,62223,403],{"class":75},[58,62225,62226,62228,62230],{"class":60,"line":671},[58,62227,52782],{"class":75},[58,62229,702],{"class":71},[58,62231,403],{"class":75},[58,62233,62234,62237],{"class":60,"line":677},[58,62235,62236],{"class":379},"    .wrapper",[58,62238,76],{"class":75},[58,62240,62241,62244,62246,62248,62250],{"class":60,"line":2260},[58,62242,62243],{"class":82},"      min-width",[58,62245,86],{"class":75},[58,62247,4633],{"class":82},[58,62249,93],{"class":92},[58,62251,102],{"class":75},[58,62253,62254,62257,62259,62262,62264],{"class":60,"line":694},[58,62255,62256],{"class":82},"      max-width",[58,62258,86],{"class":75},[58,62260,62261],{"class":82},"800",[58,62263,93],{"class":92},[58,62265,102],{"class":75},[58,62267,62268,62270,62272,62274],{"class":60,"line":2270},[58,62269,55643],{"class":82},[58,62271,86],{"class":75},[58,62273,52118],{"class":82},[58,62275,102],{"class":75},[58,62277,62278,62280,62282,62284],{"class":60,"line":2275},[58,62279,55654],{"class":82},[58,62281,86],{"class":75},[58,62283,52219],{"class":82},[58,62285,102],{"class":75},[58,62287,62288],{"class":60,"line":2289},[58,62289,2833],{"class":75},[58,62291,62292],{"class":60,"line":2294},[58,62293,3046],{"emptyLinePlaceholder":720},[58,62295,62296,62299],{"class":60,"line":2300},[58,62297,62298],{"class":379},"    .avatar",[58,62300,76],{"class":75},[58,62302,62303,62305,62307,62309,62311],{"class":60,"line":2321},[58,62304,55406],{"class":82},[58,62306,86],{"class":75},[58,62308,1393],{"class":82},[58,62310,93],{"class":92},[58,62312,102],{"class":75},[58,62314,62315,62317,62319,62321,62323],{"class":60,"line":2326},[58,62316,55420],{"class":82},[58,62318,86],{"class":75},[58,62320,1393],{"class":82},[58,62322,93],{"class":92},[58,62324,102],{"class":75},[58,62326,62327,62329,62331,62333,62335],{"class":60,"line":2340},[58,62328,55768],{"class":82},[58,62330,86],{"class":75},[58,62332,1442],{"class":82},[58,62334,1114],{"class":92},[58,62336,102],{"class":75},[58,62338,62339,62342,62344,62347],{"class":60,"line":2345},[58,62340,62341],{"class":82},"      overflow",[58,62343,86],{"class":75},[58,62345,62346],{"class":82},"hidden",[58,62348,102],{"class":75},[58,62350,62351,62354,62356,62359,62361,62364,62366,62369,62371,62373,62376],{"class":60,"line":2374},[58,62352,62353],{"class":82},"      background",[58,62355,86],{"class":75},[58,62357,62358],{"class":82},"url",[58,62360,793],{"class":75},[58,62362,62363],{"class":5862},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[58,62365,14358],{"class":75},[58,62367,62368],{"class":82},"no-repeat",[58,62370,17787],{"class":82},[58,62372,25622],{"class":75},[58,62374,62375],{"class":82},"cover",[58,62377,102],{"class":75},[58,62379,62380,62383,62385,62387,62389],{"class":60,"line":2379},[58,62381,62382],{"class":82},"      margin-right",[58,62384,86],{"class":75},[58,62386,1486],{"class":82},[58,62388,93],{"class":92},[58,62390,102],{"class":75},[58,62392,62393],{"class":60,"line":2396},[58,62394,2833],{"class":75},[58,62396,62397],{"class":60,"line":2401},[58,62398,3046],{"emptyLinePlaceholder":720},[58,62400,62401,62403,62406],{"class":60,"line":2406},[58,62402,62236],{"class":379},[58,62404,62405],{"class":71}," textarea",[58,62407,76],{"class":75},[58,62409,62410,62413,62415,62417],{"class":60,"line":2411},[58,62411,62412],{"class":82},"      outline",[58,62414,86],{"class":75},[58,62416,55373],{"class":82},[58,62418,102],{"class":75},[58,62420,62421,62424,62426,62429],{"class":60,"line":2425},[58,62422,62423],{"class":82},"      border-color",[58,62425,86],{"class":75},[58,62427,62428],{"class":82},"transparent",[58,62430,102],{"class":75},[58,62432,62433,62436,62438,62440],{"class":60,"line":2430},[58,62434,62435],{"class":82},"      resize",[58,62437,86],{"class":75},[58,62439,55373],{"class":82},[58,62441,102],{"class":75},[58,62443,62444,62446,62448,62451],{"class":60,"line":3223},[58,62445,62353],{"class":82},[58,62447,86],{"class":75},[58,62449,62450],{"class":82},"#f5f5f5",[58,62452,102],{"class":75},[58,62454,62455,62457,62459,62461,62463],{"class":60,"line":3237},[58,62456,55768],{"class":82},[58,62458,86],{"class":75},[58,62460,1079],{"class":82},[58,62462,93],{"class":92},[58,62464,102],{"class":75},[58,62466,62467,62470,62472,62474],{"class":60,"line":3245},[58,62468,62469],{"class":82},"      flex",[58,62471,86],{"class":75},[58,62473,89],{"class":82},[58,62475,102],{"class":75},[58,62477,62478,62480,62482,62484,62486],{"class":60,"line":3250},[58,62479,55331],{"class":82},[58,62481,86],{"class":75},[58,62483,1232],{"class":82},[58,62485,93],{"class":92},[58,62487,102],{"class":75},[58,62489,62490,62493,62495,62497,62500,62502],{"class":60,"line":3256},[58,62491,62492],{"class":82},"      transition",[58,62494,86],{"class":75},[58,62496,28765],{"class":82},[58,62498,62499],{"class":82}," 0.5",[58,62501,1481],{"class":92},[58,62503,102],{"class":75},[58,62505,62506,62508,62510,62512,62514],{"class":60,"line":3262},[58,62507,55420],{"class":82},[58,62509,86],{"class":75},[58,62511,1735],{"class":82},[58,62513,93],{"class":92},[58,62515,102],{"class":75},[58,62517,62518],{"class":60,"line":3267},[58,62519,2833],{"class":75},[58,62521,62522],{"class":60,"line":8594},[58,62523,3046],{"emptyLinePlaceholder":720},[58,62525,62526,62528,62530,62533],{"class":60,"line":8618},[58,62527,62236],{"class":379},[58,62529,62405],{"class":71},[58,62531,62532],{"class":379},":focus",[58,62534,76],{"class":75},[58,62536,62537,62539,62541,62544],{"class":60,"line":8623},[58,62538,62423],{"class":82},[58,62540,86],{"class":75},[58,62542,62543],{"class":82},"#e4e4e4",[58,62545,102],{"class":75},[58,62547,62548,62550,62552,62554],{"class":60,"line":8629},[58,62549,62353],{"class":82},[58,62551,86],{"class":75},[58,62553,61476],{"class":82},[58,62555,102],{"class":75},[58,62557,62558,62560,62562,62564,62566],{"class":60,"line":8656},[58,62559,55420],{"class":82},[58,62561,86],{"class":75},[58,62563,1442],{"class":82},[58,62565,93],{"class":92},[58,62567,102],{"class":75},[58,62569,62570],{"class":60,"line":8661},[58,62571,2833],{"class":75},[58,62573,62574],{"class":60,"line":8667},[58,62575,3046],{"emptyLinePlaceholder":720},[58,62577,62578,62580,62582],{"class":60,"line":8679},[58,62579,62236],{"class":379},[58,62581,58101],{"class":71},[58,62583,76],{"class":75},[58,62585,62586,62588,62590,62593],{"class":60,"line":8691},[58,62587,62353],{"class":82},[58,62589,86],{"class":75},[58,62591,62592],{"class":82},"#00aeec",[58,62594,102],{"class":75},[58,62596,62597,62599,62601,62603],{"class":60,"line":8703},[58,62598,58050],{"class":82},[58,62600,86],{"class":75},[58,62602,61476],{"class":82},[58,62604,102],{"class":75},[58,62606,62607,62610,62612,62614],{"class":60,"line":10361},[58,62608,62609],{"class":82},"      border",[58,62611,86],{"class":75},[58,62613,55373],{"class":82},[58,62615,102],{"class":75},[58,62617,62618,62620,62622,62624,62626],{"class":60,"line":10386},[58,62619,55768],{"class":82},[58,62621,86],{"class":75},[58,62623,1079],{"class":82},[58,62625,93],{"class":92},[58,62627,102],{"class":75},[58,62629,62630,62633,62635,62637,62639],{"class":60,"line":10409},[58,62631,62632],{"class":82},"      margin-left",[58,62634,86],{"class":75},[58,62636,1232],{"class":82},[58,62638,93],{"class":92},[58,62640,102],{"class":75},[58,62642,62643,62645,62647,62649,62651],{"class":60,"line":10433},[58,62644,55406],{"class":82},[58,62646,86],{"class":75},[58,62648,1142],{"class":82},[58,62650,93],{"class":92},[58,62652,102],{"class":75},[58,62654,62655,62658,62660,62663],{"class":60,"line":10438},[58,62656,62657],{"class":82},"      cursor",[58,62659,86],{"class":75},[58,62661,62662],{"class":82},"pointer",[58,62664,102],{"class":75},[58,62666,62667],{"class":60,"line":10443},[58,62668,2833],{"class":75},[58,62670,62671],{"class":60,"line":10448},[58,62672,3046],{"emptyLinePlaceholder":720},[58,62674,62675,62677,62680],{"class":60,"line":10457},[58,62676,62236],{"class":379},[58,62678,62679],{"class":379}," .total",[58,62681,76],{"class":75},[58,62683,62684,62686,62688,62690,62692],{"class":60,"line":10462},[58,62685,62382],{"class":82},[58,62687,86],{"class":75},[58,62689,1398],{"class":82},[58,62691,93],{"class":92},[58,62693,102],{"class":75},[58,62695,62696,62698,62700,62703],{"class":60,"line":10468},[58,62697,58050],{"class":82},[58,62699,86],{"class":75},[58,62701,62702],{"class":82},"#999",[58,62704,102],{"class":75},[58,62706,62707,62710,62712,62714,62716],{"class":60,"line":10489},[58,62708,62709],{"class":82},"      margin-top",[58,62711,86],{"class":75},[58,62713,1105],{"class":82},[58,62715,93],{"class":92},[58,62717,102],{"class":75},[58,62719,62720,62723,62725,62727],{"class":60,"line":10495},[58,62721,62722],{"class":82},"      opacity",[58,62724,86],{"class":75},[58,62726,979],{"class":82},[58,62728,102],{"class":75},[58,62730,62731,62733,62735,62737,62739,62741],{"class":60,"line":10509},[58,62732,62492],{"class":82},[58,62734,86],{"class":75},[58,62736,28765],{"class":82},[58,62738,62499],{"class":82},[58,62740,1481],{"class":92},[58,62742,102],{"class":75},[58,62744,62745],{"class":60,"line":10515},[58,62746,2833],{"class":75},[58,62748,62749],{"class":60,"line":10542},[58,62750,3046],{"emptyLinePlaceholder":720},[58,62752,62753,62756],{"class":60,"line":10551},[58,62754,62755],{"class":379},"    .list",[58,62757,76],{"class":75},[58,62759,62760,62762,62764,62766,62768],{"class":60,"line":10557},[58,62761,62243],{"class":82},[58,62763,86],{"class":75},[58,62765,4633],{"class":82},[58,62767,93],{"class":92},[58,62769,102],{"class":75},[58,62771,62772,62774,62776,62778,62780],{"class":60,"line":10565},[58,62773,62256],{"class":82},[58,62775,86],{"class":75},[58,62777,62261],{"class":82},[58,62779,93],{"class":92},[58,62781,102],{"class":75},[58,62783,62784,62786,62788,62790],{"class":60,"line":10570},[58,62785,55643],{"class":82},[58,62787,86],{"class":75},[58,62789,52118],{"class":82},[58,62791,102],{"class":75},[58,62793,62794],{"class":60,"line":17247},[58,62795,2833],{"class":75},[58,62797,62798],{"class":60,"line":17253},[58,62799,3046],{"emptyLinePlaceholder":720},[58,62801,62802,62804,62807],{"class":60,"line":17276},[58,62803,62755],{"class":379},[58,62805,62806],{"class":379}," .item",[58,62808,76],{"class":75},[58,62810,62811,62813,62815,62817,62819],{"class":60,"line":17282},[58,62812,55406],{"class":82},[58,62814,86],{"class":75},[58,62816,1097],{"class":82},[58,62818,1114],{"class":92},[58,62820,102],{"class":75},[58,62822,62823,62825,62827,62829],{"class":60,"line":17305},[58,62824,55643],{"class":82},[58,62826,86],{"class":75},[58,62828,52118],{"class":82},[58,62830,102],{"class":75},[58,62832,62833],{"class":60,"line":17319},[58,62834,2833],{"class":75},[58,62836,62837],{"class":60,"line":17339},[58,62838,3046],{"emptyLinePlaceholder":720},[58,62840,62841,62843,62845,62848],{"class":60,"line":17345},[58,62842,62755],{"class":379},[58,62844,62806],{"class":379},[58,62846,62847],{"class":379}," .info",[58,62849,76],{"class":75},[58,62851,62852,62854,62856,62858],{"class":60,"line":17356},[58,62853,62469],{"class":82},[58,62855,86],{"class":75},[58,62857,89],{"class":82},[58,62859,102],{"class":75},[58,62861,62862,62865,62867,62869,62871,62874,62877],{"class":60,"line":17379},[58,62863,62864],{"class":82},"      border-bottom",[58,62866,86],{"class":75},[58,62868,89],{"class":82},[58,62870,93],{"class":92},[58,62872,62873],{"class":82}," dashed",[58,62875,62876],{"class":82}," #e4e4e4",[58,62878,102],{"class":75},[58,62880,62881,62884,62886,62888,62890],{"class":60,"line":17401},[58,62882,62883],{"class":82},"      padding-bottom",[58,62885,86],{"class":75},[58,62887,1232],{"class":82},[58,62889,93],{"class":92},[58,62891,102],{"class":75},[58,62893,62894],{"class":60,"line":17406},[58,62895,2833],{"class":75},[58,62897,62898],{"class":60,"line":17412},[58,62899,3046],{"emptyLinePlaceholder":720},[58,62901,62902,62904,62906,62908],{"class":60,"line":17426},[58,62903,62755],{"class":379},[58,62905,62806],{"class":379},[58,62907,7471],{"class":71},[58,62909,76],{"class":75},[58,62911,62912,62914,62916,62918],{"class":60,"line":17439},[58,62913,55342],{"class":82},[58,62915,86],{"class":75},[58,62917,979],{"class":82},[58,62919,102],{"class":75},[58,62921,62922],{"class":60,"line":17444},[58,62923,2833],{"class":75},[58,62925,62926],{"class":60,"line":17458},[58,62927,3046],{"emptyLinePlaceholder":720},[58,62929,62930,62932,62934,62937],{"class":60,"line":17463},[58,62931,62755],{"class":379},[58,62933,62806],{"class":379},[58,62935,62936],{"class":379}," .name",[58,62938,76],{"class":75},[58,62940,62941,62943,62945,62948],{"class":60,"line":17469},[58,62942,58050],{"class":82},[58,62944,86],{"class":75},[58,62946,62947],{"class":82},"#FB7299",[58,62949,102],{"class":75},[58,62951,62952,62954,62956,62958,62960],{"class":60,"line":17474},[58,62953,55556],{"class":82},[58,62955,86],{"class":75},[58,62957,1335],{"class":82},[58,62959,93],{"class":92},[58,62961,102],{"class":75},[58,62963,62964,62967,62969,62972],{"class":60,"line":17488},[58,62965,62966],{"class":82},"      font-weight",[58,62968,86],{"class":75},[58,62970,62971],{"class":82},"bold",[58,62973,102],{"class":75},[58,62975,62976],{"class":60,"line":17493},[58,62977,2833],{"class":75},[58,62979,62980],{"class":60,"line":17498},[58,62981,3046],{"emptyLinePlaceholder":720},[58,62983,62984,62986,62988,62991],{"class":60,"line":17512},[58,62985,62755],{"class":379},[58,62987,62806],{"class":379},[58,62989,62990],{"class":379}," .text",[58,62992,76],{"class":75},[58,62994,62995,62997,62999,63002],{"class":60,"line":17524},[58,62996,58050],{"class":82},[58,62998,86],{"class":75},[58,63000,63001],{"class":82},"#333",[58,63003,102],{"class":75},[58,63005,63006,63008,63010,63012,63014,63016],{"class":60,"line":17529},[58,63007,55331],{"class":82},[58,63009,86],{"class":75},[58,63011,1232],{"class":82},[58,63013,93],{"class":92},[58,63015,4739],{"class":82},[58,63017,102],{"class":75},[58,63019,63020],{"class":60,"line":17542},[58,63021,2833],{"class":75},[58,63023,63024],{"class":60,"line":17547},[58,63025,3046],{"emptyLinePlaceholder":720},[58,63027,63028,63030,63032,63035],{"class":60,"line":17552},[58,63029,62755],{"class":379},[58,63031,62806],{"class":379},[58,63033,63034],{"class":379}," .time",[58,63036,76],{"class":75},[58,63038,63039,63041,63043,63045],{"class":60,"line":17557},[58,63040,58050],{"class":82},[58,63042,86],{"class":75},[58,63044,62702],{"class":82},[58,63046,102],{"class":75},[58,63048,63049,63051,63053,63055,63057],{"class":60,"line":17570},[58,63050,55556],{"class":82},[58,63052,86],{"class":75},[58,63054,1284],{"class":82},[58,63056,93],{"class":92},[58,63058,102],{"class":75},[58,63060,63061],{"class":60,"line":17575},[58,63062,2833],{"class":75},[58,63064,63065,63067,63069],{"class":60,"line":33277},[58,63066,53055],{"class":75},[58,63068,702],{"class":71},[58,63070,403],{"class":75},[58,63072,63073,63075,63077],{"class":60,"line":33283},[58,63074,52423],{"class":75},[58,63076,51976],{"class":71},[58,63078,403],{"class":75},[58,63080,63081],{"class":60,"line":33289},[58,63082,3046],{"emptyLinePlaceholder":720},[58,63084,63085,63087,63089],{"class":60,"line":33295},[58,63086,373],{"class":75},[58,63088,52438],{"class":71},[58,63090,403],{"class":75},[58,63092,63093,63095,63097,63099,63101,63104],{"class":60,"line":33301},[58,63094,52782],{"class":75},[58,63096,72],{"class":71},[58,63098,54124],{"class":379},[58,63100,383],{"class":75},[58,63102,63103],{"class":386},"\"wrapper\"",[58,63105,403],{"class":75},[58,63107,63108,63110,63112,63114,63116,63119,63121,63123],{"class":60,"line":33312},[58,63109,51983],{"class":75},[58,63111,1227],{"class":71},[58,63113,54124],{"class":379},[58,63115,383],{"class":75},[58,63117,63118],{"class":386},"\"avatar\"",[58,63120,55948],{"class":75},[58,63122,1227],{"class":71},[58,63124,403],{"class":75},[58,63126,63127,63129,63131,63133,63135,63138,63140,63142,63145,63147,63149,63151,63154,63156,63159,63161,63163],{"class":60,"line":33318},[58,63128,51983],{"class":75},[58,63130,54924],{"class":71},[58,63132,15603],{"class":379},[58,63134,383],{"class":75},[58,63136,63137],{"class":386},"\"tx\"",[58,63139,61653],{"class":379},[58,63141,383],{"class":75},[58,63143,63144],{"class":386},"\"发一条友善的评论\"",[58,63146,54947],{"class":379},[58,63148,383],{"class":75},[58,63150,4347],{"class":386},[58,63152,63153],{"class":379}," maxlength",[58,63155,383],{"class":75},[58,63157,63158],{"class":386},"\"200\"",[58,63160,55948],{"class":75},[58,63162,54924],{"class":71},[58,63164,403],{"class":75},[58,63166,63167,63169,63171,63174,63176],{"class":60,"line":33338},[58,63168,51983],{"class":75},[58,63170,54523],{"class":71},[58,63172,63173],{"class":75},">发布\u003C\u002F",[58,63175,54523],{"class":71},[58,63177,403],{"class":75},[58,63179,63180,63182,63184],{"class":60,"line":33344},[58,63181,53055],{"class":75},[58,63183,72],{"class":71},[58,63185,403],{"class":75},[58,63187,63188,63190,63192,63194,63196,63198],{"class":60,"line":33355},[58,63189,52782],{"class":75},[58,63191,72],{"class":71},[58,63193,54124],{"class":379},[58,63195,383],{"class":75},[58,63197,63103],{"class":386},[58,63199,403],{"class":75},[58,63201,63202,63204,63206,63208,63210,63213,63216,63218],{"class":60,"line":33361},[58,63203,51983],{"class":75},[58,63205,58],{"class":71},[58,63207,54124],{"class":379},[58,63209,383],{"class":75},[58,63211,63212],{"class":386},"\"total\"",[58,63214,63215],{"class":75},">0\u002F200字\u003C\u002F",[58,63217,58],{"class":71},[58,63219,403],{"class":75},[58,63221,63222,63224,63226],{"class":60,"line":33367},[58,63223,53055],{"class":75},[58,63225,72],{"class":71},[58,63227,403],{"class":75},[58,63229,63230,63232,63234,63236,63238,63241],{"class":60,"line":33373},[58,63231,52782],{"class":75},[58,63233,72],{"class":71},[58,63235,54124],{"class":379},[58,63237,383],{"class":75},[58,63239,63240],{"class":386},"\"list\"",[58,63242,403],{"class":75},[58,63244,63245,63247,63249,63251,63253,63256,63259,63261,63264],{"class":60,"line":33379},[58,63246,51983],{"class":75},[58,63248,72],{"class":71},[58,63250,54124],{"class":379},[58,63252,383],{"class":75},[58,63254,63255],{"class":386},"\"item\"",[58,63257,63258],{"class":379}," style",[58,63260,383],{"class":75},[58,63262,63263],{"class":386},"\"display: none;\"",[58,63265,403],{"class":75},[58,63267,63268,63270,63272,63274,63276,63278,63280,63282],{"class":60,"line":33385},[58,63269,55868],{"class":75},[58,63271,1227],{"class":71},[58,63273,54124],{"class":379},[58,63275,383],{"class":75},[58,63277,63118],{"class":386},[58,63279,55948],{"class":75},[58,63281,1227],{"class":71},[58,63283,403],{"class":75},[58,63285,63286,63288,63290,63292,63294,63297],{"class":60,"line":33391},[58,63287,55868],{"class":75},[58,63289,72],{"class":71},[58,63291,54124],{"class":379},[58,63293,383],{"class":75},[58,63295,63296],{"class":386},"\"info\"",[58,63298,403],{"class":75},[58,63300,63301,63303,63305,63307,63309,63312,63315,63317],{"class":60,"line":33397},[58,63302,55936],{"class":75},[58,63304,175],{"class":71},[58,63306,54124],{"class":379},[58,63308,383],{"class":75},[58,63310,63311],{"class":386},"\"name\"",[58,63313,63314],{"class":75},">清风徐来\u003C\u002F",[58,63316,175],{"class":71},[58,63318,403],{"class":75},[58,63320,63321,63323,63325,63327,63329,63332,63335,63337],{"class":60,"line":33417},[58,63322,55936],{"class":75},[58,63324,175],{"class":71},[58,63326,54124],{"class":379},[58,63328,383],{"class":75},[58,63330,63331],{"class":386},"\"text\"",[58,63333,63334],{"class":75},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[58,63336,175],{"class":71},[58,63338,403],{"class":75},[58,63340,63341,63343,63345,63347,63349,63352,63355,63357],{"class":60,"line":33423},[58,63342,55936],{"class":75},[58,63344,175],{"class":71},[58,63346,54124],{"class":379},[58,63348,383],{"class":75},[58,63350,63351],{"class":386},"\"time\"",[58,63353,63354],{"class":75},">2022-10-10 20:29:21\u003C\u002F",[58,63356,175],{"class":71},[58,63358,403],{"class":75},[58,63360,63361,63363,63365],{"class":60,"line":33439},[58,63362,56041],{"class":75},[58,63364,72],{"class":71},[58,63366,403],{"class":75},[58,63368,63369,63371,63373],{"class":60,"line":33445},[58,63370,52414],{"class":75},[58,63372,72],{"class":71},[58,63374,403],{"class":75},[58,63376,63377,63379,63381],{"class":60,"line":33459},[58,63378,53055],{"class":75},[58,63380,72],{"class":71},[58,63382,403],{"class":75},[58,63384,63385,63387,63389],{"class":60,"line":33465},[58,63386,52782],{"class":75},[58,63388,52451],{"class":71},[58,63390,403],{"class":75},[58,63392,63393,63395,63398,63400,63402,63404,63406,63409],{"class":60,"line":33480},[58,63394,11866],{"class":92},[58,63396,63397],{"class":82}," tx",[58,63399,14208],{"class":92},[58,63401,55032],{"class":75},[58,63403,55035],{"class":379},[58,63405,793],{"class":75},[58,63407,63408],{"class":386},"'#tx'",[58,63410,799],{"class":75},[58,63412,63413,63415,63418,63420,63422,63424,63426,63429],{"class":60,"line":33486},[58,63414,11866],{"class":92},[58,63416,63417],{"class":82}," total",[58,63419,14208],{"class":92},[58,63421,55032],{"class":75},[58,63423,55035],{"class":379},[58,63425,793],{"class":75},[58,63427,63428],{"class":386},"'.total'",[58,63430,799],{"class":75},[58,63432,63433],{"class":60,"line":33495},[58,63434,63435],{"class":64},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[58,63437,63438,63441,63443,63445,63447,63449,63451],{"class":60,"line":33501},[58,63439,63440],{"class":75},"    tx.",[58,63442,58447],{"class":379},[58,63444,793],{"class":75},[58,63446,61959],{"class":386},[58,63448,469],{"class":75},[58,63450,55085],{"class":92},[58,63452,55088],{"class":75},[58,63454,63455,63458,63460],{"class":60,"line":33510},[58,63456,63457],{"class":75},"      total.style.opacity ",[58,63459,383],{"class":92},[58,63461,56333],{"class":82},[58,63463,63464],{"class":60,"line":33516},[58,63465,34105],{"class":75},[58,63467,63468],{"class":60,"line":33522},[58,63469,63470],{"class":64},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[58,63472,63473,63475,63477,63479,63481,63483,63485],{"class":60,"line":33531},[58,63474,63440],{"class":75},[58,63476,58447],{"class":379},[58,63478,793],{"class":75},[58,63480,62020],{"class":386},[58,63482,469],{"class":75},[58,63484,55085],{"class":92},[58,63486,55088],{"class":75},[58,63488,63489,63491,63493],{"class":60,"line":33537},[58,63490,63457],{"class":75},[58,63492,383],{"class":92},[58,63494,47977],{"class":82},[58,63496,63497],{"class":60,"line":33548},[58,63498,34105],{"class":75},[58,63500,63501],{"class":60,"line":33554},[58,63502,63503],{"class":64},"    \u002F\u002F 3. 检测用户输入\n",[58,63505,63506,63508,63510,63512,63515,63517,63519],{"class":60,"line":33573},[58,63507,63440],{"class":75},[58,63509,58447],{"class":379},[58,63511,793],{"class":75},[58,63513,63514],{"class":386},"'input'",[58,63516,469],{"class":75},[58,63518,55085],{"class":92},[58,63520,55088],{"class":75},[58,63522,63523],{"class":60,"line":33579},[58,63524,63525],{"class":64},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[58,63527,63528,63531,63533,63536,63539,63541,63544,63546,63548],{"class":60,"line":33590},[58,63529,63530],{"class":75},"      total.innerHTML ",[58,63532,383],{"class":92},[58,63534,63535],{"class":386}," `${",[58,63537,63538],{"class":75},"tx",[58,63540,1344],{"class":386},[58,63542,63543],{"class":75},"value",[58,63545,1344],{"class":386},[58,63547,52606],{"class":82},[58,63549,63550],{"class":386},"}\u002F200字`\n",[58,63552,63553],{"class":60,"line":33596},[58,63554,34105],{"class":75},[58,63556,63557],{"class":60,"line":33616},[58,63558,3046],{"emptyLinePlaceholder":720},[58,63560,63561],{"class":60,"line":33632},[58,63562,63563],{"class":64},"    \u002F\u002F const str = 'andy'\n",[58,63565,63566],{"class":60,"line":33638},[58,63567,63568],{"class":64},"    \u002F\u002F console.log(str.length)\n",[58,63570,63571,63573,63575],{"class":60,"line":33652},[58,63572,53055],{"class":75},[58,63574,52451],{"class":71},[58,63576,403],{"class":75},[58,63578,63579,63581,63583],{"class":60,"line":33658},[58,63580,52423],{"class":75},[58,63582,52438],{"class":71},[58,63584,403],{"class":75},[58,63586,63587],{"class":60,"line":33664},[58,63588,3046],{"emptyLinePlaceholder":720},[58,63590,63591,63593,63595],{"class":60,"line":33675},[58,63592,52423],{"class":75},[58,63594,51279],{"class":71},[58,63596,403],{"class":75},[22641,63598,63600],{"id":63599},"_3254-change事件","3.2.5.4 change事件",[175,63602,63603],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[175,63605,63606],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[175,63608,63609],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[48,63611,63613],{"className":51277,"code":63612,"language":51279,"meta":53,"style":53},"\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",[55,63614,63615,63625,63639,63643,63651,63665,63685,63697,63705,63709,63717,63731,63739,63757,63775,63787,63791,63799,63807,63811],{"__ignoreMap":53},[58,63616,63617,63619,63621,63623],{"class":60,"line":61},[58,63618,51941],{"class":75},[58,63620,51944],{"class":71},[58,63622,51947],{"class":379},[58,63624,403],{"class":75},[58,63626,63627,63629,63631,63633,63635,63637],{"class":60,"line":68},[58,63628,373],{"class":75},[58,63630,51279],{"class":71},[58,63632,51958],{"class":379},[58,63634,383],{"class":75},[58,63636,51963],{"class":386},[58,63638,403],{"class":75},[58,63640,63641],{"class":60,"line":79},[58,63642,3046],{"emptyLinePlaceholder":720},[58,63644,63645,63647,63649],{"class":60,"line":105},[58,63646,373],{"class":75},[58,63648,51976],{"class":71},[58,63650,403],{"class":75},[58,63652,63653,63655,63657,63659,63661,63663],{"class":60,"line":627},[58,63654,52782],{"class":75},[58,63656,51986],{"class":71},[58,63658,51989],{"class":379},[58,63660,383],{"class":75},[58,63662,51994],{"class":386},[58,63664,403],{"class":75},[58,63666,63667,63669,63671,63673,63675,63677,63679,63681,63683],{"class":60,"line":509},[58,63668,52782],{"class":75},[58,63670,51986],{"class":71},[58,63672,15564],{"class":379},[58,63674,383],{"class":75},[58,63676,52033],{"class":386},[58,63678,52013],{"class":379},[58,63680,383],{"class":75},[58,63682,52040],{"class":386},[58,63684,403],{"class":75},[58,63686,63687,63689,63691,63693,63695],{"class":60,"line":559},[58,63688,52782],{"class":75},[58,63690,52049],{"class":71},[58,63692,52052],{"class":75},[58,63694,52049],{"class":71},[58,63696,403],{"class":75},[58,63698,63699,63701,63703],{"class":60,"line":654},[58,63700,52423],{"class":75},[58,63702,51976],{"class":71},[58,63704,403],{"class":75},[58,63706,63707],{"class":60,"line":671},[58,63708,3046],{"emptyLinePlaceholder":720},[58,63710,63711,63713,63715],{"class":60,"line":677},[58,63712,373],{"class":75},[58,63714,52438],{"class":71},[58,63716,403],{"class":75},[58,63718,63719,63721,63723,63725,63727,63729],{"class":60,"line":2260},[58,63720,52782],{"class":75},[58,63722,54457],{"class":71},[58,63724,54460],{"class":379},[58,63726,383],{"class":75},[58,63728,63331],{"class":386},[58,63730,403],{"class":75},[58,63732,63733,63735,63737],{"class":60,"line":694},[58,63734,52782],{"class":75},[58,63736,52451],{"class":71},[58,63738,403],{"class":75},[58,63740,63741,63743,63745,63747,63749,63751,63753,63755],{"class":60,"line":2270},[58,63742,11866],{"class":92},[58,63744,61239],{"class":82},[58,63746,14208],{"class":92},[58,63748,55032],{"class":75},[58,63750,55035],{"class":379},[58,63752,793],{"class":75},[58,63754,63514],{"class":386},[58,63756,799],{"class":75},[58,63758,63759,63762,63764,63766,63769,63771,63773],{"class":60,"line":2275},[58,63760,63761],{"class":75},"    input.",[58,63763,58447],{"class":379},[58,63765,793],{"class":75},[58,63767,63768],{"class":386},"'change'",[58,63770,469],{"class":75},[58,63772,55085],{"class":92},[58,63774,55088],{"class":75},[58,63776,63777,63779,63781,63783,63785],{"class":60,"line":2289},[58,63778,58878],{"class":75},[58,63780,58881],{"class":379},[58,63782,793],{"class":75},[58,63784,1379],{"class":82},[58,63786,799],{"class":75},[58,63788,63789],{"class":60,"line":2294},[58,63790,34105],{"class":75},[58,63792,63793,63795,63797],{"class":60,"line":2300},[58,63794,53055],{"class":75},[58,63796,52451],{"class":71},[58,63798,403],{"class":75},[58,63800,63801,63803,63805],{"class":60,"line":2321},[58,63802,52423],{"class":75},[58,63804,52438],{"class":71},[58,63806,403],{"class":75},[58,63808,63809],{"class":60,"line":2326},[58,63810,3046],{"emptyLinePlaceholder":720},[58,63812,63813,63815,63817],{"class":60,"line":2340},[58,63814,52423],{"class":75},[58,63816,51279],{"class":71},[58,63818,403],{"class":75},[175,63820,63821],{},"总结：内容发生改变才回去触发",[114,63823,63825],{"id":63824},"_326-事件对象","3.2.6 事件对象",[22641,63827,63829],{"id":63828},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[175,63831,63832],{},[119,63833],{"alt":53,"src":63834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[175,63836,63837],{},[119,63838],{"alt":53,"src":63839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[175,63841,63842],{},"点击一次，就输出了事件对象，它是个对象",[175,63844,63845],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[175,63847,63848],{},[119,63849],{"alt":53,"src":63850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22641,63852,63854],{"id":63853},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[175,63856,63857],{},[119,63858],{"alt":53,"src":63859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[175,63861,63862],{},"实现按特殊字符才是实现打印输出效果：",[48,63864,63866],{"className":53705,"code":63865,"language":53707,"meta":53,"style":53},"\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",[55,63867,63868,63876,63881,63895,63903,63908,63913,63918,63923,63928,63933,63938,63943,63948,63952,63956,63964],{"__ignoreMap":53},[58,63869,63870,63872,63874],{"class":60,"line":61},[58,63871,373],{"class":75},[58,63873,52438],{"class":71},[58,63875,403],{"class":75},[58,63877,63878],{"class":60,"line":68},[58,63879,63880],{"class":64},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[58,63882,63883,63885,63887,63889,63891,63893],{"class":60,"line":79},[58,63884,52782],{"class":75},[58,63886,54457],{"class":71},[58,63888,54460],{"class":379},[58,63890,383],{"class":75},[58,63892,63331],{"class":386},[58,63894,403],{"class":75},[58,63896,63897,63899,63901],{"class":60,"line":105},[58,63898,52782],{"class":75},[58,63900,52451],{"class":71},[58,63902,403],{"class":75},[58,63904,63905],{"class":60,"line":627},[58,63906,63907],{"class":75},"    \u002F\u002F const btn = document.querySelector('button')\n",[58,63909,63910],{"class":60,"line":509},[58,63911,63912],{"class":75},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[58,63914,63915],{"class":60,"line":559},[58,63916,63917],{"class":75},"    \u002F\u002F   console.log(e);\n",[58,63919,63920],{"class":60,"line":654},[58,63921,63922],{"class":75},"    \u002F\u002F })\n",[58,63924,63925],{"class":60,"line":671},[58,63926,63927],{"class":75},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[58,63929,63930],{"class":60,"line":677},[58,63931,63932],{"class":75},"    const input = document.querySelector('input')\n",[58,63934,63935],{"class":60,"line":2260},[58,63936,63937],{"class":75},"    input.addEventListener('keyup', function (e) {\n",[58,63939,63940],{"class":60,"line":694},[58,63941,63942],{"class":75},"      if (e.key === 'Enter') {\n",[58,63944,63945],{"class":60,"line":2270},[58,63946,63947],{"class":75},"        console.log('我按下了回车键')\n",[58,63949,63950],{"class":60,"line":2275},[58,63951,53036],{"class":75},[58,63953,63954],{"class":60,"line":2289},[58,63955,34105],{"class":75},[58,63957,63958,63960,63962],{"class":60,"line":2294},[58,63959,53055],{"class":75},[58,63961,52451],{"class":71},[58,63963,403],{"class":75},[58,63965,63966,63968,63970],{"class":60,"line":2300},[58,63967,52423],{"class":75},[58,63969,52438],{"class":71},[58,63971,403],{"class":75},[22641,63973,63975],{"id":63974},"_3263-trim方法","3.2.6.3 trim方法",[175,63977,63978],{},[119,63979],{"alt":53,"src":63980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[175,63982,63983],{},[119,63984],{"alt":53,"src":63985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[175,63987,63988],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[175,63990,63991],{},"str.trim()",[114,63993,63995],{"id":63994},"_327-环境对象","3.2.7 环境对象",[175,63997,63998],{},[119,63999],{"alt":53,"src":64000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[175,64002,64003],{},[119,64004],{"alt":53,"src":64005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[175,64007,64008],{},[119,64009],{"alt":53,"src":64010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[175,64012,64013],{},"实际函数调用是window.fn()",[175,64015,64016],{},"普通函数里面this指向的是window",[124,64018,64019,64022,64025],{},[22,64020,64021],{},"在普通函数下，this指向的是window",[22,64023,64024],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[22,64026,64027],{},"箭头函数没有this",[175,64029,64030],{},"粗略记法就是：谁调用，this就指向谁",[175,64032,64033],{},[119,64034],{"alt":53,"src":64035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[175,64037,64038],{},[119,64039],{"alt":53,"src":64040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[175,64042,64043],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[175,64045,64046],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[48,64048,64050],{"className":53705,"code":64049,"language":53707,"meta":53,"style":53},"\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",[55,64051,64052,64060,64072,64080,64085,64090,64095,64100,64104,64112],{"__ignoreMap":53},[58,64053,64054,64056,64058],{"class":60,"line":61},[58,64055,373],{"class":75},[58,64057,52438],{"class":71},[58,64059,403],{"class":75},[58,64061,64062,64064,64066,64068,64070],{"class":60,"line":68},[58,64063,52782],{"class":75},[58,64065,54523],{"class":71},[58,64067,54529],{"class":75},[58,64069,54523],{"class":71},[58,64071,403],{"class":75},[58,64073,64074,64076,64078],{"class":60,"line":79},[58,64075,52782],{"class":75},[58,64077,52451],{"class":71},[58,64079,403],{"class":75},[58,64081,64082],{"class":60,"line":105},[58,64083,64084],{"class":75},"    const button = document.querySelector('button')\n",[58,64086,64087],{"class":60,"line":627},[58,64088,64089],{"class":75},"    button.addEventListener('click', function () {\n",[58,64091,64092],{"class":60,"line":509},[58,64093,64094],{"class":75},"      \u002F\u002F console.log(this);\n",[58,64096,64097],{"class":60,"line":559},[58,64098,64099],{"class":75},"      this.style.color = 'pink'\n",[58,64101,64102],{"class":60,"line":654},[58,64103,34105],{"class":75},[58,64105,64106,64108,64110],{"class":60,"line":671},[58,64107,53055],{"class":75},[58,64109,52451],{"class":71},[58,64111,403],{"class":75},[58,64113,64114,64116,64118],{"class":60,"line":677},[58,64115,52423],{"class":75},[58,64117,52438],{"class":71},[58,64119,403],{"class":75},[114,64121,64123],{"id":64122},"_328-回调函数","3.2.8 回调函数",[175,64125,64126],{},[119,64127],{"alt":53,"src":64128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[175,64130,64131],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[175,64133,11977],{},[124,64135,64136,64139,64142],{},[22,64137,64138],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[22,64140,64141],{},"回调函数本质还是函数，只不过把它当成参数使用",[22,64143,64144],{},"使用匿名函数做为回调函数比较常见",[114,64146,64148],{"id":64147},"_329-tab栏切换","3.2.9 tab栏切换",[175,64150,64151],{},[119,64152],{"alt":53,"src":64153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[48,64155,64157],{"className":51277,"code":64156,"language":51279,"meta":53,"style":53},"\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",[55,64158,64159,64169,64183,64187,64195,64209,64229,64249,64262,64270,64276,64286,64296,64300,64304,64311,64324,64337,64349,64365,64369,64373,64380,64392,64404,64416,64426,64436,64440,64444,64453,64465,64476,64488,64492,64496,64504,64514,64524,64534,64538,64542,64552,64566,64578,64582,64586,64598,64609,64626,64636,64640,64644,64659,64670,64680,64684,64688,64695,64710,64714,64718,64726,64736,64740,64744,64753,64763,64767,64775,64783,64787,64795,64810,64825,64838,64846,64880,64907,64934,64961,64988,64996,65004,65019,65056,65091,65126,65161,65196,65204,65212,65220,65225,65230,65250,65255,65284,65289,65294,65312,65317,65322,65327,65349,65354,65370,65374,65379,65384,65405,65410,65439,65443,65448,65452,65460,65468,65472],{"__ignoreMap":53},[58,64160,64161,64163,64165,64167],{"class":60,"line":61},[58,64162,51941],{"class":75},[58,64164,51944],{"class":71},[58,64166,51947],{"class":379},[58,64168,403],{"class":75},[58,64170,64171,64173,64175,64177,64179,64181],{"class":60,"line":68},[58,64172,373],{"class":75},[58,64174,51279],{"class":71},[58,64176,51958],{"class":379},[58,64178,383],{"class":75},[58,64180,51963],{"class":386},[58,64182,403],{"class":75},[58,64184,64185],{"class":60,"line":79},[58,64186,3046],{"emptyLinePlaceholder":720},[58,64188,64189,64191,64193],{"class":60,"line":105},[58,64190,373],{"class":75},[58,64192,51976],{"class":71},[58,64194,403],{"class":75},[58,64196,64197,64199,64201,64203,64205,64207],{"class":60,"line":627},[58,64198,52782],{"class":75},[58,64200,51986],{"class":71},[58,64202,51989],{"class":379},[58,64204,383],{"class":75},[58,64206,51994],{"class":386},[58,64208,59761],{"class":75},[58,64210,64211,64213,64215,64217,64219,64221,64223,64225,64227],{"class":60,"line":509},[58,64212,52782],{"class":75},[58,64214,51986],{"class":71},[58,64216,52005],{"class":379},[58,64218,383],{"class":75},[58,64220,52010],{"class":386},[58,64222,52013],{"class":379},[58,64224,383],{"class":75},[58,64226,52018],{"class":386},[58,64228,59761],{"class":75},[58,64230,64231,64233,64235,64237,64239,64241,64243,64245,64247],{"class":60,"line":559},[58,64232,52782],{"class":75},[58,64234,51986],{"class":71},[58,64236,15564],{"class":379},[58,64238,383],{"class":75},[58,64240,52033],{"class":386},[58,64242,52013],{"class":379},[58,64244,383],{"class":75},[58,64246,52040],{"class":386},[58,64248,59761],{"class":75},[58,64250,64251,64253,64255,64258,64260],{"class":60,"line":654},[58,64252,52782],{"class":75},[58,64254,52049],{"class":71},[58,64256,64257],{"class":75},">tab栏切换\u003C\u002F",[58,64259,52049],{"class":71},[58,64261,403],{"class":75},[58,64263,64264,64266,64268],{"class":60,"line":671},[58,64265,52782],{"class":75},[58,64267,702],{"class":71},[58,64269,403],{"class":75},[58,64271,64272,64274],{"class":60,"line":677},[58,64273,7049],{"class":71},[58,64275,76],{"class":75},[58,64277,64278,64280,64282,64284],{"class":60,"line":2260},[58,64279,55342],{"class":82},[58,64281,86],{"class":75},[58,64283,979],{"class":82},[58,64285,102],{"class":75},[58,64287,64288,64290,64292,64294],{"class":60,"line":694},[58,64289,55331],{"class":82},[58,64291,86],{"class":75},[58,64293,979],{"class":82},[58,64295,102],{"class":75},[58,64297,64298],{"class":60,"line":2270},[58,64299,2833],{"class":75},[58,64301,64302],{"class":60,"line":2275},[58,64303,3046],{"emptyLinePlaceholder":720},[58,64305,64306,64309],{"class":60,"line":2289},[58,64307,64308],{"class":379},"    .tab",[58,64310,76],{"class":75},[58,64312,64313,64315,64317,64320,64322],{"class":60,"line":2294},[58,64314,55406],{"class":82},[58,64316,86],{"class":75},[58,64318,64319],{"class":82},"590",[58,64321,93],{"class":92},[58,64323,102],{"class":75},[58,64325,64326,64328,64330,64333,64335],{"class":60,"line":2300},[58,64327,55420],{"class":82},[58,64329,86],{"class":75},[58,64331,64332],{"class":82},"340",[58,64334,93],{"class":92},[58,64336,102],{"class":75},[58,64338,64339,64341,64343,64345,64347],{"class":60,"line":2321},[58,64340,55342],{"class":82},[58,64342,86],{"class":75},[58,64344,1486],{"class":82},[58,64346,93],{"class":92},[58,64348,102],{"class":75},[58,64350,64351,64353,64355,64357,64359,64361,64363],{"class":60,"line":2326},[58,64352,62609],{"class":82},[58,64354,86],{"class":75},[58,64356,89],{"class":82},[58,64358,93],{"class":92},[58,64360,96],{"class":82},[58,64362,62876],{"class":82},[58,64364,102],{"class":75},[58,64366,64367],{"class":60,"line":2340},[58,64368,2833],{"class":75},[58,64370,64371],{"class":60,"line":2345},[58,64372,3046],{"emptyLinePlaceholder":720},[58,64374,64375,64378],{"class":60,"line":2374},[58,64376,64377],{"class":379},"    .tab-nav",[58,64379,76],{"class":75},[58,64381,64382,64384,64386,64388,64390],{"class":60,"line":2379},[58,64383,55406],{"class":82},[58,64385,86],{"class":75},[58,64387,1097],{"class":82},[58,64389,1114],{"class":92},[58,64391,102],{"class":75},[58,64393,64394,64396,64398,64400,64402],{"class":60,"line":2396},[58,64395,55420],{"class":82},[58,64397,86],{"class":75},[58,64399,1692],{"class":82},[58,64401,93],{"class":92},[58,64403,102],{"class":75},[58,64405,64406,64408,64410,64412,64414],{"class":60,"line":2401},[58,64407,57993],{"class":82},[58,64409,86],{"class":75},[58,64411,1692],{"class":82},[58,64413,93],{"class":92},[58,64415,102],{"class":75},[58,64417,64418,64420,64422,64424],{"class":60,"line":2406},[58,64419,55643],{"class":82},[58,64421,86],{"class":75},[58,64423,52118],{"class":82},[58,64425,102],{"class":75},[58,64427,64428,64430,64432,64434],{"class":60,"line":2411},[58,64429,55654],{"class":82},[58,64431,86],{"class":75},[58,64433,52306],{"class":82},[58,64435,102],{"class":75},[58,64437,64438],{"class":60,"line":2425},[58,64439,2833],{"class":75},[58,64441,64442],{"class":60,"line":2430},[58,64443,3046],{"emptyLinePlaceholder":720},[58,64445,64446,64448,64451],{"class":60,"line":3223},[58,64447,64377],{"class":379},[58,64449,64450],{"class":71}," h3",[58,64452,76],{"class":75},[58,64454,64455,64457,64459,64461,64463],{"class":60,"line":3237},[58,64456,55556],{"class":82},[58,64458,86],{"class":75},[58,64460,1585],{"class":82},[58,64462,93],{"class":92},[58,64464,102],{"class":75},[58,64466,64467,64469,64471,64474],{"class":60,"line":3245},[58,64468,62966],{"class":82},[58,64470,86],{"class":75},[58,64472,64473],{"class":82},"normal",[58,64475,102],{"class":75},[58,64477,64478,64480,64482,64484,64486],{"class":60,"line":3250},[58,64479,62632],{"class":82},[58,64481,86],{"class":75},[58,64483,1486],{"class":82},[58,64485,93],{"class":92},[58,64487,102],{"class":75},[58,64489,64490],{"class":60,"line":3256},[58,64491,2833],{"class":75},[58,64493,64494],{"class":60,"line":3262},[58,64495,3046],{"emptyLinePlaceholder":720},[58,64497,64498,64500,64502],{"class":60,"line":3267},[58,64499,64377],{"class":379},[58,64501,61924],{"class":71},[58,64503,76],{"class":75},[58,64505,64506,64508,64510,64512],{"class":60,"line":8594},[58,64507,55368],{"class":82},[58,64509,86],{"class":75},[58,64511,55373],{"class":82},[58,64513,102],{"class":75},[58,64515,64516,64518,64520,64522],{"class":60,"line":8618},[58,64517,55643],{"class":82},[58,64519,86],{"class":75},[58,64521,52118],{"class":82},[58,64523,102],{"class":75},[58,64525,64526,64528,64530,64532],{"class":60,"line":8623},[58,64527,55654],{"class":82},[58,64529,86],{"class":75},[58,64531,52219],{"class":82},[58,64533,102],{"class":75},[58,64535,64536],{"class":60,"line":8629},[58,64537,2833],{"class":75},[58,64539,64540],{"class":60,"line":8656},[58,64541,3046],{"emptyLinePlaceholder":720},[58,64543,64544,64546,64548,64550],{"class":60,"line":8661},[58,64545,64377],{"class":379},[58,64547,61924],{"class":71},[58,64549,55709],{"class":71},[58,64551,76],{"class":75},[58,64553,64554,64556,64558,64560,64562,64564],{"class":60,"line":8667},[58,64555,55342],{"class":82},[58,64557,86],{"class":75},[58,64559,979],{"class":82},[58,64561,9596],{"class":82},[58,64563,93],{"class":92},[58,64565,102],{"class":75},[58,64567,64568,64570,64572,64574,64576],{"class":60,"line":8679},[58,64569,55556],{"class":82},[58,64571,86],{"class":75},[58,64573,1335],{"class":82},[58,64575,93],{"class":92},[58,64577,102],{"class":75},[58,64579,64580],{"class":60,"line":8691},[58,64581,2833],{"class":75},[58,64583,64584],{"class":60,"line":8703},[58,64585,3046],{"emptyLinePlaceholder":720},[58,64587,64588,64590,64592,64594,64596],{"class":60,"line":10361},[58,64589,64377],{"class":379},[58,64591,61924],{"class":71},[58,64593,55709],{"class":71},[58,64595,2048],{"class":71},[58,64597,76],{"class":75},[58,64599,64600,64603,64605,64607],{"class":60,"line":10386},[58,64601,64602],{"class":82},"      text-decoration",[58,64604,86],{"class":75},[58,64606,55373],{"class":82},[58,64608,102],{"class":75},[58,64610,64611,64613,64615,64617,64619,64621,64624],{"class":60,"line":10409},[58,64612,62864],{"class":82},[58,64614,86],{"class":75},[58,64616,867],{"class":82},[58,64618,93],{"class":92},[58,64620,96],{"class":82},[58,64622,64623],{"class":82}," transparent",[58,64625,102],{"class":75},[58,64627,64628,64630,64632,64634],{"class":60,"line":10433},[58,64629,58050],{"class":82},[58,64631,86],{"class":75},[58,64633,63001],{"class":82},[58,64635,102],{"class":75},[58,64637,64638],{"class":60,"line":10438},[58,64639,2833],{"class":75},[58,64641,64642],{"class":60,"line":10443},[58,64643,3046],{"emptyLinePlaceholder":720},[58,64645,64646,64648,64650,64652,64654,64657],{"class":60,"line":10448},[58,64647,64377],{"class":379},[58,64649,61924],{"class":71},[58,64651,55709],{"class":71},[58,64653,2048],{"class":71},[58,64655,64656],{"class":379},".active",[58,64658,76],{"class":75},[58,64660,64661,64663,64665,64668],{"class":60,"line":10457},[58,64662,62423],{"class":82},[58,64664,86],{"class":75},[58,64666,64667],{"class":82},"#e1251b",[58,64669,102],{"class":75},[58,64671,64672,64674,64676,64678],{"class":60,"line":10462},[58,64673,58050],{"class":82},[58,64675,86],{"class":75},[58,64677,64667],{"class":82},[58,64679,102],{"class":75},[58,64681,64682],{"class":60,"line":10468},[58,64683,2833],{"class":75},[58,64685,64686],{"class":60,"line":10489},[58,64687,3046],{"emptyLinePlaceholder":720},[58,64689,64690,64693],{"class":60,"line":10495},[58,64691,64692],{"class":379},"    .tab-content",[58,64694,76],{"class":75},[58,64696,64697,64699,64701,64703,64706,64708],{"class":60,"line":10509},[58,64698,55331],{"class":82},[58,64700,86],{"class":75},[58,64702,979],{"class":82},[58,64704,64705],{"class":82}," 16",[58,64707,93],{"class":92},[58,64709,102],{"class":75},[58,64711,64712],{"class":60,"line":10515},[58,64713,2833],{"class":75},[58,64715,64716],{"class":60,"line":10542},[58,64717,3046],{"emptyLinePlaceholder":720},[58,64719,64720,64722,64724],{"class":60,"line":10551},[58,64721,64692],{"class":379},[58,64723,62806],{"class":379},[58,64725,76],{"class":75},[58,64727,64728,64730,64732,64734],{"class":60,"line":10557},[58,64729,55643],{"class":82},[58,64731,86],{"class":75},[58,64733,55373],{"class":82},[58,64735,102],{"class":75},[58,64737,64738],{"class":60,"line":10565},[58,64739,2833],{"class":75},[58,64741,64742],{"class":60,"line":10570},[58,64743,3046],{"emptyLinePlaceholder":720},[58,64745,64746,64748,64751],{"class":60,"line":17247},[58,64747,64692],{"class":379},[58,64749,64750],{"class":379}," .item.active",[58,64752,76],{"class":75},[58,64754,64755,64757,64759,64761],{"class":60,"line":17253},[58,64756,55643],{"class":82},[58,64758,86],{"class":75},[58,64760,500],{"class":82},[58,64762,102],{"class":75},[58,64764,64765],{"class":60,"line":17276},[58,64766,2833],{"class":75},[58,64768,64769,64771,64773],{"class":60,"line":17282},[58,64770,53055],{"class":75},[58,64772,702],{"class":71},[58,64774,403],{"class":75},[58,64776,64777,64779,64781],{"class":60,"line":17305},[58,64778,52423],{"class":75},[58,64780,51976],{"class":71},[58,64782,403],{"class":75},[58,64784,64785],{"class":60,"line":17319},[58,64786,3046],{"emptyLinePlaceholder":720},[58,64788,64789,64791,64793],{"class":60,"line":17339},[58,64790,373],{"class":75},[58,64792,52438],{"class":71},[58,64794,403],{"class":75},[58,64796,64797,64799,64801,64803,64805,64808],{"class":60,"line":17345},[58,64798,52782],{"class":75},[58,64800,72],{"class":71},[58,64802,54124],{"class":379},[58,64804,383],{"class":75},[58,64806,64807],{"class":386},"\"tab\"",[58,64809,403],{"class":75},[58,64811,64812,64814,64816,64818,64820,64823],{"class":60,"line":17356},[58,64813,51983],{"class":75},[58,64815,72],{"class":71},[58,64817,54124],{"class":379},[58,64819,383],{"class":75},[58,64821,64822],{"class":386},"\"tab-nav\"",[58,64824,403],{"class":75},[58,64826,64827,64829,64831,64834,64836],{"class":60,"line":17379},[58,64828,55868],{"class":75},[58,64830,114],{"class":71},[58,64832,64833],{"class":75},">每日特价\u003C\u002F",[58,64835,114],{"class":71},[58,64837,403],{"class":75},[58,64839,64840,64842,64844],{"class":60,"line":17401},[58,64841,55868],{"class":75},[58,64843,124],{"class":71},[58,64845,403],{"class":75},[58,64847,64848,64850,64852,64854,64856,64858,64860,64862,64864,64866,64869,64872,64874,64876,64878],{"class":60,"line":17406},[58,64849,55936],{"class":75},[58,64851,22],{"class":71},[58,64853,61685],{"class":75},[58,64855,376],{"class":71},[58,64857,54124],{"class":379},[58,64859,383],{"class":75},[58,64861,60340],{"class":386},[58,64863,380],{"class":379},[58,64865,383],{"class":75},[58,64867,64868],{"class":386},"\"javascript:;\"",[58,64870,64871],{"class":75},">精选\u003C\u002F",[58,64873,376],{"class":71},[58,64875,55948],{"class":75},[58,64877,22],{"class":71},[58,64879,403],{"class":75},[58,64881,64882,64884,64886,64888,64890,64892,64894,64896,64899,64901,64903,64905],{"class":60,"line":17412},[58,64883,55936],{"class":75},[58,64885,22],{"class":71},[58,64887,61685],{"class":75},[58,64889,376],{"class":71},[58,64891,380],{"class":379},[58,64893,383],{"class":75},[58,64895,64868],{"class":386},[58,64897,64898],{"class":75},">美食\u003C\u002F",[58,64900,376],{"class":71},[58,64902,55948],{"class":75},[58,64904,22],{"class":71},[58,64906,403],{"class":75},[58,64908,64909,64911,64913,64915,64917,64919,64921,64923,64926,64928,64930,64932],{"class":60,"line":17426},[58,64910,55936],{"class":75},[58,64912,22],{"class":71},[58,64914,61685],{"class":75},[58,64916,376],{"class":71},[58,64918,380],{"class":379},[58,64920,383],{"class":75},[58,64922,64868],{"class":386},[58,64924,64925],{"class":75},">百货\u003C\u002F",[58,64927,376],{"class":71},[58,64929,55948],{"class":75},[58,64931,22],{"class":71},[58,64933,403],{"class":75},[58,64935,64936,64938,64940,64942,64944,64946,64948,64950,64953,64955,64957,64959],{"class":60,"line":17439},[58,64937,55936],{"class":75},[58,64939,22],{"class":71},[58,64941,61685],{"class":75},[58,64943,376],{"class":71},[58,64945,380],{"class":379},[58,64947,383],{"class":75},[58,64949,64868],{"class":386},[58,64951,64952],{"class":75},">个护\u003C\u002F",[58,64954,376],{"class":71},[58,64956,55948],{"class":75},[58,64958,22],{"class":71},[58,64960,403],{"class":75},[58,64962,64963,64965,64967,64969,64971,64973,64975,64977,64980,64982,64984,64986],{"class":60,"line":17444},[58,64964,55936],{"class":75},[58,64966,22],{"class":71},[58,64968,61685],{"class":75},[58,64970,376],{"class":71},[58,64972,380],{"class":379},[58,64974,383],{"class":75},[58,64976,64868],{"class":386},[58,64978,64979],{"class":75},">预告\u003C\u002F",[58,64981,376],{"class":71},[58,64983,55948],{"class":75},[58,64985,22],{"class":71},[58,64987,403],{"class":75},[58,64989,64990,64992,64994],{"class":60,"line":17458},[58,64991,56041],{"class":75},[58,64993,124],{"class":71},[58,64995,403],{"class":75},[58,64997,64998,65000,65002],{"class":60,"line":17463},[58,64999,52414],{"class":75},[58,65001,72],{"class":71},[58,65003,403],{"class":75},[58,65005,65006,65008,65010,65012,65014,65017],{"class":60,"line":17469},[58,65007,51983],{"class":75},[58,65009,72],{"class":71},[58,65011,54124],{"class":379},[58,65013,383],{"class":75},[58,65015,65016],{"class":386},"\"tab-content\"",[58,65018,403],{"class":75},[58,65020,65021,65023,65025,65027,65029,65032,65034,65036,65038,65040,65043,65045,65047,65049,65052,65054],{"class":60,"line":17474},[58,65022,55868],{"class":75},[58,65024,72],{"class":71},[58,65026,54124],{"class":379},[58,65028,383],{"class":75},[58,65030,65031],{"class":386},"\"item active\"",[58,65033,61685],{"class":75},[58,65035,119],{"class":71},[58,65037,55873],{"class":379},[58,65039,383],{"class":75},[58,65041,65042],{"class":386},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[58,65044,55881],{"class":379},[58,65046,383],{"class":75},[58,65048,8298],{"class":386},[58,65050,65051],{"class":75}," \u002F>\u003C\u002F",[58,65053,72],{"class":71},[58,65055,403],{"class":75},[58,65057,65058,65060,65062,65064,65066,65068,65070,65072,65074,65076,65079,65081,65083,65085,65087,65089],{"class":60,"line":17488},[58,65059,55868],{"class":75},[58,65061,72],{"class":71},[58,65063,54124],{"class":379},[58,65065,383],{"class":75},[58,65067,63255],{"class":386},[58,65069,61685],{"class":75},[58,65071,119],{"class":71},[58,65073,55873],{"class":379},[58,65075,383],{"class":75},[58,65077,65078],{"class":386},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[58,65080,55881],{"class":379},[58,65082,383],{"class":75},[58,65084,8298],{"class":386},[58,65086,65051],{"class":75},[58,65088,72],{"class":71},[58,65090,403],{"class":75},[58,65092,65093,65095,65097,65099,65101,65103,65105,65107,65109,65111,65114,65116,65118,65120,65122,65124],{"class":60,"line":17493},[58,65094,55868],{"class":75},[58,65096,72],{"class":71},[58,65098,54124],{"class":379},[58,65100,383],{"class":75},[58,65102,63255],{"class":386},[58,65104,61685],{"class":75},[58,65106,119],{"class":71},[58,65108,55873],{"class":379},[58,65110,383],{"class":75},[58,65112,65113],{"class":386},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[58,65115,55881],{"class":379},[58,65117,383],{"class":75},[58,65119,8298],{"class":386},[58,65121,65051],{"class":75},[58,65123,72],{"class":71},[58,65125,403],{"class":75},[58,65127,65128,65130,65132,65134,65136,65138,65140,65142,65144,65146,65149,65151,65153,65155,65157,65159],{"class":60,"line":17498},[58,65129,55868],{"class":75},[58,65131,72],{"class":71},[58,65133,54124],{"class":379},[58,65135,383],{"class":75},[58,65137,63255],{"class":386},[58,65139,61685],{"class":75},[58,65141,119],{"class":71},[58,65143,55873],{"class":379},[58,65145,383],{"class":75},[58,65147,65148],{"class":386},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[58,65150,55881],{"class":379},[58,65152,383],{"class":75},[58,65154,8298],{"class":386},[58,65156,65051],{"class":75},[58,65158,72],{"class":71},[58,65160,403],{"class":75},[58,65162,65163,65165,65167,65169,65171,65173,65175,65177,65179,65181,65184,65186,65188,65190,65192,65194],{"class":60,"line":17512},[58,65164,55868],{"class":75},[58,65166,72],{"class":71},[58,65168,54124],{"class":379},[58,65170,383],{"class":75},[58,65172,63255],{"class":386},[58,65174,61685],{"class":75},[58,65176,119],{"class":71},[58,65178,55873],{"class":379},[58,65180,383],{"class":75},[58,65182,65183],{"class":386},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[58,65185,55881],{"class":379},[58,65187,383],{"class":75},[58,65189,8298],{"class":386},[58,65191,65051],{"class":75},[58,65193,72],{"class":71},[58,65195,403],{"class":75},[58,65197,65198,65200,65202],{"class":60,"line":17524},[58,65199,52414],{"class":75},[58,65201,72],{"class":71},[58,65203,403],{"class":75},[58,65205,65206,65208,65210],{"class":60,"line":17529},[58,65207,53055],{"class":75},[58,65209,72],{"class":71},[58,65211,403],{"class":75},[58,65213,65214,65216,65218],{"class":60,"line":17542},[58,65215,52782],{"class":75},[58,65217,52451],{"class":71},[58,65219,403],{"class":75},[58,65221,65222],{"class":60,"line":17547},[58,65223,65224],{"class":64},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[58,65226,65227],{"class":60,"line":17552},[58,65228,65229],{"class":64},"    \u002F\u002F 1.1 获取 a 元素 \n",[58,65231,65232,65234,65237,65239,65241,65243,65245,65248],{"class":60,"line":17557},[58,65233,11866],{"class":92},[58,65235,65236],{"class":82}," as",[58,65238,14208],{"class":92},[58,65240,55032],{"class":75},[58,65242,56315],{"class":379},[58,65244,793],{"class":75},[58,65246,65247],{"class":386},"'.tab-nav a'",[58,65249,799],{"class":75},[58,65251,65252],{"class":60,"line":17570},[58,65253,65254],{"class":64},"    \u002F\u002F console.log(as) \n",[58,65256,65257,65259,65261,65263,65265,65267,65269,65271,65273,65276,65278,65280,65282],{"class":60,"line":17575},[58,65258,3847],{"class":92},[58,65260,2305],{"class":75},[58,65262,52485],{"class":92},[58,65264,10083],{"class":75},[58,65266,383],{"class":92},[58,65268,4739],{"class":82},[58,65270,10090],{"class":75},[58,65272,373],{"class":92},[58,65274,65275],{"class":75}," as.",[58,65277,52606],{"class":82},[58,65279,3860],{"class":75},[58,65281,2938],{"class":92},[58,65283,13086],{"class":75},[58,65285,65286],{"class":60,"line":33277},[58,65287,65288],{"class":64},"      \u002F\u002F console.log(as[i])\n",[58,65290,65291],{"class":60,"line":33283},[58,65292,65293],{"class":64},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[58,65295,65296,65299,65301,65303,65306,65308,65310],{"class":60,"line":33289},[58,65297,65298],{"class":75},"      as[i].",[58,65300,58447],{"class":379},[58,65302,793],{"class":75},[58,65304,65305],{"class":386},"'mouseenter'",[58,65307,469],{"class":75},[58,65309,55085],{"class":92},[58,65311,55088],{"class":75},[58,65313,65314],{"class":60,"line":33295},[58,65315,65316],{"class":64},"        \u002F\u002F console.log('鼠标经过')\n",[58,65318,65319],{"class":60,"line":33301},[58,65320,65321],{"class":64},"        \u002F\u002F 排他思想  \n",[58,65323,65324],{"class":60,"line":33312},[58,65325,65326],{"class":64},"        \u002F\u002F 干掉别人 移除类active\n",[58,65328,65329,65331,65333,65335,65338,65340,65342,65344,65347],{"class":60,"line":33318},[58,65330,52563],{"class":75},[58,65332,55035],{"class":379},[58,65334,793],{"class":75},[58,65336,65337],{"class":386},"'.tab-nav .active'",[58,65339,57637],{"class":75},[58,65341,57640],{"class":379},[58,65343,793],{"class":75},[58,65345,65346],{"class":386},"'active'",[58,65348,799],{"class":75},[58,65350,65351],{"class":60,"line":33338},[58,65352,65353],{"class":64},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[58,65355,65356,65359,65362,65364,65366,65368],{"class":60,"line":33344},[58,65357,65358],{"class":82},"        this",[58,65360,65361],{"class":75},".classList.",[58,65363,5980],{"class":379},[58,65365,793],{"class":75},[58,65367,65346],{"class":386},[58,65369,799],{"class":75},[58,65371,65372],{"class":60,"line":33355},[58,65373,3046],{"emptyLinePlaceholder":720},[58,65375,65376],{"class":60,"line":33361},[58,65377,65378],{"class":64},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[58,65380,65381],{"class":60,"line":33367},[58,65382,65383],{"class":64},"        \u002F\u002F 干掉别人\n",[58,65385,65386,65388,65390,65392,65395,65397,65399,65401,65403],{"class":60,"line":33373},[58,65387,52563],{"class":75},[58,65389,55035],{"class":379},[58,65391,793],{"class":75},[58,65393,65394],{"class":386},"'.tab-content .active'",[58,65396,57637],{"class":75},[58,65398,57640],{"class":379},[58,65400,793],{"class":75},[58,65402,65346],{"class":386},[58,65404,799],{"class":75},[58,65406,65407],{"class":60,"line":33379},[58,65408,65409],{"class":64},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[58,65411,65412,65414,65416,65418,65421,65423,65425,65427,65429,65431,65433,65435,65437],{"class":60,"line":33385},[58,65413,52563],{"class":75},[58,65415,55035],{"class":379},[58,65417,793],{"class":75},[58,65419,65420],{"class":386},"`.tab-content .item:nth-child(${",[58,65422,1227],{"class":75},[58,65424,46210],{"class":92},[58,65426,25762],{"class":82},[58,65428,57666],{"class":386},[58,65430,57637],{"class":75},[58,65432,5980],{"class":379},[58,65434,793],{"class":75},[58,65436,65346],{"class":386},[58,65438,799],{"class":75},[58,65440,65441],{"class":60,"line":33391},[58,65442,3046],{"emptyLinePlaceholder":720},[58,65444,65445],{"class":60,"line":33397},[58,65446,65447],{"class":75},"      })\n",[58,65449,65450],{"class":60,"line":33417},[58,65451,2833],{"class":75},[58,65453,65454,65456,65458],{"class":60,"line":33423},[58,65455,53055],{"class":75},[58,65457,52451],{"class":71},[58,65459,403],{"class":75},[58,65461,65462,65464,65466],{"class":60,"line":33439},[58,65463,52423],{"class":75},[58,65465,52438],{"class":71},[58,65467,403],{"class":75},[58,65469,65470],{"class":60,"line":33445},[58,65471,3046],{"emptyLinePlaceholder":720},[58,65473,65474,65476,65478],{"class":60,"line":33459},[58,65475,52423],{"class":75},[58,65477,51279],{"class":71},[58,65479,403],{"class":75},[175,65481,65482],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[175,65484,65485],{},"在监听事件中，this指向的就是他的调用者",[175,65487,65488],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[175,65490,54356],{},[175,65492,65493],{},"(function () {",[175,65495,65496],{},"const list = document.querySelector('.xtx-elevator-list')",[175,65498,65499],{},"list.addEventListener('click', function (e) {",[175,65501,65502],{},"if (e.target.tagName === 'A') {",[175,65504,65505],{},"\u002F\u002F 排他思想",[175,65507,65508],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[175,65510,65511],{},"const old = document.querySelector('.xtx-elevator-list .active')",[175,65513,65514],{},"\u002F\u002F console.log(old);",[175,65516,65517],{},"\u002F\u002F 判断",[175,65519,65520],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[175,65522,65523],{},"if (old) old.classList.remove('active')",[175,65525,65526],{},"e.target.classList.add('active')",[175,65528,1730],{},[175,65530,53102],{},[175,65532,65533],{},"})();",[114,65535,65537],{"id":65536},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[48,65539,65541],{"className":51277,"code":65540,"language":51279,"meta":53,"style":53},"\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",[55,65542,65543,65553,65557,65565,65569,65583,65597,65609,65617,65623,65633,65643,65647,65651,65658,65670,65681,65698,65711,65725,65735,65739,65743,65750,65761,65779,65789,65801,65805,65809,65816,65833,65844,65856,65860,65864,65871,65883,65887,65895,65903,65907,65915,65923,65931,65946,65990,65998,66011,66024,66037,66045,66053,66061,66089,66097,66109,66122,66135,66143,66151,66159,66185,66193,66206,66218,66231,66239,66247,66255,66281,66289,66302,66314,66327,66335,66343,66351,66356,66376,66381,66401,66406,66423,66428,66436,66441,66470,66483,66487,66491,66496,66500,66528,66533,66550,66555,66560,66565,66570,66596,66600,66604,66612,66620,66624],{"__ignoreMap":53},[58,65544,65545,65547,65549,65551],{"class":60,"line":61},[58,65546,51941],{"class":75},[58,65548,51944],{"class":71},[58,65550,51947],{"class":379},[58,65552,403],{"class":75},[58,65554,65555],{"class":60,"line":68},[58,65556,3046],{"emptyLinePlaceholder":720},[58,65558,65559,65561,65563],{"class":60,"line":79},[58,65560,373],{"class":75},[58,65562,51279],{"class":71},[58,65564,403],{"class":75},[58,65566,65567],{"class":60,"line":105},[58,65568,3046],{"emptyLinePlaceholder":720},[58,65570,65571,65573,65575,65577,65579,65581],{"class":60,"line":627},[58,65572,373],{"class":75},[58,65574,51976],{"class":71},[58,65576,51958],{"class":379},[58,65578,383],{"class":75},[58,65580,51963],{"class":386},[58,65582,403],{"class":75},[58,65584,65585,65587,65589,65591,65593,65595],{"class":60,"line":509},[58,65586,52782],{"class":75},[58,65588,51986],{"class":71},[58,65590,51989],{"class":379},[58,65592,383],{"class":75},[58,65594,51994],{"class":386},[58,65596,403],{"class":75},[58,65598,65599,65601,65603,65605,65607],{"class":60,"line":559},[58,65600,52782],{"class":75},[58,65602,52049],{"class":71},[58,65604,55948],{"class":75},[58,65606,52049],{"class":71},[58,65608,403],{"class":75},[58,65610,65611,65613,65615],{"class":60,"line":654},[58,65612,52782],{"class":75},[58,65614,702],{"class":71},[58,65616,403],{"class":75},[58,65618,65619,65621],{"class":60,"line":671},[58,65620,7049],{"class":71},[58,65622,76],{"class":75},[58,65624,65625,65627,65629,65631],{"class":60,"line":677},[58,65626,55342],{"class":82},[58,65628,86],{"class":75},[58,65630,979],{"class":82},[58,65632,102],{"class":75},[58,65634,65635,65637,65639,65641],{"class":60,"line":2260},[58,65636,55331],{"class":82},[58,65638,86],{"class":75},[58,65640,979],{"class":82},[58,65642,102],{"class":75},[58,65644,65645],{"class":60,"line":694},[58,65646,2833],{"class":75},[58,65648,65649],{"class":60,"line":2270},[58,65650,3046],{"emptyLinePlaceholder":720},[58,65652,65653,65656],{"class":60,"line":2275},[58,65654,65655],{"class":71},"    table",[58,65657,76],{"class":75},[58,65659,65660,65663,65665,65668],{"class":60,"line":2289},[58,65661,65662],{"class":82},"      border-collapse",[58,65664,86],{"class":75},[58,65666,65667],{"class":82},"collapse",[58,65669,102],{"class":75},[58,65671,65672,65675,65677,65679],{"class":60,"line":2294},[58,65673,65674],{"class":82},"      border-spacing",[58,65676,86],{"class":75},[58,65678,979],{"class":82},[58,65680,102],{"class":75},[58,65682,65683,65685,65687,65689,65691,65693,65696],{"class":60,"line":2300},[58,65684,62609],{"class":82},[58,65686,86],{"class":75},[58,65688,89],{"class":82},[58,65690,93],{"class":92},[58,65692,96],{"class":82},[58,65694,65695],{"class":82}," #c0c0c0",[58,65697,102],{"class":75},[58,65699,65700,65702,65704,65707,65709],{"class":60,"line":2321},[58,65701,55406],{"class":82},[58,65703,86],{"class":75},[58,65705,65706],{"class":82},"500",[58,65708,93],{"class":92},[58,65710,102],{"class":75},[58,65712,65713,65715,65717,65719,65721,65723],{"class":60,"line":2326},[58,65714,55342],{"class":82},[58,65716,86],{"class":75},[58,65718,1097],{"class":82},[58,65720,93],{"class":92},[58,65722,52195],{"class":82},[58,65724,102],{"class":75},[58,65726,65727,65729,65731,65733],{"class":60,"line":2340},[58,65728,57920],{"class":82},[58,65730,86],{"class":75},[58,65732,52231],{"class":82},[58,65734,102],{"class":75},[58,65736,65737],{"class":60,"line":2345},[58,65738,2833],{"class":75},[58,65740,65741],{"class":60,"line":2374},[58,65742,3046],{"emptyLinePlaceholder":720},[58,65744,65745,65748],{"class":60,"line":2379},[58,65746,65747],{"class":71},"    th",[58,65749,76],{"class":75},[58,65751,65752,65754,65756,65759],{"class":60,"line":2396},[58,65753,55518],{"class":82},[58,65755,86],{"class":75},[58,65757,65758],{"class":82},"#09c",[58,65760,102],{"class":75},[58,65762,65763,65766,65768,65770,65772,65774,65777],{"class":60,"line":2401},[58,65764,65765],{"class":82},"      font",[58,65767,86],{"class":75},[58,65769,62971],{"class":82},[58,65771,64705],{"class":82},[58,65773,93],{"class":92},[58,65775,65776],{"class":386}," \"微软雅黑\"",[58,65778,102],{"class":75},[58,65780,65781,65783,65785,65787],{"class":60,"line":2406},[58,65782,58050],{"class":82},[58,65784,86],{"class":75},[58,65786,61476],{"class":82},[58,65788,102],{"class":75},[58,65790,65791,65793,65795,65797,65799],{"class":60,"line":2411},[58,65792,55420],{"class":82},[58,65794,86],{"class":75},[58,65796,1585],{"class":82},[58,65798,93],{"class":92},[58,65800,102],{"class":75},[58,65802,65803],{"class":60,"line":2425},[58,65804,2833],{"class":75},[58,65806,65807],{"class":60,"line":2430},[58,65808,3046],{"emptyLinePlaceholder":720},[58,65810,65811,65814],{"class":60,"line":3223},[58,65812,65813],{"class":71},"    td",[58,65815,76],{"class":75},[58,65817,65818,65820,65822,65824,65826,65828,65831],{"class":60,"line":3237},[58,65819,62609],{"class":82},[58,65821,86],{"class":75},[58,65823,89],{"class":82},[58,65825,93],{"class":92},[58,65827,96],{"class":82},[58,65829,65830],{"class":82}," #d0d0d0",[58,65832,102],{"class":75},[58,65834,65835,65837,65839,65842],{"class":60,"line":3245},[58,65836,58050],{"class":82},[58,65838,86],{"class":75},[58,65840,65841],{"class":82},"#404060",[58,65843,102],{"class":75},[58,65845,65846,65848,65850,65852,65854],{"class":60,"line":3250},[58,65847,55331],{"class":82},[58,65849,86],{"class":75},[58,65851,1232],{"class":82},[58,65853,93],{"class":92},[58,65855,102],{"class":75},[58,65857,65858],{"class":60,"line":3256},[58,65859,2833],{"class":75},[58,65861,65862],{"class":60,"line":3262},[58,65863,3046],{"emptyLinePlaceholder":720},[58,65865,65866,65869],{"class":60,"line":3267},[58,65867,65868],{"class":379},"    .allCheck",[58,65870,76],{"class":75},[58,65872,65873,65875,65877,65879,65881],{"class":60,"line":8594},[58,65874,55406],{"class":82},[58,65876,86],{"class":75},[58,65878,1398],{"class":82},[58,65880,93],{"class":92},[58,65882,102],{"class":75},[58,65884,65885],{"class":60,"line":8618},[58,65886,2833],{"class":75},[58,65888,65889,65891,65893],{"class":60,"line":8623},[58,65890,53055],{"class":75},[58,65892,702],{"class":71},[58,65894,403],{"class":75},[58,65896,65897,65899,65901],{"class":60,"line":8629},[58,65898,52423],{"class":75},[58,65900,51976],{"class":71},[58,65902,403],{"class":75},[58,65904,65905],{"class":60,"line":8656},[58,65906,3046],{"emptyLinePlaceholder":720},[58,65908,65909,65911,65913],{"class":60,"line":8661},[58,65910,373],{"class":75},[58,65912,52438],{"class":71},[58,65914,403],{"class":75},[58,65916,65917,65919,65921],{"class":60,"line":8667},[58,65918,52782],{"class":75},[58,65920,926],{"class":71},[58,65922,403],{"class":75},[58,65924,65925,65927,65929],{"class":60,"line":8679},[58,65926,51983],{"class":75},[58,65928,932],{"class":71},[58,65930,403],{"class":75},[58,65932,65933,65935,65937,65939,65941,65944],{"class":60,"line":8691},[58,65934,55868],{"class":75},[58,65936,935],{"class":71},[58,65938,54124],{"class":379},[58,65940,383],{"class":75},[58,65942,65943],{"class":386},"\"allCheck\"",[58,65945,403],{"class":75},[58,65947,65948,65950,65952,65954,65956,65958,65960,65962,65964,65966,65968,65971,65974,65976,65978,65980,65983,65986,65988],{"class":60,"line":8703},[58,65949,55936],{"class":75},[58,65951,54457],{"class":71},[58,65953,54460],{"class":379},[58,65955,383],{"class":75},[58,65957,54465],{"class":386},[58,65959,15564],{"class":379},[58,65961,383],{"class":75},[58,65963,8298],{"class":386},[58,65965,15603],{"class":379},[58,65967,383],{"class":75},[58,65969,65970],{"class":386},"\"checkAll\"",[58,65972,65973],{"class":75},"> \u003C",[58,65975,58],{"class":71},[58,65977,54124],{"class":379},[58,65979,383],{"class":75},[58,65981,65982],{"class":386},"\"all\"",[58,65984,65985],{"class":75},">全选\u003C\u002F",[58,65987,58],{"class":71},[58,65989,403],{"class":75},[58,65991,65992,65994,65996],{"class":60,"line":10361},[58,65993,56041],{"class":75},[58,65995,935],{"class":71},[58,65997,403],{"class":75},[58,65999,66000,66002,66004,66007,66009],{"class":60,"line":10386},[58,66001,55868],{"class":75},[58,66003,935],{"class":71},[58,66005,66006],{"class":75},">商品\u003C\u002F",[58,66008,935],{"class":71},[58,66010,403],{"class":75},[58,66012,66013,66015,66017,66020,66022],{"class":60,"line":10409},[58,66014,55868],{"class":75},[58,66016,935],{"class":71},[58,66018,66019],{"class":75},">商家\u003C\u002F",[58,66021,935],{"class":71},[58,66023,403],{"class":75},[58,66025,66026,66028,66030,66033,66035],{"class":60,"line":10433},[58,66027,55868],{"class":75},[58,66029,935],{"class":71},[58,66031,66032],{"class":75},">价格\u003C\u002F",[58,66034,935],{"class":71},[58,66036,403],{"class":75},[58,66038,66039,66041,66043],{"class":60,"line":10438},[58,66040,52414],{"class":75},[58,66042,932],{"class":71},[58,66044,403],{"class":75},[58,66046,66047,66049,66051],{"class":60,"line":10443},[58,66048,51983],{"class":75},[58,66050,932],{"class":71},[58,66052,403],{"class":75},[58,66054,66055,66057,66059],{"class":60,"line":10448},[58,66056,55868],{"class":75},[58,66058,977],{"class":71},[58,66060,403],{"class":75},[58,66062,66063,66065,66067,66069,66071,66073,66075,66077,66080,66082,66084,66087],{"class":60,"line":10457},[58,66064,55936],{"class":75},[58,66066,54457],{"class":71},[58,66068,54460],{"class":379},[58,66070,383],{"class":75},[58,66072,54465],{"class":386},[58,66074,15564],{"class":379},[58,66076,383],{"class":75},[58,66078,66079],{"class":386},"\"check\"",[58,66081,54124],{"class":379},[58,66083,383],{"class":75},[58,66085,66086],{"class":386},"\"ck\"",[58,66088,403],{"class":75},[58,66090,66091,66093,66095],{"class":60,"line":10462},[58,66092,56041],{"class":75},[58,66094,977],{"class":71},[58,66096,403],{"class":75},[58,66098,66099,66101,66103,66105,66107],{"class":60,"line":10468},[58,66100,55868],{"class":75},[58,66102,977],{"class":71},[58,66104,61805],{"class":75},[58,66106,977],{"class":71},[58,66108,403],{"class":75},[58,66110,66111,66113,66115,66118,66120],{"class":60,"line":10489},[58,66112,55868],{"class":75},[58,66114,977],{"class":71},[58,66116,66117],{"class":75},">小米\u003C\u002F",[58,66119,977],{"class":71},[58,66121,403],{"class":75},[58,66123,66124,66126,66128,66131,66133],{"class":60,"line":10495},[58,66125,55868],{"class":75},[58,66127,977],{"class":71},[58,66129,66130],{"class":75},">￥1999\u003C\u002F",[58,66132,977],{"class":71},[58,66134,403],{"class":75},[58,66136,66137,66139,66141],{"class":60,"line":10509},[58,66138,52414],{"class":75},[58,66140,932],{"class":71},[58,66142,403],{"class":75},[58,66144,66145,66147,66149],{"class":60,"line":10515},[58,66146,51983],{"class":75},[58,66148,932],{"class":71},[58,66150,403],{"class":75},[58,66152,66153,66155,66157],{"class":60,"line":10542},[58,66154,55868],{"class":75},[58,66156,977],{"class":71},[58,66158,403],{"class":75},[58,66160,66161,66163,66165,66167,66169,66171,66173,66175,66177,66179,66181,66183],{"class":60,"line":10551},[58,66162,55936],{"class":75},[58,66164,54457],{"class":71},[58,66166,54460],{"class":379},[58,66168,383],{"class":75},[58,66170,54465],{"class":386},[58,66172,15564],{"class":379},[58,66174,383],{"class":75},[58,66176,66079],{"class":386},[58,66178,54124],{"class":379},[58,66180,383],{"class":75},[58,66182,66086],{"class":386},[58,66184,403],{"class":75},[58,66186,66187,66189,66191],{"class":60,"line":10557},[58,66188,56041],{"class":75},[58,66190,977],{"class":71},[58,66192,403],{"class":75},[58,66194,66195,66197,66199,66202,66204],{"class":60,"line":10565},[58,66196,55868],{"class":75},[58,66198,977],{"class":71},[58,66200,66201],{"class":75},">小米净水器\u003C\u002F",[58,66203,977],{"class":71},[58,66205,403],{"class":75},[58,66207,66208,66210,66212,66214,66216],{"class":60,"line":10570},[58,66209,55868],{"class":75},[58,66211,977],{"class":71},[58,66213,66117],{"class":75},[58,66215,977],{"class":71},[58,66217,403],{"class":75},[58,66219,66220,66222,66224,66227,66229],{"class":60,"line":17247},[58,66221,55868],{"class":75},[58,66223,977],{"class":71},[58,66225,66226],{"class":75},">￥4999\u003C\u002F",[58,66228,977],{"class":71},[58,66230,403],{"class":75},[58,66232,66233,66235,66237],{"class":60,"line":17253},[58,66234,52414],{"class":75},[58,66236,932],{"class":71},[58,66238,403],{"class":75},[58,66240,66241,66243,66245],{"class":60,"line":17276},[58,66242,51983],{"class":75},[58,66244,932],{"class":71},[58,66246,403],{"class":75},[58,66248,66249,66251,66253],{"class":60,"line":17282},[58,66250,55868],{"class":75},[58,66252,977],{"class":71},[58,66254,403],{"class":75},[58,66256,66257,66259,66261,66263,66265,66267,66269,66271,66273,66275,66277,66279],{"class":60,"line":17305},[58,66258,55936],{"class":75},[58,66260,54457],{"class":71},[58,66262,54460],{"class":379},[58,66264,383],{"class":75},[58,66266,54465],{"class":386},[58,66268,15564],{"class":379},[58,66270,383],{"class":75},[58,66272,66079],{"class":386},[58,66274,54124],{"class":379},[58,66276,383],{"class":75},[58,66278,66086],{"class":386},[58,66280,403],{"class":75},[58,66282,66283,66285,66287],{"class":60,"line":17319},[58,66284,56041],{"class":75},[58,66286,977],{"class":71},[58,66288,403],{"class":75},[58,66290,66291,66293,66295,66298,66300],{"class":60,"line":17339},[58,66292,55868],{"class":75},[58,66294,977],{"class":71},[58,66296,66297],{"class":75},">小米电视\u003C\u002F",[58,66299,977],{"class":71},[58,66301,403],{"class":75},[58,66303,66304,66306,66308,66310,66312],{"class":60,"line":17345},[58,66305,55868],{"class":75},[58,66307,977],{"class":71},[58,66309,66117],{"class":75},[58,66311,977],{"class":71},[58,66313,403],{"class":75},[58,66315,66316,66318,66320,66323,66325],{"class":60,"line":17356},[58,66317,55868],{"class":75},[58,66319,977],{"class":71},[58,66321,66322],{"class":75},">￥5999\u003C\u002F",[58,66324,977],{"class":71},[58,66326,403],{"class":75},[58,66328,66329,66331,66333],{"class":60,"line":17379},[58,66330,52414],{"class":75},[58,66332,932],{"class":71},[58,66334,403],{"class":75},[58,66336,66337,66339,66341],{"class":60,"line":17401},[58,66338,53055],{"class":75},[58,66340,926],{"class":71},[58,66342,403],{"class":75},[58,66344,66345,66347,66349],{"class":60,"line":17406},[58,66346,52782],{"class":75},[58,66348,52451],{"class":71},[58,66350,403],{"class":75},[58,66352,66353],{"class":60,"line":17412},[58,66354,66355],{"class":64},"    \u002F\u002F 1. 获取大复选框\n",[58,66357,66358,66360,66363,66365,66367,66369,66371,66374],{"class":60,"line":17426},[58,66359,11866],{"class":92},[58,66361,66362],{"class":82}," checkAll",[58,66364,14208],{"class":92},[58,66366,55032],{"class":75},[58,66368,55035],{"class":379},[58,66370,793],{"class":75},[58,66372,66373],{"class":386},"'#checkAll'",[58,66375,799],{"class":75},[58,66377,66378],{"class":60,"line":17439},[58,66379,66380],{"class":64},"    \u002F\u002F 2. 获取所有的小复选框\n",[58,66382,66383,66385,66388,66390,66392,66394,66396,66399],{"class":60,"line":17444},[58,66384,11866],{"class":92},[58,66386,66387],{"class":82}," cks",[58,66389,14208],{"class":92},[58,66391,55032],{"class":75},[58,66393,56315],{"class":379},[58,66395,793],{"class":75},[58,66397,66398],{"class":386},"'.ck'",[58,66400,799],{"class":75},[58,66402,66403],{"class":60,"line":17458},[58,66404,66405],{"class":64},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[58,66407,66408,66411,66413,66415,66417,66419,66421],{"class":60,"line":17463},[58,66409,66410],{"class":75},"    checkAll.",[58,66412,58447],{"class":379},[58,66414,793],{"class":75},[58,66416,58452],{"class":386},[58,66418,469],{"class":75},[58,66420,55085],{"class":92},[58,66422,55088],{"class":75},[58,66424,66425],{"class":60,"line":17469},[58,66426,66427],{"class":64},"      \u002F\u002F 得到当前大复选框的选中状态\n",[58,66429,66430,66433],{"class":60,"line":17474},[58,66431,66432],{"class":64},"      \u002F\u002F console.log(checkAll.checked)",[58,66434,66435],{"class":64},"  \u002F\u002F 得到 是 true 或者是 false\n",[58,66437,66438],{"class":60,"line":17488},[58,66439,66440],{"class":64},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[58,66442,66443,66445,66447,66449,66451,66453,66455,66457,66459,66462,66464,66466,66468],{"class":60,"line":17493},[58,66444,52922],{"class":92},[58,66446,2305],{"class":75},[58,66448,52485],{"class":92},[58,66450,10083],{"class":75},[58,66452,383],{"class":92},[58,66454,4739],{"class":82},[58,66456,10090],{"class":75},[58,66458,373],{"class":92},[58,66460,66461],{"class":75}," cks.",[58,66463,52606],{"class":82},[58,66465,3860],{"class":75},[58,66467,2938],{"class":92},[58,66469,13086],{"class":75},[58,66471,66472,66475,66477,66480],{"class":60,"line":17498},[58,66473,66474],{"class":75},"        cks[i].checked ",[58,66476,383],{"class":92},[58,66478,66479],{"class":82}," this",[58,66481,66482],{"class":75},".checked\n",[58,66484,66485],{"class":60,"line":17512},[58,66486,53036],{"class":75},[58,66488,66489],{"class":60,"line":17524},[58,66490,34105],{"class":75},[58,66492,66493],{"class":60,"line":17529},[58,66494,66495],{"class":64},"    \u002F\u002F 5. 小复选框控制大复选框\n",[58,66497,66498],{"class":60,"line":17542},[58,66499,3046],{"emptyLinePlaceholder":720},[58,66501,66502,66504,66506,66508,66510,66512,66514,66516,66518,66520,66522,66524,66526],{"class":60,"line":17547},[58,66503,3847],{"class":92},[58,66505,2305],{"class":75},[58,66507,52485],{"class":92},[58,66509,10083],{"class":75},[58,66511,383],{"class":92},[58,66513,4739],{"class":82},[58,66515,10090],{"class":75},[58,66517,373],{"class":92},[58,66519,66461],{"class":75},[58,66521,52606],{"class":82},[58,66523,3860],{"class":75},[58,66525,2938],{"class":92},[58,66527,13086],{"class":75},[58,66529,66530],{"class":60,"line":17552},[58,66531,66532],{"class":64},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[58,66534,66535,66538,66540,66542,66544,66546,66548],{"class":60,"line":17557},[58,66536,66537],{"class":75},"      cks[i].",[58,66539,58447],{"class":379},[58,66541,793],{"class":75},[58,66543,58452],{"class":386},[58,66545,469],{"class":75},[58,66547,55085],{"class":92},[58,66549,55088],{"class":75},[58,66551,66552],{"class":60,"line":17570},[58,66553,66554],{"class":64},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[58,66556,66557],{"class":60,"line":17575},[58,66558,66559],{"class":64},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[58,66561,66562],{"class":60,"line":33277},[58,66563,66564],{"class":64},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[58,66566,66567],{"class":60,"line":33283},[58,66568,66569],{"class":64},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[58,66571,66572,66575,66577,66579,66581,66583,66586,66588,66590,66592,66594],{"class":60,"line":33289},[58,66573,66574],{"class":75},"        checkAll.checked ",[58,66576,383],{"class":92},[58,66578,55032],{"class":75},[58,66580,56315],{"class":379},[58,66582,793],{"class":75},[58,66584,66585],{"class":386},"'.ck:checked'",[58,66587,31470],{"class":75},[58,66589,52606],{"class":82},[58,66591,58540],{"class":92},[58,66593,66461],{"class":75},[58,66595,56465],{"class":82},[58,66597,66598],{"class":60,"line":33295},[58,66599,65447],{"class":75},[58,66601,66602],{"class":60,"line":33301},[58,66603,2833],{"class":75},[58,66605,66606,66608,66610],{"class":60,"line":33312},[58,66607,53055],{"class":75},[58,66609,52451],{"class":71},[58,66611,403],{"class":75},[58,66613,66614,66616,66618],{"class":60,"line":33318},[58,66615,52423],{"class":75},[58,66617,52438],{"class":71},[58,66619,403],{"class":75},[58,66621,66622],{"class":60,"line":33338},[58,66623,3046],{"emptyLinePlaceholder":720},[58,66625,66626,66628,66630],{"class":60,"line":33344},[58,66627,52423],{"class":75},[58,66629,51279],{"class":71},[58,66631,403],{"class":75},[175,66633,66634],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[175,66636,66637],{},"用好之间比较得到的布尔值！！！",[175,66639,66640,66641,66644,66645,2305,66648,1370,66650,66653],{},"在 JS 里访问的时候，",[55,66642,66643],{},"checkbox.checked"," 是一个 ",[25,66646,66647],{},"布尔值",[55,66649,2012],{},[55,66651,66652],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[175,66655,66656,66657,66660,66661],{},"HTML 的 ",[55,66658,66659],{},"checked=\"checked\""," 只是 ",[25,66662,66663,66664,66667],{},"初始值；JS 的 ",[55,66665,66666],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[175,66669,66670],{},"：checked是一个伪类选择器",[175,66672,66673],{},[119,66674],{"alt":53,"src":66675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[175,66677,66678,66681],{},[66679,66680],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[175,66683,66684],{},[119,66685],{"alt":53,"src":66686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66688,66690],{"id":66689},"_33-dom事件进阶","3.3 DOM事件进阶",[114,66692,66694],{"id":66693},"_331-事件流","3.3.1 事件流",[175,66696,66697],{},[119,66698],{"alt":53,"src":66699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22641,66701,66703],{"id":66702},"_3311-事件捕获","3.3.1.1 事件捕获",[175,66705,66706],{},[119,66707],{"alt":53,"src":66708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[48,66710,66712],{"className":51277,"code":66711,"language":51279,"meta":53,"style":53},"\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",[55,66713,66714,66724,66738,66742,66750,66764,66784,66796,66804,66811,66823,66835,66845,66849,66853,66860,66872,66884,66894,66898,66906,66914,66918,66926,66941,66960,66968,66976,66996,67016,67032,67043,67051,67068,67079,67087,67104,67115,67123,67131,67139,67143],{"__ignoreMap":53},[58,66715,66716,66718,66720,66722],{"class":60,"line":61},[58,66717,51941],{"class":75},[58,66719,51944],{"class":71},[58,66721,51947],{"class":379},[58,66723,403],{"class":75},[58,66725,66726,66728,66730,66732,66734,66736],{"class":60,"line":68},[58,66727,373],{"class":75},[58,66729,51279],{"class":71},[58,66731,51958],{"class":379},[58,66733,383],{"class":75},[58,66735,51963],{"class":386},[58,66737,403],{"class":75},[58,66739,66740],{"class":60,"line":79},[58,66741,3046],{"emptyLinePlaceholder":720},[58,66743,66744,66746,66748],{"class":60,"line":105},[58,66745,373],{"class":75},[58,66747,51976],{"class":71},[58,66749,403],{"class":75},[58,66751,66752,66754,66756,66758,66760,66762],{"class":60,"line":627},[58,66753,52782],{"class":75},[58,66755,51986],{"class":71},[58,66757,51989],{"class":379},[58,66759,383],{"class":75},[58,66761,51994],{"class":386},[58,66763,403],{"class":75},[58,66765,66766,66768,66770,66772,66774,66776,66778,66780,66782],{"class":60,"line":509},[58,66767,52782],{"class":75},[58,66769,51986],{"class":71},[58,66771,15564],{"class":379},[58,66773,383],{"class":75},[58,66775,52033],{"class":386},[58,66777,52013],{"class":379},[58,66779,383],{"class":75},[58,66781,52040],{"class":386},[58,66783,403],{"class":75},[58,66785,66786,66788,66790,66792,66794],{"class":60,"line":559},[58,66787,52782],{"class":75},[58,66789,52049],{"class":71},[58,66791,52052],{"class":75},[58,66793,52049],{"class":71},[58,66795,403],{"class":75},[58,66797,66798,66800,66802],{"class":60,"line":654},[58,66799,52782],{"class":75},[58,66801,702],{"class":71},[58,66803,403],{"class":75},[58,66805,66806,66809],{"class":60,"line":671},[58,66807,66808],{"class":379},"    .father",[58,66810,76],{"class":75},[58,66812,66813,66815,66817,66819,66821],{"class":60,"line":677},[58,66814,55406],{"class":82},[58,66816,86],{"class":75},[58,66818,65706],{"class":82},[58,66820,93],{"class":92},[58,66822,102],{"class":75},[58,66824,66825,66827,66829,66831,66833],{"class":60,"line":2260},[58,66826,55420],{"class":82},[58,66828,86],{"class":75},[58,66830,65706],{"class":82},[58,66832,93],{"class":92},[58,66834,102],{"class":75},[58,66836,66837,66839,66841,66843],{"class":60,"line":694},[58,66838,55518],{"class":82},[58,66840,86],{"class":75},[58,66842,52283],{"class":82},[58,66844,102],{"class":75},[58,66846,66847],{"class":60,"line":2270},[58,66848,2833],{"class":75},[58,66850,66851],{"class":60,"line":2275},[58,66852,3046],{"emptyLinePlaceholder":720},[58,66854,66855,66858],{"class":60,"line":2289},[58,66856,66857],{"class":379},"    .son",[58,66859,76],{"class":75},[58,66861,66862,66864,66866,66868,66870],{"class":60,"line":2294},[58,66863,55406],{"class":82},[58,66865,86],{"class":75},[58,66867,2369],{"class":82},[58,66869,93],{"class":92},[58,66871,102],{"class":75},[58,66873,66874,66876,66878,66880,66882],{"class":60,"line":2300},[58,66875,55420],{"class":82},[58,66877,86],{"class":75},[58,66879,2369],{"class":82},[58,66881,93],{"class":92},[58,66883,102],{"class":75},[58,66885,66886,66888,66890,66892],{"class":60,"line":2321},[58,66887,55518],{"class":82},[58,66889,86],{"class":75},[58,66891,55523],{"class":82},[58,66893,102],{"class":75},[58,66895,66896],{"class":60,"line":2326},[58,66897,2833],{"class":75},[58,66899,66900,66902,66904],{"class":60,"line":2340},[58,66901,53055],{"class":75},[58,66903,702],{"class":71},[58,66905,403],{"class":75},[58,66907,66908,66910,66912],{"class":60,"line":2345},[58,66909,52423],{"class":75},[58,66911,51976],{"class":71},[58,66913,403],{"class":75},[58,66915,66916],{"class":60,"line":2374},[58,66917,3046],{"emptyLinePlaceholder":720},[58,66919,66920,66922,66924],{"class":60,"line":2379},[58,66921,373],{"class":75},[58,66923,52438],{"class":71},[58,66925,403],{"class":75},[58,66927,66928,66930,66932,66934,66936,66939],{"class":60,"line":2396},[58,66929,52782],{"class":75},[58,66931,72],{"class":71},[58,66933,54124],{"class":379},[58,66935,383],{"class":75},[58,66937,66938],{"class":386},"\"father\"",[58,66940,403],{"class":75},[58,66942,66943,66945,66947,66949,66951,66954,66956,66958],{"class":60,"line":2401},[58,66944,51983],{"class":75},[58,66946,72],{"class":71},[58,66948,54124],{"class":379},[58,66950,383],{"class":75},[58,66952,66953],{"class":386},"\"son\"",[58,66955,55948],{"class":75},[58,66957,72],{"class":71},[58,66959,403],{"class":75},[58,66961,66962,66964,66966],{"class":60,"line":2406},[58,66963,53055],{"class":75},[58,66965,72],{"class":71},[58,66967,403],{"class":75},[58,66969,66970,66972,66974],{"class":60,"line":2411},[58,66971,52782],{"class":75},[58,66973,52451],{"class":71},[58,66975,403],{"class":75},[58,66977,66978,66980,66983,66985,66987,66989,66991,66994],{"class":60,"line":2425},[58,66979,11866],{"class":92},[58,66981,66982],{"class":82}," fa",[58,66984,14208],{"class":92},[58,66986,55032],{"class":75},[58,66988,55035],{"class":379},[58,66990,793],{"class":75},[58,66992,66993],{"class":386},"'.father'",[58,66995,799],{"class":75},[58,66997,66998,67000,67003,67005,67007,67009,67011,67014],{"class":60,"line":2430},[58,66999,11866],{"class":92},[58,67001,67002],{"class":82}," son",[58,67004,14208],{"class":92},[58,67006,55032],{"class":75},[58,67008,55035],{"class":379},[58,67010,793],{"class":75},[58,67012,67013],{"class":386},"'.son'",[58,67015,799],{"class":75},[58,67017,67018,67020,67022,67024,67026,67028,67030],{"class":60,"line":3223},[58,67019,53045],{"class":75},[58,67021,58447],{"class":379},[58,67023,793],{"class":75},[58,67025,58452],{"class":386},[58,67027,469],{"class":75},[58,67029,55085],{"class":92},[58,67031,55088],{"class":75},[58,67033,67034,67036,67038,67041],{"class":60,"line":3237},[58,67035,59559],{"class":379},[58,67037,793],{"class":75},[58,67039,67040],{"class":386},"'woshiu1'",[58,67042,799],{"class":75},[58,67044,67045,67047,67049],{"class":60,"line":3245},[58,67046,55171],{"class":75},[58,67048,2012],{"class":82},[58,67050,799],{"class":75},[58,67052,67053,67056,67058,67060,67062,67064,67066],{"class":60,"line":3250},[58,67054,67055],{"class":75},"    fa.",[58,67057,58447],{"class":379},[58,67059,793],{"class":75},[58,67061,58452],{"class":386},[58,67063,469],{"class":75},[58,67065,55085],{"class":92},[58,67067,55088],{"class":75},[58,67069,67070,67072,67074,67077],{"class":60,"line":3256},[58,67071,59559],{"class":379},[58,67073,793],{"class":75},[58,67075,67076],{"class":386},"'1'",[58,67078,799],{"class":75},[58,67080,67081,67083,67085],{"class":60,"line":3262},[58,67082,55171],{"class":75},[58,67084,2012],{"class":82},[58,67086,799],{"class":75},[58,67088,67089,67092,67094,67096,67098,67100,67102],{"class":60,"line":3267},[58,67090,67091],{"class":75},"    son.",[58,67093,58447],{"class":379},[58,67095,793],{"class":75},[58,67097,58452],{"class":386},[58,67099,469],{"class":75},[58,67101,55085],{"class":92},[58,67103,55088],{"class":75},[58,67105,67106,67108,67110,67113],{"class":60,"line":8594},[58,67107,59559],{"class":379},[58,67109,793],{"class":75},[58,67111,67112],{"class":386},"'2'",[58,67114,799],{"class":75},[58,67116,67117,67119,67121],{"class":60,"line":8618},[58,67118,55171],{"class":75},[58,67120,2012],{"class":82},[58,67122,799],{"class":75},[58,67124,67125,67127,67129],{"class":60,"line":8623},[58,67126,53055],{"class":75},[58,67128,52451],{"class":71},[58,67130,403],{"class":75},[58,67132,67133,67135,67137],{"class":60,"line":8629},[58,67134,52423],{"class":75},[58,67136,52438],{"class":71},[58,67138,403],{"class":75},[58,67140,67141],{"class":60,"line":8656},[58,67142,3046],{"emptyLinePlaceholder":720},[58,67144,67145,67147,67149],{"class":60,"line":8661},[58,67146,52423],{"class":75},[58,67148,51279],{"class":71},[58,67150,403],{"class":75},[175,67152,67153],{},[119,67154],{"alt":53,"src":67155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[175,67157,67158],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22641,67160,67162],{"id":67161},"_3312-事件冒泡","3.3.1.2 事件冒泡",[175,67164,67165],{},[119,67166],{"alt":53,"src":67167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[175,67169,67170],{},"反着来",[175,67172,67173],{},"注意是同名事件，比如都是‘click’",[22641,67175,67177],{"id":67176},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[175,67179,67180],{},[119,67181],{"alt":53,"src":67182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22641,67184,67186],{"id":67185},"_3314-解绑事件","3.3.1.4 解绑事件",[175,67188,67189],{},[119,67190],{"alt":53,"src":67191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[175,67193,67194],{},[119,67195],{"alt":53,"src":67196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22641,67198,67200],{"id":67199},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[19,67202,67203],{},[22,67204,67205],{},"事件类型的区别",[175,67207,67208],{},[119,67209],{"alt":53,"src":67210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[175,67212,67213],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[19,67215,67216],{"start":68},[22,67217,67218],{},"注册事件的区别",[175,67220,67221],{},[119,67222],{"alt":53,"src":67223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22641,67225,67227],{"id":67226},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[175,67229,67230],{},[119,67231],{"alt":53,"src":67232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[175,67234,67235],{},[119,67236],{"alt":53,"src":67237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[48,67239,67241],{"className":53705,"code":67240,"language":53707,"meta":53,"style":53},"\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",[55,67242,67243,67251,67268,67291,67299,67304,67309,67314,67318,67326,67334],{"__ignoreMap":53},[58,67244,67245,67247,67249],{"class":60,"line":61},[58,67246,373],{"class":75},[58,67248,52438],{"class":71},[58,67250,403],{"class":75},[58,67252,67253,67255,67258,67261,67263,67266],{"class":60,"line":68},[58,67254,52782],{"class":75},[58,67256,67257],{"class":71},"form",[58,67259,67260],{"class":379}," action",[58,67262,383],{"class":75},[58,67264,67265],{"class":386},"\"http:\u002F\u002Fwww.itcast.cn\"",[58,67267,403],{"class":75},[58,67269,67270,67272,67274,67276,67278,67281,67284,67286,67289],{"class":60,"line":79},[58,67271,51983],{"class":75},[58,67273,54457],{"class":71},[58,67275,54460],{"class":379},[58,67277,383],{"class":75},[58,67279,67280],{"class":386},"\"submit\"",[58,67282,67283],{"class":379}," value",[58,67285,383],{"class":75},[58,67287,67288],{"class":386},"\"免费注册\"",[58,67290,403],{"class":75},[58,67292,67293,67295,67297],{"class":60,"line":105},[58,67294,51983],{"class":75},[58,67296,52451],{"class":71},[58,67298,403],{"class":75},[58,67300,67301],{"class":60,"line":627},[58,67302,67303],{"class":75},"      const form = document.querySelector('form')\n",[58,67305,67306],{"class":60,"line":509},[58,67307,67308],{"class":75},"      form.addEventListener('submit', function (e) {\n",[58,67310,67311],{"class":60,"line":559},[58,67312,67313],{"class":75},"        e.preventDefault()\n",[58,67315,67316],{"class":60,"line":654},[58,67317,65447],{"class":75},[58,67319,67320,67322,67324],{"class":60,"line":671},[58,67321,52414],{"class":75},[58,67323,52451],{"class":71},[58,67325,403],{"class":75},[58,67327,67328,67330,67332],{"class":60,"line":677},[58,67329,53055],{"class":75},[58,67331,67257],{"class":71},[58,67333,403],{"class":75},[58,67335,67336,67338,67340],{"class":60,"line":2260},[58,67337,52423],{"class":75},[58,67339,52438],{"class":71},[58,67341,403],{"class":75},[175,67343,67344],{},"点击不在跳转！！！",[114,67346,67348],{"id":67347},"_332-事件委托","3.3.2 事件委托",[175,67350,67351],{},[119,67352],{"alt":53,"src":67353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[48,67355,67357],{"className":51277,"code":67356,"language":51279,"meta":53,"style":53},"\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",[55,67358,67359,67369,67383,67387,67395,67409,67429,67441,67449,67453,67461,67469,67481,67493,67505,67517,67529,67542,67550,67558,67563,67582,67603,67608,67613,67618,67623,67632,67636,67646,67650,67655,67660,67674,67684,67688,67692,67700,67708,67712],{"__ignoreMap":53},[58,67360,67361,67363,67365,67367],{"class":60,"line":61},[58,67362,51941],{"class":75},[58,67364,51944],{"class":71},[58,67366,51947],{"class":379},[58,67368,403],{"class":75},[58,67370,67371,67373,67375,67377,67379,67381],{"class":60,"line":68},[58,67372,373],{"class":75},[58,67374,51279],{"class":71},[58,67376,51958],{"class":379},[58,67378,383],{"class":75},[58,67380,51963],{"class":386},[58,67382,403],{"class":75},[58,67384,67385],{"class":60,"line":79},[58,67386,3046],{"emptyLinePlaceholder":720},[58,67388,67389,67391,67393],{"class":60,"line":105},[58,67390,373],{"class":75},[58,67392,51976],{"class":71},[58,67394,403],{"class":75},[58,67396,67397,67399,67401,67403,67405,67407],{"class":60,"line":627},[58,67398,52782],{"class":75},[58,67400,51986],{"class":71},[58,67402,51989],{"class":379},[58,67404,383],{"class":75},[58,67406,51994],{"class":386},[58,67408,403],{"class":75},[58,67410,67411,67413,67415,67417,67419,67421,67423,67425,67427],{"class":60,"line":509},[58,67412,52782],{"class":75},[58,67414,51986],{"class":71},[58,67416,15564],{"class":379},[58,67418,383],{"class":75},[58,67420,52033],{"class":386},[58,67422,52013],{"class":379},[58,67424,383],{"class":75},[58,67426,52040],{"class":386},[58,67428,403],{"class":75},[58,67430,67431,67433,67435,67437,67439],{"class":60,"line":559},[58,67432,52782],{"class":75},[58,67434,52049],{"class":71},[58,67436,52052],{"class":75},[58,67438,52049],{"class":71},[58,67440,403],{"class":75},[58,67442,67443,67445,67447],{"class":60,"line":654},[58,67444,52423],{"class":75},[58,67446,51976],{"class":71},[58,67448,403],{"class":75},[58,67450,67451],{"class":60,"line":671},[58,67452,3046],{"emptyLinePlaceholder":720},[58,67454,67455,67457,67459],{"class":60,"line":677},[58,67456,373],{"class":75},[58,67458,52438],{"class":71},[58,67460,403],{"class":75},[58,67462,67463,67465,67467],{"class":60,"line":2260},[58,67464,52782],{"class":75},[58,67466,124],{"class":71},[58,67468,403],{"class":75},[58,67470,67471,67473,67475,67477,67479],{"class":60,"line":694},[58,67472,51983],{"class":75},[58,67474,22],{"class":71},[58,67476,54602],{"class":75},[58,67478,22],{"class":71},[58,67480,403],{"class":75},[58,67482,67483,67485,67487,67489,67491],{"class":60,"line":2270},[58,67484,51983],{"class":75},[58,67486,22],{"class":71},[58,67488,54621],{"class":75},[58,67490,22],{"class":71},[58,67492,403],{"class":75},[58,67494,67495,67497,67499,67501,67503],{"class":60,"line":2275},[58,67496,51983],{"class":75},[58,67498,22],{"class":71},[58,67500,54640],{"class":75},[58,67502,22],{"class":71},[58,67504,403],{"class":75},[58,67506,67507,67509,67511,67513,67515],{"class":60,"line":2289},[58,67508,51983],{"class":75},[58,67510,22],{"class":71},[58,67512,54659],{"class":75},[58,67514,22],{"class":71},[58,67516,403],{"class":75},[58,67518,67519,67521,67523,67525,67527],{"class":60,"line":2294},[58,67520,51983],{"class":75},[58,67522,22],{"class":71},[58,67524,54678],{"class":75},[58,67526,22],{"class":71},[58,67528,403],{"class":75},[58,67530,67531,67533,67535,67538,67540],{"class":60,"line":2300},[58,67532,51983],{"class":75},[58,67534,175],{"class":71},[58,67536,67537],{"class":75},">我不需要变色\u003C\u002F",[58,67539,175],{"class":71},[58,67541,403],{"class":75},[58,67543,67544,67546,67548],{"class":60,"line":2321},[58,67545,53055],{"class":75},[58,67547,124],{"class":71},[58,67549,403],{"class":75},[58,67551,67552,67554,67556],{"class":60,"line":2326},[58,67553,52782],{"class":75},[58,67555,52451],{"class":71},[58,67557,403],{"class":75},[58,67559,67560],{"class":60,"line":2340},[58,67561,67562],{"class":64},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[58,67564,67565,67567,67569,67571,67573,67575,67577,67580],{"class":60,"line":2345},[58,67566,11866],{"class":92},[58,67568,61924],{"class":82},[58,67570,14208],{"class":92},[58,67572,55032],{"class":75},[58,67574,55035],{"class":379},[58,67576,793],{"class":75},[58,67578,67579],{"class":386},"'ul'",[58,67581,799],{"class":75},[58,67583,67584,67587,67589,67591,67593,67595,67597,67599,67601],{"class":60,"line":2374},[58,67585,67586],{"class":75},"    ul.",[58,67588,58447],{"class":379},[58,67590,793],{"class":75},[58,67592,58452],{"class":386},[58,67594,469],{"class":75},[58,67596,55085],{"class":92},[58,67598,2305],{"class":75},[58,67600,864],{"class":5862},[58,67602,13086],{"class":75},[58,67604,67605],{"class":60,"line":2379},[58,67606,67607],{"class":64},"      \u002F\u002F alert(1)\n",[58,67609,67610],{"class":60,"line":2396},[58,67611,67612],{"class":64},"      \u002F\u002F e.target就是我们点击的对象\n",[58,67614,67615],{"class":60,"line":2401},[58,67616,67617],{"class":64},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[58,67619,67620],{"class":60,"line":2406},[58,67621,67622],{"class":64},"      \u002F\u002F e.target.style.color = 'red'\n",[58,67624,67625,67627,67629],{"class":60,"line":2411},[58,67626,58878],{"class":75},[58,67628,58881],{"class":379},[58,67630,67631],{"class":75},"(e)\n",[58,67633,67634],{"class":60,"line":2425},[58,67635,3046],{"emptyLinePlaceholder":720},[58,67637,67638,67640,67643],{"class":60,"line":2430},[58,67639,58878],{"class":75},[58,67641,67642],{"class":379},"dir",[58,67644,67645],{"class":75},"(e.target)\n",[58,67647,67648],{"class":60,"line":3223},[58,67649,3046],{"emptyLinePlaceholder":720},[58,67651,67652],{"class":60,"line":3237},[58,67653,67654],{"class":64},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[58,67656,67657],{"class":60,"line":3245},[58,67658,67659],{"class":64},"      \u002F\u002F 通过tagName来进行判断\n",[58,67661,67662,67664,67667,67669,67672],{"class":60,"line":3250},[58,67663,55116],{"class":92},[58,67665,67666],{"class":75}," (e.target.tagName ",[58,67668,55122],{"class":92},[58,67670,67671],{"class":386}," 'LI'",[58,67673,13086],{"class":75},[58,67675,67676,67679,67681],{"class":60,"line":3256},[58,67677,67678],{"class":75},"        e.target.style.color ",[58,67680,383],{"class":92},[58,67682,67683],{"class":386}," 'red'\n",[58,67685,67686],{"class":60,"line":3262},[58,67687,53036],{"class":75},[58,67689,67690],{"class":60,"line":3267},[58,67691,34105],{"class":75},[58,67693,67694,67696,67698],{"class":60,"line":8594},[58,67695,53055],{"class":75},[58,67697,52451],{"class":71},[58,67699,403],{"class":75},[58,67701,67702,67704,67706],{"class":60,"line":8618},[58,67703,52423],{"class":75},[58,67705,52438],{"class":71},[58,67707,403],{"class":75},[58,67709,67710],{"class":60,"line":8623},[58,67711,3046],{"emptyLinePlaceholder":720},[58,67713,67714,67716,67718],{"class":60,"line":8629},[58,67715,52423],{"class":75},[58,67717,51279],{"class":71},[58,67719,403],{"class":75},[175,67721,67722],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[175,67724,67725],{},"if(e.target.ragName==='P') {}",[175,67727,67728],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[175,67730,67731],{},"通过事件委托的方式实现tab栏切换改造：",[175,67733,67734],{},"一定要记住自定义属性！！！！！！",[175,67736,67737],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[175,67739,67740],{},"id是自定义的属性名",[175,67742,67743],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[48,67745,67747],{"className":51277,"code":67746,"language":51279,"meta":53,"style":53},"\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",[55,67748,67749,67759,67773,67777,67785,67799,67819,67839,67851,67859,67865,67875,67885,67889,67893,67899,67911,67923,67935,67951,67955,67959,67965,67977,67989,68001,68011,68021,68025,68029,68037,68049,68059,68071,68075,68079,68087,68097,68107,68117,68121,68125,68135,68149,68161,68165,68169,68181,68191,68207,68217,68221,68225,68239,68249,68259,68263,68267,68273,68287,68291,68295,68303,68313,68317,68321,68330,68340,68344,68352,68360,68364,68372,68386,68400,68412,68420,68459,68491,68523,68555,68587,68595,68603,68617,68651,68685,68719,68753,68787,68795,68803,68811,68816,68821,68840,68845,68865,68873,68878,68891,68912,68925,68929,68934,68939,68952,68972,69000,69004,69008,69012,69020,69028,69032],{"__ignoreMap":53},[58,67750,67751,67753,67755,67757],{"class":60,"line":61},[58,67752,51941],{"class":75},[58,67754,51944],{"class":71},[58,67756,51947],{"class":379},[58,67758,403],{"class":75},[58,67760,67761,67763,67765,67767,67769,67771],{"class":60,"line":68},[58,67762,373],{"class":75},[58,67764,51279],{"class":71},[58,67766,51958],{"class":379},[58,67768,383],{"class":75},[58,67770,51963],{"class":386},[58,67772,403],{"class":75},[58,67774,67775],{"class":60,"line":79},[58,67776,3046],{"emptyLinePlaceholder":720},[58,67778,67779,67781,67783],{"class":60,"line":105},[58,67780,373],{"class":75},[58,67782,51976],{"class":71},[58,67784,403],{"class":75},[58,67786,67787,67789,67791,67793,67795,67797],{"class":60,"line":627},[58,67788,52782],{"class":75},[58,67790,51986],{"class":71},[58,67792,51989],{"class":379},[58,67794,383],{"class":75},[58,67796,51994],{"class":386},[58,67798,59761],{"class":75},[58,67800,67801,67803,67805,67807,67809,67811,67813,67815,67817],{"class":60,"line":509},[58,67802,52782],{"class":75},[58,67804,51986],{"class":71},[58,67806,52005],{"class":379},[58,67808,383],{"class":75},[58,67810,52010],{"class":386},[58,67812,52013],{"class":379},[58,67814,383],{"class":75},[58,67816,52018],{"class":386},[58,67818,59761],{"class":75},[58,67820,67821,67823,67825,67827,67829,67831,67833,67835,67837],{"class":60,"line":559},[58,67822,52782],{"class":75},[58,67824,51986],{"class":71},[58,67826,15564],{"class":379},[58,67828,383],{"class":75},[58,67830,52033],{"class":386},[58,67832,52013],{"class":379},[58,67834,383],{"class":75},[58,67836,52040],{"class":386},[58,67838,59761],{"class":75},[58,67840,67841,67843,67845,67847,67849],{"class":60,"line":654},[58,67842,52782],{"class":75},[58,67844,52049],{"class":71},[58,67846,64257],{"class":75},[58,67848,52049],{"class":71},[58,67850,403],{"class":75},[58,67852,67853,67855,67857],{"class":60,"line":671},[58,67854,52782],{"class":75},[58,67856,702],{"class":71},[58,67858,403],{"class":75},[58,67860,67861,67863],{"class":60,"line":677},[58,67862,7049],{"class":71},[58,67864,76],{"class":75},[58,67866,67867,67869,67871,67873],{"class":60,"line":2260},[58,67868,55342],{"class":82},[58,67870,86],{"class":75},[58,67872,979],{"class":82},[58,67874,102],{"class":75},[58,67876,67877,67879,67881,67883],{"class":60,"line":694},[58,67878,55331],{"class":82},[58,67880,86],{"class":75},[58,67882,979],{"class":82},[58,67884,102],{"class":75},[58,67886,67887],{"class":60,"line":2270},[58,67888,2833],{"class":75},[58,67890,67891],{"class":60,"line":2275},[58,67892,3046],{"emptyLinePlaceholder":720},[58,67894,67895,67897],{"class":60,"line":2289},[58,67896,64308],{"class":379},[58,67898,76],{"class":75},[58,67900,67901,67903,67905,67907,67909],{"class":60,"line":2294},[58,67902,55406],{"class":82},[58,67904,86],{"class":75},[58,67906,64319],{"class":82},[58,67908,93],{"class":92},[58,67910,102],{"class":75},[58,67912,67913,67915,67917,67919,67921],{"class":60,"line":2300},[58,67914,55420],{"class":82},[58,67916,86],{"class":75},[58,67918,64332],{"class":82},[58,67920,93],{"class":92},[58,67922,102],{"class":75},[58,67924,67925,67927,67929,67931,67933],{"class":60,"line":2321},[58,67926,55342],{"class":82},[58,67928,86],{"class":75},[58,67930,1486],{"class":82},[58,67932,93],{"class":92},[58,67934,102],{"class":75},[58,67936,67937,67939,67941,67943,67945,67947,67949],{"class":60,"line":2326},[58,67938,62609],{"class":82},[58,67940,86],{"class":75},[58,67942,89],{"class":82},[58,67944,93],{"class":92},[58,67946,96],{"class":82},[58,67948,62876],{"class":82},[58,67950,102],{"class":75},[58,67952,67953],{"class":60,"line":2340},[58,67954,2833],{"class":75},[58,67956,67957],{"class":60,"line":2345},[58,67958,3046],{"emptyLinePlaceholder":720},[58,67960,67961,67963],{"class":60,"line":2374},[58,67962,64377],{"class":379},[58,67964,76],{"class":75},[58,67966,67967,67969,67971,67973,67975],{"class":60,"line":2379},[58,67968,55406],{"class":82},[58,67970,86],{"class":75},[58,67972,1097],{"class":82},[58,67974,1114],{"class":92},[58,67976,102],{"class":75},[58,67978,67979,67981,67983,67985,67987],{"class":60,"line":2396},[58,67980,55420],{"class":82},[58,67982,86],{"class":75},[58,67984,1692],{"class":82},[58,67986,93],{"class":92},[58,67988,102],{"class":75},[58,67990,67991,67993,67995,67997,67999],{"class":60,"line":2401},[58,67992,57993],{"class":82},[58,67994,86],{"class":75},[58,67996,1692],{"class":82},[58,67998,93],{"class":92},[58,68000,102],{"class":75},[58,68002,68003,68005,68007,68009],{"class":60,"line":2406},[58,68004,55643],{"class":82},[58,68006,86],{"class":75},[58,68008,52118],{"class":82},[58,68010,102],{"class":75},[58,68012,68013,68015,68017,68019],{"class":60,"line":2411},[58,68014,55654],{"class":82},[58,68016,86],{"class":75},[58,68018,52306],{"class":82},[58,68020,102],{"class":75},[58,68022,68023],{"class":60,"line":2425},[58,68024,2833],{"class":75},[58,68026,68027],{"class":60,"line":2430},[58,68028,3046],{"emptyLinePlaceholder":720},[58,68030,68031,68033,68035],{"class":60,"line":3223},[58,68032,64377],{"class":379},[58,68034,64450],{"class":71},[58,68036,76],{"class":75},[58,68038,68039,68041,68043,68045,68047],{"class":60,"line":3237},[58,68040,55556],{"class":82},[58,68042,86],{"class":75},[58,68044,1585],{"class":82},[58,68046,93],{"class":92},[58,68048,102],{"class":75},[58,68050,68051,68053,68055,68057],{"class":60,"line":3245},[58,68052,62966],{"class":82},[58,68054,86],{"class":75},[58,68056,64473],{"class":82},[58,68058,102],{"class":75},[58,68060,68061,68063,68065,68067,68069],{"class":60,"line":3250},[58,68062,62632],{"class":82},[58,68064,86],{"class":75},[58,68066,1486],{"class":82},[58,68068,93],{"class":92},[58,68070,102],{"class":75},[58,68072,68073],{"class":60,"line":3256},[58,68074,2833],{"class":75},[58,68076,68077],{"class":60,"line":3262},[58,68078,3046],{"emptyLinePlaceholder":720},[58,68080,68081,68083,68085],{"class":60,"line":3267},[58,68082,64377],{"class":379},[58,68084,61924],{"class":71},[58,68086,76],{"class":75},[58,68088,68089,68091,68093,68095],{"class":60,"line":8594},[58,68090,55368],{"class":82},[58,68092,86],{"class":75},[58,68094,55373],{"class":82},[58,68096,102],{"class":75},[58,68098,68099,68101,68103,68105],{"class":60,"line":8618},[58,68100,55643],{"class":82},[58,68102,86],{"class":75},[58,68104,52118],{"class":82},[58,68106,102],{"class":75},[58,68108,68109,68111,68113,68115],{"class":60,"line":8623},[58,68110,55654],{"class":82},[58,68112,86],{"class":75},[58,68114,52219],{"class":82},[58,68116,102],{"class":75},[58,68118,68119],{"class":60,"line":8629},[58,68120,2833],{"class":75},[58,68122,68123],{"class":60,"line":8656},[58,68124,3046],{"emptyLinePlaceholder":720},[58,68126,68127,68129,68131,68133],{"class":60,"line":8661},[58,68128,64377],{"class":379},[58,68130,61924],{"class":71},[58,68132,55709],{"class":71},[58,68134,76],{"class":75},[58,68136,68137,68139,68141,68143,68145,68147],{"class":60,"line":8667},[58,68138,55342],{"class":82},[58,68140,86],{"class":75},[58,68142,979],{"class":82},[58,68144,9596],{"class":82},[58,68146,93],{"class":92},[58,68148,102],{"class":75},[58,68150,68151,68153,68155,68157,68159],{"class":60,"line":8679},[58,68152,55556],{"class":82},[58,68154,86],{"class":75},[58,68156,1335],{"class":82},[58,68158,93],{"class":92},[58,68160,102],{"class":75},[58,68162,68163],{"class":60,"line":8691},[58,68164,2833],{"class":75},[58,68166,68167],{"class":60,"line":8703},[58,68168,3046],{"emptyLinePlaceholder":720},[58,68170,68171,68173,68175,68177,68179],{"class":60,"line":10361},[58,68172,64377],{"class":379},[58,68174,61924],{"class":71},[58,68176,55709],{"class":71},[58,68178,2048],{"class":71},[58,68180,76],{"class":75},[58,68182,68183,68185,68187,68189],{"class":60,"line":10386},[58,68184,64602],{"class":82},[58,68186,86],{"class":75},[58,68188,55373],{"class":82},[58,68190,102],{"class":75},[58,68192,68193,68195,68197,68199,68201,68203,68205],{"class":60,"line":10409},[58,68194,62864],{"class":82},[58,68196,86],{"class":75},[58,68198,867],{"class":82},[58,68200,93],{"class":92},[58,68202,96],{"class":82},[58,68204,64623],{"class":82},[58,68206,102],{"class":75},[58,68208,68209,68211,68213,68215],{"class":60,"line":10433},[58,68210,58050],{"class":82},[58,68212,86],{"class":75},[58,68214,63001],{"class":82},[58,68216,102],{"class":75},[58,68218,68219],{"class":60,"line":10438},[58,68220,2833],{"class":75},[58,68222,68223],{"class":60,"line":10443},[58,68224,3046],{"emptyLinePlaceholder":720},[58,68226,68227,68229,68231,68233,68235,68237],{"class":60,"line":10448},[58,68228,64377],{"class":379},[58,68230,61924],{"class":71},[58,68232,55709],{"class":71},[58,68234,2048],{"class":71},[58,68236,64656],{"class":379},[58,68238,76],{"class":75},[58,68240,68241,68243,68245,68247],{"class":60,"line":10457},[58,68242,62423],{"class":82},[58,68244,86],{"class":75},[58,68246,64667],{"class":82},[58,68248,102],{"class":75},[58,68250,68251,68253,68255,68257],{"class":60,"line":10462},[58,68252,58050],{"class":82},[58,68254,86],{"class":75},[58,68256,64667],{"class":82},[58,68258,102],{"class":75},[58,68260,68261],{"class":60,"line":10468},[58,68262,2833],{"class":75},[58,68264,68265],{"class":60,"line":10489},[58,68266,3046],{"emptyLinePlaceholder":720},[58,68268,68269,68271],{"class":60,"line":10495},[58,68270,64692],{"class":379},[58,68272,76],{"class":75},[58,68274,68275,68277,68279,68281,68283,68285],{"class":60,"line":10509},[58,68276,55331],{"class":82},[58,68278,86],{"class":75},[58,68280,979],{"class":82},[58,68282,64705],{"class":82},[58,68284,93],{"class":92},[58,68286,102],{"class":75},[58,68288,68289],{"class":60,"line":10515},[58,68290,2833],{"class":75},[58,68292,68293],{"class":60,"line":10542},[58,68294,3046],{"emptyLinePlaceholder":720},[58,68296,68297,68299,68301],{"class":60,"line":10551},[58,68298,64692],{"class":379},[58,68300,62806],{"class":379},[58,68302,76],{"class":75},[58,68304,68305,68307,68309,68311],{"class":60,"line":10557},[58,68306,55643],{"class":82},[58,68308,86],{"class":75},[58,68310,55373],{"class":82},[58,68312,102],{"class":75},[58,68314,68315],{"class":60,"line":10565},[58,68316,2833],{"class":75},[58,68318,68319],{"class":60,"line":10570},[58,68320,3046],{"emptyLinePlaceholder":720},[58,68322,68323,68325,68328],{"class":60,"line":17247},[58,68324,64692],{"class":379},[58,68326,68327],{"class":379}," .active",[58,68329,76],{"class":75},[58,68331,68332,68334,68336,68338],{"class":60,"line":17253},[58,68333,55643],{"class":82},[58,68335,86],{"class":75},[58,68337,500],{"class":82},[58,68339,102],{"class":75},[58,68341,68342],{"class":60,"line":17276},[58,68343,2833],{"class":75},[58,68345,68346,68348,68350],{"class":60,"line":17282},[58,68347,53055],{"class":75},[58,68349,702],{"class":71},[58,68351,403],{"class":75},[58,68353,68354,68356,68358],{"class":60,"line":17305},[58,68355,52423],{"class":75},[58,68357,51976],{"class":71},[58,68359,403],{"class":75},[58,68361,68362],{"class":60,"line":17319},[58,68363,3046],{"emptyLinePlaceholder":720},[58,68365,68366,68368,68370],{"class":60,"line":17339},[58,68367,373],{"class":75},[58,68369,52438],{"class":71},[58,68371,403],{"class":75},[58,68373,68374,68376,68378,68380,68382,68384],{"class":60,"line":17345},[58,68375,52782],{"class":75},[58,68377,72],{"class":71},[58,68379,54124],{"class":379},[58,68381,383],{"class":75},[58,68383,64807],{"class":386},[58,68385,403],{"class":75},[58,68387,68388,68390,68392,68394,68396,68398],{"class":60,"line":17356},[58,68389,51983],{"class":75},[58,68391,72],{"class":71},[58,68393,54124],{"class":379},[58,68395,383],{"class":75},[58,68397,64822],{"class":386},[58,68399,403],{"class":75},[58,68401,68402,68404,68406,68408,68410],{"class":60,"line":17379},[58,68403,55868],{"class":75},[58,68405,114],{"class":71},[58,68407,64833],{"class":75},[58,68409,114],{"class":71},[58,68411,403],{"class":75},[58,68413,68414,68416,68418],{"class":60,"line":17401},[58,68415,55868],{"class":75},[58,68417,124],{"class":71},[58,68419,403],{"class":75},[58,68421,68422,68424,68426,68428,68430,68432,68434,68436,68438,68440,68442,68444,68446,68449,68451,68453,68455,68457],{"class":60,"line":17406},[58,68423,55936],{"class":75},[58,68425,22],{"class":71},[58,68427,61685],{"class":75},[58,68429,376],{"class":71},[58,68431,54124],{"class":379},[58,68433,383],{"class":75},[58,68435,60340],{"class":386},[58,68437,380],{"class":379},[58,68439,383],{"class":75},[58,68441,64868],{"class":386},[58,68443,54587],{"class":379},[58,68445,383],{"class":75},[58,68447,68448],{"class":386},"\"0\"",[58,68450,64871],{"class":75},[58,68452,376],{"class":71},[58,68454,55948],{"class":75},[58,68456,22],{"class":71},[58,68458,403],{"class":75},[58,68460,68461,68463,68465,68467,68469,68471,68473,68475,68477,68479,68481,68483,68485,68487,68489],{"class":60,"line":17412},[58,68462,55936],{"class":75},[58,68464,22],{"class":71},[58,68466,61685],{"class":75},[58,68468,376],{"class":71},[58,68470,380],{"class":379},[58,68472,383],{"class":75},[58,68474,64868],{"class":386},[58,68476,54587],{"class":379},[58,68478,383],{"class":75},[58,68480,4324],{"class":386},[58,68482,64898],{"class":75},[58,68484,376],{"class":71},[58,68486,55948],{"class":75},[58,68488,22],{"class":71},[58,68490,403],{"class":75},[58,68492,68493,68495,68497,68499,68501,68503,68505,68507,68509,68511,68513,68515,68517,68519,68521],{"class":60,"line":17426},[58,68494,55936],{"class":75},[58,68496,22],{"class":71},[58,68498,61685],{"class":75},[58,68500,376],{"class":71},[58,68502,380],{"class":379},[58,68504,383],{"class":75},[58,68506,64868],{"class":386},[58,68508,54587],{"class":379},[58,68510,383],{"class":75},[58,68512,4347],{"class":386},[58,68514,64925],{"class":75},[58,68516,376],{"class":71},[58,68518,55948],{"class":75},[58,68520,22],{"class":71},[58,68522,403],{"class":75},[58,68524,68525,68527,68529,68531,68533,68535,68537,68539,68541,68543,68545,68547,68549,68551,68553],{"class":60,"line":17439},[58,68526,55936],{"class":75},[58,68528,22],{"class":71},[58,68530,61685],{"class":75},[58,68532,376],{"class":71},[58,68534,380],{"class":379},[58,68536,383],{"class":75},[58,68538,64868],{"class":386},[58,68540,54587],{"class":379},[58,68542,383],{"class":75},[58,68544,4360],{"class":386},[58,68546,64952],{"class":75},[58,68548,376],{"class":71},[58,68550,55948],{"class":75},[58,68552,22],{"class":71},[58,68554,403],{"class":75},[58,68556,68557,68559,68561,68563,68565,68567,68569,68571,68573,68575,68577,68579,68581,68583,68585],{"class":60,"line":17444},[58,68558,55936],{"class":75},[58,68560,22],{"class":71},[58,68562,61685],{"class":75},[58,68564,376],{"class":71},[58,68566,380],{"class":379},[58,68568,383],{"class":75},[58,68570,64868],{"class":386},[58,68572,54587],{"class":379},[58,68574,383],{"class":75},[58,68576,4373],{"class":386},[58,68578,64979],{"class":75},[58,68580,376],{"class":71},[58,68582,55948],{"class":75},[58,68584,22],{"class":71},[58,68586,403],{"class":75},[58,68588,68589,68591,68593],{"class":60,"line":17458},[58,68590,56041],{"class":75},[58,68592,124],{"class":71},[58,68594,403],{"class":75},[58,68596,68597,68599,68601],{"class":60,"line":17463},[58,68598,52414],{"class":75},[58,68600,72],{"class":71},[58,68602,403],{"class":75},[58,68604,68605,68607,68609,68611,68613,68615],{"class":60,"line":17469},[58,68606,51983],{"class":75},[58,68608,72],{"class":71},[58,68610,54124],{"class":379},[58,68612,383],{"class":75},[58,68614,65016],{"class":386},[58,68616,403],{"class":75},[58,68618,68619,68621,68623,68625,68627,68629,68631,68633,68635,68637,68639,68641,68643,68645,68647,68649],{"class":60,"line":17474},[58,68620,55868],{"class":75},[58,68622,72],{"class":71},[58,68624,54124],{"class":379},[58,68626,383],{"class":75},[58,68628,65031],{"class":386},[58,68630,61685],{"class":75},[58,68632,119],{"class":71},[58,68634,55873],{"class":379},[58,68636,383],{"class":75},[58,68638,65042],{"class":386},[58,68640,55881],{"class":379},[58,68642,383],{"class":75},[58,68644,8298],{"class":386},[58,68646,65051],{"class":75},[58,68648,72],{"class":71},[58,68650,403],{"class":75},[58,68652,68653,68655,68657,68659,68661,68663,68665,68667,68669,68671,68673,68675,68677,68679,68681,68683],{"class":60,"line":17488},[58,68654,55868],{"class":75},[58,68656,72],{"class":71},[58,68658,54124],{"class":379},[58,68660,383],{"class":75},[58,68662,63255],{"class":386},[58,68664,61685],{"class":75},[58,68666,119],{"class":71},[58,68668,55873],{"class":379},[58,68670,383],{"class":75},[58,68672,65078],{"class":386},[58,68674,55881],{"class":379},[58,68676,383],{"class":75},[58,68678,8298],{"class":386},[58,68680,65051],{"class":75},[58,68682,72],{"class":71},[58,68684,403],{"class":75},[58,68686,68687,68689,68691,68693,68695,68697,68699,68701,68703,68705,68707,68709,68711,68713,68715,68717],{"class":60,"line":17493},[58,68688,55868],{"class":75},[58,68690,72],{"class":71},[58,68692,54124],{"class":379},[58,68694,383],{"class":75},[58,68696,63255],{"class":386},[58,68698,61685],{"class":75},[58,68700,119],{"class":71},[58,68702,55873],{"class":379},[58,68704,383],{"class":75},[58,68706,65113],{"class":386},[58,68708,55881],{"class":379},[58,68710,383],{"class":75},[58,68712,8298],{"class":386},[58,68714,65051],{"class":75},[58,68716,72],{"class":71},[58,68718,403],{"class":75},[58,68720,68721,68723,68725,68727,68729,68731,68733,68735,68737,68739,68741,68743,68745,68747,68749,68751],{"class":60,"line":17498},[58,68722,55868],{"class":75},[58,68724,72],{"class":71},[58,68726,54124],{"class":379},[58,68728,383],{"class":75},[58,68730,63255],{"class":386},[58,68732,61685],{"class":75},[58,68734,119],{"class":71},[58,68736,55873],{"class":379},[58,68738,383],{"class":75},[58,68740,65148],{"class":386},[58,68742,55881],{"class":379},[58,68744,383],{"class":75},[58,68746,8298],{"class":386},[58,68748,65051],{"class":75},[58,68750,72],{"class":71},[58,68752,403],{"class":75},[58,68754,68755,68757,68759,68761,68763,68765,68767,68769,68771,68773,68775,68777,68779,68781,68783,68785],{"class":60,"line":17512},[58,68756,55868],{"class":75},[58,68758,72],{"class":71},[58,68760,54124],{"class":379},[58,68762,383],{"class":75},[58,68764,63255],{"class":386},[58,68766,61685],{"class":75},[58,68768,119],{"class":71},[58,68770,55873],{"class":379},[58,68772,383],{"class":75},[58,68774,65183],{"class":386},[58,68776,55881],{"class":379},[58,68778,383],{"class":75},[58,68780,8298],{"class":386},[58,68782,65051],{"class":75},[58,68784,72],{"class":71},[58,68786,403],{"class":75},[58,68788,68789,68791,68793],{"class":60,"line":17524},[58,68790,52414],{"class":75},[58,68792,72],{"class":71},[58,68794,403],{"class":75},[58,68796,68797,68799,68801],{"class":60,"line":17529},[58,68798,53055],{"class":75},[58,68800,72],{"class":71},[58,68802,403],{"class":75},[58,68804,68805,68807,68809],{"class":60,"line":17542},[58,68806,52782],{"class":75},[58,68808,52451],{"class":71},[58,68810,403],{"class":75},[58,68812,68813],{"class":60,"line":17547},[58,68814,68815],{"class":64},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[58,68817,68818],{"class":60,"line":17552},[58,68819,68820],{"class":64},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[58,68822,68823,68825,68827,68829,68831,68833,68835,68838],{"class":60,"line":17557},[58,68824,11866],{"class":92},[58,68826,61924],{"class":82},[58,68828,14208],{"class":92},[58,68830,55032],{"class":75},[58,68832,55035],{"class":379},[58,68834,793],{"class":75},[58,68836,68837],{"class":386},"'.tab-nav ul'",[58,68839,799],{"class":75},[58,68841,68842],{"class":60,"line":17570},[58,68843,68844],{"class":64},"    \u002F\u002F 2.添加事件\n",[58,68846,68847,68849,68851,68853,68855,68857,68859,68861,68863],{"class":60,"line":17575},[58,68848,67586],{"class":75},[58,68850,58447],{"class":379},[58,68852,793],{"class":75},[58,68854,58452],{"class":386},[58,68856,469],{"class":75},[58,68858,55085],{"class":92},[58,68860,2305],{"class":75},[58,68862,864],{"class":5862},[58,68864,13086],{"class":75},[58,68866,68867,68869,68871],{"class":60,"line":33277},[58,68868,58878],{"class":75},[58,68870,67642],{"class":379},[58,68872,67645],{"class":75},[58,68874,68875],{"class":60,"line":33283},[58,68876,68877],{"class":64},"      \u002F\u002Fe.targer是我们点击的对象\n",[58,68879,68880,68882,68884,68886,68889],{"class":60,"line":33289},[58,68881,55116],{"class":92},[58,68883,67666],{"class":75},[58,68885,55122],{"class":92},[58,68887,68888],{"class":386}," 'A'",[58,68890,13086],{"class":75},[58,68892,68893,68895,68897,68899,68902,68904,68906,68908,68910],{"class":60,"line":33295},[58,68894,52563],{"class":75},[58,68896,55035],{"class":379},[58,68898,793],{"class":75},[58,68900,68901],{"class":386},"'.active'",[58,68903,57637],{"class":75},[58,68905,57640],{"class":379},[58,68907,793],{"class":75},[58,68909,65346],{"class":386},[58,68911,799],{"class":75},[58,68913,68914,68917,68919,68921,68923],{"class":60,"line":33301},[58,68915,68916],{"class":75},"        e.target.classList.",[58,68918,5980],{"class":379},[58,68920,793],{"class":75},[58,68922,65346],{"class":386},[58,68924,799],{"class":75},[58,68926,68927],{"class":60,"line":33312},[58,68928,3046],{"emptyLinePlaceholder":720},[58,68930,68931],{"class":60,"line":33318},[58,68932,68933],{"class":64},"        \u002F\u002F 下面大盒子模块\n",[58,68935,68936],{"class":60,"line":33338},[58,68937,68938],{"class":64},"        \u002F\u002F console.log(e.target.dataset.id)\n",[58,68940,68941,68943,68945,68947,68949],{"class":60,"line":33344},[58,68942,61902],{"class":92},[58,68944,3678],{"class":82},[58,68946,14208],{"class":92},[58,68948,46210],{"class":92},[58,68950,68951],{"class":75},"e.target.dataset.id\n",[58,68953,68954,68956,68958,68960,68962,68964,68966,68968,68970],{"class":60,"line":33355},[58,68955,52563],{"class":75},[58,68957,55035],{"class":379},[58,68959,793],{"class":75},[58,68961,65394],{"class":386},[58,68963,57637],{"class":75},[58,68965,57640],{"class":379},[58,68967,793],{"class":75},[58,68969,65346],{"class":386},[58,68971,799],{"class":75},[58,68973,68974,68976,68978,68980,68982,68984,68986,68988,68990,68992,68994,68996,68998],{"class":60,"line":33361},[58,68975,52563],{"class":75},[58,68977,55035],{"class":379},[58,68979,793],{"class":75},[58,68981,65420],{"class":386},[58,68983,1227],{"class":75},[58,68985,46210],{"class":92},[58,68987,25762],{"class":82},[58,68989,57666],{"class":386},[58,68991,57637],{"class":75},[58,68993,5980],{"class":379},[58,68995,793],{"class":75},[58,68997,65346],{"class":386},[58,68999,799],{"class":75},[58,69001,69002],{"class":60,"line":33367},[58,69003,3046],{"emptyLinePlaceholder":720},[58,69005,69006],{"class":60,"line":33373},[58,69007,53036],{"class":75},[58,69009,69010],{"class":60,"line":33379},[58,69011,34105],{"class":75},[58,69013,69014,69016,69018],{"class":60,"line":33385},[58,69015,53055],{"class":75},[58,69017,52451],{"class":71},[58,69019,403],{"class":75},[58,69021,69022,69024,69026],{"class":60,"line":33391},[58,69023,52423],{"class":75},[58,69025,52438],{"class":71},[58,69027,403],{"class":75},[58,69029,69030],{"class":60,"line":33397},[58,69031,3046],{"emptyLinePlaceholder":720},[58,69033,69034,69036,69038],{"class":60,"line":33417},[58,69035,52423],{"class":75},[58,69037,51279],{"class":71},[58,69039,403],{"class":75},[114,69041,69043],{"id":69042},"_333-页面加载事件","3.3.3 页面加载事件",[19,69045,69046],{},[22,69047,69048],{},"load",[175,69050,69051],{},[119,69052],{"alt":53,"src":69053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[175,69055,69056],{},"window代表整个窗口，比document还要大",[175,69058,69059],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[175,69061,69062],{},"img.addEventListener('load', function () {",[175,69064,69065],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[175,69067,53102],{},[19,69069,69070],{"start":68},[22,69071,69072],{},"DOMContentLoaded",[175,69074,69075],{},[119,69076],{"alt":53,"src":69077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[175,69079,69080],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[114,69082,69084],{"id":69083},"_334-元素滚动事件","3.3.4 元素滚动事件",[175,69086,69087],{},[119,69088],{"alt":53,"src":69089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[175,69091,69092],{},[119,69093],{"alt":53,"src":69094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[175,69096,69097],{},[119,69098],{"alt":53,"src":69099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[175,69101,69102],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[175,69104,69105],{},"获得的是数字型数据，不带单位",[175,69107,69108],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[175,69110,69111],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[175,69113,69114],{},"它是通过document.documentElement来获取",[175,69116,69117],{},[119,69118],{"alt":53,"src":69119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[175,69121,69122],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[114,69124,69126],{"id":69125},"_335-页面缩放事件","3.3.5 页面缩放事件",[175,69128,69129],{},[119,69130],{"alt":53,"src":69131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[175,69133,69134],{},[119,69135],{"alt":53,"src":69136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[114,69138,69140],{"id":69139},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[175,69142,69143],{},[119,69144],{"alt":53,"src":69145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[175,69147,69148],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[175,69150,69151],{},[119,69152],{"alt":53,"src":69153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[175,69155,69156],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[175,69158,69159],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[175,69161,69162],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[175,69164,69165],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[175,69167,69168],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[175,69170,69171],{},[119,69172],{"alt":53,"src":69173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[175,69175,69176],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[175,69178,69179],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[175,69181,69182],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[175,69184,69185],{},"e.pageX-box.getBoundingClientRect()",[114,69187,69189],{"id":69188},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[175,69191,69192],{},[119,69193],{"alt":53,"src":69194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[175,69196,69197],{},"这个是相对于视口来说的，它是个方法，不是属性值",[114,69199,69201],{"id":69200},"_338-总结","3.3.8 总结",[175,69203,69204],{},[119,69205],{"alt":53,"src":69206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[175,69208,69209],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[175,69211,69212],{},"修改盒子的宽高只能通过width和height来实现",[114,69214,69216],{"id":69215},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[48,69218,69220],{"className":51277,"code":69219,"language":51279,"meta":53,"style":53},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[55,69221,69222,69227,69232,69237,69242],{"__ignoreMap":53},[58,69223,69224],{"class":60,"line":61},[58,69225,69226],{"class":75},"\u002F* 页面滑动 *\u002F\n",[58,69228,69229],{"class":60,"line":68},[58,69230,69231],{"class":75},"html {\n",[58,69233,69234],{"class":60,"line":79},[58,69235,69236],{"class":75},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[58,69238,69239],{"class":60,"line":105},[58,69240,69241],{"class":75},"  scroll-behavior: smooth;\n",[58,69243,69244],{"class":60,"line":627},[58,69245,108],{"class":75},[175,69247,69248],{},"默认是auto",[114,69250,69252],{"id":69251},"_3310-日期对象","3.3.10 日期对象",[22641,69254,69256],{"id":69255},"_33101-实例化","3.3.10.1 实例化",[175,69258,69259],{},[119,69260],{"alt":53,"src":69261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22641,69263,69265],{"id":69264},"_33102-时期对象方法","3.3.10.2 时期对象方法",[175,69267,69268],{},[119,69269],{"alt":53,"src":69270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[175,69272,69273],{},"月份+1",[175,69275,69276],{},"老外认为第一天为0，星期天",[175,69278,69279],{},"方法使用的时候必须要跟括号",[175,69281,69282],{},"快速获得日期",[175,69284,69285],{},"\u002F\u002F 得到年月日",[175,69287,69288],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[175,69290,69291],{},"\u002F\u002F 得到当地日期",[175,69293,69294],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[175,69296,69297],{},"\u002F\u002F 得到当地时间",[175,69299,69300],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[175,69302,69303],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[175,69305,69306],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52451,69308,69309],{},"\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",[175,69311,69312],{},"学会去封装函数！",[22641,69314,69316],{"id":69315},"_33103-时间戳","3.3.10.3 时间戳",[175,69318,69319],{},[119,69320],{"alt":53,"src":69321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[175,69323,69324],{},[119,69325],{"alt":53,"src":69326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[175,69328,69329],{},"三种方法记住一个就可以",[114,69331,69333],{"id":69332},"_3311-节点操作","3.3.11 节点操作",[22641,69335,69337],{"id":69336},"_33111-dom节点","3.3.11.1 DOM节点",[175,69339,69340],{},[119,69341],{"alt":53,"src":69342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[175,69344,69345],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22641,69347,69349],{"id":69348},"_33112-查找节点","3.3.11.2 查找节点",[175,69351,69352],{},"前边的document.querySelector()是获取的元素",[175,69354,69355],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[175,69357,69358],{},[119,69359],{"alt":53,"src":69360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[19,69362,69363],{},[22,69364,69365],{},"父节点",[175,69367,69368],{},[119,69369],{"alt":53,"src":69370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[19,69372,69373],{"start":68},[22,69374,69375],{},"子节点",[175,69377,69378],{},[119,69379],{"alt":53,"src":69380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[175,69382,69383],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[175,69385,69386],{},"children获得的是伪数组，是亲儿子",[19,69388,69389],{"start":79},[22,69390,69391],{},"兄弟节点",[175,69393,69394],{},[119,69395],{"alt":53,"src":69396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22641,69398,69400],{"id":69399},"_33113-增加节点","3.3.11.3 增加节点",[175,69402,69403],{},[119,69404],{"alt":53,"src":69405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[175,69407,69408],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[175,69410,69411],{},[119,69412],{"alt":53,"src":69413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[175,69415,69416],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[175,69418,69419],{},"下面是写法的部分展示，就按照下边的格式来写",[175,69421,69422],{},"例：",[52451,69424,69425],{},"\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",[175,69427,69428],{},[119,69429],{"alt":53,"src":69430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[175,69432,69433],{},"false只克隆标签，里边的内容不会克隆过来",[48,69435,69437],{"className":51277,"code":69436,"language":51279,"meta":53,"style":53},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[55,69438,69439],{"__ignoreMap":53},[58,69440,69441],{"class":60,"line":61},[58,69442,69436],{"class":75},[22641,69444,69446],{"id":69445},"_33114-删除节点","3.3.11.4 删除节点",[175,69448,69449],{},[119,69450],{"alt":53,"src":69451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[175,69453,69454],{},"父亲删儿子",[175,69456,69457],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[114,69459,69461],{"id":69460},"_3312-m端事件","3.3.12 M端事件",[175,69463,69464],{},"M端就是移动端",[175,69466,69467],{},[119,69468],{"alt":53,"src":69469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[114,69471,69473],{"id":69472},"_3313-插件","3.3.13 插件",[175,69475,69476],{},"要熟悉官网！！！",[175,69478,69479],{},[376,69480,69481],{"href":69481,"rel":69482},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24508],[175,69484,69485],{},[376,69486,69487],{"href":69487,"rel":69488},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24508],[114,69490,69492],{"id":69491},"_3314-学生信息表","3.3.14 学生信息表",[19,69494,69495,69498,69501,69504,69507,69510,69513,69516],{},[22,69496,69497],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[22,69499,69500],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[22,69502,69503],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[22,69505,69506],{},"用好表单元素自带的属性，value,name等",[22,69508,69509],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[22,69511,69512],{},"不要忘记事件对象",[22,69514,69515],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[22,69517,69518],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[175,69520,69521],{},"结构：",[48,69523,69525],{"className":51277,"code":69524,"language":51279,"meta":53,"style":53},"\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",[55,69526,69527,69537,69551,69555,69563,69577,69597,69618,69631,69655,69663,69667,69675,69688,69709,69737,69765,69770,69792,69812,69831,69839,69867,69889,69909,69929,69949,69969,69989,69997,70017,70025,70029,70042,70050,70058,70066,70079,70092,70105,70118,70131,70144,70157,70165,70173,70181,70186,70191,70196,70201,70206,70211,70216,70221,70226,70231,70236,70241,70246,70254,70262,70270,70274,70294,70313,70333,70353,70373,70393,70397,70402,70422,70427,70437,70442,70447,70467,70489,70494,70504,70508,70512,70517,70522,70551,70565,70580,70584,70588,70592,70597,70608,70621,70626,70631,70636,70641,70646,70650,70655,70660,70669,70674,70679,70691,70696,70703,70707,70712,70722,70727,70737,70742,70770,70791,70801,70821,70839,70856,70873,70890,70907,70911,70921,70926,70931,70936,70947,70951,70955,70959,70964,70969,70990,71002,71007,71012,71017,71031,71036,71043,71047,71051,71059,71063,71071,71075],{"__ignoreMap":53},[58,69528,69529,69531,69533,69535],{"class":60,"line":61},[58,69530,51941],{"class":75},[58,69532,51944],{"class":71},[58,69534,51947],{"class":379},[58,69536,403],{"class":75},[58,69538,69539,69541,69543,69545,69547,69549],{"class":60,"line":68},[58,69540,373],{"class":75},[58,69542,51279],{"class":71},[58,69544,51958],{"class":379},[58,69546,383],{"class":75},[58,69548,51963],{"class":386},[58,69550,403],{"class":75},[58,69552,69553],{"class":60,"line":79},[58,69554,3046],{"emptyLinePlaceholder":720},[58,69556,69557,69559,69561],{"class":60,"line":105},[58,69558,373],{"class":75},[58,69560,51976],{"class":71},[58,69562,403],{"class":75},[58,69564,69565,69567,69569,69571,69573,69575],{"class":60,"line":627},[58,69566,52782],{"class":75},[58,69568,51986],{"class":71},[58,69570,51989],{"class":379},[58,69572,383],{"class":75},[58,69574,51994],{"class":386},[58,69576,59761],{"class":75},[58,69578,69579,69581,69583,69585,69587,69589,69591,69593,69595],{"class":60,"line":509},[58,69580,52782],{"class":75},[58,69582,51986],{"class":71},[58,69584,15564],{"class":379},[58,69586,383],{"class":75},[58,69588,52033],{"class":386},[58,69590,52013],{"class":379},[58,69592,383],{"class":75},[58,69594,52040],{"class":386},[58,69596,59761],{"class":75},[58,69598,69599,69601,69603,69605,69607,69609,69611,69613,69616],{"class":60,"line":559},[58,69600,52782],{"class":75},[58,69602,51986],{"class":71},[58,69604,52005],{"class":379},[58,69606,383],{"class":75},[58,69608,52010],{"class":386},[58,69610,52013],{"class":379},[58,69612,383],{"class":75},[58,69614,69615],{"class":386},"\"ie=edge\"",[58,69617,59761],{"class":75},[58,69619,69620,69622,69624,69627,69629],{"class":60,"line":654},[58,69621,52782],{"class":75},[58,69623,52049],{"class":71},[58,69625,69626],{"class":75},">学生信息管理\u003C\u002F",[58,69628,52049],{"class":71},[58,69630,403],{"class":75},[58,69632,69633,69635,69638,69641,69643,69646,69648,69650,69653],{"class":60,"line":671},[58,69634,52782],{"class":75},[58,69636,69637],{"class":71},"link",[58,69639,69640],{"class":379}," rel",[58,69642,383],{"class":75},[58,69644,69645],{"class":386},"\"stylesheet\"",[58,69647,380],{"class":379},[58,69649,383],{"class":75},[58,69651,69652],{"class":386},"\"css\u002Findex.css\"",[58,69654,59761],{"class":75},[58,69656,69657,69659,69661],{"class":60,"line":677},[58,69658,52423],{"class":75},[58,69660,51976],{"class":71},[58,69662,403],{"class":75},[58,69664,69665],{"class":60,"line":2260},[58,69666,3046],{"emptyLinePlaceholder":720},[58,69668,69669,69671,69673],{"class":60,"line":694},[58,69670,373],{"class":75},[58,69672,52438],{"class":71},[58,69674,403],{"class":75},[58,69676,69677,69679,69681,69684,69686],{"class":60,"line":2270},[58,69678,52782],{"class":75},[58,69680,10],{"class":71},[58,69682,69683],{"class":75},">新增学员\u003C\u002F",[58,69685,10],{"class":71},[58,69687,403],{"class":75},[58,69689,69690,69692,69694,69696,69698,69700,69703,69705,69707],{"class":60,"line":2275},[58,69691,52782],{"class":75},[58,69693,67257],{"class":71},[58,69695,54124],{"class":379},[58,69697,383],{"class":75},[58,69699,63296],{"class":386},[58,69701,69702],{"class":379}," autocomplete",[58,69704,383],{"class":75},[58,69706,32420],{"class":386},[58,69708,403],{"class":75},[58,69710,69711,69714,69716,69718,69720,69722,69724,69726,69729,69731,69733,69735],{"class":60,"line":2289},[58,69712,69713],{"class":75},"    姓名：\u003C",[58,69715,54457],{"class":71},[58,69717,54460],{"class":379},[58,69719,383],{"class":75},[58,69721,63331],{"class":386},[58,69723,54124],{"class":379},[58,69725,383],{"class":75},[58,69727,69728],{"class":386},"\"uname\"",[58,69730,15564],{"class":379},[58,69732,383],{"class":75},[58,69734,69728],{"class":386},[58,69736,59761],{"class":75},[58,69738,69739,69742,69744,69746,69748,69750,69752,69754,69757,69759,69761,69763],{"class":60,"line":2294},[58,69740,69741],{"class":75},"    年龄：\u003C",[58,69743,54457],{"class":71},[58,69745,54460],{"class":379},[58,69747,383],{"class":75},[58,69749,63331],{"class":386},[58,69751,54124],{"class":379},[58,69753,383],{"class":75},[58,69755,69756],{"class":386},"\"age\"",[58,69758,15564],{"class":379},[58,69760,383],{"class":75},[58,69762,69756],{"class":386},[58,69764,59761],{"class":75},[58,69766,69767],{"class":60,"line":2300},[58,69768,69769],{"class":75},"    性别:\n",[58,69771,69772,69774,69777,69779,69781,69784,69786,69788,69790],{"class":60,"line":2321},[58,69773,51983],{"class":75},[58,69775,69776],{"class":71},"select",[58,69778,15564],{"class":379},[58,69780,383],{"class":75},[58,69782,69783],{"class":386},"\"gender\"",[58,69785,54124],{"class":379},[58,69787,383],{"class":75},[58,69789,69783],{"class":386},[58,69791,403],{"class":75},[58,69793,69794,69796,69799,69801,69803,69805,69808,69810],{"class":60,"line":2326},[58,69795,55868],{"class":75},[58,69797,69798],{"class":71},"option",[58,69800,67283],{"class":379},[58,69802,383],{"class":75},[58,69804,10606],{"class":386},[58,69806,69807],{"class":75},">男\u003C\u002F",[58,69809,69798],{"class":71},[58,69811,403],{"class":75},[58,69813,69814,69816,69818,69820,69822,69824,69827,69829],{"class":60,"line":2340},[58,69815,55868],{"class":75},[58,69817,69798],{"class":71},[58,69819,67283],{"class":379},[58,69821,383],{"class":75},[58,69823,10675],{"class":386},[58,69825,69826],{"class":75},">女\u003C\u002F",[58,69828,69798],{"class":71},[58,69830,403],{"class":75},[58,69832,69833,69835,69837],{"class":60,"line":2345},[58,69834,52414],{"class":75},[58,69836,69776],{"class":71},[58,69838,403],{"class":75},[58,69840,69841,69844,69846,69848,69850,69852,69854,69856,69859,69861,69863,69865],{"class":60,"line":2374},[58,69842,69843],{"class":75},"    薪资：\u003C",[58,69845,54457],{"class":71},[58,69847,54460],{"class":379},[58,69849,383],{"class":75},[58,69851,63331],{"class":386},[58,69853,54124],{"class":379},[58,69855,383],{"class":75},[58,69857,69858],{"class":386},"\"salary\"",[58,69860,15564],{"class":379},[58,69862,383],{"class":75},[58,69864,69858],{"class":386},[58,69866,59761],{"class":75},[58,69868,69869,69872,69874,69876,69878,69881,69883,69885,69887],{"class":60,"line":2379},[58,69870,69871],{"class":75},"    就业城市：\u003C",[58,69873,69776],{"class":71},[58,69875,15564],{"class":379},[58,69877,383],{"class":75},[58,69879,69880],{"class":386},"\"city\"",[58,69882,54124],{"class":379},[58,69884,383],{"class":75},[58,69886,69880],{"class":386},[58,69888,403],{"class":75},[58,69890,69891,69893,69895,69897,69899,69902,69905,69907],{"class":60,"line":2396},[58,69892,55868],{"class":75},[58,69894,69798],{"class":71},[58,69896,67283],{"class":379},[58,69898,383],{"class":75},[58,69900,69901],{"class":386},"\"北京\"",[58,69903,69904],{"class":75},">北京\u003C\u002F",[58,69906,69798],{"class":71},[58,69908,403],{"class":75},[58,69910,69911,69913,69915,69917,69919,69922,69925,69927],{"class":60,"line":2401},[58,69912,55868],{"class":75},[58,69914,69798],{"class":71},[58,69916,67283],{"class":379},[58,69918,383],{"class":75},[58,69920,69921],{"class":386},"\"上海\"",[58,69923,69924],{"class":75},">上海\u003C\u002F",[58,69926,69798],{"class":71},[58,69928,403],{"class":75},[58,69930,69931,69933,69935,69937,69939,69942,69945,69947],{"class":60,"line":2406},[58,69932,55868],{"class":75},[58,69934,69798],{"class":71},[58,69936,67283],{"class":379},[58,69938,383],{"class":75},[58,69940,69941],{"class":386},"\"广州\"",[58,69943,69944],{"class":75},">广州\u003C\u002F",[58,69946,69798],{"class":71},[58,69948,403],{"class":75},[58,69950,69951,69953,69955,69957,69959,69962,69965,69967],{"class":60,"line":2411},[58,69952,55868],{"class":75},[58,69954,69798],{"class":71},[58,69956,67283],{"class":379},[58,69958,383],{"class":75},[58,69960,69961],{"class":386},"\"深圳\"",[58,69963,69964],{"class":75},">深圳\u003C\u002F",[58,69966,69798],{"class":71},[58,69968,403],{"class":75},[58,69970,69971,69973,69975,69977,69979,69982,69985,69987],{"class":60,"line":2425},[58,69972,55868],{"class":75},[58,69974,69798],{"class":71},[58,69976,67283],{"class":379},[58,69978,383],{"class":75},[58,69980,69981],{"class":386},"\"曹县\"",[58,69983,69984],{"class":75},">曹县\u003C\u002F",[58,69986,69798],{"class":71},[58,69988,403],{"class":75},[58,69990,69991,69993,69995],{"class":60,"line":2430},[58,69992,52414],{"class":75},[58,69994,69776],{"class":71},[58,69996,403],{"class":75},[58,69998,69999,70001,70003,70005,70007,70010,70013,70015],{"class":60,"line":3223},[58,70000,51983],{"class":75},[58,70002,54523],{"class":71},[58,70004,54124],{"class":379},[58,70006,383],{"class":75},[58,70008,70009],{"class":386},"\"add\"",[58,70011,70012],{"class":75},">录入\u003C\u002F",[58,70014,54523],{"class":71},[58,70016,403],{"class":75},[58,70018,70019,70021,70023],{"class":60,"line":3237},[58,70020,53055],{"class":75},[58,70022,67257],{"class":71},[58,70024,403],{"class":75},[58,70026,70027],{"class":60,"line":3245},[58,70028,3046],{"emptyLinePlaceholder":720},[58,70030,70031,70033,70035,70038,70040],{"class":60,"line":3250},[58,70032,52782],{"class":75},[58,70034,10],{"class":71},[58,70036,70037],{"class":75},">就业榜\u003C\u002F",[58,70039,10],{"class":71},[58,70041,403],{"class":75},[58,70043,70044,70046,70048],{"class":60,"line":3256},[58,70045,52782],{"class":75},[58,70047,926],{"class":71},[58,70049,403],{"class":75},[58,70051,70052,70054,70056],{"class":60,"line":3262},[58,70053,51983],{"class":75},[58,70055,929],{"class":71},[58,70057,403],{"class":75},[58,70059,70060,70062,70064],{"class":60,"line":3267},[58,70061,55868],{"class":75},[58,70063,932],{"class":71},[58,70065,403],{"class":75},[58,70067,70068,70070,70072,70075,70077],{"class":60,"line":8594},[58,70069,55936],{"class":75},[58,70071,935],{"class":71},[58,70073,70074],{"class":75},">序号\u003C\u002F",[58,70076,935],{"class":71},[58,70078,403],{"class":75},[58,70080,70081,70083,70085,70088,70090],{"class":60,"line":8618},[58,70082,55936],{"class":75},[58,70084,935],{"class":71},[58,70086,70087],{"class":75},">姓名\u003C\u002F",[58,70089,935],{"class":71},[58,70091,403],{"class":75},[58,70093,70094,70096,70098,70101,70103],{"class":60,"line":8623},[58,70095,55936],{"class":75},[58,70097,935],{"class":71},[58,70099,70100],{"class":75},">年龄\u003C\u002F",[58,70102,935],{"class":71},[58,70104,403],{"class":75},[58,70106,70107,70109,70111,70114,70116],{"class":60,"line":8629},[58,70108,55936],{"class":75},[58,70110,935],{"class":71},[58,70112,70113],{"class":75},">性别\u003C\u002F",[58,70115,935],{"class":71},[58,70117,403],{"class":75},[58,70119,70120,70122,70124,70127,70129],{"class":60,"line":8656},[58,70121,55936],{"class":75},[58,70123,935],{"class":71},[58,70125,70126],{"class":75},">薪资\u003C\u002F",[58,70128,935],{"class":71},[58,70130,403],{"class":75},[58,70132,70133,70135,70137,70140,70142],{"class":60,"line":8661},[58,70134,55936],{"class":75},[58,70136,935],{"class":71},[58,70138,70139],{"class":75},">就业城市\u003C\u002F",[58,70141,935],{"class":71},[58,70143,403],{"class":75},[58,70145,70146,70148,70150,70153,70155],{"class":60,"line":8667},[58,70147,55936],{"class":75},[58,70149,935],{"class":71},[58,70151,70152],{"class":75},">操作\u003C\u002F",[58,70154,935],{"class":71},[58,70156,403],{"class":75},[58,70158,70159,70161,70163],{"class":60,"line":8679},[58,70160,56041],{"class":75},[58,70162,932],{"class":71},[58,70164,403],{"class":75},[58,70166,70167,70169,70171],{"class":60,"line":8691},[58,70168,52414],{"class":75},[58,70170,929],{"class":71},[58,70172,403],{"class":75},[58,70174,70175,70177,70179],{"class":60,"line":8703},[58,70176,51983],{"class":75},[58,70178,972],{"class":71},[58,70180,403],{"class":75},[58,70182,70183],{"class":60,"line":10361},[58,70184,70185],{"class":64},"      \u003C!-- \n",[58,70187,70188],{"class":60,"line":10386},[58,70189,70190],{"class":64},"        \u003Ctr>\n",[58,70192,70193],{"class":60,"line":10409},[58,70194,70195],{"class":64},"          \u003Ctd>1001\u003C\u002Ftd>\n",[58,70197,70198],{"class":60,"line":10433},[58,70199,70200],{"class":64},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[58,70202,70203],{"class":60,"line":10438},[58,70204,70205],{"class":64},"          \u003Ctd>19\u003C\u002Ftd>\n",[58,70207,70208],{"class":60,"line":10443},[58,70209,70210],{"class":64},"          \u003Ctd>男\u003C\u002Ftd>\n",[58,70212,70213],{"class":60,"line":10448},[58,70214,70215],{"class":64},"          \u003Ctd>15000\u003C\u002Ftd>\n",[58,70217,70218],{"class":60,"line":10457},[58,70219,70220],{"class":64},"          \u003Ctd>上海\u003C\u002Ftd>\n",[58,70222,70223],{"class":60,"line":10462},[58,70224,70225],{"class":64},"          \u003Ctd>\n",[58,70227,70228],{"class":60,"line":10468},[58,70229,70230],{"class":64},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[58,70232,70233],{"class":60,"line":10489},[58,70234,70235],{"class":64},"          \u003C\u002Ftd>\n",[58,70237,70238],{"class":60,"line":10495},[58,70239,70240],{"class":64},"        \u003C\u002Ftr> \n",[58,70242,70243],{"class":60,"line":10509},[58,70244,70245],{"class":64},"        -->\n",[58,70247,70248,70250,70252],{"class":60,"line":10515},[58,70249,52414],{"class":75},[58,70251,972],{"class":71},[58,70253,403],{"class":75},[58,70255,70256,70258,70260],{"class":60,"line":10542},[58,70257,53055],{"class":75},[58,70259,926],{"class":71},[58,70261,403],{"class":75},[58,70263,70264,70266,70268],{"class":60,"line":10551},[58,70265,52782],{"class":75},[58,70267,52451],{"class":71},[58,70269,403],{"class":75},[58,70271,70272],{"class":60,"line":10557},[58,70273,60592],{"class":64},[58,70275,70276,70278,70281,70283,70285,70287,70289,70292],{"class":60,"line":10565},[58,70277,11866],{"class":92},[58,70279,70280],{"class":82}," uname",[58,70282,14208],{"class":92},[58,70284,55032],{"class":75},[58,70286,55035],{"class":379},[58,70288,793],{"class":75},[58,70290,70291],{"class":386},"'.uname'",[58,70293,799],{"class":75},[58,70295,70296,70298,70300,70302,70304,70306,70308,70311],{"class":60,"line":10570},[58,70297,11866],{"class":92},[58,70299,16332],{"class":82},[58,70301,14208],{"class":92},[58,70303,55032],{"class":75},[58,70305,55035],{"class":379},[58,70307,793],{"class":75},[58,70309,70310],{"class":386},"'.age'",[58,70312,799],{"class":75},[58,70314,70315,70317,70320,70322,70324,70326,70328,70331],{"class":60,"line":17247},[58,70316,11866],{"class":92},[58,70318,70319],{"class":82}," gender",[58,70321,14208],{"class":92},[58,70323,55032],{"class":75},[58,70325,55035],{"class":379},[58,70327,793],{"class":75},[58,70329,70330],{"class":386},"'.gender'",[58,70332,799],{"class":75},[58,70334,70335,70337,70340,70342,70344,70346,70348,70351],{"class":60,"line":17253},[58,70336,11866],{"class":92},[58,70338,70339],{"class":82}," salary",[58,70341,14208],{"class":92},[58,70343,55032],{"class":75},[58,70345,55035],{"class":379},[58,70347,793],{"class":75},[58,70349,70350],{"class":386},"'.salary'",[58,70352,799],{"class":75},[58,70354,70355,70357,70360,70362,70364,70366,70368,70371],{"class":60,"line":17276},[58,70356,11866],{"class":92},[58,70358,70359],{"class":82}," city",[58,70361,14208],{"class":92},[58,70363,55032],{"class":75},[58,70365,55035],{"class":379},[58,70367,793],{"class":75},[58,70369,70370],{"class":386},"'.city'",[58,70372,799],{"class":75},[58,70374,70375,70377,70380,70382,70384,70386,70388,70391],{"class":60,"line":17282},[58,70376,11866],{"class":92},[58,70378,70379],{"class":82}," tbody",[58,70381,14208],{"class":92},[58,70383,55032],{"class":75},[58,70385,55035],{"class":379},[58,70387,793],{"class":75},[58,70389,70390],{"class":386},"'tbody'",[58,70392,799],{"class":75},[58,70394,70395],{"class":60,"line":17305},[58,70396,3046],{"emptyLinePlaceholder":720},[58,70398,70399],{"class":60,"line":17319},[58,70400,70401],{"class":64},"    \u002F\u002F 获取所有带有name属性的元素\n",[58,70403,70404,70406,70409,70411,70413,70415,70417,70420],{"class":60,"line":17339},[58,70405,11866],{"class":92},[58,70407,70408],{"class":82}," items",[58,70410,14208],{"class":92},[58,70412,55032],{"class":75},[58,70414,56315],{"class":379},[58,70416,793],{"class":75},[58,70418,70419],{"class":386},"'[name]'",[58,70421,799],{"class":75},[58,70423,70424],{"class":60,"line":17345},[58,70425,70426],{"class":64},"    \u002F\u002F 声明一个空的数组\n",[58,70428,70429,70431,70433,70435],{"class":60,"line":17356},[58,70430,11866],{"class":92},[58,70432,58329],{"class":82},[58,70434,14208],{"class":92},[58,70436,52476],{"class":75},[58,70438,70439],{"class":60,"line":17379},[58,70440,70441],{"class":64},"    \u002F\u002F 1.录入模块\n",[58,70443,70444],{"class":60,"line":17401},[58,70445,70446],{"class":64},"    \u002F\u002F 1.1这是一个表单提交事件\n",[58,70448,70449,70451,70454,70456,70458,70460,70462,70465],{"class":60,"line":17406},[58,70450,11866],{"class":92},[58,70452,70453],{"class":82}," info",[58,70455,14208],{"class":92},[58,70457,55032],{"class":75},[58,70459,55035],{"class":379},[58,70461,793],{"class":75},[58,70463,70464],{"class":386},"'.info'",[58,70466,799],{"class":75},[58,70468,70469,70472,70474,70476,70479,70481,70483,70485,70487],{"class":60,"line":17412},[58,70470,70471],{"class":75},"    info.",[58,70473,58447],{"class":379},[58,70475,793],{"class":75},[58,70477,70478],{"class":386},"'submit'",[58,70480,469],{"class":75},[58,70482,55085],{"class":92},[58,70484,2305],{"class":75},[58,70486,864],{"class":5862},[58,70488,13086],{"class":75},[58,70490,70491],{"class":60,"line":17426},[58,70492,70493],{"class":64},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[58,70495,70496,70499,70502],{"class":60,"line":17439},[58,70497,70498],{"class":75},"      e.",[58,70500,70501],{"class":379},"preventDefault",[58,70503,2622],{"class":75},[58,70505,70506],{"class":60,"line":17444},[58,70507,60646],{"class":64},[58,70509,70510],{"class":60,"line":17458},[58,70511,3046],{"emptyLinePlaceholder":720},[58,70513,70514],{"class":60,"line":17463},[58,70515,70516],{"class":64},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[58,70518,70519],{"class":60,"line":17469},[58,70520,70521],{"class":64},"      \u002F\u002F 先遍历循环\n",[58,70523,70524,70526,70528,70530,70532,70534,70536,70538,70540,70543,70545,70547,70549],{"class":60,"line":17474},[58,70525,52922],{"class":92},[58,70527,2305],{"class":75},[58,70529,52485],{"class":92},[58,70531,10083],{"class":75},[58,70533,383],{"class":92},[58,70535,4739],{"class":82},[58,70537,10090],{"class":75},[58,70539,373],{"class":92},[58,70541,70542],{"class":75}," items.",[58,70544,52606],{"class":82},[58,70546,3860],{"class":75},[58,70548,2938],{"class":92},[58,70550,13086],{"class":75},[58,70552,70553,70555,70558,70560,70563],{"class":60,"line":17488},[58,70554,3143],{"class":92},[58,70556,70557],{"class":75}," (items[i].value ",[58,70559,55122],{"class":92},[58,70561,70562],{"class":386}," ''",[58,70564,13086],{"class":75},[58,70566,70567,70570,70573,70575,70578],{"class":60,"line":17493},[58,70568,70569],{"class":92},"          return",[58,70571,70572],{"class":379}," alert",[58,70574,793],{"class":75},[58,70576,70577],{"class":386},"'输入内容不能为空'",[58,70579,799],{"class":75},[58,70581,70582],{"class":60,"line":17498},[58,70583,3175],{"class":75},[58,70585,70586],{"class":60,"line":17512},[58,70587,53036],{"class":75},[58,70589,70590],{"class":60,"line":17524},[58,70591,3046],{"emptyLinePlaceholder":720},[58,70593,70594],{"class":60,"line":17529},[58,70595,70596],{"class":64},"      \u002F\u002F 创建新的对象\n",[58,70598,70599,70601,70604,70606],{"class":60,"line":17542},[58,70600,58862],{"class":92},[58,70602,70603],{"class":82}," obj",[58,70605,14208],{"class":92},[58,70607,76],{"class":75},[58,70609,70610,70613,70615,70617,70619],{"class":60,"line":17547},[58,70611,70612],{"class":75},"        stuID: arr.",[58,70614,52606],{"class":82},[58,70616,46210],{"class":92},[58,70618,25762],{"class":82},[58,70620,32110],{"class":75},[58,70622,70623],{"class":60,"line":17552},[58,70624,70625],{"class":75},"        uname: uname.value,\n",[58,70627,70628],{"class":60,"line":17557},[58,70629,70630],{"class":75},"        age: age.value,\n",[58,70632,70633],{"class":60,"line":17570},[58,70634,70635],{"class":75},"        gender: gender.value,\n",[58,70637,70638],{"class":60,"line":17575},[58,70639,70640],{"class":75},"        salary: salary.value,\n",[58,70642,70643],{"class":60,"line":33277},[58,70644,70645],{"class":75},"        city: city.value\n",[58,70647,70648],{"class":60,"line":33283},[58,70649,53036],{"class":75},[58,70651,70652],{"class":60,"line":33289},[58,70653,70654],{"class":64},"      \u002F\u002F console.log(obj);\n",[58,70656,70657],{"class":60,"line":33295},[58,70658,70659],{"class":64},"      \u002F\u002F 追加到数组里面\n",[58,70661,70662,70664,70666],{"class":60,"line":33301},[58,70663,58641],{"class":75},[58,70665,52522],{"class":379},[58,70667,70668],{"class":75},"(obj)\n",[58,70670,70671],{"class":60,"line":33312},[58,70672,70673],{"class":64},"      \u002F\u002F console.log(arr);\n",[58,70675,70676],{"class":60,"line":33318},[58,70677,70678],{"class":64},"      \u002F\u002F 清空表单  reset重置表单\n",[58,70680,70681,70684,70686,70689],{"class":60,"line":33338},[58,70682,70683],{"class":82},"      this",[58,70685,1344],{"class":75},[58,70687,70688],{"class":379},"reset",[58,70690,2622],{"class":75},[58,70692,70693],{"class":60,"line":33344},[58,70694,70695],{"class":64},"      \u002F\u002F 调用渲染函数\n",[58,70697,70698,70701],{"class":60,"line":33355},[58,70699,70700],{"class":379},"      render",[58,70702,2622],{"class":75},[58,70704,70705],{"class":60,"line":33361},[58,70706,34105],{"class":75},[58,70708,70709],{"class":60,"line":33367},[58,70710,70711],{"class":64},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[58,70713,70714,70717,70720],{"class":60,"line":33373},[58,70715,70716],{"class":92},"    function",[58,70718,70719],{"class":379}," render",[58,70721,11498],{"class":75},[58,70723,70724],{"class":60,"line":33379},[58,70725,70726],{"class":64},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[58,70728,70729,70732,70734],{"class":60,"line":33385},[58,70730,70731],{"class":75},"      tbody.innerHTML ",[58,70733,383],{"class":92},[58,70735,70736],{"class":386}," ''\n",[58,70738,70739],{"class":60,"line":33391},[58,70740,70741],{"class":64},"      \u002F\u002F 遍历数组\n",[58,70743,70744,70746,70748,70750,70752,70754,70756,70758,70760,70762,70764,70766,70768],{"class":60,"line":33397},[58,70745,52922],{"class":92},[58,70747,2305],{"class":75},[58,70749,52485],{"class":92},[58,70751,10083],{"class":75},[58,70753,383],{"class":92},[58,70755,4739],{"class":82},[58,70757,10090],{"class":75},[58,70759,373],{"class":92},[58,70761,52603],{"class":75},[58,70763,52606],{"class":82},[58,70765,3860],{"class":75},[58,70767,2938],{"class":92},[58,70769,13086],{"class":75},[58,70771,70772,70774,70777,70779,70781,70784,70786,70789],{"class":60,"line":33417},[58,70773,61902],{"class":92},[58,70775,70776],{"class":82}," tr",[58,70778,14208],{"class":92},[58,70780,55032],{"class":75},[58,70782,70783],{"class":379},"createElement",[58,70785,793],{"class":75},[58,70787,70788],{"class":386},"'tr'",[58,70790,799],{"class":75},[58,70792,70793,70796,70798],{"class":60,"line":33423},[58,70794,70795],{"class":75},"        tr.innerHTML ",[58,70797,383],{"class":92},[58,70799,70800],{"class":386}," `\n",[58,70802,70803,70806,70808,70810,70812,70815,70818],{"class":60,"line":33439},[58,70804,70805],{"class":386},"        \u003Ctd>${",[58,70807,4526],{"class":75},[58,70809,1675],{"class":386},[58,70811,1227],{"class":75},[58,70813,70814],{"class":386},"].",[58,70816,70817],{"class":75},"stuID",[58,70819,70820],{"class":386},"}\u003C\u002Ftd>\n",[58,70822,70823,70826,70828,70830,70832,70834,70837],{"class":60,"line":33445},[58,70824,70825],{"class":386},"          \u003Ctd>${",[58,70827,4526],{"class":75},[58,70829,1675],{"class":386},[58,70831,1227],{"class":75},[58,70833,70814],{"class":386},[58,70835,70836],{"class":75},"uname",[58,70838,70820],{"class":386},[58,70840,70841,70843,70845,70847,70849,70851,70854],{"class":60,"line":33459},[58,70842,70825],{"class":386},[58,70844,4526],{"class":75},[58,70846,1675],{"class":386},[58,70848,1227],{"class":75},[58,70850,70814],{"class":386},[58,70852,70853],{"class":75},"age",[58,70855,70820],{"class":386},[58,70857,70858,70860,70862,70864,70866,70868,70871],{"class":60,"line":33465},[58,70859,70825],{"class":386},[58,70861,4526],{"class":75},[58,70863,1675],{"class":386},[58,70865,1227],{"class":75},[58,70867,70814],{"class":386},[58,70869,70870],{"class":75},"gender",[58,70872,70820],{"class":386},[58,70874,70875,70877,70879,70881,70883,70885,70888],{"class":60,"line":33480},[58,70876,70825],{"class":386},[58,70878,4526],{"class":75},[58,70880,1675],{"class":386},[58,70882,1227],{"class":75},[58,70884,70814],{"class":386},[58,70886,70887],{"class":75},"salary",[58,70889,70820],{"class":386},[58,70891,70892,70894,70896,70898,70900,70902,70905],{"class":60,"line":33486},[58,70893,70825],{"class":386},[58,70895,4526],{"class":75},[58,70897,1675],{"class":386},[58,70899,1227],{"class":75},[58,70901,70814],{"class":386},[58,70903,70904],{"class":75},"city",[58,70906,70820],{"class":386},[58,70908,70909],{"class":60,"line":33495},[58,70910,70225],{"class":386},[58,70912,70913,70916,70918],{"class":60,"line":33501},[58,70914,70915],{"class":386},"            \u003Ca href=\"javascript:\" data-id=${",[58,70917,1227],{"class":75},[58,70919,70920],{"class":386},"}>删除\u003C\u002Fa>\n",[58,70922,70923],{"class":60,"line":33510},[58,70924,70925],{"class":386},"          \u003C\u002Ftd> \n",[58,70927,70928],{"class":60,"line":33516},[58,70929,70930],{"class":386},"          `\n",[58,70932,70933],{"class":60,"line":33522},[58,70934,70935],{"class":64},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[58,70937,70938,70941,70944],{"class":60,"line":33531},[58,70939,70940],{"class":75},"        tbody.",[58,70942,70943],{"class":379},"appendChild",[58,70945,70946],{"class":75},"(tr)\n",[58,70948,70949],{"class":60,"line":33537},[58,70950,53036],{"class":75},[58,70952,70953],{"class":60,"line":33548},[58,70954,2833],{"class":75},[58,70956,70957],{"class":60,"line":33554},[58,70958,3046],{"emptyLinePlaceholder":720},[58,70960,70961],{"class":60,"line":33573},[58,70962,70963],{"class":64},"    \u002F\u002F 3.删除委托\n",[58,70965,70966],{"class":60,"line":33579},[58,70967,70968],{"class":64},"    \u002F\u002F 3.1 事件委托 tbody\n",[58,70970,70971,70974,70976,70978,70980,70982,70984,70986,70988],{"class":60,"line":33590},[58,70972,70973],{"class":75},"    tbody.",[58,70975,58447],{"class":379},[58,70977,793],{"class":75},[58,70979,58452],{"class":386},[58,70981,469],{"class":75},[58,70983,55085],{"class":92},[58,70985,2305],{"class":75},[58,70987,864],{"class":5862},[58,70989,13086],{"class":75},[58,70991,70992,70994,70996,70998,71000],{"class":60,"line":33596},[58,70993,55116],{"class":92},[58,70995,67666],{"class":75},[58,70997,55122],{"class":92},[58,70999,68888],{"class":386},[58,71001,13086],{"class":75},[58,71003,71004],{"class":60,"line":33616},[58,71005,71006],{"class":64},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[58,71008,71009],{"class":60,"line":33632},[58,71010,71011],{"class":64},"        \u002F\u002F console.log(e.target.dataset.id);\n",[58,71013,71014],{"class":60,"line":33638},[58,71015,71016],{"class":64},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[58,71018,71019,71022,71024,71027,71029],{"class":60,"line":33652},[58,71020,71021],{"class":75},"        arr.",[58,71023,58644],{"class":379},[58,71025,71026],{"class":75},"(e.target.dataset.id, ",[58,71028,89],{"class":82},[58,71030,799],{"class":75},[58,71032,71033],{"class":60,"line":33658},[58,71034,71035],{"class":64},"        \u002F\u002F 重新渲染一次\n",[58,71037,71038,71041],{"class":60,"line":33664},[58,71039,71040],{"class":379},"        render",[58,71042,2622],{"class":75},[58,71044,71045],{"class":60,"line":33675},[58,71046,53036],{"class":75},[58,71048,71049],{"class":60,"line":33681},[58,71050,34105],{"class":75},[58,71052,71053,71055,71057],{"class":60,"line":33687},[58,71054,53055],{"class":75},[58,71056,52451],{"class":71},[58,71058,403],{"class":75},[58,71060,71061],{"class":60,"line":33697},[58,71062,3046],{"emptyLinePlaceholder":720},[58,71064,71065,71067,71069],{"class":60,"line":33703},[58,71066,52423],{"class":75},[58,71068,52438],{"class":71},[58,71070,403],{"class":75},[58,71072,71073],{"class":60,"line":33714},[58,71074,3046],{"emptyLinePlaceholder":720},[58,71076,71077,71079,71081],{"class":60,"line":33720},[58,71078,52423],{"class":75},[58,71080,51279],{"class":71},[58,71082,403],{"class":75},[175,71084,71085],{},"样式：",[48,71087,71091],{"className":71088,"code":71089,"language":71090,"meta":53,"style":53},"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",[55,71092,71093,71098,71108,71117,71121,71125,71130,71140,71145,71149,71154,71164,71169,71178,71182,71186,71191,71196,71206,71216,71221,71225,71230,71239,71249,71254,71264,71274,71278,71283,71291,71295,71300,71305,71310,71318,71327,71331,71336,71345,71349,71354,71363,71367,71372,71381,71390,71398,71402,71407,71416,71426,71435,71445,71451,71460,71470,71480,71484,71489,71498,71506,71516,71524,71532,71541,71551,71559,71563,71568,71577],{"__ignoreMap":53},[58,71094,71095],{"class":60,"line":61},[58,71096,71097],{"class":75},"* {\n",[58,71099,71100,71103,71105],{"class":60,"line":68},[58,71101,71102],{"class":71},"  margin",[58,71104,86],{"class":75},[58,71106,71107],{"class":386},"0;\n",[58,71109,71110,71113,71115],{"class":60,"line":79},[58,71111,71112],{"class":386},"  padding",[58,71114,86],{"class":75},[58,71116,71107],{"class":386},[58,71118,71119],{"class":60,"line":105},[58,71120,108],{"class":75},[58,71122,71123],{"class":60,"line":627},[58,71124,3046],{"emptyLinePlaceholder":720},[58,71126,71127],{"class":60,"line":509},[58,71128,71129],{"class":386},"a {\n",[58,71131,71132,71135,71137],{"class":60,"line":559},[58,71133,71134],{"class":71},"  text-decoration",[58,71136,86],{"class":75},[58,71138,71139],{"class":386},"none;\n",[58,71141,71142],{"class":60,"line":654},[58,71143,71144],{"class":386},"  color:#721c24;\n",[58,71146,71147],{"class":60,"line":671},[58,71148,108],{"class":75},[58,71150,71151],{"class":60,"line":677},[58,71152,71153],{"class":386},"h1 {\n",[58,71155,71156,71159,71161],{"class":60,"line":2260},[58,71157,71158],{"class":71},"  text-align",[58,71160,86],{"class":75},[58,71162,71163],{"class":386},"center;\n",[58,71165,71166],{"class":60,"line":694},[58,71167,71168],{"class":386},"  color:#333;\n",[58,71170,71171,71173,71175],{"class":60,"line":2270},[58,71172,71102],{"class":71},[58,71174,86],{"class":75},[58,71176,71177],{"class":386},"20px 0;\n",[58,71179,71180],{"class":60,"line":2275},[58,71181,3320],{"class":75},[58,71183,71184],{"class":60,"line":2289},[58,71185,108],{"class":75},[58,71187,71188],{"class":60,"line":2294},[58,71189,71190],{"class":386},"table {\n",[58,71192,71193],{"class":60,"line":2300},[58,71194,71195],{"class":386},"  margin:0 auto;\n",[58,71197,71198,71201,71203],{"class":60,"line":2321},[58,71199,71200],{"class":71},"  width",[58,71202,86],{"class":75},[58,71204,71205],{"class":386},"800px;\n",[58,71207,71208,71211,71213],{"class":60,"line":2326},[58,71209,71210],{"class":71},"  border-collapse",[58,71212,86],{"class":75},[58,71214,71215],{"class":386},"collapse;\n",[58,71217,71218],{"class":60,"line":2340},[58,71219,71220],{"class":386},"  color:#004085;\n",[58,71222,71223],{"class":60,"line":2345},[58,71224,108],{"class":75},[58,71226,71227],{"class":60,"line":2374},[58,71228,71229],{"class":386},"th {\n",[58,71231,71232,71234,71236],{"class":60,"line":2379},[58,71233,71112],{"class":71},[58,71235,86],{"class":75},[58,71237,71238],{"class":386},"10px;\n",[58,71240,71241,71244,71246],{"class":60,"line":2396},[58,71242,71243],{"class":71},"  background",[58,71245,86],{"class":75},[58,71247,71248],{"class":64},"#cfe5ff;\n",[58,71250,71251],{"class":60,"line":2401},[58,71252,71253],{"class":75},"  \n",[58,71255,71256,71259,71261],{"class":60,"line":2406},[58,71257,71258],{"class":71},"  font-size",[58,71260,86],{"class":75},[58,71262,71263],{"class":386},"20px;\n",[58,71265,71266,71269,71271],{"class":60,"line":2411},[58,71267,71268],{"class":71},"  font-weight",[58,71270,86],{"class":75},[58,71272,71273],{"class":386},"400;\n",[58,71275,71276],{"class":60,"line":2425},[58,71277,108],{"class":75},[58,71279,71280],{"class":60,"line":2430},[58,71281,71282],{"class":386},"td,th {\n",[58,71284,71285,71288],{"class":60,"line":3223},[58,71286,71287],{"class":386},"  border:1px solid",[58,71289,71290],{"class":64}," #b8daff;\n",[58,71292,71293],{"class":60,"line":3237},[58,71294,108],{"class":75},[58,71296,71297],{"class":60,"line":3245},[58,71298,71299],{"class":386},"td {\n",[58,71301,71302],{"class":60,"line":3250},[58,71303,71304],{"class":386},"  padding:10px;\n",[58,71306,71307],{"class":60,"line":3256},[58,71308,71309],{"class":386},"  color:#666;\n",[58,71311,71312,71314,71316],{"class":60,"line":3262},[58,71313,71158],{"class":71},[58,71315,86],{"class":75},[58,71317,71163],{"class":386},[58,71319,71320,71322,71324],{"class":60,"line":3267},[58,71321,71258],{"class":71},[58,71323,86],{"class":75},[58,71325,71326],{"class":386},"16px;\n",[58,71328,71329],{"class":60,"line":8594},[58,71330,108],{"class":75},[58,71332,71333],{"class":60,"line":8618},[58,71334,71335],{"class":386},"tbody tr {\n",[58,71337,71338,71340,71342],{"class":60,"line":8623},[58,71339,71243],{"class":71},[58,71341,86],{"class":75},[58,71343,71344],{"class":64},"#fff;\n",[58,71346,71347],{"class":60,"line":8629},[58,71348,108],{"class":75},[58,71350,71351],{"class":60,"line":8656},[58,71352,71353],{"class":386},"tbody tr:hover {\n",[58,71355,71356,71358,71360],{"class":60,"line":8661},[58,71357,71243],{"class":71},[58,71359,86],{"class":75},[58,71361,71362],{"class":64},"#e1ecf8;\n",[58,71364,71365],{"class":60,"line":8667},[58,71366,108],{"class":75},[58,71368,71369],{"class":60,"line":8679},[58,71370,71371],{"class":386},".info {\n",[58,71373,71374,71376,71378],{"class":60,"line":8691},[58,71375,71200],{"class":71},[58,71377,86],{"class":75},[58,71379,71380],{"class":386},"900px;\n",[58,71382,71383,71385,71387],{"class":60,"line":8703},[58,71384,71102],{"class":71},[58,71386,86],{"class":75},[58,71388,71389],{"class":386},"50px auto;\n",[58,71391,71392,71394,71396],{"class":60,"line":10361},[58,71393,71158],{"class":71},[58,71395,86],{"class":75},[58,71397,71163],{"class":386},[58,71399,71400],{"class":60,"line":10386},[58,71401,108],{"class":75},[58,71403,71404],{"class":60,"line":10409},[58,71405,71406],{"class":386},".info  input, .info select {\n",[58,71408,71409,71411,71413],{"class":60,"line":10433},[58,71410,71200],{"class":71},[58,71412,86],{"class":75},[58,71414,71415],{"class":386},"80px;\n",[58,71417,71418,71421,71423],{"class":60,"line":10438},[58,71419,71420],{"class":71},"  height",[58,71422,86],{"class":75},[58,71424,71425],{"class":386},"27px;\n",[58,71427,71428,71431,71433],{"class":60,"line":10443},[58,71429,71430],{"class":71},"  outline",[58,71432,86],{"class":75},[58,71434,71139],{"class":386},[58,71436,71437,71440,71442],{"class":60,"line":10448},[58,71438,71439],{"class":71},"  border-radius",[58,71441,86],{"class":75},[58,71443,71444],{"class":386},"5px;\n",[58,71446,71447,71449],{"class":60,"line":10457},[58,71448,71287],{"class":386},[58,71450,71290],{"class":64},[58,71452,71453,71456,71458],{"class":60,"line":10462},[58,71454,71455],{"class":71},"  padding-left",[58,71457,86],{"class":75},[58,71459,71444],{"class":386},[58,71461,71462,71465,71467],{"class":60,"line":10468},[58,71463,71464],{"class":71},"  box-sizing",[58,71466,86],{"class":75},[58,71468,71469],{"class":386},"border-box;\n",[58,71471,71472,71475,71477],{"class":60,"line":10489},[58,71473,71474],{"class":71},"  margin-right",[58,71476,86],{"class":75},[58,71478,71479],{"class":386},"15px;\n",[58,71481,71482],{"class":60,"line":10495},[58,71483,108],{"class":75},[58,71485,71486],{"class":60,"line":10509},[58,71487,71488],{"class":386},".info button {\n",[58,71490,71491,71493,71495],{"class":60,"line":10515},[58,71492,71200],{"class":71},[58,71494,86],{"class":75},[58,71496,71497],{"class":386},"60px;\n",[58,71499,71500,71502,71504],{"class":60,"line":10542},[58,71501,71420],{"class":71},[58,71503,86],{"class":75},[58,71505,71425],{"class":386},[58,71507,71508,71511,71513],{"class":60,"line":10551},[58,71509,71510],{"class":71},"  background-color",[58,71512,86],{"class":75},[58,71514,71515],{"class":64},"#004085;\n",[58,71517,71518,71520,71522],{"class":60,"line":10557},[58,71519,71430],{"class":71},[58,71521,86],{"class":75},[58,71523,71139],{"class":386},[58,71525,71526,71528,71530],{"class":60,"line":10565},[58,71527,83],{"class":71},[58,71529,86],{"class":75},[58,71531,71107],{"class":386},[58,71533,71534,71537,71539],{"class":60,"line":10570},[58,71535,71536],{"class":71},"  color",[58,71538,86],{"class":75},[58,71540,71344],{"class":64},[58,71542,71543,71546,71548],{"class":60,"line":17247},[58,71544,71545],{"class":71},"  cursor",[58,71547,86],{"class":75},[58,71549,71550],{"class":386},"pointer;\n",[58,71552,71553,71555,71557],{"class":60,"line":17253},[58,71554,71439],{"class":71},[58,71556,86],{"class":75},[58,71558,71444],{"class":386},[58,71560,71561],{"class":60,"line":17276},[58,71562,108],{"class":75},[58,71564,71565],{"class":60,"line":17282},[58,71566,71567],{"class":386},".info .age {\n",[58,71569,71570,71572,71574],{"class":60,"line":17305},[58,71571,71200],{"class":71},[58,71573,86],{"class":75},[58,71575,71576],{"class":386},"50px;\n",[58,71578,71579],{"class":60,"line":17319},[58,71580,108],{"class":75},[175,71582,71583],{},"思路：",[175,71585,71586],{},[119,71587],{"alt":53,"src":71588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[175,71590,71591],{},[119,71592],{"alt":53,"src":71593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[175,71595,71596],{},[119,71597],{"alt":53,"src":71598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[114,71600,71602],{"id":71601},"_3315-重绘回流","3.3.15 重绘回流",[175,71604,71605],{},[119,71606],{"alt":53,"src":71607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[175,71609,71610],{},[119,71611],{"alt":53,"src":71612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[175,71614,71615],{},[119,71616],{"alt":53,"src":71617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71619,71621],{"id":71620},"_34-bom","3.4 BOM",[175,71623,71624],{},[119,71625],{"alt":53,"src":71626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[175,71628,71629],{},"平时写的document省略了window而已，实际上是window.document",[175,71631,71632],{},"函数也是这样，调用的时候实际为window.fn()",[175,71634,71635],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[175,71637,71638],{},"window大部分情况下可以省略",[114,71640,71642],{"id":71641},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[175,71644,71645],{},"只执行一次",[175,71647,71648],{},[119,71649],{"alt":53,"src":71650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[175,71652,71653],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[175,71655,71656],{},[119,71657],{"alt":53,"src":71658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[114,71660,71662],{"id":71661},"_342-js执行机制","3.4.2 JS执行机制",[175,71664,71665],{},[119,71666],{"alt":53,"src":71667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[175,71669,71670],{},"两个的结果都是1111 3333 2222",[175,71672,71673],{},[119,71674],{"alt":53,"src":71675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[175,71677,71678],{},[119,71679],{"alt":53,"src":71680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[175,71682,71683],{},[119,71684],{"alt":53,"src":71685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[175,71687,71688],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[175,71690,71691],{},"工作流程：",[175,71693,71694],{},[119,71695],{"alt":53,"src":71696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[175,71698,71699],{},[119,71700],{"alt":53,"src":71701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[175,71703,71704],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[175,71706,71707],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[114,71709,71711],{"id":71710},"_343-location对象","3.4.3 location对象",[175,71713,71714],{},"location对象属于window这个全局对象下的，可以 省略window",[175,71716,71717],{},[119,71718],{"alt":53,"src":71719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[175,71721,71722],{},"href可以跳转页面",[19,71724,71725],{},[22,71726,71727],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[175,71729,71730],{},"search得到提交信息之后网站后边的地址",[175,71732,71733],{},[119,71734],{"alt":53,"src":71735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[175,71737,71738],{},[119,71739],{"alt":53,"src":71740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[19,71742,71743],{"start":68},[22,71744,71745],{},"hash:这个获取单页面应用#后边的地址",[175,71747,71748],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[175,71750,71751],{},[119,71752],{"alt":53,"src":71753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[48,71755,71757],{"className":53705,"code":71756,"language":53707,"meta":53,"style":53},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[55,71758,71759,71779,71799],{"__ignoreMap":53},[58,71760,71761,71763,71765,71767,71769,71772,71775,71777],{"class":60,"line":61},[58,71762,52782],{"class":75},[58,71764,376],{"class":71},[58,71766,380],{"class":379},[58,71768,383],{"class":75},[58,71770,71771],{"class":386},"\"#\u002Fmy\"",[58,71773,71774],{"class":75},">我的\u003C\u002F",[58,71776,376],{"class":71},[58,71778,403],{"class":75},[58,71780,71781,71783,71785,71787,71789,71792,71795,71797],{"class":60,"line":68},[58,71782,52782],{"class":75},[58,71784,376],{"class":71},[58,71786,380],{"class":379},[58,71788,383],{"class":75},[58,71790,71791],{"class":386},"\"#\u002Ffriend\"",[58,71793,71794],{"class":75},">关注\u003C\u002F",[58,71796,376],{"class":71},[58,71798,403],{"class":75},[58,71800,71801,71803,71805,71807,71809,71812,71815,71817],{"class":60,"line":79},[58,71802,52782],{"class":75},[58,71804,376],{"class":71},[58,71806,380],{"class":379},[58,71808,383],{"class":75},[58,71810,71811],{"class":386},"\"#\u002Fdownload\"",[58,71813,71814],{"class":75},">下载\u003C\u002F",[58,71816,376],{"class":71},[58,71818,403],{"class":75},[175,71820,71821],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[19,71823,71824],{"start":79},[22,71825,71826,71827,71829,71830,71832],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54352,71828],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54352,71831],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[114,71834,71836],{"id":71835},"_345-navigator对象","3.4.5 navigator对象",[175,71838,71839],{},[119,71840],{"alt":53,"src":71841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[48,71843,71847],{"className":71844,"code":71845,"language":71846,"meta":53,"style":53},"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",[55,71848,71849,71854,71865,71877,71882,71933,71974,71979,71992,72004,72009],{"__ignoreMap":53},[58,71850,71851],{"class":60,"line":61},[58,71852,71853],{"class":64},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[58,71855,71856,71858,71860,71862],{"class":60,"line":68},[58,71857,1013],{"class":92},[58,71859,793],{"class":75},[58,71861,55085],{"class":92},[58,71863,71864],{"class":75}," () { \n",[58,71866,71867,71869,71872,71874],{"class":60,"line":79},[58,71868,7438],{"class":92},[58,71870,71871],{"class":82}," userAgent",[58,71873,14208],{"class":92},[58,71875,71876],{"class":75}," navigator.userAgent \n",[58,71878,71879],{"class":60,"line":105},[58,71880,71881],{"class":64},"\u002F\u002F 验证是否为Android或iPhone \n",[58,71883,71884,71886,71889,71891,71894,71897,71899,71901,71904,71906,71909,71913,71915,71917,71919,71922,71924,71926,71928,71930],{"class":60,"line":627},[58,71885,7438],{"class":92},[58,71887,71888],{"class":82}," android",[58,71890,14208],{"class":92},[58,71892,71893],{"class":75}," userAgent.",[58,71895,71896],{"class":379},"match",[58,71898,793],{"class":75},[58,71900,1370],{"class":386},[58,71902,71903],{"class":48621},"(Android);",[58,71905,1770],{"class":92},[58,71907,71908],{"class":82},"[\\s",[58,71910,71912],{"class":71911},"snhLl","\\\u002F",[58,71914,1724],{"class":82},[58,71916,1267],{"class":92},[58,71918,793],{"class":48621},[58,71920,71921],{"class":82},"[\\d.]",[58,71923,1267],{"class":92},[58,71925,1215],{"class":48621},[58,71927,1770],{"class":92},[58,71929,1370],{"class":386},[58,71931,71932],{"class":75},") \n",[58,71934,71935,71937,71940,71942,71944,71946,71948,71950,71953,71956,71959,71961,71963,71966,71968,71970,71972],{"class":60,"line":509},[58,71936,7438],{"class":92},[58,71938,71939],{"class":82}," iphone",[58,71941,14208],{"class":92},[58,71943,71893],{"class":75},[58,71945,71896],{"class":379},[58,71947,793],{"class":75},[58,71949,1370],{"class":386},[58,71951,71952],{"class":48621},"(iPhone",[58,71954,71955],{"class":82},"\\s",[58,71957,71958],{"class":48621},"OS)",[58,71960,71955],{"class":82},[58,71962,793],{"class":48621},[58,71964,71965],{"class":82},"[\\d_]",[58,71967,1267],{"class":92},[58,71969,1215],{"class":48621},[58,71971,1370],{"class":386},[58,71973,71932],{"class":75},[58,71975,71976],{"class":60,"line":559},[58,71977,71978],{"class":64},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[58,71980,71981,71983,71986,71989],{"class":60,"line":654},[58,71982,2180],{"class":92},[58,71984,71985],{"class":75}," (android ",[58,71987,71988],{"class":92},"||",[58,71990,71991],{"class":75}," iphone) { \n",[58,71993,71994,71997,71999,72002],{"class":60,"line":671},[58,71995,71996],{"class":75},"location.href ",[58,71998,383],{"class":92},[58,72000,72001],{"class":386}," 'http:\u002F\u002Fm.itcast.cn'",[58,72003,3320],{"class":75},[58,72005,72006],{"class":60,"line":677},[58,72007,72008],{"class":75},"} \n",[58,72010,72011],{"class":60,"line":2260},[58,72012,72013],{"class":75},"})()\n",[114,72015,72017],{"id":72016},"_346-histroy对象","3.4.6 histroy对象",[175,72019,72020],{},[119,72021],{"alt":53,"src":72022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[175,72024,72025],{},"浏览器地址的前进与后退!!!",[175,72027,72028],{},"history.back() 等效于 history.go(-1)",[175,72030,72031],{},"history.forward() 等效于 history.go(1)",[14,72033,72035],{"id":72034},"_35-本地存储","3.5 本地存储",[19,72037,72038,72041,72044],{},[22,72039,72040],{},"数据存储在用户浏览器中",[22,72042,72043],{},"设置、读取方便、甚至页面刷新不丢失数据",[22,72045,72046],{},"容量较大，sessionStorage和localStorage约 5M 左右",[114,72048,72050],{"id":72049},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[175,72052,72053],{},"只能存储字符串",[175,72055,72056],{},[119,72057],{"alt":53,"src":72058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[175,72060,72061],{},[119,72062],{"alt":53,"src":72063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[175,72065,72066],{},"键值对要加引号,不然就会当变量来看了",[175,72068,72069],{},"localStorage.setItem('uname', 'pink')",[175,72071,72072],{},"刷新之后信息不再丢失",[175,72074,72075],{},"操作key,value会跟着变",[175,72077,72078],{},"删除只删除键就可以,即名字",[175,72080,72069],{},[175,72082,72083],{},"改:",[175,72085,72086],{},"localStorage.setItem('uname','red')",[175,72088,72089],{},"有这个键就是改,没有这个键就是改",[175,72091,72092],{},[119,72093],{"alt":53,"src":72094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[175,72096,72097],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[175,72099,72100],{},[119,72101],{"alt":53,"src":72102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[175,72104,72105],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[114,72107,72109],{"id":72108},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[175,72111,72112],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[175,72114,72115],{},"特性:",[19,72117,72118,72121,72124,72127],{},[22,72119,72120],{},"生命周期为关闭浏览器窗口",[22,72122,72123],{},"在同一个窗口(页面)下数据可以共享",[22,72125,72126],{},"以键值对的形式存储使用",[22,72128,72129],{},"用法跟localStorage 基本相同",[114,72131,72133],{"id":72132},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[175,72135,72136],{},"本地只能存储字符串,无法直接存储复杂数据类型",[48,72138,72140],{"className":53705,"code":72139,"language":53707,"meta":53,"style":53},"\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",[55,72141,72142,72150,72155,72160,72165,72170,72174,72179,72184],{"__ignoreMap":53},[58,72143,72144,72146,72148],{"class":60,"line":61},[58,72145,373],{"class":75},[58,72147,52451],{"class":71},[58,72149,403],{"class":75},[58,72151,72152],{"class":60,"line":68},[58,72153,72154],{"class":75},"    const obj = {\n",[58,72156,72157],{"class":60,"line":79},[58,72158,72159],{"class":75},"      uname: 'pink老师',\n",[58,72161,72162],{"class":60,"line":105},[58,72163,72164],{"class":75},"      age: 18,\n",[58,72166,72167],{"class":60,"line":627},[58,72168,72169],{"class":75},"      gender: '女'\n",[58,72171,72172],{"class":60,"line":509},[58,72173,2833],{"class":75},[58,72175,72176],{"class":60,"line":559},[58,72177,72178],{"class":75},"    \u002F\u002F 存储复杂数据类型\n",[58,72180,72181],{"class":60,"line":654},[58,72182,72183],{"class":75},"    localStorage.setItem('obj', obj)\n",[58,72185,72186,72188,72190],{"class":60,"line":671},[58,72187,53055],{"class":75},[58,72189,52451],{"class":71},[58,72191,403],{"class":75},[175,72193,72194],{},[119,72195],{"alt":53,"src":72196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[175,72198,72199],{},"如果获取一下数据:",[175,72201,72202],{},"log(localStorage.getItem('obj'))",[175,72204,72205],{},[119,72206],{"alt":53,"src":72207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[175,72209,72210],{},"发现直接存对象是使用不了的!!!",[22641,72212,72214],{"id":72213},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[175,72216,72217],{},[119,72218],{"alt":53,"src":72219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[48,72221,72223],{"className":51277,"code":72222,"language":51279,"meta":53,"style":53},"\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",[55,72224,72225,72233,72243,72253,72262,72270,72274,72278,72304,72323,72331,72335,72340,72345],{"__ignoreMap":53},[58,72226,72227,72229,72231],{"class":60,"line":61},[58,72228,373],{"class":75},[58,72230,52451],{"class":71},[58,72232,403],{"class":75},[58,72234,72235,72237,72239,72241],{"class":60,"line":68},[58,72236,11866],{"class":92},[58,72238,70603],{"class":82},[58,72240,14208],{"class":92},[58,72242,76],{"class":75},[58,72244,72245,72248,72251],{"class":60,"line":79},[58,72246,72247],{"class":75},"      uname: ",[58,72249,72250],{"class":386},"'pink老师'",[58,72252,32110],{"class":75},[58,72254,72255,72258,72260],{"class":60,"line":105},[58,72256,72257],{"class":75},"      age: ",[58,72259,1436],{"class":82},[58,72261,32110],{"class":75},[58,72263,72264,72267],{"class":60,"line":627},[58,72265,72266],{"class":75},"      gender: ",[58,72268,72269],{"class":386},"'女'\n",[58,72271,72272],{"class":60,"line":509},[58,72273,2833],{"class":75},[58,72275,72276],{"class":60,"line":559},[58,72277,72178],{"class":64},[58,72279,72280,72283,72286,72288,72291,72293,72296,72298,72301],{"class":60,"line":654},[58,72281,72282],{"class":75},"  localStorage.",[58,72284,72285],{"class":379},"setItem",[58,72287,793],{"class":75},[58,72289,72290],{"class":386},"'obj'",[58,72292,469],{"class":75},[58,72294,72295],{"class":82},"JSON",[58,72297,1344],{"class":75},[58,72299,72300],{"class":379},"stringify",[58,72302,72303],{"class":75},"(obj))\n",[58,72305,72306,72309,72311,72314,72317,72319,72321],{"class":60,"line":671},[58,72307,72308],{"class":75},"  console.",[58,72310,58881],{"class":379},[58,72312,72313],{"class":75},"(localStorage.",[58,72315,72316],{"class":379},"getItem",[58,72318,793],{"class":75},[58,72320,72290],{"class":386},[58,72322,31141],{"class":75},[58,72324,72325,72327,72329],{"class":60,"line":677},[58,72326,53055],{"class":75},[58,72328,52451],{"class":71},[58,72330,403],{"class":75},[58,72332,72333],{"class":60,"line":2260},[58,72334,71253],{"class":75},[58,72336,72337],{"class":60,"line":694},[58,72338,72339],{"class":75},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[58,72341,72342],{"class":60,"line":2270},[58,72343,72344],{"class":75},"  类型是字符串的\n",[58,72346,72347],{"class":60,"line":2275},[58,72348,72349],{"class":75},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22641,72351,72353],{"id":72352},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[175,72355,72356],{},[119,72357],{"alt":53,"src":72358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[175,72360,72361],{},[119,72362],{"alt":53,"src":72363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[48,72365,72367],{"className":53705,"code":72366,"language":53707,"meta":53,"style":53},"  \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",[55,72368,72369,72377,72381,72385,72389,72393,72397,72402,72407,72412,72417,72422,72427,72432,72437],{"__ignoreMap":53},[58,72370,72371,72373,72375],{"class":60,"line":61},[58,72372,52782],{"class":75},[58,72374,52451],{"class":71},[58,72376,403],{"class":75},[58,72378,72379],{"class":60,"line":68},[58,72380,72154],{"class":75},[58,72382,72383],{"class":60,"line":79},[58,72384,72159],{"class":75},[58,72386,72387],{"class":60,"line":105},[58,72388,72164],{"class":75},[58,72390,72391],{"class":60,"line":627},[58,72392,72169],{"class":75},[58,72394,72395],{"class":60,"line":509},[58,72396,2833],{"class":75},[58,72398,72399],{"class":60,"line":559},[58,72400,72401],{"class":75},"    \u002F\u002F 1.存储复杂数据类型\n",[58,72403,72404],{"class":60,"line":654},[58,72405,72406],{"class":75},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[58,72408,72409],{"class":60,"line":671},[58,72410,72411],{"class":75},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[58,72413,72414],{"class":60,"line":677},[58,72415,72416],{"class":75},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[58,72418,72419],{"class":60,"line":2260},[58,72420,72421],{"class":75},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[58,72423,72424],{"class":60,"line":694},[58,72425,72426],{"class":75},"    \u002F\u002F 取\n",[58,72428,72429],{"class":60,"line":2270},[58,72430,72431],{"class":75},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[58,72433,72434],{"class":60,"line":2275},[58,72435,72436],{"class":75},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[58,72438,72439,72441,72443],{"class":60,"line":2289},[58,72440,53055],{"class":75},[58,72442,52451],{"class":71},[58,72444,403],{"class":75},[175,72446,72447],{},[119,72448],{"alt":53,"src":72449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[114,72451,72453],{"id":72452},"_356-数组map方法","3.5.6 数组map方法",[175,72455,72456],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[175,72458,72459],{},[119,72460],{"alt":53,"src":72461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[175,72463,72464],{},[119,72465],{"alt":53,"src":72466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[175,72468,72469,72472],{},[25,72470,72471],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[175,72474,72475],{},"map有返回值，但是forEach没有返回值",[175,72477,72478],{},"map是个方法。用的时候要加 ()",[175,72480,72481],{},"map返回的是一个数组",[114,72483,72485],{"id":72484},"_357-数组中join方法","3.5.7 数组中join方法",[175,72487,72488],{},[119,72489],{"alt":53,"src":72490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[175,72492,72493],{},"类似于python中拼接字符串一样！",[19,72495,72496,72499,72502],{},[22,72497,72498],{},"小括号为空则逗号分开",[22,72500,72501],{},"小括号为空字符串 ''，则元素之间没有分隔符",[22,72503,72504],{},"小括号用啥符号就用进行分割",[114,72506,72508],{"id":72507},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[19,72510,72511,72514,72517,72520,72523],{},[22,72512,72513],{},"记住本地时间获取快速方式：new Date().toDateString()",[22,72515,72516],{},"尽量减少DOM操作，用好map+join的渲染方式",[22,72518,72519],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[22,72521,72522],{},"return可以实现函数的结束",[22,72524,72525],{},"禁止跳转是 preventDefault() 不要忘记",[48,72527,72529],{"className":51277,"code":72528,"language":51279,"meta":53,"style":53},"\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",[55,72530,72531,72541,72555,72559,72567,72581,72601,72613,72621,72627,72637,72647,72651,72655,72661,72671,72683,72687,72691,72698,72710,72724,72734,72738,72742,72749,72756,72763,72775,72787,72797,72809,72813,72817,72824,72831,72843,72855,72865,72877,72907,72911,72915,72922,72934,72946,72970,72980,72990,72994,72998,73006,73017,73029,73041,73053,73070,73082,73094,73098,73102,73109,73121,73133,73145,73156,73174,73187,73199,73223,73234,73238,73242,73250,73260,73264,73268,73274,73286,73297,73307,73311,73315,73321,73343,73347,73351,73357,73363,73375,73385,73397,73427,73440,73457,73461,73465,73476,73498,73508,73512,73516,73529,73539,73551,73563,73575,73587,73597,73607,73617,73628,73641,73645,73653,73661,73665,73673,73686,73706,73739,73772,73805,73831,73849,73867,73875,73901,73919,73937,73955,73973,73991,73999,74007,74025,74033,74062,74070,74078,74086,74099,74111,74123,74135,74147,74159,74172,74184,74192,74200,74208,74213,74218,74222,74226,74230,74234,74238,74242,74247,74252,74257,74262,74270,74278,74286,74291,74296,74301,74306,74311,74316,74321,74326,74331,74336,74341,74346,74351,74356,74360,74365,74370,74380,74389,74393,74398,74407,74423,74465,74505,74544,74609,74617,74621,74626,74644,74652,74657,74662,74692,74698,74703,74716,74728,74740,74752,74764,74776,74788,74792,74802,74806,74811,74816,74820,74829,74833,74838,74843,74862,74867,74887,74891,74896,74900,74905,74923,74941,74959,74978,74997,75016,75021,75027,75048,75054,75063,75069,75075,75081,75108,75121,75126,75136,75142,75148,75154,75160,75165,75171,75177,75183,75189,75222,75227,75232,75237,75242,75248,75254,75260,75271,75276,75282,75289,75303,75309,75333,75338,75343,75349,75355,75376,75382,75395,75401,75407,75413,75419,75424,75430,75436,75442,75460,75474,75480,75488,75494,75516,75521,75526,75531,75536,75541,75550,75559,75564],{"__ignoreMap":53},[58,72532,72533,72535,72537,72539],{"class":60,"line":61},[58,72534,51941],{"class":75},[58,72536,51944],{"class":71},[58,72538,51947],{"class":379},[58,72540,403],{"class":75},[58,72542,72543,72545,72547,72549,72551,72553],{"class":60,"line":68},[58,72544,373],{"class":75},[58,72546,51279],{"class":71},[58,72548,51958],{"class":379},[58,72550,383],{"class":75},[58,72552,51963],{"class":386},[58,72554,403],{"class":75},[58,72556,72557],{"class":60,"line":79},[58,72558,3046],{"emptyLinePlaceholder":720},[58,72560,72561,72563,72565],{"class":60,"line":105},[58,72562,373],{"class":75},[58,72564,51976],{"class":71},[58,72566,403],{"class":75},[58,72568,72569,72571,72573,72575,72577,72579],{"class":60,"line":627},[58,72570,52782],{"class":75},[58,72572,51986],{"class":71},[58,72574,51989],{"class":379},[58,72576,383],{"class":75},[58,72578,51994],{"class":386},[58,72580,403],{"class":75},[58,72582,72583,72585,72587,72589,72591,72593,72595,72597,72599],{"class":60,"line":509},[58,72584,52782],{"class":75},[58,72586,51986],{"class":71},[58,72588,15564],{"class":379},[58,72590,383],{"class":75},[58,72592,52033],{"class":386},[58,72594,52013],{"class":379},[58,72596,383],{"class":75},[58,72598,52040],{"class":386},[58,72600,403],{"class":75},[58,72602,72603,72605,72607,72609,72611],{"class":60,"line":559},[58,72604,52782],{"class":75},[58,72606,52049],{"class":71},[58,72608,52052],{"class":75},[58,72610,52049],{"class":71},[58,72612,403],{"class":75},[58,72614,72615,72617,72619],{"class":60,"line":654},[58,72616,52782],{"class":75},[58,72618,702],{"class":71},[58,72620,403],{"class":75},[58,72622,72623,72625],{"class":60,"line":671},[58,72624,7049],{"class":71},[58,72626,76],{"class":75},[58,72628,72629,72631,72633,72635],{"class":60,"line":677},[58,72630,55331],{"class":82},[58,72632,86],{"class":75},[58,72634,979],{"class":82},[58,72636,102],{"class":75},[58,72638,72639,72641,72643,72645],{"class":60,"line":2260},[58,72640,55342],{"class":82},[58,72642,86],{"class":75},[58,72644,979],{"class":82},[58,72646,102],{"class":75},[58,72648,72649],{"class":60,"line":694},[58,72650,2833],{"class":75},[58,72652,72653],{"class":60,"line":2270},[58,72654,3046],{"emptyLinePlaceholder":720},[58,72656,72657,72659],{"class":60,"line":2275},[58,72658,57913],{"class":71},[58,72660,76],{"class":75},[58,72662,72663,72665,72667,72669],{"class":60,"line":2289},[58,72664,57920],{"class":82},[58,72666,86],{"class":75},[58,72668,52231],{"class":82},[58,72670,102],{"class":75},[58,72672,72673,72675,72677,72679,72681],{"class":60,"line":2294},[58,72674,62709],{"class":82},[58,72676,86],{"class":75},[58,72678,1486],{"class":82},[58,72680,93],{"class":92},[58,72682,102],{"class":75},[58,72684,72685],{"class":60,"line":2300},[58,72686,2833],{"class":75},[58,72688,72689],{"class":60,"line":2321},[58,72690,3046],{"emptyLinePlaceholder":720},[58,72692,72693,72696],{"class":60,"line":2326},[58,72694,72695],{"class":379},"    .info",[58,72697,76],{"class":75},[58,72699,72700,72702,72704,72706,72708],{"class":60,"line":2340},[58,72701,55406],{"class":82},[58,72703,86],{"class":75},[58,72705,52130],{"class":82},[58,72707,93],{"class":92},[58,72709,102],{"class":75},[58,72711,72712,72714,72716,72718,72720,72722],{"class":60,"line":2345},[58,72713,55342],{"class":82},[58,72715,86],{"class":75},[58,72717,1232],{"class":82},[58,72719,93],{"class":92},[58,72721,52195],{"class":82},[58,72723,102],{"class":75},[58,72725,72726,72728,72730,72732],{"class":60,"line":2374},[58,72727,57920],{"class":82},[58,72729,86],{"class":75},[58,72731,52231],{"class":82},[58,72733,102],{"class":75},[58,72735,72736],{"class":60,"line":2379},[58,72737,2833],{"class":75},[58,72739,72740],{"class":60,"line":2396},[58,72741,3046],{"emptyLinePlaceholder":720},[58,72743,72744,72747],{"class":60,"line":2401},[58,72745,72746],{"class":379},"    .uname",[58,72748,32110],{"class":75},[58,72750,72751,72754],{"class":60,"line":2406},[58,72752,72753],{"class":379},"    .age",[58,72755,32110],{"class":75},[58,72757,72758,72761],{"class":60,"line":2411},[58,72759,72760],{"class":379},"    .salary",[58,72762,76],{"class":75},[58,72764,72765,72767,72769,72771,72773],{"class":60,"line":2425},[58,72766,55406],{"class":82},[58,72768,86],{"class":75},[58,72770,1097],{"class":82},[58,72772,93],{"class":92},[58,72774,102],{"class":75},[58,72776,72777,72779,72781,72783,72785],{"class":60,"line":2430},[58,72778,55420],{"class":82},[58,72780,86],{"class":75},[58,72782,1486],{"class":82},[58,72784,93],{"class":92},[58,72786,102],{"class":75},[58,72788,72789,72791,72793,72795],{"class":60,"line":3223},[58,72790,62412],{"class":82},[58,72792,86],{"class":75},[58,72794,55373],{"class":82},[58,72796,102],{"class":75},[58,72798,72799,72801,72803,72805,72807],{"class":60,"line":3237},[58,72800,62382],{"class":82},[58,72802,86],{"class":75},[58,72804,1361],{"class":82},[58,72806,93],{"class":92},[58,72808,102],{"class":75},[58,72810,72811],{"class":60,"line":3245},[58,72812,2833],{"class":75},[58,72814,72815],{"class":60,"line":3250},[58,72816,3046],{"emptyLinePlaceholder":720},[58,72818,72819,72822],{"class":60,"line":3256},[58,72820,72821],{"class":379},"    .gender",[58,72823,32110],{"class":75},[58,72825,72826,72829],{"class":60,"line":3262},[58,72827,72828],{"class":379},"    .city",[58,72830,76],{"class":75},[58,72832,72833,72835,72837,72839,72841],{"class":60,"line":3267},[58,72834,55406],{"class":82},[58,72836,86],{"class":75},[58,72838,1097],{"class":82},[58,72840,93],{"class":92},[58,72842,102],{"class":75},[58,72844,72845,72847,72849,72851,72853],{"class":60,"line":8594},[58,72846,55420],{"class":82},[58,72848,86],{"class":75},[58,72850,1610],{"class":82},[58,72852,93],{"class":92},[58,72854,102],{"class":75},[58,72856,72857,72859,72861,72863],{"class":60,"line":8618},[58,72858,62412],{"class":82},[58,72860,86],{"class":75},[58,72862,55373],{"class":82},[58,72864,102],{"class":75},[58,72866,72867,72869,72871,72873,72875],{"class":60,"line":8623},[58,72868,62382],{"class":82},[58,72870,86],{"class":75},[58,72872,1361],{"class":82},[58,72874,93],{"class":92},[58,72876,102],{"class":75},[58,72878,72879,72881,72883,72885,72887,72889,72892,72894,72896,72898,72901,72903,72905],{"class":60,"line":8629},[58,72880,62609],{"class":82},[58,72882,86],{"class":75},[58,72884,89],{"class":82},[58,72886,93],{"class":92},[58,72888,96],{"class":82},[58,72890,72891],{"class":82}," rgb",[58,72893,793],{"class":75},[58,72895,2369],{"class":82},[58,72897,469],{"class":75},[58,72899,72900],{"class":82},"197",[58,72902,469],{"class":75},[58,72904,72900],{"class":82},[58,72906,3365],{"class":75},[58,72908,72909],{"class":60,"line":8656},[58,72910,2833],{"class":75},[58,72912,72913],{"class":60,"line":8661},[58,72914,3046],{"emptyLinePlaceholder":720},[58,72916,72917,72920],{"class":60,"line":8667},[58,72918,72919],{"class":71},"    button",[58,72921,76],{"class":75},[58,72923,72924,72926,72928,72930,72932],{"class":60,"line":8679},[58,72925,55420],{"class":82},[58,72927,86],{"class":75},[58,72929,1610],{"class":82},[58,72931,93],{"class":92},[58,72933,102],{"class":75},[58,72935,72936,72938,72940,72942,72944],{"class":60,"line":8691},[58,72937,55406],{"class":82},[58,72939,86],{"class":75},[58,72941,1270],{"class":82},[58,72943,93],{"class":92},[58,72945,102],{"class":75},[58,72947,72948,72950,72952,72955,72957,72959,72961,72964,72966,72968],{"class":60,"line":8703},[58,72949,55518],{"class":82},[58,72951,86],{"class":75},[58,72953,72954],{"class":82},"rgb",[58,72956,793],{"class":75},[58,72958,1753],{"class":82},[58,72960,469],{"class":75},[58,72962,72963],{"class":82},"187",[58,72965,469],{"class":75},[58,72967,1085],{"class":82},[58,72969,3365],{"class":75},[58,72971,72972,72974,72976,72978],{"class":60,"line":10361},[58,72973,58050],{"class":82},[58,72975,86],{"class":75},[58,72977,61476],{"class":82},[58,72979,102],{"class":75},[58,72981,72982,72984,72986,72988],{"class":60,"line":10386},[58,72983,62609],{"class":82},[58,72985,86],{"class":75},[58,72987,979],{"class":82},[58,72989,102],{"class":75},[58,72991,72992],{"class":60,"line":10409},[58,72993,2833],{"class":75},[58,72995,72996],{"class":60,"line":10433},[58,72997,3046],{"emptyLinePlaceholder":720},[58,72999,73000,73002,73004],{"class":60,"line":10438},[58,73001,72919],{"class":71},[58,73003,52326],{"class":71},[58,73005,76],{"class":75},[58,73007,73008,73010,73012,73015],{"class":60,"line":10443},[58,73009,55643],{"class":82},[58,73011,86],{"class":75},[58,73013,73014],{"class":82},"inline-block",[58,73016,102],{"class":75},[58,73018,73019,73021,73023,73025,73027],{"class":60,"line":10448},[58,73020,55406],{"class":82},[58,73022,86],{"class":75},[58,73024,1232],{"class":82},[58,73026,93],{"class":92},[58,73028,102],{"class":75},[58,73030,73031,73033,73035,73037,73039],{"class":60,"line":10457},[58,73032,55420],{"class":82},[58,73034,86],{"class":75},[58,73036,1232],{"class":82},[58,73038,93],{"class":92},[58,73040,102],{"class":75},[58,73042,73043,73045,73047,73049,73051],{"class":60,"line":10462},[58,73044,57993],{"class":82},[58,73046,86],{"class":75},[58,73048,1258],{"class":82},[58,73050,93],{"class":92},[58,73052,102],{"class":75},[58,73054,73055,73057,73059,73061,73063,73065,73068],{"class":60,"line":10468},[58,73056,62609],{"class":82},[58,73058,86],{"class":75},[58,73060,89],{"class":82},[58,73062,93],{"class":92},[58,73064,96],{"class":82},[58,73066,73067],{"class":82}," #fff",[58,73069,102],{"class":75},[58,73071,73072,73074,73076,73078,73080],{"class":60,"line":10489},[58,73073,55768],{"class":82},[58,73075,86],{"class":75},[58,73077,1105],{"class":82},[58,73079,93],{"class":92},[58,73081,102],{"class":75},[58,73083,73084,73086,73088,73090,73092],{"class":60,"line":10495},[58,73085,62382],{"class":82},[58,73087,86],{"class":75},[58,73089,89],{"class":82},[58,73091,93],{"class":92},[58,73093,102],{"class":75},[58,73095,73096],{"class":60,"line":10509},[58,73097,2833],{"class":75},[58,73099,73100],{"class":60,"line":10515},[58,73101,3046],{"emptyLinePlaceholder":720},[58,73103,73104,73107],{"class":60,"line":10542},[58,73105,73106],{"class":379},"    .total",[58,73108,76],{"class":75},[58,73110,73111,73113,73115,73117,73119],{"class":60,"line":10551},[58,73112,55406],{"class":82},[58,73114,86],{"class":75},[58,73116,62261],{"class":82},[58,73118,93],{"class":92},[58,73120,102],{"class":75},[58,73122,73123,73125,73127,73129,73131],{"class":60,"line":10557},[58,73124,55420],{"class":82},[58,73126,86],{"class":75},[58,73128,1187],{"class":82},[58,73130,93],{"class":92},[58,73132,102],{"class":75},[58,73134,73135,73137,73139,73141,73143],{"class":60,"line":10565},[58,73136,57993],{"class":82},[58,73138,86],{"class":75},[58,73140,1187],{"class":82},[58,73142,93],{"class":92},[58,73144,102],{"class":75},[58,73146,73147,73149,73151,73154],{"class":60,"line":10570},[58,73148,57920],{"class":82},[58,73150,86],{"class":75},[58,73152,73153],{"class":82},"right",[58,73155,102],{"class":75},[58,73157,73158,73160,73162,73164,73166,73168,73170,73172],{"class":60,"line":17247},[58,73159,55342],{"class":82},[58,73161,86],{"class":75},[58,73163,1187],{"class":82},[58,73165,93],{"class":92},[58,73167,52195],{"class":82},[58,73169,2684],{"class":82},[58,73171,93],{"class":92},[58,73173,102],{"class":75},[58,73175,73176,73179,73181,73183,73185],{"class":60,"line":17253},[58,73177,73178],{"class":82},"      padding-right",[58,73180,86],{"class":75},[58,73182,1232],{"class":82},[58,73184,93],{"class":92},[58,73186,102],{"class":75},[58,73188,73189,73191,73193,73195,73197],{"class":60,"line":17276},[58,73190,55556],{"class":82},[58,73192,86],{"class":75},[58,73194,1309],{"class":82},[58,73196,93],{"class":92},[58,73198,102],{"class":75},[58,73200,73201,73203,73205,73207,73209,73212,73214,73217,73219,73221],{"class":60,"line":17282},[58,73202,55518],{"class":82},[58,73204,86],{"class":75},[58,73206,72954],{"class":82},[58,73208,793],{"class":75},[58,73210,73211],{"class":82},"237",[58,73213,469],{"class":75},[58,73215,73216],{"class":82},"235",[58,73218,469],{"class":75},[58,73220,73216],{"class":82},[58,73222,3365],{"class":75},[58,73224,73225,73228,73230,73232],{"class":60,"line":17305},[58,73226,73227],{"class":82},"      box-sizing",[58,73229,86],{"class":75},[58,73231,61139],{"class":82},[58,73233,102],{"class":75},[58,73235,73236],{"class":60,"line":17319},[58,73237,2833],{"class":75},[58,73239,73240],{"class":60,"line":17339},[58,73241,3046],{"emptyLinePlaceholder":720},[58,73243,73244,73246,73248],{"class":60,"line":17345},[58,73245,73106],{"class":379},[58,73247,52326],{"class":71},[58,73249,76],{"class":75},[58,73251,73252,73254,73256,73258],{"class":60,"line":17356},[58,73253,58050],{"class":82},[58,73255,86],{"class":75},[58,73257,58055],{"class":82},[58,73259,102],{"class":75},[58,73261,73262],{"class":60,"line":17379},[58,73263,2833],{"class":75},[58,73265,73266],{"class":60,"line":17401},[58,73267,3046],{"emptyLinePlaceholder":720},[58,73269,73270,73272],{"class":60,"line":17406},[58,73271,65655],{"class":71},[58,73273,76],{"class":75},[58,73275,73276,73278,73280,73282,73284],{"class":60,"line":17412},[58,73277,55406],{"class":82},[58,73279,86],{"class":75},[58,73281,62261],{"class":82},[58,73283,93],{"class":92},[58,73285,102],{"class":75},[58,73287,73288,73290,73292,73295],{"class":60,"line":17426},[58,73289,55342],{"class":82},[58,73291,86],{"class":75},[58,73293,73294],{"class":82},"auto",[58,73296,102],{"class":75},[58,73298,73299,73301,73303,73305],{"class":60,"line":17439},[58,73300,65662],{"class":82},[58,73302,86],{"class":75},[58,73304,65667],{"class":82},[58,73306,102],{"class":75},[58,73308,73309],{"class":60,"line":17444},[58,73310,2833],{"class":75},[58,73312,73313],{"class":60,"line":17458},[58,73314,3046],{"emptyLinePlaceholder":720},[58,73316,73317,73319],{"class":60,"line":17463},[58,73318,65747],{"class":71},[58,73320,76],{"class":75},[58,73322,73323,73325,73327,73329,73331,73333,73335,73337,73339,73341],{"class":60,"line":17469},[58,73324,55518],{"class":82},[58,73326,86],{"class":75},[58,73328,72954],{"class":82},[58,73330,793],{"class":75},[58,73332,73211],{"class":82},[58,73334,469],{"class":75},[58,73336,73216],{"class":82},[58,73338,469],{"class":75},[58,73340,73216],{"class":82},[58,73342,3365],{"class":75},[58,73344,73345],{"class":60,"line":17474},[58,73346,2833],{"class":75},[58,73348,73349],{"class":60,"line":17488},[58,73350,3046],{"emptyLinePlaceholder":720},[58,73352,73353,73355],{"class":60,"line":17493},[58,73354,65747],{"class":71},[58,73356,32110],{"class":75},[58,73358,73359,73361],{"class":60,"line":17498},[58,73360,65813],{"class":71},[58,73362,76],{"class":75},[58,73364,73365,73367,73369,73371,73373],{"class":60,"line":17512},[58,73366,55420],{"class":82},[58,73368,86],{"class":75},[58,73370,1059],{"class":82},[58,73372,93],{"class":92},[58,73374,102],{"class":75},[58,73376,73377,73379,73381,73383],{"class":60,"line":17524},[58,73378,57920],{"class":82},[58,73380,86],{"class":75},[58,73382,24379],{"class":82},[58,73384,102],{"class":75},[58,73386,73387,73389,73391,73393,73395],{"class":60,"line":17529},[58,73388,55556],{"class":82},[58,73390,86],{"class":75},[58,73392,1335],{"class":82},[58,73394,93],{"class":92},[58,73396,102],{"class":75},[58,73398,73399,73401,73403,73405,73407,73409,73411,73413,73416,73418,73421,73423,73425],{"class":60,"line":17542},[58,73400,62609],{"class":82},[58,73402,86],{"class":75},[58,73404,89],{"class":82},[58,73406,93],{"class":92},[58,73408,96],{"class":82},[58,73410,72891],{"class":82},[58,73412,793],{"class":75},[58,73414,73415],{"class":82},"228",[58,73417,469],{"class":75},[58,73419,73420],{"class":82},"225",[58,73422,469],{"class":75},[58,73424,73420],{"class":82},[58,73426,3365],{"class":75},[58,73428,73429,73432,73434,73436,73438],{"class":60,"line":17547},[58,73430,73431],{"class":82},"      padding-left",[58,73433,86],{"class":75},[58,73435,1105],{"class":82},[58,73437,93],{"class":92},[58,73439,102],{"class":75},[58,73441,73442,73444,73446,73448,73451,73453,73455],{"class":60,"line":17552},[58,73443,62492],{"class":82},[58,73445,86],{"class":75},[58,73447,28765],{"class":82},[58,73449,73450],{"class":82}," linear",[58,73452,62499],{"class":82},[58,73454,1481],{"class":92},[58,73456,102],{"class":75},[58,73458,73459],{"class":60,"line":17557},[58,73460,2833],{"class":75},[58,73462,73463],{"class":60,"line":17570},[58,73464,3046],{"emptyLinePlaceholder":720},[58,73466,73467,73470,73472,73474],{"class":60,"line":17575},[58,73468,73469],{"class":71},"    tbody",[58,73471,70776],{"class":71},[58,73473,61573],{"class":379},[58,73475,76],{"class":75},[58,73477,73478,73480,73482,73484,73486,73488,73490,73492,73494,73496],{"class":60,"line":33277},[58,73479,55518],{"class":82},[58,73481,86],{"class":75},[58,73483,72954],{"class":82},[58,73485,793],{"class":75},[58,73487,73211],{"class":82},[58,73489,469],{"class":75},[58,73491,73216],{"class":82},[58,73493,469],{"class":75},[58,73495,73216],{"class":82},[58,73497,3365],{"class":75},[58,73499,73500,73502,73504,73506],{"class":60,"line":33283},[58,73501,62657],{"class":82},[58,73503,86],{"class":75},[58,73505,62662],{"class":82},[58,73507,102],{"class":75},[58,73509,73510],{"class":60,"line":33289},[58,73511,2833],{"class":75},[58,73513,73514],{"class":60,"line":33295},[58,73515,3046],{"emptyLinePlaceholder":720},[58,73517,73518,73520,73522,73525,73527],{"class":60,"line":33301},[58,73519,73469],{"class":71},[58,73521,70776],{"class":71},[58,73523,73524],{"class":71}," td",[58,73526,2048],{"class":71},[58,73528,76],{"class":75},[58,73530,73531,73533,73535,73537],{"class":60,"line":33312},[58,73532,55643],{"class":82},[58,73534,86],{"class":75},[58,73536,500],{"class":82},[58,73538,102],{"class":75},[58,73540,73541,73543,73545,73547,73549],{"class":60,"line":33318},[58,73542,55406],{"class":82},[58,73544,86],{"class":75},[58,73546,1692],{"class":82},[58,73548,93],{"class":92},[58,73550,102],{"class":75},[58,73552,73553,73555,73557,73559,73561],{"class":60,"line":33338},[58,73554,55420],{"class":82},[58,73556,86],{"class":75},[58,73558,1610],{"class":82},[58,73560,93],{"class":92},[58,73562,102],{"class":75},[58,73564,73565,73567,73569,73571,73573],{"class":60,"line":33344},[58,73566,57993],{"class":82},[58,73568,86],{"class":75},[58,73570,1610],{"class":82},[58,73572,93],{"class":92},[58,73574,102],{"class":75},[58,73576,73577,73579,73581,73583,73585],{"class":60,"line":33355},[58,73578,62709],{"class":82},[58,73580,86],{"class":75},[58,73582,867],{"class":82},[58,73584,93],{"class":92},[58,73586,102],{"class":75},[58,73588,73589,73591,73593,73595],{"class":60,"line":33361},[58,73590,58050],{"class":82},[58,73592,86],{"class":75},[58,73594,61476],{"class":82},[58,73596,102],{"class":75},[58,73598,73599,73601,73603,73605],{"class":60,"line":33367},[58,73600,57920],{"class":82},[58,73602,86],{"class":75},[58,73604,52231],{"class":82},[58,73606,102],{"class":75},[58,73608,73609,73611,73613,73615],{"class":60,"line":33373},[58,73610,64602],{"class":82},[58,73612,86],{"class":75},[58,73614,55373],{"class":82},[58,73616,102],{"class":75},[58,73618,73619,73621,73623,73626],{"class":60,"line":33379},[58,73620,55518],{"class":82},[58,73622,86],{"class":75},[58,73624,73625],{"class":82},"orange",[58,73627,102],{"class":75},[58,73629,73630,73632,73634,73637,73639],{"class":60,"line":33385},[58,73631,55768],{"class":82},[58,73633,86],{"class":75},[58,73635,73636],{"class":82},"12.5",[58,73638,93],{"class":92},[58,73640,102],{"class":75},[58,73642,73643],{"class":60,"line":33391},[58,73644,2833],{"class":75},[58,73646,73647,73649,73651],{"class":60,"line":33397},[58,73648,53055],{"class":75},[58,73650,702],{"class":71},[58,73652,403],{"class":75},[58,73654,73655,73657,73659],{"class":60,"line":33417},[58,73656,52423],{"class":75},[58,73658,51976],{"class":71},[58,73660,403],{"class":75},[58,73662,73663],{"class":60,"line":33423},[58,73664,3046],{"emptyLinePlaceholder":720},[58,73666,73667,73669,73671],{"class":60,"line":33439},[58,73668,373],{"class":75},[58,73670,52438],{"class":71},[58,73672,403],{"class":75},[58,73674,73675,73677,73679,73682,73684],{"class":60,"line":33445},[58,73676,52782],{"class":75},[58,73678,14],{"class":71},[58,73680,73681],{"class":75},">学生就业统计表\u003C\u002F",[58,73683,14],{"class":71},[58,73685,403],{"class":75},[58,73687,73688,73690,73692,73694,73696,73698,73700,73702,73704],{"class":60,"line":33459},[58,73689,52782],{"class":75},[58,73691,67257],{"class":71},[58,73693,54124],{"class":379},[58,73695,383],{"class":75},[58,73697,63296],{"class":386},[58,73699,69702],{"class":379},[58,73701,383],{"class":75},[58,73703,32420],{"class":386},[58,73705,403],{"class":75},[58,73707,73708,73710,73712,73714,73716,73718,73720,73722,73724,73726,73728,73731,73733,73735,73737],{"class":60,"line":33465},[58,73709,51983],{"class":75},[58,73711,54457],{"class":71},[58,73713,54460],{"class":379},[58,73715,383],{"class":75},[58,73717,63331],{"class":386},[58,73719,15564],{"class":379},[58,73721,383],{"class":75},[58,73723,69728],{"class":386},[58,73725,61653],{"class":379},[58,73727,383],{"class":75},[58,73729,73730],{"class":386},"\"姓名\"",[58,73732,54124],{"class":379},[58,73734,383],{"class":75},[58,73736,69728],{"class":386},[58,73738,403],{"class":75},[58,73740,73741,73743,73745,73747,73749,73751,73753,73755,73757,73759,73761,73764,73766,73768,73770],{"class":60,"line":33480},[58,73742,51983],{"class":75},[58,73744,54457],{"class":71},[58,73746,54460],{"class":379},[58,73748,383],{"class":75},[58,73750,63331],{"class":386},[58,73752,15564],{"class":379},[58,73754,383],{"class":75},[58,73756,69756],{"class":386},[58,73758,61653],{"class":379},[58,73760,383],{"class":75},[58,73762,73763],{"class":386},"\"年龄\"",[58,73765,54124],{"class":379},[58,73767,383],{"class":75},[58,73769,69756],{"class":386},[58,73771,403],{"class":75},[58,73773,73774,73776,73778,73780,73782,73784,73786,73788,73790,73792,73794,73797,73799,73801,73803],{"class":60,"line":33486},[58,73775,51983],{"class":75},[58,73777,54457],{"class":71},[58,73779,54460],{"class":379},[58,73781,383],{"class":75},[58,73783,63331],{"class":386},[58,73785,15564],{"class":379},[58,73787,383],{"class":75},[58,73789,69858],{"class":386},[58,73791,61653],{"class":379},[58,73793,383],{"class":75},[58,73795,73796],{"class":386},"\"薪资\"",[58,73798,54124],{"class":379},[58,73800,383],{"class":75},[58,73802,69858],{"class":386},[58,73804,403],{"class":75},[58,73806,73807,73809,73811,73813,73815,73817,73819,73821,73823,73825,73827,73829],{"class":60,"line":33495},[58,73808,51983],{"class":75},[58,73810,69776],{"class":71},[58,73812,15564],{"class":379},[58,73814,383],{"class":75},[58,73816,69783],{"class":386},[58,73818,15603],{"class":379},[58,73820,383],{"class":75},[58,73822,8298],{"class":386},[58,73824,54124],{"class":379},[58,73826,383],{"class":75},[58,73828,69783],{"class":386},[58,73830,403],{"class":75},[58,73832,73833,73835,73837,73839,73841,73843,73845,73847],{"class":60,"line":33501},[58,73834,55868],{"class":75},[58,73836,69798],{"class":71},[58,73838,67283],{"class":379},[58,73840,383],{"class":75},[58,73842,10606],{"class":386},[58,73844,69807],{"class":75},[58,73846,69798],{"class":71},[58,73848,403],{"class":75},[58,73850,73851,73853,73855,73857,73859,73861,73863,73865],{"class":60,"line":33510},[58,73852,55868],{"class":75},[58,73854,69798],{"class":71},[58,73856,67283],{"class":379},[58,73858,383],{"class":75},[58,73860,10675],{"class":386},[58,73862,69826],{"class":75},[58,73864,69798],{"class":71},[58,73866,403],{"class":75},[58,73868,73869,73871,73873],{"class":60,"line":33516},[58,73870,52414],{"class":75},[58,73872,69776],{"class":71},[58,73874,403],{"class":75},[58,73876,73877,73879,73881,73883,73885,73887,73889,73891,73893,73895,73897,73899],{"class":60,"line":33522},[58,73878,51983],{"class":75},[58,73880,69776],{"class":71},[58,73882,15564],{"class":379},[58,73884,383],{"class":75},[58,73886,69880],{"class":386},[58,73888,15603],{"class":379},[58,73890,383],{"class":75},[58,73892,8298],{"class":386},[58,73894,54124],{"class":379},[58,73896,383],{"class":75},[58,73898,69880],{"class":386},[58,73900,403],{"class":75},[58,73902,73903,73905,73907,73909,73911,73913,73915,73917],{"class":60,"line":33531},[58,73904,55868],{"class":75},[58,73906,69798],{"class":71},[58,73908,67283],{"class":379},[58,73910,383],{"class":75},[58,73912,69901],{"class":386},[58,73914,69904],{"class":75},[58,73916,69798],{"class":71},[58,73918,403],{"class":75},[58,73920,73921,73923,73925,73927,73929,73931,73933,73935],{"class":60,"line":33537},[58,73922,55868],{"class":75},[58,73924,69798],{"class":71},[58,73926,67283],{"class":379},[58,73928,383],{"class":75},[58,73930,69921],{"class":386},[58,73932,69924],{"class":75},[58,73934,69798],{"class":71},[58,73936,403],{"class":75},[58,73938,73939,73941,73943,73945,73947,73949,73951,73953],{"class":60,"line":33548},[58,73940,55868],{"class":75},[58,73942,69798],{"class":71},[58,73944,67283],{"class":379},[58,73946,383],{"class":75},[58,73948,69941],{"class":386},[58,73950,69944],{"class":75},[58,73952,69798],{"class":71},[58,73954,403],{"class":75},[58,73956,73957,73959,73961,73963,73965,73967,73969,73971],{"class":60,"line":33554},[58,73958,55868],{"class":75},[58,73960,69798],{"class":71},[58,73962,67283],{"class":379},[58,73964,383],{"class":75},[58,73966,69961],{"class":386},[58,73968,69964],{"class":75},[58,73970,69798],{"class":71},[58,73972,403],{"class":75},[58,73974,73975,73977,73979,73981,73983,73985,73987,73989],{"class":60,"line":33573},[58,73976,55868],{"class":75},[58,73978,69798],{"class":71},[58,73980,67283],{"class":379},[58,73982,383],{"class":75},[58,73984,69981],{"class":386},[58,73986,69984],{"class":75},[58,73988,69798],{"class":71},[58,73990,403],{"class":75},[58,73992,73993,73995,73997],{"class":60,"line":33579},[58,73994,52414],{"class":75},[58,73996,69776],{"class":71},[58,73998,403],{"class":75},[58,74000,74001,74003,74005],{"class":60,"line":33590},[58,74002,51983],{"class":75},[58,74004,54523],{"class":71},[58,74006,403],{"class":75},[58,74008,74009,74011,74013,74016,74018,74021,74023],{"class":60,"line":33596},[58,74010,55868],{"class":75},[58,74012,58],{"class":71},[58,74014,74015],{"class":75},">+\u003C\u002F",[58,74017,58],{"class":71},[58,74019,74020],{"class":75},">添加\u003C\u002F",[58,74022,54523],{"class":71},[58,74024,403],{"class":75},[58,74026,74027,74029,74031],{"class":60,"line":33616},[58,74028,53055],{"class":75},[58,74030,67257],{"class":71},[58,74032,403],{"class":75},[58,74034,74035,74037,74039,74041,74043,74045,74048,74050,74053,74055,74058,74060],{"class":60,"line":33632},[58,74036,52782],{"class":75},[58,74038,72],{"class":71},[58,74040,54124],{"class":379},[58,74042,383],{"class":75},[58,74044,63212],{"class":386},[58,74046,74047],{"class":75},">共有数据 \u003C",[58,74049,58],{"class":71},[58,74051,74052],{"class":75},">0\u003C\u002F",[58,74054,58],{"class":71},[58,74056,74057],{"class":75},"> 条\u003C\u002F",[58,74059,72],{"class":71},[58,74061,403],{"class":75},[58,74063,74064,74066,74068],{"class":60,"line":33638},[58,74065,52782],{"class":75},[58,74067,926],{"class":71},[58,74069,403],{"class":75},[58,74071,74072,74074,74076],{"class":60,"line":33652},[58,74073,51983],{"class":75},[58,74075,929],{"class":71},[58,74077,403],{"class":75},[58,74079,74080,74082,74084],{"class":60,"line":33658},[58,74081,55868],{"class":75},[58,74083,932],{"class":71},[58,74085,403],{"class":75},[58,74087,74088,74090,74092,74095,74097],{"class":60,"line":33664},[58,74089,55936],{"class":75},[58,74091,935],{"class":71},[58,74093,74094],{"class":75},">ID\u003C\u002F",[58,74096,935],{"class":71},[58,74098,403],{"class":75},[58,74100,74101,74103,74105,74107,74109],{"class":60,"line":33675},[58,74102,55936],{"class":75},[58,74104,935],{"class":71},[58,74106,70087],{"class":75},[58,74108,935],{"class":71},[58,74110,403],{"class":75},[58,74112,74113,74115,74117,74119,74121],{"class":60,"line":33681},[58,74114,55936],{"class":75},[58,74116,935],{"class":71},[58,74118,70100],{"class":75},[58,74120,935],{"class":71},[58,74122,403],{"class":75},[58,74124,74125,74127,74129,74131,74133],{"class":60,"line":33687},[58,74126,55936],{"class":75},[58,74128,935],{"class":71},[58,74130,70113],{"class":75},[58,74132,935],{"class":71},[58,74134,403],{"class":75},[58,74136,74137,74139,74141,74143,74145],{"class":60,"line":33697},[58,74138,55936],{"class":75},[58,74140,935],{"class":71},[58,74142,70126],{"class":75},[58,74144,935],{"class":71},[58,74146,403],{"class":75},[58,74148,74149,74151,74153,74155,74157],{"class":60,"line":33703},[58,74150,55936],{"class":75},[58,74152,935],{"class":71},[58,74154,70139],{"class":75},[58,74156,935],{"class":71},[58,74158,403],{"class":75},[58,74160,74161,74163,74165,74168,74170],{"class":60,"line":33714},[58,74162,55936],{"class":75},[58,74164,935],{"class":71},[58,74166,74167],{"class":75},">录入时间\u003C\u002F",[58,74169,935],{"class":71},[58,74171,403],{"class":75},[58,74173,74174,74176,74178,74180,74182],{"class":60,"line":33720},[58,74175,55936],{"class":75},[58,74177,935],{"class":71},[58,74179,70152],{"class":75},[58,74181,935],{"class":71},[58,74183,403],{"class":75},[58,74185,74186,74188,74190],{"class":60,"line":33730},[58,74187,56041],{"class":75},[58,74189,932],{"class":71},[58,74191,403],{"class":75},[58,74193,74194,74196,74198],{"class":60,"line":33735},[58,74195,52414],{"class":75},[58,74197,929],{"class":71},[58,74199,403],{"class":75},[58,74201,74202,74204,74206],{"class":60,"line":33741},[58,74203,51983],{"class":75},[58,74205,972],{"class":71},[58,74207,403],{"class":75},[58,74209,74210],{"class":60,"line":33790},[58,74211,74212],{"class":64},"      \u003C!-- \u003Ctr>\n",[58,74214,74215],{"class":60,"line":33837},[58,74216,74217],{"class":64},"        \u003Ctd>1\u003C\u002Ftd>\n",[58,74219,74220],{"class":60,"line":33842},[58,74221,74217],{"class":64},[58,74223,74224],{"class":60,"line":33848},[58,74225,74217],{"class":64},[58,74227,74228],{"class":60,"line":33867},[58,74229,74217],{"class":64},[58,74231,74232],{"class":60,"line":33873},[58,74233,74217],{"class":64},[58,74235,74236],{"class":60,"line":33893},[58,74237,74217],{"class":64},[58,74239,74240],{"class":60,"line":33899},[58,74241,74217],{"class":64},[58,74243,74244],{"class":60,"line":33905},[58,74245,74246],{"class":64},"        \u003Ctd>\n",[58,74248,74249],{"class":60,"line":33915},[58,74250,74251],{"class":64},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[58,74253,74254],{"class":60,"line":33920},[58,74255,74256],{"class":64},"        \u003C\u002Ftd>\n",[58,74258,74259],{"class":60,"line":33926},[58,74260,74261],{"class":64},"      \u003C\u002Ftr> -->\n",[58,74263,74264,74266,74268],{"class":60,"line":33942},[58,74265,52414],{"class":75},[58,74267,972],{"class":71},[58,74269,403],{"class":75},[58,74271,74272,74274,74276],{"class":60,"line":33987},[58,74273,53055],{"class":75},[58,74275,926],{"class":71},[58,74277,403],{"class":75},[58,74279,74280,74282,74284],{"class":60,"line":33993},[58,74281,52782],{"class":75},[58,74283,52451],{"class":71},[58,74285,403],{"class":75},[58,74287,74288],{"class":60,"line":33999},[58,74289,74290],{"class":64},"    \u002F\u002F const initData = [{\n",[58,74292,74293],{"class":60,"line":34005},[58,74294,74295],{"class":64},"    \u002F\u002F   unameId: 1,\n",[58,74297,74298],{"class":60,"line":34016},[58,74299,74300],{"class":64},"    \u002F\u002F   uname: '华晨宇',\n",[58,74302,74303],{"class":60,"line":34022},[58,74304,74305],{"class":64},"    \u002F\u002F   age: 22,\n",[58,74307,74308],{"class":60,"line":34028},[58,74309,74310],{"class":64},"    \u002F\u002F   salary: 12000,\n",[58,74312,74313],{"class":60,"line":34034},[58,74314,74315],{"class":64},"    \u002F\u002F   gender: '男',\n",[58,74317,74318],{"class":60,"line":34052},[58,74319,74320],{"class":64},"    \u002F\u002F   city: '北京',\n",[58,74322,74323],{"class":60,"line":34066},[58,74324,74325],{"class":64},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[58,74327,74328],{"class":60,"line":34075},[58,74329,74330],{"class":64},"    \u002F\u002F }]\n",[58,74332,74333],{"class":60,"line":34084},[58,74334,74335],{"class":64},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[58,74337,74338],{"class":60,"line":34093},[58,74339,74340],{"class":64},"    \u002F\u002F 1.渲染业务\n",[58,74342,74343],{"class":60,"line":34102},[58,74344,74345],{"class":64},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[58,74347,74348],{"class":60,"line":34108},[58,74349,74350],{"class":64},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[58,74352,74353],{"class":60,"line":34114},[58,74354,74355],{"class":64},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[58,74357,74358],{"class":60,"line":34122},[58,74359,3046],{"emptyLinePlaceholder":720},[58,74361,74362],{"class":60,"line":34127},[58,74363,74364],{"class":64},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[58,74366,74367],{"class":60,"line":34133},[58,74368,74369],{"class":64},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[58,74371,74372,74374,74376,74378],{"class":60,"line":34144},[58,74373,11866],{"class":92},[58,74375,58329],{"class":82},[58,74377,14208],{"class":92},[58,74379,52476],{"class":75},[58,74381,74382,74385,74387],{"class":60,"line":34150},[58,74383,74384],{"class":75},"    console.",[58,74386,58881],{"class":379},[58,74388,53050],{"class":75},[58,74390,74391],{"class":60,"line":34170},[58,74392,3046],{"emptyLinePlaceholder":720},[58,74394,74395],{"class":60,"line":34176},[58,74396,74397],{"class":64},"    \u002F\u002F 时间函数\n",[58,74399,74400,74402,74405],{"class":60,"line":34182},[58,74401,70716],{"class":92},[58,74403,74404],{"class":379}," getTime",[58,74406,11498],{"class":75},[58,74408,74409,74411,74414,74416,74418,74421],{"class":60,"line":34188},[58,74410,58862],{"class":92},[58,74412,74413],{"class":82}," date",[58,74415,14208],{"class":92},[58,74417,12223],{"class":92},[58,74419,74420],{"class":379}," Date",[58,74422,2622],{"class":75},[58,74424,74425,74427,74429,74431,74434,74437,74439,74441,74443,74446,74449,74451,74453,74455,74457,74459,74461,74463],{"class":60,"line":34205},[58,74426,58862],{"class":92},[58,74428,16734],{"class":82},[58,74430,14208],{"class":92},[58,74432,74433],{"class":75}," date.",[58,74435,74436],{"class":379},"getHours",[58,74438,13694],{"class":75},[58,74440,373],{"class":92},[58,74442,2684],{"class":82},[58,74444,74445],{"class":92}," ?",[58,74447,74448],{"class":386}," '0'",[58,74450,46210],{"class":92},[58,74452,74433],{"class":75},[58,74454,74436],{"class":379},[58,74456,13694],{"class":75},[58,74458,1644],{"class":92},[58,74460,74433],{"class":75},[58,74462,74436],{"class":379},[58,74464,2622],{"class":75},[58,74466,74467,74469,74472,74474,74476,74479,74481,74483,74485,74487,74489,74491,74493,74495,74497,74499,74501,74503],{"class":60,"line":34211},[58,74468,58862],{"class":92},[58,74470,74471],{"class":82}," m",[58,74473,14208],{"class":92},[58,74475,74433],{"class":75},[58,74477,74478],{"class":379},"getMinutes",[58,74480,13694],{"class":75},[58,74482,373],{"class":92},[58,74484,2684],{"class":82},[58,74486,74445],{"class":92},[58,74488,74448],{"class":386},[58,74490,46210],{"class":92},[58,74492,74433],{"class":75},[58,74494,74478],{"class":379},[58,74496,13694],{"class":75},[58,74498,1644],{"class":92},[58,74500,74433],{"class":75},[58,74502,74478],{"class":379},[58,74504,2622],{"class":75},[58,74506,74507,74509,74511,74513,74515,74518,74520,74522,74524,74526,74528,74530,74532,74534,74536,74538,74540,74542],{"class":60,"line":34217},[58,74508,58862],{"class":92},[58,74510,9074],{"class":82},[58,74512,14208],{"class":92},[58,74514,74433],{"class":75},[58,74516,74517],{"class":379},"getSeconds",[58,74519,13694],{"class":75},[58,74521,373],{"class":92},[58,74523,2684],{"class":82},[58,74525,74445],{"class":92},[58,74527,74448],{"class":386},[58,74529,46210],{"class":92},[58,74531,74433],{"class":75},[58,74533,74517],{"class":379},[58,74535,13694],{"class":75},[58,74537,1644],{"class":92},[58,74539,74433],{"class":75},[58,74541,74517],{"class":379},[58,74543,2622],{"class":75},[58,74545,74546,74548,74551,74553,74555,74558,74560,74563,74565,74568,74570,74572,74575,74577,74579,74581,74583,74585,74587,74590,74592,74595,74597,74600,74602,74604,74606],{"class":60,"line":34223},[58,74547,58862],{"class":92},[58,74549,74550],{"class":82}," str",[58,74552,14208],{"class":92},[58,74554,63535],{"class":386},[58,74556,74557],{"class":75},"date",[58,74559,1344],{"class":386},[58,74561,74562],{"class":379},"getFullYear",[58,74564,3073],{"class":386},[58,74566,74567],{"class":386},"}\u002F${",[58,74569,74557],{"class":75},[58,74571,1344],{"class":386},[58,74573,74574],{"class":379},"getMonth",[58,74576,13694],{"class":386},[58,74578,1267],{"class":92},[58,74580,25762],{"class":82},[58,74582,74567],{"class":386},[58,74584,74557],{"class":75},[58,74586,1344],{"class":386},[58,74588,74589],{"class":379},"getDate",[58,74591,3073],{"class":386},[58,74593,74594],{"class":386},"} ${",[58,74596,1201],{"class":75},[58,74598,74599],{"class":386},"}:${",[58,74601,1330],{"class":75},[58,74603,74599],{"class":386},[58,74605,1481],{"class":75},[58,74607,74608],{"class":386},"}`\n",[58,74610,74611,74614],{"class":60,"line":34229},[58,74612,74613],{"class":92},"      return",[58,74615,74616],{"class":75}," str\n",[58,74618,74619],{"class":60,"line":34235},[58,74620,2833],{"class":75},[58,74622,74623],{"class":60,"line":34262},[58,74624,74625],{"class":64},"    \u002F\u002F 渲染函数\n",[58,74627,74628,74630,74632,74634,74636,74638,74640,74642],{"class":60,"line":34286},[58,74629,11866],{"class":92},[58,74631,70379],{"class":82},[58,74633,14208],{"class":92},[58,74635,55032],{"class":75},[58,74637,55035],{"class":379},[58,74639,793],{"class":75},[58,74641,70390],{"class":386},[58,74643,799],{"class":75},[58,74645,74646,74648,74650],{"class":60,"line":34292},[58,74647,70716],{"class":92},[58,74649,70719],{"class":379},[58,74651,11498],{"class":75},[58,74653,74654],{"class":60,"line":34298},[58,74655,74656],{"class":64},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[58,74658,74659],{"class":60,"line":34304},[58,74660,74661],{"class":64},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[58,74663,74664,74666,74669,74671,74673,74676,74678,74680,74682,74685,74687,74690],{"class":60,"line":34315},[58,74665,58862],{"class":92},[58,74667,74668],{"class":82}," trArr",[58,74670,14208],{"class":92},[58,74672,52603],{"class":75},[58,74674,74675],{"class":379},"map",[58,74677,793],{"class":75},[58,74679,55085],{"class":92},[58,74681,2305],{"class":75},[58,74683,74684],{"class":5862},"ele",[58,74686,469],{"class":75},[58,74688,74689],{"class":5862},"index",[58,74691,13086],{"class":75},[58,74693,74694,74696],{"class":60,"line":34326},[58,74695,15396],{"class":92},[58,74697,70800],{"class":386},[58,74699,74700],{"class":60,"line":34332},[58,74701,74702],{"class":386},"      \u003Ctr>\n",[58,74704,74705,74707,74709,74711,74714],{"class":60,"line":34349},[58,74706,70805],{"class":386},[58,74708,74684],{"class":75},[58,74710,1344],{"class":386},[58,74712,74713],{"class":75},"unameId",[58,74715,70820],{"class":386},[58,74717,74718,74720,74722,74724,74726],{"class":60,"line":34372},[58,74719,70805],{"class":386},[58,74721,74684],{"class":75},[58,74723,1344],{"class":386},[58,74725,70836],{"class":75},[58,74727,70820],{"class":386},[58,74729,74730,74732,74734,74736,74738],{"class":60,"line":34395},[58,74731,70805],{"class":386},[58,74733,74684],{"class":75},[58,74735,1344],{"class":386},[58,74737,70853],{"class":75},[58,74739,70820],{"class":386},[58,74741,74742,74744,74746,74748,74750],{"class":60,"line":34401},[58,74743,70805],{"class":386},[58,74745,74684],{"class":75},[58,74747,1344],{"class":386},[58,74749,70870],{"class":75},[58,74751,70820],{"class":386},[58,74753,74754,74756,74758,74760,74762],{"class":60,"line":34406},[58,74755,70805],{"class":386},[58,74757,74684],{"class":75},[58,74759,1344],{"class":386},[58,74761,70887],{"class":75},[58,74763,70820],{"class":386},[58,74765,74766,74768,74770,74772,74774],{"class":60,"line":34415},[58,74767,70805],{"class":386},[58,74769,74684],{"class":75},[58,74771,1344],{"class":386},[58,74773,70904],{"class":75},[58,74775,70820],{"class":386},[58,74777,74778,74780,74782,74784,74786],{"class":60,"line":34425},[58,74779,70805],{"class":386},[58,74781,74684],{"class":75},[58,74783,1344],{"class":386},[58,74785,3033],{"class":75},[58,74787,70820],{"class":386},[58,74789,74790],{"class":60,"line":34431},[58,74791,74246],{"class":386},[58,74793,74794,74797,74799],{"class":60,"line":34436},[58,74795,74796],{"class":386},"          \u003Ca href=\"#\" data-id=\"${",[58,74798,74689],{"class":75},[58,74800,74801],{"class":386},"}\">删除\u003C\u002Fa>\n",[58,74803,74804],{"class":60,"line":34442},[58,74805,74256],{"class":386},[58,74807,74808],{"class":60,"line":34455},[58,74809,74810],{"class":386},"      \u003C\u002Ftr>\n",[58,74812,74813],{"class":60,"line":34461},[58,74814,74815],{"class":386},"  `\n",[58,74817,74818],{"class":60,"line":34472},[58,74819,65447],{"class":75},[58,74821,74822,74824,74826],{"class":60,"line":34483},[58,74823,58878],{"class":75},[58,74825,58881],{"class":379},[58,74827,74828],{"class":75},"(trArr)\n",[58,74830,74831],{"class":60,"line":34502},[58,74832,3046],{"emptyLinePlaceholder":720},[58,74834,74835],{"class":60,"line":50162},[58,74836,74837],{"class":64},"      \u002F\u002F (2) 把数组转换为字符串join\n",[58,74839,74840],{"class":60,"line":50167},[58,74841,74842],{"class":64},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[58,74844,74845,74847,74849,74852,74855,74857,74860],{"class":60,"line":50176},[58,74846,70731],{"class":75},[58,74848,383],{"class":92},[58,74850,74851],{"class":75}," trArr.",[58,74853,74854],{"class":379},"join",[58,74856,793],{"class":75},[58,74858,74859],{"class":386},"''",[58,74861,799],{"class":75},[58,74863,74864],{"class":60,"line":50185},[58,74865,74866],{"class":64},"      \u002F\u002F 显示共有几条\n",[58,74868,74869,74871,74873,74875,74878,74881,74883,74885],{"class":60,"line":50190},[58,74870,56405],{"class":75},[58,74872,55035],{"class":379},[58,74874,793],{"class":75},[58,74876,74877],{"class":386},"'.total span'",[58,74879,74880],{"class":75},").innerHTML ",[58,74882,383],{"class":92},[58,74884,52603],{"class":75},[58,74886,56465],{"class":82},[58,74888,74889],{"class":60,"line":50195},[58,74890,2833],{"class":75},[58,74892,74893],{"class":60,"line":50200},[58,74894,74895],{"class":64},"    \u002F\u002F render()\n",[58,74897,74898],{"class":60,"line":50213},[58,74899,3046],{"emptyLinePlaceholder":720},[58,74901,74902],{"class":60,"line":50218},[58,74903,74904],{"class":64},"    \u002F\u002F 获取DOM对象\n",[58,74906,74907,74909,74911,74913,74915,74917,74919,74921],{"class":60,"line":50227},[58,74908,11866],{"class":92},[58,74910,70453],{"class":82},[58,74912,14208],{"class":92},[58,74914,55032],{"class":75},[58,74916,55035],{"class":379},[58,74918,793],{"class":75},[58,74920,70464],{"class":386},[58,74922,799],{"class":75},[58,74924,74925,74927,74929,74931,74933,74935,74937,74939],{"class":60,"line":50236},[58,74926,11866],{"class":92},[58,74928,70280],{"class":82},[58,74930,14208],{"class":92},[58,74932,55032],{"class":75},[58,74934,55035],{"class":379},[58,74936,793],{"class":75},[58,74938,70291],{"class":386},[58,74940,799],{"class":75},[58,74942,74943,74945,74947,74949,74951,74953,74955,74957],{"class":60,"line":50253},[58,74944,11866],{"class":92},[58,74946,16332],{"class":82},[58,74948,14208],{"class":92},[58,74950,55032],{"class":75},[58,74952,55035],{"class":379},[58,74954,793],{"class":75},[58,74956,70310],{"class":386},[58,74958,799],{"class":75},[58,74960,74962,74964,74966,74968,74970,74972,74974,74976],{"class":60,"line":74961},231,[58,74963,11866],{"class":92},[58,74965,70339],{"class":82},[58,74967,14208],{"class":92},[58,74969,55032],{"class":75},[58,74971,55035],{"class":379},[58,74973,793],{"class":75},[58,74975,70350],{"class":386},[58,74977,799],{"class":75},[58,74979,74981,74983,74985,74987,74989,74991,74993,74995],{"class":60,"line":74980},232,[58,74982,11866],{"class":92},[58,74984,70319],{"class":82},[58,74986,14208],{"class":92},[58,74988,55032],{"class":75},[58,74990,55035],{"class":379},[58,74992,793],{"class":75},[58,74994,70330],{"class":386},[58,74996,799],{"class":75},[58,74998,75000,75002,75004,75006,75008,75010,75012,75014],{"class":60,"line":74999},233,[58,75001,11866],{"class":92},[58,75003,70359],{"class":82},[58,75005,14208],{"class":92},[58,75007,55032],{"class":75},[58,75009,55035],{"class":379},[58,75011,793],{"class":75},[58,75013,70370],{"class":386},[58,75015,799],{"class":75},[58,75017,75019],{"class":60,"line":75018},234,[58,75020,3046],{"emptyLinePlaceholder":720},[58,75022,75024],{"class":60,"line":75023},235,[58,75025,75026],{"class":64},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[58,75028,75030,75032,75034,75036,75038,75040,75042,75044,75046],{"class":60,"line":75029},236,[58,75031,70471],{"class":75},[58,75033,58447],{"class":379},[58,75035,793],{"class":75},[58,75037,70478],{"class":386},[58,75039,469],{"class":75},[58,75041,55085],{"class":92},[58,75043,2305],{"class":75},[58,75045,864],{"class":5862},[58,75047,13086],{"class":75},[58,75049,75051],{"class":60,"line":75050},237,[58,75052,75053],{"class":64},"      \u002F\u002F 禁止浏览器跳转\n",[58,75055,75057,75059,75061],{"class":60,"line":75056},238,[58,75058,70498],{"class":75},[58,75060,70501],{"class":379},[58,75062,2622],{"class":75},[58,75064,75066],{"class":60,"line":75065},239,[58,75067,75068],{"class":64},"      \u002F\u002F 非空判断\n",[58,75070,75072],{"class":60,"line":75071},240,[58,75073,75074],{"class":64},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[58,75076,75078],{"class":60,"line":75077},241,[58,75079,75080],{"class":64},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[58,75082,75084,75086,75088,75090,75093,75095,75098,75101,75103,75105],{"class":60,"line":75083},242,[58,75085,55116],{"class":92},[58,75087,2305],{"class":75},[58,75089,1013],{"class":92},[58,75091,75092],{"class":75},"uname.value ",[58,75094,71988],{"class":92},[58,75096,75097],{"class":92}," !",[58,75099,75100],{"class":75},"age.value ",[58,75102,71988],{"class":92},[58,75104,75097],{"class":92},[58,75106,75107],{"class":75},"salary.value) {\n",[58,75109,75111,75113,75115,75117,75119],{"class":60,"line":75110},243,[58,75112,15396],{"class":92},[58,75114,70572],{"class":379},[58,75116,793],{"class":75},[58,75118,70577],{"class":386},[58,75120,799],{"class":75},[58,75122,75124],{"class":60,"line":75123},244,[58,75125,53036],{"class":75},[58,75127,75129,75131,75133],{"class":60,"line":75128},245,[58,75130,58641],{"class":75},[58,75132,52522],{"class":379},[58,75134,75135],{"class":75},"({\n",[58,75137,75139],{"class":60,"line":75138},246,[58,75140,75141],{"class":64},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[58,75143,75145],{"class":60,"line":75144},247,[58,75146,75147],{"class":64},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[58,75149,75151],{"class":60,"line":75150},248,[58,75152,75153],{"class":64},"        \u002F\u002F 对象的序号应为数组长度+1\n",[58,75155,75157],{"class":60,"line":75156},249,[58,75158,75159],{"class":64},"        \u002F\u002F unameId: arr.length + 1,\n",[58,75161,75163],{"class":60,"line":75162},250,[58,75164,3046],{"emptyLinePlaceholder":720},[58,75166,75168],{"class":60,"line":75167},251,[58,75169,75170],{"class":64},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[58,75172,75174],{"class":60,"line":75173},252,[58,75175,75176],{"class":64},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[58,75178,75180],{"class":60,"line":75179},253,[58,75181,75182],{"class":64},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[58,75184,75186],{"class":60,"line":75185},254,[58,75187,75188],{"class":64},"        \u002F\u002F 0当假看\n",[58,75190,75192,75195,75197,75199,75202,75204,75206,75208,75211,75213,75215,75218,75220],{"class":60,"line":75191},255,[58,75193,75194],{"class":75},"        unameId: arr.",[58,75196,52606],{"class":82},[58,75198,74445],{"class":92},[58,75200,75201],{"class":75}," arr[arr.",[58,75203,52606],{"class":82},[58,75205,52909],{"class":92},[58,75207,25762],{"class":82},[58,75209,75210],{"class":75},"].unameId ",[58,75212,1267],{"class":92},[58,75214,25762],{"class":82},[58,75216,75217],{"class":92}," :",[58,75219,25762],{"class":82},[58,75221,32110],{"class":75},[58,75223,75225],{"class":60,"line":75224},256,[58,75226,70625],{"class":75},[58,75228,75230],{"class":60,"line":75229},257,[58,75231,70630],{"class":75},[58,75233,75235],{"class":60,"line":75234},258,[58,75236,70640],{"class":75},[58,75238,75240],{"class":60,"line":75239},259,[58,75241,70635],{"class":75},[58,75243,75245],{"class":60,"line":75244},260,[58,75246,75247],{"class":75},"        city: city.value,\n",[58,75249,75251],{"class":60,"line":75250},261,[58,75252,75253],{"class":64},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[58,75255,75257],{"class":60,"line":75256},262,[58,75258,75259],{"class":64},"        \u002F\u002F time: new Date().toDateString()\n",[58,75261,75263,75266,75269],{"class":60,"line":75262},263,[58,75264,75265],{"class":75},"        time: ",[58,75267,75268],{"class":379},"getTime",[58,75270,2622],{"class":75},[58,75272,75274],{"class":60,"line":75273},264,[58,75275,65447],{"class":75},[58,75277,75279],{"class":60,"line":75278},265,[58,75280,75281],{"class":64},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[58,75283,75285,75287],{"class":60,"line":75284},266,[58,75286,70700],{"class":379},[58,75288,2622],{"class":75},[58,75290,75292,75294,75296,75298,75300],{"class":60,"line":75291},267,[58,75293,70683],{"class":82},[58,75295,1344],{"class":75},[58,75297,70688],{"class":379},[58,75299,13694],{"class":75},[58,75301,75302],{"class":64},"\u002F\u002F重置表单\n",[58,75304,75306],{"class":60,"line":75305},268,[58,75307,75308],{"class":64},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[58,75310,75312,75315,75317,75319,75322,75324,75326,75328,75330],{"class":60,"line":75311},269,[58,75313,75314],{"class":75},"      localStorage.",[58,75316,72285],{"class":379},[58,75318,793],{"class":75},[58,75320,75321],{"class":386},"'data'",[58,75323,469],{"class":75},[58,75325,72295],{"class":82},[58,75327,1344],{"class":75},[58,75329,72300],{"class":379},[58,75331,75332],{"class":75},"(arr))\n",[58,75334,75336],{"class":60,"line":75335},270,[58,75337,34105],{"class":75},[58,75339,75341],{"class":60,"line":75340},271,[58,75342,3046],{"emptyLinePlaceholder":720},[58,75344,75346],{"class":60,"line":75345},272,[58,75347,75348],{"class":64},"    \u002F\u002F 3.删除业务\n",[58,75350,75352],{"class":60,"line":75351},273,[58,75353,75354],{"class":64},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[58,75356,75358,75360,75362,75364,75366,75368,75370,75372,75374],{"class":60,"line":75357},274,[58,75359,70973],{"class":75},[58,75361,58447],{"class":379},[58,75363,793],{"class":75},[58,75365,58452],{"class":386},[58,75367,469],{"class":75},[58,75369,55085],{"class":92},[58,75371,2305],{"class":75},[58,75373,864],{"class":5862},[58,75375,13086],{"class":75},[58,75377,75379],{"class":60,"line":75378},275,[58,75380,75381],{"class":64},"      \u002F\u002F 判断是否点击的是删除按钮\n",[58,75383,75385,75387,75389,75391,75393],{"class":60,"line":75384},276,[58,75386,55116],{"class":92},[58,75388,67666],{"class":75},[58,75390,55122],{"class":92},[58,75392,68888],{"class":386},[58,75394,13086],{"class":75},[58,75396,75398],{"class":60,"line":75397},277,[58,75399,75400],{"class":64},"        \u002F\u002F alert(1)\n",[58,75402,75404],{"class":60,"line":75403},278,[58,75405,75406],{"class":64},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[58,75408,75410],{"class":60,"line":75409},279,[58,75411,75412],{"class":64},"        \u002F\u002F console.log(e.target)\n",[58,75414,75416],{"class":60,"line":75415},280,[58,75417,75418],{"class":64},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[58,75420,75422],{"class":60,"line":75421},281,[58,75423,3046],{"emptyLinePlaceholder":720},[58,75425,75427],{"class":60,"line":75426},282,[58,75428,75429],{"class":64},"        \u002F\u002F 确认框，确然是否真的要删除\n",[58,75431,75433],{"class":60,"line":75432},283,[58,75434,75435],{"class":64},"        \u002F\u002F confirm()为确认框\n",[58,75437,75439],{"class":60,"line":75438},284,[58,75440,75441],{"class":64},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[58,75443,75445,75447,75449,75452,75454,75457],{"class":60,"line":75444},285,[58,75446,3143],{"class":92},[58,75448,2305],{"class":75},[58,75450,75451],{"class":379},"confirm",[58,75453,793],{"class":75},[58,75455,75456],{"class":386},"'您确定要删除这条数据吗？'",[58,75458,75459],{"class":75},")) {\n",[58,75461,75463,75466,75468,75470,75472],{"class":60,"line":75462},286,[58,75464,75465],{"class":75},"          arr.",[58,75467,58644],{"class":379},[58,75469,71026],{"class":75},[58,75471,89],{"class":82},[58,75473,799],{"class":75},[58,75475,75477],{"class":60,"line":75476},287,[58,75478,75479],{"class":64},"          \u002F\u002F 3.4 重新渲染页面\n",[58,75481,75483,75486],{"class":60,"line":75482},288,[58,75484,75485],{"class":379},"          render",[58,75487,2622],{"class":75},[58,75489,75491],{"class":60,"line":75490},289,[58,75492,75493],{"class":64},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[58,75495,75497,75500,75502,75504,75506,75508,75510,75512,75514],{"class":60,"line":75496},290,[58,75498,75499],{"class":75},"          localStorage.",[58,75501,72285],{"class":379},[58,75503,793],{"class":75},[58,75505,75321],{"class":386},[58,75507,469],{"class":75},[58,75509,72295],{"class":82},[58,75511,1344],{"class":75},[58,75513,72300],{"class":379},[58,75515,75332],{"class":75},[58,75517,75519],{"class":60,"line":75518},291,[58,75520,3175],{"class":75},[58,75522,75524],{"class":60,"line":75523},292,[58,75525,53036],{"class":75},[58,75527,75529],{"class":60,"line":75528},293,[58,75530,3046],{"emptyLinePlaceholder":720},[58,75532,75534],{"class":60,"line":75533},294,[58,75535,34105],{"class":75},[58,75537,75539],{"class":60,"line":75538},295,[58,75540,3046],{"emptyLinePlaceholder":720},[58,75542,75544,75546,75548],{"class":60,"line":75543},296,[58,75545,53055],{"class":75},[58,75547,52451],{"class":71},[58,75549,403],{"class":75},[58,75551,75553,75555,75557],{"class":60,"line":75552},297,[58,75554,52423],{"class":75},[58,75556,52438],{"class":71},[58,75558,403],{"class":75},[58,75560,75562],{"class":60,"line":75561},298,[58,75563,3046],{"emptyLinePlaceholder":720},[58,75565,75567,75569,75571],{"class":60,"line":75566},299,[58,75568,52423],{"class":75},[58,75570,51279],{"class":71},[58,75572,403],{"class":75},[14,75574,75576],{"id":75575},"_36-正则表达式","3.6 正则表达式",[175,75578,75579],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[175,75581,75582],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[175,75584,75585],{},"正则表达式的作用：",[124,75587,75588,75595,75601],{},[22,75589,75590,75591,75594],{},"表单验证（ ",[25,75592,75593],{},"匹配"," ）",[22,75596,75597,75598,75594],{},"过滤敏感词（ ",[25,75599,75600],{},"替换",[22,75602,75603,75604,75594],{},"字符串中提取我们想要的部分（ ",[25,75605,75606],{},"提取",[114,75608,75610],{"id":75609},"_361-语法","3.6.1 语法",[175,75612,75613],{},"正则表达式使用步骤：",[19,75615,75616,75619],{},[22,75617,75618],{},"定义规则",[22,75620,75621],{},"查找是否匹配",[175,75623,75624],{},"正则表达式里边不需要写引号",[175,75626,75627],{},[119,75628],{"alt":53,"src":75629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[175,75631,75632],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[175,75634,75635],{},"reg.test(str)",[175,75637,75638],{},[119,75639],{"alt":53,"src":75640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[175,75642,75643],{},[119,75644],{"alt":53,"src":75645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[114,75647,75649],{"id":75648},"_362-元字符","3.6.2 元字符",[19,75651,75652,75655,75658,75661,75668],{},[22,75653,75654],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[22,75656,75657],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[22,75659,75660],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[22,75662,75663,75664],{},"正则验证工具：",[376,75665,75666],{"href":75666,"rel":75667},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24508],[22,75669,75670],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22641,75672,75674],{"id":75673},"_3621-边界符","3.6.2.1 边界符",[175,75676,75677],{},[119,75678],{"alt":53,"src":75679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[175,75681,75682],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[175,75684,75685],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[175,75687,75688],{},"只匹配一次",[175,75690,75691],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22641,75693,75695],{"id":75694},"_3622-量词","3.6.2.2 量词",[175,75697,75698],{},[119,75699],{"alt":53,"src":75700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[175,75702,75703],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22641,75705,75707],{"id":75706},"_3623-元字符","3.6.2.3 元字符",[175,75709,75710],{},[119,75711],{"alt":53,"src":75712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[175,75714,75715],{},"匹配的是a或b或c []只选一个",[175,75717,75718],{},[119,75719],{"alt":53,"src":75720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[175,75722,75723],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[175,75725,75726],{},[119,75727],{"alt":53,"src":75728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[175,75730,75731],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[175,75733,75734],{},[119,75735],{"alt":53,"src":75736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[48,75738,75740],{"className":51277,"code":75739,"language":51279,"meta":53,"style":53},"\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",[55,75741,75742,75752,75766,75770,75778,75792,75812,75824,75832,75836,75844,75852,75857,75888,75915,75943,75947,75952,75980,76011,76016,76021,76052,76084,76116,76120,76125,76156,76186,76216,76220,76225,76256,76287,76317,76347,76351,76356,76389,76393,76398,76429,76460,76464,76469,76500,76530,76561,76565,76570,76602,76633,76664,76691,76722,76754,76787,76818,76849,76881,76912,76920,76928,76932],{"__ignoreMap":53},[58,75743,75744,75746,75748,75750],{"class":60,"line":61},[58,75745,51941],{"class":75},[58,75747,51944],{"class":71},[58,75749,51947],{"class":379},[58,75751,403],{"class":75},[58,75753,75754,75756,75758,75760,75762,75764],{"class":60,"line":68},[58,75755,373],{"class":75},[58,75757,51279],{"class":71},[58,75759,51958],{"class":379},[58,75761,383],{"class":75},[58,75763,51963],{"class":386},[58,75765,403],{"class":75},[58,75767,75768],{"class":60,"line":79},[58,75769,3046],{"emptyLinePlaceholder":720},[58,75771,75772,75774,75776],{"class":60,"line":105},[58,75773,373],{"class":75},[58,75775,51976],{"class":71},[58,75777,403],{"class":75},[58,75779,75780,75782,75784,75786,75788,75790],{"class":60,"line":627},[58,75781,52782],{"class":75},[58,75783,51986],{"class":71},[58,75785,51989],{"class":379},[58,75787,383],{"class":75},[58,75789,51994],{"class":386},[58,75791,403],{"class":75},[58,75793,75794,75796,75798,75800,75802,75804,75806,75808,75810],{"class":60,"line":509},[58,75795,52782],{"class":75},[58,75797,51986],{"class":71},[58,75799,15564],{"class":379},[58,75801,383],{"class":75},[58,75803,52033],{"class":386},[58,75805,52013],{"class":379},[58,75807,383],{"class":75},[58,75809,52040],{"class":386},[58,75811,403],{"class":75},[58,75813,75814,75816,75818,75820,75822],{"class":60,"line":559},[58,75815,52782],{"class":75},[58,75817,52049],{"class":71},[58,75819,52052],{"class":75},[58,75821,52049],{"class":71},[58,75823,403],{"class":75},[58,75825,75826,75828,75830],{"class":60,"line":654},[58,75827,52423],{"class":75},[58,75829,51976],{"class":71},[58,75831,403],{"class":75},[58,75833,75834],{"class":60,"line":671},[58,75835,3046],{"emptyLinePlaceholder":720},[58,75837,75838,75840,75842],{"class":60,"line":677},[58,75839,373],{"class":75},[58,75841,52438],{"class":71},[58,75843,403],{"class":75},[58,75845,75846,75848,75850],{"class":60,"line":2260},[58,75847,52782],{"class":75},[58,75849,52451],{"class":71},[58,75851,403],{"class":75},[58,75853,75854],{"class":60,"line":694},[58,75855,75856],{"class":64},"    \u002F\u002F 元字符中\n",[58,75858,75859,75861,75863,75865,75867,75870,75872,75874,75877,75879,75882,75885],{"class":60,"line":2270},[58,75860,74384],{"class":75},[58,75862,58881],{"class":379},[58,75864,793],{"class":75},[58,75866,1370],{"class":386},[58,75868,75869],{"class":48621},"哈",[58,75871,1370],{"class":386},[58,75873,1344],{"class":75},[58,75875,75876],{"class":379},"test",[58,75878,793],{"class":75},[58,75880,75881],{"class":386},"'哈'",[58,75883,75884],{"class":75},"))  ",[58,75886,75887],{"class":64},"\u002F\u002Ftrue\n",[58,75889,75890,75892,75894,75896,75898,75900,75902,75904,75906,75908,75911,75913],{"class":60,"line":2275},[58,75891,74384],{"class":75},[58,75893,58881],{"class":379},[58,75895,793],{"class":75},[58,75897,1370],{"class":386},[58,75899,75869],{"class":48621},[58,75901,1370],{"class":386},[58,75903,1344],{"class":75},[58,75905,75876],{"class":379},[58,75907,793],{"class":75},[58,75909,75910],{"class":386},"'哈哈'",[58,75912,75884],{"class":75},[58,75914,75887],{"class":64},[58,75916,75917,75919,75921,75923,75925,75927,75929,75931,75933,75935,75938,75941],{"class":60,"line":2289},[58,75918,74384],{"class":75},[58,75920,58881],{"class":379},[58,75922,793],{"class":75},[58,75924,1370],{"class":386},[58,75926,75869],{"class":48621},[58,75928,1370],{"class":386},[58,75930,1344],{"class":75},[58,75932,75876],{"class":379},[58,75934,793],{"class":75},[58,75936,75937],{"class":386},"'二哈'",[58,75939,75940],{"class":75},"))   ",[58,75942,75887],{"class":64},[58,75944,75945],{"class":60,"line":2294},[58,75946,3046],{"emptyLinePlaceholder":720},[58,75948,75949],{"class":60,"line":2300},[58,75950,75951],{"class":64},"    \u002F\u002F 1.边界符\n",[58,75953,75954,75956,75958,75960,75962,75964,75966,75968,75970,75972,75974,75976,75978],{"class":60,"line":2321},[58,75955,74384],{"class":75},[58,75957,58881],{"class":379},[58,75959,793],{"class":75},[58,75961,1370],{"class":386},[58,75963,1750],{"class":92},[58,75965,75869],{"class":48621},[58,75967,1370],{"class":386},[58,75969,1344],{"class":75},[58,75971,75876],{"class":379},[58,75973,793],{"class":75},[58,75975,75881],{"class":386},[58,75977,75884],{"class":75},[58,75979,75887],{"class":64},[58,75981,75982,75984,75986,75988,75990,75992,75994,75996,75998,76000,76002,76004,76006,76008],{"class":60,"line":2326},[58,75983,74384],{"class":75},[58,75985,58881],{"class":379},[58,75987,793],{"class":75},[58,75989,1370],{"class":386},[58,75991,1750],{"class":92},[58,75993,75869],{"class":48621},[58,75995,1088],{"class":92},[58,75997,1370],{"class":386},[58,75999,1344],{"class":75},[58,76001,75876],{"class":379},[58,76003,793],{"class":75},[58,76005,75910],{"class":386},[58,76007,75884],{"class":75},[58,76009,76010],{"class":64},"\u002F\u002Ffalse\n",[58,76012,76013],{"class":60,"line":2340},[58,76014,76015],{"class":64},"    \u002F\u002F 2.量词\n",[58,76017,76018],{"class":60,"line":2345},[58,76019,76020],{"class":64},"    \u002F\u002F 量词 * 类似于 >= 0\n",[58,76022,76023,76025,76027,76029,76031,76033,76035,76038,76040,76042,76044,76046,76048,76050],{"class":60,"line":2374},[58,76024,74384],{"class":75},[58,76026,58881],{"class":379},[58,76028,793],{"class":75},[58,76030,1370],{"class":386},[58,76032,1750],{"class":92},[58,76034,75869],{"class":48621},[58,76036,76037],{"class":92},"*$",[58,76039,1370],{"class":386},[58,76041,1344],{"class":75},[58,76043,75876],{"class":379},[58,76045,793],{"class":75},[58,76047,75910],{"class":386},[58,76049,75884],{"class":75},[58,76051,75887],{"class":64},[58,76053,76054,76056,76058,76060,76062,76064,76066,76068,76070,76072,76074,76076,76079,76081],{"class":60,"line":2379},[58,76055,74384],{"class":75},[58,76057,58881],{"class":379},[58,76059,793],{"class":75},[58,76061,1370],{"class":386},[58,76063,1750],{"class":92},[58,76065,75869],{"class":48621},[58,76067,76037],{"class":92},[58,76069,1370],{"class":386},[58,76071,1344],{"class":75},[58,76073,75876],{"class":379},[58,76075,793],{"class":75},[58,76077,76078],{"class":386},"'二哈好傻'",[58,76080,75884],{"class":75},[58,76082,76083],{"class":64},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[58,76085,76086,76088,76090,76092,76094,76096,76098,76100,76102,76104,76106,76108,76111,76113],{"class":60,"line":2396},[58,76087,74384],{"class":75},[58,76089,58881],{"class":379},[58,76091,793],{"class":75},[58,76093,1370],{"class":386},[58,76095,1750],{"class":92},[58,76097,75869],{"class":48621},[58,76099,76037],{"class":92},[58,76101,1370],{"class":386},[58,76103,1344],{"class":75},[58,76105,75876],{"class":379},[58,76107,793],{"class":75},[58,76109,76110],{"class":386},"'哈好哈'",[58,76112,75940],{"class":75},[58,76114,76115],{"class":64},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[58,76117,76118],{"class":60,"line":2401},[58,76119,3046],{"emptyLinePlaceholder":720},[58,76121,76122],{"class":60,"line":2406},[58,76123,76124],{"class":64},"    \u002F\u002F +类似于>=1\n",[58,76126,76127,76129,76131,76133,76135,76137,76139,76142,76144,76146,76148,76150,76152,76154],{"class":60,"line":2411},[58,76128,74384],{"class":75},[58,76130,58881],{"class":379},[58,76132,793],{"class":75},[58,76134,1370],{"class":386},[58,76136,1750],{"class":92},[58,76138,75869],{"class":48621},[58,76140,76141],{"class":92},"+$",[58,76143,1370],{"class":386},[58,76145,1344],{"class":75},[58,76147,75876],{"class":379},[58,76149,793],{"class":75},[58,76151,75910],{"class":386},[58,76153,75884],{"class":75},[58,76155,75887],{"class":64},[58,76157,76158,76160,76162,76164,76166,76168,76170,76172,76174,76176,76178,76180,76182,76184],{"class":60,"line":2425},[58,76159,74384],{"class":75},[58,76161,58881],{"class":379},[58,76163,793],{"class":75},[58,76165,1370],{"class":386},[58,76167,1750],{"class":92},[58,76169,75869],{"class":48621},[58,76171,76141],{"class":92},[58,76173,1370],{"class":386},[58,76175,1344],{"class":75},[58,76177,75876],{"class":379},[58,76179,793],{"class":75},[58,76181,76078],{"class":386},[58,76183,75884],{"class":75},[58,76185,76083],{"class":64},[58,76187,76188,76190,76192,76194,76196,76198,76200,76202,76204,76206,76208,76210,76212,76214],{"class":60,"line":2430},[58,76189,74384],{"class":75},[58,76191,58881],{"class":379},[58,76193,793],{"class":75},[58,76195,1370],{"class":386},[58,76197,1750],{"class":92},[58,76199,75869],{"class":48621},[58,76201,76141],{"class":92},[58,76203,1370],{"class":386},[58,76205,1344],{"class":75},[58,76207,75876],{"class":379},[58,76209,793],{"class":75},[58,76211,76110],{"class":386},[58,76213,75940],{"class":75},[58,76215,76010],{"class":64},[58,76217,76218],{"class":60,"line":3223},[58,76219,3046],{"emptyLinePlaceholder":720},[58,76221,76222],{"class":60,"line":3237},[58,76223,76224],{"class":64},"    \u002F\u002F ?类似于0次或一次\n",[58,76226,76227,76229,76231,76233,76235,76237,76240,76242,76244,76246,76248,76250,76252,76254],{"class":60,"line":3245},[58,76228,74384],{"class":75},[58,76230,58881],{"class":379},[58,76232,793],{"class":75},[58,76234,1370],{"class":386},[58,76236,1750],{"class":92},[58,76238,76239],{"class":48621},"哈？",[58,76241,1088],{"class":92},[58,76243,1370],{"class":386},[58,76245,1344],{"class":75},[58,76247,75876],{"class":379},[58,76249,793],{"class":75},[58,76251,74859],{"class":386},[58,76253,75940],{"class":75},[58,76255,75887],{"class":64},[58,76257,76258,76260,76262,76264,76266,76268,76270,76273,76275,76277,76279,76281,76283,76285],{"class":60,"line":3250},[58,76259,74384],{"class":75},[58,76261,58881],{"class":379},[58,76263,793],{"class":75},[58,76265,1370],{"class":386},[58,76267,1750],{"class":92},[58,76269,75869],{"class":48621},[58,76271,76272],{"class":92},"?$",[58,76274,1370],{"class":386},[58,76276,1344],{"class":75},[58,76278,75876],{"class":379},[58,76280,793],{"class":75},[58,76282,75910],{"class":386},[58,76284,75884],{"class":75},[58,76286,76010],{"class":64},[58,76288,76289,76291,76293,76295,76297,76299,76301,76303,76305,76307,76309,76311,76313,76315],{"class":60,"line":3256},[58,76290,74384],{"class":75},[58,76292,58881],{"class":379},[58,76294,793],{"class":75},[58,76296,1370],{"class":386},[58,76298,1750],{"class":92},[58,76300,75869],{"class":48621},[58,76302,76272],{"class":92},[58,76304,1370],{"class":386},[58,76306,1344],{"class":75},[58,76308,75876],{"class":379},[58,76310,793],{"class":75},[58,76312,76078],{"class":386},[58,76314,75884],{"class":75},[58,76316,76083],{"class":64},[58,76318,76319,76321,76323,76325,76327,76329,76331,76333,76335,76337,76339,76341,76343,76345],{"class":60,"line":3262},[58,76320,74384],{"class":75},[58,76322,58881],{"class":379},[58,76324,793],{"class":75},[58,76326,1370],{"class":386},[58,76328,1750],{"class":92},[58,76330,75869],{"class":48621},[58,76332,76272],{"class":92},[58,76334,1370],{"class":386},[58,76336,1344],{"class":75},[58,76338,75876],{"class":379},[58,76340,793],{"class":75},[58,76342,76110],{"class":386},[58,76344,75884],{"class":75},[58,76346,76010],{"class":64},[58,76348,76349],{"class":60,"line":3267},[58,76350,3046],{"emptyLinePlaceholder":720},[58,76352,76353],{"class":60,"line":8594},[58,76354,76355],{"class":64},"    \u002F\u002F {n}写几，就必须出现几次\n",[58,76357,76358,76360,76362,76364,76366,76368,76370,76373,76375,76377,76379,76381,76384,76387],{"class":60,"line":8618},[58,76359,74384],{"class":75},[58,76361,58881],{"class":379},[58,76363,793],{"class":75},[58,76365,1370],{"class":386},[58,76367,1750],{"class":92},[58,76369,75869],{"class":48621},[58,76371,76372],{"class":92},"{4}$",[58,76374,1370],{"class":386},[58,76376,1344],{"class":75},[58,76378,75876],{"class":379},[58,76380,793],{"class":75},[58,76382,76383],{"class":386},"'哈哈哈哈'",[58,76385,76386],{"class":75},")) ",[58,76388,75887],{"class":64},[58,76390,76391],{"class":60,"line":8623},[58,76392,3046],{"emptyLinePlaceholder":720},[58,76394,76395],{"class":60,"line":8629},[58,76396,76397],{"class":64},"    \u002F\u002F {n,}大于等于n次\n",[58,76399,76400,76402,76404,76406,76408,76410,76412,76415,76417,76419,76421,76423,76425,76427],{"class":60,"line":8656},[58,76401,74384],{"class":75},[58,76403,58881],{"class":379},[58,76405,793],{"class":75},[58,76407,1370],{"class":386},[58,76409,1750],{"class":92},[58,76411,75869],{"class":48621},[58,76413,76414],{"class":92},"{4,}$",[58,76416,1370],{"class":386},[58,76418,1344],{"class":75},[58,76420,75876],{"class":379},[58,76422,793],{"class":75},[58,76424,76383],{"class":386},[58,76426,76386],{"class":75},[58,76428,75887],{"class":64},[58,76430,76431,76433,76435,76437,76439,76441,76443,76445,76447,76449,76451,76453,76456,76458],{"class":60,"line":8661},[58,76432,74384],{"class":75},[58,76434,58881],{"class":379},[58,76436,793],{"class":75},[58,76438,1370],{"class":386},[58,76440,1750],{"class":92},[58,76442,75869],{"class":48621},[58,76444,76414],{"class":92},[58,76446,1370],{"class":386},[58,76448,1344],{"class":75},[58,76450,75876],{"class":379},[58,76452,793],{"class":75},[58,76454,76455],{"class":386},"'哈哈哈哈哈'",[58,76457,76386],{"class":75},[58,76459,75887],{"class":64},[58,76461,76462],{"class":60,"line":8667},[58,76463,3046],{"emptyLinePlaceholder":720},[58,76465,76466],{"class":60,"line":8679},[58,76467,76468],{"class":64},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[58,76470,76471,76473,76475,76477,76479,76481,76483,76486,76488,76490,76492,76494,76496,76498],{"class":60,"line":8691},[58,76472,74384],{"class":75},[58,76474,58881],{"class":379},[58,76476,793],{"class":75},[58,76478,1370],{"class":386},[58,76480,1750],{"class":92},[58,76482,75869],{"class":48621},[58,76484,76485],{"class":92},"{4,6}$",[58,76487,1370],{"class":386},[58,76489,1344],{"class":75},[58,76491,75876],{"class":379},[58,76493,793],{"class":75},[58,76495,76383],{"class":386},[58,76497,76386],{"class":75},[58,76499,75887],{"class":64},[58,76501,76502,76504,76506,76508,76510,76512,76514,76516,76518,76520,76522,76524,76526,76528],{"class":60,"line":8703},[58,76503,74384],{"class":75},[58,76505,58881],{"class":379},[58,76507,793],{"class":75},[58,76509,1370],{"class":386},[58,76511,1750],{"class":92},[58,76513,75869],{"class":48621},[58,76515,76485],{"class":92},[58,76517,1370],{"class":386},[58,76519,1344],{"class":75},[58,76521,75876],{"class":379},[58,76523,793],{"class":75},[58,76525,76455],{"class":386},[58,76527,76386],{"class":75},[58,76529,75887],{"class":64},[58,76531,76532,76534,76536,76538,76540,76542,76544,76546,76548,76550,76552,76554,76557,76559],{"class":60,"line":10361},[58,76533,74384],{"class":75},[58,76535,58881],{"class":379},[58,76537,793],{"class":75},[58,76539,1370],{"class":386},[58,76541,1750],{"class":92},[58,76543,75869],{"class":48621},[58,76545,76485],{"class":92},[58,76547,1370],{"class":386},[58,76549,1344],{"class":75},[58,76551,75876],{"class":379},[58,76553,793],{"class":75},[58,76555,76556],{"class":386},"'哈哈哈哈哈哈哈'",[58,76558,76386],{"class":75},[58,76560,76010],{"class":64},[58,76562,76563],{"class":60,"line":10386},[58,76564,3046],{"emptyLinePlaceholder":720},[58,76566,76567],{"class":60,"line":10409},[58,76568,76569],{"class":64},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[58,76571,76572,76574,76576,76578,76580,76582,76585,76587,76589,76591,76593,76595,76598,76600],{"class":60,"line":10433},[58,76573,74384],{"class":75},[58,76575,58881],{"class":379},[58,76577,793],{"class":75},[58,76579,1370],{"class":386},[58,76581,1750],{"class":92},[58,76583,76584],{"class":82},"[abc]",[58,76586,1088],{"class":92},[58,76588,1370],{"class":386},[58,76590,1344],{"class":75},[58,76592,75876],{"class":379},[58,76594,793],{"class":75},[58,76596,76597],{"class":386},"'a'",[58,76599,75884],{"class":75},[58,76601,75887],{"class":64},[58,76603,76604,76606,76608,76610,76612,76614,76616,76618,76620,76622,76624,76626,76629,76631],{"class":60,"line":10438},[58,76605,74384],{"class":75},[58,76607,58881],{"class":379},[58,76609,793],{"class":75},[58,76611,1370],{"class":386},[58,76613,1750],{"class":92},[58,76615,76584],{"class":82},[58,76617,1088],{"class":92},[58,76619,1370],{"class":386},[58,76621,1344],{"class":75},[58,76623,75876],{"class":379},[58,76625,793],{"class":75},[58,76627,76628],{"class":386},"'b'",[58,76630,75884],{"class":75},[58,76632,75887],{"class":64},[58,76634,76635,76637,76639,76641,76643,76645,76647,76649,76651,76653,76655,76657,76660,76662],{"class":60,"line":10443},[58,76636,74384],{"class":75},[58,76638,58881],{"class":379},[58,76640,793],{"class":75},[58,76642,1370],{"class":386},[58,76644,1750],{"class":92},[58,76646,76584],{"class":82},[58,76648,1088],{"class":92},[58,76650,1370],{"class":386},[58,76652,1344],{"class":75},[58,76654,75876],{"class":379},[58,76656,793],{"class":75},[58,76658,76659],{"class":386},"'c'",[58,76661,75884],{"class":75},[58,76663,75887],{"class":64},[58,76665,76666,76668,76670,76672,76674,76676,76678,76680,76682,76684,76687,76689],{"class":60,"line":10448},[58,76667,74384],{"class":75},[58,76669,58881],{"class":379},[58,76671,793],{"class":75},[58,76673,1370],{"class":386},[58,76675,76584],{"class":82},[58,76677,1370],{"class":386},[58,76679,1344],{"class":75},[58,76681,75876],{"class":379},[58,76683,793],{"class":75},[58,76685,76686],{"class":386},"'ab'",[58,76688,75884],{"class":75},[58,76690,75887],{"class":64},[58,76692,76693,76695,76697,76699,76701,76703,76705,76707,76709,76711,76713,76715,76717,76719],{"class":60,"line":10457},[58,76694,74384],{"class":75},[58,76696,58881],{"class":379},[58,76698,793],{"class":75},[58,76700,1370],{"class":386},[58,76702,1750],{"class":92},[58,76704,76584],{"class":82},[58,76706,1088],{"class":92},[58,76708,1370],{"class":386},[58,76710,1344],{"class":75},[58,76712,75876],{"class":379},[58,76714,793],{"class":75},[58,76716,76686],{"class":386},[58,76718,75884],{"class":75},[58,76720,76721],{"class":64},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[58,76723,76724,76726,76728,76730,76732,76734,76736,76739,76741,76743,76745,76747,76749,76751],{"class":60,"line":10462},[58,76725,74384],{"class":75},[58,76727,58881],{"class":379},[58,76729,793],{"class":75},[58,76731,1370],{"class":386},[58,76733,1750],{"class":92},[58,76735,76584],{"class":82},[58,76737,76738],{"class":92},"{2}$",[58,76740,1370],{"class":386},[58,76742,1344],{"class":75},[58,76744,75876],{"class":379},[58,76746,793],{"class":75},[58,76748,76686],{"class":386},[58,76750,75884],{"class":75},[58,76752,76753],{"class":64},"\u002F\u002Ftrue   可以选两个\n",[58,76755,76756,76758,76760,76762,76764,76766,76769,76771,76773,76775,76777,76779,76782,76784],{"class":60,"line":10468},[58,76757,74384],{"class":75},[58,76759,58881],{"class":379},[58,76761,793],{"class":75},[58,76763,1370],{"class":386},[58,76765,1750],{"class":92},[58,76767,76768],{"class":82},"[a-z]",[58,76770,1088],{"class":92},[58,76772,1370],{"class":386},[58,76774,1344],{"class":75},[58,76776,75876],{"class":379},[58,76778,793],{"class":75},[58,76780,76781],{"class":386},"'p'",[58,76783,75940],{"class":75},[58,76785,76786],{"class":64},"\u002F\u002Ftrue   依然只能选一个\n",[58,76788,76789,76791,76793,76795,76797,76799,76802,76804,76806,76808,76810,76812,76814,76816],{"class":60,"line":10489},[58,76790,74384],{"class":75},[58,76792,58881],{"class":379},[58,76794,793],{"class":75},[58,76796,1370],{"class":386},[58,76798,1750],{"class":92},[58,76800,76801],{"class":82},"[A-Z]",[58,76803,1088],{"class":92},[58,76805,1370],{"class":386},[58,76807,1344],{"class":75},[58,76809,75876],{"class":379},[58,76811,793],{"class":75},[58,76813,76781],{"class":386},[58,76815,75940],{"class":75},[58,76817,76010],{"class":64},[58,76819,76820,76822,76824,76826,76828,76830,76832,76834,76836,76838,76840,76842,76845,76847],{"class":60,"line":10495},[58,76821,74384],{"class":75},[58,76823,58881],{"class":379},[58,76825,793],{"class":75},[58,76827,1370],{"class":386},[58,76829,1750],{"class":92},[58,76831,76801],{"class":82},[58,76833,1088],{"class":92},[58,76835,1370],{"class":386},[58,76837,1344],{"class":75},[58,76839,75876],{"class":379},[58,76841,793],{"class":75},[58,76843,76844],{"class":386},"'P'",[58,76846,75940],{"class":75},[58,76848,75887],{"class":64},[58,76850,76851,76853,76855,76857,76859,76861,76864,76866,76868,76870,76872,76874,76877,76879],{"class":60,"line":10509},[58,76852,74384],{"class":75},[58,76854,58881],{"class":379},[58,76856,793],{"class":75},[58,76858,1370],{"class":386},[58,76860,1750],{"class":92},[58,76862,76863],{"class":82},"[0-9]",[58,76865,1088],{"class":92},[58,76867,1370],{"class":386},[58,76869,1344],{"class":75},[58,76871,75876],{"class":379},[58,76873,793],{"class":75},[58,76875,76876],{"class":386},"'0'",[58,76878,75940],{"class":75},[58,76880,75887],{"class":64},[58,76882,76883,76885,76887,76889,76891,76893,76896,76898,76900,76902,76904,76906,76908,76910],{"class":60,"line":10515},[58,76884,74384],{"class":75},[58,76886,58881],{"class":379},[58,76888,793],{"class":75},[58,76890,1370],{"class":386},[58,76892,1750],{"class":92},[58,76894,76895],{"class":82},"[a-zA-Z0-9]",[58,76897,1088],{"class":92},[58,76899,1370],{"class":386},[58,76901,1344],{"class":75},[58,76903,75876],{"class":379},[58,76905,793],{"class":75},[58,76907,76781],{"class":386},[58,76909,75884],{"class":75},[58,76911,75887],{"class":64},[58,76913,76914,76916,76918],{"class":60,"line":10542},[58,76915,53055],{"class":75},[58,76917,52451],{"class":71},[58,76919,403],{"class":75},[58,76921,76922,76924,76926],{"class":60,"line":10551},[58,76923,52423],{"class":75},[58,76925,52438],{"class":71},[58,76927,403],{"class":75},[58,76929,76930],{"class":60,"line":10557},[58,76931,3046],{"emptyLinePlaceholder":720},[58,76933,76934,76936,76938],{"class":60,"line":10565},[58,76935,52423],{"class":75},[58,76937,51279],{"class":71},[58,76939,403],{"class":75},[22641,76941,76943],{"id":76942},"_3624-修饰符","3.6.2.4 修饰符",[175,76945,76946],{},[119,76947],{"alt":53,"src":76948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[175,76950,76951],{},"replace是个方法，使用的时候一定不要忘记括号()",[175,76953,76954],{},[119,76955],{"alt":53,"src":76956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[48,76958,76960],{"className":51277,"code":76959,"language":51279,"meta":53,"style":53},"\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",[55,76961,76962,76972,76986,76994,77008,77028,77040,77048,77056,77064,77096,77127,77132,77164,77175,77208,77217,77225,77233],{"__ignoreMap":53},[58,76963,76964,76966,76968,76970],{"class":60,"line":61},[58,76965,51941],{"class":75},[58,76967,51944],{"class":71},[58,76969,51947],{"class":379},[58,76971,403],{"class":75},[58,76973,76974,76976,76978,76980,76982,76984],{"class":60,"line":68},[58,76975,373],{"class":75},[58,76977,51279],{"class":71},[58,76979,51958],{"class":379},[58,76981,383],{"class":75},[58,76983,51963],{"class":386},[58,76985,403],{"class":75},[58,76987,76988,76990,76992],{"class":60,"line":79},[58,76989,373],{"class":75},[58,76991,51976],{"class":71},[58,76993,403],{"class":75},[58,76995,76996,76998,77000,77002,77004,77006],{"class":60,"line":105},[58,76997,52782],{"class":75},[58,76999,51986],{"class":71},[58,77001,51989],{"class":379},[58,77003,383],{"class":75},[58,77005,51994],{"class":386},[58,77007,403],{"class":75},[58,77009,77010,77012,77014,77016,77018,77020,77022,77024,77026],{"class":60,"line":627},[58,77011,52782],{"class":75},[58,77013,51986],{"class":71},[58,77015,15564],{"class":379},[58,77017,383],{"class":75},[58,77019,52033],{"class":386},[58,77021,52013],{"class":379},[58,77023,383],{"class":75},[58,77025,52040],{"class":386},[58,77027,403],{"class":75},[58,77029,77030,77032,77034,77036,77038],{"class":60,"line":509},[58,77031,52782],{"class":75},[58,77033,52049],{"class":71},[58,77035,52052],{"class":75},[58,77037,52049],{"class":71},[58,77039,403],{"class":75},[58,77041,77042,77044,77046],{"class":60,"line":559},[58,77043,52423],{"class":75},[58,77045,51976],{"class":71},[58,77047,403],{"class":75},[58,77049,77050,77052,77054],{"class":60,"line":654},[58,77051,373],{"class":75},[58,77053,52438],{"class":71},[58,77055,403],{"class":75},[58,77057,77058,77060,77062],{"class":60,"line":671},[58,77059,52782],{"class":75},[58,77061,52451],{"class":71},[58,77063,403],{"class":75},[58,77065,77066,77068,77070,77072,77074,77076,77079,77081,77083,77085,77087,77089,77092,77094],{"class":60,"line":677},[58,77067,74384],{"class":75},[58,77069,58881],{"class":379},[58,77071,793],{"class":75},[58,77073,1370],{"class":386},[58,77075,1750],{"class":92},[58,77077,77078],{"class":48621},"java",[58,77080,1088],{"class":92},[58,77082,1370],{"class":386},[58,77084,1344],{"class":75},[58,77086,75876],{"class":379},[58,77088,793],{"class":75},[58,77090,77091],{"class":386},"'java'",[58,77093,76386],{"class":75},[58,77095,75887],{"class":64},[58,77097,77098,77100,77102,77104,77106,77108,77110,77112,77114,77116,77118,77120,77123,77125],{"class":60,"line":2260},[58,77099,74384],{"class":75},[58,77101,58881],{"class":379},[58,77103,793],{"class":75},[58,77105,1370],{"class":386},[58,77107,1750],{"class":92},[58,77109,77078],{"class":48621},[58,77111,1088],{"class":92},[58,77113,1370],{"class":386},[58,77115,1344],{"class":75},[58,77117,75876],{"class":379},[58,77119,793],{"class":75},[58,77121,77122],{"class":386},"'Java'",[58,77124,76386],{"class":75},[58,77126,76010],{"class":64},[58,77128,77129],{"class":60,"line":694},[58,77130,77131],{"class":64},"    \u002F\u002F 不区分大小写、\n",[58,77133,77134,77136,77138,77140,77142,77144,77146,77148,77150,77152,77154,77156,77158,77160,77162],{"class":60,"line":2270},[58,77135,74384],{"class":75},[58,77137,58881],{"class":379},[58,77139,793],{"class":75},[58,77141,1370],{"class":386},[58,77143,1750],{"class":92},[58,77145,77078],{"class":48621},[58,77147,1088],{"class":92},[58,77149,1370],{"class":386},[58,77151,1227],{"class":92},[58,77153,1344],{"class":75},[58,77155,75876],{"class":379},[58,77157,793],{"class":75},[58,77159,77122],{"class":386},[58,77161,76386],{"class":75},[58,77163,75887],{"class":64},[58,77165,77166,77168,77170,77172],{"class":60,"line":2275},[58,77167,11866],{"class":92},[58,77169,74550],{"class":82},[58,77171,14208],{"class":92},[58,77173,77174],{"class":386}," 'java是一门编程语言，学完java工资很高'\n",[58,77176,77177,77179,77182,77184,77187,77190,77192,77194,77196,77198,77201,77203,77206],{"class":60,"line":2289},[58,77178,11866],{"class":92},[58,77180,77181],{"class":82}," result",[58,77183,14208],{"class":92},[58,77185,77186],{"class":75}," str.",[58,77188,77189],{"class":379},"replace",[58,77191,793],{"class":75},[58,77193,1370],{"class":386},[58,77195,77078],{"class":48621},[58,77197,1370],{"class":386},[58,77199,77200],{"class":92},"ig",[58,77202,469],{"class":75},[58,77204,77205],{"class":386},"'前端'",[58,77207,799],{"class":75},[58,77209,77210,77212,77214],{"class":60,"line":2294},[58,77211,74384],{"class":75},[58,77213,58881],{"class":379},[58,77215,77216],{"class":75},"(result)\n",[58,77218,77219,77221,77223],{"class":60,"line":2300},[58,77220,53055],{"class":75},[58,77222,52451],{"class":71},[58,77224,403],{"class":75},[58,77226,77227,77229,77231],{"class":60,"line":2321},[58,77228,52423],{"class":75},[58,77230,52438],{"class":71},[58,77232,403],{"class":75},[58,77234,77235,77237,77239],{"class":60,"line":2326},[58,77236,52423],{"class":75},[58,77238,51279],{"class":71},[58,77240,403],{"class":75},[702,77242,77243],{},"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":53,"searchDepth":68,"depth":68,"links":77245},[77246,77256,77268,77285,77292,77300],{"id":53998,"depth":68,"text":53999,"children":77247},[77248,77249,77250,77251,77252,77253,77254,77255],{"id":54002,"depth":79,"text":54003},{"id":54035,"depth":79,"text":54036},{"id":54074,"depth":79,"text":54075},{"id":54232,"depth":79,"text":54233},{"id":54280,"depth":79,"text":54281},{"id":54415,"depth":79,"text":54416},{"id":54737,"depth":79,"text":54738},{"id":57723,"depth":79,"text":57724},{"id":57751,"depth":68,"text":57752,"children":77257},[77258,77259,77260,77261,77262,77263,77264,77265,77266,77267],{"id":57755,"depth":79,"text":57756},{"id":57778,"depth":79,"text":57779},{"id":58693,"depth":79,"text":58694},{"id":59383,"depth":79,"text":59384},{"id":59665,"depth":79,"text":59666},{"id":63824,"depth":79,"text":63825},{"id":63994,"depth":79,"text":63995},{"id":64122,"depth":79,"text":64123},{"id":64147,"depth":79,"text":64148},{"id":65536,"depth":79,"text":65537},{"id":66689,"depth":68,"text":66690,"children":77269},[77270,77271,77272,77273,77274,77275,77276,77277,77278,77279,77280,77281,77282,77283,77284],{"id":66693,"depth":79,"text":66694},{"id":67347,"depth":79,"text":67348},{"id":69042,"depth":79,"text":69043},{"id":69083,"depth":79,"text":69084},{"id":69125,"depth":79,"text":69126},{"id":69139,"depth":79,"text":69140},{"id":69188,"depth":79,"text":69189},{"id":69200,"depth":79,"text":69201},{"id":69215,"depth":79,"text":69216},{"id":69251,"depth":79,"text":69252},{"id":69332,"depth":79,"text":69333},{"id":69460,"depth":79,"text":69461},{"id":69472,"depth":79,"text":69473},{"id":69491,"depth":79,"text":69492},{"id":71601,"depth":79,"text":71602},{"id":71620,"depth":68,"text":71621,"children":77286},[77287,77288,77289,77290,77291],{"id":71641,"depth":79,"text":71642},{"id":71661,"depth":79,"text":71662},{"id":71710,"depth":79,"text":71711},{"id":71835,"depth":79,"text":71836},{"id":72016,"depth":79,"text":72017},{"id":72034,"depth":68,"text":72035,"children":77293},[77294,77295,77296,77297,77298,77299],{"id":72049,"depth":79,"text":72050},{"id":72108,"depth":79,"text":72109},{"id":72132,"depth":79,"text":72133},{"id":72452,"depth":79,"text":72453},{"id":72484,"depth":79,"text":72485},{"id":72507,"depth":79,"text":72508},{"id":75575,"depth":68,"text":75576,"children":77301},[77302,77303],{"id":75609,"depth":79,"text":75610},{"id":75648,"depth":79,"text":75649},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53970,"description":717},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77310,"title":77311,"body":77312,"description":717,"extension":718,"meta":93447,"navigation":720,"path":93448,"seo":93449,"stem":93450,"__hash__":93451},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77313,"toc":93383},[77314,77317,77320,77324,77328,77333,77338,77349,77353,77358,77361,77365,77368,77373,77377,77381,77384,77389,77392,77396,77399,77407,77410,77414,77419,77424,77427,77431,77436,77441,77444,77448,77453,77456,77461,77464,77469,77472,77477,77482,77485,77488,77492,77497,77502,77505,77509,77513,77516,77519,77522,77526,77530,77535,77540,77543,77547,77552,77557,77560,77563,77566,77569,77572,77575,77578,77581,77584,77589,77593,77598,77603,77606,77609,77612,77615,77618,77621,77624,77627,77631,77635,77638,77641,77644,77649,77651,77654,77657,77660,77663,77666,77669,77672,77675,77678,77681,77684,77687,77690,77695,77700,77705,77708,77712,77715,77720,77724,77726,77737,77742,77843,77846,77849,77852,77855,77858,77861,77864,77867,77869,77872,77875,77878,77881,77884,77886,77889,77892,77895,77898,77901,77904,77906,77909,77911,77913,77916,77920,77924,77927,77930,77933,77936,77939,77942,77945,77948,77951,77956,78076,78079,78082,78087,78090,78093,78096,78099,78104,78107,78110,78113,78116,78121,78124,78224,78289,78363,78367,78370,78373,78377,78380,78394,78423,78426,78429,78432,78435,78438,78441,78444,78446,78449,78452,78455,78458,78462,78467,78471,78476,78551,78554,78737,78740,78743,78746,78749,78752,78754,78757,78760,78763,78766,78769,78772,78774,78778,78781,78786,78789,78792,78795,78798,78800,78805,78808,78811,78814,78817,78819,78824,78827,78830,78832,78834,78837,78841,78844,78847,78852,78855,78858,78861,78911,78916,78920,78925,78928,78997,79000,79009,79013,79018,79021,79024,79032,79035,79052,80853,80857,80861,80866,80869,80873,80879,80885,81037,81042,81047,81050,81053,81056,81059,81062,81065,81068,81071,81074,81077,81080,81083,81088,81092,81095,81106,81110,81115,81118,81121,81124,81127,81130,81132,81135,81138,81141,81144,81146,81163,81166,81170,81173,81178,81183,81186,81189,81193,81196,81199,81208,81211,81215,81218,81223,81228,81295,81299,81302,81305,81310,81315,81401,81406,81410,81413,81416,81431,81434,81439,81443,81448,81557,81560,81571,81721,81725,81730,81839,81843,81848,81853,81858,81861,81868,81888,81924,82088,82093,82096,82101,82108,82111,82114,82117,82176,82232,82288,82292,82297,82612,82615,82619,82622,82627,82736,82741,82745,82750,82754,82825,82829,82831,82834,82837,82875,83151,83155,83172,83238,83272,83276,83279,83284,83313,83320,83329,83334,83349,83354,83363,83366,83503,83507,83569,83573,83578,83823,83827,83832,83835,83838,83841,83844,83848,83853,85434,85438,85442,85448,85451,85456,85460,85463,85468,85471,85482,85486,85491,85495,85500,85505,85508,85513,85517,85521,85524,85529,85534,85537,85540,85543,85665,85670,85772,85775,85778,85782,85787,85959,85964,85968,85971,85976,86042,86047,86050,86181,86184,86189,86192,86195,86286,86291,86294,86297,86300,86303,86308,86313,86316,86321,86326,86331,86335,86338,86341,86346,86351,86356,86361,86415,86418,86421,86426,86429,86432,86437,86442,86447,86451,86456,86470,86475,86478,86483,86487,86492,86497,86502,86507,86512,86517,86522,86527,86530,86534,86539,86542,86545,86548,86553,86558,86561,86564,86568,86571,86574,86579,86584,86589,86594,86597,86602,86607,86668,86673,86676,86681,87921,87926,87930,87934,87939,87942,87947,87952,87955,87960,87962,87967,87971,87974,87977,87988,87992,87997,88002,88057,88062,88067,88072,88283,88288,88292,88297,88300,88302,88305,88308,88755,88760,88767,88773,88776,88779,89043,89048,89052,89317,89322,89326,89331,89336,89341,89346,89677,89680,89685,89690,89693,89697,89701,89706,89711,89716,89721,89726,89731,89735,89738,89743,89748,89751,89825,89830,89835,89840,89842,89845,90215,90220,90225,90230,90233,90236,90338,90343,90348,90451,90455,90460,90464,90468,90473,90478,90481,90486,90489,90492,90885,90890,90893,90896,90899,90902,91422,91426,91431,91436,91441,91444,91449,91452,91455,91837,91842,91844,91846,91849,91852,92364,92368,92429,92432,92435,92438,92442,92445,92450,92455,93380],[10,77315,77311],{"id":77316},"_4js进阶",[175,77318,77319],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,77321,77323],{"id":77322},"_41-作用域","4.1 作用域",[114,77325,77327],{"id":77326},"_411-局部作用域","4.1.1 局部作用域",[175,77329,77330],{},[119,77331],{"alt":53,"src":77332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[175,77334,77335],{},[119,77336],{"alt":53,"src":77337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[124,77339,77340,77343,77346],{},[22,77341,77342],{},"函数作用域在函数内部",[22,77344,77345],{},"块级作用域在{}",[22,77347,77348],{},"对象的那个{}不是作用域，不是块作用域",[114,77350,77352],{"id":77351},"_412-全局作用域","4.1.2 全局作用域",[175,77354,77355],{},[119,77356],{"alt":53,"src":77357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[175,77359,77360],{},"window.a=10不要这样写",[114,77362,77364],{"id":77363},"_413-作用域链","4.1.3 作用域链",[175,77366,77367],{},"变量查找机制",[175,77369,77370],{},[119,77371],{"alt":53,"src":77372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,77374,77376],{"id":77375},"_42-垃圾回收机制","4.2 垃圾回收机制",[114,77378,77380],{"id":77379},"_421-大体介绍","4.2.1 大体介绍",[175,77382,77383],{},"垃圾回收机制(Garbage Collection) 简称 GC",[175,77385,77386],{},[119,77387],{"alt":53,"src":77388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[175,77390,77391],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[114,77393,77395],{"id":77394},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[175,77397,77398],{},"堆栈空间分配区别：",[19,77400,77401,77404],{},[22,77402,77403],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[22,77405,77406],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[175,77408,77409],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22641,77411,77413],{"id":77412},"_4221-引用计数","4.2.2.1 引用计数",[175,77415,77416],{},[119,77417],{"alt":53,"src":77418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[175,77420,77421],{},[119,77422],{"alt":53,"src":77423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[175,77425,77426],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22641,77428,77430],{"id":77429},"_4222-标记清除法","4.2.2.2 标记清除法",[175,77432,77433],{},[119,77434],{"alt":53,"src":77435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[175,77437,77438],{},[119,77439],{"alt":53,"src":77440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[175,77442,77443],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,77445,77447],{"id":77446},"_43-闭包","4.3 闭包",[175,77449,77450],{},[119,77451],{"alt":53,"src":77452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[175,77454,77455],{},"闭包：内层函数+外层函数的变量",[175,77457,77458],{},[119,77459],{"alt":53,"src":77460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[175,77462,77463],{},"closure就是闭包",[175,77465,77466],{},[119,77467],{"alt":53,"src":77468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[175,77470,77471],{},"内层函数必须包含外层函数的变量才是闭包",[175,77473,77474],{},[119,77475],{"alt":53,"src":77476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[175,77478,77479],{},[119,77480],{"alt":53,"src":77481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[175,77483,77484],{},"闭包可能会引起内存泄漏",[175,77486,77487],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,77489,77491],{"id":77490},"_44-变量提升","4.4 变量提升",[175,77493,77494],{},[119,77495],{"alt":53,"src":77496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[175,77498,77499],{},[119,77500],{"alt":53,"src":77501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[175,77503,77504],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,77506,77508],{"id":77507},"_45-函数进阶","4.5 函数进阶",[114,77510,77512],{"id":77511},"_451-函数提升","4.5.1 函数提升",[175,77514,77515],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[175,77517,77518],{},"只提升函数声明，不提升函数调用",[52451,77520,77521],{},"\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",[114,77523,77525],{"id":77524},"_452-函数参数","4.5.2 函数参数",[22641,77527,77529],{"id":77528},"_4521-动态参数","4.5.2.1 动态参数",[175,77531,77532],{},[119,77533],{"alt":53,"src":77534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[175,77536,77537],{},[119,77538],{"alt":53,"src":77539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[175,77541,77542],{},"箭头函数里边没有arguments",[22641,77544,77546],{"id":77545},"_4522-剩余参数","4.5.2.2 剩余参数",[175,77548,77549],{},[119,77550],{"alt":53,"src":77551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[175,77553,77554],{},[119,77555],{"alt":53,"src":77556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[175,77558,77559],{},"剩余参数使用的时候不需要写...",[175,77561,77562],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[175,77564,77565],{},"  function getSum(a,b,...arr) {",[175,77567,77568],{},"  console.log(11)",[175,77570,77571],{},"  }",[175,77573,77574],{},"  getSum(1,2,3,4)",[175,77576,77577],{},"  将1传给a，2传给b，剩下的传给剩余参数",[175,77579,77580],{},"  getSum(1,2)",[175,77582,77583],{},"  将1传给a，2传给b，剩余参数为一个空数组",[175,77585,77586],{},[119,77587],{"alt":53,"src":77588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22641,77590,77592],{"id":77591},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[175,77594,77595],{},[119,77596],{"alt":53,"src":77597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[175,77599,77600],{},[119,77601],{"alt":53,"src":77602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[175,77604,77605],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[175,77607,77608],{},"展开运算符可以用于数组之间的合并：",[175,77610,77611],{},"const arr1 = [1, 2, 3]",[175,77613,77614],{},"const arr2 = [3, 4, 5]",[175,77616,77617],{},"const arr = [...arr1, ...arr2]",[175,77619,77620],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[175,77622,77623],{},"剩余参数：函数参数使用，得到真数组",[175,77625,77626],{},"展开运算符：数组中使用，数组展开",[114,77628,77630],{"id":77629},"_453-箭头函数","4.5.3 箭头函数",[22641,77632,77634],{"id":77633},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[175,77636,77637],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[175,77639,77640],{},"它不是万能的！！！",[175,77642,77643],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[175,77645,77646],{},[119,77647],{"alt":53,"src":77648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[175,77650,822],{},[175,77652,77653],{},"① 只有一个形参的时候，可以省略小括号：",[175,77655,77656],{},"const fn=x=>{console.log(x)}",[175,77658,77659],{},"② 只有一行代码时可以省略大括号：",[175,77661,77662],{},"const fn=x=>console.log(11)",[175,77664,77665],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[175,77667,77668],{},"const fn=x=>x+x",[175,77670,77671],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[175,77673,77674],{},"⑤ 阻止表单默认提交：",[175,77676,77677],{},"const form = document.querySelector('form')",[175,77679,77680],{},"form.addEventListener('click', ev => ev.preventDefault())",[175,77682,77683],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[175,77685,77686],{},"const fn=uname=>({uname:uname})",[175,77688,77689],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[175,77691,77692],{},[119,77693],{"alt":53,"src":77694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[175,77696,77697],{},[119,77698],{"alt":53,"src":77699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[175,77701,77702],{},[119,77703],{"alt":53,"src":77704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[175,77706,77707],{},"一定不要忘记用()，有()就理解为自带return",[22641,77709,77711],{"id":77710},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[175,77713,77714],{},"箭头函数是没有动态参数的arguments",[175,77716,77717],{},[119,77718],{"alt":53,"src":77719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22641,77721,77723],{"id":77722},"_4533-箭头函数this","4.5.3.3 箭头函数this",[175,77725,11977],{},[19,77727,77728,77731,77734],{},[22,77729,77730],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[22,77732,77733],{},"事件回调函数使用箭头函数时，this 为全局的 window",[22,77735,77736],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[175,77738,77739],{},[119,77740],{"alt":53,"src":77741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[48,77743,77745],{"className":53705,"code":77744,"language":53707,"meta":53,"style":53},"  \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",[55,77746,77747,77755,77760,77765,77770,77775,77780,77784,77789,77793,77797,77802,77807,77812,77816,77820,77825,77830,77835],{"__ignoreMap":53},[58,77748,77749,77751,77753],{"class":60,"line":61},[58,77750,52782],{"class":75},[58,77752,52451],{"class":71},[58,77754,403],{"class":75},[58,77756,77757],{"class":60,"line":68},[58,77758,77759],{"class":75},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[58,77761,77762],{"class":60,"line":79},[58,77763,77764],{"class":75},"    console.log(this) \u002F\u002F指向window\n",[58,77766,77767],{"class":60,"line":105},[58,77768,77769],{"class":75},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[58,77771,77772],{"class":60,"line":627},[58,77773,77774],{"class":75},"    function fn() {\n",[58,77776,77777],{"class":60,"line":509},[58,77778,77779],{"class":75},"      console.log(this)  \u002F\u002F指向window\n",[58,77781,77782],{"class":60,"line":559},[58,77783,2833],{"class":75},[58,77785,77786],{"class":60,"line":654},[58,77787,77788],{"class":75},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[58,77790,77791],{"class":60,"line":671},[58,77792,3046],{"emptyLinePlaceholder":720},[58,77794,77795],{"class":60,"line":677},[58,77796,72154],{"class":75},[58,77798,77799],{"class":60,"line":2260},[58,77800,77801],{"class":75},"      name: 'andy',\n",[58,77803,77804],{"class":60,"line":694},[58,77805,77806],{"class":75},"      sayHai: function () {\n",[58,77808,77809],{"class":60,"line":2270},[58,77810,77811],{"class":75},"        console.log(this)\n",[58,77813,77814],{"class":60,"line":2275},[58,77815,53036],{"class":75},[58,77817,77818],{"class":60,"line":2289},[58,77819,2833],{"class":75},[58,77821,77822],{"class":60,"line":2294},[58,77823,77824],{"class":75},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[58,77826,77827],{"class":60,"line":2300},[58,77828,77829],{"class":75},"    \u002F\u002F 2.箭头函数的this\n",[58,77831,77832],{"class":60,"line":2321},[58,77833,77834],{"class":75},"    const fn = () => console.log(this)\n",[58,77836,77837,77839,77841],{"class":60,"line":2326},[58,77838,53055],{"class":75},[58,77840,52451],{"class":71},[58,77842,403],{"class":75},[175,77844,77845],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[175,77847,77848],{},"const fn = () => console.log(this)",[175,77850,77851],{},"fn() \u002F\u002F指向window",[175,77853,77854],{},"\u002F\u002F 3.对象方法箭头函数 this",[175,77856,77857],{},"①",[175,77859,77860],{},"const obj = {",[175,77862,77863],{},"uname: 'pink老师',",[175,77865,77866],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[175,77868,1730],{},[175,77870,77871],{},"调用对象里边的函数",[175,77873,77874],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[175,77876,77877],{},"obj.sayHai()",[175,77879,77880],{},"②",[175,77882,77883],{},"const obj1 = {",[175,77885,77863],{},[175,77887,77888],{},"sayHai: function () {",[175,77890,77891],{},"let i = 10",[175,77893,77894],{},"const count = () => {",[175,77896,77897],{},"console.log(this)",[175,77899,77900],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[175,77902,77903],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[175,77905,1730],{},[175,77907,77908],{},"count()",[175,77910,1730],{},[175,77912,1730],{},[175,77914,77915],{},"obj1.sayHai()",[14,77917,77919],{"id":77918},"_46-解构赋值","4.6 解构赋值",[114,77921,77923],{"id":77922},"_461-数组解构","4.6.1 数组解构",[175,77925,77926],{},"以前要是使用数组中的值的话：",[175,77928,77929],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[175,77931,77932],{},"const arr=[100,60,80]",[175,77934,77935],{},"const max=arr[0]",[175,77937,77938],{},"const min=arr[1]",[175,77940,77941],{},"const avg=arr[2]",[175,77943,77944],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[175,77946,77947],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[175,77949,77950],{},"这个写法就类似于上边的那种用很多const的方法",[175,77952,77953],{},[119,77954],{"alt":53,"src":77955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[48,77957,77959],{"className":51277,"code":77958,"language":51279,"meta":53,"style":53},"①变量之间交换值:\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",[55,77960,77961,77966,77971,77976,77981,77986,77990,77994,77999,78003,78008,78013,78017,78022,78027,78038,78048,78053,78058,78063,78067,78071],{"__ignoreMap":53},[58,77962,77963],{"class":60,"line":61},[58,77964,77965],{"class":75},"①变量之间交换值:\n",[58,77967,77968],{"class":60,"line":68},[58,77969,77970],{"class":75},"let a=1\n",[58,77972,77973],{"class":60,"line":79},[58,77974,77975],{"class":75},"let b=2;\n",[58,77977,77978],{"class":60,"line":105},[58,77979,77980],{"class":75},"必须加这行代码，不然就会报错\n",[58,77982,77983],{"class":60,"line":627},[58,77984,77985],{"class":75},"[b,a]=[a,b]\n",[58,77987,77988],{"class":60,"line":509},[58,77989,3046],{"emptyLinePlaceholder":720},[58,77991,77992],{"class":60,"line":559},[58,77993,3046],{"emptyLinePlaceholder":720},[58,77995,77996],{"class":60,"line":654},[58,77997,77998],{"class":75},"可以写成下面的方式：\n",[58,78000,78001],{"class":60,"line":671},[58,78002,77970],{"class":75},[58,78004,78005],{"class":60,"line":677},[58,78006,78007],{"class":75},"let b=2\n",[58,78009,78010],{"class":60,"line":2260},[58,78011,78012],{"class":75},";[b,a]=[a,b]\n",[58,78014,78015],{"class":60,"line":694},[58,78016,3046],{"emptyLinePlaceholder":720},[58,78018,78019],{"class":60,"line":2270},[58,78020,78021],{"class":75},"②排序\n",[58,78023,78024],{"class":60,"line":2275},[58,78025,78026],{"class":75},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[58,78028,78029,78032,78035],{"class":60,"line":2289},[58,78030,78031],{"class":75},"for (let i = 0; i ",[58,78033,373],{"class":78034},"s7hpK",[58,78036,78037],{"class":75}," arr1.length; i++) {\n",[58,78039,78040,78043,78045],{"class":60,"line":2294},[58,78041,78042],{"class":75},"   for (let j = 0; j ",[58,78044,373],{"class":78034},[58,78046,78047],{"class":75}," arr1.length - 1; j++) {\n",[58,78049,78050],{"class":60,"line":2300},[58,78051,78052],{"class":75},"      if (arr1[j] > arr1[j + 1]) {\n",[58,78054,78055],{"class":60,"line":2321},[58,78056,78057],{"class":75},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[58,78059,78060],{"class":60,"line":2326},[58,78061,78062],{"class":75},"       }\n",[58,78064,78065],{"class":60,"line":2340},[58,78066,4955],{"class":75},[58,78068,78069],{"class":60,"line":2345},[58,78070,108],{"class":75},[58,78072,78073],{"class":60,"line":2374},[58,78074,78075],{"class":75},"console.log(arr1)\n",[175,78077,78078],{},"数组解构的细节：",[175,78080,78081],{},"①变量多，单元值少",[175,78083,78084],{},[119,78085],{"alt":53,"src":78086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[175,78088,78089],{},"防止出现undefined的方法：",[175,78091,78092],{},"const [a=0,b=0] =[1]",[175,78094,78095],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[175,78097,78098],{},"②变量少，单元值多",[175,78100,78101],{},[119,78102],{"alt":53,"src":78103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[175,78105,78106],{},"此时可以使用剩余参数来接收多余的值",[175,78108,78109],{},"const [a,b,...c]=[1,2,3,4]",[175,78111,78112],{},"console.log(c) 输出[3,4]",[175,78114,78115],{},"③可以按需导入，忽略某些返回值",[175,78117,78118],{},[119,78119],{"alt":53,"src":78120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[175,78122,78123],{},"④支持多维数组的结构",[48,78125,78129],{"className":78126,"code":78127,"language":78128,"meta":53,"style":53},"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",[55,78130,78131,78159,78175,78190,78205],{"__ignoreMap":53},[58,78132,78133,78135,78137,78139,78141,78143,78145,78147,78150,78152,78154,78156],{"class":60,"line":61},[58,78134,7438],{"class":92},[58,78136,52471],{"class":75},[58,78138,383],{"class":92},[58,78140,52864],{"class":75},[58,78142,89],{"class":82},[58,78144,469],{"class":75},[58,78146,867],{"class":82},[58,78148,78149],{"class":75},", [",[58,78151,861],{"class":82},[58,78153,469],{"class":75},[58,78155,1079],{"class":82},[58,78157,78158],{"class":75},"]]\n",[58,78160,78161,78164,78166,78168,78170,78172],{"class":60,"line":68},[58,78162,78163],{"class":75},"console.",[58,78165,58881],{"class":379},[58,78167,4497],{"class":75},[58,78169,979],{"class":82},[58,78171,4862],{"class":75},[58,78173,78174],{"class":64},"  \u002F\u002F1\n",[58,78176,78177,78179,78181,78183,78185,78187],{"class":60,"line":79},[58,78178,78163],{"class":75},[58,78180,58881],{"class":379},[58,78182,4497],{"class":75},[58,78184,89],{"class":82},[58,78186,4862],{"class":75},[58,78188,78189],{"class":64},"  \u002F\u002F2\n",[58,78191,78192,78194,78196,78198,78200,78202],{"class":60,"line":105},[58,78193,78163],{"class":75},[58,78195,58881],{"class":379},[58,78197,4497],{"class":75},[58,78199,867],{"class":82},[58,78201,4862],{"class":75},[58,78203,78204],{"class":64},"  \u002F\u002F[3,4]\n",[58,78206,78207,78209,78211,78213,78215,78217,78219,78221],{"class":60,"line":627},[58,78208,78163],{"class":75},[58,78210,58881],{"class":379},[58,78212,4497],{"class":75},[58,78214,867],{"class":82},[58,78216,5547],{"class":75},[58,78218,979],{"class":82},[58,78220,4862],{"class":75},[58,78222,78223],{"class":64},"  \u002F\u002F3\n",[48,78225,78227],{"className":78126,"code":78226,"language":78128,"meta":53,"style":53},"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",[55,78228,78229,78256,78267,78278],{"__ignoreMap":53},[58,78230,78231,78233,78236,78238,78240,78242,78244,78246,78248,78250,78252,78254],{"class":60,"line":61},[58,78232,7438],{"class":92},[58,78234,78235],{"class":75}," [a, b, c] ",[58,78237,383],{"class":92},[58,78239,52864],{"class":75},[58,78241,89],{"class":82},[58,78243,469],{"class":75},[58,78245,867],{"class":82},[58,78247,78149],{"class":75},[58,78249,861],{"class":82},[58,78251,469],{"class":75},[58,78253,1079],{"class":82},[58,78255,78158],{"class":75},[58,78257,78258,78260,78262,78265],{"class":60,"line":68},[58,78259,78163],{"class":75},[58,78261,58881],{"class":379},[58,78263,78264],{"class":75},"(a)",[58,78266,78174],{"class":64},[58,78268,78269,78271,78273,78276],{"class":60,"line":79},[58,78270,78163],{"class":75},[58,78272,58881],{"class":379},[58,78274,78275],{"class":75},"(b)",[58,78277,78189],{"class":64},[58,78279,78280,78282,78284,78287],{"class":60,"line":105},[58,78281,78163],{"class":75},[58,78283,58881],{"class":379},[58,78285,78286],{"class":75},"(c)",[58,78288,78204],{"class":64},[48,78290,78292],{"className":78126,"code":78291,"language":78128,"meta":53,"style":53},"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",[55,78293,78294,78321,78331,78341,78351],{"__ignoreMap":53},[58,78295,78296,78298,78301,78303,78305,78307,78309,78311,78313,78315,78317,78319],{"class":60,"line":61},[58,78297,7438],{"class":92},[58,78299,78300],{"class":75}," [a, b, [c, d]] ",[58,78302,383],{"class":92},[58,78304,52864],{"class":75},[58,78306,89],{"class":82},[58,78308,469],{"class":75},[58,78310,867],{"class":82},[58,78312,78149],{"class":75},[58,78314,861],{"class":82},[58,78316,469],{"class":75},[58,78318,1079],{"class":82},[58,78320,78158],{"class":75},[58,78322,78323,78325,78327,78329],{"class":60,"line":68},[58,78324,78163],{"class":75},[58,78326,58881],{"class":379},[58,78328,78264],{"class":75},[58,78330,78174],{"class":64},[58,78332,78333,78335,78337,78339],{"class":60,"line":79},[58,78334,78163],{"class":75},[58,78336,58881],{"class":379},[58,78338,78275],{"class":75},[58,78340,78189],{"class":64},[58,78342,78343,78345,78347,78349],{"class":60,"line":105},[58,78344,78163],{"class":75},[58,78346,58881],{"class":379},[58,78348,78286],{"class":75},[58,78350,78223],{"class":64},[58,78352,78353,78355,78357,78360],{"class":60,"line":627},[58,78354,78163],{"class":75},[58,78356,58881],{"class":379},[58,78358,78359],{"class":75},"(d)",[58,78361,78362],{"class":64},"  \u002F\u002F4\n",[114,78364,78366],{"id":78365},"_462-对象解构","4.6.2 对象解构",[175,78368,78369],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[175,78371,78372],{},"用的非常非常多！！！！！！",[22641,78374,78376],{"id":78375},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[175,78378,78379],{},"基本语法：",[19,78381,78382,78385,78388,78391],{},[22,78383,78384],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[22,78386,78387],{},"对象属性的值将被赋值给与属性名相同的变量",[22,78389,78390],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[22,78392,78393],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[48,78395,78397],{"className":51277,"code":78396,"language":51279,"meta":53,"style":53},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[55,78398,78399,78404,78409,78414,78418],{"__ignoreMap":53},[58,78400,78401],{"class":60,"line":61},[58,78402,78403],{"class":75},"const obj = {\n",[58,78405,78406],{"class":60,"line":68},[58,78407,78408],{"class":75},"   uname: 'pink老师',\n",[58,78410,78411],{"class":60,"line":79},[58,78412,78413],{"class":75},"   age: 18,\n",[58,78415,78416],{"class":60,"line":105},[58,78417,108],{"class":75},[58,78419,78420],{"class":60,"line":627},[58,78421,78422],{"class":75},"const { uname, age } = obj\n",[175,78424,78425],{},"上方代码这样写等价于：",[175,78427,78428],{},"const uname等价于obj.uname",[175,78430,78431],{},"变量名可以重新改名：",[175,78433,78434],{},"const uname='red老师'",[175,78436,78437],{},"const user={",[175,78439,78440],{},"  uname:'pink老师',",[175,78442,78443],{},"  age:18",[175,78445,1730],{},[175,78447,78448],{},"const {uname,age}=user",[175,78450,78451],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[175,78453,78454],{},"const {旧变量名：新变量名}=对象",[175,78456,78457],{},"const {uname:username,age}=user",[22641,78459,78461],{"id":78460},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[175,78463,78464],{},[119,78465],{"alt":53,"src":78466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22641,78468,78470],{"id":78469},"_4623-多级对象解构","4.6.2.3 多级对象解构",[175,78472,78473],{},[119,78474],{"alt":53,"src":78475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[48,78477,78479],{"className":53705,"code":78478,"language":53707,"meta":53,"style":53},"  \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",[55,78480,78481,78489,78494,78499,78504,78509,78514,78519,78524,78529,78533,78538,78543],{"__ignoreMap":53},[58,78482,78483,78485,78487],{"class":60,"line":61},[58,78484,52782],{"class":75},[58,78486,52451],{"class":71},[58,78488,403],{"class":75},[58,78490,78491],{"class":60,"line":68},[58,78492,78493],{"class":75},"    const pig = {\n",[58,78495,78496],{"class":60,"line":79},[58,78497,78498],{"class":75},"      name: '佩奇',\n",[58,78500,78501],{"class":60,"line":105},[58,78502,78503],{"class":75},"      family: {\n",[58,78505,78506],{"class":60,"line":627},[58,78507,78508],{"class":75},"        mother: '猪妈妈',\n",[58,78510,78511],{"class":60,"line":509},[58,78512,78513],{"class":75},"        father: '猪爸爸',\n",[58,78515,78516],{"class":60,"line":559},[58,78517,78518],{"class":75},"        sister: '乔治'\n",[58,78520,78521],{"class":60,"line":654},[58,78522,78523],{"class":75},"      },\n",[58,78525,78526],{"class":60,"line":671},[58,78527,78528],{"class":75},"      age: 6\n",[58,78530,78531],{"class":60,"line":677},[58,78532,2833],{"class":75},[58,78534,78535],{"class":60,"line":2260},[58,78536,78537],{"class":75},"    \u002F\u002F 多级对象解构\n",[58,78539,78540],{"class":60,"line":694},[58,78541,78542],{"class":75},"    const { name, family: { mother, father, sister }, age } = pig\n",[58,78544,78545,78547,78549],{"class":60,"line":2270},[58,78546,53055],{"class":75},[58,78548,52451],{"class":71},[58,78550,403],{"class":75},[175,78552,78553],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[48,78555,78558],{"className":78556,"code":78557,"language":77078,"meta":53,"style":53},"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",[55,78559,78560,78565,78576,78588,78600,78609,78613,78624,78636,78646,78651,78655,78665,78676,78685,78689,78693,78704,78715,78724,78728,78733],{"__ignoreMap":53},[58,78561,78562],{"class":60,"line":61},[58,78563,78564],{"class":64},"    \u002F\u002F 这是后台传递过来的数据\n",[58,78566,78567,78569,78572,78574],{"class":60,"line":68},[58,78568,11866],{"class":92},[58,78570,78571],{"class":75}," msg ",[58,78573,383],{"class":92},[58,78575,76],{"class":75},[58,78577,78578,78581,78583,78586],{"class":60,"line":79},[58,78579,78580],{"class":386},"      \"code\"",[58,78582,1644],{"class":92},[58,78584,78585],{"class":82}," 200",[58,78587,32110],{"class":75},[58,78589,78590,78593,78595,78598],{"class":60,"line":105},[58,78591,78592],{"class":386},"      \"msg\"",[58,78594,1644],{"class":92},[58,78596,78597],{"class":386}," \"获取新闻列表成功\"",[58,78599,32110],{"class":75},[58,78601,78602,78605,78607],{"class":60,"line":627},[58,78603,78604],{"class":386},"      \"data\"",[58,78606,1644],{"class":92},[58,78608,56081],{"class":75},[58,78610,78611],{"class":60,"line":509},[58,78612,3156],{"class":75},[58,78614,78615,78618,78620,78622],{"class":60,"line":559},[58,78616,78617],{"class":386},"          \"id\"",[58,78619,1644],{"class":92},[58,78621,25762],{"class":82},[58,78623,32110],{"class":75},[58,78625,78626,78629,78631,78634],{"class":60,"line":654},[58,78627,78628],{"class":386},"          \"title\"",[58,78630,1644],{"class":92},[58,78632,78633],{"class":386}," \"5G商用自己，三大运用商收入下降\"",[58,78635,32110],{"class":75},[58,78637,78638,78641,78643],{"class":60,"line":671},[58,78639,78640],{"class":386},"          \"count\"",[58,78642,1644],{"class":92},[58,78644,78645],{"class":82}," 58\n",[58,78647,78648],{"class":60,"line":677},[58,78649,78650],{"class":75},"        },\n",[58,78652,78653],{"class":60,"line":2260},[58,78654,3156],{"class":75},[58,78656,78657,78659,78661,78663],{"class":60,"line":694},[58,78658,78617],{"class":386},[58,78660,1644],{"class":92},[58,78662,15399],{"class":82},[58,78664,32110],{"class":75},[58,78666,78667,78669,78671,78674],{"class":60,"line":2270},[58,78668,78628],{"class":386},[58,78670,1644],{"class":92},[58,78672,78673],{"class":386}," \"国际媒体头条速览\"",[58,78675,32110],{"class":75},[58,78677,78678,78680,78682],{"class":60,"line":2275},[58,78679,78640],{"class":386},[58,78681,1644],{"class":92},[58,78683,78684],{"class":82}," 56\n",[58,78686,78687],{"class":60,"line":2289},[58,78688,78650],{"class":75},[58,78690,78691],{"class":60,"line":2294},[58,78692,3156],{"class":75},[58,78694,78695,78697,78699,78702],{"class":60,"line":2300},[58,78696,78617],{"class":386},[58,78698,1644],{"class":92},[58,78700,78701],{"class":82}," 3",[58,78703,32110],{"class":75},[58,78705,78706,78708,78710,78713],{"class":60,"line":2321},[58,78707,78628],{"class":386},[58,78709,1644],{"class":92},[58,78711,78712],{"class":386}," \"乌克兰和俄罗斯持续冲突\"",[58,78714,32110],{"class":75},[58,78716,78717,78719,78721],{"class":60,"line":2326},[58,78718,78640],{"class":386},[58,78720,1644],{"class":92},[58,78722,78723],{"class":82}," 1669\n",[58,78725,78726],{"class":60,"line":2340},[58,78727,78650],{"class":75},[58,78729,78730],{"class":60,"line":2345},[58,78731,78732],{"class":75},"      ]\n",[58,78734,78735],{"class":60,"line":2374},[58,78736,2833],{"class":75},[175,78738,78739],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[175,78741,78742],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[175,78744,78745],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[175,78747,78748],{},"function({data}) {",[175,78750,78751],{},"console.log(data)",[175,78753,1730],{},[175,78755,78756],{},"render(msg)",[175,78758,78759],{},"实参传递给形参的时候解构了",[175,78761,78762],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[175,78764,78765],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[175,78767,78768],{},"function render({data:mydata}) {",[175,78770,78771],{},"  console.log(data)",[175,78773,1730],{},[114,78775,78777],{"id":78776},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[175,78779,78780],{},"有两种情况：一个是数组结构，一个是立即执行函数",[19,78782,78783],{},[22,78784,78785],{},"如果对一个数组进行遍历，有两种方式：",[175,78787,78788],{},"①法1",[175,78790,78791],{},"const arr=[1,2,3]",[175,78793,78794],{},"arr.map(function(item,index) {",[175,78796,78797],{},"  console.log(item)",[175,78799,53102],{},[175,78801,78802],{},[119,78803],{"alt":53,"src":78804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[175,78806,78807],{},"②法2",[175,78809,78810],{},"const str='pink'",[175,78812,78813],{},"[1,2,3].map(function(item,index) {",[175,78815,78816],{},"console.log(item)",[175,78818,53102],{},[175,78820,78821],{},[119,78822],{"alt":53,"src":78823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[175,78825,78826],{},"此时会报错",[175,78828,78829],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[175,78831,78816],{},[175,78833,53102],{},[175,78835,78836],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,78838,78840],{"id":78839},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[175,78842,78843],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[175,78845,78846],{},"可以理解为加强版的for循环",[175,78848,78849],{},[119,78850],{"alt":53,"src":78851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[175,78853,78854],{},"里边不写return，不返回数组，只遍历不返回",[175,78856,78857],{},"map是返回数组",[175,78859,78860],{},"forEach主要用于遍历数组对象",[48,78862,78864],{"className":53705,"code":78863,"language":53707,"meta":53,"style":53},"  \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",[55,78865,78866,78874,78879,78884,78889,78894,78898,78903],{"__ignoreMap":53},[58,78867,78868,78870,78872],{"class":60,"line":61},[58,78869,52782],{"class":75},[58,78871,52451],{"class":71},[58,78873,403],{"class":75},[58,78875,78876],{"class":60,"line":68},[58,78877,78878],{"class":75},"    const arr = ['red', 'green', 'pink']\n",[58,78880,78881],{"class":60,"line":79},[58,78882,78883],{"class":75},"    const result = arr.forEach(function (item, index) {\n",[58,78885,78886],{"class":60,"line":105},[58,78887,78888],{"class":75},"      console.log(item)\n",[58,78890,78891],{"class":60,"line":627},[58,78892,78893],{"class":75},"      console.log(index)\n",[58,78895,78896],{"class":60,"line":509},[58,78897,34105],{"class":75},[58,78899,78900],{"class":60,"line":559},[58,78901,78902],{"class":75},"    console.log(result)\n",[58,78904,78905,78907,78909],{"class":60,"line":654},[58,78906,53055],{"class":75},[58,78908,52451],{"class":71},[58,78910,403],{"class":75},[175,78912,78913],{},[119,78914],{"alt":53,"src":78915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,78917,78919],{"id":78918},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[175,78921,78922],{},[119,78923],{"alt":53,"src":78924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[175,78926,78927],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[48,78929,78931],{"className":53705,"code":78930,"language":53707,"meta":53,"style":53},"\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",[55,78932,78933,78941,78949,78954,78959,78963,78967,78972,78976,78981,78989],{"__ignoreMap":53},[58,78934,78935,78937,78939],{"class":60,"line":61},[58,78936,373],{"class":75},[58,78938,52438],{"class":71},[58,78940,403],{"class":75},[58,78942,78943,78945,78947],{"class":60,"line":68},[58,78944,52782],{"class":75},[58,78946,52451],{"class":71},[58,78948,403],{"class":75},[58,78950,78951],{"class":60,"line":79},[58,78952,78953],{"class":75},"    const arr = [10, 20, 30]\n",[58,78955,78956],{"class":60,"line":105},[58,78957,78958],{"class":75},"    const newArr = arr.filter(function (item, index) {\n",[58,78960,78961],{"class":60,"line":627},[58,78962,78888],{"class":75},[58,78964,78965],{"class":60,"line":509},[58,78966,78893],{"class":75},[58,78968,78969],{"class":60,"line":559},[58,78970,78971],{"class":75},"      return item >= 20\n",[58,78973,78974],{"class":60,"line":654},[58,78975,34105],{"class":75},[58,78977,78978],{"class":60,"line":671},[58,78979,78980],{"class":75},"    console.log(newArr)\n",[58,78982,78983,78985,78987],{"class":60,"line":677},[58,78984,53055],{"class":75},[58,78986,52451],{"class":71},[58,78988,403],{"class":75},[58,78990,78991,78993,78995],{"class":60,"line":2260},[58,78992,52423],{"class":75},[58,78994,52438],{"class":71},[58,78996,403],{"class":75},[175,78998,78999],{},"这个也可以写成箭头函数：",[48,79001,79003],{"className":51277,"code":79002,"language":51279,"meta":53,"style":53},"const newArr = arr.filter(item => item >= 20)\n",[55,79004,79005],{"__ignoreMap":53},[58,79006,79007],{"class":60,"line":61},[58,79008,79002],{"class":75},[14,79010,79012],{"id":79011},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[175,79014,79015],{},[119,79016],{"alt":53,"src":79017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[175,79019,79020],{},"步骤：",[175,79022,79023],{},"①：渲染页面模块",[124,79025,79026,79029],{},[22,79027,79028],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[22,79030,79031],{},"用forEach+字符串的形式",[175,79033,79034],{},"②：点击不同需求，显示不同页面内容",[124,79036,79037,79040,79043,79046,79049],{},[22,79038,79039],{},"点击采取事件委托方式 .filter",[22,79041,79042],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[22,79044,79045],{},"筛选条件是根据点击的 data-index 来判断",[22,79047,79048],{},"可以使用对象解构，把事件对象解构",[22,79050,79051],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[48,79053,79055],{"className":51277,"code":79054,"language":51279,"meta":53,"style":53},"\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",[55,79056,79057,79067,79081,79085,79093,79107,79127,79139,79147,79153,79163,79173,79183,79187,79191,79197,79210,79222,79232,79244,79248,79252,79259,79272,79284,79301,79319,79332,79336,79340,79352,79362,79366,79370,79377,79418,79445,79455,79459,79463,79471,79483,79487,79491,79499,79511,79523,79534,79538,79542,79551,79563,79574,79578,79582,79591,79603,79615,79619,79623,79630,79640,79652,79664,79679,79683,79687,79695,79711,79721,79731,79741,79753,79757,79761,79771,79782,79792,79796,79804,79812,79816,79824,79839,79865,79890,79915,79934,79942,79956,79961,79966,79971,79976,79981,79989,79997,80002,80013,80018,80028,80038,80048,80058,80062,80066,80075,80084,80093,80102,80106,80110,80119,80128,80137,80146,80150,80154,80163,80172,80181,80190,80194,80198,80207,80216,80225,80234,80238,80242,80251,80260,80269,80278,80282,80286,80295,80304,80313,80322,80326,80330,80339,80348,80356,80365,80369,80373,80377,80382,80394,80399,80411,80415,80432,80459,80468,80473,80483,80493,80502,80507,80512,80516,80521,80538,80542,80547,80555,80560,80587,80592,80612,80617,80629,80634,80639,80644,80655,80669,80706,80724,80757,80774,80798,80802,80807,80813,80817,80821,80825,80833,80841,80845],{"__ignoreMap":53},[58,79058,79059,79061,79063,79065],{"class":60,"line":61},[58,79060,51941],{"class":75},[58,79062,51944],{"class":71},[58,79064,51947],{"class":379},[58,79066,403],{"class":75},[58,79068,79069,79071,79073,79075,79077,79079],{"class":60,"line":68},[58,79070,373],{"class":75},[58,79072,51279],{"class":71},[58,79074,51958],{"class":379},[58,79076,383],{"class":75},[58,79078,51963],{"class":386},[58,79080,403],{"class":75},[58,79082,79083],{"class":60,"line":79},[58,79084,3046],{"emptyLinePlaceholder":720},[58,79086,79087,79089,79091],{"class":60,"line":105},[58,79088,373],{"class":75},[58,79090,51976],{"class":71},[58,79092,403],{"class":75},[58,79094,79095,79097,79099,79101,79103,79105],{"class":60,"line":627},[58,79096,52782],{"class":75},[58,79098,51986],{"class":71},[58,79100,51989],{"class":379},[58,79102,383],{"class":75},[58,79104,51994],{"class":386},[58,79106,403],{"class":75},[58,79108,79109,79111,79113,79115,79117,79119,79121,79123,79125],{"class":60,"line":509},[58,79110,52782],{"class":75},[58,79112,51986],{"class":71},[58,79114,15564],{"class":379},[58,79116,383],{"class":75},[58,79118,52033],{"class":386},[58,79120,52013],{"class":379},[58,79122,383],{"class":75},[58,79124,52040],{"class":386},[58,79126,403],{"class":75},[58,79128,79129,79131,79133,79135,79137],{"class":60,"line":559},[58,79130,52782],{"class":75},[58,79132,52049],{"class":71},[58,79134,52052],{"class":75},[58,79136,52049],{"class":71},[58,79138,403],{"class":75},[58,79140,79141,79143,79145],{"class":60,"line":654},[58,79142,52782],{"class":75},[58,79144,702],{"class":71},[58,79146,403],{"class":75},[58,79148,79149,79151],{"class":60,"line":671},[58,79150,7049],{"class":71},[58,79152,76],{"class":75},[58,79154,79155,79157,79159,79161],{"class":60,"line":677},[58,79156,55331],{"class":82},[58,79158,86],{"class":75},[58,79160,979],{"class":82},[58,79162,102],{"class":75},[58,79164,79165,79167,79169,79171],{"class":60,"line":2260},[58,79166,55342],{"class":82},[58,79168,86],{"class":75},[58,79170,979],{"class":82},[58,79172,102],{"class":75},[58,79174,79175,79177,79179,79181],{"class":60,"line":694},[58,79176,73227],{"class":82},[58,79178,86],{"class":75},[58,79180,61139],{"class":82},[58,79182,102],{"class":75},[58,79184,79185],{"class":60,"line":2270},[58,79186,2833],{"class":75},[58,79188,79189],{"class":60,"line":2275},[58,79190,3046],{"emptyLinePlaceholder":720},[58,79192,79193,79195],{"class":60,"line":2289},[58,79194,62755],{"class":379},[58,79196,76],{"class":75},[58,79198,79199,79201,79203,79206,79208],{"class":60,"line":2294},[58,79200,55406],{"class":82},[58,79202,86],{"class":75},[58,79204,79205],{"class":82},"990",[58,79207,93],{"class":92},[58,79209,102],{"class":75},[58,79211,79212,79214,79216,79218,79220],{"class":60,"line":2300},[58,79213,55342],{"class":82},[58,79215,86],{"class":75},[58,79217,979],{"class":82},[58,79219,52195],{"class":82},[58,79221,102],{"class":75},[58,79223,79224,79226,79228,79230],{"class":60,"line":2321},[58,79225,55643],{"class":82},[58,79227,86],{"class":75},[58,79229,52118],{"class":82},[58,79231,102],{"class":75},[58,79233,79234,79237,79239,79242],{"class":60,"line":2326},[58,79235,79236],{"class":82},"      flex-wrap",[58,79238,86],{"class":75},[58,79240,79241],{"class":82},"wrap",[58,79243,102],{"class":75},[58,79245,79246],{"class":60,"line":2340},[58,79247,2833],{"class":75},[58,79249,79250],{"class":60,"line":2345},[58,79251,3046],{"emptyLinePlaceholder":720},[58,79253,79254,79257],{"class":60,"line":2374},[58,79255,79256],{"class":379},"    .item",[58,79258,76],{"class":75},[58,79260,79261,79263,79265,79268,79270],{"class":60,"line":2379},[58,79262,55406],{"class":82},[58,79264,86],{"class":75},[58,79266,79267],{"class":82},"240",[58,79269,93],{"class":92},[58,79271,102],{"class":75},[58,79273,79274,79276,79278,79280,79282],{"class":60,"line":2396},[58,79275,62632],{"class":82},[58,79277,86],{"class":75},[58,79279,1232],{"class":82},[58,79281,93],{"class":92},[58,79283,102],{"class":75},[58,79285,79286,79288,79290,79292,79294,79297,79299],{"class":60,"line":2401},[58,79287,55331],{"class":82},[58,79289,86],{"class":75},[58,79291,1486],{"class":82},[58,79293,93],{"class":92},[58,79295,79296],{"class":82}," 30",[58,79298,93],{"class":92},[58,79300,102],{"class":75},[58,79302,79303,79305,79307,79309,79312,79315,79317],{"class":60,"line":2406},[58,79304,62492],{"class":82},[58,79306,86],{"class":75},[58,79308,28765],{"class":82},[58,79310,79311],{"class":82}," ease",[58,79313,79314],{"class":82}," .5",[58,79316,1481],{"class":92},[58,79318,102],{"class":75},[58,79320,79321,79324,79326,79328,79330],{"class":60,"line":2411},[58,79322,79323],{"class":82},"      margin-bottom",[58,79325,86],{"class":75},[58,79327,1486],{"class":82},[58,79329,93],{"class":92},[58,79331,102],{"class":75},[58,79333,79334],{"class":60,"line":2425},[58,79335,2833],{"class":75},[58,79337,79338],{"class":60,"line":2430},[58,79339,3046],{"emptyLinePlaceholder":720},[58,79341,79342,79345,79347,79350],{"class":60,"line":3223},[58,79343,79344],{"class":379},"    .item:nth-child",[58,79346,793],{"class":75},[58,79348,79349],{"class":82},"4n",[58,79351,13086],{"class":75},[58,79353,79354,79356,79358,79360],{"class":60,"line":3237},[58,79355,62632],{"class":82},[58,79357,86],{"class":75},[58,79359,979],{"class":82},[58,79361,102],{"class":75},[58,79363,79364],{"class":60,"line":3245},[58,79365,2833],{"class":75},[58,79367,79368],{"class":60,"line":3250},[58,79369,3046],{"emptyLinePlaceholder":720},[58,79371,79372,79375],{"class":60,"line":3256},[58,79373,79374],{"class":379},"    .item:hover",[58,79376,76],{"class":75},[58,79378,79379,79382,79384,79386,79388,79390,79392,79394,79396,79399,79401,79403,79405,79407,79409,79411,79413,79416],{"class":60,"line":3262},[58,79380,79381],{"class":82},"      box-shadow",[58,79383,86],{"class":75},[58,79385,979],{"class":82},[58,79387,93],{"class":92},[58,79389,4739],{"class":82},[58,79391,93],{"class":92},[58,79393,2794],{"class":82},[58,79395,93],{"class":92},[58,79397,79398],{"class":82}," rgba",[58,79400,793],{"class":75},[58,79402,979],{"class":82},[58,79404,469],{"class":75},[58,79406,979],{"class":82},[58,79408,469],{"class":75},[58,79410,979],{"class":82},[58,79412,469],{"class":75},[58,79414,79415],{"class":82},".2",[58,79417,3365],{"class":75},[58,79419,79420,79423,79425,79428,79430,79432,79434,79437,79439,79441,79443],{"class":60,"line":3267},[58,79421,79422],{"class":82},"      transform",[58,79424,86],{"class":75},[58,79426,79427],{"class":82},"translate3d",[58,79429,793],{"class":75},[58,79431,979],{"class":82},[58,79433,469],{"class":75},[58,79435,79436],{"class":82},"-4",[58,79438,93],{"class":92},[58,79440,469],{"class":75},[58,79442,979],{"class":82},[58,79444,3365],{"class":75},[58,79446,79447,79449,79451,79453],{"class":60,"line":8594},[58,79448,62657],{"class":82},[58,79450,86],{"class":75},[58,79452,62662],{"class":82},[58,79454,102],{"class":75},[58,79456,79457],{"class":60,"line":8618},[58,79458,2833],{"class":75},[58,79460,79461],{"class":60,"line":8623},[58,79462,3046],{"emptyLinePlaceholder":720},[58,79464,79465,79467,79469],{"class":60,"line":8629},[58,79466,79256],{"class":379},[58,79468,56249],{"class":71},[58,79470,76],{"class":75},[58,79472,79473,79475,79477,79479,79481],{"class":60,"line":8656},[58,79474,55406],{"class":82},[58,79476,86],{"class":75},[58,79478,1097],{"class":82},[58,79480,1114],{"class":92},[58,79482,102],{"class":75},[58,79484,79485],{"class":60,"line":8661},[58,79486,2833],{"class":75},[58,79488,79489],{"class":60,"line":8667},[58,79490,3046],{"emptyLinePlaceholder":720},[58,79492,79493,79495,79497],{"class":60,"line":8679},[58,79494,79256],{"class":379},[58,79496,62936],{"class":379},[58,79498,76],{"class":75},[58,79500,79501,79503,79505,79507,79509],{"class":60,"line":8691},[58,79502,55556],{"class":82},[58,79504,86],{"class":75},[58,79506,1436],{"class":82},[58,79508,93],{"class":92},[58,79510,102],{"class":75},[58,79512,79513,79515,79517,79519,79521],{"class":60,"line":8703},[58,79514,79323],{"class":82},[58,79516,86],{"class":75},[58,79518,1232],{"class":82},[58,79520,93],{"class":92},[58,79522,102],{"class":75},[58,79524,79525,79527,79529,79532],{"class":60,"line":10361},[58,79526,58050],{"class":82},[58,79528,86],{"class":75},[58,79530,79531],{"class":82},"#666",[58,79533,102],{"class":75},[58,79535,79536],{"class":60,"line":10386},[58,79537,2833],{"class":75},[58,79539,79540],{"class":60,"line":10409},[58,79541,3046],{"emptyLinePlaceholder":720},[58,79543,79544,79546,79549],{"class":60,"line":10433},[58,79545,79256],{"class":379},[58,79547,79548],{"class":379}," .price",[58,79550,76],{"class":75},[58,79552,79553,79555,79557,79559,79561],{"class":60,"line":10438},[58,79554,55556],{"class":82},[58,79556,86],{"class":75},[58,79558,1536],{"class":82},[58,79560,93],{"class":92},[58,79562,102],{"class":75},[58,79564,79565,79567,79569,79572],{"class":60,"line":10443},[58,79566,58050],{"class":82},[58,79568,86],{"class":75},[58,79570,79571],{"class":82},"firebrick",[58,79573,102],{"class":75},[58,79575,79576],{"class":60,"line":10448},[58,79577,2833],{"class":75},[58,79579,79580],{"class":60,"line":10457},[58,79581,3046],{"emptyLinePlaceholder":720},[58,79583,79584,79586,79589],{"class":60,"line":10462},[58,79585,79256],{"class":379},[58,79587,79588],{"class":379}," .price::before",[58,79590,76],{"class":75},[58,79592,79593,79596,79598,79601],{"class":60,"line":10468},[58,79594,79595],{"class":82},"      content",[58,79597,86],{"class":75},[58,79599,79600],{"class":386},"'￥'",[58,79602,102],{"class":75},[58,79604,79605,79607,79609,79611,79613],{"class":60,"line":10489},[58,79606,55556],{"class":82},[58,79608,86],{"class":75},[58,79610,1335],{"class":82},[58,79612,93],{"class":92},[58,79614,102],{"class":75},[58,79616,79617],{"class":60,"line":10495},[58,79618,2833],{"class":75},[58,79620,79621],{"class":60,"line":10509},[58,79622,3046],{"emptyLinePlaceholder":720},[58,79624,79625,79628],{"class":60,"line":10515},[58,79626,79627],{"class":379},"    .filter",[58,79629,76],{"class":75},[58,79631,79632,79634,79636,79638],{"class":60,"line":10542},[58,79633,55643],{"class":82},[58,79635,86],{"class":75},[58,79637,52118],{"class":82},[58,79639,102],{"class":75},[58,79641,79642,79644,79646,79648,79650],{"class":60,"line":10551},[58,79643,55406],{"class":82},[58,79645,86],{"class":75},[58,79647,79205],{"class":82},[58,79649,93],{"class":92},[58,79651,102],{"class":75},[58,79653,79654,79656,79658,79660,79662],{"class":60,"line":10557},[58,79655,55342],{"class":82},[58,79657,86],{"class":75},[58,79659,979],{"class":82},[58,79661,52195],{"class":82},[58,79663,102],{"class":75},[58,79665,79666,79668,79670,79672,79674,79676],{"class":60,"line":10565},[58,79667,55331],{"class":82},[58,79669,86],{"class":75},[58,79671,1442],{"class":82},[58,79673,93],{"class":92},[58,79675,79296],{"class":82},[58,79677,79678],{"class":92},"px\n",[58,79680,79681],{"class":60,"line":10570},[58,79682,2833],{"class":75},[58,79684,79685],{"class":60,"line":17247},[58,79686,3046],{"emptyLinePlaceholder":720},[58,79688,79689,79691,79693],{"class":60,"line":17253},[58,79690,79627],{"class":379},[58,79692,2048],{"class":71},[58,79694,76],{"class":75},[58,79696,79697,79699,79701,79703,79705,79707,79709],{"class":60,"line":17276},[58,79698,55331],{"class":82},[58,79700,86],{"class":75},[58,79702,1232],{"class":82},[58,79704,93],{"class":92},[58,79706,9596],{"class":82},[58,79708,93],{"class":92},[58,79710,102],{"class":75},[58,79712,79713,79715,79717,79719],{"class":60,"line":17282},[58,79714,62353],{"class":82},[58,79716,86],{"class":75},[58,79718,62450],{"class":82},[58,79720,102],{"class":75},[58,79722,79723,79725,79727,79729],{"class":60,"line":17305},[58,79724,58050],{"class":82},[58,79726,86],{"class":75},[58,79728,79531],{"class":82},[58,79730,102],{"class":75},[58,79732,79733,79735,79737,79739],{"class":60,"line":17319},[58,79734,64602],{"class":82},[58,79736,86],{"class":75},[58,79738,55373],{"class":82},[58,79740,102],{"class":75},[58,79742,79743,79745,79747,79749,79751],{"class":60,"line":17339},[58,79744,62382],{"class":82},[58,79746,86],{"class":75},[58,79748,1486],{"class":82},[58,79750,93],{"class":92},[58,79752,102],{"class":75},[58,79754,79755],{"class":60,"line":17345},[58,79756,2833],{"class":75},[58,79758,79759],{"class":60,"line":17356},[58,79760,3046],{"emptyLinePlaceholder":720},[58,79762,79763,79765,79767,79769],{"class":60,"line":17379},[58,79764,79627],{"class":379},[58,79766,2048],{"class":71},[58,79768,62532],{"class":379},[58,79770,76],{"class":75},[58,79772,79773,79775,79777,79780],{"class":60,"line":17401},[58,79774,55518],{"class":82},[58,79776,86],{"class":75},[58,79778,79779],{"class":82},"#05943c",[58,79781,102],{"class":75},[58,79783,79784,79786,79788,79790],{"class":60,"line":17406},[58,79785,58050],{"class":82},[58,79787,86],{"class":75},[58,79789,61476],{"class":82},[58,79791,102],{"class":75},[58,79793,79794],{"class":60,"line":17412},[58,79795,2833],{"class":75},[58,79797,79798,79800,79802],{"class":60,"line":17426},[58,79799,53055],{"class":75},[58,79801,702],{"class":71},[58,79803,403],{"class":75},[58,79805,79806,79808,79810],{"class":60,"line":17439},[58,79807,52423],{"class":75},[58,79809,51976],{"class":71},[58,79811,403],{"class":75},[58,79813,79814],{"class":60,"line":17444},[58,79815,3046],{"emptyLinePlaceholder":720},[58,79817,79818,79820,79822],{"class":60,"line":17458},[58,79819,373],{"class":75},[58,79821,52438],{"class":71},[58,79823,403],{"class":75},[58,79825,79826,79828,79830,79832,79834,79837],{"class":60,"line":17463},[58,79827,52782],{"class":75},[58,79829,72],{"class":71},[58,79831,54124],{"class":379},[58,79833,383],{"class":75},[58,79835,79836],{"class":386},"\"filter\"",[58,79838,403],{"class":75},[58,79840,79841,79843,79845,79847,79849,79851,79854,79856,79858,79861,79863],{"class":60,"line":17469},[58,79842,51983],{"class":75},[58,79844,376],{"class":71},[58,79846,380],{"class":379},[58,79848,383],{"class":75},[58,79850,61694],{"class":386},[58,79852,79853],{"class":379}," data-index",[58,79855,383],{"class":75},[58,79857,4324],{"class":386},[58,79859,79860],{"class":75},">0-100元\u003C\u002F",[58,79862,376],{"class":71},[58,79864,403],{"class":75},[58,79866,79867,79869,79871,79873,79875,79877,79879,79881,79883,79886,79888],{"class":60,"line":17474},[58,79868,51983],{"class":75},[58,79870,376],{"class":71},[58,79872,380],{"class":379},[58,79874,383],{"class":75},[58,79876,61694],{"class":386},[58,79878,79853],{"class":379},[58,79880,383],{"class":75},[58,79882,4347],{"class":386},[58,79884,79885],{"class":75},">100-300元\u003C\u002F",[58,79887,376],{"class":71},[58,79889,403],{"class":75},[58,79891,79892,79894,79896,79898,79900,79902,79904,79906,79908,79911,79913],{"class":60,"line":17488},[58,79893,51983],{"class":75},[58,79895,376],{"class":71},[58,79897,380],{"class":379},[58,79899,383],{"class":75},[58,79901,61694],{"class":386},[58,79903,79853],{"class":379},[58,79905,383],{"class":75},[58,79907,4360],{"class":386},[58,79909,79910],{"class":75},">300元以上\u003C\u002F",[58,79912,376],{"class":71},[58,79914,403],{"class":75},[58,79916,79917,79919,79921,79923,79925,79927,79930,79932],{"class":60,"line":17493},[58,79918,51983],{"class":75},[58,79920,376],{"class":71},[58,79922,380],{"class":379},[58,79924,383],{"class":75},[58,79926,61694],{"class":386},[58,79928,79929],{"class":75},">全部区间\u003C\u002F",[58,79931,376],{"class":71},[58,79933,403],{"class":75},[58,79935,79936,79938,79940],{"class":60,"line":17498},[58,79937,53055],{"class":75},[58,79939,72],{"class":71},[58,79941,403],{"class":75},[58,79943,79944,79946,79948,79950,79952,79954],{"class":60,"line":17512},[58,79945,52782],{"class":75},[58,79947,72],{"class":71},[58,79949,54124],{"class":379},[58,79951,383],{"class":75},[58,79953,63240],{"class":386},[58,79955,403],{"class":75},[58,79957,79958],{"class":60,"line":17524},[58,79959,79960],{"class":64},"    \u003C!-- \u003Cdiv class=\"item\">\n",[58,79962,79963],{"class":60,"line":17529},[58,79964,79965],{"class":64},"      \u003Cimg src=\"\" alt=\"\">\n",[58,79967,79968],{"class":60,"line":17542},[58,79969,79970],{"class":64},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[58,79972,79973],{"class":60,"line":17547},[58,79974,79975],{"class":64},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[58,79977,79978],{"class":60,"line":17552},[58,79979,79980],{"class":64},"    \u003C\u002Fdiv> -->\n",[58,79982,79983,79985,79987],{"class":60,"line":17557},[58,79984,53055],{"class":75},[58,79986,72],{"class":71},[58,79988,403],{"class":75},[58,79990,79991,79993,79995],{"class":60,"line":17570},[58,79992,52782],{"class":75},[58,79994,52451],{"class":71},[58,79996,403],{"class":75},[58,79998,79999],{"class":60,"line":17575},[58,80000,80001],{"class":64},"    \u002F\u002F 2. 初始化数据\n",[58,80003,80004,80006,80009,80011],{"class":60,"line":33277},[58,80005,11866],{"class":92},[58,80007,80008],{"class":82}," goodsList",[58,80010,14208],{"class":92},[58,80012,56081],{"class":75},[58,80014,80015],{"class":60,"line":33283},[58,80016,80017],{"class":75},"      {\n",[58,80019,80020,80023,80026],{"class":60,"line":33289},[58,80021,80022],{"class":75},"        id: ",[58,80024,80025],{"class":386},"'4001172'",[58,80027,32110],{"class":75},[58,80029,80030,80033,80036],{"class":60,"line":33295},[58,80031,80032],{"class":75},"        name: ",[58,80034,80035],{"class":386},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[58,80037,32110],{"class":75},[58,80039,80040,80043,80046],{"class":60,"line":33301},[58,80041,80042],{"class":75},"        price: ",[58,80044,80045],{"class":386},"'289.00'",[58,80047,32110],{"class":75},[58,80049,80050,80053,80056],{"class":60,"line":33312},[58,80051,80052],{"class":75},"        picture: ",[58,80054,80055],{"class":386},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[58,80057,32110],{"class":75},[58,80059,80060],{"class":60,"line":33318},[58,80061,78523],{"class":75},[58,80063,80064],{"class":60,"line":33338},[58,80065,80017],{"class":75},[58,80067,80068,80070,80073],{"class":60,"line":33344},[58,80069,80022],{"class":75},[58,80071,80072],{"class":386},"'4001594'",[58,80074,32110],{"class":75},[58,80076,80077,80079,80082],{"class":60,"line":33355},[58,80078,80032],{"class":75},[58,80080,80081],{"class":386},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[58,80083,32110],{"class":75},[58,80085,80086,80088,80091],{"class":60,"line":33361},[58,80087,80042],{"class":75},[58,80089,80090],{"class":386},"'288.00'",[58,80092,32110],{"class":75},[58,80094,80095,80097,80100],{"class":60,"line":33367},[58,80096,80052],{"class":75},[58,80098,80099],{"class":386},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[58,80101,32110],{"class":75},[58,80103,80104],{"class":60,"line":33373},[58,80105,78523],{"class":75},[58,80107,80108],{"class":60,"line":33379},[58,80109,80017],{"class":75},[58,80111,80112,80114,80117],{"class":60,"line":33385},[58,80113,80022],{"class":75},[58,80115,80116],{"class":386},"'4001009'",[58,80118,32110],{"class":75},[58,80120,80121,80123,80126],{"class":60,"line":33391},[58,80122,80032],{"class":75},[58,80124,80125],{"class":386},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[58,80127,32110],{"class":75},[58,80129,80130,80132,80135],{"class":60,"line":33397},[58,80131,80042],{"class":75},[58,80133,80134],{"class":386},"'109.00'",[58,80136,32110],{"class":75},[58,80138,80139,80141,80144],{"class":60,"line":33417},[58,80140,80052],{"class":75},[58,80142,80143],{"class":386},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[58,80145,32110],{"class":75},[58,80147,80148],{"class":60,"line":33423},[58,80149,78523],{"class":75},[58,80151,80152],{"class":60,"line":33439},[58,80153,80017],{"class":75},[58,80155,80156,80158,80161],{"class":60,"line":33445},[58,80157,80022],{"class":75},[58,80159,80160],{"class":386},"'4001874'",[58,80162,32110],{"class":75},[58,80164,80165,80167,80170],{"class":60,"line":33459},[58,80166,80032],{"class":75},[58,80168,80169],{"class":386},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[58,80171,32110],{"class":75},[58,80173,80174,80176,80179],{"class":60,"line":33465},[58,80175,80042],{"class":75},[58,80177,80178],{"class":386},"'488.00'",[58,80180,32110],{"class":75},[58,80182,80183,80185,80188],{"class":60,"line":33480},[58,80184,80052],{"class":75},[58,80186,80187],{"class":386},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[58,80189,32110],{"class":75},[58,80191,80192],{"class":60,"line":33486},[58,80193,78523],{"class":75},[58,80195,80196],{"class":60,"line":33495},[58,80197,80017],{"class":75},[58,80199,80200,80202,80205],{"class":60,"line":33501},[58,80201,80022],{"class":75},[58,80203,80204],{"class":386},"'4001649'",[58,80206,32110],{"class":75},[58,80208,80209,80211,80214],{"class":60,"line":33510},[58,80210,80032],{"class":75},[58,80212,80213],{"class":386},"'大师监制龙泉青瓷茶叶罐'",[58,80215,32110],{"class":75},[58,80217,80218,80220,80223],{"class":60,"line":33516},[58,80219,80042],{"class":75},[58,80221,80222],{"class":386},"'139.00'",[58,80224,32110],{"class":75},[58,80226,80227,80229,80232],{"class":60,"line":33522},[58,80228,80052],{"class":75},[58,80230,80231],{"class":386},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[58,80233,32110],{"class":75},[58,80235,80236],{"class":60,"line":33531},[58,80237,78523],{"class":75},[58,80239,80240],{"class":60,"line":33537},[58,80241,80017],{"class":75},[58,80243,80244,80246,80249],{"class":60,"line":33548},[58,80245,80022],{"class":75},[58,80247,80248],{"class":386},"'3997185'",[58,80250,32110],{"class":75},[58,80252,80253,80255,80258],{"class":60,"line":33554},[58,80254,80032],{"class":75},[58,80256,80257],{"class":386},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[58,80259,32110],{"class":75},[58,80261,80262,80264,80267],{"class":60,"line":33573},[58,80263,80042],{"class":75},[58,80265,80266],{"class":386},"'108.00'",[58,80268,32110],{"class":75},[58,80270,80271,80273,80276],{"class":60,"line":33579},[58,80272,80052],{"class":75},[58,80274,80275],{"class":386},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[58,80277,32110],{"class":75},[58,80279,80280],{"class":60,"line":33590},[58,80281,78523],{"class":75},[58,80283,80284],{"class":60,"line":33596},[58,80285,80017],{"class":75},[58,80287,80288,80290,80293],{"class":60,"line":33616},[58,80289,80022],{"class":75},[58,80291,80292],{"class":386},"'3997403'",[58,80294,32110],{"class":75},[58,80296,80297,80299,80302],{"class":60,"line":33632},[58,80298,80032],{"class":75},[58,80300,80301],{"class":386},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[58,80303,32110],{"class":75},[58,80305,80306,80308,80311],{"class":60,"line":33638},[58,80307,80042],{"class":75},[58,80309,80310],{"class":386},"'100.00'",[58,80312,32110],{"class":75},[58,80314,80315,80317,80320],{"class":60,"line":33652},[58,80316,80052],{"class":75},[58,80318,80319],{"class":386},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[58,80321,32110],{"class":75},[58,80323,80324],{"class":60,"line":33658},[58,80325,78523],{"class":75},[58,80327,80328],{"class":60,"line":33664},[58,80329,80017],{"class":75},[58,80331,80332,80334,80337],{"class":60,"line":33675},[58,80333,80022],{"class":75},[58,80335,80336],{"class":386},"'3998274'",[58,80338,32110],{"class":75},[58,80340,80341,80343,80346],{"class":60,"line":33681},[58,80342,80032],{"class":75},[58,80344,80345],{"class":386},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[58,80347,32110],{"class":75},[58,80349,80350,80352,80354],{"class":60,"line":33687},[58,80351,80042],{"class":75},[58,80353,80222],{"class":386},[58,80355,32110],{"class":75},[58,80357,80358,80360,80363],{"class":60,"line":33697},[58,80359,80052],{"class":75},[58,80361,80362],{"class":386},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[58,80364,32110],{"class":75},[58,80366,80367],{"class":60,"line":33703},[58,80368,78523],{"class":75},[58,80370,80371],{"class":60,"line":33714},[58,80372,53747],{"class":75},[58,80374,80375],{"class":60,"line":33720},[58,80376,3046],{"emptyLinePlaceholder":720},[58,80378,80379],{"class":60,"line":33730},[58,80380,80381],{"class":64},"    \u002F\u002F 1.渲染函数\n",[58,80383,80384,80386,80388,80390,80392],{"class":60,"line":33735},[58,80385,70716],{"class":92},[58,80387,70719],{"class":379},[58,80389,793],{"class":75},[58,80391,4526],{"class":5862},[58,80393,13086],{"class":75},[58,80395,80396],{"class":60,"line":33741},[58,80397,80398],{"class":64},"      \u002F\u002F 声明空字符串\n",[58,80400,80401,80404,80407,80409],{"class":60,"line":33790},[58,80402,80403],{"class":92},"      let",[58,80405,80406],{"class":75}," str ",[58,80408,383],{"class":92},[58,80410,70736],{"class":386},[58,80412,80413],{"class":60,"line":33837},[58,80414,70741],{"class":64},[58,80416,80417,80419,80422,80424,80427,80430],{"class":60,"line":33842},[58,80418,58641],{"class":75},[58,80420,80421],{"class":379},"forEach",[58,80423,793],{"class":75},[58,80425,80426],{"class":5862},"item",[58,80428,80429],{"class":92}," =>",[58,80431,76],{"class":75},[58,80433,80434,80436,80438,80441,80443,80446,80448,80451,80454,80456],{"class":60,"line":33848},[58,80435,61902],{"class":92},[58,80437,592],{"class":75},[58,80439,80440],{"class":82},"name",[58,80442,469],{"class":75},[58,80444,80445],{"class":82},"price",[58,80447,469],{"class":75},[58,80449,80450],{"class":82},"picture",[58,80452,80453],{"class":75}," } ",[58,80455,383],{"class":92},[58,80457,80458],{"class":75}," item\n",[58,80460,80461,80464,80466],{"class":60,"line":33867},[58,80462,80463],{"class":75},"        str ",[58,80465,10122],{"class":92},[58,80467,70800],{"class":386},[58,80469,80470],{"class":60,"line":33873},[58,80471,80472],{"class":386},"          \u003Cdiv class=\"item\">\n",[58,80474,80475,80478,80480],{"class":60,"line":33893},[58,80476,80477],{"class":386},"            \u003Cimg src=\"${",[58,80479,80450],{"class":75},[58,80481,80482],{"class":386},"}\" alt=\"\">\n",[58,80484,80485,80488,80490],{"class":60,"line":33899},[58,80486,80487],{"class":386},"            \u003Cp class=\"name\">${",[58,80489,80440],{"class":75},[58,80491,80492],{"class":386},"}\u003C\u002Fp>\n",[58,80494,80495,80498,80500],{"class":60,"line":33905},[58,80496,80497],{"class":386},"            \u003Cp class=\"price\">${",[58,80499,80445],{"class":75},[58,80501,80492],{"class":386},[58,80503,80504],{"class":60,"line":33915},[58,80505,80506],{"class":386},"          \u003C\u002Fdiv>\n",[58,80508,80509],{"class":60,"line":33920},[58,80510,80511],{"class":386},"        `\n",[58,80513,80514],{"class":60,"line":33926},[58,80515,65447],{"class":75},[58,80517,80518],{"class":60,"line":33942},[58,80519,80520],{"class":64},"      \u002F\u002F 追加给List\n",[58,80522,80523,80525,80527,80529,80532,80534,80536],{"class":60,"line":33987},[58,80524,56405],{"class":75},[58,80526,55035],{"class":379},[58,80528,793],{"class":75},[58,80530,80531],{"class":386},"'.list'",[58,80533,74880],{"class":75},[58,80535,383],{"class":92},[58,80537,74616],{"class":75},[58,80539,80540],{"class":60,"line":33993},[58,80541,2833],{"class":75},[58,80543,80544],{"class":60,"line":33999},[58,80545,80546],{"class":64},"    \u002F\u002F 页面一打开就需要渲染\n",[58,80548,80549,80552],{"class":60,"line":34005},[58,80550,80551],{"class":379},"    render",[58,80553,80554],{"class":75},"(goodsList)\n",[58,80556,80557],{"class":60,"line":34016},[58,80558,80559],{"class":64},"    \u002F\u002F 2.过滤筛选\n",[58,80561,80562,80564,80566,80568,80571,80573,80575,80577,80579,80581,80583,80585],{"class":60,"line":34022},[58,80563,53045],{"class":75},[58,80565,55035],{"class":379},[58,80567,793],{"class":75},[58,80569,80570],{"class":386},"'.filter'",[58,80572,31470],{"class":75},[58,80574,58447],{"class":379},[58,80576,793],{"class":75},[58,80578,58452],{"class":386},[58,80580,469],{"class":75},[58,80582,864],{"class":5862},[58,80584,80429],{"class":92},[58,80586,76],{"class":75},[58,80588,80589],{"class":60,"line":34028},[58,80590,80591],{"class":64},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[58,80593,80594,80596,80598,80601,80603,80605,80607,80609],{"class":60,"line":34034},[58,80595,58862],{"class":92},[58,80597,592],{"class":75},[58,80599,80600],{"class":82},"tagName",[58,80602,469],{"class":75},[58,80604,32181],{"class":82},[58,80606,80453],{"class":75},[58,80608,383],{"class":92},[58,80610,80611],{"class":75}," e.target\n",[58,80613,80614],{"class":60,"line":34052},[58,80615,80616],{"class":64},"      \u002F\u002F 判断\n",[58,80618,80619,80621,80623,80625,80627],{"class":60,"line":34066},[58,80620,55116],{"class":92},[58,80622,67666],{"class":75},[58,80624,55122],{"class":92},[58,80626,68888],{"class":386},[58,80628,13086],{"class":75},[58,80630,80631],{"class":60,"line":34075},[58,80632,80633],{"class":64},"        \u002F\u002F console.log(11)\n",[58,80635,80636],{"class":60,"line":34084},[58,80637,80638],{"class":64},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[58,80640,80641],{"class":60,"line":34093},[58,80642,80643],{"class":64},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[58,80645,80646,80648,80650,80652],{"class":60,"line":34102},[58,80647,52468],{"class":92},[58,80649,52471],{"class":75},[58,80651,383],{"class":92},[58,80653,80654],{"class":75}," goodsList\n",[58,80656,80657,80659,80662,80664,80667],{"class":60,"line":34108},[58,80658,3143],{"class":92},[58,80660,80661],{"class":75}," (dataset.index ",[58,80663,55122],{"class":92},[58,80665,80666],{"class":386}," '1'",[58,80668,13086],{"class":75},[58,80670,80671,80674,80676,80679,80682,80684,80686,80688,80691,80693,80695,80698,80700,80702,80704],{"class":60,"line":34114},[58,80672,80673],{"class":75},"          arr ",[58,80675,383],{"class":92},[58,80677,80678],{"class":75}," goodsList.",[58,80680,80681],{"class":379},"filter",[58,80683,793],{"class":75},[58,80685,80426],{"class":5862},[58,80687,80429],{"class":92},[58,80689,80690],{"class":75}," item.price ",[58,80692,2357],{"class":92},[58,80694,4739],{"class":82},[58,80696,80697],{"class":92}," &&",[58,80699,80690],{"class":75},[58,80701,2236],{"class":92},[58,80703,6400],{"class":82},[58,80705,799],{"class":75},[58,80707,80708,80711,80713,80715,80717,80719,80722],{"class":60,"line":34122},[58,80709,80710],{"class":75},"        } ",[58,80712,2348],{"class":92},[58,80714,2351],{"class":92},[58,80716,80661],{"class":75},[58,80718,55122],{"class":92},[58,80720,80721],{"class":386}," '2'",[58,80723,13086],{"class":75},[58,80725,80726,80728,80730,80732,80734,80736,80738,80740,80742,80744,80746,80748,80750,80752,80755],{"class":60,"line":34127},[58,80727,80673],{"class":75},[58,80729,383],{"class":92},[58,80731,80678],{"class":75},[58,80733,80681],{"class":379},[58,80735,793],{"class":75},[58,80737,80426],{"class":5862},[58,80739,80429],{"class":92},[58,80741,80690],{"class":75},[58,80743,2357],{"class":92},[58,80745,6400],{"class":82},[58,80747,80697],{"class":92},[58,80749,80690],{"class":75},[58,80751,2236],{"class":92},[58,80753,80754],{"class":82}," 300",[58,80756,799],{"class":75},[58,80758,80759,80761,80763,80765,80767,80769,80772],{"class":60,"line":34133},[58,80760,80710],{"class":75},[58,80762,2348],{"class":92},[58,80764,2351],{"class":92},[58,80766,80661],{"class":75},[58,80768,55122],{"class":92},[58,80770,80771],{"class":386}," '3'",[58,80773,13086],{"class":75},[58,80775,80776,80778,80780,80782,80784,80786,80788,80790,80792,80794,80796],{"class":60,"line":34144},[58,80777,80673],{"class":75},[58,80779,383],{"class":92},[58,80781,80678],{"class":75},[58,80783,80681],{"class":379},[58,80785,793],{"class":75},[58,80787,80426],{"class":5862},[58,80789,80429],{"class":92},[58,80791,80690],{"class":75},[58,80793,2357],{"class":92},[58,80795,80754],{"class":82},[58,80797,799],{"class":75},[58,80799,80800],{"class":60,"line":34150},[58,80801,3175],{"class":75},[58,80803,80804],{"class":60,"line":34170},[58,80805,80806],{"class":64},"        \u002F\u002F 渲染函数\n",[58,80808,80809,80811],{"class":60,"line":34176},[58,80810,71040],{"class":379},[58,80812,53050],{"class":75},[58,80814,80815],{"class":60,"line":34182},[58,80816,53036],{"class":75},[58,80818,80819],{"class":60,"line":34188},[58,80820,3046],{"emptyLinePlaceholder":720},[58,80822,80823],{"class":60,"line":34205},[58,80824,34105],{"class":75},[58,80826,80827,80829,80831],{"class":60,"line":34211},[58,80828,53055],{"class":75},[58,80830,52451],{"class":71},[58,80832,403],{"class":75},[58,80834,80835,80837,80839],{"class":60,"line":34217},[58,80836,52423],{"class":75},[58,80838,52438],{"class":71},[58,80840,403],{"class":75},[58,80842,80843],{"class":60,"line":34223},[58,80844,3046],{"emptyLinePlaceholder":720},[58,80846,80847,80849,80851],{"class":60,"line":34229},[58,80848,52423],{"class":75},[58,80850,51279],{"class":71},[58,80852,403],{"class":75},[14,80854,80856],{"id":80855},"_410-深入了解对象","4.10 深入了解对象",[114,80858,80860],{"id":80859},"_4101-创建对象","4.10.1 创建对象",[175,80862,80863],{},[119,80864],{"alt":53,"src":80865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[175,80867,80868],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[114,80870,80872],{"id":80871},"_4102-构造函数","4.10.2 构造函数",[175,80874,80875,80878],{},[25,80876,80877],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[175,80880,80881,80884],{},[25,80882,80883],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[48,80886,80888],{"className":51277,"code":80887,"language":51279,"meta":53,"style":53},"\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",[55,80889,80890,80898,80903,80924,80937,80949,80961,80965,80970,80997,81002,81029],{"__ignoreMap":53},[58,80891,80892,80894,80896],{"class":60,"line":61},[58,80893,373],{"class":75},[58,80895,52451],{"class":71},[58,80897,403],{"class":75},[58,80899,80900],{"class":60,"line":68},[58,80901,80902],{"class":64},"\u002F\u002F例：\n",[58,80904,80905,80907,80910,80912,80914,80916,80918,80920,80922],{"class":60,"line":79},[58,80906,55085],{"class":92},[58,80908,80909],{"class":379}," Pig",[58,80911,793],{"class":75},[58,80913,80440],{"class":5862},[58,80915,1164],{"class":75},[58,80917,70853],{"class":5862},[58,80919,1164],{"class":75},[58,80921,70870],{"class":5862},[58,80923,13086],{"class":75},[58,80925,80926,80929,80932,80934],{"class":60,"line":105},[58,80927,80928],{"class":82},"    this",[58,80930,80931],{"class":75},".name",[58,80933,383],{"class":92},[58,80935,80936],{"class":75},"name\n",[58,80938,80939,80941,80944,80946],{"class":60,"line":627},[58,80940,80928],{"class":82},[58,80942,80943],{"class":75},".age",[58,80945,383],{"class":92},[58,80947,80948],{"class":75},"age\n",[58,80950,80951,80953,80956,80958],{"class":60,"line":509},[58,80952,80928],{"class":82},[58,80954,80955],{"class":75},".gender",[58,80957,383],{"class":92},[58,80959,80960],{"class":75},"gender    \n",[58,80962,80963],{"class":60,"line":559},[58,80964,108],{"class":75},[58,80966,80967],{"class":60,"line":654},[58,80968,80969],{"class":64},"\u002F\u002F创建佩奇对象\n",[58,80971,80972,80974,80977,80979,80981,80983,80986,80988,80990,80992,80995],{"class":60,"line":671},[58,80973,7438],{"class":92},[58,80975,80976],{"class":82}," Peppa",[58,80978,12362],{"class":92},[58,80980,80909],{"class":379},[58,80982,793],{"class":75},[58,80984,80985],{"class":386},"'佩奇'",[58,80987,1164],{"class":75},[58,80989,1130],{"class":82},[58,80991,1164],{"class":75},[58,80993,80994],{"class":386},"'女'",[58,80996,799],{"class":75},[58,80998,80999],{"class":60,"line":677},[58,81000,81001],{"class":64},"\u002F\u002F创建乔治对象\n",[58,81003,81004,81006,81009,81011,81013,81015,81018,81020,81022,81024,81027],{"class":60,"line":2260},[58,81005,7438],{"class":92},[58,81007,81008],{"class":82}," George",[58,81010,12362],{"class":92},[58,81012,80909],{"class":379},[58,81014,793],{"class":75},[58,81016,81017],{"class":386},"'乔治'",[58,81019,1164],{"class":75},[58,81021,861],{"class":82},[58,81023,1164],{"class":75},[58,81025,81026],{"class":386},"'男'",[58,81028,799],{"class":75},[58,81030,81031,81033,81035],{"class":60,"line":694},[58,81032,52423],{"class":75},[58,81034,52451],{"class":71},[58,81036,403],{"class":75},[175,81038,81039],{},[119,81040],{"alt":53,"src":81041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[175,81043,81044],{},[119,81045],{"alt":53,"src":81046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[175,81048,81049],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[175,81051,81052],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[175,81054,81055],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[175,81057,81058],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[175,81060,81061],{},"这里用等号是因为：对象.属性=值",[175,81063,81064],{},"①利用对象字面量创建对象",[175,81066,81067],{},"const o={",[175,81069,81070],{},"name:'pink'",[175,81072,81073],{},"} ②利用new Object创建对象",[175,81075,81076],{},"const o=new Object({name:'pink'})",[175,81078,81079],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[175,81081,81082],{},"构造函数创建对象的执行过程：",[175,81084,81085],{},[119,81086],{"alt":53,"src":81087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[114,81089,81091],{"id":81090},"_4103-实例成员","4.10.3 实例成员",[175,81093,81094],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[19,81096,81097,81100,81103],{},[22,81098,81099],{},"实例对象的属性和方法即为实例成员",[22,81101,81102],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[22,81104,81105],{},"构造函数创建的实例对象彼此独立互不影响",[114,81107,81109],{"id":81108},"_4104-静态成员","4.10.4 静态成员",[175,81111,81112],{},[119,81113],{"alt":53,"src":81114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[175,81116,81117],{},"静态成员有Date.now() Math.PI Math.random()",[175,81119,81120],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[175,81122,81123],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[175,81125,81126],{},"function Pig(name) n {",[175,81128,81129],{},"this.name=name",[175,81131,1730],{},[175,81133,81134],{},"Pig.eyes=2",[175,81136,81137],{},"Pig.sayHai=function () { console.log(this) }",[175,81139,81140],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[175,81142,81143],{},"console.log(Pig.eyes) \u002F\u002F2",[175,81145,11977],{},[19,81147,81148,81151,81154,81157,81160],{},[22,81149,81150],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[22,81152,81153],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[22,81155,81156],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[22,81158,81159],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[22,81161,81162],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[175,81164,81165],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[114,81167,81169],{"id":81168},"_4105-内置构造函数","4.10.5 内置构造函数",[175,81171,81172],{},"内置构造函数包含：",[175,81174,81175],{},[119,81176],{"alt":53,"src":81177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[175,81179,81180],{},[119,81181],{"alt":53,"src":81182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[175,81184,81185],{},"这些基本数据类型，js对他们进行了包装",[52451,81187,81188],{},"\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",[22641,81190,81192],{"id":81191},"_41051-object","4.10.5.1 Object",[175,81194,81195],{},"Object 是内置的构造函数，用于创建普通对象",[175,81197,81198],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[48,81200,81202],{"className":51277,"code":81201,"language":51279,"meta":53,"style":53},"const user=new Object({name:'小明',age:15})\n",[55,81203,81204],{"__ignoreMap":53},[58,81205,81206],{"class":60,"line":61},[58,81207,81201],{"class":75},[175,81209,81210],{},"三个常用的静态方法：",[23553,81212,81214],{"id":81213},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[175,81216,81217],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[175,81219,81220],{},[119,81221],{"alt":53,"src":81222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[175,81224,81225],{},[119,81226],{"alt":53,"src":81227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[48,81229,81231],{"className":53705,"code":81230,"language":53707,"meta":53,"style":53},"\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",[55,81232,81233,81241,81249,81254,81259,81264,81269,81274,81279,81287],{"__ignoreMap":53},[58,81234,81235,81237,81239],{"class":60,"line":61},[58,81236,373],{"class":75},[58,81238,52438],{"class":71},[58,81240,403],{"class":75},[58,81242,81243,81245,81247],{"class":60,"line":68},[58,81244,52782],{"class":75},[58,81246,52451],{"class":71},[58,81248,403],{"class":75},[58,81250,81251],{"class":60,"line":79},[58,81252,81253],{"class":75},"    const o = { name: 'pink', age: 6 }\n",[58,81255,81256],{"class":60,"line":105},[58,81257,81258],{"class":75},"    \u002F\u002F 获得所有属性名\n",[58,81260,81261],{"class":60,"line":627},[58,81262,81263],{"class":75},"    const arr = Object.keys(o)\n",[58,81265,81266],{"class":60,"line":509},[58,81267,81268],{"class":75},"    console.log(arr)\n",[58,81270,81271],{"class":60,"line":559},[58,81272,81273],{"class":75},"    \u002F\u002F 获得所有属性值\n",[58,81275,81276],{"class":60,"line":654},[58,81277,81278],{"class":75},"    console.log(Object.values(o))\n",[58,81280,81281,81283,81285],{"class":60,"line":671},[58,81282,53055],{"class":75},[58,81284,52451],{"class":71},[58,81286,403],{"class":75},[58,81288,81289,81291,81293],{"class":60,"line":677},[58,81290,52423],{"class":75},[58,81292,52438],{"class":71},[58,81294,403],{"class":75},[23553,81296,81298],{"id":81297},"_410512-object-assign","4.10.5.1.2 Object. assign",[175,81300,81301],{},"Object.assign(oo,o)",[175,81303,81304],{},"后的东西添加给前 是追加",[175,81306,81307],{},[119,81308],{"alt":53,"src":81309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[175,81311,81312],{},[119,81313],{"alt":53,"src":81314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[48,81316,81318],{"className":53705,"code":81317,"language":53707,"meta":53,"style":53},"\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",[55,81319,81320,81328,81336,81340,81344,81348,81352,81356,81360,81365,81370,81375,81380,81385,81393],{"__ignoreMap":53},[58,81321,81322,81324,81326],{"class":60,"line":61},[58,81323,373],{"class":75},[58,81325,52438],{"class":71},[58,81327,403],{"class":75},[58,81329,81330,81332,81334],{"class":60,"line":68},[58,81331,52782],{"class":75},[58,81333,52451],{"class":71},[58,81335,403],{"class":75},[58,81337,81338],{"class":60,"line":79},[58,81339,81253],{"class":75},[58,81341,81342],{"class":60,"line":105},[58,81343,81258],{"class":75},[58,81345,81346],{"class":60,"line":627},[58,81347,81263],{"class":75},[58,81349,81350],{"class":60,"line":509},[58,81351,81268],{"class":75},[58,81353,81354],{"class":60,"line":559},[58,81355,81273],{"class":75},[58,81357,81358],{"class":60,"line":654},[58,81359,81278],{"class":75},[58,81361,81362],{"class":60,"line":671},[58,81363,81364],{"class":75},"    const oo = {}\n",[58,81366,81367],{"class":60,"line":677},[58,81368,81369],{"class":75},"    Object.assign(oo, o)\n",[58,81371,81372],{"class":60,"line":2260},[58,81373,81374],{"class":75},"    console.log(oo)\n",[58,81376,81377],{"class":60,"line":694},[58,81378,81379],{"class":75},"    Object.assign(o, { gender: '女' })\n",[58,81381,81382],{"class":60,"line":2270},[58,81383,81384],{"class":75},"    console.log(o)\n",[58,81386,81387,81389,81391],{"class":60,"line":2275},[58,81388,53055],{"class":75},[58,81390,52451],{"class":71},[58,81392,403],{"class":75},[58,81394,81395,81397,81399],{"class":60,"line":2289},[58,81396,52423],{"class":75},[58,81398,52438],{"class":71},[58,81400,403],{"class":75},[175,81402,81403],{},[119,81404],{"alt":53,"src":81405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22641,81407,81409],{"id":81408},"_41052-array","4.10.5.2 Array",[175,81411,81412],{},"Array 是内置的构造函数，用于创建数组",[175,81414,81415],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[48,81417,81419],{"className":51277,"code":81418,"language":51279,"meta":53,"style":53},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[55,81420,81421,81426],{"__ignoreMap":53},[58,81422,81423],{"class":60,"line":61},[58,81424,81425],{"class":75},"const arr=new Array(3,5)\n",[58,81427,81428],{"class":60,"line":68},[58,81429,81430],{"class":75},"console.log(arr)  \u002F\u002F[3,5]\n",[175,81432,81433],{},"Array的实例方法，这个方法是实例成员",[175,81435,81436],{},[119,81437],{"alt":53,"src":81438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23553,81440,81442],{"id":81441},"_410521-reduce","4.10.5.2.1 reduce",[175,81444,81445],{},[119,81446],{"alt":53,"src":81447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[48,81449,81451],{"className":53705,"code":81450,"language":53707,"meta":53,"style":53},"\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",[55,81452,81453,81461,81469,81474,81479,81484,81489,81493,81498,81503,81508,81512,81517,81522,81526,81531,81536,81541,81549],{"__ignoreMap":53},[58,81454,81455,81457,81459],{"class":60,"line":61},[58,81456,373],{"class":75},[58,81458,52438],{"class":71},[58,81460,403],{"class":75},[58,81462,81463,81465,81467],{"class":60,"line":68},[58,81464,52782],{"class":75},[58,81466,52451],{"class":71},[58,81468,403],{"class":75},[58,81470,81471],{"class":60,"line":79},[58,81472,81473],{"class":75},"    const arr = [1, 5, 8]\n",[58,81475,81476],{"class":60,"line":105},[58,81477,81478],{"class":75},"    \u002F\u002F 1.没有初始值\n",[58,81480,81481],{"class":60,"line":627},[58,81482,81483],{"class":75},"    const total = arr.reduce(function (prev, current) {\n",[58,81485,81486],{"class":60,"line":509},[58,81487,81488],{"class":75},"      return prev + current\n",[58,81490,81491],{"class":60,"line":559},[58,81492,34105],{"class":75},[58,81494,81495],{"class":60,"line":654},[58,81496,81497],{"class":75},"    console.log(total)   \u002F\u002F14\n",[58,81499,81500],{"class":60,"line":671},[58,81501,81502],{"class":75},"    \u002F\u002F 2.有初始值\n",[58,81504,81505],{"class":60,"line":677},[58,81506,81507],{"class":75},"    const total1 = arr.reduce(function (prev, current) {\n",[58,81509,81510],{"class":60,"line":2260},[58,81511,81488],{"class":75},[58,81513,81514],{"class":60,"line":694},[58,81515,81516],{"class":75},"    }, 10)\n",[58,81518,81519],{"class":60,"line":2270},[58,81520,81521],{"class":75},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[58,81523,81524],{"class":60,"line":2275},[58,81525,3046],{"emptyLinePlaceholder":720},[58,81527,81528],{"class":60,"line":2289},[58,81529,81530],{"class":75},"    \u002F\u002F 3.箭头函数写法\n",[58,81532,81533],{"class":60,"line":2294},[58,81534,81535],{"class":75},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[58,81537,81538],{"class":60,"line":2300},[58,81539,81540],{"class":75},"    console.log(total2)   \u002F\u002F24\n",[58,81542,81543,81545,81547],{"class":60,"line":2321},[58,81544,53055],{"class":75},[58,81546,52451],{"class":71},[58,81548,403],{"class":75},[58,81550,81551,81553,81555],{"class":60,"line":2326},[58,81552,52423],{"class":75},[58,81554,52438],{"class":71},[58,81556,403],{"class":75},[175,81558,81559],{},"执行过程：",[19,81561,81562,81565,81568],{},[22,81563,81564],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[22,81566,81567],{},"每一次循环，把返回值给作为下一次循环的上一次值",[22,81569,81570],{},"如果有起始值，则起始值作为上一次值",[48,81572,81574],{"className":53705,"code":81573,"language":53707,"meta":53,"style":53},"\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",[55,81575,81576,81584,81592,81596,81600,81604,81608,81612,81616,81621,81626,81631,81636,81641,81645,81649,81653,81657,81661,81665,81670,81674,81679,81683,81688,81693,81697,81701,81705,81713],{"__ignoreMap":53},[58,81577,81578,81580,81582],{"class":60,"line":61},[58,81579,373],{"class":75},[58,81581,52438],{"class":71},[58,81583,403],{"class":75},[58,81585,81586,81588,81590],{"class":60,"line":68},[58,81587,52782],{"class":75},[58,81589,52451],{"class":71},[58,81591,403],{"class":75},[58,81593,81594],{"class":60,"line":79},[58,81595,81473],{"class":75},[58,81597,81598],{"class":60,"line":105},[58,81599,81478],{"class":75},[58,81601,81602],{"class":60,"line":627},[58,81603,81483],{"class":75},[58,81605,81606],{"class":60,"line":509},[58,81607,81488],{"class":75},[58,81609,81610],{"class":60,"line":559},[58,81611,34105],{"class":75},[58,81613,81614],{"class":60,"line":654},[58,81615,81497],{"class":75},[58,81617,81618],{"class":60,"line":671},[58,81619,81620],{"class":75},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[58,81622,81623],{"class":60,"line":677},[58,81624,81625],{"class":75},"    \u002F\u002F     1              5                    6\n",[58,81627,81628],{"class":60,"line":2260},[58,81629,81630],{"class":75},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[58,81632,81633],{"class":60,"line":694},[58,81634,81635],{"class":75},"    \u002F\u002F     6              8                    14\n",[58,81637,81638],{"class":60,"line":2270},[58,81639,81640],{"class":75},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[58,81642,81643],{"class":60,"line":2275},[58,81644,81502],{"class":75},[58,81646,81647],{"class":60,"line":2289},[58,81648,81507],{"class":75},[58,81650,81651],{"class":60,"line":2294},[58,81652,81488],{"class":75},[58,81654,81655],{"class":60,"line":2300},[58,81656,81516],{"class":75},[58,81658,81659],{"class":60,"line":2321},[58,81660,81521],{"class":75},[58,81662,81663],{"class":60,"line":2326},[58,81664,81620],{"class":75},[58,81666,81667],{"class":60,"line":2340},[58,81668,81669],{"class":75},"    \u002F\u002F     10             1                     11\n",[58,81671,81672],{"class":60,"line":2345},[58,81673,81630],{"class":75},[58,81675,81676],{"class":60,"line":2374},[58,81677,81678],{"class":75},"    \u002F\u002F     11             5                    16\n",[58,81680,81681],{"class":60,"line":2379},[58,81682,81630],{"class":75},[58,81684,81685],{"class":60,"line":2396},[58,81686,81687],{"class":75},"    \u002F\u002F     16             8                    24\n",[58,81689,81690],{"class":60,"line":2401},[58,81691,81692],{"class":75},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[58,81694,81695],{"class":60,"line":2406},[58,81696,81530],{"class":75},[58,81698,81699],{"class":60,"line":2411},[58,81700,81535],{"class":75},[58,81702,81703],{"class":60,"line":2425},[58,81704,81540],{"class":75},[58,81706,81707,81709,81711],{"class":60,"line":2430},[58,81708,53055],{"class":75},[58,81710,52451],{"class":71},[58,81712,403],{"class":75},[58,81714,81715,81717,81719],{"class":60,"line":3223},[58,81716,52423],{"class":75},[58,81718,52438],{"class":71},[58,81720,403],{"class":75},[23553,81722,81724],{"id":81723},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[175,81726,81727],{},[119,81728],{"alt":53,"src":81729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[48,81731,81733],{"className":53705,"code":81732,"language":53707,"meta":53,"style":53},"\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",[55,81734,81735,81743,81751,81756,81761,81766,81771,81775,81780,81785,81790,81795,81800,81805,81809,81814,81818,81823,81831],{"__ignoreMap":53},[58,81736,81737,81739,81741],{"class":60,"line":61},[58,81738,373],{"class":75},[58,81740,52438],{"class":71},[58,81742,403],{"class":75},[58,81744,81745,81747,81749],{"class":60,"line":68},[58,81746,52782],{"class":75},[58,81748,52451],{"class":71},[58,81750,403],{"class":75},[58,81752,81753],{"class":60,"line":79},[58,81754,81755],{"class":75},"    const arr = [\n",[58,81757,81758],{"class":60,"line":105},[58,81759,81760],{"class":75},"      { name: '张三', salary: 10000 },\n",[58,81762,81763],{"class":60,"line":627},[58,81764,81765],{"class":75},"      { name: '李四', salary: 10000 },\n",[58,81767,81768],{"class":60,"line":509},[58,81769,81770],{"class":75},"      { name: '王五', salary: 10000 }\n",[58,81772,81773],{"class":60,"line":559},[58,81774,53747],{"class":75},[58,81776,81777],{"class":60,"line":654},[58,81778,81779],{"class":75},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[58,81781,81782],{"class":60,"line":671},[58,81783,81784],{"class":75},"    \u002F\u002F prev是累计值\n",[58,81786,81787],{"class":60,"line":677},[58,81788,81789],{"class":75},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[58,81791,81792],{"class":60,"line":2260},[58,81793,81794],{"class":75},"    console.log(total)\n",[58,81796,81797],{"class":60,"line":694},[58,81798,81799],{"class":75},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[58,81801,81802],{"class":60,"line":2270},[58,81803,81804],{"class":75},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[58,81806,81807],{"class":60,"line":2275},[58,81808,81799],{"class":75},[58,81810,81811],{"class":60,"line":2289},[58,81812,81813],{"class":75},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[58,81815,81816],{"class":60,"line":2294},[58,81817,81799],{"class":75},[58,81819,81820],{"class":60,"line":2300},[58,81821,81822],{"class":75},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[58,81824,81825,81827,81829],{"class":60,"line":2321},[58,81826,53055],{"class":75},[58,81828,52451],{"class":71},[58,81830,403],{"class":75},[58,81832,81833,81835,81837],{"class":60,"line":2326},[58,81834,52423],{"class":75},[58,81836,52438],{"class":71},[58,81838,403],{"class":75},[23553,81840,81842],{"id":81841},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[175,81844,81845],{},[119,81846],{"alt":53,"src":81847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[175,81849,81850],{},[119,81851],{"alt":53,"src":81852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[19,81854,81855],{},[22,81856,81857],{},"find()",[175,81859,81860],{},"循环查找，找到第一个就ok",[175,81862,81863],{},[376,81864,81867],{"href":81865,"rel":81866},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24508],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[48,81869,81871],{"className":51277,"code":81870,"language":51279,"meta":53,"style":53},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[55,81872,81873,81878,81883],{"__ignoreMap":53},[58,81874,81875],{"class":60,"line":61},[58,81876,81877],{"class":75},"const array1 = [5, 12, 8, 130, 44]\n",[58,81879,81880],{"class":60,"line":68},[58,81881,81882],{"class":75},"const found = array1.find((element) => element > 10)\n",[58,81884,81885],{"class":60,"line":79},[58,81886,81887],{"class":75},"console.log(found)  \u002F\u002F12\n",[175,81889,81890,81892,81893,81898,81899,81902,81903,81905,81906,81911,81912,81914,81915,81917,81918,81920,81921],{},[55,81891,81857],{}," 方法是一个",[376,81894,81897],{"href":81895,"rel":81896},"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",[24508],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[55,81900,81901],{},"callbackFn"," 函数，直到 ",[55,81904,81901],{}," 返回一个",[376,81907,81910],{"href":81908,"rel":81909},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24508],"真值","。然后 ",[55,81913,81857],{}," 返回该元素并停止迭代数组。如果 ",[55,81916,81901],{}," 从未返回真值，则 ",[55,81919,81857],{}," 返回 ",[55,81922,81923],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[48,81925,81927],{"className":53705,"code":81926,"language":53707,"meta":53,"style":53},"\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",[55,81928,81929,81937,81945,81950,81955,81960,81964,81969,81974,81978,81983,81988,81992,81996,82001,82006,82010,82014,82019,82024,82029,82034,82039,82043,82048,82053,82058,82063,82067,82072,82080],{"__ignoreMap":53},[58,81930,81931,81933,81935],{"class":60,"line":61},[58,81932,373],{"class":75},[58,81934,52438],{"class":71},[58,81936,403],{"class":75},[58,81938,81939,81941,81943],{"class":60,"line":68},[58,81940,52782],{"class":75},[58,81942,52451],{"class":71},[58,81944,403],{"class":75},[58,81946,81947],{"class":60,"line":79},[58,81948,81949],{"class":75},"    const arr = ['red', 'blue', 'green']\n",[58,81951,81952],{"class":60,"line":105},[58,81953,81954],{"class":75},"    const found = arr.find(item => item === 'pink')\n",[58,81956,81957],{"class":60,"line":627},[58,81958,81959],{"class":75},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[58,81961,81962],{"class":60,"line":509},[58,81963,3046],{"emptyLinePlaceholder":720},[58,81965,81966],{"class":60,"line":559},[58,81967,81968],{"class":75},"    \u002F\u002F 使用场景，用于查找数据\n",[58,81970,81971],{"class":60,"line":654},[58,81972,81973],{"class":75},"    const arr1 = [\n",[58,81975,81976],{"class":60,"line":671},[58,81977,80017],{"class":75},[58,81979,81980],{"class":60,"line":677},[58,81981,81982],{"class":75},"        name: '小米',\n",[58,81984,81985],{"class":60,"line":2260},[58,81986,81987],{"class":75},"        price: 1999\n",[58,81989,81990],{"class":60,"line":694},[58,81991,78523],{"class":75},[58,81993,81994],{"class":60,"line":2270},[58,81995,80017],{"class":75},[58,81997,81998],{"class":60,"line":2275},[58,81999,82000],{"class":75},"        name: '华为',\n",[58,82002,82003],{"class":60,"line":2289},[58,82004,82005],{"class":75},"        price: 3999\n",[58,82007,82008],{"class":60,"line":2294},[58,82009,53036],{"class":75},[58,82011,82012],{"class":60,"line":2300},[58,82013,53747],{"class":75},[58,82015,82016],{"class":60,"line":2321},[58,82017,82018],{"class":75},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[58,82020,82021],{"class":60,"line":2326},[58,82022,82023],{"class":75},"    \u002F\u002F const found1 = arr1.find(item => {\n",[58,82025,82026],{"class":60,"line":2340},[58,82027,82028],{"class":75},"    \u002F\u002F   if (item.name === '小米') {\n",[58,82030,82031],{"class":60,"line":2345},[58,82032,82033],{"class":75},"    \u002F\u002F     return item\n",[58,82035,82036],{"class":60,"line":2374},[58,82037,82038],{"class":75},"    \u002F\u002F   }\n",[58,82040,82041],{"class":60,"line":2379},[58,82042,63922],{"class":75},[58,82044,82045],{"class":60,"line":2396},[58,82046,82047],{"class":75},"    \u002F\u002F 另一种写法\n",[58,82049,82050],{"class":60,"line":2401},[58,82051,82052],{"class":75},"    const found1 = arr1.find(item => {\n",[58,82054,82055],{"class":60,"line":2406},[58,82056,82057],{"class":75},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[58,82059,82060],{"class":60,"line":2411},[58,82061,82062],{"class":75},"      return item.name = '小米'\n",[58,82064,82065],{"class":60,"line":2425},[58,82066,34105],{"class":75},[58,82068,82069],{"class":60,"line":2430},[58,82070,82071],{"class":75},"    console.log(found1)\n",[58,82073,82074,82076,82078],{"class":60,"line":3223},[58,82075,53055],{"class":75},[58,82077,52451],{"class":71},[58,82079,403],{"class":75},[58,82081,82082,82084,82086],{"class":60,"line":3237},[58,82083,52423],{"class":75},[58,82085,52438],{"class":71},[58,82087,403],{"class":75},[175,82089,82090],{},[119,82091],{"alt":53,"src":82092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[175,82094,82095],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[19,82097,82098],{"start":68},[22,82099,82100],{},"every()返回的是布尔值",[175,82102,82103],{},[376,82104,82107],{"href":82105,"rel":82106},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24508],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[175,82109,82110],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[175,82112,82113],{},"some是只有有一个就没问题",[175,82115,82116],{},"every是必须全是才行",[48,82118,82122],{"className":82119,"code":82120,"language":82121,"meta":53,"style":53},"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",[55,82123,82124,82140,82154,82158,82167],{"__ignoreMap":53},[58,82125,82126,82128,82131,82133,82135,82138],{"class":60,"line":61},[58,82127,55085],{"class":92},[58,82129,82130],{"class":75}," isBigEnough(element, ",[58,82132,74689],{"class":92},[58,82134,469],{"class":75},[58,82136,82137],{"class":92},"array",[58,82139,13086],{"class":75},[58,82141,82142,82145,82148,82150,82152],{"class":60,"line":68},[58,82143,82144],{"class":92},"  return",[58,82146,82147],{"class":75}," element ",[58,82149,2357],{"class":92},[58,82151,2684],{"class":82},[58,82153,102],{"class":75},[58,82155,82156],{"class":60,"line":79},[58,82157,108],{"class":75},[58,82159,82160,82163,82165],{"class":60,"line":105},[58,82161,82162],{"class":75},"[12, 5, 8, 130, 44].every(isBigEnough); ",[58,82164,33973],{"class":92},[58,82166,55152],{"class":75},[58,82168,82169,82172,82174],{"class":60,"line":627},[58,82170,82171],{"class":75},"[12, 54, 18, 130, 44].every(isBigEnough); ",[58,82173,33973],{"class":92},[58,82175,58574],{"class":75},[48,82177,82179],{"className":53705,"code":82178,"language":53707,"meta":53,"style":53},"\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",[55,82180,82181,82189,82197,82202,82206,82211,82216,82224],{"__ignoreMap":53},[58,82182,82183,82185,82187],{"class":60,"line":61},[58,82184,373],{"class":75},[58,82186,52438],{"class":71},[58,82188,403],{"class":75},[58,82190,82191,82193,82195],{"class":60,"line":68},[58,82192,52782],{"class":75},[58,82194,52451],{"class":71},[58,82196,403],{"class":75},[58,82198,82199],{"class":60,"line":79},[58,82200,82201],{"class":75},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[58,82203,82204],{"class":60,"line":105},[58,82205,78953],{"class":75},[58,82207,82208],{"class":60,"line":627},[58,82209,82210],{"class":75},"    const flag = arr.every(item => item >= 10)\n",[58,82212,82213],{"class":60,"line":509},[58,82214,82215],{"class":75},"    console.log(flag)    \u002F\u002Ftrue\n",[58,82217,82218,82220,82222],{"class":60,"line":559},[58,82219,53055],{"class":75},[58,82221,52451],{"class":71},[58,82223,403],{"class":75},[58,82225,82226,82228,82230],{"class":60,"line":654},[58,82227,52423],{"class":75},[58,82229,52438],{"class":71},[58,82231,403],{"class":75},[48,82233,82235],{"className":53705,"code":82234,"language":53707,"meta":53,"style":53},"\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",[55,82236,82237,82245,82253,82257,82262,82267,82272,82280],{"__ignoreMap":53},[58,82238,82239,82241,82243],{"class":60,"line":61},[58,82240,373],{"class":75},[58,82242,52438],{"class":71},[58,82244,403],{"class":75},[58,82246,82247,82249,82251],{"class":60,"line":68},[58,82248,52782],{"class":75},[58,82250,52451],{"class":71},[58,82252,403],{"class":75},[58,82254,82255],{"class":60,"line":79},[58,82256,82201],{"class":75},[58,82258,82259],{"class":60,"line":105},[58,82260,82261],{"class":75},"    const arr = [10, 0, 5]\n",[58,82263,82264],{"class":60,"line":627},[58,82265,82266],{"class":75},"    const flag = arr.some(item => item >= 10)\n",[58,82268,82269],{"class":60,"line":509},[58,82270,82271],{"class":75},"    console.log(flag)   \u002F\u002Ftrue\n",[58,82273,82274,82276,82278],{"class":60,"line":559},[58,82275,53055],{"class":75},[58,82277,52451],{"class":71},[58,82279,403],{"class":75},[58,82281,82282,82284,82286],{"class":60,"line":654},[58,82283,52423],{"class":75},[58,82285,52438],{"class":71},[58,82287,403],{"class":75},[23553,82289,82291],{"id":82290},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[175,82293,82294],{},[119,82295],{"alt":53,"src":82296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[48,82298,82300],{"className":51277,"code":82299,"language":51279,"meta":53,"style":53},"\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",[55,82301,82302,82312,82326,82330,82338,82352,82372,82384,82392,82399,82411,82423,82435,82447,82457,82467,82471,82479,82487,82491,82499,82511,82519,82541,82546,82551,82584,82592,82600,82604],{"__ignoreMap":53},[58,82303,82304,82306,82308,82310],{"class":60,"line":61},[58,82305,51941],{"class":75},[58,82307,51944],{"class":71},[58,82309,51947],{"class":379},[58,82311,403],{"class":75},[58,82313,82314,82316,82318,82320,82322,82324],{"class":60,"line":68},[58,82315,373],{"class":75},[58,82317,51279],{"class":71},[58,82319,51958],{"class":379},[58,82321,383],{"class":75},[58,82323,51963],{"class":386},[58,82325,403],{"class":75},[58,82327,82328],{"class":60,"line":79},[58,82329,3046],{"emptyLinePlaceholder":720},[58,82331,82332,82334,82336],{"class":60,"line":105},[58,82333,373],{"class":75},[58,82335,51976],{"class":71},[58,82337,403],{"class":75},[58,82339,82340,82342,82344,82346,82348,82350],{"class":60,"line":627},[58,82341,52782],{"class":75},[58,82343,51986],{"class":71},[58,82345,51989],{"class":379},[58,82347,383],{"class":75},[58,82349,51994],{"class":386},[58,82351,403],{"class":75},[58,82353,82354,82356,82358,82360,82362,82364,82366,82368,82370],{"class":60,"line":509},[58,82355,52782],{"class":75},[58,82357,51986],{"class":71},[58,82359,15564],{"class":379},[58,82361,383],{"class":75},[58,82363,52033],{"class":386},[58,82365,52013],{"class":379},[58,82367,383],{"class":75},[58,82369,52040],{"class":386},[58,82371,403],{"class":75},[58,82373,82374,82376,82378,82380,82382],{"class":60,"line":559},[58,82375,52782],{"class":75},[58,82377,52049],{"class":71},[58,82379,52052],{"class":75},[58,82381,52049],{"class":71},[58,82383,403],{"class":75},[58,82385,82386,82388,82390],{"class":60,"line":654},[58,82387,52782],{"class":75},[58,82389,702],{"class":71},[58,82391,403],{"class":75},[58,82393,82394,82397],{"class":60,"line":671},[58,82395,82396],{"class":71},"    div",[58,82398,76],{"class":75},[58,82400,82401,82403,82405,82407,82409],{"class":60,"line":677},[58,82402,55406],{"class":82},[58,82404,86],{"class":75},[58,82406,2369],{"class":82},[58,82408,93],{"class":92},[58,82410,102],{"class":75},[58,82412,82413,82415,82417,82419,82421],{"class":60,"line":2260},[58,82414,55420],{"class":82},[58,82416,86],{"class":75},[58,82418,1187],{"class":82},[58,82420,93],{"class":92},[58,82422,102],{"class":75},[58,82424,82425,82427,82429,82431,82433],{"class":60,"line":694},[58,82426,57993],{"class":82},[58,82428,86],{"class":75},[58,82430,1187],{"class":82},[58,82432,93],{"class":92},[58,82434,102],{"class":75},[58,82436,82437,82439,82441,82443,82445],{"class":60,"line":2270},[58,82438,65765],{"class":82},[58,82440,86],{"class":75},[58,82442,1284],{"class":82},[58,82444,93],{"class":92},[58,82446,102],{"class":75},[58,82448,82449,82451,82453,82455],{"class":60,"line":2275},[58,82450,57920],{"class":82},[58,82452,86],{"class":75},[58,82454,52231],{"class":82},[58,82456,102],{"class":75},[58,82458,82459,82461,82463,82465],{"class":60,"line":2289},[58,82460,55518],{"class":82},[58,82462,86],{"class":75},[58,82464,52283],{"class":82},[58,82466,102],{"class":75},[58,82468,82469],{"class":60,"line":2294},[58,82470,2833],{"class":75},[58,82472,82473,82475,82477],{"class":60,"line":2300},[58,82474,53055],{"class":75},[58,82476,702],{"class":71},[58,82478,403],{"class":75},[58,82480,82481,82483,82485],{"class":60,"line":2321},[58,82482,52423],{"class":75},[58,82484,51976],{"class":71},[58,82486,403],{"class":75},[58,82488,82489],{"class":60,"line":2326},[58,82490,3046],{"emptyLinePlaceholder":720},[58,82492,82493,82495,82497],{"class":60,"line":2340},[58,82494,373],{"class":75},[58,82496,52438],{"class":71},[58,82498,403],{"class":75},[58,82500,82501,82503,82505,82507,82509],{"class":60,"line":2345},[58,82502,52782],{"class":75},[58,82504,72],{"class":71},[58,82506,55948],{"class":75},[58,82508,72],{"class":71},[58,82510,403],{"class":75},[58,82512,82513,82515,82517],{"class":60,"line":2374},[58,82514,52782],{"class":75},[58,82516,52451],{"class":71},[58,82518,403],{"class":75},[58,82520,82521,82523,82526,82528,82531,82534,82536,82539],{"class":60,"line":2379},[58,82522,11866],{"class":92},[58,82524,82525],{"class":82}," spec",[58,82527,14208],{"class":92},[58,82529,82530],{"class":75}," { size: ",[58,82532,82533],{"class":386},"'40cm*40cm'",[58,82535,56098],{"class":75},[58,82537,82538],{"class":386},"'黑色'",[58,82540,56238],{"class":75},[58,82542,82543],{"class":60,"line":2396},[58,82544,82545],{"class":64},"    \u002F\u002F const arr = Object.values(spec)\n",[58,82547,82548],{"class":60,"line":2401},[58,82549,82550],{"class":64},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[58,82552,82553,82555,82557,82559,82562,82564,82566,82569,82572,82575,82577,82579,82582],{"class":60,"line":2406},[58,82554,53045],{"class":75},[58,82556,55035],{"class":379},[58,82558,793],{"class":75},[58,82560,82561],{"class":386},"'div'",[58,82563,74880],{"class":75},[58,82565,383],{"class":92},[58,82567,82568],{"class":75}," Object.",[58,82570,82571],{"class":379},"values",[58,82573,82574],{"class":75},"(spec).",[58,82576,74854],{"class":379},[58,82578,793],{"class":75},[58,82580,82581],{"class":386},"'\u002F'",[58,82583,799],{"class":75},[58,82585,82586,82588,82590],{"class":60,"line":2411},[58,82587,53055],{"class":75},[58,82589,52451],{"class":71},[58,82591,403],{"class":75},[58,82593,82594,82596,82598],{"class":60,"line":2425},[58,82595,52423],{"class":75},[58,82597,52438],{"class":71},[58,82599,403],{"class":75},[58,82601,82602],{"class":60,"line":2430},[58,82603,3046],{"emptyLinePlaceholder":720},[58,82605,82606,82608,82610],{"class":60,"line":3223},[58,82607,52423],{"class":75},[58,82609,51279],{"class":71},[58,82611,403],{"class":75},[175,82613,82614],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23553,82616,82618],{"id":82617},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[175,82620,82621],{},"静态方法，将伪数组转换为真数组",[175,82623,82624],{},[119,82625],{"alt":53,"src":82626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[48,82628,82630],{"className":53705,"code":82629,"language":53707,"meta":53,"style":53},"\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",[55,82631,82632,82640,82648,82660,82672,82684,82692,82700,82705,82710,82715,82720,82728],{"__ignoreMap":53},[58,82633,82634,82636,82638],{"class":60,"line":61},[58,82635,373],{"class":75},[58,82637,52438],{"class":71},[58,82639,403],{"class":75},[58,82641,82642,82644,82646],{"class":60,"line":68},[58,82643,52782],{"class":75},[58,82645,124],{"class":71},[58,82647,403],{"class":75},[58,82649,82650,82652,82654,82656,82658],{"class":60,"line":79},[58,82651,51983],{"class":75},[58,82653,22],{"class":71},[58,82655,55948],{"class":75},[58,82657,22],{"class":71},[58,82659,403],{"class":75},[58,82661,82662,82664,82666,82668,82670],{"class":60,"line":105},[58,82663,51983],{"class":75},[58,82665,22],{"class":71},[58,82667,55948],{"class":75},[58,82669,22],{"class":71},[58,82671,403],{"class":75},[58,82673,82674,82676,82678,82680,82682],{"class":60,"line":627},[58,82675,51983],{"class":75},[58,82677,22],{"class":71},[58,82679,55948],{"class":75},[58,82681,22],{"class":71},[58,82683,403],{"class":75},[58,82685,82686,82688,82690],{"class":60,"line":509},[58,82687,53055],{"class":75},[58,82689,124],{"class":71},[58,82691,403],{"class":75},[58,82693,82694,82696,82698],{"class":60,"line":559},[58,82695,52782],{"class":75},[58,82697,52451],{"class":71},[58,82699,403],{"class":75},[58,82701,82702],{"class":60,"line":654},[58,82703,82704],{"class":75},"    const lis = document.querySelectorAll('li')\n",[58,82706,82707],{"class":60,"line":671},[58,82708,82709],{"class":75},"    const liss = Array.from(lis)\n",[58,82711,82712],{"class":60,"line":677},[58,82713,82714],{"class":75},"    liss.pop()\n",[58,82716,82717],{"class":60,"line":2260},[58,82718,82719],{"class":75},"    console.log(liss)\n",[58,82721,82722,82724,82726],{"class":60,"line":694},[58,82723,53055],{"class":75},[58,82725,52451],{"class":71},[58,82727,403],{"class":75},[58,82729,82730,82732,82734],{"class":60,"line":2270},[58,82731,52423],{"class":75},[58,82733,52438],{"class":71},[58,82735,403],{"class":75},[175,82737,82738],{},[119,82739],{"alt":53,"src":82740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22641,82742,82744],{"id":82743},"_41053-string","4.10.5.3 String",[175,82746,82747],{},[119,82748],{"alt":53,"src":82749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23553,82751,82753],{"id":82752},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[48,82755,82757],{"className":53705,"code":82756,"language":53707,"meta":53,"style":53},"\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",[55,82758,82759,82767,82775,82780,82785,82790,82794,82799,82804,82809,82817],{"__ignoreMap":53},[58,82760,82761,82763,82765],{"class":60,"line":61},[58,82762,373],{"class":75},[58,82764,52438],{"class":71},[58,82766,403],{"class":75},[58,82768,82769,82771,82773],{"class":60,"line":68},[58,82770,52782],{"class":75},[58,82772,52451],{"class":71},[58,82774,403],{"class":75},[58,82776,82777],{"class":60,"line":79},[58,82778,82779],{"class":75},"    \u002F\u002F 把字符串转化为数组\n",[58,82781,82782],{"class":60,"line":105},[58,82783,82784],{"class":75},"    const str = 'pink,red'\n",[58,82786,82787],{"class":60,"line":627},[58,82788,82789],{"class":75},"    const arr = str.split(',')\n",[58,82791,82792],{"class":60,"line":509},[58,82793,81268],{"class":75},[58,82795,82796],{"class":60,"line":559},[58,82797,82798],{"class":75},"    const str1 = '2025-8-25'\n",[58,82800,82801],{"class":60,"line":654},[58,82802,82803],{"class":75},"    const arr1 = str1.split('-')\n",[58,82805,82806],{"class":60,"line":671},[58,82807,82808],{"class":75},"    console.log(arr1)\n",[58,82810,82811,82813,82815],{"class":60,"line":677},[58,82812,53055],{"class":75},[58,82814,52451],{"class":71},[58,82816,403],{"class":75},[58,82818,82819,82821,82823],{"class":60,"line":2260},[58,82820,52423],{"class":75},[58,82822,52438],{"class":71},[58,82824,403],{"class":75},[23553,82826,82828],{"id":82827},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[175,82830,5827],{},[175,82832,82833],{},"substring(indexStart)",[175,82835,82836],{},"substring(indexStart, indexEnd)",[124,82838,82839,82850,82862,82872],{},[22,82840,82841,82842,82845,82846,82849],{},"如果省略了 ",[55,82843,82844],{},"indexEnd","，则 ",[55,82847,82848],{},"substring()"," 提取字符直到字符串的末尾",[22,82851,82852,82853,82856,82857,82845,82859,82861],{},"如果 ",[55,82854,82855],{},"indexStart"," 等于 ",[55,82858,82844],{},[55,82860,82848],{}," 返回一个空字符串",[22,82863,82852,82864,82866,82867,82845,82869,82871],{},[55,82865,82855],{}," 大于 ",[55,82868,82844],{},[55,82870,82848],{}," 的效果就像交换了这两个参数一样",[22,82873,82874],{},"结束的索引号不包含想要截取的部分",[48,82876,82878],{"className":82119,"code":82877,"language":82121,"meta":53,"style":53},"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",[55,82879,82880,82892,82896,82930,82960,82964,82995,82999,83026,83056,83086,83090,83121],{"__ignoreMap":53},[58,82881,82882,82885,82887,82890],{"class":60,"line":61},[58,82883,82884],{"class":75},"const anyString ",[58,82886,383],{"class":92},[58,82888,82889],{"class":386}," \"Mozilla\"",[58,82891,102],{"class":75},[58,82893,82894],{"class":60,"line":68},[58,82895,3046],{"emptyLinePlaceholder":720},[58,82897,82898,82901,82903,82905,82907,82910,82912,82915,82917,82919,82921,82923,82925,82927],{"class":60,"line":79},[58,82899,82900],{"class":82},"console",[58,82902,1344],{"class":75},[58,82904,58881],{"class":82},[58,82906,793],{"class":75},[58,82908,82909],{"class":82},"anyString",[58,82911,1344],{"class":75},[58,82913,82914],{"class":82},"substring",[58,82916,793],{"class":75},[58,82918,979],{"class":82},[58,82920,469],{"class":75},[58,82922,89],{"class":82},[58,82924,75884],{"class":75},[58,82926,33973],{"class":92},[58,82928,82929],{"class":386}," 'M'\n",[58,82931,82932,82934,82936,82938,82940,82942,82944,82946,82948,82950,82952,82954,82956,82958],{"class":60,"line":105},[58,82933,82900],{"class":82},[58,82935,1344],{"class":75},[58,82937,58881],{"class":82},[58,82939,793],{"class":75},[58,82941,82909],{"class":82},[58,82943,1344],{"class":75},[58,82945,82914],{"class":82},[58,82947,793],{"class":75},[58,82949,89],{"class":82},[58,82951,469],{"class":75},[58,82953,979],{"class":82},[58,82955,75884],{"class":75},[58,82957,33973],{"class":92},[58,82959,82929],{"class":386},[58,82961,82962],{"class":60,"line":627},[58,82963,3046],{"emptyLinePlaceholder":720},[58,82965,82966,82968,82970,82972,82974,82976,82978,82980,82982,82984,82986,82988,82990,82992],{"class":60,"line":509},[58,82967,82900],{"class":82},[58,82969,1344],{"class":75},[58,82971,58881],{"class":82},[58,82973,793],{"class":75},[58,82975,82909],{"class":82},[58,82977,1344],{"class":75},[58,82979,82914],{"class":82},[58,82981,793],{"class":75},[58,82983,979],{"class":82},[58,82985,469],{"class":75},[58,82987,1130],{"class":82},[58,82989,75884],{"class":75},[58,82991,33973],{"class":92},[58,82993,82994],{"class":386}," 'Mozill'\n",[58,82996,82997],{"class":60,"line":559},[58,82998,3046],{"emptyLinePlaceholder":720},[58,83000,83001,83003,83005,83007,83009,83011,83013,83015,83017,83019,83021,83023],{"class":60,"line":654},[58,83002,82900],{"class":82},[58,83004,1344],{"class":75},[58,83006,58881],{"class":82},[58,83008,793],{"class":75},[58,83010,82909],{"class":82},[58,83012,1344],{"class":75},[58,83014,82914],{"class":82},[58,83016,793],{"class":75},[58,83018,1079],{"class":82},[58,83020,75884],{"class":75},[58,83022,33973],{"class":92},[58,83024,83025],{"class":386}," 'lla'\n",[58,83027,83028,83030,83032,83034,83036,83038,83040,83042,83044,83046,83048,83050,83052,83054],{"class":60,"line":671},[58,83029,82900],{"class":82},[58,83031,1344],{"class":75},[58,83033,58881],{"class":82},[58,83035,793],{"class":75},[58,83037,82909],{"class":82},[58,83039,1344],{"class":75},[58,83041,82914],{"class":82},[58,83043,793],{"class":75},[58,83045,1079],{"class":82},[58,83047,469],{"class":75},[58,83049,1155],{"class":82},[58,83051,75940],{"class":75},[58,83053,33973],{"class":92},[58,83055,83025],{"class":386},[58,83057,83058,83060,83062,83064,83066,83068,83070,83072,83074,83076,83078,83080,83082,83084],{"class":60,"line":677},[58,83059,82900],{"class":82},[58,83061,1344],{"class":75},[58,83063,58881],{"class":82},[58,83065,793],{"class":75},[58,83067,82909],{"class":82},[58,83069,1344],{"class":75},[58,83071,82914],{"class":82},[58,83073,793],{"class":75},[58,83075,1155],{"class":82},[58,83077,469],{"class":75},[58,83079,1079],{"class":82},[58,83081,75884],{"class":75},[58,83083,33973],{"class":92},[58,83085,83025],{"class":386},[58,83087,83088],{"class":60,"line":2260},[58,83089,3046],{"emptyLinePlaceholder":720},[58,83091,83092,83094,83096,83098,83100,83102,83104,83106,83108,83110,83112,83114,83116,83118],{"class":60,"line":694},[58,83093,82900],{"class":82},[58,83095,1344],{"class":75},[58,83097,58881],{"class":82},[58,83099,793],{"class":75},[58,83101,82909],{"class":82},[58,83103,1344],{"class":75},[58,83105,82914],{"class":82},[58,83107,793],{"class":75},[58,83109,979],{"class":82},[58,83111,469],{"class":75},[58,83113,1155],{"class":82},[58,83115,75884],{"class":75},[58,83117,33973],{"class":92},[58,83119,83120],{"class":386}," 'Mozilla'\n",[58,83122,83123,83125,83127,83129,83131,83133,83135,83137,83139,83141,83143,83145,83147,83149],{"class":60,"line":2270},[58,83124,82900],{"class":82},[58,83126,1344],{"class":75},[58,83128,58881],{"class":82},[58,83130,793],{"class":75},[58,83132,82909],{"class":82},[58,83134,1344],{"class":75},[58,83136,82914],{"class":82},[58,83138,793],{"class":75},[58,83140,979],{"class":82},[58,83142,469],{"class":75},[58,83144,1232],{"class":82},[58,83146,75884],{"class":75},[58,83148,33973],{"class":92},[58,83150,83120],{"class":386},[23553,83152,83154],{"id":83153},"_410533-startswith","4.10.5.3.3 startsWith",[175,83156,83157,83160,83161,83166,83167,83169,83170],{},[55,83158,83159],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[25,83162,83163],{},[55,83164,83165],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[55,83168,2012],{}," 或 ",[55,83171,66652],{},[48,83173,83175],{"className":78126,"code":83174,"language":78128,"meta":53,"style":53},"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",[55,83176,83177,83189,83208,83213,83233],{"__ignoreMap":53},[58,83178,83179,83181,83184,83186],{"class":60,"line":61},[58,83180,7438],{"class":92},[58,83182,83183],{"class":75}," str1 ",[58,83185,383],{"class":92},[58,83187,83188],{"class":386}," \"Saturday night plans\"\n",[58,83190,83191,83193,83195,83198,83201,83203,83206],{"class":60,"line":68},[58,83192,78163],{"class":75},[58,83194,58881],{"class":379},[58,83196,83197],{"class":75},"(str1.",[58,83199,83200],{"class":379},"startsWith",[58,83202,793],{"class":75},[58,83204,83205],{"class":386},"\"Sat\"",[58,83207,31141],{"class":75},[58,83209,83210],{"class":60,"line":79},[58,83211,83212],{"class":64},"\u002F\u002F Expected output: true\n",[58,83214,83215,83217,83219,83221,83223,83225,83227,83229,83231],{"class":60,"line":105},[58,83216,78163],{"class":75},[58,83218,58881],{"class":379},[58,83220,83197],{"class":75},[58,83222,83200],{"class":379},[58,83224,793],{"class":75},[58,83226,83205],{"class":386},[58,83228,469],{"class":75},[58,83230,861],{"class":82},[58,83232,31141],{"class":75},[58,83234,83235],{"class":60,"line":627},[58,83236,83237],{"class":64},"\u002F\u002F Expected output: false\n",[48,83239,83241],{"className":51277,"code":83240,"language":51279,"meta":53,"style":53},"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",[55,83242,83243,83248,83253,83257,83262,83267],{"__ignoreMap":53},[58,83244,83245],{"class":60,"line":61},[58,83246,83247],{"class":75},"startsWith(searchString)\n",[58,83249,83250],{"class":60,"line":68},[58,83251,83252],{"class":75},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[58,83254,83255],{"class":60,"line":79},[58,83256,3046],{"emptyLinePlaceholder":720},[58,83258,83259],{"class":60,"line":105},[58,83260,83261],{"class":75},"const str3 = 'pink老师上课中'\n",[58,83263,83264],{"class":60,"line":627},[58,83265,83266],{"class":75},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[58,83268,83269],{"class":60,"line":509},[58,83270,83271],{"class":75},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23553,83273,83275],{"id":83274},"_410534-includes","4.10.5.3.4 includes",[175,83277,83278],{},"includes(searchString) includes(searchString, position)",[19,83280,83281],{},[22,83282,83283],{},"searchString:",[175,83285,83286,83287,83289,83290,83295,83296,83301,83302,22143,83305,83308,83309,83312],{},"一个要在 ",[55,83288,1952],{}," 中查找的字符串。",[376,83291,83294],{"href":83292,"rel":83293},"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",[24508],"不能是正则表达式","。所有非正则表达式的值都会被",[376,83297,83300],{"href":83298,"rel":83299},"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",[24508],"强制转换为字符串","，因此如果该参数被省略或传入 ",[55,83303,83304],{},"undefined",[55,83306,83307],{},"includes()"," 方法会在字符串中搜索 ",[55,83310,83311],{},"\"undefined\"","，这通常不是你想要的",[19,83314,83315],{"start":68},[22,83316,83317,1644],{},[55,83318,83319],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[175,83321,83322,83323,83326,83327],{},"在字符串中开始搜索 ",[55,83324,83325],{},"searchString"," 的位置。默认值为 ",[55,83328,979],{},[19,83330,83331],{"start":79},[22,83332,83333],{},"返回值：",[175,83335,83336,83337,83339,83340,83344,83345],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[55,83338,83325],{}," 为空字符串的情况），则返回 ",[25,83341,83342],{},[55,83343,2012],{}," ，否则返回 ",[25,83346,83347],{},[55,83348,66652],{},[19,83350,83351],{"start":105},[22,83352,83353],{},"异常：",[175,83355,82852,83356,14439,83358,83362],{},[55,83357,83325],{},[376,83359,83361],{"href":83292,"rel":83360},[24508],"是一个正则表达式","，则会抛出",[175,83364,83365],{},"只要是有就是true，不需要非得以谁开头结尾",[48,83367,83369],{"className":78126,"code":83368,"language":78128,"meta":53,"style":53},"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",[55,83370,83371,83382,83405,83424,83444,83466,83485],{"__ignoreMap":53},[58,83372,83373,83375,83377,83379],{"class":60,"line":61},[58,83374,7438],{"class":92},[58,83376,80406],{"class":75},[58,83378,383],{"class":92},[58,83380,83381],{"class":386}," \"To be, or not to be, that is the question.\"\n",[58,83383,83384,83386,83388,83391,83394,83396,83399,83402],{"class":60,"line":68},[58,83385,78163],{"class":75},[58,83387,58881],{"class":379},[58,83389,83390],{"class":75},"(str.",[58,83392,83393],{"class":379},"includes",[58,83395,793],{"class":75},[58,83397,83398],{"class":386},"\"To be\"",[58,83400,83401],{"class":75},"))",[58,83403,83404],{"class":64},"  \u002F\u002F true\n",[58,83406,83407,83409,83411,83413,83415,83417,83420,83422],{"class":60,"line":79},[58,83408,78163],{"class":75},[58,83410,58881],{"class":379},[58,83412,83390],{"class":75},[58,83414,83393],{"class":379},[58,83416,793],{"class":75},[58,83418,83419],{"class":386},"\"question\"",[58,83421,83401],{"class":75},[58,83423,83404],{"class":64},[58,83425,83426,83428,83430,83432,83434,83436,83439,83441],{"class":60,"line":105},[58,83427,78163],{"class":75},[58,83429,58881],{"class":379},[58,83431,83390],{"class":75},[58,83433,83393],{"class":379},[58,83435,793],{"class":75},[58,83437,83438],{"class":386},"\"nonexistent\"",[58,83440,83401],{"class":75},[58,83442,83443],{"class":64},"  \u002F\u002F false\n",[58,83445,83446,83448,83450,83452,83454,83456,83458,83460,83462,83464],{"class":60,"line":627},[58,83447,78163],{"class":75},[58,83449,58881],{"class":379},[58,83451,83390],{"class":75},[58,83453,83393],{"class":379},[58,83455,793],{"class":75},[58,83457,83398],{"class":386},[58,83459,469],{"class":75},[58,83461,89],{"class":82},[58,83463,83401],{"class":75},[58,83465,83443],{"class":64},[58,83467,83468,83470,83472,83474,83476,83478,83481,83483],{"class":60,"line":509},[58,83469,78163],{"class":75},[58,83471,58881],{"class":379},[58,83473,83390],{"class":75},[58,83475,83393],{"class":379},[58,83477,793],{"class":75},[58,83479,83480],{"class":386},"\"TO BE\"",[58,83482,83401],{"class":75},[58,83484,83443],{"class":64},[58,83486,83487,83489,83491,83493,83495,83497,83499,83501],{"class":60,"line":559},[58,83488,78163],{"class":75},[58,83490,58881],{"class":379},[58,83492,83390],{"class":75},[58,83494,83393],{"class":379},[58,83496,793],{"class":75},[58,83498,8298],{"class":386},[58,83500,83401],{"class":75},[58,83502,83404],{"class":64},[23553,83504,83506],{"id":83505},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[48,83508,83510],{"className":53705,"code":83509,"language":53707,"meta":53,"style":53},"\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",[55,83511,83512,83520,83528,83533,83538,83543,83548,83553,83561],{"__ignoreMap":53},[58,83513,83514,83516,83518],{"class":60,"line":61},[58,83515,373],{"class":75},[58,83517,52438],{"class":71},[58,83519,403],{"class":75},[58,83521,83522,83524,83526],{"class":60,"line":68},[58,83523,52782],{"class":75},[58,83525,52451],{"class":71},[58,83527,403],{"class":75},[58,83529,83530],{"class":60,"line":79},[58,83531,83532],{"class":75},"    const num = 10\n",[58,83534,83535],{"class":60,"line":105},[58,83536,83537],{"class":75},"    \u002F\u002F 强制转换\n",[58,83539,83540],{"class":60,"line":627},[58,83541,83542],{"class":75},"    console.log(String(num))\n",[58,83544,83545],{"class":60,"line":509},[58,83546,83547],{"class":75},"    \u002F\u002F toString()方法转换\n",[58,83549,83550],{"class":60,"line":559},[58,83551,83552],{"class":75},"    console.log(num.toString())\n",[58,83554,83555,83557,83559],{"class":60,"line":654},[58,83556,53055],{"class":75},[58,83558,52451],{"class":71},[58,83560,403],{"class":75},[58,83562,83563,83565,83567],{"class":60,"line":671},[58,83564,52423],{"class":75},[58,83566,52438],{"class":71},[58,83568,403],{"class":75},[23553,83570,83572],{"id":83571},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[175,83574,83575],{},[119,83576],{"alt":53,"src":83577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[48,83579,83581],{"className":51277,"code":83580,"language":51279,"meta":53,"style":53},"\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",[55,83582,83583,83593,83607,83611,83619,83633,83653,83665,83673,83677,83685,83697,83705,83717,83722,83727,83732,83779,83795,83803,83811,83815],{"__ignoreMap":53},[58,83584,83585,83587,83589,83591],{"class":60,"line":61},[58,83586,51941],{"class":75},[58,83588,51944],{"class":71},[58,83590,51947],{"class":379},[58,83592,403],{"class":75},[58,83594,83595,83597,83599,83601,83603,83605],{"class":60,"line":68},[58,83596,373],{"class":75},[58,83598,51279],{"class":71},[58,83600,51958],{"class":379},[58,83602,383],{"class":75},[58,83604,51963],{"class":386},[58,83606,403],{"class":75},[58,83608,83609],{"class":60,"line":79},[58,83610,3046],{"emptyLinePlaceholder":720},[58,83612,83613,83615,83617],{"class":60,"line":105},[58,83614,373],{"class":75},[58,83616,51976],{"class":71},[58,83618,403],{"class":75},[58,83620,83621,83623,83625,83627,83629,83631],{"class":60,"line":627},[58,83622,52782],{"class":75},[58,83624,51986],{"class":71},[58,83626,51989],{"class":379},[58,83628,383],{"class":75},[58,83630,51994],{"class":386},[58,83632,403],{"class":75},[58,83634,83635,83637,83639,83641,83643,83645,83647,83649,83651],{"class":60,"line":509},[58,83636,52782],{"class":75},[58,83638,51986],{"class":71},[58,83640,15564],{"class":379},[58,83642,383],{"class":75},[58,83644,52033],{"class":386},[58,83646,52013],{"class":379},[58,83648,383],{"class":75},[58,83650,52040],{"class":386},[58,83652,403],{"class":75},[58,83654,83655,83657,83659,83661,83663],{"class":60,"line":559},[58,83656,52782],{"class":75},[58,83658,52049],{"class":71},[58,83660,52052],{"class":75},[58,83662,52049],{"class":71},[58,83664,403],{"class":75},[58,83666,83667,83669,83671],{"class":60,"line":654},[58,83668,52423],{"class":75},[58,83670,51976],{"class":71},[58,83672,403],{"class":75},[58,83674,83675],{"class":60,"line":671},[58,83676,3046],{"emptyLinePlaceholder":720},[58,83678,83679,83681,83683],{"class":60,"line":677},[58,83680,373],{"class":75},[58,83682,52438],{"class":71},[58,83684,403],{"class":75},[58,83686,83687,83689,83691,83693,83695],{"class":60,"line":2260},[58,83688,52782],{"class":75},[58,83690,72],{"class":71},[58,83692,55948],{"class":75},[58,83694,72],{"class":71},[58,83696,403],{"class":75},[58,83698,83699,83701,83703],{"class":60,"line":694},[58,83700,52782],{"class":75},[58,83702,52451],{"class":71},[58,83704,403],{"class":75},[58,83706,83707,83709,83712,83714],{"class":60,"line":2270},[58,83708,11866],{"class":92},[58,83710,83711],{"class":82}," gift",[58,83713,14208],{"class":92},[58,83715,83716],{"class":386}," '50g的茶叶，清洗球'\n",[58,83718,83719],{"class":60,"line":2275},[58,83720,83721],{"class":64},"    \u002F\u002F 1.把字符串拆分为数组\n",[58,83723,83724],{"class":60,"line":2289},[58,83725,83726],{"class":64},"    \u002F\u002F console.log(gift.split(','))\n",[58,83728,83729],{"class":60,"line":2294},[58,83730,83731],{"class":64},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[58,83733,83734,83736,83738,83740,83743,83746,83748,83751,83753,83755,83757,83759,83761,83764,83766,83769,83771,83773,83775,83777],{"class":60,"line":2300},[58,83735,11866],{"class":92},[58,83737,74550],{"class":82},[58,83739,14208],{"class":92},[58,83741,83742],{"class":75}," gift.",[58,83744,83745],{"class":379},"split",[58,83747,793],{"class":75},[58,83749,83750],{"class":386},"'，'",[58,83752,31470],{"class":75},[58,83754,74675],{"class":379},[58,83756,793],{"class":75},[58,83758,80426],{"class":5862},[58,83760,80429],{"class":92},[58,83762,83763],{"class":386}," `\u003Cspan>【赠品】${",[58,83765,80426],{"class":75},[58,83767,83768],{"class":386},"}\u003C\u002Fspan>\u003Cbr>`",[58,83770,31470],{"class":75},[58,83772,74854],{"class":379},[58,83774,793],{"class":75},[58,83776,74859],{"class":386},[58,83778,799],{"class":75},[58,83780,83781,83783,83785,83787,83789,83791,83793],{"class":60,"line":2321},[58,83782,53045],{"class":75},[58,83784,55035],{"class":379},[58,83786,793],{"class":75},[58,83788,82561],{"class":386},[58,83790,74880],{"class":75},[58,83792,383],{"class":92},[58,83794,74616],{"class":75},[58,83796,83797,83799,83801],{"class":60,"line":2326},[58,83798,53055],{"class":75},[58,83800,52451],{"class":71},[58,83802,403],{"class":75},[58,83804,83805,83807,83809],{"class":60,"line":2340},[58,83806,52423],{"class":75},[58,83808,52438],{"class":71},[58,83810,403],{"class":75},[58,83812,83813],{"class":60,"line":2345},[58,83814,3046],{"emptyLinePlaceholder":720},[58,83816,83817,83819,83821],{"class":60,"line":2374},[58,83818,52423],{"class":75},[58,83820,51279],{"class":71},[58,83822,403],{"class":75},[22641,83824,83826],{"id":83825},"_41054-number","4.10.5.4 Number",[175,83828,83829],{},[119,83830],{"alt":53,"src":83831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[175,83833,83834],{},"整数也可以进行toFixed来保留小数",[175,83836,83837],{},"比如：",[175,83839,83840],{},"const price=10",[175,83842,83843],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22641,83845,83847],{"id":83846},"_41055-购物车展示","4.10.5.5 购物车展示",[175,83849,83850],{},[119,83851],{"alt":53,"src":83852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[48,83854,83856],{"className":51277,"code":83855,"language":51279,"meta":53,"style":53},"\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",[55,83857,83858,83868,83882,83886,83894,83908,83928,83940,83948,83954,83964,83974,83984,83988,83992,83998,84010,84024,84028,84032,84038,84050,84066,84076,84092,84096,84100,84106,84116,84126,84130,84134,84142,84154,84166,84178,84182,84186,84194,84206,84210,84214,84225,84235,84247,84259,84269,84273,84277,84285,84294,84306,84316,84326,84330,84334,84342,84351,84358,84368,84380,84384,84388,84397,84407,84418,84430,84442,84446,84450,84459,84469,84480,84484,84488,84494,84506,84518,84528,84538,84556,84568,84572,84576,84585,84597,84607,84617,84629,84633,84641,84649,84653,84661,84675,84683,84697,84725,84733,84741,84751,84755,84763,84771,84780,84788,84797,84807,84811,84815,84823,84831,84840,84848,84856,84869,84873,84877,84885,84893,84902,84910,84918,84933,84937,84941,84949,84957,84966,84974,84982,84996,85004,85008,85012,85017,85043,85048,85085,85090,85113,85118,85172,85177,85213,85217,85223,85228,85237,85251,85260,85279,85288,85298,85303,85308,85321,85326,85380,85406,85414,85422,85426],{"__ignoreMap":53},[58,83859,83860,83862,83864,83866],{"class":60,"line":61},[58,83861,51941],{"class":75},[58,83863,51944],{"class":71},[58,83865,51947],{"class":379},[58,83867,403],{"class":75},[58,83869,83870,83872,83874,83876,83878,83880],{"class":60,"line":68},[58,83871,373],{"class":75},[58,83873,51279],{"class":71},[58,83875,51958],{"class":379},[58,83877,383],{"class":75},[58,83879,51963],{"class":386},[58,83881,403],{"class":75},[58,83883,83884],{"class":60,"line":79},[58,83885,3046],{"emptyLinePlaceholder":720},[58,83887,83888,83890,83892],{"class":60,"line":105},[58,83889,373],{"class":75},[58,83891,51976],{"class":71},[58,83893,403],{"class":75},[58,83895,83896,83898,83900,83902,83904,83906],{"class":60,"line":627},[58,83897,52782],{"class":75},[58,83899,51986],{"class":71},[58,83901,51989],{"class":379},[58,83903,383],{"class":75},[58,83905,51994],{"class":386},[58,83907,403],{"class":75},[58,83909,83910,83912,83914,83916,83918,83920,83922,83924,83926],{"class":60,"line":509},[58,83911,52782],{"class":75},[58,83913,51986],{"class":71},[58,83915,15564],{"class":379},[58,83917,383],{"class":75},[58,83919,52033],{"class":386},[58,83921,52013],{"class":379},[58,83923,383],{"class":75},[58,83925,52040],{"class":386},[58,83927,403],{"class":75},[58,83929,83930,83932,83934,83936,83938],{"class":60,"line":559},[58,83931,52782],{"class":75},[58,83933,52049],{"class":71},[58,83935,52052],{"class":75},[58,83937,52049],{"class":71},[58,83939,403],{"class":75},[58,83941,83942,83944,83946],{"class":60,"line":654},[58,83943,52782],{"class":75},[58,83945,702],{"class":71},[58,83947,403],{"class":75},[58,83949,83950,83952],{"class":60,"line":671},[58,83951,7049],{"class":71},[58,83953,76],{"class":75},[58,83955,83956,83958,83960,83962],{"class":60,"line":677},[58,83957,55331],{"class":82},[58,83959,86],{"class":75},[58,83961,979],{"class":82},[58,83963,102],{"class":75},[58,83965,83966,83968,83970,83972],{"class":60,"line":2260},[58,83967,55342],{"class":82},[58,83969,86],{"class":75},[58,83971,979],{"class":82},[58,83973,102],{"class":75},[58,83975,83976,83978,83980,83982],{"class":60,"line":694},[58,83977,73227],{"class":82},[58,83979,86],{"class":75},[58,83981,61139],{"class":82},[58,83983,102],{"class":75},[58,83985,83986],{"class":60,"line":2270},[58,83987,2833],{"class":75},[58,83989,83990],{"class":60,"line":2275},[58,83991,3046],{"emptyLinePlaceholder":720},[58,83993,83994,83996],{"class":60,"line":2289},[58,83995,62755],{"class":379},[58,83997,76],{"class":75},[58,83999,84000,84002,84004,84006,84008],{"class":60,"line":2294},[58,84001,55406],{"class":82},[58,84003,86],{"class":75},[58,84005,79205],{"class":82},[58,84007,93],{"class":92},[58,84009,102],{"class":75},[58,84011,84012,84014,84016,84018,84020,84022],{"class":60,"line":2300},[58,84013,55342],{"class":82},[58,84015,86],{"class":75},[58,84017,1097],{"class":82},[58,84019,93],{"class":92},[58,84021,52195],{"class":82},[58,84023,102],{"class":75},[58,84025,84026],{"class":60,"line":2321},[58,84027,2833],{"class":75},[58,84029,84030],{"class":60,"line":2326},[58,84031,3046],{"emptyLinePlaceholder":720},[58,84033,84034,84036],{"class":60,"line":2340},[58,84035,79256],{"class":379},[58,84037,76],{"class":75},[58,84039,84040,84042,84044,84046,84048],{"class":60,"line":2345},[58,84041,55331],{"class":82},[58,84043,86],{"class":75},[58,84045,1361],{"class":82},[58,84047,93],{"class":92},[58,84049,102],{"class":75},[58,84051,84052,84054,84056,84058,84060,84062,84064],{"class":60,"line":2374},[58,84053,62492],{"class":82},[58,84055,86],{"class":75},[58,84057,28765],{"class":82},[58,84059,79311],{"class":82},[58,84061,79314],{"class":82},[58,84063,1481],{"class":92},[58,84065,102],{"class":75},[58,84067,84068,84070,84072,84074],{"class":60,"line":2379},[58,84069,55643],{"class":82},[58,84071,86],{"class":75},[58,84073,52118],{"class":82},[58,84075,102],{"class":75},[58,84077,84078,84080,84082,84084,84086,84088,84090],{"class":60,"line":2396},[58,84079,62609],{"class":82},[58,84081,86],{"class":75},[58,84083,89],{"class":82},[58,84085,93],{"class":92},[58,84087,96],{"class":82},[58,84089,62876],{"class":82},[58,84091,102],{"class":75},[58,84093,84094],{"class":60,"line":2401},[58,84095,2833],{"class":75},[58,84097,84098],{"class":60,"line":2406},[58,84099,3046],{"emptyLinePlaceholder":720},[58,84101,84102,84104],{"class":60,"line":2411},[58,84103,79374],{"class":379},[58,84105,76],{"class":75},[58,84107,84108,84110,84112,84114],{"class":60,"line":2425},[58,84109,62657],{"class":82},[58,84111,86],{"class":75},[58,84113,62662],{"class":82},[58,84115,102],{"class":75},[58,84117,84118,84120,84122,84124],{"class":60,"line":2430},[58,84119,55518],{"class":82},[58,84121,86],{"class":75},[58,84123,62450],{"class":82},[58,84125,102],{"class":75},[58,84127,84128],{"class":60,"line":3223},[58,84129,2833],{"class":75},[58,84131,84132],{"class":60,"line":3237},[58,84133,3046],{"emptyLinePlaceholder":720},[58,84135,84136,84138,84140],{"class":60,"line":3245},[58,84137,79256],{"class":379},[58,84139,56249],{"class":71},[58,84141,76],{"class":75},[58,84143,84144,84146,84148,84150,84152],{"class":60,"line":3250},[58,84145,55406],{"class":82},[58,84147,86],{"class":75},[58,84149,1398],{"class":82},[58,84151,93],{"class":92},[58,84153,102],{"class":75},[58,84155,84156,84158,84160,84162,84164],{"class":60,"line":3256},[58,84157,55420],{"class":82},[58,84159,86],{"class":75},[58,84161,1398],{"class":82},[58,84163,93],{"class":92},[58,84165,102],{"class":75},[58,84167,84168,84170,84172,84174,84176],{"class":60,"line":3262},[58,84169,62382],{"class":82},[58,84171,86],{"class":75},[58,84173,1105],{"class":82},[58,84175,93],{"class":92},[58,84177,102],{"class":75},[58,84179,84180],{"class":60,"line":3267},[58,84181,2833],{"class":75},[58,84183,84184],{"class":60,"line":8594},[58,84185,3046],{"emptyLinePlaceholder":720},[58,84187,84188,84190,84192],{"class":60,"line":8618},[58,84189,79256],{"class":379},[58,84191,62936],{"class":379},[58,84193,76],{"class":75},[58,84195,84196,84198,84200,84202,84204],{"class":60,"line":8623},[58,84197,55406],{"class":82},[58,84199,86],{"class":75},[58,84201,2369],{"class":82},[58,84203,93],{"class":92},[58,84205,102],{"class":75},[58,84207,84208],{"class":60,"line":8629},[58,84209,2833],{"class":75},[58,84211,84212],{"class":60,"line":8656},[58,84213,3046],{"emptyLinePlaceholder":720},[58,84215,84216,84218,84220,84223],{"class":60,"line":8661},[58,84217,79256],{"class":379},[58,84219,62936],{"class":379},[58,84221,84222],{"class":379}," .tag",[58,84224,76],{"class":75},[58,84226,84227,84229,84231,84233],{"class":60,"line":8667},[58,84228,55643],{"class":82},[58,84230,86],{"class":75},[58,84232,500],{"class":82},[58,84234,102],{"class":75},[58,84236,84237,84239,84241,84243,84245],{"class":60,"line":8679},[58,84238,55331],{"class":82},[58,84240,86],{"class":75},[58,84242,867],{"class":82},[58,84244,93],{"class":92},[58,84246,102],{"class":75},[58,84248,84249,84251,84253,84255,84257],{"class":60,"line":8691},[58,84250,55556],{"class":82},[58,84252,86],{"class":75},[58,84254,1284],{"class":82},[58,84256,93],{"class":92},[58,84258,102],{"class":75},[58,84260,84261,84263,84265,84267],{"class":60,"line":8703},[58,84262,58050],{"class":82},[58,84264,86],{"class":75},[58,84266,62702],{"class":82},[58,84268,102],{"class":75},[58,84270,84271],{"class":60,"line":10361},[58,84272,2833],{"class":75},[58,84274,84275],{"class":60,"line":10386},[58,84276,3046],{"emptyLinePlaceholder":720},[58,84278,84279,84281,84283],{"class":60,"line":10409},[58,84280,79256],{"class":379},[58,84282,79548],{"class":379},[58,84284,32110],{"class":75},[58,84286,84287,84289,84292],{"class":60,"line":10433},[58,84288,79256],{"class":379},[58,84290,84291],{"class":379}," .sub-total",[58,84293,76],{"class":75},[58,84295,84296,84298,84300,84302,84304],{"class":60,"line":10438},[58,84297,55556],{"class":82},[58,84299,86],{"class":75},[58,84301,1436],{"class":82},[58,84303,93],{"class":92},[58,84305,102],{"class":75},[58,84307,84308,84310,84312,84314],{"class":60,"line":10443},[58,84309,58050],{"class":82},[58,84311,86],{"class":75},[58,84313,79571],{"class":82},[58,84315,102],{"class":75},[58,84317,84318,84320,84322,84324],{"class":60,"line":10448},[58,84319,62469],{"class":82},[58,84321,86],{"class":75},[58,84323,89],{"class":82},[58,84325,102],{"class":75},[58,84327,84328],{"class":60,"line":10457},[58,84329,2833],{"class":75},[58,84331,84332],{"class":60,"line":10462},[58,84333,3046],{"emptyLinePlaceholder":720},[58,84335,84336,84338,84340],{"class":60,"line":10468},[58,84337,79256],{"class":379},[58,84339,79588],{"class":379},[58,84341,32110],{"class":75},[58,84343,84344,84346,84349],{"class":60,"line":10489},[58,84345,79256],{"class":379},[58,84347,84348],{"class":379}," .sub-total::before",[58,84350,32110],{"class":75},[58,84352,84353,84356],{"class":60,"line":10495},[58,84354,84355],{"class":379},"    .amount::before",[58,84357,76],{"class":75},[58,84359,84360,84362,84364,84366],{"class":60,"line":10509},[58,84361,79595],{"class":82},[58,84363,86],{"class":75},[58,84365,79600],{"class":386},[58,84367,102],{"class":75},[58,84369,84370,84372,84374,84376,84378],{"class":60,"line":10515},[58,84371,55556],{"class":82},[58,84373,86],{"class":75},[58,84375,1284],{"class":82},[58,84377,93],{"class":92},[58,84379,102],{"class":75},[58,84381,84382],{"class":60,"line":10542},[58,84383,2833],{"class":75},[58,84385,84386],{"class":60,"line":10551},[58,84387,3046],{"emptyLinePlaceholder":720},[58,84389,84390,84392,84395],{"class":60,"line":10557},[58,84391,79256],{"class":379},[58,84393,84394],{"class":379}," .spec",[58,84396,76],{"class":75},[58,84398,84399,84401,84403,84405],{"class":60,"line":10565},[58,84400,62469],{"class":82},[58,84402,86],{"class":75},[58,84404,867],{"class":82},[58,84406,102],{"class":75},[58,84408,84409,84411,84413,84416],{"class":60,"line":10570},[58,84410,58050],{"class":82},[58,84412,86],{"class":75},[58,84414,84415],{"class":82},"#888",[58,84417,102],{"class":75},[58,84419,84420,84422,84424,84426,84428],{"class":60,"line":17247},[58,84421,55556],{"class":82},[58,84423,86],{"class":75},[58,84425,1335],{"class":82},[58,84427,93],{"class":92},[58,84429,102],{"class":75},[58,84431,84432,84434,84436,84438,84440],{"class":60,"line":17253},[58,84433,62632],{"class":82},[58,84435,86],{"class":75},[58,84437,1486],{"class":82},[58,84439,93],{"class":92},[58,84441,102],{"class":75},[58,84443,84444],{"class":60,"line":17276},[58,84445,2833],{"class":75},[58,84447,84448],{"class":60,"line":17282},[58,84449,3046],{"emptyLinePlaceholder":720},[58,84451,84452,84454,84457],{"class":60,"line":17305},[58,84453,79256],{"class":379},[58,84455,84456],{"class":379}," .count",[58,84458,76],{"class":75},[58,84460,84461,84463,84465,84467],{"class":60,"line":17319},[58,84462,62469],{"class":82},[58,84464,86],{"class":75},[58,84466,89],{"class":82},[58,84468,102],{"class":75},[58,84470,84471,84473,84475,84478],{"class":60,"line":17339},[58,84472,58050],{"class":82},[58,84474,86],{"class":75},[58,84476,84477],{"class":82},"#aaa",[58,84479,102],{"class":75},[58,84481,84482],{"class":60,"line":17345},[58,84483,2833],{"class":75},[58,84485,84486],{"class":60,"line":17356},[58,84487,3046],{"emptyLinePlaceholder":720},[58,84489,84490,84492],{"class":60,"line":17379},[58,84491,73106],{"class":379},[58,84493,76],{"class":75},[58,84495,84496,84498,84500,84502,84504],{"class":60,"line":17401},[58,84497,55406],{"class":82},[58,84499,86],{"class":75},[58,84501,79205],{"class":82},[58,84503,93],{"class":92},[58,84505,102],{"class":75},[58,84507,84508,84510,84512,84514,84516],{"class":60,"line":17406},[58,84509,55342],{"class":82},[58,84511,86],{"class":75},[58,84513,979],{"class":82},[58,84515,52195],{"class":82},[58,84517,102],{"class":75},[58,84519,84520,84522,84524,84526],{"class":60,"line":17412},[58,84521,55643],{"class":82},[58,84523,86],{"class":75},[58,84525,52118],{"class":82},[58,84527,102],{"class":75},[58,84529,84530,84532,84534,84536],{"class":60,"line":17426},[58,84531,55654],{"class":82},[58,84533,86],{"class":75},[58,84535,52219],{"class":82},[58,84537,102],{"class":75},[58,84539,84540,84543,84545,84547,84549,84551,84554],{"class":60,"line":17439},[58,84541,84542],{"class":82},"      border-top",[58,84544,86],{"class":75},[58,84546,89],{"class":82},[58,84548,93],{"class":92},[58,84550,96],{"class":82},[58,84552,84553],{"class":82}," #4e4e4e",[58,84555,102],{"class":75},[58,84557,84558,84560,84562,84564,84566],{"class":60,"line":17444},[58,84559,55331],{"class":82},[58,84561,86],{"class":75},[58,84563,1486],{"class":82},[58,84565,93],{"class":92},[58,84567,102],{"class":75},[58,84569,84570],{"class":60,"line":17458},[58,84571,2833],{"class":75},[58,84573,84574],{"class":60,"line":17463},[58,84575,3046],{"emptyLinePlaceholder":720},[58,84577,84578,84580,84583],{"class":60,"line":17469},[58,84579,73106],{"class":379},[58,84581,84582],{"class":379}," .amount",[58,84584,76],{"class":75},[58,84586,84587,84589,84591,84593,84595],{"class":60,"line":17474},[58,84588,55556],{"class":82},[58,84590,86],{"class":75},[58,84592,1436],{"class":82},[58,84594,93],{"class":92},[58,84596,102],{"class":75},[58,84598,84599,84601,84603,84605],{"class":60,"line":17488},[58,84600,58050],{"class":82},[58,84602,86],{"class":75},[58,84604,79571],{"class":82},[58,84606,102],{"class":75},[58,84608,84609,84611,84613,84615],{"class":60,"line":17493},[58,84610,62966],{"class":82},[58,84612,86],{"class":75},[58,84614,52130],{"class":82},[58,84616,102],{"class":75},[58,84618,84619,84621,84623,84625,84627],{"class":60,"line":17498},[58,84620,62382],{"class":82},[58,84622,86],{"class":75},[58,84624,1442],{"class":82},[58,84626,93],{"class":92},[58,84628,102],{"class":75},[58,84630,84631],{"class":60,"line":17512},[58,84632,2833],{"class":75},[58,84634,84635,84637,84639],{"class":60,"line":17524},[58,84636,53055],{"class":75},[58,84638,702],{"class":71},[58,84640,403],{"class":75},[58,84642,84643,84645,84647],{"class":60,"line":17529},[58,84644,52423],{"class":75},[58,84646,51976],{"class":71},[58,84648,403],{"class":75},[58,84650,84651],{"class":60,"line":17542},[58,84652,3046],{"emptyLinePlaceholder":720},[58,84654,84655,84657,84659],{"class":60,"line":17547},[58,84656,373],{"class":75},[58,84658,52438],{"class":71},[58,84660,403],{"class":75},[58,84662,84663,84665,84667,84669,84671,84673],{"class":60,"line":17552},[58,84664,52782],{"class":75},[58,84666,72],{"class":71},[58,84668,54124],{"class":379},[58,84670,383],{"class":75},[58,84672,63240],{"class":386},[58,84674,403],{"class":75},[58,84676,84677,84679,84681],{"class":60,"line":17557},[58,84678,53055],{"class":75},[58,84680,72],{"class":71},[58,84682,403],{"class":75},[58,84684,84685,84687,84689,84691,84693,84695],{"class":60,"line":17570},[58,84686,52782],{"class":75},[58,84688,72],{"class":71},[58,84690,54124],{"class":379},[58,84692,383],{"class":75},[58,84694,63212],{"class":386},[58,84696,403],{"class":75},[58,84698,84699,84701,84703,84706,84708,84710,84712,84715,84717,84719,84721,84723],{"class":60,"line":17575},[58,84700,51983],{"class":75},[58,84702,72],{"class":71},[58,84704,84705],{"class":75},">合计：\u003C",[58,84707,58],{"class":71},[58,84709,54124],{"class":379},[58,84711,383],{"class":75},[58,84713,84714],{"class":386},"\"amount\"",[58,84716,55948],{"class":75},[58,84718,58],{"class":71},[58,84720,55948],{"class":75},[58,84722,72],{"class":71},[58,84724,403],{"class":75},[58,84726,84727,84729,84731],{"class":60,"line":33277},[58,84728,53055],{"class":75},[58,84730,72],{"class":71},[58,84732,403],{"class":75},[58,84734,84735,84737,84739],{"class":60,"line":33283},[58,84736,52782],{"class":75},[58,84738,52451],{"class":71},[58,84740,403],{"class":75},[58,84742,84743,84745,84747,84749],{"class":60,"line":33289},[58,84744,11866],{"class":92},[58,84746,80008],{"class":82},[58,84748,14208],{"class":92},[58,84750,56081],{"class":75},[58,84752,84753],{"class":60,"line":33295},[58,84754,80017],{"class":75},[58,84756,84757,84759,84761],{"class":60,"line":33301},[58,84758,80022],{"class":75},[58,84760,80025],{"class":386},[58,84762,32110],{"class":75},[58,84764,84765,84767,84769],{"class":60,"line":33312},[58,84766,80032],{"class":75},[58,84768,80035],{"class":386},[58,84770,32110],{"class":75},[58,84772,84773,84775,84778],{"class":60,"line":33318},[58,84774,80042],{"class":75},[58,84776,84777],{"class":82},"289.9",[58,84779,32110],{"class":75},[58,84781,84782,84784,84786],{"class":60,"line":33338},[58,84783,80052],{"class":75},[58,84785,80055],{"class":386},[58,84787,32110],{"class":75},[58,84789,84790,84793,84795],{"class":60,"line":33344},[58,84791,84792],{"class":75},"        count: ",[58,84794,867],{"class":82},[58,84796,32110],{"class":75},[58,84798,84799,84802,84805],{"class":60,"line":33355},[58,84800,84801],{"class":75},"        spec: { color: ",[58,84803,84804],{"class":386},"'白色'",[58,84806,56238],{"class":75},[58,84808,84809],{"class":60,"line":33361},[58,84810,78523],{"class":75},[58,84812,84813],{"class":60,"line":33367},[58,84814,80017],{"class":75},[58,84816,84817,84819,84821],{"class":60,"line":33373},[58,84818,80022],{"class":75},[58,84820,80116],{"class":386},[58,84822,32110],{"class":75},[58,84824,84825,84827,84829],{"class":60,"line":33379},[58,84826,80032],{"class":75},[58,84828,80125],{"class":386},[58,84830,32110],{"class":75},[58,84832,84833,84835,84838],{"class":60,"line":33385},[58,84834,80042],{"class":75},[58,84836,84837],{"class":82},"109.8",[58,84839,32110],{"class":75},[58,84841,84842,84844,84846],{"class":60,"line":33391},[58,84843,80052],{"class":75},[58,84845,80143],{"class":386},[58,84847,32110],{"class":75},[58,84849,84850,84852,84854],{"class":60,"line":33397},[58,84851,84792],{"class":75},[58,84853,861],{"class":82},[58,84855,32110],{"class":75},[58,84857,84858,84861,84863,84865,84867],{"class":60,"line":33417},[58,84859,84860],{"class":75},"        spec: { size: ",[58,84862,82533],{"class":386},[58,84864,56098],{"class":75},[58,84866,82538],{"class":386},[58,84868,56238],{"class":75},[58,84870,84871],{"class":60,"line":33423},[58,84872,78523],{"class":75},[58,84874,84875],{"class":60,"line":33439},[58,84876,80017],{"class":75},[58,84878,84879,84881,84883],{"class":60,"line":33445},[58,84880,80022],{"class":75},[58,84882,80160],{"class":386},[58,84884,32110],{"class":75},[58,84886,84887,84889,84891],{"class":60,"line":33459},[58,84888,80032],{"class":75},[58,84890,80169],{"class":386},[58,84892,32110],{"class":75},[58,84894,84895,84897,84900],{"class":60,"line":33465},[58,84896,80042],{"class":75},[58,84898,84899],{"class":82},"488",[58,84901,32110],{"class":75},[58,84903,84904,84906,84908],{"class":60,"line":33480},[58,84905,80052],{"class":75},[58,84907,80187],{"class":386},[58,84909,32110],{"class":75},[58,84911,84912,84914,84916],{"class":60,"line":33486},[58,84913,84792],{"class":75},[58,84915,89],{"class":82},[58,84917,32110],{"class":75},[58,84919,84920,84922,84925,84928,84931],{"class":60,"line":33495},[58,84921,84801],{"class":75},[58,84923,84924],{"class":386},"'青色'",[58,84926,84927],{"class":75},", sum: ",[58,84929,84930],{"class":386},"'一大四小'",[58,84932,56238],{"class":75},[58,84934,84935],{"class":60,"line":33501},[58,84936,78523],{"class":75},[58,84938,84939],{"class":60,"line":33510},[58,84940,80017],{"class":75},[58,84942,84943,84945,84947],{"class":60,"line":33516},[58,84944,80022],{"class":75},[58,84946,80204],{"class":386},[58,84948,32110],{"class":75},[58,84950,84951,84953,84955],{"class":60,"line":33522},[58,84952,80032],{"class":75},[58,84954,80213],{"class":386},[58,84956,32110],{"class":75},[58,84958,84959,84961,84964],{"class":60,"line":33531},[58,84960,80042],{"class":75},[58,84962,84963],{"class":82},"139",[58,84965,32110],{"class":75},[58,84967,84968,84970,84972],{"class":60,"line":33537},[58,84969,80052],{"class":75},[58,84971,80231],{"class":386},[58,84973,32110],{"class":75},[58,84975,84976,84978,84980],{"class":60,"line":33548},[58,84977,84792],{"class":75},[58,84979,89],{"class":82},[58,84981,32110],{"class":75},[58,84983,84984,84986,84989,84991,84994],{"class":60,"line":33554},[58,84985,84860],{"class":75},[58,84987,84988],{"class":386},"'小号'",[58,84990,56098],{"class":75},[58,84992,84993],{"class":386},"'紫色'",[58,84995,56104],{"class":75},[58,84997,84998,85001],{"class":60,"line":33573},[58,84999,85000],{"class":75},"        gift: ",[58,85002,85003],{"class":386},"'50g茶叶,清洗球'\n",[58,85005,85006],{"class":60,"line":33579},[58,85007,53036],{"class":75},[58,85009,85010],{"class":60,"line":33590},[58,85011,53747],{"class":75},[58,85013,85014],{"class":60,"line":33596},[58,85015,85016],{"class":64},"    \u002F\u002F  1.根据数据渲染页面\n",[58,85018,85019,85021,85023,85025,85027,85029,85031,85033,85035,85037,85039,85041],{"class":60,"line":33616},[58,85020,53045],{"class":75},[58,85022,55035],{"class":379},[58,85024,793],{"class":75},[58,85026,80531],{"class":386},[58,85028,74880],{"class":75},[58,85030,383],{"class":92},[58,85032,80678],{"class":75},[58,85034,74675],{"class":379},[58,85036,793],{"class":75},[58,85038,80426],{"class":5862},[58,85040,80429],{"class":92},[58,85042,76],{"class":75},[58,85044,85045],{"class":60,"line":33632},[58,85046,85047],{"class":64},"      \u002F\u002F 对象解构\n",[58,85049,85050,85052,85054,85056,85058,85060,85062,85065,85067,85069,85071,85074,85076,85079,85081,85083],{"class":60,"line":33638},[58,85051,58862],{"class":92},[58,85053,592],{"class":75},[58,85055,80450],{"class":82},[58,85057,469],{"class":75},[58,85059,80440],{"class":82},[58,85061,469],{"class":75},[58,85063,85064],{"class":82},"count",[58,85066,469],{"class":75},[58,85068,80445],{"class":82},[58,85070,469],{"class":75},[58,85072,85073],{"class":82},"spec",[58,85075,469],{"class":75},[58,85077,85078],{"class":82},"gift",[58,85080,80453],{"class":75},[58,85082,383],{"class":92},[58,85084,80458],{"class":75},[58,85086,85087],{"class":60,"line":33652},[58,85088,85089],{"class":64},"      \u002F\u002F 规格文字模块处理\n",[58,85091,85092,85094,85097,85099,85101,85103,85105,85107,85109,85111],{"class":60,"line":33658},[58,85093,58862],{"class":92},[58,85095,85096],{"class":82}," text",[58,85098,14208],{"class":92},[58,85100,82568],{"class":75},[58,85102,82571],{"class":379},[58,85104,82574],{"class":75},[58,85106,74854],{"class":379},[58,85108,793],{"class":75},[58,85110,82581],{"class":386},[58,85112,799],{"class":75},[58,85114,85115],{"class":60,"line":33664},[58,85116,85117],{"class":64},"      \u002F\u002F 处理赠品模块\n",[58,85119,85120,85122,85124,85126,85129,85131,85133,85135,85137,85140,85142,85144,85146,85148,85150,85153,85155,85158,85160,85162,85164,85166,85168,85170],{"class":60,"line":33675},[58,85121,58862],{"class":92},[58,85123,74550],{"class":82},[58,85125,14208],{"class":92},[58,85127,85128],{"class":75}," gift ",[58,85130,1770],{"class":92},[58,85132,83742],{"class":75},[58,85134,83745],{"class":379},[58,85136,793],{"class":75},[58,85138,85139],{"class":386},"','",[58,85141,31470],{"class":75},[58,85143,74675],{"class":379},[58,85145,793],{"class":75},[58,85147,80426],{"class":5862},[58,85149,80429],{"class":92},[58,85151,85152],{"class":386}," `\u003Cspan class=\"tag\">【赠品】${",[58,85154,80426],{"class":75},[58,85156,85157],{"class":386},"}\u003C\u002Fspan>`",[58,85159,31470],{"class":75},[58,85161,74854],{"class":379},[58,85163,793],{"class":75},[58,85165,74859],{"class":386},[58,85167,14358],{"class":75},[58,85169,1644],{"class":92},[58,85171,70736],{"class":386},[58,85173,85174],{"class":60,"line":33681},[58,85175,85176],{"class":64},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[58,85178,85179,85181,85184,85186,85189,85191,85193,85195,85198,85200,85202,85204,85207,85209,85211],{"class":60,"line":33687},[58,85180,58862],{"class":92},[58,85182,85183],{"class":82}," subtotal",[58,85185,14208],{"class":92},[58,85187,85188],{"class":75}," ((price ",[58,85190,1241],{"class":92},[58,85192,6400],{"class":82},[58,85194,7164],{"class":92},[58,85196,85197],{"class":75}," count) ",[58,85199,1370],{"class":92},[58,85201,6400],{"class":82},[58,85203,31470],{"class":75},[58,85205,85206],{"class":379},"toFixed",[58,85208,793],{"class":75},[58,85210,867],{"class":82},[58,85212,799],{"class":75},[58,85214,85215],{"class":60,"line":33697},[58,85216,3046],{"emptyLinePlaceholder":720},[58,85218,85219,85221],{"class":60,"line":33703},[58,85220,74613],{"class":92},[58,85222,70800],{"class":386},[58,85224,85225],{"class":60,"line":33714},[58,85226,85227],{"class":386},"        \u003Cdiv class=\"item\">\n",[58,85229,85230,85233,85235],{"class":60,"line":33720},[58,85231,85232],{"class":386},"          \u003Cimg src=\"${",[58,85234,80450],{"class":75},[58,85236,80482],{"class":386},[58,85238,85239,85242,85244,85247,85249],{"class":60,"line":33730},[58,85240,85241],{"class":386},"          \u003Cp class=\"name\">${",[58,85243,80440],{"class":75},[58,85245,85246],{"class":386},"}${",[58,85248,1952],{"class":75},[58,85250,80492],{"class":386},[58,85252,85253,85256,85258],{"class":60,"line":33735},[58,85254,85255],{"class":386},"          \u003Cp class=\"spec\">${",[58,85257,5833],{"class":75},[58,85259,80492],{"class":386},[58,85261,85262,85265,85267,85269,85271,85273,85275,85277],{"class":60,"line":33741},[58,85263,85264],{"class":386},"          \u003Cp class=\"price\">${",[58,85266,80445],{"class":75},[58,85268,1344],{"class":386},[58,85270,85206],{"class":379},[58,85272,793],{"class":386},[58,85274,867],{"class":82},[58,85276,1215],{"class":386},[58,85278,80492],{"class":386},[58,85280,85281,85284,85286],{"class":60,"line":33790},[58,85282,85283],{"class":386},"          \u003Cp class=\"count\">x${",[58,85285,85064],{"class":75},[58,85287,80492],{"class":386},[58,85289,85290,85293,85296],{"class":60,"line":33837},[58,85291,85292],{"class":386},"          \u003Cp class=\"sub-total\">${",[58,85294,85295],{"class":75},"subtotal",[58,85297,80492],{"class":386},[58,85299,85300],{"class":60,"line":33842},[58,85301,85302],{"class":386},"        \u003C\u002Fdiv> \n",[58,85304,85305],{"class":60,"line":33848},[58,85306,85307],{"class":386},"             `\n",[58,85309,85310,85313,85315,85317,85319],{"class":60,"line":33867},[58,85311,85312],{"class":75},"    }).",[58,85314,74854],{"class":379},[58,85316,793],{"class":75},[58,85318,74859],{"class":386},[58,85320,799],{"class":75},[58,85322,85323],{"class":60,"line":33873},[58,85324,85325],{"class":64},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[58,85327,85328,85330,85332,85334,85336,85339,85341,85344,85346,85348,85350,85353,85356,85358,85361,85363,85365,85367,85370,85372,85374,85376,85378],{"class":60,"line":33893},[58,85329,11866],{"class":92},[58,85331,63417],{"class":82},[58,85333,14208],{"class":92},[58,85335,80678],{"class":75},[58,85337,85338],{"class":379},"reduce",[58,85340,3022],{"class":75},[58,85342,85343],{"class":5862},"prev",[58,85345,469],{"class":75},[58,85347,80426],{"class":5862},[58,85349,14358],{"class":75},[58,85351,85352],{"class":92},"=>",[58,85354,85355],{"class":75}," prev ",[58,85357,1267],{"class":92},[58,85359,85360],{"class":75}," (item.price ",[58,85362,1241],{"class":92},[58,85364,6400],{"class":82},[58,85366,7164],{"class":92},[58,85368,85369],{"class":75}," item.count) ",[58,85371,1370],{"class":92},[58,85373,6400],{"class":82},[58,85375,469],{"class":75},[58,85377,979],{"class":82},[58,85379,799],{"class":75},[58,85381,85382,85384,85386,85388,85391,85393,85395,85398,85400,85402,85404],{"class":60,"line":33899},[58,85383,53045],{"class":75},[58,85385,55035],{"class":379},[58,85387,793],{"class":75},[58,85389,85390],{"class":386},"'.amount'",[58,85392,74880],{"class":75},[58,85394,383],{"class":92},[58,85396,85397],{"class":75}," total.",[58,85399,85206],{"class":379},[58,85401,793],{"class":75},[58,85403,867],{"class":82},[58,85405,799],{"class":75},[58,85407,85408,85410,85412],{"class":60,"line":33905},[58,85409,53055],{"class":75},[58,85411,52451],{"class":71},[58,85413,403],{"class":75},[58,85415,85416,85418,85420],{"class":60,"line":33915},[58,85417,52423],{"class":75},[58,85419,52438],{"class":71},[58,85421,403],{"class":75},[58,85423,85424],{"class":60,"line":33920},[58,85425,3046],{"emptyLinePlaceholder":720},[58,85427,85428,85430,85432],{"class":60,"line":33926},[58,85429,52423],{"class":75},[58,85431,51279],{"class":71},[58,85433,403],{"class":75},[14,85435,85437],{"id":85436},"_411-编程思想","4.11 编程思想",[114,85439,85441],{"id":85440},"_4111-面向过程介绍","4.11.1 面向过程介绍",[175,85443,85444,85447],{},[25,85445,85446],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[175,85449,85450],{},"调用就可以了",[175,85452,85453],{},[119,85454],{"alt":53,"src":85455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[114,85457,85459],{"id":85458},"_4112-面向对象","4.11.2 面向对象",[175,85461,85462],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[175,85464,85465],{},[119,85466],{"alt":53,"src":85467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[175,85469,85470],{},"面向对象的特性：",[124,85472,85473,85476,85479],{},[22,85474,85475],{},"封装性",[22,85477,85478],{},"继承性",[22,85480,85481],{},"多态性",[114,85483,85485],{"id":85484},"_4113-两者比较","4.11.3 两者比较",[175,85487,85488],{},[119,85489],{"alt":53,"src":85490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,85492,85494],{"id":85493},"_412-构造函数回顾","4.12 构造函数回顾",[175,85496,85497],{},[119,85498],{"alt":53,"src":85499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[175,85501,85502],{},[119,85503],{"alt":53,"src":85504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[175,85506,85507],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[175,85509,85510],{},[119,85511],{"alt":53,"src":85512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,85514,85516],{"id":85515},"_413-原型","4.13 原型",[114,85518,85520],{"id":85519},"_4131-原型对象的认识","4.13.1 原型对象的认识",[175,85522,85523],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[175,85525,85526],{},[119,85527],{"alt":53,"src":85528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[175,85530,85531],{},[119,85532],{"alt":53,"src":85533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[175,85535,85536],{},"原型是构造函数的属性，它也是一个对象",[175,85538,85539],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[175,85541,85542],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[48,85544,85546],{"className":53705,"code":85545,"language":53707,"meta":53,"style":53},"\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",[55,85547,85548,85556,85561,85569,85574,85579,85584,85589,85594,85598,85602,85606,85611,85616,85620,85625,85630,85635,85640,85645,85649,85657],{"__ignoreMap":53},[58,85549,85550,85552,85554],{"class":60,"line":61},[58,85551,373],{"class":75},[58,85553,52438],{"class":71},[58,85555,403],{"class":75},[58,85557,85558],{"class":60,"line":68},[58,85559,85560],{"class":64},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[58,85562,85563,85565,85567],{"class":60,"line":79},[58,85564,52782],{"class":75},[58,85566,52451],{"class":71},[58,85568,403],{"class":75},[58,85570,85571],{"class":60,"line":105},[58,85572,85573],{"class":75},"    function Star(uname, age) {\n",[58,85575,85576],{"class":60,"line":627},[58,85577,85578],{"class":75},"      this.uname = uname,\n",[58,85580,85581],{"class":60,"line":509},[58,85582,85583],{"class":75},"        this.age = age\n",[58,85585,85586],{"class":60,"line":559},[58,85587,85588],{"class":75},"      \u002F\u002F this.sing = function () {\n",[58,85590,85591],{"class":60,"line":654},[58,85592,85593],{"class":75},"      \u002F\u002F   console.log('唱歌')\n",[58,85595,85596],{"class":60,"line":671},[58,85597,3046],{"emptyLinePlaceholder":720},[58,85599,85600],{"class":60,"line":677},[58,85601,60671],{"class":75},[58,85603,85604],{"class":60,"line":2260},[58,85605,2833],{"class":75},[58,85607,85608],{"class":60,"line":694},[58,85609,85610],{"class":75},"    Star.prototype.sing = function () {\n",[58,85612,85613],{"class":60,"line":2270},[58,85614,85615],{"class":75},"      console.log('唱歌')\n",[58,85617,85618],{"class":60,"line":2275},[58,85619,2833],{"class":75},[58,85621,85622],{"class":60,"line":2289},[58,85623,85624],{"class":75},"    \u002F\u002F console.dir(Star.prototype)\n",[58,85626,85627],{"class":60,"line":2294},[58,85628,85629],{"class":75},"    const pink = new Star('pink', 18)\n",[58,85631,85632],{"class":60,"line":2300},[58,85633,85634],{"class":75},"    const red = new Star('red', 20)\n",[58,85636,85637],{"class":60,"line":2321},[58,85638,85639],{"class":75},"    pink.sing()\n",[58,85641,85642],{"class":60,"line":2326},[58,85643,85644],{"class":75},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[58,85646,85647],{"class":60,"line":2340},[58,85648,3046],{"emptyLinePlaceholder":720},[58,85650,85651,85653,85655],{"class":60,"line":2345},[58,85652,53055],{"class":75},[58,85654,52451],{"class":71},[58,85656,403],{"class":75},[58,85658,85659,85661,85663],{"class":60,"line":2374},[58,85660,52423],{"class":75},[58,85662,52438],{"class":71},[58,85664,403],{"class":75},[175,85666,85667],{},[119,85668],{"alt":53,"src":85669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[48,85671,85673],{"className":53705,"code":85672,"language":53707,"meta":53,"style":53},"\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",[55,85674,85675,85683,85691,85696,85701,85706,85711,85715,85720,85725,85730,85734,85739,85743,85747,85752,85756,85764],{"__ignoreMap":53},[58,85676,85677,85679,85681],{"class":60,"line":61},[58,85678,373],{"class":75},[58,85680,52438],{"class":71},[58,85682,403],{"class":75},[58,85684,85685,85687,85689],{"class":60,"line":68},[58,85686,52782],{"class":75},[58,85688,52451],{"class":71},[58,85690,403],{"class":75},[58,85692,85693],{"class":60,"line":79},[58,85694,85695],{"class":75},"    let that\n",[58,85697,85698],{"class":60,"line":105},[58,85699,85700],{"class":75},"    function Star(uname) {\n",[58,85702,85703],{"class":60,"line":627},[58,85704,85705],{"class":75},"      this.uname = uname\n",[58,85707,85708],{"class":60,"line":509},[58,85709,85710],{"class":75},"      that = this\n",[58,85712,85713],{"class":60,"line":559},[58,85714,2833],{"class":75},[58,85716,85717],{"class":60,"line":654},[58,85718,85719],{"class":75},"    \u002F\u002F 实例对象是 ldh\n",[58,85721,85722],{"class":60,"line":671},[58,85723,85724],{"class":75},"    const ldh = new Star('刘德华')\n",[58,85726,85727],{"class":60,"line":677},[58,85728,85729],{"class":75},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[58,85731,85732],{"class":60,"line":2260},[58,85733,3046],{"emptyLinePlaceholder":720},[58,85735,85736],{"class":60,"line":694},[58,85737,85738],{"class":75},"    Star.sing = function () {\n",[58,85740,85741],{"class":60,"line":2270},[58,85742,85615],{"class":75},[58,85744,85745],{"class":60,"line":2275},[58,85746,2833],{"class":75},[58,85748,85749],{"class":60,"line":2289},[58,85750,85751],{"class":75},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[58,85753,85754],{"class":60,"line":2294},[58,85755,3046],{"emptyLinePlaceholder":720},[58,85757,85758,85760,85762],{"class":60,"line":2300},[58,85759,53055],{"class":75},[58,85761,52451],{"class":71},[58,85763,403],{"class":75},[58,85765,85766,85768,85770],{"class":60,"line":2321},[58,85767,52423],{"class":75},[58,85769,52438],{"class":71},[58,85771,403],{"class":75},[175,85773,85774],{},"构造函数的this指向的是实例对象；",[175,85776,85777],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[114,85779,85781],{"id":85780},"_4132-数组扩展方法","4.13.2 数组扩展方法",[175,85783,85784],{},[119,85785],{"alt":53,"src":85786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[48,85788,85790],{"className":53705,"code":85789,"language":53707,"meta":53,"style":53},"\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",[55,85791,85792,85800,85808,85813,85818,85823,85828,85833,85838,85843,85848,85853,85858,85862,85867,85872,85877,85882,85886,85891,85896,85901,85906,85910,85915,85920,85925,85930,85934,85939,85943,85951],{"__ignoreMap":53},[58,85793,85794,85796,85798],{"class":60,"line":61},[58,85795,373],{"class":75},[58,85797,52438],{"class":71},[58,85799,403],{"class":75},[58,85801,85802,85804,85806],{"class":60,"line":68},[58,85803,52782],{"class":75},[58,85805,52451],{"class":71},[58,85807,403],{"class":75},[58,85809,85810],{"class":60,"line":79},[58,85811,85812],{"class":75},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[58,85814,85815],{"class":60,"line":105},[58,85816,85817],{"class":75},"    const arr = [1, 2, 3]\n",[58,85819,85820],{"class":60,"line":627},[58,85821,85822],{"class":75},"    \u002F\u002F 自己定义数组的扩展方法\n",[58,85824,85825],{"class":60,"line":509},[58,85826,85827],{"class":75},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[58,85829,85830],{"class":60,"line":559},[58,85831,85832],{"class":75},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[58,85834,85835],{"class":60,"line":654},[58,85836,85837],{"class":75},"    \u002F\u002F ①.最大值\n",[58,85839,85840],{"class":60,"line":671},[58,85841,85842],{"class":75},"    Array.prototype.max = function () {\n",[58,85844,85845],{"class":60,"line":677},[58,85846,85847],{"class":75},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[58,85849,85850],{"class":60,"line":2260},[58,85851,85852],{"class":75},"      return Math.max(...this)\n",[58,85854,85855],{"class":60,"line":694},[58,85856,85857],{"class":75},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[58,85859,85860],{"class":60,"line":2270},[58,85861,2833],{"class":75},[58,85863,85864],{"class":60,"line":2275},[58,85865,85866],{"class":75},"    console.log(arr.max())\n",[58,85868,85869],{"class":60,"line":2289},[58,85870,85871],{"class":75},"    \u002F\u002F ②最小值\n",[58,85873,85874],{"class":60,"line":2294},[58,85875,85876],{"class":75},"    Array.prototype.min = function () {\n",[58,85878,85879],{"class":60,"line":2300},[58,85880,85881],{"class":75},"      return Math.min(...this)\n",[58,85883,85884],{"class":60,"line":2321},[58,85885,2833],{"class":75},[58,85887,85888],{"class":60,"line":2326},[58,85889,85890],{"class":75},"    console.log(arr.min())\n",[58,85892,85893],{"class":60,"line":2340},[58,85894,85895],{"class":75},"    \u002F\u002F③求和\n",[58,85897,85898],{"class":60,"line":2345},[58,85899,85900],{"class":75},"    Array.prototype.sum = function () {\n",[58,85902,85903],{"class":60,"line":2374},[58,85904,85905],{"class":75},"      return this.reduce((prev, current) => prev + current, 0)\n",[58,85907,85908],{"class":60,"line":2379},[58,85909,2833],{"class":75},[58,85911,85912],{"class":60,"line":2396},[58,85913,85914],{"class":75},"    console.log(arr.sum())\n",[58,85916,85917],{"class":60,"line":2401},[58,85918,85919],{"class":75},"    \u002F\u002F ③排序\n",[58,85921,85922],{"class":60,"line":2406},[58,85923,85924],{"class":75},"    Array.prototype.rever = function () {\n",[58,85926,85927],{"class":60,"line":2411},[58,85928,85929],{"class":75},"      return this.reverse()\n",[58,85931,85932],{"class":60,"line":2425},[58,85933,2833],{"class":75},[58,85935,85936],{"class":60,"line":2430},[58,85937,85938],{"class":75},"    console.log(arr.rever())\n",[58,85940,85941],{"class":60,"line":3223},[58,85942,3046],{"emptyLinePlaceholder":720},[58,85944,85945,85947,85949],{"class":60,"line":3237},[58,85946,53055],{"class":75},[58,85948,52451],{"class":71},[58,85950,403],{"class":75},[58,85952,85953,85955,85957],{"class":60,"line":3245},[58,85954,52423],{"class":75},[58,85956,52438],{"class":71},[58,85958,403],{"class":75},[175,85960,85961],{},[119,85962],{"alt":53,"src":85963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[114,85965,85967],{"id":85966},"_4133-constructor-属性","4.13.3 constructor 属性",[175,85969,85970],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[175,85972,85973],{},[119,85974],{"alt":53,"src":85975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[48,85977,85979],{"className":53705,"code":85978,"language":53707,"meta":53,"style":53},"\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",[55,85980,85981,85989,85997,86002,86007,86011,86016,86021,86026,86034],{"__ignoreMap":53},[58,85982,85983,85985,85987],{"class":60,"line":61},[58,85984,373],{"class":75},[58,85986,52438],{"class":71},[58,85988,403],{"class":75},[58,85990,85991,85993,85995],{"class":60,"line":68},[58,85992,52782],{"class":75},[58,85994,52451],{"class":71},[58,85996,403],{"class":75},[58,85998,85999],{"class":60,"line":79},[58,86000,86001],{"class":75},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[58,86003,86004],{"class":60,"line":105},[58,86005,86006],{"class":75},"    function Star() {\n",[58,86008,86009],{"class":60,"line":627},[58,86010,2833],{"class":75},[58,86012,86013],{"class":60,"line":509},[58,86014,86015],{"class":75},"    const ldh = new Star()\n",[58,86017,86018],{"class":60,"line":559},[58,86019,86020],{"class":75},"    console.log(Star.prototype)\n",[58,86022,86023],{"class":60,"line":654},[58,86024,86025],{"class":75},"    console.log(Star.prototype.constructor === Star)\n",[58,86027,86028,86030,86032],{"class":60,"line":671},[58,86029,53055],{"class":75},[58,86031,52451],{"class":71},[58,86033,403],{"class":75},[58,86035,86036,86038,86040],{"class":60,"line":677},[58,86037,52423],{"class":75},[58,86039,52438],{"class":71},[58,86041,403],{"class":75},[175,86043,86044],{},[119,86045],{"alt":53,"src":86046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[175,86048,86049],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[48,86051,86053],{"className":53705,"code":86052,"language":53707,"meta":53,"style":53},"  \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",[55,86054,86055,86063,86067,86071,86075,86080,86085,86090,86094,86099,86104,86109,86114,86119,86124,86128,86132,86137,86142,86147,86151,86156,86161,86165,86169,86173],{"__ignoreMap":53},[58,86056,86057,86059,86061],{"class":60,"line":61},[58,86058,52782],{"class":75},[58,86060,52451],{"class":71},[58,86062,403],{"class":75},[58,86064,86065],{"class":60,"line":68},[58,86066,86001],{"class":75},[58,86068,86069],{"class":60,"line":79},[58,86070,86006],{"class":75},[58,86072,86073],{"class":60,"line":105},[58,86074,2833],{"class":75},[58,86076,86077],{"class":60,"line":627},[58,86078,86079],{"class":75},"    \u002F\u002F const ldh = new Star()\n",[58,86081,86082],{"class":60,"line":509},[58,86083,86084],{"class":75},"    \u002F\u002F console.log(Star.prototype)\n",[58,86086,86087],{"class":60,"line":559},[58,86088,86089],{"class":75},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[58,86091,86092],{"class":60,"line":654},[58,86093,3046],{"emptyLinePlaceholder":720},[58,86095,86096],{"class":60,"line":671},[58,86097,86098],{"class":75},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[58,86100,86101],{"class":60,"line":677},[58,86102,86103],{"class":75},"    \u002F\u002F Star.prototype.sing = function () {\n",[58,86105,86106],{"class":60,"line":2260},[58,86107,86108],{"class":75},"    \u002F\u002F   console.log('唱歌')\n",[58,86110,86111],{"class":60,"line":694},[58,86112,86113],{"class":75},"    \u002F\u002F }\n",[58,86115,86116],{"class":60,"line":2270},[58,86117,86118],{"class":75},"    \u002F\u002F Star.prototype.dance = function () {\n",[58,86120,86121],{"class":60,"line":2275},[58,86122,86123],{"class":75},"    \u002F\u002F   console.log('跳舞')\n",[58,86125,86126],{"class":60,"line":2289},[58,86127,86113],{"class":75},[58,86129,86130],{"class":60,"line":2294},[58,86131,86020],{"class":75},[58,86133,86134],{"class":60,"line":2300},[58,86135,86136],{"class":75},"    Star.prototype = {\n",[58,86138,86139],{"class":60,"line":2321},[58,86140,86141],{"class":75},"      sing: function () {\n",[58,86143,86144],{"class":60,"line":2326},[58,86145,86146],{"class":75},"        console.log('唱歌')\n",[58,86148,86149],{"class":60,"line":2340},[58,86150,78523],{"class":75},[58,86152,86153],{"class":60,"line":2345},[58,86154,86155],{"class":75},"      dance: function () {\n",[58,86157,86158],{"class":60,"line":2374},[58,86159,86160],{"class":75},"        console.log('跳舞')\n",[58,86162,86163],{"class":60,"line":2379},[58,86164,53036],{"class":75},[58,86166,86167],{"class":60,"line":2396},[58,86168,2833],{"class":75},[58,86170,86171],{"class":60,"line":2401},[58,86172,86020],{"class":75},[58,86174,86175,86177,86179],{"class":60,"line":2406},[58,86176,53055],{"class":75},[58,86178,52451],{"class":71},[58,86180,403],{"class":75},[175,86182,86183],{},"进行输出结果后会发现：",[175,86185,86186],{},[119,86187],{"alt":53,"src":86188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[175,86190,86191],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[175,86193,86194],{},"所以，要重新指回创造这个原型对象的构造函数",[48,86196,86198],{"className":71844,"code":86197,"language":71846,"meta":53,"style":53},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[55,86199,86200,86214,86219,86224,86235,86248,86253,86264,86278,86282],{"__ignoreMap":53},[58,86201,86202,86205,86207,86210,86212],{"class":60,"line":61},[58,86203,86204],{"class":82},"Star",[58,86206,1344],{"class":75},[58,86208,86209],{"class":82},"prototype",[58,86211,14208],{"class":92},[58,86213,76],{"class":75},[58,86215,86216],{"class":60,"line":68},[58,86217,86218],{"class":64},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[58,86220,86221],{"class":60,"line":79},[58,86222,86223],{"class":75},"  constructor: Star,\n",[58,86225,86226,86229,86231,86233],{"class":60,"line":105},[58,86227,86228],{"class":379},"  sing",[58,86230,86],{"class":75},[58,86232,55085],{"class":92},[58,86234,55088],{"class":75},[58,86236,86237,86239,86241,86243,86246],{"class":60,"line":627},[58,86238,74384],{"class":75},[58,86240,58881],{"class":379},[58,86242,793],{"class":75},[58,86244,86245],{"class":386},"'唱歌'",[58,86247,799],{"class":75},[58,86249,86250],{"class":60,"line":509},[58,86251,86252],{"class":75},"   },\n",[58,86254,86255,86258,86260,86262],{"class":60,"line":559},[58,86256,86257],{"class":379},"   dance",[58,86259,86],{"class":75},[58,86261,55085],{"class":92},[58,86263,55088],{"class":75},[58,86265,86266,86269,86271,86273,86276],{"class":60,"line":654},[58,86267,86268],{"class":75},"     console.",[58,86270,58881],{"class":379},[58,86272,793],{"class":75},[58,86274,86275],{"class":386},"'跳舞'",[58,86277,799],{"class":75},[58,86279,86280],{"class":60,"line":671},[58,86281,4955],{"class":75},[58,86283,86284],{"class":60,"line":677},[58,86285,108],{"class":75},[175,86287,86288],{},[119,86289],{"alt":53,"src":86290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[175,86292,86293],{},"总结1：",[175,86295,86296],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[175,86298,86299],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[175,86301,86302],{},"constructor指的是他的来源",[175,86304,86305],{},[119,86306],{"alt":53,"src":86307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[175,86309,86310],{},[119,86311],{"alt":53,"src":86312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[175,86314,86315],{},"总结2：",[175,86317,86318],{},[119,86319],{"alt":53,"src":86320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[175,86322,86323],{},[119,86324],{"alt":53,"src":86325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[175,86327,86328],{},[119,86329],{"alt":53,"src":86330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[114,86332,86334],{"id":86333},"_4134-对象原型","4.13.4 对象原型",[175,86336,86337],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[175,86339,86340],{},"对象原型就是__proto__这个属性",[175,86342,86343],{},[119,86344],{"alt":53,"src":86345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[175,86347,86348],{},[119,86349],{"alt":53,"src":86350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[175,86352,86353],{},[119,86354],{"alt":53,"src":86355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[175,86357,86358],{},[119,86359],{"alt":53,"src":86360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[48,86362,86364],{"className":53705,"code":86363,"language":53707,"meta":53,"style":53},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[55,86365,86366,86374,86382,86386,86390,86394,86399,86407],{"__ignoreMap":53},[58,86367,86368,86370,86372],{"class":60,"line":61},[58,86369,373],{"class":75},[58,86371,52438],{"class":71},[58,86373,403],{"class":75},[58,86375,86376,86378,86380],{"class":60,"line":68},[58,86377,52782],{"class":75},[58,86379,52451],{"class":71},[58,86381,403],{"class":75},[58,86383,86384],{"class":60,"line":79},[58,86385,86006],{"class":75},[58,86387,86388],{"class":60,"line":105},[58,86389,2833],{"class":75},[58,86391,86392],{"class":60,"line":627},[58,86393,86015],{"class":75},[58,86395,86396],{"class":60,"line":509},[58,86397,86398],{"class":75},"    console.log(ldh)\n",[58,86400,86401,86403,86405],{"class":60,"line":559},[58,86402,53055],{"class":75},[58,86404,52451],{"class":71},[58,86406,403],{"class":75},[58,86408,86409,86411,86413],{"class":60,"line":654},[58,86410,52423],{"class":75},[58,86412,52438],{"class":71},[58,86414,403],{"class":75},[175,86416,86417],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[175,86419,86420],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[175,86422,86423],{},[119,86424],{"alt":53,"src":86425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[175,86427,86428],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[175,86430,86431],{},"对象原型指向原型对象",[175,86433,86434],{},[119,86435],{"alt":53,"src":86436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[175,86438,86439],{},[119,86440],{"alt":53,"src":86441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[175,86443,86444],{},[119,86445],{"alt":53,"src":86446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[114,86448,86450],{"id":86449},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[175,86452,86453],{},[119,86454],{"alt":53,"src":86455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[19,86457,86458,86461,86464,86467],{},[22,86459,86460],{},"构造函数通过new的形式实例化得到实例对象",[22,86462,86463],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[22,86465,86466],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[22,86468,86469],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[175,86471,86472],{},[119,86473],{"alt":53,"src":86474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[175,86476,86477],{},"题目梳理：",[175,86479,86480],{},[119,86481],{"alt":53,"src":86482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[114,86484,86486],{"id":86485},"_4136-原型继承","4.13.6 原型继承",[175,86488,86489],{},[119,86490],{"alt":53,"src":86491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[175,86493,86494],{},[119,86495],{"alt":53,"src":86496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[175,86498,86499],{},[119,86500],{"alt":53,"src":86501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[175,86503,86504],{},[119,86505],{"alt":53,"src":86506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[175,86508,86509],{},[119,86510],{"alt":53,"src":86511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[175,86513,86514],{},[119,86515],{"alt":53,"src":86516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[175,86518,86519],{},[119,86520],{"alt":53,"src":86521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[175,86523,86524],{},[119,86525],{"alt":53,"src":86526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[175,86528,86529],{},"回顾：构造函数每次new得到对象都是不同的",[114,86531,86533],{"id":86532},"_4137-原型链","4.13.7 原型链",[175,86535,86536],{},[119,86537],{"alt":53,"src":86538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[175,86540,86541],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[175,86543,86544],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[175,86546,86547],{},"大哥是Object",[175,86549,86550],{},[119,86551],{"alt":53,"src":86552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[175,86554,86555],{},[119,86556],{"alt":53,"src":86557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[175,86559,86560],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[175,86562,86563],{},"万物皆对象",[114,86565,86567],{"id":86566},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[175,86569,86570],{},"模态框",[175,86572,86573],{},"以后遇见这个效果直接使用这个就行",[175,86575,86576],{},[119,86577],{"alt":53,"src":86578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[175,86580,86581],{},[119,86582],{"alt":53,"src":86583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[175,86585,86586],{},[119,86587],{"alt":53,"src":86588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[175,86590,86591],{},[119,86592],{"alt":53,"src":86593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[175,86595,86596],{},"补充知识点：",[19,86598,86599],{},[22,86600,86601],{},"append()",[175,86603,86604],{},[119,86605],{"alt":53,"src":86606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[48,86608,86610],{"className":51277,"code":86609,"language":51279,"meta":53,"style":53},"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",[55,86611,86612,86617,86622,86627,86631,86635,86639,86644,86649,86654,86658],{"__ignoreMap":53},[58,86613,86614],{"class":60,"line":61},[58,86615,86616],{"class":75},"append(param1)\n",[58,86618,86619],{"class":60,"line":68},[58,86620,86621],{"class":75},"append(param1, param2)\n",[58,86623,86624],{"class":60,"line":79},[58,86625,86626],{"class":75},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[58,86628,86629],{"class":60,"line":105},[58,86630,3046],{"emptyLinePlaceholder":720},[58,86632,86633],{"class":60,"line":627},[58,86634,3046],{"emptyLinePlaceholder":720},[58,86636,86637],{"class":60,"line":509},[58,86638,3046],{"emptyLinePlaceholder":720},[58,86640,86641],{"class":60,"line":559},[58,86642,86643],{"class":75},"let div = document.createElement(\"div\");\n",[58,86645,86646],{"class":60,"line":654},[58,86647,86648],{"class":75},"let p = document.createElement(\"p\");\n",[58,86650,86651],{"class":60,"line":671},[58,86652,86653],{"class":75},"div.append(p);\n",[58,86655,86656],{"class":60,"line":677},[58,86657,3046],{"emptyLinePlaceholder":720},[58,86659,86660,86663,86665],{"class":60,"line":2260},[58,86661,86662],{"class":75},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[58,86664,175],{"class":71},[58,86666,86667],{"class":75},"> ]\n",[19,86669,86670],{"start":68},[22,86671,86672],{},"remove()",[175,86674,86675],{},"自己删自己",[175,86677,86678],{},[119,86679],{"alt":53,"src":86680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[48,86682,86684],{"className":51277,"code":86683,"language":51279,"meta":53,"style":53},"\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",[55,86685,86686,86696,86710,86714,86722,86736,86756,86768,86776,86783,86795,86808,86843,86855,86865,86877,86889,86901,86928,86938,86942,86946,86955,86967,86981,86991,87003,87007,87011,87021,87032,87042,87052,87065,87078,87088,87092,87096,87105,87115,87127,87131,87135,87144,87154,87164,87176,87180,87184,87194,87210,87221,87231,87241,87253,87265,87277,87281,87285,87298,87309,87313,87321,87329,87333,87341,87361,87381,87389,87394,87420,87425,87430,87449,87454,87466,87471,87482,87492,87502,87507,87512,87516,87521,87526,87531,87551,87556,87576,87581,87595,87600,87605,87610,87626,87630,87635,87664,87669,87674,87679,87690,87694,87698,87702,87707,87732,87737,87762,87767,87776,87780,87785,87810,87814,87839,87843,87852,87856,87861,87879,87889,87893,87901,87909,87913],{"__ignoreMap":53},[58,86687,86688,86690,86692,86694],{"class":60,"line":61},[58,86689,51941],{"class":75},[58,86691,51944],{"class":71},[58,86693,51947],{"class":379},[58,86695,403],{"class":75},[58,86697,86698,86700,86702,86704,86706,86708],{"class":60,"line":68},[58,86699,373],{"class":75},[58,86701,51279],{"class":71},[58,86703,51958],{"class":379},[58,86705,383],{"class":75},[58,86707,51963],{"class":386},[58,86709,403],{"class":75},[58,86711,86712],{"class":60,"line":79},[58,86713,3046],{"emptyLinePlaceholder":720},[58,86715,86716,86718,86720],{"class":60,"line":105},[58,86717,373],{"class":75},[58,86719,51976],{"class":71},[58,86721,403],{"class":75},[58,86723,86724,86726,86728,86730,86732,86734],{"class":60,"line":627},[58,86725,52782],{"class":75},[58,86727,51986],{"class":71},[58,86729,51989],{"class":379},[58,86731,383],{"class":75},[58,86733,51994],{"class":386},[58,86735,403],{"class":75},[58,86737,86738,86740,86742,86744,86746,86748,86750,86752,86754],{"class":60,"line":509},[58,86739,52782],{"class":75},[58,86741,51986],{"class":71},[58,86743,15564],{"class":379},[58,86745,383],{"class":75},[58,86747,52033],{"class":386},[58,86749,52013],{"class":379},[58,86751,383],{"class":75},[58,86753,52040],{"class":386},[58,86755,403],{"class":75},[58,86757,86758,86760,86762,86764,86766],{"class":60,"line":559},[58,86759,52782],{"class":75},[58,86761,52049],{"class":71},[58,86763,52052],{"class":75},[58,86765,52049],{"class":71},[58,86767,403],{"class":75},[58,86769,86770,86772,86774],{"class":60,"line":654},[58,86771,52782],{"class":75},[58,86773,702],{"class":71},[58,86775,403],{"class":75},[58,86777,86778,86781],{"class":60,"line":671},[58,86779,86780],{"class":379},"    .modal",[58,86782,76],{"class":75},[58,86784,86785,86787,86789,86791,86793],{"class":60,"line":677},[58,86786,55406],{"class":82},[58,86788,86],{"class":75},[58,86790,4619],{"class":82},[58,86792,93],{"class":92},[58,86794,102],{"class":75},[58,86796,86797,86800,86802,86804,86806],{"class":60,"line":2260},[58,86798,86799],{"class":82},"      min-height",[58,86801,86],{"class":75},[58,86803,1097],{"class":82},[58,86805,93],{"class":92},[58,86807,102],{"class":75},[58,86809,86810,86812,86814,86816,86818,86820,86822,86824,86826,86828,86830,86832,86834,86836,86838,86841],{"class":60,"line":694},[58,86811,79381],{"class":82},[58,86813,86],{"class":75},[58,86815,979],{"class":82},[58,86817,4739],{"class":82},[58,86819,2684],{"class":82},[58,86821,93],{"class":92},[58,86823,79398],{"class":82},[58,86825,793],{"class":75},[58,86827,979],{"class":82},[58,86829,469],{"class":75},[58,86831,979],{"class":82},[58,86833,469],{"class":75},[58,86835,979],{"class":82},[58,86837,469],{"class":75},[58,86839,86840],{"class":82},"0.1",[58,86842,3365],{"class":75},[58,86844,86845,86847,86849,86851,86853],{"class":60,"line":2270},[58,86846,55768],{"class":82},[58,86848,86],{"class":75},[58,86850,1079],{"class":82},[58,86852,93],{"class":92},[58,86854,102],{"class":75},[58,86856,86857,86859,86861,86863],{"class":60,"line":2275},[58,86858,55395],{"class":82},[58,86860,86],{"class":75},[58,86862,666],{"class":82},[58,86864,102],{"class":75},[58,86866,86867,86870,86872,86875],{"class":60,"line":2289},[58,86868,86869],{"class":82},"      z-index",[58,86871,86],{"class":75},[58,86873,86874],{"class":82},"999",[58,86876,102],{"class":75},[58,86878,86879,86881,86883,86885,86887],{"class":60,"line":2294},[58,86880,55472],{"class":82},[58,86882,86],{"class":75},[58,86884,1442],{"class":82},[58,86886,1114],{"class":92},[58,86888,102],{"class":75},[58,86890,86891,86893,86895,86897,86899],{"class":60,"line":2300},[58,86892,55581],{"class":82},[58,86894,86],{"class":75},[58,86896,1442],{"class":82},[58,86898,1114],{"class":92},[58,86900,102],{"class":75},[58,86902,86903,86905,86907,86909,86911,86914,86916,86918,86920,86922,86924,86926],{"class":60,"line":2321},[58,86904,79422],{"class":82},[58,86906,86],{"class":75},[58,86908,79427],{"class":82},[58,86910,793],{"class":75},[58,86912,86913],{"class":82},"-50",[58,86915,1114],{"class":92},[58,86917,469],{"class":75},[58,86919,86913],{"class":82},[58,86921,1114],{"class":92},[58,86923,469],{"class":75},[58,86925,979],{"class":82},[58,86927,3365],{"class":75},[58,86929,86930,86932,86934,86936],{"class":60,"line":2326},[58,86931,55518],{"class":82},[58,86933,86],{"class":75},[58,86935,61476],{"class":82},[58,86937,102],{"class":75},[58,86939,86940],{"class":60,"line":2340},[58,86941,2833],{"class":75},[58,86943,86944],{"class":60,"line":2345},[58,86945,3046],{"emptyLinePlaceholder":720},[58,86947,86948,86950,86953],{"class":60,"line":2374},[58,86949,86780],{"class":379},[58,86951,86952],{"class":379}," .header",[58,86954,76],{"class":75},[58,86956,86957,86959,86961,86963,86965],{"class":60,"line":2379},[58,86958,57993],{"class":82},[58,86960,86],{"class":75},[58,86962,1187],{"class":82},[58,86964,93],{"class":92},[58,86966,102],{"class":75},[58,86968,86969,86971,86973,86975,86977,86979],{"class":60,"line":2396},[58,86970,55331],{"class":82},[58,86972,86],{"class":75},[58,86974,979],{"class":82},[58,86976,2684],{"class":82},[58,86978,93],{"class":92},[58,86980,102],{"class":75},[58,86982,86983,86985,86987,86989],{"class":60,"line":2401},[58,86984,55395],{"class":82},[58,86986,86],{"class":75},[58,86988,622],{"class":82},[58,86990,102],{"class":75},[58,86992,86993,86995,86997,86999,87001],{"class":60,"line":2406},[58,86994,55556],{"class":82},[58,86996,86],{"class":75},[58,86998,1486],{"class":82},[58,87000,93],{"class":92},[58,87002,102],{"class":75},[58,87004,87005],{"class":60,"line":2411},[58,87006,2833],{"class":75},[58,87008,87009],{"class":60,"line":2425},[58,87010,3046],{"emptyLinePlaceholder":720},[58,87012,87013,87015,87017,87019],{"class":60,"line":2430},[58,87014,86780],{"class":379},[58,87016,86952],{"class":379},[58,87018,3678],{"class":71},[58,87020,76],{"class":75},[58,87022,87023,87026,87028,87030],{"class":60,"line":3223},[58,87024,87025],{"class":82},"      font-style",[58,87027,86],{"class":75},[58,87029,64473],{"class":82},[58,87031,102],{"class":75},[58,87033,87034,87036,87038,87040],{"class":60,"line":3237},[58,87035,58050],{"class":82},[58,87037,86],{"class":75},[58,87039,62702],{"class":82},[58,87041,102],{"class":75},[58,87043,87044,87046,87048,87050],{"class":60,"line":3245},[58,87045,55395],{"class":82},[58,87047,86],{"class":75},[58,87049,644],{"class":82},[58,87051,102],{"class":75},[58,87053,87054,87057,87059,87061,87063],{"class":60,"line":3250},[58,87055,87056],{"class":82},"      right",[58,87058,86],{"class":75},[58,87060,1361],{"class":82},[58,87062,93],{"class":92},[58,87064,102],{"class":75},[58,87066,87067,87069,87071,87074,87076],{"class":60,"line":3256},[58,87068,55581],{"class":82},[58,87070,86],{"class":75},[58,87072,87073],{"class":82},"-2",[58,87075,93],{"class":92},[58,87077,102],{"class":75},[58,87079,87080,87082,87084,87086],{"class":60,"line":3262},[58,87081,62657],{"class":82},[58,87083,86],{"class":75},[58,87085,62662],{"class":82},[58,87087,102],{"class":75},[58,87089,87090],{"class":60,"line":3267},[58,87091,2833],{"class":75},[58,87093,87094],{"class":60,"line":8594},[58,87095,3046],{"emptyLinePlaceholder":720},[58,87097,87098,87100,87103],{"class":60,"line":8618},[58,87099,86780],{"class":379},[58,87101,87102],{"class":379}," .body",[58,87104,76],{"class":75},[58,87106,87107,87109,87111,87113],{"class":60,"line":8623},[58,87108,57920],{"class":82},[58,87110,86],{"class":75},[58,87112,52231],{"class":82},[58,87114,102],{"class":75},[58,87116,87117,87119,87121,87123,87125],{"class":60,"line":8629},[58,87118,55331],{"class":82},[58,87120,86],{"class":75},[58,87122,1232],{"class":82},[58,87124,93],{"class":92},[58,87126,102],{"class":75},[58,87128,87129],{"class":60,"line":8656},[58,87130,2833],{"class":75},[58,87132,87133],{"class":60,"line":8661},[58,87134,3046],{"emptyLinePlaceholder":720},[58,87136,87137,87139,87142],{"class":60,"line":8667},[58,87138,86780],{"class":379},[58,87140,87141],{"class":379}," .footer",[58,87143,76],{"class":75},[58,87145,87146,87148,87150,87152],{"class":60,"line":8679},[58,87147,55643],{"class":82},[58,87149,86],{"class":75},[58,87151,52118],{"class":82},[58,87153,102],{"class":75},[58,87155,87156,87158,87160,87162],{"class":60,"line":8691},[58,87157,55654],{"class":82},[58,87159,86],{"class":75},[58,87161,52219],{"class":82},[58,87163,102],{"class":75},[58,87165,87166,87168,87170,87172,87174],{"class":60,"line":8703},[58,87167,55331],{"class":82},[58,87169,86],{"class":75},[58,87171,1232],{"class":82},[58,87173,93],{"class":92},[58,87175,102],{"class":75},[58,87177,87178],{"class":60,"line":10361},[58,87179,2833],{"class":75},[58,87181,87182],{"class":60,"line":10386},[58,87183,3046],{"emptyLinePlaceholder":720},[58,87185,87186,87188,87190,87192],{"class":60,"line":10409},[58,87187,86780],{"class":379},[58,87189,87141],{"class":379},[58,87191,2048],{"class":71},[58,87193,76],{"class":75},[58,87195,87196,87198,87200,87202,87204,87206,87208],{"class":60,"line":10433},[58,87197,55331],{"class":82},[58,87199,86],{"class":75},[58,87201,861],{"class":82},[58,87203,93],{"class":92},[58,87205,2729],{"class":82},[58,87207,93],{"class":92},[58,87209,102],{"class":75},[58,87211,87212,87214,87216,87219],{"class":60,"line":10438},[58,87213,62353],{"class":82},[58,87215,86],{"class":75},[58,87217,87218],{"class":82},"#ccc",[58,87220,102],{"class":75},[58,87222,87223,87225,87227,87229],{"class":60,"line":10443},[58,87224,64602],{"class":82},[58,87226,86],{"class":75},[58,87228,55373],{"class":82},[58,87230,102],{"class":75},[58,87232,87233,87235,87237,87239],{"class":60,"line":10448},[58,87234,58050],{"class":82},[58,87236,86],{"class":75},[58,87238,61476],{"class":82},[58,87240,102],{"class":75},[58,87242,87243,87245,87247,87249,87251],{"class":60,"line":10457},[58,87244,55768],{"class":82},[58,87246,86],{"class":75},[58,87248,867],{"class":82},[58,87250,93],{"class":92},[58,87252,102],{"class":75},[58,87254,87255,87257,87259,87261,87263],{"class":60,"line":10462},[58,87256,62382],{"class":82},[58,87258,86],{"class":75},[58,87260,1232],{"class":82},[58,87262,93],{"class":92},[58,87264,102],{"class":75},[58,87266,87267,87269,87271,87273,87275],{"class":60,"line":10468},[58,87268,55556],{"class":82},[58,87270,86],{"class":75},[58,87272,1335],{"class":82},[58,87274,93],{"class":92},[58,87276,102],{"class":75},[58,87278,87279],{"class":60,"line":10489},[58,87280,2833],{"class":75},[58,87282,87283],{"class":60,"line":10495},[58,87284,3046],{"emptyLinePlaceholder":720},[58,87286,87287,87289,87291,87293,87296],{"class":60,"line":10509},[58,87288,86780],{"class":379},[58,87290,87141],{"class":379},[58,87292,2048],{"class":71},[58,87294,87295],{"class":379},".submit",[58,87297,76],{"class":75},[58,87299,87300,87302,87304,87307],{"class":60,"line":10515},[58,87301,55518],{"class":82},[58,87303,86],{"class":75},[58,87305,87306],{"class":82},"#369",[58,87308,102],{"class":75},[58,87310,87311],{"class":60,"line":10542},[58,87312,2833],{"class":75},[58,87314,87315,87317,87319],{"class":60,"line":10551},[58,87316,53055],{"class":75},[58,87318,702],{"class":71},[58,87320,403],{"class":75},[58,87322,87323,87325,87327],{"class":60,"line":10557},[58,87324,52423],{"class":75},[58,87326,51976],{"class":71},[58,87328,403],{"class":75},[58,87330,87331],{"class":60,"line":10565},[58,87332,3046],{"emptyLinePlaceholder":720},[58,87334,87335,87337,87339],{"class":60,"line":10570},[58,87336,373],{"class":75},[58,87338,52438],{"class":71},[58,87340,403],{"class":75},[58,87342,87343,87345,87347,87349,87351,87354,87357,87359],{"class":60,"line":17247},[58,87344,52782],{"class":75},[58,87346,54523],{"class":71},[58,87348,15603],{"class":379},[58,87350,383],{"class":75},[58,87352,87353],{"class":386},"\"delete\"",[58,87355,87356],{"class":75},">删除\u003C\u002F",[58,87358,54523],{"class":71},[58,87360,403],{"class":75},[58,87362,87363,87365,87367,87369,87371,87374,87377,87379],{"class":60,"line":17253},[58,87364,52782],{"class":75},[58,87366,54523],{"class":71},[58,87368,15603],{"class":379},[58,87370,383],{"class":75},[58,87372,87373],{"class":386},"\"login\"",[58,87375,87376],{"class":75},">登录\u003C\u002F",[58,87378,54523],{"class":71},[58,87380,403],{"class":75},[58,87382,87383,87385,87387],{"class":60,"line":17276},[58,87384,52782],{"class":75},[58,87386,52451],{"class":71},[58,87388,403],{"class":75},[58,87390,87391],{"class":60,"line":17282},[58,87392,87393],{"class":64},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[58,87395,87396,87398,87401,87403,87405,87407,87409,87411,87414,87416,87418],{"class":60,"line":17305},[58,87397,70716],{"class":92},[58,87399,87400],{"class":379}," Modal",[58,87402,793],{"class":75},[58,87404,52049],{"class":5862},[58,87406,14208],{"class":92},[58,87408,70562],{"class":386},[58,87410,469],{"class":75},[58,87412,87413],{"class":5862},"message",[58,87415,14208],{"class":92},[58,87417,70562],{"class":386},[58,87419,13086],{"class":75},[58,87421,87422],{"class":60,"line":17319},[58,87423,87424],{"class":64},"      \u002F\u002F 创建Model 模态框盒子\n",[58,87426,87427],{"class":60,"line":17339},[58,87428,87429],{"class":64},"      \u002F\u002F 1.1 创建div标签\n",[58,87431,87432,87434,87437,87439,87441,87443,87445,87447],{"class":60,"line":17345},[58,87433,70683],{"class":82},[58,87435,87436],{"class":75},".modalBox ",[58,87438,383],{"class":92},[58,87440,55032],{"class":75},[58,87442,70783],{"class":379},[58,87444,793],{"class":75},[58,87446,82561],{"class":386},[58,87448,799],{"class":75},[58,87450,87451],{"class":60,"line":17356},[58,87452,87453],{"class":64},"      \u002F\u002F 1.2 给div 添加类名为model\n",[58,87455,87456,87458,87461,87463],{"class":60,"line":17379},[58,87457,70683],{"class":82},[58,87459,87460],{"class":75},".modalBox.className ",[58,87462,383],{"class":92},[58,87464,87465],{"class":386}," 'modal'\n",[58,87467,87468],{"class":60,"line":17401},[58,87469,87470],{"class":64},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[58,87472,87473,87475,87478,87480],{"class":60,"line":17406},[58,87474,70683],{"class":82},[58,87476,87477],{"class":75},".modalBox.innerHTML ",[58,87479,383],{"class":92},[58,87481,70800],{"class":386},[58,87483,87484,87487,87489],{"class":60,"line":17412},[58,87485,87486],{"class":386},"        \u003Cdiv class=\"header\">${",[58,87488,52049],{"class":75},[58,87490,87491],{"class":386},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[58,87493,87494,87497,87499],{"class":60,"line":17426},[58,87495,87496],{"class":386},"        \u003Cdiv class=\"body\">${",[58,87498,87413],{"class":75},[58,87500,87501],{"class":386},"}\u003C\u002Fdiv>\n",[58,87503,87504],{"class":60,"line":17439},[58,87505,87506],{"class":386},"      `\n",[58,87508,87509],{"class":60,"line":17444},[58,87510,87511],{"class":64},"      \u002F\u002F console.log(this.modalBox)\n",[58,87513,87514],{"class":60,"line":17458},[58,87515,2833],{"class":75},[58,87517,87518],{"class":60,"line":17463},[58,87519,87520],{"class":64},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[58,87522,87523],{"class":60,"line":17469},[58,87524,87525],{"class":64},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[58,87527,87528],{"class":60,"line":17474},[58,87529,87530],{"class":64},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[58,87532,87533,87536,87538,87540,87542,87545,87547,87549],{"class":60,"line":17488},[58,87534,87535],{"class":82},"    Modal",[58,87537,1344],{"class":75},[58,87539,86209],{"class":82},[58,87541,1344],{"class":75},[58,87543,87544],{"class":379},"open",[58,87546,14208],{"class":92},[58,87548,59552],{"class":92},[58,87550,55088],{"class":75},[58,87552,87553],{"class":60,"line":17493},[58,87554,87555],{"class":64},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[58,87557,87558,87560,87563,87565,87567,87569,87571,87574],{"class":60,"line":17498},[58,87559,58862],{"class":92},[58,87561,87562],{"class":82}," box",[58,87564,14208],{"class":92},[58,87566,55032],{"class":75},[58,87568,55035],{"class":379},[58,87570,793],{"class":75},[58,87572,87573],{"class":386},"'.modal'",[58,87575,799],{"class":75},[58,87577,87578],{"class":60,"line":17512},[58,87579,87580],{"class":64},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[58,87582,87583,87586,87588,87591,87593],{"class":60,"line":17524},[58,87584,87585],{"class":75},"      box ",[58,87587,2362],{"class":92},[58,87589,87590],{"class":75}," box.",[58,87592,57640],{"class":379},[58,87594,2622],{"class":75},[58,87596,87597],{"class":60,"line":17529},[58,87598,87599],{"class":64},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[58,87601,87602],{"class":60,"line":17542},[58,87603,87604],{"class":64},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[58,87606,87607],{"class":60,"line":17547},[58,87608,87609],{"class":64},"      \u002F\u002F append可以增加对象\n",[58,87611,87612,87615,87618,87620,87623],{"class":60,"line":17552},[58,87613,87614],{"class":75},"      document.body.",[58,87616,87617],{"class":379},"append",[58,87619,793],{"class":75},[58,87621,87622],{"class":82},"this",[58,87624,87625],{"class":75},".modalBox)\n",[58,87627,87628],{"class":60,"line":17557},[58,87629,3046],{"emptyLinePlaceholder":720},[58,87631,87632],{"class":60,"line":17570},[58,87633,87634],{"class":64},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[58,87636,87637,87639,87642,87644,87646,87649,87651,87653,87655,87657,87660,87662],{"class":60,"line":17575},[58,87638,70683],{"class":82},[58,87640,87641],{"class":75},".modalBox.",[58,87643,55035],{"class":379},[58,87645,793],{"class":75},[58,87647,87648],{"class":386},"'i'",[58,87650,31470],{"class":75},[58,87652,58447],{"class":379},[58,87654,793],{"class":75},[58,87656,58452],{"class":386},[58,87658,87659],{"class":75},", () ",[58,87661,85352],{"class":92},[58,87663,76],{"class":75},[58,87665,87666],{"class":60,"line":33277},[58,87667,87668],{"class":64},"        \u002F\u002F 这个地方需要用到箭头函数\n",[58,87670,87671],{"class":60,"line":33283},[58,87672,87673],{"class":64},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[58,87675,87676],{"class":60,"line":33289},[58,87677,87678],{"class":64},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[58,87680,87681,87683,87685,87688],{"class":60,"line":33295},[58,87682,65358],{"class":82},[58,87684,1344],{"class":75},[58,87686,87687],{"class":379},"close",[58,87689,2622],{"class":75},[58,87691,87692],{"class":60,"line":33301},[58,87693,65447],{"class":75},[58,87695,87696],{"class":60,"line":33312},[58,87697,2833],{"class":75},[58,87699,87700],{"class":60,"line":33318},[58,87701,3046],{"emptyLinePlaceholder":720},[58,87703,87704],{"class":60,"line":33338},[58,87705,87706],{"class":64},"    \u002F\u002F 测试一下 点击 删除按钮\n",[58,87708,87709,87711,87713,87715,87718,87720,87722,87724,87726,87728,87730],{"class":60,"line":33344},[58,87710,53045],{"class":75},[58,87712,55035],{"class":379},[58,87714,793],{"class":75},[58,87716,87717],{"class":386},"'#delete'",[58,87719,31470],{"class":75},[58,87721,58447],{"class":379},[58,87723,793],{"class":75},[58,87725,58452],{"class":386},[58,87727,87659],{"class":75},[58,87729,85352],{"class":92},[58,87731,76],{"class":75},[58,87733,87734],{"class":60,"line":33355},[58,87735,87736],{"class":64},"      \u002F\u002F 先调用Model构造函数\n",[58,87738,87739,87741,87744,87746,87748,87750,87752,87755,87757,87760],{"class":60,"line":33361},[58,87740,58862],{"class":92},[58,87742,87743],{"class":82}," del",[58,87745,14208],{"class":92},[58,87747,12223],{"class":92},[58,87749,87400],{"class":379},[58,87751,793],{"class":75},[58,87753,87754],{"class":386},"'温馨的提示'",[58,87756,469],{"class":75},[58,87758,87759],{"class":386},"'您没有删除权限操作'",[58,87761,799],{"class":75},[58,87763,87764],{"class":60,"line":33367},[58,87765,87766],{"class":64},"      \u002F\u002F 实例对象调用open方法\n",[58,87768,87769,87772,87774],{"class":60,"line":33373},[58,87770,87771],{"class":75},"      del.",[58,87773,87544],{"class":379},[58,87775,2622],{"class":75},[58,87777,87778],{"class":60,"line":33379},[58,87779,34105],{"class":75},[58,87781,87782],{"class":60,"line":33385},[58,87783,87784],{"class":64},"    \u002F\u002F 测试一下 点击 登录按钮\n",[58,87786,87787,87789,87791,87793,87796,87798,87800,87802,87804,87806,87808],{"class":60,"line":33391},[58,87788,53045],{"class":75},[58,87790,55035],{"class":379},[58,87792,793],{"class":75},[58,87794,87795],{"class":386},"'#login'",[58,87797,31470],{"class":75},[58,87799,58447],{"class":379},[58,87801,793],{"class":75},[58,87803,58452],{"class":386},[58,87805,87659],{"class":75},[58,87807,85352],{"class":92},[58,87809,76],{"class":75},[58,87811,87812],{"class":60,"line":33397},[58,87813,87736],{"class":64},[58,87815,87816,87818,87821,87823,87825,87827,87829,87832,87834,87837],{"class":60,"line":33417},[58,87817,58862],{"class":92},[58,87819,87820],{"class":82}," log",[58,87822,14208],{"class":92},[58,87824,12223],{"class":92},[58,87826,87400],{"class":379},[58,87828,793],{"class":75},[58,87830,87831],{"class":386},"'友情提示'",[58,87833,469],{"class":75},[58,87835,87836],{"class":386},"'您还没有登录呢'",[58,87838,799],{"class":75},[58,87840,87841],{"class":60,"line":33423},[58,87842,87766],{"class":64},[58,87844,87845,87848,87850],{"class":60,"line":33439},[58,87846,87847],{"class":75},"      log.",[58,87849,87544],{"class":379},[58,87851,2622],{"class":75},[58,87853,87854],{"class":60,"line":33445},[58,87855,34105],{"class":75},[58,87857,87858],{"class":60,"line":33459},[58,87859,87860],{"class":64},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[58,87862,87863,87865,87867,87869,87871,87873,87875,87877],{"class":60,"line":33465},[58,87864,87535],{"class":82},[58,87866,1344],{"class":75},[58,87868,86209],{"class":82},[58,87870,1344],{"class":75},[58,87872,87687],{"class":379},[58,87874,14208],{"class":92},[58,87876,59552],{"class":92},[58,87878,55088],{"class":75},[58,87880,87881,87883,87885,87887],{"class":60,"line":33480},[58,87882,70683],{"class":82},[58,87884,87641],{"class":75},[58,87886,57640],{"class":379},[58,87888,2622],{"class":75},[58,87890,87891],{"class":60,"line":33486},[58,87892,2833],{"class":75},[58,87894,87895,87897,87899],{"class":60,"line":33495},[58,87896,53055],{"class":75},[58,87898,52451],{"class":71},[58,87900,403],{"class":75},[58,87902,87903,87905,87907],{"class":60,"line":33501},[58,87904,52423],{"class":75},[58,87906,52438],{"class":71},[58,87908,403],{"class":75},[58,87910,87911],{"class":60,"line":33510},[58,87912,3046],{"emptyLinePlaceholder":720},[58,87914,87915,87917,87919],{"class":60,"line":33516},[58,87916,52423],{"class":75},[58,87918,51279],{"class":71},[58,87920,403],{"class":75},[175,87922,87923],{},[119,87924],{"alt":53,"src":87925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,87927,87929],{"id":87928},"_414-深浅拷贝","4.14 深浅拷贝",[114,87931,87933],{"id":87932},"_4141-浅拷贝","4.14.1 浅拷贝",[175,87935,87936],{},[119,87937],{"alt":53,"src":87938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[175,87940,87941],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[175,87943,87944],{},[119,87945],{"alt":53,"src":87946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[175,87948,87949],{},[119,87950],{"alt":53,"src":87951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[175,87953,87954],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[175,87956,87957],{},[119,87958],{"alt":53,"src":87959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[175,87961,11977],{},[175,87963,87964],{},[119,87965],{"alt":53,"src":87966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[114,87968,87970],{"id":87969},"_4142-深拷贝","4.14.2 深拷贝",[175,87972,87973],{},"深拷贝：拷贝的是对象，不是地址",[175,87975,87976],{},"常用的三种方法：",[19,87978,87979,87982,87985],{},[22,87980,87981],{},"通过递归实现深拷贝",[22,87983,87984],{},"lodash\u002FcloneDeep",[22,87986,87987],{},"通过JSON.stringify()实现",[22641,87989,87991],{"id":87990},"_41421-递归函数","4.14.2.1 递归函数",[175,87993,87994],{},[119,87995],{"alt":53,"src":87996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[19,87998,87999],{},[22,88000,88001],{},"死递归占溢出：",[48,88003,88005],{"className":53705,"code":88004,"language":53707,"meta":53,"style":53},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[55,88006,88007,88015,88023,88027,88032,88036,88041,88049],{"__ignoreMap":53},[58,88008,88009,88011,88013],{"class":60,"line":61},[58,88010,373],{"class":75},[58,88012,52438],{"class":71},[58,88014,403],{"class":75},[58,88016,88017,88019,88021],{"class":60,"line":68},[58,88018,52782],{"class":75},[58,88020,52451],{"class":71},[58,88022,403],{"class":75},[58,88024,88025],{"class":60,"line":79},[58,88026,77774],{"class":75},[58,88028,88029],{"class":60,"line":105},[58,88030,88031],{"class":75},"      fn()\n",[58,88033,88034],{"class":60,"line":627},[58,88035,2833],{"class":75},[58,88037,88038],{"class":60,"line":509},[58,88039,88040],{"class":75},"    fn()\n",[58,88042,88043,88045,88047],{"class":60,"line":559},[58,88044,53055],{"class":75},[58,88046,52451],{"class":71},[58,88048,403],{"class":75},[58,88050,88051,88053,88055],{"class":60,"line":654},[58,88052,52423],{"class":75},[58,88054,52438],{"class":71},[58,88056,403],{"class":75},[19,88058,88059],{"start":68},[22,88060,88061],{},"递归函数要加判断条件：",[175,88063,88064],{},[119,88065],{"alt":53,"src":88066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[19,88068,88069],{"start":79},[22,88070,88071],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[48,88073,88075],{"className":51277,"code":88074,"language":51279,"meta":53,"style":53},"\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",[55,88076,88077,88087,88101,88105,88113,88127,88147,88159,88167,88171,88179,88191,88199,88207,88232,88244,88248,88255,88263,88271,88275],{"__ignoreMap":53},[58,88078,88079,88081,88083,88085],{"class":60,"line":61},[58,88080,51941],{"class":75},[58,88082,51944],{"class":71},[58,88084,51947],{"class":379},[58,88086,403],{"class":75},[58,88088,88089,88091,88093,88095,88097,88099],{"class":60,"line":68},[58,88090,373],{"class":75},[58,88092,51279],{"class":71},[58,88094,51958],{"class":379},[58,88096,383],{"class":75},[58,88098,51963],{"class":386},[58,88100,403],{"class":75},[58,88102,88103],{"class":60,"line":79},[58,88104,3046],{"emptyLinePlaceholder":720},[58,88106,88107,88109,88111],{"class":60,"line":105},[58,88108,373],{"class":75},[58,88110,51976],{"class":71},[58,88112,403],{"class":75},[58,88114,88115,88117,88119,88121,88123,88125],{"class":60,"line":627},[58,88116,52782],{"class":75},[58,88118,51986],{"class":71},[58,88120,51989],{"class":379},[58,88122,383],{"class":75},[58,88124,51994],{"class":386},[58,88126,403],{"class":75},[58,88128,88129,88131,88133,88135,88137,88139,88141,88143,88145],{"class":60,"line":509},[58,88130,52782],{"class":75},[58,88132,51986],{"class":71},[58,88134,15564],{"class":379},[58,88136,383],{"class":75},[58,88138,52033],{"class":386},[58,88140,52013],{"class":379},[58,88142,383],{"class":75},[58,88144,52040],{"class":386},[58,88146,403],{"class":75},[58,88148,88149,88151,88153,88155,88157],{"class":60,"line":559},[58,88150,52782],{"class":75},[58,88152,52049],{"class":71},[58,88154,52052],{"class":75},[58,88156,52049],{"class":71},[58,88158,403],{"class":75},[58,88160,88161,88163,88165],{"class":60,"line":654},[58,88162,52423],{"class":75},[58,88164,51976],{"class":71},[58,88166,403],{"class":75},[58,88168,88169],{"class":60,"line":671},[58,88170,3046],{"emptyLinePlaceholder":720},[58,88172,88173,88175,88177],{"class":60,"line":677},[58,88174,373],{"class":75},[58,88176,52438],{"class":71},[58,88178,403],{"class":75},[58,88180,88181,88183,88185,88187,88189],{"class":60,"line":2260},[58,88182,52782],{"class":75},[58,88184,72],{"class":71},[58,88186,55948],{"class":75},[58,88188,72],{"class":71},[58,88190,403],{"class":75},[58,88192,88193,88195,88197],{"class":60,"line":694},[58,88194,52782],{"class":75},[58,88196,52451],{"class":71},[58,88198,403],{"class":75},[58,88200,88201,88203,88205],{"class":60,"line":2270},[58,88202,70716],{"class":92},[58,88204,74404],{"class":379},[58,88206,11498],{"class":75},[58,88208,88209,88211,88213,88215,88217,88219,88221,88223,88225,88227,88230],{"class":60,"line":2275},[58,88210,56405],{"class":75},[58,88212,55035],{"class":379},[58,88214,793],{"class":75},[58,88216,82561],{"class":386},[58,88218,74880],{"class":75},[58,88220,383],{"class":92},[58,88222,12223],{"class":92},[58,88224,74420],{"class":379},[58,88226,17904],{"class":75},[58,88228,88229],{"class":379},"toLocaleString",[58,88231,2622],{"class":75},[58,88233,88234,88237,88240,88242],{"class":60,"line":2289},[58,88235,88236],{"class":379},"      setTimeout",[58,88238,88239],{"class":75},"(getTime, ",[58,88241,7056],{"class":82},[58,88243,799],{"class":75},[58,88245,88246],{"class":60,"line":2294},[58,88247,2833],{"class":75},[58,88249,88250,88253],{"class":60,"line":2300},[58,88251,88252],{"class":379},"    getTime",[58,88254,2622],{"class":75},[58,88256,88257,88259,88261],{"class":60,"line":2321},[58,88258,53055],{"class":75},[58,88260,52451],{"class":71},[58,88262,403],{"class":75},[58,88264,88265,88267,88269],{"class":60,"line":2326},[58,88266,52423],{"class":75},[58,88268,52438],{"class":71},[58,88270,403],{"class":75},[58,88272,88273],{"class":60,"line":2340},[58,88274,3046],{"emptyLinePlaceholder":720},[58,88276,88277,88279,88281],{"class":60,"line":2345},[58,88278,52423],{"class":75},[58,88280,51279],{"class":71},[58,88282,403],{"class":75},[175,88284,88285],{},[119,88286],{"alt":53,"src":88287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[19,88289,88290],{"start":105},[22,88291,87981],{},[175,88293,88294],{},[119,88295],{"alt":53,"src":88296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[175,88298,88299],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[175,88301,39833],{},[175,88303,88304],{},"这个是简易版的递归函数深拷贝",[175,88306,88307],{},"一定要注意先数组再对象，因为万物皆可对象",[48,88309,88311],{"className":51277,"code":88310,"language":51279,"meta":53,"style":53},"\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",[55,88312,88313,88323,88337,88341,88349,88363,88383,88395,88403,88407,88415,88423,88433,88442,88450,88466,88470,88478,88482,88486,88498,88503,88522,88538,88543,88548,88553,88568,88573,88578,88587,88595,88612,88620,88626,88634,88639,88644,88653,88657,88661,88665,88676,88685,88695,88709,88719,88727,88735,88743,88747],{"__ignoreMap":53},[58,88314,88315,88317,88319,88321],{"class":60,"line":61},[58,88316,51941],{"class":75},[58,88318,51944],{"class":71},[58,88320,51947],{"class":379},[58,88322,403],{"class":75},[58,88324,88325,88327,88329,88331,88333,88335],{"class":60,"line":68},[58,88326,373],{"class":75},[58,88328,51279],{"class":71},[58,88330,51958],{"class":379},[58,88332,383],{"class":75},[58,88334,51963],{"class":386},[58,88336,403],{"class":75},[58,88338,88339],{"class":60,"line":79},[58,88340,3046],{"emptyLinePlaceholder":720},[58,88342,88343,88345,88347],{"class":60,"line":105},[58,88344,373],{"class":75},[58,88346,51976],{"class":71},[58,88348,403],{"class":75},[58,88350,88351,88353,88355,88357,88359,88361],{"class":60,"line":627},[58,88352,52782],{"class":75},[58,88354,51986],{"class":71},[58,88356,51989],{"class":379},[58,88358,383],{"class":75},[58,88360,51994],{"class":386},[58,88362,403],{"class":75},[58,88364,88365,88367,88369,88371,88373,88375,88377,88379,88381],{"class":60,"line":509},[58,88366,52782],{"class":75},[58,88368,51986],{"class":71},[58,88370,15564],{"class":379},[58,88372,383],{"class":75},[58,88374,52033],{"class":386},[58,88376,52013],{"class":379},[58,88378,383],{"class":75},[58,88380,52040],{"class":386},[58,88382,403],{"class":75},[58,88384,88385,88387,88389,88391,88393],{"class":60,"line":559},[58,88386,52782],{"class":75},[58,88388,52049],{"class":71},[58,88390,52052],{"class":75},[58,88392,52049],{"class":71},[58,88394,403],{"class":75},[58,88396,88397,88399,88401],{"class":60,"line":654},[58,88398,52423],{"class":75},[58,88400,51976],{"class":71},[58,88402,403],{"class":75},[58,88404,88405],{"class":60,"line":671},[58,88406,3046],{"emptyLinePlaceholder":720},[58,88408,88409,88411,88413],{"class":60,"line":677},[58,88410,373],{"class":75},[58,88412,52438],{"class":71},[58,88414,403],{"class":75},[58,88416,88417,88419,88421],{"class":60,"line":2260},[58,88418,52782],{"class":75},[58,88420,52451],{"class":71},[58,88422,403],{"class":75},[58,88424,88425,88427,88429,88431],{"class":60,"line":694},[58,88426,11866],{"class":92},[58,88428,70603],{"class":82},[58,88430,14208],{"class":92},[58,88432,76],{"class":75},[58,88434,88435,88437,88440],{"class":60,"line":2270},[58,88436,72247],{"class":75},[58,88438,88439],{"class":386},"'pink'",[58,88441,32110],{"class":75},[58,88443,88444,88446,88448],{"class":60,"line":2275},[58,88445,72257],{"class":75},[58,88447,1436],{"class":82},[58,88449,32110],{"class":75},[58,88451,88452,88455,88458,88460,88463],{"class":60,"line":2289},[58,88453,88454],{"class":75},"      hobby: [",[58,88456,88457],{"class":386},"'乒乓球'",[58,88459,469],{"class":75},[58,88461,88462],{"class":386},"'足球'",[58,88464,88465],{"class":75},"],\n",[58,88467,88468],{"class":60,"line":2294},[58,88469,78503],{"class":75},[58,88471,88472,88475],{"class":60,"line":2300},[58,88473,88474],{"class":75},"        baby: ",[58,88476,88477],{"class":386},"'小pink'\n",[58,88479,88480],{"class":60,"line":2321},[58,88481,53036],{"class":75},[58,88483,88484],{"class":60,"line":2326},[58,88485,2833],{"class":75},[58,88487,88488,88490,88493,88495],{"class":60,"line":2340},[58,88489,11866],{"class":92},[58,88491,88492],{"class":82}," o",[58,88494,14208],{"class":92},[58,88496,88497],{"class":75}," {}\n",[58,88499,88500],{"class":60,"line":2345},[58,88501,88502],{"class":64},"    \u002F\u002F 拷贝函数\n",[58,88504,88505,88507,88510,88512,88515,88517,88520],{"class":60,"line":2374},[58,88506,70716],{"class":92},[58,88508,88509],{"class":379}," deepCopy",[58,88511,793],{"class":75},[58,88513,88514],{"class":5862},"newObj",[58,88516,469],{"class":75},[58,88518,88519],{"class":5862},"oldObj",[58,88521,13086],{"class":75},[58,88523,88524,88526,88528,88530,88533,88535],{"class":60,"line":2379},[58,88525,52922],{"class":92},[58,88527,2305],{"class":75},[58,88529,52485],{"class":92},[58,88531,88532],{"class":75}," k ",[58,88534,26687],{"class":92},[58,88536,88537],{"class":75}," oldObj) {\n",[58,88539,88540],{"class":60,"line":2396},[58,88541,88542],{"class":64},"        \u002F\u002F 处理数组的问题\n",[58,88544,88545],{"class":60,"line":2401},[58,88546,88547],{"class":64},"        \u002F\u002F 判断是否属于数组\n",[58,88549,88550],{"class":60,"line":2406},[58,88551,88552],{"class":64},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[58,88554,88555,88557,88560,88563,88566],{"class":60,"line":2411},[58,88556,3143],{"class":92},[58,88558,88559],{"class":75}," (oldObj[k] ",[58,88561,88562],{"class":92},"instanceof",[58,88564,88565],{"class":379}," Array",[58,88567,13086],{"class":75},[58,88569,88570],{"class":60,"line":2425},[58,88571,88572],{"class":64},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[58,88574,88575],{"class":60,"line":2430},[58,88576,88577],{"class":64},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[58,88579,88580,88583,88585],{"class":60,"line":3223},[58,88581,88582],{"class":75},"          newObj[k] ",[58,88584,383],{"class":92},[58,88586,52476],{"class":75},[58,88588,88589,88592],{"class":60,"line":3237},[58,88590,88591],{"class":379},"          deepCopy",[58,88593,88594],{"class":75},"(newObj[k], oldObj[k])\n",[58,88596,88597,88599,88601,88603,88605,88607,88610],{"class":60,"line":3245},[58,88598,80710],{"class":75},[58,88600,2348],{"class":92},[58,88602,2351],{"class":92},[58,88604,88559],{"class":75},[58,88606,88562],{"class":92},[58,88608,88609],{"class":379}," Object",[58,88611,13086],{"class":75},[58,88613,88614,88616,88618],{"class":60,"line":3250},[58,88615,88582],{"class":75},[58,88617,383],{"class":92},[58,88619,88497],{"class":75},[58,88621,88622,88624],{"class":60,"line":3256},[58,88623,88591],{"class":379},[58,88625,88594],{"class":75},[58,88627,88628,88630,88632],{"class":60,"line":3262},[58,88629,80710],{"class":75},[58,88631,2348],{"class":92},[58,88633,76],{"class":75},[58,88635,88636],{"class":60,"line":3267},[58,88637,88638],{"class":64},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[58,88640,88641],{"class":60,"line":8594},[58,88642,88643],{"class":64},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[58,88645,88646,88648,88650],{"class":60,"line":8618},[58,88647,88582],{"class":75},[58,88649,383],{"class":92},[58,88651,88652],{"class":75}," oldObj[k]\n",[58,88654,88655],{"class":60,"line":8623},[58,88656,3175],{"class":75},[58,88658,88659],{"class":60,"line":8629},[58,88660,53036],{"class":75},[58,88662,88663],{"class":60,"line":8656},[58,88664,2833],{"class":75},[58,88666,88667,88670,88673],{"class":60,"line":8661},[58,88668,88669],{"class":379},"    deepCopy",[58,88671,88672],{"class":75},"(o, obj) ",[58,88674,88675],{"class":64},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[58,88677,88678,88680,88682],{"class":60,"line":8667},[58,88679,74384],{"class":75},[58,88681,58881],{"class":379},[58,88683,88684],{"class":75},"(o)\n",[58,88686,88687,88690,88692],{"class":60,"line":8679},[58,88688,88689],{"class":75},"    o.age ",[58,88691,383],{"class":92},[58,88693,88694],{"class":82}," 20\n",[58,88696,88697,88700,88702,88704,88706],{"class":60,"line":8691},[58,88698,88699],{"class":75},"    o.hobby[",[58,88701,979],{"class":82},[58,88703,5089],{"class":75},[58,88705,383],{"class":92},[58,88707,88708],{"class":386}," '篮球'\n",[58,88710,88711,88714,88716],{"class":60,"line":8703},[58,88712,88713],{"class":75},"    o.family ",[58,88715,383],{"class":92},[58,88717,88718],{"class":386}," '老pink'\n",[58,88720,88721,88723,88725],{"class":60,"line":10361},[58,88722,74384],{"class":75},[58,88724,58881],{"class":379},[58,88726,70668],{"class":75},[58,88728,88729,88731,88733],{"class":60,"line":10386},[58,88730,53055],{"class":75},[58,88732,52451],{"class":71},[58,88734,403],{"class":75},[58,88736,88737,88739,88741],{"class":60,"line":10409},[58,88738,52423],{"class":75},[58,88740,52438],{"class":71},[58,88742,403],{"class":75},[58,88744,88745],{"class":60,"line":10433},[58,88746,3046],{"emptyLinePlaceholder":720},[58,88748,88749,88751,88753],{"class":60,"line":10438},[58,88750,52423],{"class":75},[58,88752,51279],{"class":71},[58,88754,403],{"class":75},[175,88756,88757],{},[119,88758],{"alt":53,"src":88759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22641,88761,88763,88764],{"id":88762},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[25,88765,88766],{},"js库lodash里面cloneDeep内部实现了深拷贝",[175,88768,88769],{},[376,88770,88771],{"href":88771,"rel":88772},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24508],[175,88774,88775],{},"lodash里边的方法都要加上一个下划线_",[175,88777,88778],{},"_.cloneDeep()",[48,88780,88782],{"className":51277,"code":88781,"language":51279,"meta":53,"style":53},"\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",[55,88783,88784,88794,88808,88812,88820,88834,88854,88866,88874,88878,88886,88891,88910,88918,88928,88936,88944,88956,88960,88966,88970,88974,88990,88998,89007,89015,89023,89031,89035],{"__ignoreMap":53},[58,88785,88786,88788,88790,88792],{"class":60,"line":61},[58,88787,51941],{"class":75},[58,88789,51944],{"class":71},[58,88791,51947],{"class":379},[58,88793,403],{"class":75},[58,88795,88796,88798,88800,88802,88804,88806],{"class":60,"line":68},[58,88797,373],{"class":75},[58,88799,51279],{"class":71},[58,88801,51958],{"class":379},[58,88803,383],{"class":75},[58,88805,51963],{"class":386},[58,88807,403],{"class":75},[58,88809,88810],{"class":60,"line":79},[58,88811,3046],{"emptyLinePlaceholder":720},[58,88813,88814,88816,88818],{"class":60,"line":105},[58,88815,373],{"class":75},[58,88817,51976],{"class":71},[58,88819,403],{"class":75},[58,88821,88822,88824,88826,88828,88830,88832],{"class":60,"line":627},[58,88823,52782],{"class":75},[58,88825,51986],{"class":71},[58,88827,51989],{"class":379},[58,88829,383],{"class":75},[58,88831,51994],{"class":386},[58,88833,403],{"class":75},[58,88835,88836,88838,88840,88842,88844,88846,88848,88850,88852],{"class":60,"line":509},[58,88837,52782],{"class":75},[58,88839,51986],{"class":71},[58,88841,15564],{"class":379},[58,88843,383],{"class":75},[58,88845,52033],{"class":386},[58,88847,52013],{"class":379},[58,88849,383],{"class":75},[58,88851,52040],{"class":386},[58,88853,403],{"class":75},[58,88855,88856,88858,88860,88862,88864],{"class":60,"line":559},[58,88857,52782],{"class":75},[58,88859,52049],{"class":71},[58,88861,52052],{"class":75},[58,88863,52049],{"class":71},[58,88865,403],{"class":75},[58,88867,88868,88870,88872],{"class":60,"line":654},[58,88869,52423],{"class":75},[58,88871,51976],{"class":71},[58,88873,403],{"class":75},[58,88875,88876],{"class":60,"line":671},[58,88877,3046],{"emptyLinePlaceholder":720},[58,88879,88880,88882,88884],{"class":60,"line":677},[58,88881,373],{"class":75},[58,88883,52438],{"class":71},[58,88885,403],{"class":75},[58,88887,88888],{"class":60,"line":2260},[58,88889,88890],{"class":64},"  \u003C!-- 先引用这个库 -->\n",[58,88892,88893,88895,88897,88899,88901,88904,88906,88908],{"class":60,"line":694},[58,88894,52782],{"class":75},[58,88896,52451],{"class":71},[58,88898,55873],{"class":379},[58,88900,383],{"class":75},[58,88902,88903],{"class":386},"\"lodash.min.js\"",[58,88905,55948],{"class":75},[58,88907,52451],{"class":71},[58,88909,403],{"class":75},[58,88911,88912,88914,88916],{"class":60,"line":2270},[58,88913,52782],{"class":75},[58,88915,52451],{"class":71},[58,88917,403],{"class":75},[58,88919,88920,88922,88924,88926],{"class":60,"line":2275},[58,88921,11866],{"class":92},[58,88923,70603],{"class":82},[58,88925,14208],{"class":92},[58,88927,76],{"class":75},[58,88929,88930,88932,88934],{"class":60,"line":2289},[58,88931,72247],{"class":75},[58,88933,88439],{"class":386},[58,88935,32110],{"class":75},[58,88937,88938,88940,88942],{"class":60,"line":2294},[58,88939,72257],{"class":75},[58,88941,1436],{"class":82},[58,88943,32110],{"class":75},[58,88945,88946,88948,88950,88952,88954],{"class":60,"line":2300},[58,88947,88454],{"class":75},[58,88949,88457],{"class":386},[58,88951,469],{"class":75},[58,88953,88462],{"class":386},[58,88955,88465],{"class":75},[58,88957,88958],{"class":60,"line":2321},[58,88959,78503],{"class":75},[58,88961,88962,88964],{"class":60,"line":2326},[58,88963,88474],{"class":75},[58,88965,88477],{"class":386},[58,88967,88968],{"class":60,"line":2340},[58,88969,53036],{"class":75},[58,88971,88972],{"class":60,"line":2345},[58,88973,2833],{"class":75},[58,88975,88976,88978,88980,88982,88985,88988],{"class":60,"line":2374},[58,88977,11866],{"class":92},[58,88979,88492],{"class":82},[58,88981,14208],{"class":92},[58,88983,88984],{"class":75}," _.",[58,88986,88987],{"class":379},"cloneDeep",[58,88989,70668],{"class":75},[58,88991,88992,88994,88996],{"class":60,"line":2379},[58,88993,74384],{"class":75},[58,88995,58881],{"class":379},[58,88997,88684],{"class":75},[58,88999,89000,89003,89005],{"class":60,"line":2396},[58,89001,89002],{"class":75},"    o.family.baby ",[58,89004,383],{"class":92},[58,89006,88718],{"class":386},[58,89008,89009,89011,89013],{"class":60,"line":2401},[58,89010,74384],{"class":75},[58,89012,58881],{"class":379},[58,89014,70668],{"class":75},[58,89016,89017,89019,89021],{"class":60,"line":2406},[58,89018,53055],{"class":75},[58,89020,52451],{"class":71},[58,89022,403],{"class":75},[58,89024,89025,89027,89029],{"class":60,"line":2411},[58,89026,52423],{"class":75},[58,89028,52438],{"class":71},[58,89030,403],{"class":75},[58,89032,89033],{"class":60,"line":2425},[58,89034,3046],{"emptyLinePlaceholder":720},[58,89036,89037,89039,89041],{"class":60,"line":2430},[58,89038,52423],{"class":75},[58,89040,51279],{"class":71},[58,89042,403],{"class":75},[175,89044,89045],{},[119,89046],{"alt":53,"src":89047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22641,89049,89051],{"id":89050},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[48,89053,89055],{"className":51277,"code":89054,"language":51279,"meta":53,"style":53},"\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",[55,89056,89057,89067,89081,89085,89093,89107,89127,89139,89147,89151,89159,89167,89177,89185,89193,89205,89209,89215,89219,89223,89228,89233,89238,89264,89272,89281,89289,89297,89305,89309],{"__ignoreMap":53},[58,89058,89059,89061,89063,89065],{"class":60,"line":61},[58,89060,51941],{"class":75},[58,89062,51944],{"class":71},[58,89064,51947],{"class":379},[58,89066,403],{"class":75},[58,89068,89069,89071,89073,89075,89077,89079],{"class":60,"line":68},[58,89070,373],{"class":75},[58,89072,51279],{"class":71},[58,89074,51958],{"class":379},[58,89076,383],{"class":75},[58,89078,51963],{"class":386},[58,89080,403],{"class":75},[58,89082,89083],{"class":60,"line":79},[58,89084,3046],{"emptyLinePlaceholder":720},[58,89086,89087,89089,89091],{"class":60,"line":105},[58,89088,373],{"class":75},[58,89090,51976],{"class":71},[58,89092,403],{"class":75},[58,89094,89095,89097,89099,89101,89103,89105],{"class":60,"line":627},[58,89096,52782],{"class":75},[58,89098,51986],{"class":71},[58,89100,51989],{"class":379},[58,89102,383],{"class":75},[58,89104,51994],{"class":386},[58,89106,403],{"class":75},[58,89108,89109,89111,89113,89115,89117,89119,89121,89123,89125],{"class":60,"line":509},[58,89110,52782],{"class":75},[58,89112,51986],{"class":71},[58,89114,15564],{"class":379},[58,89116,383],{"class":75},[58,89118,52033],{"class":386},[58,89120,52013],{"class":379},[58,89122,383],{"class":75},[58,89124,52040],{"class":386},[58,89126,403],{"class":75},[58,89128,89129,89131,89133,89135,89137],{"class":60,"line":559},[58,89130,52782],{"class":75},[58,89132,52049],{"class":71},[58,89134,52052],{"class":75},[58,89136,52049],{"class":71},[58,89138,403],{"class":75},[58,89140,89141,89143,89145],{"class":60,"line":654},[58,89142,52423],{"class":75},[58,89144,51976],{"class":71},[58,89146,403],{"class":75},[58,89148,89149],{"class":60,"line":671},[58,89150,3046],{"emptyLinePlaceholder":720},[58,89152,89153,89155,89157],{"class":60,"line":677},[58,89154,373],{"class":75},[58,89156,52438],{"class":71},[58,89158,403],{"class":75},[58,89160,89161,89163,89165],{"class":60,"line":2260},[58,89162,52782],{"class":75},[58,89164,52451],{"class":71},[58,89166,403],{"class":75},[58,89168,89169,89171,89173,89175],{"class":60,"line":694},[58,89170,11866],{"class":92},[58,89172,70603],{"class":82},[58,89174,14208],{"class":92},[58,89176,76],{"class":75},[58,89178,89179,89181,89183],{"class":60,"line":2270},[58,89180,72247],{"class":75},[58,89182,88439],{"class":386},[58,89184,32110],{"class":75},[58,89186,89187,89189,89191],{"class":60,"line":2275},[58,89188,72257],{"class":75},[58,89190,1436],{"class":82},[58,89192,32110],{"class":75},[58,89194,89195,89197,89199,89201,89203],{"class":60,"line":2289},[58,89196,88454],{"class":75},[58,89198,88457],{"class":386},[58,89200,469],{"class":75},[58,89202,88462],{"class":386},[58,89204,88465],{"class":75},[58,89206,89207],{"class":60,"line":2294},[58,89208,78503],{"class":75},[58,89210,89211,89213],{"class":60,"line":2300},[58,89212,88474],{"class":75},[58,89214,88477],{"class":386},[58,89216,89217],{"class":60,"line":2321},[58,89218,53036],{"class":75},[58,89220,89221],{"class":60,"line":2326},[58,89222,2833],{"class":75},[58,89224,89225],{"class":60,"line":2340},[58,89226,89227],{"class":64},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[58,89229,89230],{"class":60,"line":2345},[58,89231,89232],{"class":64},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[58,89234,89235],{"class":60,"line":2374},[58,89236,89237],{"class":64},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[58,89239,89240,89242,89244,89246,89249,89251,89254,89256,89258,89260,89262],{"class":60,"line":2379},[58,89241,11866],{"class":92},[58,89243,88492],{"class":82},[58,89245,14208],{"class":92},[58,89247,89248],{"class":82}," JSON",[58,89250,1344],{"class":75},[58,89252,89253],{"class":379},"parse",[58,89255,793],{"class":75},[58,89257,72295],{"class":82},[58,89259,1344],{"class":75},[58,89261,72300],{"class":379},[58,89263,72303],{"class":75},[58,89265,89266,89268,89270],{"class":60,"line":2396},[58,89267,74384],{"class":75},[58,89269,58881],{"class":379},[58,89271,88684],{"class":75},[58,89273,89274,89276,89278],{"class":60,"line":2401},[58,89275,89002],{"class":75},[58,89277,383],{"class":92},[58,89279,89280],{"class":386}," '123'\n",[58,89282,89283,89285,89287],{"class":60,"line":2406},[58,89284,74384],{"class":75},[58,89286,58881],{"class":379},[58,89288,70668],{"class":75},[58,89290,89291,89293,89295],{"class":60,"line":2411},[58,89292,53055],{"class":75},[58,89294,52451],{"class":71},[58,89296,403],{"class":75},[58,89298,89299,89301,89303],{"class":60,"line":2425},[58,89300,52423],{"class":75},[58,89302,52438],{"class":71},[58,89304,403],{"class":75},[58,89306,89307],{"class":60,"line":2430},[58,89308,3046],{"emptyLinePlaceholder":720},[58,89310,89311,89313,89315],{"class":60,"line":3223},[58,89312,52423],{"class":75},[58,89314,51279],{"class":71},[58,89316,403],{"class":75},[175,89318,89319],{},[119,89320],{"alt":53,"src":89321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,89323,89325],{"id":89324},"_415-异常处理","4.15 异常处理",[19,89327,89328],{},[22,89329,89330],{},"throw抛异常",[175,89332,89333],{},[119,89334],{"alt":53,"src":89335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[19,89337,89338],{"start":68},[22,89339,89340],{},"try\u002Fcatch 捕获错误信息",[175,89342,89343],{},[119,89344],{"alt":53,"src":89345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[48,89347,89349],{"className":51277,"code":89348,"language":51279,"meta":53,"style":53},"\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",[55,89350,89351,89361,89375,89379,89387,89401,89421,89433,89441,89445,89453,89465,89473,89482,89489,89494,89513,89522,89533,89538,89548,89553,89558,89563,89580,89584,89589,89596,89608,89612,89624,89628,89632,89637,89642,89649,89657,89665,89669],{"__ignoreMap":53},[58,89352,89353,89355,89357,89359],{"class":60,"line":61},[58,89354,51941],{"class":75},[58,89356,51944],{"class":71},[58,89358,51947],{"class":379},[58,89360,403],{"class":75},[58,89362,89363,89365,89367,89369,89371,89373],{"class":60,"line":68},[58,89364,373],{"class":75},[58,89366,51279],{"class":71},[58,89368,51958],{"class":379},[58,89370,383],{"class":75},[58,89372,51963],{"class":386},[58,89374,403],{"class":75},[58,89376,89377],{"class":60,"line":79},[58,89378,3046],{"emptyLinePlaceholder":720},[58,89380,89381,89383,89385],{"class":60,"line":105},[58,89382,373],{"class":75},[58,89384,51976],{"class":71},[58,89386,403],{"class":75},[58,89388,89389,89391,89393,89395,89397,89399],{"class":60,"line":627},[58,89390,52782],{"class":75},[58,89392,51986],{"class":71},[58,89394,51989],{"class":379},[58,89396,383],{"class":75},[58,89398,51994],{"class":386},[58,89400,403],{"class":75},[58,89402,89403,89405,89407,89409,89411,89413,89415,89417,89419],{"class":60,"line":509},[58,89404,52782],{"class":75},[58,89406,51986],{"class":71},[58,89408,15564],{"class":379},[58,89410,383],{"class":75},[58,89412,52033],{"class":386},[58,89414,52013],{"class":379},[58,89416,383],{"class":75},[58,89418,52040],{"class":386},[58,89420,403],{"class":75},[58,89422,89423,89425,89427,89429,89431],{"class":60,"line":559},[58,89424,52782],{"class":75},[58,89426,52049],{"class":71},[58,89428,52052],{"class":75},[58,89430,52049],{"class":71},[58,89432,403],{"class":75},[58,89434,89435,89437,89439],{"class":60,"line":654},[58,89436,52423],{"class":75},[58,89438,51976],{"class":71},[58,89440,403],{"class":75},[58,89442,89443],{"class":60,"line":671},[58,89444,3046],{"emptyLinePlaceholder":720},[58,89446,89447,89449,89451],{"class":60,"line":677},[58,89448,373],{"class":75},[58,89450,52438],{"class":71},[58,89452,403],{"class":75},[58,89454,89455,89457,89459,89461,89463],{"class":60,"line":2260},[58,89456,52782],{"class":75},[58,89458,175],{"class":71},[58,89460,54132],{"class":75},[58,89462,175],{"class":71},[58,89464,403],{"class":75},[58,89466,89467,89469,89471],{"class":60,"line":694},[58,89468,52782],{"class":75},[58,89470,52451],{"class":71},[58,89472,403],{"class":75},[58,89474,89475,89477,89480],{"class":60,"line":2270},[58,89476,70716],{"class":92},[58,89478,89479],{"class":379}," fn",[58,89481,11498],{"class":75},[58,89483,89484,89487],{"class":60,"line":2275},[58,89485,89486],{"class":92},"      try",[58,89488,76],{"class":75},[58,89490,89491],{"class":60,"line":2289},[58,89492,89493],{"class":64},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[58,89495,89496,89498,89500,89502,89504,89506,89508,89511],{"class":60,"line":2294},[58,89497,61902],{"class":92},[58,89499,7471],{"class":82},[58,89501,14208],{"class":92},[58,89503,55032],{"class":75},[58,89505,55035],{"class":379},[58,89507,793],{"class":75},[58,89509,89510],{"class":386},"'.p'",[58,89512,799],{"class":75},[58,89514,89515,89518,89520],{"class":60,"line":2300},[58,89516,89517],{"class":75},"        p.style.color ",[58,89519,383],{"class":92},[58,89521,67683],{"class":386},[58,89523,89524,89527,89530],{"class":60,"line":2321},[58,89525,89526],{"class":75},"      } ",[58,89528,89529],{"class":92},"catch",[58,89531,89532],{"class":75}," (err) {\n",[58,89534,89535],{"class":60,"line":2326},[58,89536,89537],{"class":64},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[58,89539,89540,89543,89545],{"class":60,"line":2340},[58,89541,89542],{"class":75},"        console.",[58,89544,58881],{"class":379},[58,89546,89547],{"class":75},"(err.message)\n",[58,89549,89550],{"class":60,"line":2345},[58,89551,89552],{"class":64},"        \u002F\u002F 想要中断程序，需要加return\n",[58,89554,89555],{"class":60,"line":2374},[58,89556,89557],{"class":64},"        \u002F\u002F return\n",[58,89559,89560],{"class":60,"line":2379},[58,89561,89562],{"class":64},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[58,89564,89565,89568,89570,89573,89575,89578],{"class":60,"line":2396},[58,89566,89567],{"class":92},"        throw",[58,89569,12223],{"class":92},[58,89571,89572],{"class":379}," Error",[58,89574,793],{"class":75},[58,89576,89577],{"class":386},"'你看看，选择器错误了吧'",[58,89579,799],{"class":75},[58,89581,89582],{"class":60,"line":2401},[58,89583,53036],{"class":75},[58,89585,89586],{"class":60,"line":2406},[58,89587,89588],{"class":64},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[58,89590,89591,89594],{"class":60,"line":2411},[58,89592,89593],{"class":92},"      finally",[58,89595,76],{"class":75},[58,89597,89598,89601,89603,89606],{"class":60,"line":2425},[58,89599,89600],{"class":379},"        alert",[58,89602,793],{"class":75},[58,89604,89605],{"class":386},"'弹出对话框'",[58,89607,799],{"class":75},[58,89609,89610],{"class":60,"line":2430},[58,89611,53036],{"class":75},[58,89613,89614,89616,89618,89620,89622],{"class":60,"line":3223},[58,89615,58878],{"class":75},[58,89617,58881],{"class":379},[58,89619,793],{"class":75},[58,89621,1258],{"class":82},[58,89623,799],{"class":75},[58,89625,89626],{"class":60,"line":3237},[58,89627,3046],{"emptyLinePlaceholder":720},[58,89629,89630],{"class":60,"line":3245},[58,89631,2833],{"class":75},[58,89633,89634],{"class":60,"line":3250},[58,89635,89636],{"class":64},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[58,89638,89639],{"class":60,"line":3256},[58,89640,89641],{"class":64},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[58,89643,89644,89647],{"class":60,"line":3262},[58,89645,89646],{"class":379},"    fn",[58,89648,2622],{"class":75},[58,89650,89651,89653,89655],{"class":60,"line":3267},[58,89652,53055],{"class":75},[58,89654,52451],{"class":71},[58,89656,403],{"class":75},[58,89658,89659,89661,89663],{"class":60,"line":8594},[58,89660,52423],{"class":75},[58,89662,52438],{"class":71},[58,89664,403],{"class":75},[58,89666,89667],{"class":60,"line":8618},[58,89668,3046],{"emptyLinePlaceholder":720},[58,89670,89671,89673,89675],{"class":60,"line":8623},[58,89672,52423],{"class":75},[58,89674,51279],{"class":71},[58,89676,403],{"class":75},[175,89678,89679],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[19,89681,89682],{"start":79},[22,89683,89684],{},"debugger",[175,89686,89687],{},[119,89688],{"alt":53,"src":89689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[175,89691,89692],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89694,89696],{"id":89695},"_416-处理this","4.16 处理this",[114,89698,89700],{"id":89699},"_4161-this的指向","4.16.1 this的指向",[19,89702,89703],{},[22,89704,89705],{},"普通函数的this",[175,89707,89708],{},[119,89709],{"alt":53,"src":89710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[19,89712,89713],{"start":68},[22,89714,89715],{},"箭头函数的this",[175,89717,89718],{},[119,89719],{"alt":53,"src":89720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[175,89722,89723],{},[119,89724],{"alt":53,"src":89725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[175,89727,89728],{},[119,89729],{"alt":53,"src":89730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[114,89732,89734],{"id":89733},"_4162-this的改变","4.16.2 this的改变",[175,89736,89737],{},"call() apply() bind()",[19,89739,89740],{},[22,89741,89742],{},"call()",[175,89744,89745],{},[119,89746],{"alt":53,"src":89747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[175,89749,89750],{},"两个作用：①调用函数；②改变this指向",[48,89752,89754],{"className":53705,"code":89753,"language":53707,"meta":53,"style":53},"\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",[55,89755,89756,89764,89772,89776,89781,89785,89790,89795,89800,89804,89809,89817],{"__ignoreMap":53},[58,89757,89758,89760,89762],{"class":60,"line":61},[58,89759,373],{"class":75},[58,89761,52438],{"class":71},[58,89763,403],{"class":75},[58,89765,89766,89768,89770],{"class":60,"line":68},[58,89767,52782],{"class":75},[58,89769,52451],{"class":71},[58,89771,403],{"class":75},[58,89773,89774],{"class":60,"line":79},[58,89775,72154],{"class":75},[58,89777,89778],{"class":60,"line":105},[58,89779,89780],{"class":75},"      uname: 'pink'\n",[58,89782,89783],{"class":60,"line":627},[58,89784,2833],{"class":75},[58,89786,89787],{"class":60,"line":509},[58,89788,89789],{"class":75},"    function fn(x, y) {\n",[58,89791,89792],{"class":60,"line":559},[58,89793,89794],{"class":75},"      console.log(this)  \u002F\u002Fwindow\n",[58,89796,89797],{"class":60,"line":654},[58,89798,89799],{"class":75},"      console.log(x + y)\n",[58,89801,89802],{"class":60,"line":671},[58,89803,2833],{"class":75},[58,89805,89806],{"class":60,"line":677},[58,89807,89808],{"class":75},"    fn.call(obj, 1, 2)\n",[58,89810,89811,89813,89815],{"class":60,"line":2260},[58,89812,53055],{"class":75},[58,89814,52451],{"class":71},[58,89816,403],{"class":75},[58,89818,89819,89821,89823],{"class":60,"line":694},[58,89820,52423],{"class":75},[58,89822,52438],{"class":71},[58,89824,403],{"class":75},[175,89826,89827],{},[119,89828],{"alt":53,"src":89829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[19,89831,89832],{"start":68},[22,89833,89834],{},"apply()",[175,89836,89837],{},[119,89838],{"alt":53,"src":89839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[175,89841,89750],{},[175,89843,89844],{},"call传递的是普通参数，而apply必须传递的是数组",[48,89846,89848],{"className":51277,"code":89847,"language":51279,"meta":53,"style":53},"\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",[55,89849,89850,89860,89874,89878,89886,89900,89920,89932,89940,89944,89952,89960,89970,89977,89981,89986,90002,90014,90028,90032,90037,90056,90061,90065,90070,90075,90083,90088,90110,90115,90131,90147,90159,90163,90168,90187,90195,90203,90207],{"__ignoreMap":53},[58,89851,89852,89854,89856,89858],{"class":60,"line":61},[58,89853,51941],{"class":75},[58,89855,51944],{"class":71},[58,89857,51947],{"class":379},[58,89859,403],{"class":75},[58,89861,89862,89864,89866,89868,89870,89872],{"class":60,"line":68},[58,89863,373],{"class":75},[58,89865,51279],{"class":71},[58,89867,51958],{"class":379},[58,89869,383],{"class":75},[58,89871,51963],{"class":386},[58,89873,403],{"class":75},[58,89875,89876],{"class":60,"line":79},[58,89877,3046],{"emptyLinePlaceholder":720},[58,89879,89880,89882,89884],{"class":60,"line":105},[58,89881,373],{"class":75},[58,89883,51976],{"class":71},[58,89885,403],{"class":75},[58,89887,89888,89890,89892,89894,89896,89898],{"class":60,"line":627},[58,89889,52782],{"class":75},[58,89891,51986],{"class":71},[58,89893,51989],{"class":379},[58,89895,383],{"class":75},[58,89897,51994],{"class":386},[58,89899,403],{"class":75},[58,89901,89902,89904,89906,89908,89910,89912,89914,89916,89918],{"class":60,"line":509},[58,89903,52782],{"class":75},[58,89905,51986],{"class":71},[58,89907,15564],{"class":379},[58,89909,383],{"class":75},[58,89911,52033],{"class":386},[58,89913,52013],{"class":379},[58,89915,383],{"class":75},[58,89917,52040],{"class":386},[58,89919,403],{"class":75},[58,89921,89922,89924,89926,89928,89930],{"class":60,"line":559},[58,89923,52782],{"class":75},[58,89925,52049],{"class":71},[58,89927,52052],{"class":75},[58,89929,52049],{"class":71},[58,89931,403],{"class":75},[58,89933,89934,89936,89938],{"class":60,"line":654},[58,89935,52423],{"class":75},[58,89937,51976],{"class":71},[58,89939,403],{"class":75},[58,89941,89942],{"class":60,"line":671},[58,89943,3046],{"emptyLinePlaceholder":720},[58,89945,89946,89948,89950],{"class":60,"line":677},[58,89947,373],{"class":75},[58,89949,52438],{"class":71},[58,89951,403],{"class":75},[58,89953,89954,89956,89958],{"class":60,"line":2260},[58,89955,52782],{"class":75},[58,89957,52451],{"class":71},[58,89959,403],{"class":75},[58,89961,89962,89964,89966,89968],{"class":60,"line":694},[58,89963,11866],{"class":92},[58,89965,70603],{"class":82},[58,89967,14208],{"class":92},[58,89969,76],{"class":75},[58,89971,89972,89974],{"class":60,"line":2270},[58,89973,72257],{"class":75},[58,89975,89976],{"class":82},"18\n",[58,89978,89979],{"class":60,"line":2275},[58,89980,2833],{"class":75},[58,89982,89983],{"class":60,"line":2289},[58,89984,89985],{"class":64},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[58,89987,89988,89990,89992,89994,89996,89998,90000],{"class":60,"line":2294},[58,89989,70716],{"class":92},[58,89991,89479],{"class":379},[58,89993,793],{"class":75},[58,89995,1605],{"class":5862},[58,89997,469],{"class":75},[58,89999,1630],{"class":5862},[58,90001,13086],{"class":75},[58,90003,90004,90006,90008,90010,90012],{"class":60,"line":2300},[58,90005,58878],{"class":75},[58,90007,58881],{"class":379},[58,90009,793],{"class":75},[58,90011,87622],{"class":82},[58,90013,799],{"class":75},[58,90015,90016,90018,90020,90023,90025],{"class":60,"line":2321},[58,90017,58878],{"class":75},[58,90019,58881],{"class":379},[58,90021,90022],{"class":75},"(x ",[58,90024,1267],{"class":92},[58,90026,90027],{"class":75}," y)\n",[58,90029,90030],{"class":60,"line":2326},[58,90031,2833],{"class":75},[58,90033,90034],{"class":60,"line":2340},[58,90035,90036],{"class":64},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[58,90038,90039,90042,90045,90048,90050,90052,90054],{"class":60,"line":2345},[58,90040,90041],{"class":75},"    fn.",[58,90043,90044],{"class":379},"apply",[58,90046,90047],{"class":75},"(obj, [",[58,90049,89],{"class":82},[58,90051,469],{"class":75},[58,90053,867],{"class":82},[58,90055,5303],{"class":75},[58,90057,90058],{"class":60,"line":2374},[58,90059,90060],{"class":64},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[58,90062,90063],{"class":60,"line":2379},[58,90064,3046],{"emptyLinePlaceholder":720},[58,90066,90067],{"class":60,"line":2396},[58,90068,90069],{"class":64},"    \u002F\u002F 使用场景：求数组最大值\n",[58,90071,90072],{"class":60,"line":2401},[58,90073,90074],{"class":64},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[58,90076,90077,90080],{"class":60,"line":2406},[58,90078,90079],{"class":64},"    \u002F\u002F console.log(max)",[58,90081,90082],{"class":64},"   \u002F\u002F3\n",[58,90084,90085],{"class":60,"line":2411},[58,90086,90087],{"class":64},"    \u002F\u002F 指向空或者Math都是可以的\n",[58,90089,90090,90092,90094,90096,90098,90100,90102,90104,90106,90108],{"class":60,"line":2425},[58,90091,11866],{"class":92},[58,90093,58329],{"class":82},[58,90095,14208],{"class":92},[58,90097,52864],{"class":75},[58,90099,1097],{"class":82},[58,90101,469],{"class":75},[58,90103,1290],{"class":82},[58,90105,469],{"class":75},[58,90107,1321],{"class":82},[58,90109,33890],{"class":75},[58,90111,90112],{"class":60,"line":2430},[58,90113,90114],{"class":64},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[58,90116,90117,90119,90121,90123,90126,90128],{"class":60,"line":3223},[58,90118,11866],{"class":92},[58,90120,6597],{"class":82},[58,90122,14208],{"class":92},[58,90124,90125],{"class":75}," Math.max.",[58,90127,90044],{"class":379},[58,90129,90130],{"class":75},"(Math, arr)\n",[58,90132,90133,90135,90138,90140,90143,90145],{"class":60,"line":3237},[58,90134,11866],{"class":92},[58,90136,90137],{"class":82}," min",[58,90139,14208],{"class":92},[58,90141,90142],{"class":75}," Math.min.",[58,90144,90044],{"class":379},[58,90146,90130],{"class":75},[58,90148,90149,90151,90153,90156],{"class":60,"line":3245},[58,90150,74384],{"class":75},[58,90152,58881],{"class":379},[58,90154,90155],{"class":75},"(max, min)     ",[58,90157,90158],{"class":64},"\u002F\u002F100,4\n",[58,90160,90161],{"class":60,"line":3250},[58,90162,3046],{"emptyLinePlaceholder":720},[58,90164,90165],{"class":60,"line":3256},[58,90166,90167],{"class":64},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[58,90169,90170,90172,90174,90177,90179,90181,90184],{"class":60,"line":3262},[58,90171,74384],{"class":75},[58,90173,58881],{"class":379},[58,90175,90176],{"class":75},"(Max.",[58,90178,6661],{"class":379},[58,90180,793],{"class":75},[58,90182,90183],{"class":92},"...",[58,90185,90186],{"class":75},"arr))\n",[58,90188,90189,90191,90193],{"class":60,"line":3267},[58,90190,53055],{"class":75},[58,90192,52451],{"class":71},[58,90194,403],{"class":75},[58,90196,90197,90199,90201],{"class":60,"line":8594},[58,90198,52423],{"class":75},[58,90200,52438],{"class":71},[58,90202,403],{"class":75},[58,90204,90205],{"class":60,"line":8618},[58,90206,3046],{"emptyLinePlaceholder":720},[58,90208,90209,90211,90213],{"class":60,"line":8623},[58,90210,52423],{"class":75},[58,90212,51279],{"class":71},[58,90214,403],{"class":75},[175,90216,90217],{},[119,90218],{"alt":53,"src":90219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[19,90221,90222],{"start":79},[22,90223,90224],{},"bind()",[175,90226,90227],{},[119,90228],{"alt":53,"src":90229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[175,90231,90232],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[175,90234,90235],{},"bind的语法跟call很相似",[48,90237,90239],{"className":53705,"code":90238,"language":53707,"meta":53,"style":53},"\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",[55,90240,90241,90249,90257,90261,90266,90270,90274,90279,90283,90288,90293,90298,90303,90308,90313,90318,90322,90330],{"__ignoreMap":53},[58,90242,90243,90245,90247],{"class":60,"line":61},[58,90244,373],{"class":75},[58,90246,52438],{"class":71},[58,90248,403],{"class":75},[58,90250,90251,90253,90255],{"class":60,"line":68},[58,90252,52782],{"class":75},[58,90254,52451],{"class":71},[58,90256,403],{"class":75},[58,90258,90259],{"class":60,"line":79},[58,90260,72154],{"class":75},[58,90262,90263],{"class":60,"line":105},[58,90264,90265],{"class":75},"      age: 18\n",[58,90267,90268],{"class":60,"line":627},[58,90269,2833],{"class":75},[58,90271,90272],{"class":60,"line":509},[58,90273,77774],{"class":75},[58,90275,90276],{"class":60,"line":559},[58,90277,90278],{"class":75},"      console.log(this)\n",[58,90280,90281],{"class":60,"line":654},[58,90282,2833],{"class":75},[58,90284,90285],{"class":60,"line":671},[58,90286,90287],{"class":75},"    \u002F\u002F 1.bind 不会调用函数\n",[58,90289,90290],{"class":60,"line":677},[58,90291,90292],{"class":75},"    \u002F\u002F 2.bind能改变this的指向\n",[58,90294,90295],{"class":60,"line":2260},[58,90296,90297],{"class":75},"    fn.bind()\n",[58,90299,90300],{"class":60,"line":694},[58,90301,90302],{"class":75},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[58,90304,90305],{"class":60,"line":2270},[58,90306,90307],{"class":75},"    const fun = fn.bind(obj)\n",[58,90309,90310],{"class":60,"line":2275},[58,90311,90312],{"class":75},"    \u002F\u002F console.log(fun)\n",[58,90314,90315],{"class":60,"line":2289},[58,90316,90317],{"class":75},"    \u002F\u002F 调用,查看this的指向\n",[58,90319,90320],{"class":60,"line":2294},[58,90321,53289],{"class":75},[58,90323,90324,90326,90328],{"class":60,"line":2300},[58,90325,53055],{"class":75},[58,90327,52451],{"class":71},[58,90329,403],{"class":75},[58,90331,90332,90334,90336],{"class":60,"line":2321},[58,90333,52423],{"class":75},[58,90335,52438],{"class":71},[58,90337,403],{"class":75},[175,90339,90340],{},[119,90341],{"alt":53,"src":90342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[19,90344,90345],{"start":105},[22,90346,90347],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[48,90349,90351],{"className":53705,"code":90350,"language":53707,"meta":53,"style":53},"\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",[55,90352,90353,90361,90374,90382,90387,90391,90396,90401,90406,90411,90416,90421,90426,90431,90435,90443],{"__ignoreMap":53},[58,90354,90355,90357,90359],{"class":60,"line":61},[58,90356,373],{"class":75},[58,90358,52438],{"class":71},[58,90360,403],{"class":75},[58,90362,90363,90365,90367,90370,90372],{"class":60,"line":68},[58,90364,52782],{"class":75},[58,90366,54523],{"class":71},[58,90368,90369],{"class":75},">禁用\u003C\u002F",[58,90371,54523],{"class":71},[58,90373,403],{"class":75},[58,90375,90376,90378,90380],{"class":60,"line":79},[58,90377,52782],{"class":75},[58,90379,52451],{"class":71},[58,90381,403],{"class":75},[58,90383,90384],{"class":60,"line":105},[58,90385,90386],{"class":75},"    const btn = document.querySelector('button')\n",[58,90388,90389],{"class":60,"line":627},[58,90390,59650],{"class":75},[58,90392,90393],{"class":60,"line":509},[58,90394,90395],{"class":75},"      this.disabled = true\n",[58,90397,90398],{"class":60,"line":559},[58,90399,90400],{"class":75},"      \u002F\u002F 定时器是window进行调用的\n",[58,90402,90403],{"class":60,"line":654},[58,90404,90405],{"class":75},"      setTimeout(function () {\n",[58,90407,90408],{"class":60,"line":671},[58,90409,90410],{"class":75},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[58,90412,90413],{"class":60,"line":677},[58,90414,90415],{"class":75},"        this.disabled = false\n",[58,90417,90418],{"class":60,"line":2260},[58,90419,90420],{"class":75},"      }.bind(this), 2000)\n",[58,90422,90423],{"class":60,"line":694},[58,90424,90425],{"class":75},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[58,90427,90428],{"class":60,"line":2270},[58,90429,90430],{"class":75},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[58,90432,90433],{"class":60,"line":2275},[58,90434,34105],{"class":75},[58,90436,90437,90439,90441],{"class":60,"line":2289},[58,90438,53055],{"class":75},[58,90440,52451],{"class":71},[58,90442,403],{"class":75},[58,90444,90445,90447,90449],{"class":60,"line":2294},[58,90446,52423],{"class":75},[58,90448,52438],{"class":71},[58,90450,403],{"class":75},[19,90452,90453],{"start":627},[22,90454,22596],{},[175,90456,90457],{},[119,90458],{"alt":53,"src":90459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,90461,90463],{"id":90462},"_417-性能优化","4.17 性能优化",[114,90465,90467],{"id":90466},"_4171-防抖","4.17.1 防抖",[175,90469,90470],{},[119,90471],{"alt":53,"src":90472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[175,90474,90475],{},[25,90476,90477],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[175,90479,90480],{},"防抖实现方式：",[124,90482,90483],{},[22,90484,90485],{},"lodash 提供了防抖处理",[175,90487,90488],{},"_.debounce(func,[wait=0],[options={}])",[175,90490,90491],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[48,90493,90495],{"className":51277,"code":90494,"language":51279,"meta":53,"style":53},"\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",[55,90496,90497,90507,90521,90525,90533,90547,90567,90579,90587,90593,90603,90615,90627,90638,90650,90660,90670,90683,90687,90695,90703,90707,90715,90733,90751,90759,90778,90788,90797,90808,90813,90817,90822,90827,90832,90857,90865,90873,90877],{"__ignoreMap":53},[58,90498,90499,90501,90503,90505],{"class":60,"line":61},[58,90500,51941],{"class":75},[58,90502,51944],{"class":71},[58,90504,51947],{"class":379},[58,90506,403],{"class":75},[58,90508,90509,90511,90513,90515,90517,90519],{"class":60,"line":68},[58,90510,373],{"class":75},[58,90512,51279],{"class":71},[58,90514,51958],{"class":379},[58,90516,383],{"class":75},[58,90518,51963],{"class":386},[58,90520,403],{"class":75},[58,90522,90523],{"class":60,"line":79},[58,90524,3046],{"emptyLinePlaceholder":720},[58,90526,90527,90529,90531],{"class":60,"line":105},[58,90528,373],{"class":75},[58,90530,51976],{"class":71},[58,90532,403],{"class":75},[58,90534,90535,90537,90539,90541,90543,90545],{"class":60,"line":627},[58,90536,52782],{"class":75},[58,90538,51986],{"class":71},[58,90540,51989],{"class":379},[58,90542,383],{"class":75},[58,90544,51994],{"class":386},[58,90546,403],{"class":75},[58,90548,90549,90551,90553,90555,90557,90559,90561,90563,90565],{"class":60,"line":509},[58,90550,52782],{"class":75},[58,90552,51986],{"class":71},[58,90554,15564],{"class":379},[58,90556,383],{"class":75},[58,90558,52033],{"class":386},[58,90560,52013],{"class":379},[58,90562,383],{"class":75},[58,90564,52040],{"class":386},[58,90566,403],{"class":75},[58,90568,90569,90571,90573,90575,90577],{"class":60,"line":559},[58,90570,52782],{"class":75},[58,90572,52049],{"class":71},[58,90574,52052],{"class":75},[58,90576,52049],{"class":71},[58,90578,403],{"class":75},[58,90580,90581,90583,90585],{"class":60,"line":654},[58,90582,52782],{"class":75},[58,90584,702],{"class":71},[58,90586,403],{"class":75},[58,90588,90589,90591],{"class":60,"line":671},[58,90590,55388],{"class":379},[58,90592,76],{"class":75},[58,90594,90595,90597,90599,90601],{"class":60,"line":677},[58,90596,73227],{"class":82},[58,90598,86],{"class":75},[58,90600,61139],{"class":82},[58,90602,102],{"class":75},[58,90604,90605,90607,90609,90611,90613],{"class":60,"line":2260},[58,90606,55406],{"class":82},[58,90608,86],{"class":75},[58,90610,2369],{"class":82},[58,90612,93],{"class":92},[58,90614,102],{"class":75},[58,90616,90617,90619,90621,90623,90625],{"class":60,"line":694},[58,90618,55420],{"class":82},[58,90620,86],{"class":75},[58,90622,2369],{"class":82},[58,90624,93],{"class":92},[58,90626,102],{"class":75},[58,90628,90629,90631,90633,90636],{"class":60,"line":2270},[58,90630,55518],{"class":82},[58,90632,86],{"class":75},[58,90634,90635],{"class":82},"gray",[58,90637,102],{"class":75},[58,90639,90640,90642,90644,90646,90648],{"class":60,"line":2275},[58,90641,55556],{"class":82},[58,90643,86],{"class":75},[58,90645,1610],{"class":82},[58,90647,93],{"class":92},[58,90649,102],{"class":75},[58,90651,90652,90654,90656,90658],{"class":60,"line":2289},[58,90653,58050],{"class":82},[58,90655,86],{"class":75},[58,90657,61476],{"class":82},[58,90659,102],{"class":75},[58,90661,90662,90664,90666,90668],{"class":60,"line":2294},[58,90663,57920],{"class":82},[58,90665,86],{"class":75},[58,90667,52231],{"class":82},[58,90669,102],{"class":75},[58,90671,90672,90675,90677,90679,90681],{"class":60,"line":2300},[58,90673,90674],{"class":82},"      padding-top",[58,90676,86],{"class":75},[58,90678,1105],{"class":82},[58,90680,93],{"class":92},[58,90682,102],{"class":75},[58,90684,90685],{"class":60,"line":2321},[58,90686,2833],{"class":75},[58,90688,90689,90691,90693],{"class":60,"line":2326},[58,90690,53055],{"class":75},[58,90692,702],{"class":71},[58,90694,403],{"class":75},[58,90696,90697,90699,90701],{"class":60,"line":2340},[58,90698,52423],{"class":75},[58,90700,51976],{"class":71},[58,90702,403],{"class":75},[58,90704,90705],{"class":60,"line":2345},[58,90706,3046],{"emptyLinePlaceholder":720},[58,90708,90709,90711,90713],{"class":60,"line":2374},[58,90710,373],{"class":75},[58,90712,52438],{"class":71},[58,90714,403],{"class":75},[58,90716,90717,90719,90721,90723,90725,90727,90729,90731],{"class":60,"line":2379},[58,90718,52782],{"class":75},[58,90720,72],{"class":71},[58,90722,54124],{"class":379},[58,90724,383],{"class":75},[58,90726,54129],{"class":386},[58,90728,55948],{"class":75},[58,90730,72],{"class":71},[58,90732,403],{"class":75},[58,90734,90735,90737,90739,90741,90743,90745,90747,90749],{"class":60,"line":2396},[58,90736,52782],{"class":75},[58,90738,52451],{"class":71},[58,90740,55873],{"class":379},[58,90742,383],{"class":75},[58,90744,88903],{"class":386},[58,90746,55948],{"class":75},[58,90748,52451],{"class":71},[58,90750,403],{"class":75},[58,90752,90753,90755,90757],{"class":60,"line":2401},[58,90754,52782],{"class":75},[58,90756,52451],{"class":71},[58,90758,403],{"class":75},[58,90760,90761,90763,90765,90767,90769,90771,90773,90776],{"class":60,"line":2406},[58,90762,11866],{"class":92},[58,90764,87562],{"class":82},[58,90766,14208],{"class":92},[58,90768,55032],{"class":75},[58,90770,55035],{"class":379},[58,90772,793],{"class":75},[58,90774,90775],{"class":386},"'.box'",[58,90777,799],{"class":75},[58,90779,90780,90782,90784,90786],{"class":60,"line":2411},[58,90781,52857],{"class":92},[58,90783,10083],{"class":75},[58,90785,383],{"class":92},[58,90787,47977],{"class":82},[58,90789,90790,90792,90795],{"class":60,"line":2425},[58,90791,70716],{"class":92},[58,90793,90794],{"class":379}," mouseMove",[58,90796,11498],{"class":75},[58,90798,90799,90802,90804,90806],{"class":60,"line":2430},[58,90800,90801],{"class":75},"      box.innerHTML ",[58,90803,383],{"class":92},[58,90805,3678],{"class":75},[58,90807,3348],{"class":92},[58,90809,90810],{"class":60,"line":3223},[58,90811,90812],{"class":64},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[58,90814,90815],{"class":60,"line":3237},[58,90816,2833],{"class":75},[58,90818,90819],{"class":60,"line":3245},[58,90820,90821],{"class":64},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[58,90823,90824],{"class":60,"line":3250},[58,90825,90826],{"class":64},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[58,90828,90829],{"class":60,"line":3256},[58,90830,90831],{"class":64},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[58,90833,90834,90837,90839,90841,90844,90847,90850,90853,90855],{"class":60,"line":3262},[58,90835,90836],{"class":75},"    box.",[58,90838,58447],{"class":379},[58,90840,793],{"class":75},[58,90842,90843],{"class":386},"'mousemove'",[58,90845,90846],{"class":75},", _.",[58,90848,90849],{"class":379},"debounce",[58,90851,90852],{"class":75},"(mouseMove, ",[58,90854,65706],{"class":82},[58,90856,31141],{"class":75},[58,90858,90859,90861,90863],{"class":60,"line":3267},[58,90860,53055],{"class":75},[58,90862,52451],{"class":71},[58,90864,403],{"class":75},[58,90866,90867,90869,90871],{"class":60,"line":8594},[58,90868,52423],{"class":75},[58,90870,52438],{"class":71},[58,90872,403],{"class":75},[58,90874,90875],{"class":60,"line":8618},[58,90876,3046],{"emptyLinePlaceholder":720},[58,90878,90879,90881,90883],{"class":60,"line":8623},[58,90880,52423],{"class":75},[58,90882,51279],{"class":71},[58,90884,403],{"class":75},[124,90886,90887],{},[22,90888,90889],{},"手写一个防抖函数来处理",[175,90891,90892],{},"防抖的核心就是利用定时器来实现的：",[175,90894,90895],{},"①声明一个定时器变量",[175,90897,90898],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[175,90900,90901],{},"③如果没有定时器则开启定时器，记得存到变量里面",[48,90903,90905],{"className":51277,"code":90904,"language":51279,"meta":53,"style":53},"\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",[55,90906,90907,90917,90931,90935,90943,90957,90977,90989,90997,91003,91013,91025,91037,91047,91059,91069,91079,91091,91095,91103,91111,91115,91123,91141,91159,91167,91185,91195,91203,91213,91217,91221,91225,91230,91235,91240,91245,91250,91255,91273,91280,91285,91293,91298,91311,91327,91337,91342,91346,91350,91370,91374,91379,91384,91389,91394,91402,91410,91414],{"__ignoreMap":53},[58,90908,90909,90911,90913,90915],{"class":60,"line":61},[58,90910,51941],{"class":75},[58,90912,51944],{"class":71},[58,90914,51947],{"class":379},[58,90916,403],{"class":75},[58,90918,90919,90921,90923,90925,90927,90929],{"class":60,"line":68},[58,90920,373],{"class":75},[58,90922,51279],{"class":71},[58,90924,51958],{"class":379},[58,90926,383],{"class":75},[58,90928,51963],{"class":386},[58,90930,403],{"class":75},[58,90932,90933],{"class":60,"line":79},[58,90934,3046],{"emptyLinePlaceholder":720},[58,90936,90937,90939,90941],{"class":60,"line":105},[58,90938,373],{"class":75},[58,90940,51976],{"class":71},[58,90942,403],{"class":75},[58,90944,90945,90947,90949,90951,90953,90955],{"class":60,"line":627},[58,90946,52782],{"class":75},[58,90948,51986],{"class":71},[58,90950,51989],{"class":379},[58,90952,383],{"class":75},[58,90954,51994],{"class":386},[58,90956,403],{"class":75},[58,90958,90959,90961,90963,90965,90967,90969,90971,90973,90975],{"class":60,"line":509},[58,90960,52782],{"class":75},[58,90962,51986],{"class":71},[58,90964,15564],{"class":379},[58,90966,383],{"class":75},[58,90968,52033],{"class":386},[58,90970,52013],{"class":379},[58,90972,383],{"class":75},[58,90974,52040],{"class":386},[58,90976,403],{"class":75},[58,90978,90979,90981,90983,90985,90987],{"class":60,"line":559},[58,90980,52782],{"class":75},[58,90982,52049],{"class":71},[58,90984,52052],{"class":75},[58,90986,52049],{"class":71},[58,90988,403],{"class":75},[58,90990,90991,90993,90995],{"class":60,"line":654},[58,90992,52782],{"class":75},[58,90994,702],{"class":71},[58,90996,403],{"class":75},[58,90998,90999,91001],{"class":60,"line":671},[58,91000,55388],{"class":379},[58,91002,76],{"class":75},[58,91004,91005,91007,91009,91011],{"class":60,"line":677},[58,91006,73227],{"class":82},[58,91008,86],{"class":75},[58,91010,61139],{"class":82},[58,91012,102],{"class":75},[58,91014,91015,91017,91019,91021,91023],{"class":60,"line":2260},[58,91016,55406],{"class":82},[58,91018,86],{"class":75},[58,91020,2369],{"class":82},[58,91022,93],{"class":92},[58,91024,102],{"class":75},[58,91026,91027,91029,91031,91033,91035],{"class":60,"line":694},[58,91028,55420],{"class":82},[58,91030,86],{"class":75},[58,91032,2369],{"class":82},[58,91034,93],{"class":92},[58,91036,102],{"class":75},[58,91038,91039,91041,91043,91045],{"class":60,"line":2270},[58,91040,55518],{"class":82},[58,91042,86],{"class":75},[58,91044,90635],{"class":82},[58,91046,102],{"class":75},[58,91048,91049,91051,91053,91055,91057],{"class":60,"line":2275},[58,91050,55556],{"class":82},[58,91052,86],{"class":75},[58,91054,1610],{"class":82},[58,91056,93],{"class":92},[58,91058,102],{"class":75},[58,91060,91061,91063,91065,91067],{"class":60,"line":2289},[58,91062,58050],{"class":82},[58,91064,86],{"class":75},[58,91066,61476],{"class":82},[58,91068,102],{"class":75},[58,91070,91071,91073,91075,91077],{"class":60,"line":2294},[58,91072,57920],{"class":82},[58,91074,86],{"class":75},[58,91076,52231],{"class":82},[58,91078,102],{"class":75},[58,91080,91081,91083,91085,91087,91089],{"class":60,"line":2300},[58,91082,90674],{"class":82},[58,91084,86],{"class":75},[58,91086,1105],{"class":82},[58,91088,93],{"class":92},[58,91090,102],{"class":75},[58,91092,91093],{"class":60,"line":2321},[58,91094,2833],{"class":75},[58,91096,91097,91099,91101],{"class":60,"line":2326},[58,91098,53055],{"class":75},[58,91100,702],{"class":71},[58,91102,403],{"class":75},[58,91104,91105,91107,91109],{"class":60,"line":2340},[58,91106,52423],{"class":75},[58,91108,51976],{"class":71},[58,91110,403],{"class":75},[58,91112,91113],{"class":60,"line":2345},[58,91114,3046],{"emptyLinePlaceholder":720},[58,91116,91117,91119,91121],{"class":60,"line":2374},[58,91118,373],{"class":75},[58,91120,52438],{"class":71},[58,91122,403],{"class":75},[58,91124,91125,91127,91129,91131,91133,91135,91137,91139],{"class":60,"line":2379},[58,91126,52782],{"class":75},[58,91128,72],{"class":71},[58,91130,54124],{"class":379},[58,91132,383],{"class":75},[58,91134,54129],{"class":386},[58,91136,55948],{"class":75},[58,91138,72],{"class":71},[58,91140,403],{"class":75},[58,91142,91143,91145,91147,91149,91151,91153,91155,91157],{"class":60,"line":2396},[58,91144,52782],{"class":75},[58,91146,52451],{"class":71},[58,91148,55873],{"class":379},[58,91150,383],{"class":75},[58,91152,88903],{"class":386},[58,91154,55948],{"class":75},[58,91156,52451],{"class":71},[58,91158,403],{"class":75},[58,91160,91161,91163,91165],{"class":60,"line":2401},[58,91162,52782],{"class":75},[58,91164,52451],{"class":71},[58,91166,403],{"class":75},[58,91168,91169,91171,91173,91175,91177,91179,91181,91183],{"class":60,"line":2406},[58,91170,11866],{"class":92},[58,91172,87562],{"class":82},[58,91174,14208],{"class":92},[58,91176,55032],{"class":75},[58,91178,55035],{"class":379},[58,91180,793],{"class":75},[58,91182,90775],{"class":386},[58,91184,799],{"class":75},[58,91186,91187,91189,91191,91193],{"class":60,"line":2411},[58,91188,52857],{"class":92},[58,91190,10083],{"class":75},[58,91192,383],{"class":92},[58,91194,47977],{"class":82},[58,91196,91197,91199,91201],{"class":60,"line":2425},[58,91198,70716],{"class":92},[58,91200,90794],{"class":379},[58,91202,11498],{"class":75},[58,91204,91205,91207,91209,91211],{"class":60,"line":2430},[58,91206,90801],{"class":75},[58,91208,383],{"class":92},[58,91210,3678],{"class":75},[58,91212,3348],{"class":92},[58,91214,91215],{"class":60,"line":3223},[58,91216,90812],{"class":64},[58,91218,91219],{"class":60,"line":3237},[58,91220,2833],{"class":75},[58,91222,91223],{"class":60,"line":3245},[58,91224,90821],{"class":64},[58,91226,91227],{"class":60,"line":3250},[58,91228,91229],{"class":64},"    \u002F\u002F 手写防抖函数\n",[58,91231,91232],{"class":60,"line":3256},[58,91233,91234],{"class":64},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[58,91236,91237],{"class":60,"line":3262},[58,91238,91239],{"class":64},"    \u002F\u002F 1.声明定时器变量\n",[58,91241,91242],{"class":60,"line":3267},[58,91243,91244],{"class":64},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[58,91246,91247],{"class":60,"line":8594},[58,91248,91249],{"class":64},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[58,91251,91252],{"class":60,"line":8618},[58,91253,91254],{"class":64},"    \u002F\u002F 4.定时器里面写函数调用\n",[58,91256,91257,91259,91262,91264,91267,91269,91271],{"class":60,"line":8623},[58,91258,70716],{"class":92},[58,91260,91261],{"class":379}," debounce",[58,91263,793],{"class":75},[58,91265,91266],{"class":5862},"fn",[58,91268,469],{"class":75},[58,91270,1506],{"class":5862},[58,91272,13086],{"class":75},[58,91274,91275,91277],{"class":60,"line":8629},[58,91276,80403],{"class":92},[58,91278,91279],{"class":75}," timer\n",[58,91281,91282],{"class":60,"line":8656},[58,91283,91284],{"class":64},"      \u002F\u002F return 返回一个匿名函数\n",[58,91286,91287,91289,91291],{"class":60,"line":8661},[58,91288,74613],{"class":92},[58,91290,59552],{"class":92},[58,91292,55088],{"class":75},[58,91294,91295],{"class":60,"line":8667},[58,91296,91297],{"class":64},"        \u002F\u002F 这里边写第二三四步\n",[58,91299,91300,91302,91305,91308],{"class":60,"line":8679},[58,91301,3143],{"class":92},[58,91303,91304],{"class":75}," (timer) ",[58,91306,91307],{"class":379},"clearTimeout",[58,91309,91310],{"class":75},"(timer)\n",[58,91312,91313,91316,91318,91321,91323,91325],{"class":60,"line":8691},[58,91314,91315],{"class":75},"        timer ",[58,91317,383],{"class":92},[58,91319,91320],{"class":379}," setTimeout",[58,91322,793],{"class":75},[58,91324,55085],{"class":92},[58,91326,55088],{"class":75},[58,91328,91329,91332,91334],{"class":60,"line":8703},[58,91330,91331],{"class":379},"          fn",[58,91333,13694],{"class":75},[58,91335,91336],{"class":64},"\u002F\u002F加小括号调用fn }, t)\n",[58,91338,91339],{"class":60,"line":10361},[58,91340,91341],{"class":75},"        }, t)\n",[58,91343,91344],{"class":60,"line":10386},[58,91345,53036],{"class":75},[58,91347,91348],{"class":60,"line":10409},[58,91349,2833],{"class":75},[58,91351,91352,91354,91356,91358,91360,91362,91364,91366,91368],{"class":60,"line":10433},[58,91353,90836],{"class":75},[58,91355,58447],{"class":379},[58,91357,793],{"class":75},[58,91359,90843],{"class":386},[58,91361,469],{"class":75},[58,91363,90849],{"class":379},[58,91365,90852],{"class":75},[58,91367,65706],{"class":82},[58,91369,31141],{"class":75},[58,91371,91372],{"class":60,"line":10438},[58,91373,3046],{"emptyLinePlaceholder":720},[58,91375,91376],{"class":60,"line":10443},[58,91377,91378],{"class":64},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[58,91380,91381],{"class":60,"line":10448},[58,91382,91383],{"class":64},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[58,91385,91386],{"class":60,"line":10457},[58,91387,91388],{"class":64},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[58,91390,91391],{"class":60,"line":10462},[58,91392,91393],{"class":64},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[58,91395,91396,91398,91400],{"class":60,"line":10468},[58,91397,53055],{"class":75},[58,91399,52451],{"class":71},[58,91401,403],{"class":75},[58,91403,91404,91406,91408],{"class":60,"line":10489},[58,91405,52423],{"class":75},[58,91407,52438],{"class":71},[58,91409,403],{"class":75},[58,91411,91412],{"class":60,"line":10495},[58,91413,3046],{"emptyLinePlaceholder":720},[58,91415,91416,91418,91420],{"class":60,"line":10509},[58,91417,52423],{"class":75},[58,91419,51279],{"class":71},[58,91421,403],{"class":75},[114,91423,91425],{"id":91424},"_4172-节流","4.17.2 节流",[175,91427,91428],{},[119,91429],{"alt":53,"src":91430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[175,91432,91433],{},[119,91434],{"alt":53,"src":91435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[175,91437,91438],{},[25,91439,91440],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[175,91442,91443],{},"实现方式：",[124,91445,91446],{},[22,91447,91448],{},"lodash 提供的节流函数来处理",[175,91450,91451],{},"_.throttle(func,[wait=0],[options=])",[175,91453,91454],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[48,91456,91458],{"className":51277,"code":91457,"language":51279,"meta":53,"style":53},"\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",[55,91459,91460,91470,91484,91488,91496,91510,91530,91542,91550,91556,91566,91578,91590,91600,91612,91622,91632,91644,91648,91656,91664,91668,91676,91694,91712,91720,91738,91748,91756,91766,91770,91774,91778,91783,91788,91809,91817,91825,91829],{"__ignoreMap":53},[58,91461,91462,91464,91466,91468],{"class":60,"line":61},[58,91463,51941],{"class":75},[58,91465,51944],{"class":71},[58,91467,51947],{"class":379},[58,91469,403],{"class":75},[58,91471,91472,91474,91476,91478,91480,91482],{"class":60,"line":68},[58,91473,373],{"class":75},[58,91475,51279],{"class":71},[58,91477,51958],{"class":379},[58,91479,383],{"class":75},[58,91481,51963],{"class":386},[58,91483,403],{"class":75},[58,91485,91486],{"class":60,"line":79},[58,91487,3046],{"emptyLinePlaceholder":720},[58,91489,91490,91492,91494],{"class":60,"line":105},[58,91491,373],{"class":75},[58,91493,51976],{"class":71},[58,91495,403],{"class":75},[58,91497,91498,91500,91502,91504,91506,91508],{"class":60,"line":627},[58,91499,52782],{"class":75},[58,91501,51986],{"class":71},[58,91503,51989],{"class":379},[58,91505,383],{"class":75},[58,91507,51994],{"class":386},[58,91509,403],{"class":75},[58,91511,91512,91514,91516,91518,91520,91522,91524,91526,91528],{"class":60,"line":509},[58,91513,52782],{"class":75},[58,91515,51986],{"class":71},[58,91517,15564],{"class":379},[58,91519,383],{"class":75},[58,91521,52033],{"class":386},[58,91523,52013],{"class":379},[58,91525,383],{"class":75},[58,91527,52040],{"class":386},[58,91529,403],{"class":75},[58,91531,91532,91534,91536,91538,91540],{"class":60,"line":559},[58,91533,52782],{"class":75},[58,91535,52049],{"class":71},[58,91537,52052],{"class":75},[58,91539,52049],{"class":71},[58,91541,403],{"class":75},[58,91543,91544,91546,91548],{"class":60,"line":654},[58,91545,52782],{"class":75},[58,91547,702],{"class":71},[58,91549,403],{"class":75},[58,91551,91552,91554],{"class":60,"line":671},[58,91553,55388],{"class":379},[58,91555,76],{"class":75},[58,91557,91558,91560,91562,91564],{"class":60,"line":677},[58,91559,73227],{"class":82},[58,91561,86],{"class":75},[58,91563,61139],{"class":82},[58,91565,102],{"class":75},[58,91567,91568,91570,91572,91574,91576],{"class":60,"line":2260},[58,91569,55406],{"class":82},[58,91571,86],{"class":75},[58,91573,2369],{"class":82},[58,91575,93],{"class":92},[58,91577,102],{"class":75},[58,91579,91580,91582,91584,91586,91588],{"class":60,"line":694},[58,91581,55420],{"class":82},[58,91583,86],{"class":75},[58,91585,2369],{"class":82},[58,91587,93],{"class":92},[58,91589,102],{"class":75},[58,91591,91592,91594,91596,91598],{"class":60,"line":2270},[58,91593,55518],{"class":82},[58,91595,86],{"class":75},[58,91597,90635],{"class":82},[58,91599,102],{"class":75},[58,91601,91602,91604,91606,91608,91610],{"class":60,"line":2275},[58,91603,55556],{"class":82},[58,91605,86],{"class":75},[58,91607,1610],{"class":82},[58,91609,93],{"class":92},[58,91611,102],{"class":75},[58,91613,91614,91616,91618,91620],{"class":60,"line":2289},[58,91615,58050],{"class":82},[58,91617,86],{"class":75},[58,91619,61476],{"class":82},[58,91621,102],{"class":75},[58,91623,91624,91626,91628,91630],{"class":60,"line":2294},[58,91625,57920],{"class":82},[58,91627,86],{"class":75},[58,91629,52231],{"class":82},[58,91631,102],{"class":75},[58,91633,91634,91636,91638,91640,91642],{"class":60,"line":2300},[58,91635,90674],{"class":82},[58,91637,86],{"class":75},[58,91639,1105],{"class":82},[58,91641,93],{"class":92},[58,91643,102],{"class":75},[58,91645,91646],{"class":60,"line":2321},[58,91647,2833],{"class":75},[58,91649,91650,91652,91654],{"class":60,"line":2326},[58,91651,53055],{"class":75},[58,91653,702],{"class":71},[58,91655,403],{"class":75},[58,91657,91658,91660,91662],{"class":60,"line":2340},[58,91659,52423],{"class":75},[58,91661,51976],{"class":71},[58,91663,403],{"class":75},[58,91665,91666],{"class":60,"line":2345},[58,91667,3046],{"emptyLinePlaceholder":720},[58,91669,91670,91672,91674],{"class":60,"line":2374},[58,91671,373],{"class":75},[58,91673,52438],{"class":71},[58,91675,403],{"class":75},[58,91677,91678,91680,91682,91684,91686,91688,91690,91692],{"class":60,"line":2379},[58,91679,52782],{"class":75},[58,91681,72],{"class":71},[58,91683,54124],{"class":379},[58,91685,383],{"class":75},[58,91687,54129],{"class":386},[58,91689,55948],{"class":75},[58,91691,72],{"class":71},[58,91693,403],{"class":75},[58,91695,91696,91698,91700,91702,91704,91706,91708,91710],{"class":60,"line":2396},[58,91697,52782],{"class":75},[58,91699,52451],{"class":71},[58,91701,55873],{"class":379},[58,91703,383],{"class":75},[58,91705,88903],{"class":386},[58,91707,55948],{"class":75},[58,91709,52451],{"class":71},[58,91711,403],{"class":75},[58,91713,91714,91716,91718],{"class":60,"line":2401},[58,91715,52782],{"class":75},[58,91717,52451],{"class":71},[58,91719,403],{"class":75},[58,91721,91722,91724,91726,91728,91730,91732,91734,91736],{"class":60,"line":2406},[58,91723,11866],{"class":92},[58,91725,87562],{"class":82},[58,91727,14208],{"class":92},[58,91729,55032],{"class":75},[58,91731,55035],{"class":379},[58,91733,793],{"class":75},[58,91735,90775],{"class":386},[58,91737,799],{"class":75},[58,91739,91740,91742,91744,91746],{"class":60,"line":2411},[58,91741,52857],{"class":92},[58,91743,10083],{"class":75},[58,91745,383],{"class":92},[58,91747,47977],{"class":82},[58,91749,91750,91752,91754],{"class":60,"line":2425},[58,91751,70716],{"class":92},[58,91753,90794],{"class":379},[58,91755,11498],{"class":75},[58,91757,91758,91760,91762,91764],{"class":60,"line":2430},[58,91759,90801],{"class":75},[58,91761,383],{"class":92},[58,91763,3678],{"class":75},[58,91765,3348],{"class":92},[58,91767,91768],{"class":60,"line":3223},[58,91769,90812],{"class":64},[58,91771,91772],{"class":60,"line":3237},[58,91773,2833],{"class":75},[58,91775,91776],{"class":60,"line":3245},[58,91777,90821],{"class":64},[58,91779,91780],{"class":60,"line":3250},[58,91781,91782],{"class":64},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[58,91784,91785],{"class":60,"line":3256},[58,91786,91787],{"class":64},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[58,91789,91790,91792,91794,91796,91798,91800,91803,91805,91807],{"class":60,"line":3262},[58,91791,90836],{"class":75},[58,91793,58447],{"class":379},[58,91795,793],{"class":75},[58,91797,90843],{"class":386},[58,91799,90846],{"class":75},[58,91801,91802],{"class":379},"throttle",[58,91804,90852],{"class":75},[58,91806,65706],{"class":82},[58,91808,31141],{"class":75},[58,91810,91811,91813,91815],{"class":60,"line":3267},[58,91812,53055],{"class":75},[58,91814,52451],{"class":71},[58,91816,403],{"class":75},[58,91818,91819,91821,91823],{"class":60,"line":8594},[58,91820,52423],{"class":75},[58,91822,52438],{"class":71},[58,91824,403],{"class":75},[58,91826,91827],{"class":60,"line":8618},[58,91828,3046],{"emptyLinePlaceholder":720},[58,91830,91831,91833,91835],{"class":60,"line":8623},[58,91832,52423],{"class":75},[58,91834,51279],{"class":71},[58,91836,403],{"class":75},[124,91838,91839],{},[22,91840,91841],{},"手写一个节流函数来处理",[175,91843,71583],{},[175,91845,90895],{},[175,91847,91848],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[175,91850,91851],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[48,91853,91855],{"className":51277,"code":91854,"language":51279,"meta":53,"style":53},"\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",[55,91856,91857,91867,91881,91885,91893,91907,91927,91939,91947,91953,91963,91975,91987,91997,92009,92019,92029,92041,92045,92053,92061,92065,92073,92091,92109,92117,92135,92145,92153,92163,92167,92171,92175,92180,92185,92190,92195,92200,92205,92222,92228,92236,92247,92262,92269,92274,92279,92289,92294,92299,92304,92308,92312,92316,92336,92344,92352,92356],{"__ignoreMap":53},[58,91858,91859,91861,91863,91865],{"class":60,"line":61},[58,91860,51941],{"class":75},[58,91862,51944],{"class":71},[58,91864,51947],{"class":379},[58,91866,403],{"class":75},[58,91868,91869,91871,91873,91875,91877,91879],{"class":60,"line":68},[58,91870,373],{"class":75},[58,91872,51279],{"class":71},[58,91874,51958],{"class":379},[58,91876,383],{"class":75},[58,91878,51963],{"class":386},[58,91880,403],{"class":75},[58,91882,91883],{"class":60,"line":79},[58,91884,3046],{"emptyLinePlaceholder":720},[58,91886,91887,91889,91891],{"class":60,"line":105},[58,91888,373],{"class":75},[58,91890,51976],{"class":71},[58,91892,403],{"class":75},[58,91894,91895,91897,91899,91901,91903,91905],{"class":60,"line":627},[58,91896,52782],{"class":75},[58,91898,51986],{"class":71},[58,91900,51989],{"class":379},[58,91902,383],{"class":75},[58,91904,51994],{"class":386},[58,91906,403],{"class":75},[58,91908,91909,91911,91913,91915,91917,91919,91921,91923,91925],{"class":60,"line":509},[58,91910,52782],{"class":75},[58,91912,51986],{"class":71},[58,91914,15564],{"class":379},[58,91916,383],{"class":75},[58,91918,52033],{"class":386},[58,91920,52013],{"class":379},[58,91922,383],{"class":75},[58,91924,52040],{"class":386},[58,91926,403],{"class":75},[58,91928,91929,91931,91933,91935,91937],{"class":60,"line":559},[58,91930,52782],{"class":75},[58,91932,52049],{"class":71},[58,91934,52052],{"class":75},[58,91936,52049],{"class":71},[58,91938,403],{"class":75},[58,91940,91941,91943,91945],{"class":60,"line":654},[58,91942,52782],{"class":75},[58,91944,702],{"class":71},[58,91946,403],{"class":75},[58,91948,91949,91951],{"class":60,"line":671},[58,91950,55388],{"class":379},[58,91952,76],{"class":75},[58,91954,91955,91957,91959,91961],{"class":60,"line":677},[58,91956,73227],{"class":82},[58,91958,86],{"class":75},[58,91960,61139],{"class":82},[58,91962,102],{"class":75},[58,91964,91965,91967,91969,91971,91973],{"class":60,"line":2260},[58,91966,55406],{"class":82},[58,91968,86],{"class":75},[58,91970,2369],{"class":82},[58,91972,93],{"class":92},[58,91974,102],{"class":75},[58,91976,91977,91979,91981,91983,91985],{"class":60,"line":694},[58,91978,55420],{"class":82},[58,91980,86],{"class":75},[58,91982,2369],{"class":82},[58,91984,93],{"class":92},[58,91986,102],{"class":75},[58,91988,91989,91991,91993,91995],{"class":60,"line":2270},[58,91990,55518],{"class":82},[58,91992,86],{"class":75},[58,91994,90635],{"class":82},[58,91996,102],{"class":75},[58,91998,91999,92001,92003,92005,92007],{"class":60,"line":2275},[58,92000,55556],{"class":82},[58,92002,86],{"class":75},[58,92004,1610],{"class":82},[58,92006,93],{"class":92},[58,92008,102],{"class":75},[58,92010,92011,92013,92015,92017],{"class":60,"line":2289},[58,92012,58050],{"class":82},[58,92014,86],{"class":75},[58,92016,61476],{"class":82},[58,92018,102],{"class":75},[58,92020,92021,92023,92025,92027],{"class":60,"line":2294},[58,92022,57920],{"class":82},[58,92024,86],{"class":75},[58,92026,52231],{"class":82},[58,92028,102],{"class":75},[58,92030,92031,92033,92035,92037,92039],{"class":60,"line":2300},[58,92032,90674],{"class":82},[58,92034,86],{"class":75},[58,92036,1105],{"class":82},[58,92038,93],{"class":92},[58,92040,102],{"class":75},[58,92042,92043],{"class":60,"line":2321},[58,92044,2833],{"class":75},[58,92046,92047,92049,92051],{"class":60,"line":2326},[58,92048,53055],{"class":75},[58,92050,702],{"class":71},[58,92052,403],{"class":75},[58,92054,92055,92057,92059],{"class":60,"line":2340},[58,92056,52423],{"class":75},[58,92058,51976],{"class":71},[58,92060,403],{"class":75},[58,92062,92063],{"class":60,"line":2345},[58,92064,3046],{"emptyLinePlaceholder":720},[58,92066,92067,92069,92071],{"class":60,"line":2374},[58,92068,373],{"class":75},[58,92070,52438],{"class":71},[58,92072,403],{"class":75},[58,92074,92075,92077,92079,92081,92083,92085,92087,92089],{"class":60,"line":2379},[58,92076,52782],{"class":75},[58,92078,72],{"class":71},[58,92080,54124],{"class":379},[58,92082,383],{"class":75},[58,92084,54129],{"class":386},[58,92086,55948],{"class":75},[58,92088,72],{"class":71},[58,92090,403],{"class":75},[58,92092,92093,92095,92097,92099,92101,92103,92105,92107],{"class":60,"line":2396},[58,92094,52782],{"class":75},[58,92096,52451],{"class":71},[58,92098,55873],{"class":379},[58,92100,383],{"class":75},[58,92102,88903],{"class":386},[58,92104,55948],{"class":75},[58,92106,52451],{"class":71},[58,92108,403],{"class":75},[58,92110,92111,92113,92115],{"class":60,"line":2401},[58,92112,52782],{"class":75},[58,92114,52451],{"class":71},[58,92116,403],{"class":75},[58,92118,92119,92121,92123,92125,92127,92129,92131,92133],{"class":60,"line":2406},[58,92120,11866],{"class":92},[58,92122,87562],{"class":82},[58,92124,14208],{"class":92},[58,92126,55032],{"class":75},[58,92128,55035],{"class":379},[58,92130,793],{"class":75},[58,92132,90775],{"class":386},[58,92134,799],{"class":75},[58,92136,92137,92139,92141,92143],{"class":60,"line":2411},[58,92138,52857],{"class":92},[58,92140,10083],{"class":75},[58,92142,383],{"class":92},[58,92144,47977],{"class":82},[58,92146,92147,92149,92151],{"class":60,"line":2425},[58,92148,70716],{"class":92},[58,92150,90794],{"class":379},[58,92152,11498],{"class":75},[58,92154,92155,92157,92159,92161],{"class":60,"line":2430},[58,92156,90801],{"class":75},[58,92158,383],{"class":92},[58,92160,3678],{"class":75},[58,92162,3348],{"class":92},[58,92164,92165],{"class":60,"line":3223},[58,92166,90812],{"class":64},[58,92168,92169],{"class":60,"line":3237},[58,92170,2833],{"class":75},[58,92172,92173],{"class":60,"line":3245},[58,92174,90821],{"class":64},[58,92176,92177],{"class":60,"line":3250},[58,92178,92179],{"class":64},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[58,92181,92182],{"class":60,"line":3256},[58,92183,92184],{"class":64},"    \u002F\u002F 1.声明一个定时器变量\n",[58,92186,92187],{"class":60,"line":3262},[58,92188,92189],{"class":64},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[58,92191,92192],{"class":60,"line":3267},[58,92193,92194],{"class":64},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[58,92196,92197],{"class":60,"line":8594},[58,92198,92199],{"class":64},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[58,92201,92202],{"class":60,"line":8618},[58,92203,92204],{"class":64},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[58,92206,92207,92209,92212,92214,92216,92218,92220],{"class":60,"line":8623},[58,92208,70716],{"class":92},[58,92210,92211],{"class":379}," throttle",[58,92213,793],{"class":75},[58,92215,91266],{"class":5862},[58,92217,469],{"class":75},[58,92219,1506],{"class":5862},[58,92221,13086],{"class":75},[58,92223,92224,92226],{"class":60,"line":8629},[58,92225,80403],{"class":92},[58,92227,91279],{"class":75},[58,92229,92230,92232,92234],{"class":60,"line":8656},[58,92231,74613],{"class":92},[58,92233,59552],{"class":92},[58,92235,55088],{"class":75},[58,92237,92238,92240,92242,92244],{"class":60,"line":8661},[58,92239,3143],{"class":92},[58,92241,2305],{"class":75},[58,92243,1013],{"class":92},[58,92245,92246],{"class":75},"timer) {\n",[58,92248,92249,92252,92254,92256,92258,92260],{"class":60,"line":8667},[58,92250,92251],{"class":75},"          timer ",[58,92253,383],{"class":92},[58,92255,91320],{"class":379},[58,92257,793],{"class":75},[58,92259,55085],{"class":92},[58,92261,55088],{"class":75},[58,92263,92264,92267],{"class":60,"line":8679},[58,92265,92266],{"class":379},"            fn",[58,92268,2622],{"class":75},[58,92270,92271],{"class":60,"line":8691},[58,92272,92273],{"class":64},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[58,92275,92276],{"class":60,"line":8703},[58,92277,92278],{"class":64},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[58,92280,92281,92284,92286],{"class":60,"line":10361},[58,92282,92283],{"class":75},"            timer ",[58,92285,383],{"class":92},[58,92287,92288],{"class":82}," null\n",[58,92290,92291],{"class":60,"line":10386},[58,92292,92293],{"class":64},"            \u002F\u002F 不能用clearTimeout(timer)\n",[58,92295,92296],{"class":60,"line":10409},[58,92297,92298],{"class":64},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[58,92300,92301],{"class":60,"line":10433},[58,92302,92303],{"class":75},"          }, t)\n",[58,92305,92306],{"class":60,"line":10438},[58,92307,3175],{"class":75},[58,92309,92310],{"class":60,"line":10443},[58,92311,53036],{"class":75},[58,92313,92314],{"class":60,"line":10448},[58,92315,2833],{"class":75},[58,92317,92318,92320,92322,92324,92326,92328,92330,92332,92334],{"class":60,"line":10457},[58,92319,90836],{"class":75},[58,92321,58447],{"class":379},[58,92323,793],{"class":75},[58,92325,90843],{"class":386},[58,92327,469],{"class":75},[58,92329,91802],{"class":379},[58,92331,90852],{"class":75},[58,92333,65706],{"class":82},[58,92335,31141],{"class":75},[58,92337,92338,92340,92342],{"class":60,"line":10462},[58,92339,53055],{"class":75},[58,92341,52451],{"class":71},[58,92343,403],{"class":75},[58,92345,92346,92348,92350],{"class":60,"line":10468},[58,92347,52423],{"class":75},[58,92349,52438],{"class":71},[58,92351,403],{"class":75},[58,92353,92354],{"class":60,"line":10489},[58,92355,3046],{"emptyLinePlaceholder":720},[58,92357,92358,92360,92362],{"class":60,"line":10495},[58,92359,52423],{"class":75},[58,92361,51279],{"class":71},[58,92363,403],{"class":75},[114,92365,92367],{"id":92366},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[48,92369,92371],{"className":53705,"code":92370,"language":53707,"meta":53,"style":53},"\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",[55,92372,92373,92381,92389,92394,92399,92404,92409,92413,92421],{"__ignoreMap":53},[58,92374,92375,92377,92379],{"class":60,"line":61},[58,92376,373],{"class":75},[58,92378,52438],{"class":71},[58,92380,403],{"class":75},[58,92382,92383,92385,92387],{"class":60,"line":68},[58,92384,52782],{"class":75},[58,92386,52451],{"class":71},[58,92388,403],{"class":75},[58,92390,92391],{"class":60,"line":79},[58,92392,92393],{"class":75},"    let timer = null\n",[58,92395,92396],{"class":60,"line":105},[58,92397,92398],{"class":75},"    timer = setTimeout(() => {\n",[58,92400,92401],{"class":60,"line":627},[58,92402,92403],{"class":75},"      clearTimeout(timer)\n",[58,92405,92406],{"class":60,"line":509},[58,92407,92408],{"class":75},"      console.log(timer)\n",[58,92410,92411],{"class":60,"line":559},[58,92412,60859],{"class":75},[58,92414,92415,92417,92419],{"class":60,"line":654},[58,92416,53055],{"class":75},[58,92418,52451],{"class":71},[58,92420,403],{"class":75},[58,92422,92423,92425,92427],{"class":60,"line":671},[58,92424,52423],{"class":75},[58,92426,52438],{"class":71},[58,92428,403],{"class":75},[175,92430,92431],{},"输出为1",[175,92433,92434],{},"在开启的定时器里边写清除定时器",[175,92436,92437],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[114,92439,92441],{"id":92440},"_4174-节流综合案例","4.17.4 节流综合案例",[175,92443,92444],{},"页面打开，可以记录上一次的视频播放位置",[175,92446,92447],{},[119,92448],{"alt":53,"src":92449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[175,92451,92452],{},[119,92453],{"alt":53,"src":92454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[48,92456,92458],{"className":51277,"code":92457,"language":51279,"meta":53,"style":53},"\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",[55,92459,92460,92470,92484,92488,92496,92510,92530,92550,92572,92585,92593,92599,92609,92619,92629,92633,92637,92644,92657,92669,92673,92677,92687,92699,92713,92717,92721,92728,92738,92751,92763,92773,92783,92799,92811,92815,92819,92827,92837,92849,92859,92869,92879,92883,92887,92897,92908,92912,92920,92928,92932,92940,92955,92970,92985,93006,93014,93022,93037,93059,93067,93082,93108,93134,93160,93168,93176,93195,93203,93208,93227,93232,93250,93255,93260,93268,93273,93287,93295,93300,93317,93321,93326,93348,93352,93360,93368,93372],{"__ignoreMap":53},[58,92461,92462,92464,92466,92468],{"class":60,"line":61},[58,92463,51941],{"class":75},[58,92465,51944],{"class":71},[58,92467,51947],{"class":379},[58,92469,403],{"class":75},[58,92471,92472,92474,92476,92478,92480,92482],{"class":60,"line":68},[58,92473,373],{"class":75},[58,92475,51279],{"class":71},[58,92477,51958],{"class":379},[58,92479,383],{"class":75},[58,92481,51963],{"class":386},[58,92483,403],{"class":75},[58,92485,92486],{"class":60,"line":79},[58,92487,3046],{"emptyLinePlaceholder":720},[58,92489,92490,92492,92494],{"class":60,"line":105},[58,92491,373],{"class":75},[58,92493,51976],{"class":71},[58,92495,403],{"class":75},[58,92497,92498,92500,92502,92504,92506,92508],{"class":60,"line":627},[58,92499,52782],{"class":75},[58,92501,51986],{"class":71},[58,92503,51989],{"class":379},[58,92505,383],{"class":75},[58,92507,51994],{"class":386},[58,92509,59761],{"class":75},[58,92511,92512,92514,92516,92518,92520,92522,92524,92526,92528],{"class":60,"line":509},[58,92513,52782],{"class":75},[58,92515,51986],{"class":71},[58,92517,52005],{"class":379},[58,92519,383],{"class":75},[58,92521,52010],{"class":386},[58,92523,52013],{"class":379},[58,92525,383],{"class":75},[58,92527,52018],{"class":386},[58,92529,59761],{"class":75},[58,92531,92532,92534,92536,92538,92540,92542,92544,92546,92548],{"class":60,"line":559},[58,92533,52782],{"class":75},[58,92535,51986],{"class":71},[58,92537,15564],{"class":379},[58,92539,383],{"class":75},[58,92541,52033],{"class":386},[58,92543,52013],{"class":379},[58,92545,383],{"class":75},[58,92547,52040],{"class":386},[58,92549,59761],{"class":75},[58,92551,92552,92554,92556,92558,92560,92563,92565,92567,92570],{"class":60,"line":654},[58,92553,52782],{"class":75},[58,92555,51986],{"class":71},[58,92557,15564],{"class":379},[58,92559,383],{"class":75},[58,92561,92562],{"class":386},"\"referrer\"",[58,92564,52013],{"class":379},[58,92566,383],{"class":75},[58,92568,92569],{"class":386},"\"never\"",[58,92571,59761],{"class":75},[58,92573,92574,92576,92578,92581,92583],{"class":60,"line":671},[58,92575,52782],{"class":75},[58,92577,52049],{"class":71},[58,92579,92580],{"class":75},">综合案例\u003C\u002F",[58,92582,52049],{"class":71},[58,92584,403],{"class":75},[58,92586,92587,92589,92591],{"class":60,"line":677},[58,92588,52782],{"class":75},[58,92590,702],{"class":71},[58,92592,403],{"class":75},[58,92594,92595,92597],{"class":60,"line":2260},[58,92596,7049],{"class":71},[58,92598,76],{"class":75},[58,92600,92601,92603,92605,92607],{"class":60,"line":694},[58,92602,55331],{"class":82},[58,92604,86],{"class":75},[58,92606,979],{"class":82},[58,92608,102],{"class":75},[58,92610,92611,92613,92615,92617],{"class":60,"line":2270},[58,92612,55342],{"class":82},[58,92614,86],{"class":75},[58,92616,979],{"class":82},[58,92618,102],{"class":75},[58,92620,92621,92623,92625,92627],{"class":60,"line":2275},[58,92622,73227],{"class":82},[58,92624,86],{"class":75},[58,92626,61139],{"class":82},[58,92628,102],{"class":75},[58,92630,92631],{"class":60,"line":2289},[58,92632,2833],{"class":75},[58,92634,92635],{"class":60,"line":2294},[58,92636,3046],{"emptyLinePlaceholder":720},[58,92638,92639,92642],{"class":60,"line":2300},[58,92640,92641],{"class":379},"    .container",[58,92643,76],{"class":75},[58,92645,92646,92648,92650,92653,92655],{"class":60,"line":2321},[58,92647,55406],{"class":82},[58,92649,86],{"class":75},[58,92651,92652],{"class":82},"1200",[58,92654,93],{"class":92},[58,92656,102],{"class":75},[58,92658,92659,92661,92663,92665,92667],{"class":60,"line":2326},[58,92660,55342],{"class":82},[58,92662,86],{"class":75},[58,92664,979],{"class":82},[58,92666,52195],{"class":82},[58,92668,102],{"class":75},[58,92670,92671],{"class":60,"line":2340},[58,92672,2833],{"class":75},[58,92674,92675],{"class":60,"line":2345},[58,92676,3046],{"emptyLinePlaceholder":720},[58,92678,92679,92682,92685],{"class":60,"line":2374},[58,92680,92681],{"class":379},"    .video",[58,92683,92684],{"class":71}," video",[58,92686,76],{"class":75},[58,92688,92689,92691,92693,92695,92697],{"class":60,"line":2379},[58,92690,55406],{"class":82},[58,92692,86],{"class":75},[58,92694,1097],{"class":82},[58,92696,1114],{"class":92},[58,92698,102],{"class":75},[58,92700,92701,92703,92705,92707,92709,92711],{"class":60,"line":2396},[58,92702,55331],{"class":82},[58,92704,86],{"class":75},[58,92706,1486],{"class":82},[58,92708,93],{"class":92},[58,92710,4739],{"class":82},[58,92712,102],{"class":75},[58,92714,92715],{"class":60,"line":2401},[58,92716,2833],{"class":75},[58,92718,92719],{"class":60,"line":2406},[58,92720,3046],{"emptyLinePlaceholder":720},[58,92722,92723,92726],{"class":60,"line":2411},[58,92724,92725],{"class":379},"    .elevator",[58,92727,76],{"class":75},[58,92729,92730,92732,92734,92736],{"class":60,"line":2425},[58,92731,55395],{"class":82},[58,92733,86],{"class":75},[58,92735,666],{"class":82},[58,92737,102],{"class":75},[58,92739,92740,92742,92744,92747,92749],{"class":60,"line":2430},[58,92741,55581],{"class":82},[58,92743,86],{"class":75},[58,92745,92746],{"class":82},"280",[58,92748,93],{"class":92},[58,92750,102],{"class":75},[58,92752,92753,92755,92757,92759,92761],{"class":60,"line":3223},[58,92754,87056],{"class":82},[58,92756,86],{"class":75},[58,92758,1486],{"class":82},[58,92760,93],{"class":92},[58,92762,102],{"class":75},[58,92764,92765,92767,92769,92771],{"class":60,"line":3237},[58,92766,86869],{"class":82},[58,92768,86],{"class":75},[58,92770,86874],{"class":82},[58,92772,102],{"class":75},[58,92774,92775,92777,92779,92781],{"class":60,"line":3245},[58,92776,62353],{"class":82},[58,92778,86],{"class":75},[58,92780,61476],{"class":82},[58,92782,102],{"class":75},[58,92784,92785,92787,92789,92791,92793,92795,92797],{"class":60,"line":3250},[58,92786,62609],{"class":82},[58,92788,86],{"class":75},[58,92790,89],{"class":82},[58,92792,93],{"class":92},[58,92794,96],{"class":82},[58,92796,62876],{"class":82},[58,92798,102],{"class":75},[58,92800,92801,92803,92805,92807,92809],{"class":60,"line":3256},[58,92802,55406],{"class":82},[58,92804,86],{"class":75},[58,92806,1692],{"class":82},[58,92808,93],{"class":92},[58,92810,102],{"class":75},[58,92812,92813],{"class":60,"line":3262},[58,92814,2833],{"class":75},[58,92816,92817],{"class":60,"line":3267},[58,92818,3046],{"emptyLinePlaceholder":720},[58,92820,92821,92823,92825],{"class":60,"line":8594},[58,92822,92725],{"class":379},[58,92824,2048],{"class":71},[58,92826,76],{"class":75},[58,92828,92829,92831,92833,92835],{"class":60,"line":8618},[58,92830,55643],{"class":82},[58,92832,86],{"class":75},[58,92834,500],{"class":82},[58,92836,102],{"class":75},[58,92838,92839,92841,92843,92845,92847],{"class":60,"line":8623},[58,92840,55331],{"class":82},[58,92842,86],{"class":75},[58,92844,1232],{"class":82},[58,92846,93],{"class":92},[58,92848,102],{"class":75},[58,92850,92851,92853,92855,92857],{"class":60,"line":8629},[58,92852,64602],{"class":82},[58,92854,86],{"class":75},[58,92856,55373],{"class":82},[58,92858,102],{"class":75},[58,92860,92861,92863,92865,92867],{"class":60,"line":8656},[58,92862,57920],{"class":82},[58,92864,86],{"class":75},[58,92866,52231],{"class":82},[58,92868,102],{"class":75},[58,92870,92871,92873,92875,92877],{"class":60,"line":8661},[58,92872,58050],{"class":82},[58,92874,86],{"class":75},[58,92876,62702],{"class":82},[58,92878,102],{"class":75},[58,92880,92881],{"class":60,"line":8667},[58,92882,2833],{"class":75},[58,92884,92885],{"class":60,"line":8679},[58,92886,3046],{"emptyLinePlaceholder":720},[58,92888,92889,92891,92893,92895],{"class":60,"line":8691},[58,92890,92725],{"class":379},[58,92892,2048],{"class":71},[58,92894,64656],{"class":379},[58,92896,76],{"class":75},[58,92898,92899,92901,92903,92906],{"class":60,"line":8703},[58,92900,58050],{"class":82},[58,92902,86],{"class":75},[58,92904,92905],{"class":82},"#1286ff",[58,92907,102],{"class":75},[58,92909,92910],{"class":60,"line":10361},[58,92911,2833],{"class":75},[58,92913,92914,92916,92918],{"class":60,"line":10386},[58,92915,53055],{"class":75},[58,92917,702],{"class":71},[58,92919,403],{"class":75},[58,92921,92922,92924,92926],{"class":60,"line":10409},[58,92923,52423],{"class":75},[58,92925,51976],{"class":71},[58,92927,403],{"class":75},[58,92929,92930],{"class":60,"line":10433},[58,92931,3046],{"emptyLinePlaceholder":720},[58,92933,92934,92936,92938],{"class":60,"line":10438},[58,92935,373],{"class":75},[58,92937,52438],{"class":71},[58,92939,403],{"class":75},[58,92941,92942,92944,92946,92948,92950,92953],{"class":60,"line":10443},[58,92943,52782],{"class":75},[58,92945,72],{"class":71},[58,92947,54124],{"class":379},[58,92949,383],{"class":75},[58,92951,92952],{"class":386},"\"container\"",[58,92954,403],{"class":75},[58,92956,92957,92959,92961,92963,92965,92968],{"class":60,"line":10448},[58,92958,51983],{"class":75},[58,92960,72],{"class":71},[58,92962,54124],{"class":379},[58,92964,383],{"class":75},[58,92966,92967],{"class":386},"\"header\"",[58,92969,403],{"class":75},[58,92971,92972,92974,92976,92978,92980,92983],{"class":60,"line":10457},[58,92973,55868],{"class":75},[58,92975,376],{"class":71},[58,92977,380],{"class":379},[58,92979,383],{"class":75},[58,92981,92982],{"class":386},"\"http:\u002F\u002Fpip.itcast.cn\"",[58,92984,403],{"class":75},[58,92986,92987,92989,92991,92993,92995,92998,93000,93002,93004],{"class":60,"line":10462},[58,92988,55936],{"class":75},[58,92990,119],{"class":71},[58,92992,55873],{"class":379},[58,92994,383],{"class":75},[58,92996,92997],{"class":386},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[58,92999,55881],{"class":379},[58,93001,383],{"class":75},[58,93003,8298],{"class":386},[58,93005,59761],{"class":75},[58,93007,93008,93010,93012],{"class":60,"line":10468},[58,93009,56041],{"class":75},[58,93011,376],{"class":71},[58,93013,403],{"class":75},[58,93015,93016,93018,93020],{"class":60,"line":10489},[58,93017,52414],{"class":75},[58,93019,72],{"class":71},[58,93021,403],{"class":75},[58,93023,93024,93026,93028,93030,93032,93035],{"class":60,"line":10495},[58,93025,51983],{"class":75},[58,93027,72],{"class":71},[58,93029,54124],{"class":379},[58,93031,383],{"class":75},[58,93033,93034],{"class":386},"\"video\"",[58,93036,403],{"class":75},[58,93038,93039,93041,93043,93045,93047,93050,93053,93055,93057],{"class":60,"line":10509},[58,93040,55868],{"class":75},[58,93042,28827],{"class":71},[58,93044,55873],{"class":379},[58,93046,383],{"class":75},[58,93048,93049],{"class":386},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[58,93051,93052],{"class":379}," controls",[58,93054,55948],{"class":75},[58,93056,28827],{"class":71},[58,93058,403],{"class":75},[58,93060,93061,93063,93065],{"class":60,"line":10515},[58,93062,52414],{"class":75},[58,93064,72],{"class":71},[58,93066,403],{"class":75},[58,93068,93069,93071,93073,93075,93077,93080],{"class":60,"line":10542},[58,93070,51983],{"class":75},[58,93072,72],{"class":71},[58,93074,54124],{"class":379},[58,93076,383],{"class":75},[58,93078,93079],{"class":386},"\"elevator\"",[58,93081,403],{"class":75},[58,93083,93084,93086,93088,93090,93092,93094,93097,93099,93101,93104,93106],{"class":60,"line":10551},[58,93085,55868],{"class":75},[58,93087,376],{"class":71},[58,93089,380],{"class":379},[58,93091,383],{"class":75},[58,93093,64868],{"class":386},[58,93095,93096],{"class":379}," data-ref",[58,93098,383],{"class":75},[58,93100,93034],{"class":386},[58,93102,93103],{"class":75},">视频介绍\u003C\u002F",[58,93105,376],{"class":71},[58,93107,403],{"class":75},[58,93109,93110,93112,93114,93116,93118,93120,93122,93124,93127,93130,93132],{"class":60,"line":10557},[58,93111,55868],{"class":75},[58,93113,376],{"class":71},[58,93115,380],{"class":379},[58,93117,383],{"class":75},[58,93119,64868],{"class":386},[58,93121,93096],{"class":379},[58,93123,383],{"class":75},[58,93125,93126],{"class":386},"\"intro\"",[58,93128,93129],{"class":75},">课程简介\u003C\u002F",[58,93131,376],{"class":71},[58,93133,403],{"class":75},[58,93135,93136,93138,93140,93142,93144,93146,93148,93150,93153,93156,93158],{"class":60,"line":10565},[58,93137,55868],{"class":75},[58,93139,376],{"class":71},[58,93141,380],{"class":379},[58,93143,383],{"class":75},[58,93145,64868],{"class":386},[58,93147,93096],{"class":379},[58,93149,383],{"class":75},[58,93151,93152],{"class":386},"\"outline\"",[58,93154,93155],{"class":75},">评论列表\u003C\u002F",[58,93157,376],{"class":71},[58,93159,403],{"class":75},[58,93161,93162,93164,93166],{"class":60,"line":10570},[58,93163,52414],{"class":75},[58,93165,72],{"class":71},[58,93167,403],{"class":75},[58,93169,93170,93172,93174],{"class":60,"line":17247},[58,93171,53055],{"class":75},[58,93173,72],{"class":71},[58,93175,403],{"class":75},[58,93177,93178,93180,93182,93184,93186,93189,93191,93193],{"class":60,"line":17253},[58,93179,52782],{"class":75},[58,93181,52451],{"class":71},[58,93183,55873],{"class":379},[58,93185,383],{"class":75},[58,93187,93188],{"class":386},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[58,93190,55948],{"class":75},[58,93192,52451],{"class":71},[58,93194,403],{"class":75},[58,93196,93197,93199,93201],{"class":60,"line":17276},[58,93198,52782],{"class":75},[58,93200,52451],{"class":71},[58,93202,403],{"class":75},[58,93204,93205],{"class":60,"line":17282},[58,93206,93207],{"class":64},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[58,93209,93210,93212,93214,93216,93218,93220,93222,93225],{"class":60,"line":17305},[58,93211,11866],{"class":92},[58,93213,92684],{"class":82},[58,93215,14208],{"class":92},[58,93217,55032],{"class":75},[58,93219,55035],{"class":379},[58,93221,793],{"class":75},[58,93223,93224],{"class":386},"'video'",[58,93226,799],{"class":75},[58,93228,93229],{"class":60,"line":17319},[58,93230,93231],{"class":64},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[58,93233,93234,93237,93239,93241,93243,93246,93248],{"class":60,"line":17339},[58,93235,93236],{"class":75},"    video.ontimeupdate ",[58,93238,383],{"class":92},[58,93240,88984],{"class":75},[58,93242,91802],{"class":379},[58,93244,93245],{"class":75},"(() ",[58,93247,85352],{"class":92},[58,93249,76],{"class":75},[58,93251,93252],{"class":60,"line":17345},[58,93253,93254],{"class":64},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[58,93256,93257],{"class":60,"line":17356},[58,93258,93259],{"class":64},"      \u002F\u002F 控制台输出当前的时间\n",[58,93261,93262,93265],{"class":60,"line":17379},[58,93263,93264],{"class":64},"      \u002F\u002F console.log(video.currentTime)",[58,93266,93267],{"class":64},"  \u002F\u002F获得当前的视频时间\n",[58,93269,93270],{"class":60,"line":17401},[58,93271,93272],{"class":64},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[58,93274,93275,93277,93279,93281,93284],{"class":60,"line":17406},[58,93276,75314],{"class":75},[58,93278,72285],{"class":379},[58,93280,793],{"class":75},[58,93282,93283],{"class":386},"'currentTime'",[58,93285,93286],{"class":75},", video.currentTime)\n",[58,93288,93289,93291,93293],{"class":60,"line":17412},[58,93290,55171],{"class":75},[58,93292,7056],{"class":82},[58,93294,799],{"class":75},[58,93296,93297],{"class":60,"line":17426},[58,93298,93299],{"class":64},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[58,93301,93302,93305,93308,93310,93313,93315],{"class":60,"line":17439},[58,93303,93304],{"class":75},"    video.",[58,93306,93307],{"class":379},"onloadeddata",[58,93309,14208],{"class":92},[58,93311,93312],{"class":75}," () ",[58,93314,85352],{"class":92},[58,93316,76],{"class":75},[58,93318,93319],{"class":60,"line":17444},[58,93320,60646],{"class":64},[58,93322,93323],{"class":60,"line":17458},[58,93324,93325],{"class":64},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[58,93327,93328,93331,93333,93336,93338,93340,93342,93344,93346],{"class":60,"line":17463},[58,93329,93330],{"class":75},"      video.currentTime ",[58,93332,383],{"class":92},[58,93334,93335],{"class":75}," localStorage.",[58,93337,72316],{"class":379},[58,93339,793],{"class":75},[58,93341,93283],{"class":386},[58,93343,14358],{"class":75},[58,93345,71988],{"class":92},[58,93347,47977],{"class":82},[58,93349,93350],{"class":60,"line":17469},[58,93351,2833],{"class":75},[58,93353,93354,93356,93358],{"class":60,"line":17474},[58,93355,53055],{"class":75},[58,93357,52451],{"class":71},[58,93359,403],{"class":75},[58,93361,93362,93364,93366],{"class":60,"line":17488},[58,93363,52423],{"class":75},[58,93365,52438],{"class":71},[58,93367,403],{"class":75},[58,93369,93370],{"class":60,"line":17493},[58,93371,3046],{"emptyLinePlaceholder":720},[58,93373,93374,93376,93378],{"class":60,"line":17498},[58,93375,52423],{"class":75},[58,93377,51279],{"class":71},[58,93379,403],{"class":75},[702,93381,93382],{},"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":53,"searchDepth":68,"depth":68,"links":93384},[93385,93390,93394,93395,93396,93401,93406,93407,93408,93409,93416,93421,93422,93432,93436,93437,93441],{"id":77322,"depth":68,"text":77323,"children":93386},[93387,93388,93389],{"id":77326,"depth":79,"text":77327},{"id":77351,"depth":79,"text":77352},{"id":77363,"depth":79,"text":77364},{"id":77375,"depth":68,"text":77376,"children":93391},[93392,93393],{"id":77379,"depth":79,"text":77380},{"id":77394,"depth":79,"text":77395},{"id":77446,"depth":68,"text":77447},{"id":77490,"depth":68,"text":77491},{"id":77507,"depth":68,"text":77508,"children":93397},[93398,93399,93400],{"id":77511,"depth":79,"text":77512},{"id":77524,"depth":79,"text":77525},{"id":77629,"depth":79,"text":77630},{"id":77918,"depth":68,"text":77919,"children":93402},[93403,93404,93405],{"id":77922,"depth":79,"text":77923},{"id":78365,"depth":79,"text":78366},{"id":78776,"depth":79,"text":78777},{"id":78839,"depth":68,"text":78840},{"id":78918,"depth":68,"text":78919},{"id":79011,"depth":68,"text":79012},{"id":80855,"depth":68,"text":80856,"children":93410},[93411,93412,93413,93414,93415],{"id":80859,"depth":79,"text":80860},{"id":80871,"depth":79,"text":80872},{"id":81090,"depth":79,"text":81091},{"id":81108,"depth":79,"text":81109},{"id":81168,"depth":79,"text":81169},{"id":85436,"depth":68,"text":85437,"children":93417},[93418,93419,93420],{"id":85440,"depth":79,"text":85441},{"id":85458,"depth":79,"text":85459},{"id":85484,"depth":79,"text":85485},{"id":85493,"depth":68,"text":85494},{"id":85515,"depth":68,"text":85516,"children":93423},[93424,93425,93426,93427,93428,93429,93430,93431],{"id":85519,"depth":79,"text":85520},{"id":85780,"depth":79,"text":85781},{"id":85966,"depth":79,"text":85967},{"id":86333,"depth":79,"text":86334},{"id":86449,"depth":79,"text":86450},{"id":86485,"depth":79,"text":86486},{"id":86532,"depth":79,"text":86533},{"id":86566,"depth":79,"text":86567},{"id":87928,"depth":68,"text":87929,"children":93433},[93434,93435],{"id":87932,"depth":79,"text":87933},{"id":87969,"depth":79,"text":87970},{"id":89324,"depth":68,"text":89325},{"id":89695,"depth":68,"text":89696,"children":93438},[93439,93440],{"id":89699,"depth":79,"text":89700},{"id":89733,"depth":79,"text":89734},{"id":90462,"depth":68,"text":90463,"children":93442},[93443,93444,93445,93446],{"id":90466,"depth":79,"text":90467},{"id":91424,"depth":79,"text":91425},{"id":92366,"depth":79,"text":92367},{"id":92440,"depth":79,"text":92441},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77311,"description":717},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93453,"title":93454,"body":93455,"description":93466,"extension":718,"meta":93467,"navigation":720,"path":93469,"seo":93470,"stem":93471,"__hash__":93472},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93456,"toc":93464},[93457],[175,93458,93459,93460],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[376,93461,93462],{"href":93462,"rel":93463},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24508],{"title":53,"searchDepth":68,"depth":68,"links":93465},[],"三件套第三套学习",{"category":93468},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93454,"description":93466},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93474,"title":93475,"body":93476,"description":717,"extension":718,"meta":93581,"navigation":720,"path":93582,"seo":93583,"stem":93584,"__hash__":93585},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93477,"toc":93576},[93478,93485,93488,93491,93494,93498,93507,93510,93513,93517,93526,93529,93533,93536,93556,93559,93573],[175,93479,93480],{},[376,93481,93484],{"href":93482,"rel":93483},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24508],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93486,93475],{"id":93487},"_1安装",[175,93489,93490],{},"numpy是科学计算基础库,底层是C语言",[175,93492,93493],{},"三种方式：",[14,93495,93497],{"id":93496},"_11-通过pip安装","1.1 通过pip安装",[48,93499,93501],{"className":31022,"code":93500,"language":31024,"meta":53,"style":53},"pip install numpy\n",[55,93502,93503],{"__ignoreMap":53},[58,93504,93505],{"class":60,"line":61},[58,93506,93500],{"class":75},[175,93508,93509],{},"首选方式，自动处理依赖项",[175,93511,93512],{},"在提示系统命令符中使用cmd",[14,93514,93516],{"id":93515},"_12-通过anaconda安装","1.2 通过Anaconda安装",[48,93518,93520],{"className":31022,"code":93519,"language":31024,"meta":53,"style":53},"conda install numpy\n",[55,93521,93522],{"__ignoreMap":53},[58,93523,93524],{"class":60,"line":61},[58,93525,93519],{"class":75},[175,93527,93528],{},"自动解决环境依赖",[14,93530,93532],{"id":93531},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[175,93534,93535],{},"对于Debian\u002FUbuntu",[48,93537,93539],{"className":31022,"code":93538,"language":31024,"meta":53,"style":53},"sudo apt-get install python3-numpy\n",[55,93540,93541],{"__ignoreMap":53},[58,93542,93543,93546,93548,93551,93553],{"class":60,"line":61},[58,93544,93545],{"class":75},"sudo apt",[58,93547,1318],{"class":92},[58,93549,93550],{"class":75},"get install python3",[58,93552,1318],{"class":92},[58,93554,93555],{"class":75},"numpy\n",[175,93557,93558],{},"对于Fedora:",[48,93560,93562],{"className":31022,"code":93561,"language":31024,"meta":53,"style":53},"sudo dnf install python3-numpy\n",[55,93563,93564],{"__ignoreMap":53},[58,93565,93566,93569,93571],{"class":60,"line":61},[58,93567,93568],{"class":75},"sudo dnf install python3",[58,93570,1318],{"class":92},[58,93572,93555],{"class":75},[702,93574,93575],{},"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":53,"searchDepth":68,"depth":68,"links":93577},[93578,93579,93580],{"id":93496,"depth":68,"text":93497},{"id":93515,"depth":68,"text":93516},{"id":93531,"depth":68,"text":93532},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93475,"description":717},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93587,"title":93588,"body":93589,"description":717,"extension":718,"meta":93702,"navigation":720,"path":93703,"seo":93704,"stem":93705,"__hash__":93706},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93590,"toc":93700},[93591,93594,93597,93600,93603,93606,93609,93612,93615,93618,93694,93697],[10,93592,93588],{"id":93593},"_10算数函数",[175,93595,93596],{},"加减乘除运算跟python基础语法没区别",[175,93598,93599],{},"除了python那种方法外还可以使用函数",[175,93601,93602],{},"加：np.add(a,b)",[175,93604,93605],{},"减：np.subtract(a,b)",[175,93607,93608],{},"乘：np.multiply(a,b)",[175,93610,93611],{},"除：np.divide(a,b) == a\u002Fb",[175,93613,93614],{},"取余：np.mod(a,b) == a%b",[175,93616,93617],{},"必须会的用法：",[48,93619,93621],{"className":31022,"code":93620,"language":31024,"meta":53,"style":53},"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",[55,93622,93623,93645,93666,93676,93689],{"__ignoreMap":53},[58,93624,93625,93627,93629,93632,93634,93637,93639,93641,93643],{"class":60,"line":61},[58,93626,376],{"class":75},[58,93628,383],{"class":92},[58,93630,93631],{"class":75},"np.arange(",[58,93633,1206],{"class":82},[58,93635,93636],{"class":75},").reshape(",[58,93638,861],{"class":82},[58,93640,1164],{"class":75},[58,93642,861],{"class":82},[58,93644,799],{"class":75},[58,93646,93647,93649,93651,93654,93656,93658,93660,93662,93664],{"class":60,"line":68},[58,93648,1049],{"class":75},[58,93650,383],{"class":92},[58,93652,93653],{"class":75},"np.array([",[58,93655,1232],{"class":82},[58,93657,1164],{"class":75},[58,93659,1232],{"class":82},[58,93661,1164],{"class":75},[58,93663,1232],{"class":82},[58,93665,5303],{"class":75},[58,93667,93668,93671,93673],{"class":60,"line":79},[58,93669,93670],{"class":75},"result",[58,93672,383],{"class":92},[58,93674,93675],{"class":75},"np.empty_like(a)\n",[58,93677,93678,93681,93684,93686],{"class":60,"line":105},[58,93679,93680],{"class":75},"np.add(a,b,",[58,93682,93683],{"class":5862},"out",[58,93685,383],{"class":92},[58,93687,93688],{"class":75},"result)\n",[58,93690,93691],{"class":60,"line":627},[58,93692,93693],{"class":75},"result\n",[175,93695,93696],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[702,93698,93699],{},"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":53,"searchDepth":68,"depth":68,"links":93701},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93588,"description":717},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93708,"title":93709,"body":93710,"description":717,"extension":718,"meta":94472,"navigation":720,"path":94473,"seo":94474,"stem":94475,"__hash__":94476},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93711,"toc":94459},[93712,93715,93718,93721,93725,93764,93768,93812,93872,93876,93879,93918,93921,93966,93970,94006,94010,94079,94083,94147,94151,94154,94157,94160,94163,94199,94203,94243,94247,94319,94322,94326,94389,94393,94456],[10,93713,93709],{"id":93714},"_11统计函数",[175,93716,93717],{},"sum max min mean",[175,93719,93720],{},"这些有axis参数，可以指定方向",[14,93722,93724],{"id":93723},"_111-sum求和函数","11.1 sum()求和函数",[48,93726,93728],{"className":31022,"code":93727,"language":31024,"meta":53,"style":53},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[55,93729,93730,93735,93756],{"__ignoreMap":53},[58,93731,93732],{"class":60,"line":61},[58,93733,93734],{"class":64},"#创建一维数组\n",[58,93736,93737,93739,93741,93744,93746,93748,93750,93752,93754],{"class":60,"line":68},[58,93738,376],{"class":75},[58,93740,383],{"class":92},[58,93742,93743],{"class":75},"np.random.randint(",[58,93745,89],{"class":82},[58,93747,1164],{"class":75},[58,93749,1097],{"class":82},[58,93751,1164],{"class":75},[58,93753,1486],{"class":82},[58,93755,799],{"class":75},[58,93757,93758,93761],{"class":60,"line":79},[58,93759,93760],{"class":75},"np.sum(a)",[58,93762,93763],{"class":64},"#求和\n",[14,93765,93767],{"id":93766},"_112-max求最大值函数","11.2 max()求最大值函数",[48,93769,93771],{"className":31022,"code":93770,"language":31024,"meta":53,"style":53},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[55,93772,93773,93777,93797,93802,93807],{"__ignoreMap":53},[58,93774,93775],{"class":60,"line":61},[58,93776,93734],{"class":64},[58,93778,93779,93781,93783,93785,93787,93789,93791,93793,93795],{"class":60,"line":68},[58,93780,376],{"class":75},[58,93782,383],{"class":92},[58,93784,93743],{"class":75},[58,93786,89],{"class":82},[58,93788,1164],{"class":75},[58,93790,1097],{"class":82},[58,93792,1164],{"class":75},[58,93794,1486],{"class":82},[58,93796,799],{"class":75},[58,93798,93799],{"class":60,"line":79},[58,93800,93801],{"class":75},"np.max(a)\n",[58,93803,93804],{"class":60,"line":105},[58,93805,93806],{"class":64},"#最大索引(求最大元素的索引)arg\n",[58,93808,93809],{"class":60,"line":627},[58,93810,93811],{"class":75},"np.argmax(a)\n",[48,93813,93815],{"className":31022,"code":93814,"language":31024,"meta":53,"style":53},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[55,93816,93817,93838,93858,93862],{"__ignoreMap":53},[58,93818,93819,93821,93823,93826,93828,93830,93832,93834,93836],{"class":60,"line":61},[58,93820,11564],{"class":75},[58,93822,383],{"class":92},[58,93824,93825],{"class":75}," np.array([",[58,93827,89],{"class":82},[58,93829,469],{"class":75},[58,93831,1105],{"class":82},[58,93833,469],{"class":75},[58,93835,861],{"class":82},[58,93837,5303],{"class":75},[58,93839,93840,93842,93844,93846,93848,93850,93852,93854,93856],{"class":60,"line":68},[58,93841,11590],{"class":75},[58,93843,383],{"class":92},[58,93845,93825],{"class":75},[58,93847,861],{"class":82},[58,93849,469],{"class":75},[58,93851,867],{"class":82},[58,93853,469],{"class":75},[58,93855,1079],{"class":82},[58,93857,5303],{"class":75},[58,93859,93860],{"class":60,"line":79},[58,93861,3046],{"emptyLinePlaceholder":720},[58,93863,93864,93866,93869],{"class":60,"line":105},[58,93865,31059],{"class":82},[58,93867,93868],{"class":75},"(np.maximum(a, b))   ",[58,93870,93871],{"class":64},"# [3 5 4]，每个位置上取较大值\n",[14,93873,93875],{"id":93874},"_113-mean求平均值函数","11.3 mean()求平均值函数",[175,93877,93878],{},"①一维数组：",[48,93880,93882],{"className":31022,"code":93881,"language":31024,"meta":53,"style":53},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[55,93883,93884,93888,93908,93913],{"__ignoreMap":53},[58,93885,93886],{"class":60,"line":61},[58,93887,93734],{"class":64},[58,93889,93890,93892,93894,93896,93898,93900,93902,93904,93906],{"class":60,"line":68},[58,93891,376],{"class":75},[58,93893,383],{"class":92},[58,93895,93743],{"class":75},[58,93897,89],{"class":82},[58,93899,1164],{"class":75},[58,93901,1097],{"class":82},[58,93903,1164],{"class":75},[58,93905,1486],{"class":82},[58,93907,799],{"class":75},[58,93909,93910],{"class":60,"line":79},[58,93911,93912],{"class":64},"#求平均值\n",[58,93914,93915],{"class":60,"line":105},[58,93916,93917],{"class":75},"np.mean(a)\n",[175,93919,93920],{},"②二维数组",[48,93922,93924],{"className":31022,"code":93923,"language":31024,"meta":53,"style":53},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[55,93925,93926,93931,93956,93961],{"__ignoreMap":53},[58,93927,93928],{"class":60,"line":61},[58,93929,93930],{"class":64},"#二维数组\n",[58,93932,93933,93936,93938,93940,93942,93944,93946,93948,93950,93952,93954],{"class":60,"line":68},[58,93934,93935],{"class":75},"aa",[58,93937,383],{"class":92},[58,93939,93631],{"class":75},[58,93941,89],{"class":82},[58,93943,1164],{"class":75},[58,93945,1309],{"class":82},[58,93947,93636],{"class":75},[58,93949,861],{"class":82},[58,93951,1164],{"class":75},[58,93953,1079],{"class":82},[58,93955,799],{"class":75},[58,93957,93958],{"class":60,"line":79},[58,93959,93960],{"class":64},"#对数组中的所有数求平均\n",[58,93962,93963],{"class":60,"line":105},[58,93964,93965],{"class":75},"np.mean(aa)\n",[14,93967,93969],{"id":93968},"_114-median求中位数函数","11.4 median()求中位数函数",[48,93971,93973],{"className":31022,"code":93972,"language":31024,"meta":53,"style":53},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[55,93974,93975,93980,93996,94001],{"__ignoreMap":53},[58,93976,93977],{"class":60,"line":61},[58,93978,93979],{"class":64},"#求中位数\n",[58,93981,93982,93984,93986,93988,93990,93992,93994],{"class":60,"line":68},[58,93983,1049],{"class":75},[58,93985,383],{"class":92},[58,93987,93631],{"class":75},[58,93989,89],{"class":82},[58,93991,1164],{"class":75},[58,93993,1232],{"class":82},[58,93995,799],{"class":75},[58,93997,93998],{"class":60,"line":79},[58,93999,94000],{"class":75},"np.median(b)\n",[58,94002,94003],{"class":60,"line":105},[58,94004,94005],{"class":64},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,94007,94009],{"id":94008},"_115-power求幂运算函数","11.5 power()求幂运算函数",[48,94011,94013],{"className":31022,"code":94012,"language":31024,"meta":53,"style":53},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[55,94014,94015,94031,94036,94041,94050,94055,94064],{"__ignoreMap":53},[58,94016,94017,94019,94021,94023,94025,94027,94029],{"class":60,"line":61},[58,94018,1049],{"class":75},[58,94020,383],{"class":92},[58,94022,93631],{"class":75},[58,94024,89],{"class":82},[58,94026,1164],{"class":75},[58,94028,1232],{"class":82},[58,94030,799],{"class":75},[58,94032,94033],{"class":60,"line":68},[58,94034,94035],{"class":64},"#幂运算\n",[58,94037,94038],{"class":60,"line":79},[58,94039,94040],{"class":64},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[58,94042,94043,94046,94048],{"class":60,"line":105},[58,94044,94045],{"class":75},"np.power(b,",[58,94047,867],{"class":82},[58,94049,799],{"class":75},[58,94051,94052],{"class":60,"line":627},[58,94053,94054],{"class":64},"#或者以下代码，将数据存储起来\n",[58,94056,94057,94059,94061],{"class":60,"line":509},[58,94058,1630],{"class":75},[58,94060,383],{"class":92},[58,94062,94063],{"class":75},"np.empty_like(b)\n",[58,94065,94066,94068,94070,94072,94074,94076],{"class":60,"line":559},[58,94067,94045],{"class":75},[58,94069,867],{"class":82},[58,94071,1164],{"class":75},[58,94073,93683],{"class":5862},[58,94075,383],{"class":92},[58,94077,94078],{"class":75},"y)\n",[14,94080,94082],{"id":94081},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[48,94084,94086],{"className":31022,"code":94085,"language":31024,"meta":53,"style":53},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[55,94087,94088,94104,94109,94114,94118,94136],{"__ignoreMap":53},[58,94089,94090,94092,94094,94096,94098,94100,94102],{"class":60,"line":61},[58,94091,1049],{"class":75},[58,94093,383],{"class":92},[58,94095,93631],{"class":75},[58,94097,89],{"class":82},[58,94099,1164],{"class":75},[58,94101,1232],{"class":82},[58,94103,799],{"class":75},[58,94105,94106],{"class":60,"line":68},[58,94107,94108],{"class":64},"#开方\n",[58,94110,94111],{"class":60,"line":79},[58,94112,94113],{"class":75},"np.sqrt(b)\n",[58,94115,94116],{"class":60,"line":105},[58,94117,94054],{"class":64},[58,94119,94120,94122,94124,94127,94130,94132,94134],{"class":60,"line":627},[58,94121,1630],{"class":75},[58,94123,383],{"class":92},[58,94125,94126],{"class":75},"np.empty_like(b,",[58,94128,94129],{"class":5862},"dtype",[58,94131,383],{"class":92},[58,94133,832],{"class":82},[58,94135,799],{"class":75},[58,94137,94138,94141,94143,94145],{"class":60,"line":509},[58,94139,94140],{"class":75},"np.sqrt(b,",[58,94142,93683],{"class":5862},[58,94144,383],{"class":92},[58,94146,94078],{"class":75},[14,94148,94150],{"id":94149},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[175,94152,94153],{},"对数组中的元素累计求和，可指定轴",[175,94155,94156],{},"#累计求和的意思是：",[175,94158,94159],{},"a = np.array([1, 2, 3, 4])",[175,94161,94162],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[48,94164,94166],{"className":31022,"code":94165,"language":31024,"meta":53,"style":53},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[55,94167,94168,94184,94189,94194],{"__ignoreMap":53},[58,94169,94170,94172,94174,94176,94178,94180,94182],{"class":60,"line":61},[58,94171,1049],{"class":75},[58,94173,383],{"class":92},[58,94175,93631],{"class":75},[58,94177,89],{"class":82},[58,94179,1164],{"class":75},[58,94181,1232],{"class":82},[58,94183,799],{"class":75},[58,94185,94186],{"class":60,"line":68},[58,94187,94188],{"class":75},"np.cumsum(b)\n",[58,94190,94191],{"class":60,"line":79},[58,94192,94193],{"class":64},"#结果：\n",[58,94195,94196],{"class":60,"line":105},[58,94197,94198],{"class":64},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,94200,94202],{"id":94201},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[48,94204,94206],{"className":31022,"code":94205,"language":31024,"meta":53,"style":53},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[55,94207,94208,94224,94229,94234,94238],{"__ignoreMap":53},[58,94209,94210,94212,94214,94216,94218,94220,94222],{"class":60,"line":61},[58,94211,1049],{"class":75},[58,94213,383],{"class":92},[58,94215,93631],{"class":75},[58,94217,89],{"class":82},[58,94219,1164],{"class":75},[58,94221,1232],{"class":82},[58,94223,799],{"class":75},[58,94225,94226],{"class":60,"line":68},[58,94227,94228],{"class":64},"#对数组中的元素累计求积，可指定轴\n",[58,94230,94231],{"class":60,"line":79},[58,94232,94233],{"class":75},"np.cumprod(b)\n",[58,94235,94236],{"class":60,"line":105},[58,94237,94193],{"class":64},[58,94239,94240],{"class":60,"line":627},[58,94241,94242],{"class":64},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,94244,94246],{"id":94245},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[48,94248,94250],{"className":31022,"code":94249,"language":31024,"meta":53,"style":53},"#删除数组中的重复数据，并对数据进行排序\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",[55,94251,94252,94257,94305,94310,94314],{"__ignoreMap":53},[58,94253,94254],{"class":60,"line":61},[58,94255,94256],{"class":64},"#删除数组中的重复数据，并对数据进行排序\n",[58,94258,94259,94261,94263,94265,94267,94269,94271,94273,94275,94277,94279,94281,94283,94285,94287,94289,94291,94293,94295,94297,94299,94301,94303],{"class":60,"line":68},[58,94260,376],{"class":75},[58,94262,383],{"class":92},[58,94264,93653],{"class":75},[58,94266,89],{"class":82},[58,94268,1164],{"class":75},[58,94270,867],{"class":82},[58,94272,1164],{"class":75},[58,94274,861],{"class":82},[58,94276,1164],{"class":75},[58,94278,1284],{"class":82},[58,94280,1164],{"class":75},[58,94282,861],{"class":82},[58,94284,1164],{"class":75},[58,94286,1232],{"class":82},[58,94288,1164],{"class":75},[58,94290,985],{"class":82},[58,94292,1164],{"class":75},[58,94294,979],{"class":82},[58,94296,1164],{"class":75},[58,94298,1561],{"class":82},[58,94300,1164],{"class":75},[58,94302,1079],{"class":82},[58,94304,5303],{"class":75},[58,94306,94307],{"class":60,"line":79},[58,94308,94309],{"class":75},"np.unique(a)\n",[58,94311,94312],{"class":60,"line":105},[58,94313,94193],{"class":64},[58,94315,94316],{"class":60,"line":627},[58,94317,94318],{"class":64},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[175,94320,94321],{},"升序形式排序",[14,94323,94325],{"id":94324},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[48,94327,94329],{"className":31022,"code":94328,"language":31024,"meta":53,"style":53},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[55,94330,94331,94379,94384],{"__ignoreMap":53},[58,94332,94333,94335,94337,94339,94341,94343,94345,94347,94349,94351,94353,94355,94357,94359,94361,94363,94365,94367,94369,94371,94373,94375,94377],{"class":60,"line":61},[58,94334,376],{"class":75},[58,94336,383],{"class":92},[58,94338,93653],{"class":75},[58,94340,89],{"class":82},[58,94342,1164],{"class":75},[58,94344,867],{"class":82},[58,94346,1164],{"class":75},[58,94348,861],{"class":82},[58,94350,1164],{"class":75},[58,94352,1284],{"class":82},[58,94354,1164],{"class":75},[58,94356,861],{"class":82},[58,94358,1164],{"class":75},[58,94360,1232],{"class":82},[58,94362,1164],{"class":75},[58,94364,985],{"class":82},[58,94366,1164],{"class":75},[58,94368,979],{"class":82},[58,94370,1164],{"class":75},[58,94372,1561],{"class":82},[58,94374,1164],{"class":75},[58,94376,1079],{"class":82},[58,94378,5303],{"class":75},[58,94380,94381],{"class":60,"line":68},[58,94382,94383],{"class":64},"#返回数组中非零元素的索引\n",[58,94385,94386],{"class":60,"line":79},[58,94387,94388],{"class":75},"np.nonzero(a)\n",[14,94390,94392],{"id":94391},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[48,94394,94396],{"className":31022,"code":94395,"language":31024,"meta":53,"style":53},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[55,94397,94398,94446,94451],{"__ignoreMap":53},[58,94399,94400,94402,94404,94406,94408,94410,94412,94414,94416,94418,94420,94422,94424,94426,94428,94430,94432,94434,94436,94438,94440,94442,94444],{"class":60,"line":61},[58,94401,376],{"class":75},[58,94403,383],{"class":92},[58,94405,93653],{"class":75},[58,94407,89],{"class":82},[58,94409,1164],{"class":75},[58,94411,867],{"class":82},[58,94413,1164],{"class":75},[58,94415,861],{"class":82},[58,94417,1164],{"class":75},[58,94419,1284],{"class":82},[58,94421,1164],{"class":75},[58,94423,861],{"class":82},[58,94425,1164],{"class":75},[58,94427,1232],{"class":82},[58,94429,1164],{"class":75},[58,94431,985],{"class":82},[58,94433,1164],{"class":75},[58,94435,979],{"class":82},[58,94437,1164],{"class":75},[58,94439,1561],{"class":82},[58,94441,1164],{"class":75},[58,94443,1079],{"class":82},[58,94445,5303],{"class":75},[58,94447,94448],{"class":60,"line":68},[58,94449,94450],{"class":64},"#计算一组数中最大值与最小值的差，可指定轴\n",[58,94452,94453],{"class":60,"line":79},[58,94454,94455],{"class":75},"np.ptp(a)\n",[702,94457,94458],{},"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":53,"searchDepth":68,"depth":68,"links":94460},[94461,94462,94463,94464,94465,94466,94467,94468,94469,94470,94471],{"id":93723,"depth":68,"text":93724},{"id":93766,"depth":68,"text":93767},{"id":93874,"depth":68,"text":93875},{"id":93968,"depth":68,"text":93969},{"id":94008,"depth":68,"text":94009},{"id":94081,"depth":68,"text":94082},{"id":94149,"depth":68,"text":94150},{"id":94201,"depth":68,"text":94202},{"id":94245,"depth":68,"text":94246},{"id":94324,"depth":68,"text":94325},{"id":94391,"depth":68,"text":94392},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93709,"description":717},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94478,"title":94479,"body":94480,"description":717,"extension":718,"meta":95135,"navigation":720,"path":95136,"seo":95137,"stem":95138,"__hash__":95139},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94481,"toc":95123},[94482,94485,94489,94492,94708,94712,94715,94924,94928,94994,94999,95003,95006,95009,95047,95051,95054,95059,95063,95066,95069,95074,95078,95081,95085,95088,95091,95096,95100,95103,95106,95111,95115,95120],[10,94483,94479],{"id":94484},"_12其他常用函数",[14,94486,94488],{"id":94487},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[175,94490,94491],{},"将数组的数据按照行列复制扩展",[48,94493,94495],{"className":31022,"code":94494,"language":31024,"meta":53,"style":53},"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",[55,94496,94497,94513,94522,94526,94531,94536,94549,94553,94558,94563,94568,94572,94577,94601,94613,94617,94621,94626,94631,94636,94641,94645,94658,94662,94666,94671,94676,94681,94686,94691,94695,94699,94704],{"__ignoreMap":53},[58,94498,94499,94501,94503,94505,94507,94509,94511],{"class":60,"line":61},[58,94500,376],{"class":75},[58,94502,383],{"class":92},[58,94504,93631],{"class":75},[58,94506,89],{"class":82},[58,94508,1164],{"class":75},[58,94510,1105],{"class":82},[58,94512,799],{"class":75},[58,94514,94515,94518,94520],{"class":60,"line":68},[58,94516,94517],{"class":75},"np.tile(a,",[58,94519,867],{"class":82},[58,94521,799],{"class":75},[58,94523,94524],{"class":60,"line":79},[58,94525,94193],{"class":64},[58,94527,94528],{"class":60,"line":105},[58,94529,94530],{"class":64},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[58,94532,94533],{"class":60,"line":627},[58,94534,94535],{"class":64},"#行复制两次，列复制三次\n",[58,94537,94538,94541,94543,94545,94547],{"class":60,"line":509},[58,94539,94540],{"class":75},"np.tile(a,(",[58,94542,867],{"class":82},[58,94544,1164],{"class":75},[58,94546,861],{"class":82},[58,94548,31141],{"class":75},[58,94550,94551],{"class":60,"line":559},[58,94552,94193],{"class":64},[58,94554,94555],{"class":60,"line":654},[58,94556,94557],{"class":386},"'''\n",[58,94559,94560],{"class":60,"line":671},[58,94561,94562],{"class":386},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[58,94564,94565],{"class":60,"line":677},[58,94566,94567],{"class":386},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[58,94569,94570],{"class":60,"line":2260},[58,94571,94557],{"class":386},[58,94573,94574],{"class":60,"line":694},[58,94575,94576],{"class":64},"#创建二维数组\n",[58,94578,94579,94581,94583,94585,94587,94589,94591,94593,94595,94597,94599],{"class":60,"line":2270},[58,94580,93935],{"class":75},[58,94582,383],{"class":92},[58,94584,93631],{"class":75},[58,94586,89],{"class":82},[58,94588,1164],{"class":75},[58,94590,1309],{"class":82},[58,94592,93636],{"class":75},[58,94594,1079],{"class":82},[58,94596,1164],{"class":75},[58,94598,861],{"class":82},[58,94600,799],{"class":75},[58,94602,94603,94606,94608,94610],{"class":60,"line":2275},[58,94604,94605],{"class":75},"np.tile(aa,",[58,94607,867],{"class":82},[58,94609,1215],{"class":75},[58,94611,94612],{"class":64},"#一个数的时候就是行\n",[58,94614,94615],{"class":60,"line":2289},[58,94616,94193],{"class":64},[58,94618,94619],{"class":60,"line":2294},[58,94620,94557],{"class":386},[58,94622,94623],{"class":60,"line":2300},[58,94624,94625],{"class":386},"array([[ 1,  2,  3,  1,  2,  3],\n",[58,94627,94628],{"class":60,"line":2321},[58,94629,94630],{"class":386},"       [ 4,  5,  6,  4,  5,  6],\n",[58,94632,94633],{"class":60,"line":2326},[58,94634,94635],{"class":386},"       [ 7,  8,  9,  7,  8,  9],\n",[58,94637,94638],{"class":60,"line":2340},[58,94639,94640],{"class":386},"       [10, 11, 12, 10, 11, 12]])\n",[58,94642,94643],{"class":60,"line":2345},[58,94644,94557],{"class":386},[58,94646,94647,94650,94652,94654,94656],{"class":60,"line":2374},[58,94648,94649],{"class":75},"np.tile(aa,(",[58,94651,867],{"class":82},[58,94653,1164],{"class":75},[58,94655,861],{"class":82},[58,94657,31141],{"class":75},[58,94659,94660],{"class":60,"line":2379},[58,94661,94193],{"class":64},[58,94663,94664],{"class":60,"line":2396},[58,94665,94557],{"class":386},[58,94667,94668],{"class":60,"line":2401},[58,94669,94670],{"class":386},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[58,94672,94673],{"class":60,"line":2406},[58,94674,94675],{"class":386},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[58,94677,94678],{"class":60,"line":2411},[58,94679,94680],{"class":386},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[58,94682,94683],{"class":60,"line":2425},[58,94684,94685],{"class":386},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[58,94687,94688],{"class":60,"line":2430},[58,94689,94690],{"class":386},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[58,94692,94693],{"class":60,"line":3223},[58,94694,94675],{"class":386},[58,94696,94697],{"class":60,"line":3237},[58,94698,94680],{"class":386},[58,94700,94701],{"class":60,"line":3245},[58,94702,94703],{"class":386},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[58,94705,94706],{"class":60,"line":3250},[58,94707,94557],{"class":386},[14,94709,94711],{"id":94710},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[175,94713,94714],{},"repeat()将数组中的每个元素重复若干次",[48,94716,94718],{"className":31022,"code":94717,"language":31024,"meta":53,"style":53},"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",[55,94719,94720,94736,94745,94749,94754,94778,94783,94792,94796,94801,94805,94810,94826,94830,94834,94839,94844,94849,94853,94858,94862,94867,94872,94876,94892,94896,94900,94905,94910,94915,94920],{"__ignoreMap":53},[58,94721,94722,94724,94726,94728,94730,94732,94734],{"class":60,"line":61},[58,94723,376],{"class":75},[58,94725,383],{"class":92},[58,94727,93631],{"class":75},[58,94729,89],{"class":82},[58,94731,1164],{"class":75},[58,94733,1105],{"class":82},[58,94735,799],{"class":75},[58,94737,94738,94741,94743],{"class":60,"line":68},[58,94739,94740],{"class":75},"np.repeat(a,",[58,94742,861],{"class":82},[58,94744,799],{"class":75},[58,94746,94747],{"class":60,"line":79},[58,94748,94193],{"class":64},[58,94750,94751],{"class":60,"line":105},[58,94752,94753],{"class":64},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[58,94755,94756,94758,94760,94762,94764,94766,94768,94770,94772,94774,94776],{"class":60,"line":627},[58,94757,93935],{"class":75},[58,94759,383],{"class":92},[58,94761,93631],{"class":75},[58,94763,89],{"class":82},[58,94765,1164],{"class":75},[58,94767,1309],{"class":82},[58,94769,93636],{"class":75},[58,94771,1079],{"class":82},[58,94773,1164],{"class":75},[58,94775,861],{"class":82},[58,94777,799],{"class":75},[58,94779,94780],{"class":60,"line":509},[58,94781,94782],{"class":64},"#这个重复之后二维变成一维\n",[58,94784,94785,94788,94790],{"class":60,"line":559},[58,94786,94787],{"class":75},"np.repeat(aa,",[58,94789,867],{"class":82},[58,94791,799],{"class":75},[58,94793,94794],{"class":60,"line":654},[58,94795,94557],{"class":386},[58,94797,94798],{"class":60,"line":671},[58,94799,94800],{"class":386},"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",[58,94802,94803],{"class":60,"line":677},[58,94804,94557],{"class":386},[58,94806,94807],{"class":60,"line":2260},[58,94808,94809],{"class":64},"#指定axis\n",[58,94811,94812,94814,94816,94818,94820,94822,94824],{"class":60,"line":694},[58,94813,94787],{"class":75},[58,94815,867],{"class":82},[58,94817,1164],{"class":75},[58,94819,48158],{"class":5862},[58,94821,383],{"class":92},[58,94823,979],{"class":82},[58,94825,799],{"class":75},[58,94827,94828],{"class":60,"line":2270},[58,94829,94193],{"class":64},[58,94831,94832],{"class":60,"line":2275},[58,94833,94557],{"class":386},[58,94835,94836],{"class":60,"line":2289},[58,94837,94838],{"class":386},"array([[ 1,  2,  3],\n",[58,94840,94841],{"class":60,"line":2294},[58,94842,94843],{"class":386},"       [ 1,  2,  3],\n",[58,94845,94846],{"class":60,"line":2300},[58,94847,94848],{"class":386},"       [ 4,  5,  6],\n",[58,94850,94851],{"class":60,"line":2321},[58,94852,94848],{"class":386},[58,94854,94855],{"class":60,"line":2326},[58,94856,94857],{"class":386},"       [ 7,  8,  9],\n",[58,94859,94860],{"class":60,"line":2340},[58,94861,94857],{"class":386},[58,94863,94864],{"class":60,"line":2345},[58,94865,94866],{"class":386},"       [10, 11, 12],\n",[58,94868,94869],{"class":60,"line":2374},[58,94870,94871],{"class":386},"       [10, 11, 12]])\n",[58,94873,94874],{"class":60,"line":2379},[58,94875,94557],{"class":386},[58,94877,94878,94880,94882,94884,94886,94888,94890],{"class":60,"line":2396},[58,94879,94787],{"class":75},[58,94881,867],{"class":82},[58,94883,1164],{"class":75},[58,94885,48158],{"class":5862},[58,94887,383],{"class":92},[58,94889,89],{"class":82},[58,94891,799],{"class":75},[58,94893,94894],{"class":60,"line":2401},[58,94895,94193],{"class":64},[58,94897,94898],{"class":60,"line":2406},[58,94899,94557],{"class":386},[58,94901,94902],{"class":60,"line":2411},[58,94903,94904],{"class":386},"array([[ 1,  1,  2,  2,  3,  3],\n",[58,94906,94907],{"class":60,"line":2425},[58,94908,94909],{"class":386},"       [ 4,  4,  5,  5,  6,  6],\n",[58,94911,94912],{"class":60,"line":2430},[58,94913,94914],{"class":386},"       [ 7,  7,  8,  8,  9,  9],\n",[58,94916,94917],{"class":60,"line":3223},[58,94918,94919],{"class":386},"       [10, 10, 11, 11, 12, 12]])\n",[58,94921,94922],{"class":60,"line":3237},[58,94923,94557],{"class":386},[14,94925,94927],{"id":94926},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[48,94929,94931],{"className":31022,"code":94930,"language":31024,"meta":53,"style":53},"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",[55,94932,94933,94949,94954,94966,94970,94975,94985,94989],{"__ignoreMap":53},[58,94934,94935,94937,94939,94941,94943,94945,94947],{"class":60,"line":61},[58,94936,376],{"class":75},[58,94938,383],{"class":92},[58,94940,93631],{"class":75},[58,94942,89],{"class":82},[58,94944,1164],{"class":75},[58,94946,1105],{"class":82},[58,94948,799],{"class":75},[58,94950,94951],{"class":60,"line":68},[58,94952,94953],{"class":64},"#array([，2，3，4])\n",[58,94955,94956,94959,94961,94963],{"class":60,"line":79},[58,94957,94958],{"class":75},"np.roll(a,",[58,94960,867],{"class":82},[58,94962,1215],{"class":75},[58,94964,94965],{"class":64},"#传正数向后调多少位，传负数向前调多少位\n",[58,94967,94968],{"class":60,"line":105},[58,94969,94193],{"class":64},[58,94971,94972],{"class":60,"line":627},[58,94973,94974],{"class":64},"#array([3, 4, 1, 2])\n",[58,94976,94977,94979,94981,94983],{"class":60,"line":509},[58,94978,94958],{"class":75},[58,94980,1318],{"class":92},[58,94982,89],{"class":82},[58,94984,799],{"class":75},[58,94986,94987],{"class":60,"line":559},[58,94988,94193],{"class":64},[58,94990,94991],{"class":60,"line":654},[58,94992,94993],{"class":64},"#array([2, 3, 4, 1])\n",[175,94995,94996],{},[119,94997],{"alt":53,"src":94998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,95000,95002],{"id":95001},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[175,95004,95005],{},"resize()重新调整数组的大小",[175,95007,95008],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[48,95010,95012],{"className":31022,"code":95011,"language":31024,"meta":53,"style":53},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[55,95013,95014,95019,95032],{"__ignoreMap":53},[58,95015,95016],{"class":60,"line":61},[58,95017,95018],{"class":64},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[58,95020,95021,95024,95026,95028,95030],{"class":60,"line":68},[58,95022,95023],{"class":75},"np.resize(aa,(",[58,95025,867],{"class":82},[58,95027,1164],{"class":75},[58,95029,1130],{"class":82},[58,95031,31141],{"class":75},[58,95033,95034,95036,95038,95040,95042,95044],{"class":60,"line":79},[58,95035,95023],{"class":75},[58,95037,867],{"class":82},[58,95039,1164],{"class":75},[58,95041,1206],{"class":82},[58,95043,83401],{"class":75},[58,95045,95046],{"class":64},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,95048,95050],{"id":95049},"_125-placeput函数","12.5 place()\u002Fput()函数",[175,95052,95053],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[175,95055,95056],{},[119,95057],{"alt":53,"src":95058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,95060,95062],{"id":95061},"_126-保存加载文件","12.6 保存加载文件",[175,95064,95065],{},"savetxt():将数据保存到txt文件中",[175,95067,95068],{},"loadtxt():从文件加载数据",[175,95070,95071],{},[119,95072],{"alt":53,"src":95073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,95075,95077],{"id":95076},"_127-genfromtxt函数","12.7 genfromtxt()函数",[175,95079,95080],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,95082,95084],{"id":95083},"_128-anyall函数","12.8 any()\u002Fall()函数",[175,95086,95087],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[175,95089,95090],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[175,95092,95093],{},[119,95094],{"alt":53,"src":95095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,95097,95099],{"id":95098},"_129-where语句","12.9 where语句",[175,95101,95102],{},"np.where(条件,x,y)",[175,95104,95105],{},"如果条件为True,对应值为x,否则对应值为y",[175,95107,95108],{},[119,95109],{"alt":53,"src":95110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,95112,95114],{"id":95113},"_1210-dot矩阵","12.10 dot()矩阵",[175,95116,95117],{},[119,95118],{"alt":53,"src":95119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[702,95121,95122],{},"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":53,"searchDepth":68,"depth":68,"links":95124},[95125,95126,95127,95128,95129,95130,95131,95132,95133,95134],{"id":94487,"depth":68,"text":94488},{"id":94710,"depth":68,"text":94711},{"id":94926,"depth":68,"text":94927},{"id":95001,"depth":68,"text":95002},{"id":95049,"depth":68,"text":95050},{"id":95061,"depth":68,"text":95062},{"id":95076,"depth":68,"text":95077},{"id":95083,"depth":68,"text":95084},{"id":95098,"depth":68,"text":95099},{"id":95113,"depth":68,"text":95114},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94479,"description":717},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95141,"title":95142,"body":95143,"description":717,"extension":718,"meta":95496,"navigation":720,"path":95497,"seo":95498,"stem":95499,"__hash__":95500},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95144,"toc":95494},[95145,95148,95151,95154,95157,95160,95225,95227,95491],[10,95146,95142],{"id":95147},"_13数组排序",[175,95149,95150],{},"排序主要用到的方法是np.sort和np.argsort",[175,95152,95153],{},"其中np.sort()对数组直接排序",[175,95155,95156],{},"而np.argsort()是返回排序后的原始索引",[175,95158,95159],{},"①一维数组",[48,95161,95163],{"className":31022,"code":95162,"language":31024,"meta":53,"style":53},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[55,95164,95165,95169,95209,95217],{"__ignoreMap":53},[58,95166,95167],{"class":60,"line":61},[58,95168,93734],{"class":64},[58,95170,95171,95173,95175,95177,95179,95181,95183,95185,95187,95189,95191,95193,95195,95197,95199,95201,95203,95205,95207],{"class":60,"line":68},[58,95172,376],{"class":75},[58,95174,383],{"class":92},[58,95176,93653],{"class":75},[58,95178,861],{"class":82},[58,95180,1164],{"class":75},[58,95182,1284],{"class":82},[58,95184,1164],{"class":75},[58,95186,1181],{"class":82},[58,95188,1164],{"class":75},[58,95190,1561],{"class":82},[58,95192,1164],{"class":75},[58,95194,1065],{"class":82},[58,95196,1164],{"class":75},[58,95198,1678],{"class":82},[58,95200,1164],{"class":75},[58,95202,1130],{"class":82},[58,95204,1164],{"class":75},[58,95206,1232],{"class":82},[58,95208,5303],{"class":75},[58,95210,95211,95214],{"class":60,"line":79},[58,95212,95213],{"class":75},"np.sort(a)",[58,95215,95216],{"class":64},"#升序排序\n",[58,95218,95219,95222],{"class":60,"line":105},[58,95220,95221],{"class":75},"np.argsort(a)",[58,95223,95224],{"class":64},"#按照元素大小来索引排序\n",[175,95226,93920],{},[48,95228,95230],{"className":31022,"code":95229,"language":31024,"meta":53,"style":53},"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",[55,95231,95232,95244,95270,95275,95279,95284,95289,95294,95299,95303,95311,95315,95320,95325,95330,95335,95339,95344,95357,95361,95366,95371,95376,95381,95385,95390,95402,95406,95410,95414,95418,95422,95426,95431,95446,95451,95460,95465,95469,95473,95478,95482,95487],{"__ignoreMap":53},[58,95233,95234,95237,95239,95241],{"class":60,"line":61},[58,95235,95236],{"class":75},"np.random.seed(",[58,95238,979],{"class":82},[58,95240,1215],{"class":75},[58,95242,95243],{"class":64},"#保证每次值一样\n",[58,95245,95246,95248,95250,95252,95254,95256,95258,95260,95262,95264,95266,95268],{"class":60,"line":68},[58,95247,93935],{"class":75},[58,95249,383],{"class":92},[58,95251,93743],{"class":75},[58,95253,1097],{"class":82},[58,95255,1164],{"class":75},[58,95257,32140],{"class":5862},[58,95259,383],{"class":92},[58,95261,793],{"class":75},[58,95263,1079],{"class":82},[58,95265,1164],{"class":75},[58,95267,1130],{"class":82},[58,95269,31141],{"class":75},[58,95271,95272],{"class":60,"line":79},[58,95273,95274],{"class":64},"#原数组：\n",[58,95276,95277],{"class":60,"line":105},[58,95278,94557],{"class":386},[58,95280,95281],{"class":60,"line":627},[58,95282,95283],{"class":386},"array([[44, 47, 64, 67, 67,  9],\n",[58,95285,95286],{"class":60,"line":509},[58,95287,95288],{"class":386},"       [83, 21, 36, 87, 70, 88],\n",[58,95290,95291],{"class":60,"line":559},[58,95292,95293],{"class":386},"       [88, 12, 58, 65, 39, 87],\n",[58,95295,95296],{"class":60,"line":654},[58,95297,95298],{"class":386},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[58,95300,95301],{"class":60,"line":671},[58,95302,94557],{"class":386},[58,95304,95305,95308],{"class":60,"line":677},[58,95306,95307],{"class":75},"np.sort(aa)",[58,95309,95310],{"class":64},"#每行进行了排序\n",[58,95312,95313],{"class":60,"line":2260},[58,95314,94557],{"class":386},[58,95316,95317],{"class":60,"line":694},[58,95318,95319],{"class":386},"array([[ 9, 44, 47, 64, 67, 67],\n",[58,95321,95322],{"class":60,"line":2270},[58,95323,95324],{"class":386},"       [21, 36, 70, 83, 87, 88],\n",[58,95326,95327],{"class":60,"line":2275},[58,95328,95329],{"class":386},"       [12, 39, 58, 65, 87, 88],\n",[58,95331,95332],{"class":60,"line":2289},[58,95333,95334],{"class":386},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[58,95336,95337],{"class":60,"line":2294},[58,95338,94557],{"class":386},[58,95340,95341],{"class":60,"line":2300},[58,95342,95343],{"class":64},"#axis=0时\n",[58,95345,95346,95349,95351,95353,95355],{"class":60,"line":2321},[58,95347,95348],{"class":75},"np.sort(aa,",[58,95350,48158],{"class":5862},[58,95352,383],{"class":92},[58,95354,979],{"class":82},[58,95356,799],{"class":75},[58,95358,95359],{"class":60,"line":2326},[58,95360,94557],{"class":386},[58,95362,95363],{"class":60,"line":2340},[58,95364,95365],{"class":386},"array([[44, 12, 36, 37, 25,  9],\n",[58,95367,95368],{"class":60,"line":2345},[58,95369,95370],{"class":386},"       [46, 21, 58, 65, 39, 77],\n",[58,95372,95373],{"class":60,"line":2374},[58,95374,95375],{"class":386},"       [83, 47, 64, 67, 67, 87],\n",[58,95377,95378],{"class":60,"line":2379},[58,95379,95380],{"class":386},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[58,95382,95383],{"class":60,"line":2396},[58,95384,94557],{"class":386},[58,95386,95387],{"class":60,"line":2401},[58,95388,95389],{"class":64},"#axis=1时,为默认值\n",[58,95391,95392,95394,95396,95398,95400],{"class":60,"line":2406},[58,95393,95348],{"class":75},[58,95395,48158],{"class":5862},[58,95397,383],{"class":92},[58,95399,89],{"class":82},[58,95401,799],{"class":75},[58,95403,95404],{"class":60,"line":2411},[58,95405,94557],{"class":386},[58,95407,95408],{"class":60,"line":2425},[58,95409,95319],{"class":386},[58,95411,95412],{"class":60,"line":2430},[58,95413,95324],{"class":386},[58,95415,95416],{"class":60,"line":3223},[58,95417,95329],{"class":386},[58,95419,95420],{"class":60,"line":3237},[58,95421,95334],{"class":386},[58,95423,95424],{"class":60,"line":3245},[58,95425,94557],{"class":386},[58,95427,95428],{"class":60,"line":3250},[58,95429,95430],{"class":64},"#按最后一列排序\n",[58,95432,95433,95435,95437,95440,95442,95444],{"class":60,"line":3256},[58,95434,1049],{"class":75},[58,95436,383],{"class":92},[58,95438,95439],{"class":75},"aa[:,",[58,95441,1318],{"class":92},[58,95443,89],{"class":82},[58,95445,33890],{"class":75},[58,95447,95448],{"class":60,"line":3262},[58,95449,95450],{"class":64},"#获取最后一列排好序的索引\n",[58,95452,95453,95455,95457],{"class":60,"line":3267},[58,95454,74689],{"class":75},[58,95456,383],{"class":92},[58,95458,95459],{"class":75},"np.argsort(b)\n",[58,95461,95462],{"class":60,"line":8594},[58,95463,95464],{"class":75},"aa[index]\n",[58,95466,95467],{"class":60,"line":8618},[58,95468,94557],{"class":386},[58,95470,95471],{"class":60,"line":8623},[58,95472,95283],{"class":386},[58,95474,95475],{"class":60,"line":8629},[58,95476,95477],{"class":386},"       [46, 88, 81, 37, 25, 77],\n",[58,95479,95480],{"class":60,"line":8656},[58,95481,95293],{"class":386},[58,95483,95484],{"class":60,"line":8661},[58,95485,95486],{"class":386},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[58,95488,95489],{"class":60,"line":8667},[58,95490,94557],{"class":386},[702,95492,95493],{},"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":53,"searchDepth":68,"depth":68,"links":95495},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95142,"description":717},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95502,"title":95503,"body":95504,"description":717,"extension":718,"meta":95534,"navigation":720,"path":95535,"seo":95536,"stem":95537,"__hash__":95538},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95505,"toc":95532},[95506,95509,95512,95515,95518,95521,95524,95527],[10,95507,95503],{"id":95508},"_14广播机制",[175,95510,95511],{},"广播的规则：",[175,95513,95514],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[175,95516,95517],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[175,95519,95520],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[175,95522,95523],{},"3.如果没有维度形状为1，则会引发异常",[175,95525,95526],{},"也就是只有维度或者个数为1才可以进行广播操作",[175,95528,95529],{},[119,95530],{"alt":53,"src":95531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":53,"searchDepth":68,"depth":68,"links":95533},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95503,"description":717},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95540,"title":95541,"body":95542,"description":717,"extension":718,"meta":95640,"navigation":720,"path":95641,"seo":95642,"stem":95643,"__hash__":95644},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95543,"toc":95638},[95544,95547,95550,95635],[10,95545,95541],{"id":95546},"_15比较掩码",[175,95548,95549],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[48,95551,95553],{"className":31022,"code":95552,"language":31024,"meta":53,"style":53},"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",[55,95554,95555,95601,95612,95626,95630],{"__ignoreMap":53},[58,95556,95557,95559,95561,95564,95566,95568,95570,95572,95574,95576,95578,95580,95582,95584,95586,95588,95590,95592,95594,95596,95598],{"class":60,"line":61},[58,95558,376],{"class":75},[58,95560,383],{"class":92},[58,95562,95563],{"class":75},"np.array([[",[58,95565,89],{"class":82},[58,95567,1164],{"class":75},[58,95569,867],{"class":82},[58,95571,1164],{"class":75},[58,95573,861],{"class":82},[58,95575,48674],{"class":75},[58,95577,1258],{"class":82},[58,95579,1164],{"class":75},[58,95581,1284],{"class":82},[58,95583,1164],{"class":75},[58,95585,1309],{"class":82},[58,95587,48674],{"class":75},[58,95589,1511],{"class":82},[58,95591,1164],{"class":75},[58,95593,1536],{"class":82},[58,95595,1164],{"class":75},[58,95597,1561],{"class":82},[58,95599,95600],{"class":75},"]])\n",[58,95602,95603,95605,95607,95609],{"class":60,"line":68},[58,95604,376],{"class":75},[58,95606,373],{"class":92},[58,95608,1486],{"class":82},[58,95610,95611],{"class":64},"#结果是一个由True,False组成的数组\n",[58,95613,95614,95617,95619,95621,95623],{"class":60,"line":79},[58,95615,95616],{"class":75},"a[a",[58,95618,373],{"class":92},[58,95620,1486],{"class":82},[58,95622,1724],{"class":75},[58,95624,95625],{"class":64},"#小于20的元素会存到这个数组中\n",[58,95627,95628],{"class":60,"line":105},[58,95629,94193],{"class":64},[58,95631,95632],{"class":60,"line":627},[58,95633,95634],{"class":64},"#array([ 1,  2,  3, 11, 12, 13])\n",[702,95636,95637],{},"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":53,"searchDepth":68,"depth":68,"links":95639},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95541,"description":717},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95646,"title":95647,"body":95648,"description":717,"extension":718,"meta":95740,"navigation":720,"path":95741,"seo":95742,"stem":95743,"__hash__":95744},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95649,"toc":95738},[95650,95653,95656,95659,95662,95665,95730,95735],[10,95651,95647],{"id":95652},"_16魔法命令time",[175,95654,95655],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[175,95657,95658],{},"%:行模式",[175,95660,95661],{},"%%:单元格模式",[175,95663,95664],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[48,95666,95668],{"className":31022,"code":95667,"language":31024,"meta":53,"style":53},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[55,95669,95670,95675,95682,95687,95696,95709,95713,95721],{"__ignoreMap":53},[58,95671,95672],{"class":60,"line":61},[58,95673,95674],{"class":64},"#程序执行时间\n",[58,95676,95677,95679],{"class":60,"line":68},[58,95678,31036],{"class":92},[58,95680,95681],{"class":75}," time \n",[58,95683,95684],{"class":60,"line":79},[58,95685,95686],{"class":64},"#获取时间\n",[58,95688,95689,95692,95694],{"class":60,"line":105},[58,95690,95691],{"class":75},"start",[58,95693,383],{"class":92},[58,95695,33062],{"class":75},[58,95697,95698,95701,95704,95706],{"class":60,"line":627},[58,95699,95700],{"class":75},"time.sleep(",[58,95702,95703],{"class":82},"0.4",[58,95705,1215],{"class":75},[58,95707,95708],{"class":64},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[58,95710,95711],{"class":60,"line":509},[58,95712,95686],{"class":64},[58,95714,95715,95717,95719],{"class":60,"line":559},[58,95716,46445],{"class":75},[58,95718,383],{"class":92},[58,95720,33062],{"class":75},[58,95722,95723,95725,95727],{"class":60,"line":654},[58,95724,46445],{"class":75},[58,95726,1318],{"class":92},[58,95728,95729],{"class":75},"start\n",[175,95731,95732],{},[119,95733],{"alt":53,"src":95734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[702,95736,95737],{},"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":53,"searchDepth":68,"depth":68,"links":95739},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95647,"description":717},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95746,"title":95747,"body":95748,"description":717,"extension":718,"meta":95783,"navigation":720,"path":95784,"seo":95785,"stem":95786,"__hash__":95787},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95749,"toc":95781},[95750,95753,95756,95759,95762,95765,95768,95771,95776],[10,95751,95747],{"id":95752},"_17魔法命令timeit",[175,95754,95755],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[175,95757,95758],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[175,95760,95761],{},"单元格模式：",[175,95763,95764],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[175,95766,95767],{},"初始化语句执行次数由轮数来决定",[175,95769,95770],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[175,95772,95773],{},[119,95774],{"alt":53,"src":95775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[175,95777,95778],{},[119,95779],{"alt":53,"src":95780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":53,"searchDepth":68,"depth":68,"links":95782},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95747,"description":717},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95789,"title":95790,"body":95791,"description":717,"extension":718,"meta":95809,"navigation":720,"path":95810,"seo":95811,"stem":95812,"__hash__":95813},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95792,"toc":95807},[95793,95796,95799,95802],[10,95794,95790],{"id":95795},"_18魔法命令writefile和run",[175,95797,95798],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[175,95800,95801],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[175,95803,95804],{},[119,95805],{"alt":53,"src":95806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":53,"searchDepth":68,"depth":68,"links":95808},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95790,"description":717},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95815,"title":95816,"body":95817,"description":717,"extension":718,"meta":95870,"navigation":720,"path":95871,"seo":95872,"stem":95873,"__hash__":95874},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95818,"toc":95868},[95819,95822,95825,95827,95830,95833,95838,95841,95844,95847,95850,95853,95856,95859,95862,95865],[10,95820,95816],{"id":95821},"_19魔法命令memit",[175,95823,95824],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[175,95826,25243],{},[175,95828,95829],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[175,95831,95832],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[175,95834,95835],{},[119,95836],{"alt":53,"src":95837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[175,95839,95840],{},"补充：",[175,95842,95843],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[175,95845,95846],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[175,95848,95849],{},"解决方法：",[175,95851,95852],{},"1.cmd",[175,95854,95855],{},"2.依次输入以下代码：",[175,95857,95858],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[175,95860,95861],{},"pip install --upgrade ipython",[175,95863,95864],{},"#升级 memory_profiler 和 setuptools",[175,95866,95867],{},"pip install --upgrade memory_profiler setuptools",{"title":53,"searchDepth":68,"depth":68,"links":95869},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95816,"description":717},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95876,"title":95877,"body":95878,"description":717,"extension":718,"meta":97524,"navigation":720,"path":97525,"seo":97526,"stem":97527,"__hash__":97528},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95879,"toc":97494},[95880,95883,95887,95891,95952,95955,95960,95964,95969,95974,95979,95984,95987,95992,95996,96000,96033,96036,96039,96042,96094,96097,96133,96136,96178,96182,96203,96205,96242,96244,96249,96251,96256,96260,96263,96291,96295,96299,96352,96356,96448,96452,96456,96459,96464,96468,96493,96498,96502,96505,96508,96511,96514,96517,96520,96523,96535,96539,96543,96546,96578,96581,96604,96607,96633,96636,96662,96665,96699,96702,96764,96768,96771,96775,96778,96804,96807,96810,96815,96818,96887,96889,96894,96955,96958,96969,96975,96980,96984,96987,97000,97004,97019,97021,97044,97046,97072,97075,97078,97081,97129,97131,97136,97140,97144,97171,97175,97202,97205,97210,97215,97305,97309,97367,97372,97375,97378,97420,97424,97480,97485,97488,97491],[10,95881,95877],{"id":95882},"_2创建数组",[14,95884,95886],{"id":95885},"_21-array函数创建数组","2.1 array()函数创建数组",[114,95888,95890],{"id":95889},"_221-函数语句","2.2.1 函数语句",[48,95892,95894],{"className":31022,"code":95893,"language":31024,"meta":53,"style":53},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[55,95895,95896],{"__ignoreMap":53},[58,95897,95898,95901,95904,95906,95908,95910,95912,95914,95917,95919,95922,95924,95927,95929,95931,95933,95936,95938,95941,95943,95946,95948,95950],{"class":60,"line":61},[58,95899,95900],{"class":75},"numpy.array(",[58,95902,95903],{"class":82},"object",[58,95905,469],{"class":75},[58,95907,94129],{"class":5862},[58,95909,14208],{"class":92},[58,95911,39577],{"class":82},[58,95913,469],{"class":75},[58,95915,95916],{"class":5862},"copy",[58,95918,14208],{"class":92},[58,95920,95921],{"class":82}," True",[58,95923,469],{"class":75},[58,95925,95926],{"class":5862},"order",[58,95928,14208],{"class":92},[58,95930,39577],{"class":82},[58,95932,469],{"class":75},[58,95934,95935],{"class":5862},"subok",[58,95937,14208],{"class":92},[58,95939,95940],{"class":82}," False",[58,95942,469],{"class":75},[58,95944,95945],{"class":5862},"ndmin",[58,95947,14208],{"class":92},[58,95949,4739],{"class":82},[58,95951,799],{"class":75},[175,95953,95954],{},"参数：",[175,95956,95957],{},[119,95958],{"alt":53,"src":95959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[114,95961,95963],{"id":95962},"_222-实例","2.2.2 实例",[175,95965,95966],{},[119,95967],{"alt":53,"src":95968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[175,95970,95971],{},[119,95972],{"alt":53,"src":95973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[175,95975,95976],{},[119,95977],{"alt":53,"src":95978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[175,95980,95981],{},[119,95982],{"alt":53,"src":95983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[175,95985,95986],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[175,95988,95989],{},[119,95990],{"alt":53,"src":95991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,95993,95995],{"id":95994},"_22-随机数创建数组","2.2 随机数创建数组",[114,95997,95999],{"id":95998},"_221-random语句","2.2.1 random语句",[48,96001,96003],{"className":31022,"code":96002,"language":31024,"meta":53,"style":53},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[55,96004,96005,96010,96015,96023,96028],{"__ignoreMap":53},[58,96006,96007],{"class":60,"line":61},[58,96008,96009],{"class":64},"#random.random()\n",[58,96011,96012],{"class":60,"line":68},[58,96013,96014],{"class":64},"#确定随机种子,就是每次运行结果是相同的\n",[58,96016,96017,96019,96021],{"class":60,"line":79},[58,96018,95236],{"class":75},[58,96020,979],{"class":82},[58,96022,799],{"class":75},[58,96024,96025],{"class":60,"line":105},[58,96026,96027],{"class":75},"np.random.random()\n",[58,96029,96030],{"class":60,"line":627},[58,96031,96032],{"class":64},"#生成一个随机的数目\n",[175,96034,96035],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[175,96037,96038],{},"可以指定数组形状 size",[175,96040,96041],{},"①生成一维数组",[48,96043,96045],{"className":31022,"code":96044,"language":31024,"meta":53,"style":53},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[55,96046,96047,96052,96065,96070,96086],{"__ignoreMap":53},[58,96048,96049],{"class":60,"line":61},[58,96050,96051],{"class":64},"#random.random(size())\n",[58,96053,96054,96057,96059,96061,96063],{"class":60,"line":68},[58,96055,96056],{"class":75},"np.random.random(",[58,96058,32140],{"class":5862},[58,96060,383],{"class":92},[58,96062,1105],{"class":82},[58,96064,799],{"class":75},[58,96066,96067],{"class":60,"line":79},[58,96068,96069],{"class":64},"#生成一位的五个元素\n",[58,96071,96072,96074,96076,96078,96080,96082,96084],{"class":60,"line":105},[58,96073,376],{"class":75},[58,96075,383],{"class":92},[58,96077,96056],{"class":75},[58,96079,32140],{"class":5862},[58,96081,383],{"class":92},[58,96083,1079],{"class":82},[58,96085,799],{"class":75},[58,96087,96088,96091],{"class":60,"line":627},[58,96089,96090],{"class":75},"a.shape ",[58,96092,96093],{"class":64},"#输出数组形状\n",[175,96095,96096],{},"②生成二维数组",[48,96098,96100],{"className":31022,"code":96099,"language":31024,"meta":53,"style":53},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[55,96101,96102,96106,96128],{"__ignoreMap":53},[58,96103,96104],{"class":60,"line":61},[58,96105,93930],{"class":64},[58,96107,96108,96110,96112,96114,96116,96118,96120,96122,96124,96126],{"class":60,"line":68},[58,96109,93935],{"class":75},[58,96111,383],{"class":92},[58,96113,96056],{"class":75},[58,96115,32140],{"class":5862},[58,96117,383],{"class":92},[58,96119,793],{"class":75},[58,96121,1079],{"class":82},[58,96123,1164],{"class":75},[58,96125,1105],{"class":82},[58,96127,31141],{"class":75},[58,96129,96130],{"class":60,"line":79},[58,96131,96132],{"class":64},"#生成四行五列的数组\n",[175,96134,96135],{},"③生成三维数组",[48,96137,96139],{"className":31022,"code":96138,"language":31024,"meta":53,"style":53},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[55,96140,96141,96146,96173],{"__ignoreMap":53},[58,96142,96143],{"class":60,"line":61},[58,96144,96145],{"class":64},"#三维数组\n",[58,96147,96148,96151,96153,96155,96157,96159,96161,96163,96165,96167,96169,96171],{"class":60,"line":68},[58,96149,96150],{"class":75},"aaa",[58,96152,383],{"class":92},[58,96154,96056],{"class":75},[58,96156,32140],{"class":5862},[58,96158,383],{"class":92},[58,96160,793],{"class":75},[58,96162,867],{"class":82},[58,96164,1164],{"class":75},[58,96166,861],{"class":82},[58,96168,1164],{"class":75},[58,96170,1079],{"class":82},[58,96172,31141],{"class":75},[58,96174,96175],{"class":60,"line":79},[58,96176,96177],{"class":75},"aaa.shape\n",[114,96179,96181],{"id":96180},"_222-randint语句","2.2.2 randint语句",[48,96183,96185],{"className":31022,"code":96184,"language":31024,"meta":53,"style":53},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[55,96186,96187,96192],{"__ignoreMap":53},[58,96188,96189],{"class":60,"line":61},[58,96190,96191],{"class":64},"#生成随机的整数 random.randint(low,high,size)\n",[58,96193,96194,96196,96198,96200],{"class":60,"line":68},[58,96195,93743],{"class":75},[58,96197,1105],{"class":82},[58,96199,14358],{"class":75},[58,96201,96202],{"class":64},"#0~5中的随机一个数\n",[175,96204,96041],{},[48,96206,96208],{"className":31022,"code":96207,"language":31024,"meta":53,"style":53},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[55,96209,96210,96215,96237],{"__ignoreMap":53},[58,96211,96212],{"class":60,"line":61},[58,96213,96214],{"class":64},"#一维\n",[58,96216,96217,96219,96221,96223,96225,96227,96229,96231,96233,96235],{"class":60,"line":68},[58,96218,93743],{"class":75},[58,96220,89],{"class":82},[58,96222,1164],{"class":75},[58,96224,1258],{"class":82},[58,96226,1164],{"class":75},[58,96228,32140],{"class":5862},[58,96230,383],{"class":92},[58,96232,793],{"class":75},[58,96234,1232],{"class":82},[58,96236,31141],{"class":75},[58,96238,96239],{"class":60,"line":79},[58,96240,96241],{"class":64},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[175,96243,96096],{},[175,96245,96246],{},[119,96247],{"alt":53,"src":96248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[175,96250,96135],{},[175,96252,96253],{},[119,96254],{"alt":53,"src":96255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[114,96257,96259],{"id":96258},"_222-rand语句","2.2.2 rand语句",[175,96261,96262],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[48,96264,96266],{"className":31022,"code":96265,"language":31024,"meta":53,"style":53},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[55,96267,96268,96281,96286],{"__ignoreMap":53},[58,96269,96270,96273,96275,96277,96279],{"class":60,"line":61},[58,96271,96272],{"class":75},"np.random.rand(",[58,96274,1097],{"class":82},[58,96276,1164],{"class":75},[58,96278,1232],{"class":82},[58,96280,799],{"class":75},[58,96282,96283],{"class":60,"line":68},[58,96284,96285],{"class":64},"#第一个参数100：行数，表示有100个样本\n",[58,96287,96288],{"class":60,"line":79},[58,96289,96290],{"class":64},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,96292,96294],{"id":96293},"_23-arange创建数组","2.3 arange()创建数组",[114,96296,96298],{"id":96297},"_231-函数语句","2.3.1 函数语句",[48,96300,96302],{"className":31022,"code":96301,"language":31024,"meta":53,"style":53},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[55,96303,96304,96318,96323,96328,96333,96338,96343,96348],{"__ignoreMap":53},[58,96305,96306,96309,96311,96313,96316],{"class":60,"line":61},[58,96307,96308],{"class":75},"numpy.arange([start,] stop[, step], ",[58,96310,94129],{"class":5862},[58,96312,383],{"class":92},[58,96314,96315],{"class":82},"None",[58,96317,799],{"class":75},[58,96319,96320],{"class":60,"line":68},[58,96321,96322],{"class":64},"#参数\n",[58,96324,96325],{"class":60,"line":79},[58,96326,96327],{"class":386},"\"\"\"\n",[58,96329,96330],{"class":60,"line":105},[58,96331,96332],{"class":386},"start:起始值，可选，默认从 0 开始。\n",[58,96334,96335],{"class":60,"line":627},[58,96336,96337],{"class":386},"stop:结束值（不包含该值）。\n",[58,96339,96340],{"class":60,"line":509},[58,96341,96342],{"class":386},"step:步长，可选，默认是 1。可以为浮点数。\n",[58,96344,96345],{"class":60,"line":559},[58,96346,96347],{"class":386},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[58,96349,96350],{"class":60,"line":654},[58,96351,96327],{"class":386},[114,96353,96355],{"id":96354},"_232-实例","2.3.2 实例",[48,96357,96359],{"className":31022,"code":96358,"language":31024,"meta":53,"style":53},"#创建一维数组\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",[55,96360,96361,96365,96389,96394,96399,96403,96426,96430,96434,96439,96444],{"__ignoreMap":53},[58,96362,96363],{"class":60,"line":61},[58,96364,93734],{"class":64},[58,96366,96367,96369,96371,96373,96375,96377,96379,96381,96383,96385,96387],{"class":60,"line":68},[58,96368,93631],{"class":75},[58,96370,89],{"class":82},[58,96372,1164],{"class":75},[58,96374,1511],{"class":82},[58,96376,1164],{"class":75},[58,96378,89],{"class":82},[58,96380,1164],{"class":75},[58,96382,94129],{"class":5862},[58,96384,383],{"class":92},[58,96386,796],{"class":82},[58,96388,799],{"class":75},[58,96390,96391],{"class":60,"line":79},[58,96392,96393],{"class":64},"#输出结果：\n",[58,96395,96396],{"class":60,"line":105},[58,96397,96398],{"class":64},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[58,96400,96401],{"class":60,"line":627},[58,96402,94576],{"class":64},[58,96404,96405,96408,96410,96412,96414,96417,96419,96421,96423],{"class":60,"line":509},[58,96406,96407],{"class":75},"np.array([np.arange(",[58,96409,89],{"class":82},[58,96411,1164],{"class":75},[58,96413,1079],{"class":82},[58,96415,96416],{"class":75},"),np.arange(",[58,96418,1079],{"class":82},[58,96420,1164],{"class":75},[58,96422,1155],{"class":82},[58,96424,96425],{"class":75},")])\n",[58,96427,96428],{"class":60,"line":559},[58,96429,94193],{"class":64},[58,96431,96432],{"class":60,"line":654},[58,96433,96327],{"class":386},[58,96435,96436],{"class":60,"line":671},[58,96437,96438],{"class":386},"array([[1, 2, 3],\n",[58,96440,96441],{"class":60,"line":677},[58,96442,96443],{"class":386},"       [4, 5, 6]])\n",[58,96445,96446],{"class":60,"line":2260},[58,96447,96327],{"class":386},[14,96449,96451],{"id":96450},"_24-生态分布","2.4 生态分布",[114,96453,96455],{"id":96454},"_241-标准正态分布","2.4.1 标准正态分布",[175,96457,96458],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[175,96460,96461],{},[119,96462],{"alt":53,"src":96463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[114,96465,96467],{"id":96466},"_242-常规正态分布","2.4.2 常规正态分布",[48,96469,96471],{"className":31022,"code":96470,"language":31024,"meta":53,"style":53},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[55,96472,96473,96478,96483,96488],{"__ignoreMap":53},[58,96474,96475],{"class":60,"line":61},[58,96476,96477],{"class":75},"random.normal(loc,scale,size)也可以生成正态分布\n",[58,96479,96480],{"class":60,"line":68},[58,96481,96482],{"class":64},"#loc:期望\n",[58,96484,96485],{"class":60,"line":79},[58,96486,96487],{"class":64},"#scale:方差\n",[58,96489,96490],{"class":60,"line":105},[58,96491,96492],{"class":64},"#size:用于确定是几维的数列\n",[175,96494,96495],{},[119,96496],{"alt":53,"src":96497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,96499,96501],{"id":96500},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[175,96503,96504],{},"ndim:秩，维度个数",[175,96506,96507],{},"size:数组元素的个数",[175,96509,96510],{},"shape:数组的形状",[175,96512,96513],{},"dtype:数组元素的类型",[175,96515,96516],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[175,96518,96519],{},"他们都是属性，通过数组.属性的形式来确定",[175,96521,96522],{},"如果需要输出多个可以通过以下方式：",[48,96524,96526],{"className":31022,"code":96525,"language":31024,"meta":53,"style":53},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[55,96527,96528],{"__ignoreMap":53},[58,96529,96530,96532],{"class":60,"line":61},[58,96531,31059],{"class":82},[58,96533,96534],{"class":75},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96536,96538],{"id":96537},"_26-其他方式创建数组","2.6 其他方式创建数组",[114,96540,96542],{"id":96541},"_261-zeros创建数组","2.6.1 zeros()创建数组",[175,96544,96545],{},"①创建一维数组",[48,96547,96549],{"className":31022,"code":96548,"language":31024,"meta":53,"style":53},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[55,96550,96551,96560,96564,96569,96574],{"__ignoreMap":53},[58,96552,96553,96556,96558],{"class":60,"line":61},[58,96554,96555],{"class":75},"np.zeros(",[58,96557,1232],{"class":82},[58,96559,799],{"class":75},[58,96561,96562],{"class":60,"line":68},[58,96563,96327],{"class":386},[58,96565,96566],{"class":60,"line":79},[58,96567,96568],{"class":386},"输出结果：\n",[58,96570,96571],{"class":60,"line":105},[58,96572,96573],{"class":386},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[58,96575,96576],{"class":60,"line":627},[58,96577,96327],{"class":386},[175,96579,96580],{},"上方代码等价于：",[48,96582,96584],{"className":31022,"code":96583,"language":31024,"meta":53,"style":53},"np.zeros(shape=(10))#创建10个元素的0数组\n",[55,96585,96586],{"__ignoreMap":53},[58,96587,96588,96590,96593,96595,96597,96599,96601],{"class":60,"line":61},[58,96589,96555],{"class":75},[58,96591,96592],{"class":5862},"shape",[58,96594,383],{"class":92},[58,96596,793],{"class":75},[58,96598,1232],{"class":82},[58,96600,83401],{"class":75},[58,96602,96603],{"class":64},"#创建10个元素的0数组\n",[175,96605,96606],{},"也可以指定类型",[48,96608,96610],{"className":31022,"code":96609,"language":31024,"meta":53,"style":53},"#指定类型\nnp.zeros(5,dtype=int)\n",[55,96611,96612,96617],{"__ignoreMap":53},[58,96613,96614],{"class":60,"line":61},[58,96615,96616],{"class":64},"#指定类型\n",[58,96618,96619,96621,96623,96625,96627,96629,96631],{"class":60,"line":68},[58,96620,96555],{"class":75},[58,96622,1105],{"class":82},[58,96624,1164],{"class":75},[58,96626,94129],{"class":5862},[58,96628,383],{"class":92},[58,96630,796],{"class":82},[58,96632,799],{"class":75},[175,96634,96635],{},"②创建二维数组",[48,96637,96639],{"className":31022,"code":96638,"language":31024,"meta":53,"style":53},"np.zeros((3,4),dtype=int)\n",[55,96640,96641],{"__ignoreMap":53},[58,96642,96643,96646,96648,96650,96652,96654,96656,96658,96660],{"class":60,"line":61},[58,96644,96645],{"class":75},"np.zeros((",[58,96647,861],{"class":82},[58,96649,1164],{"class":75},[58,96651,1079],{"class":82},[58,96653,42900],{"class":75},[58,96655,94129],{"class":5862},[58,96657,383],{"class":92},[58,96659,796],{"class":82},[58,96661,799],{"class":75},[175,96663,96664],{},"③创建三维数组",[48,96666,96668],{"className":31022,"code":96667,"language":31024,"meta":53,"style":53},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[55,96669,96670,96675],{"__ignoreMap":53},[58,96671,96672],{"class":60,"line":61},[58,96673,96674],{"class":64},"#创建三维数组\n",[58,96676,96677,96679,96681,96683,96685,96687,96689,96691,96693,96695,96697],{"class":60,"line":68},[58,96678,96645],{"class":75},[58,96680,861],{"class":82},[58,96682,1164],{"class":75},[58,96684,1079],{"class":82},[58,96686,1164],{"class":75},[58,96688,1105],{"class":82},[58,96690,42900],{"class":75},[58,96692,94129],{"class":5862},[58,96694,383],{"class":92},[58,96696,796],{"class":82},[58,96698,799],{"class":75},[175,96700,96701],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[48,96703,96705],{"className":31022,"code":96704,"language":31024,"meta":53,"style":53},"#使用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",[55,96706,96707,96712,96727,96732,96737,96759],{"__ignoreMap":53},[58,96708,96709],{"class":60,"line":61},[58,96710,96711],{"class":64},"#使用zeros_like将创建的一维数组变成全0的数组\n",[58,96713,96714,96716,96718,96720,96722,96724],{"class":60,"line":68},[58,96715,376],{"class":75},[58,96717,383],{"class":92},[58,96719,93631],{"class":75},[58,96721,1079],{"class":82},[58,96723,1215],{"class":75},[58,96725,96726],{"class":64},"#这个得到的结果：一维数组0，1，2，3\n",[58,96728,96729],{"class":60,"line":79},[58,96730,96731],{"class":75},"np.zeros_like(a)\n",[58,96733,96734],{"class":60,"line":105},[58,96735,96736],{"class":64},"#使用zeros_like将创建的二维数组变成全0的数组\n",[58,96738,96739,96741,96743,96745,96747,96749,96751,96753,96755,96757],{"class":60,"line":627},[58,96740,93935],{"class":75},[58,96742,383],{"class":92},[58,96744,96056],{"class":75},[58,96746,32140],{"class":5862},[58,96748,383],{"class":92},[58,96750,793],{"class":75},[58,96752,1079],{"class":82},[58,96754,1164],{"class":75},[58,96756,1105],{"class":82},[58,96758,31141],{"class":75},[58,96760,96761],{"class":60,"line":509},[58,96762,96763],{"class":75},"np.zeros_like(aa)\n",[114,96765,96767],{"id":96766},"_262-ones创建数组","2.6.2 ones()创建数组",[175,96769,96770],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[114,96772,96774],{"id":96773},"_263-empty创建数组","2.6.3 empty()创建数组",[175,96776,96777],{},"①empty()用法",[48,96779,96781],{"className":31022,"code":96780,"language":31024,"meta":53,"style":53},"numpy.empty(shape,dtype=float,order='c')\n",[55,96782,96783],{"__ignoreMap":53},[58,96784,96785,96788,96790,96792,96794,96796,96798,96800,96802],{"class":60,"line":61},[58,96786,96787],{"class":75},"numpy.empty(shape,",[58,96789,94129],{"class":5862},[58,96791,383],{"class":92},[58,96793,832],{"class":82},[58,96795,1164],{"class":75},[58,96797,95926],{"class":5862},[58,96799,383],{"class":92},[58,96801,76659],{"class":386},[58,96803,799],{"class":75},[175,96805,96806],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[175,96808,96809],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[175,96811,96812],{},[119,96813],{"alt":53,"src":96814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[175,96816,96817],{},"②empty()用法",[48,96819,96821],{"className":31022,"code":96820,"language":31024,"meta":53,"style":53},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[55,96822,96823,96844,96856,96877,96882],{"__ignoreMap":53},[58,96824,96825,96827,96829,96832,96834,96836,96838,96840,96842],{"class":60,"line":61},[58,96826,1630],{"class":75},[58,96828,383],{"class":92},[58,96830,96831],{"class":75},"np.empty(",[58,96833,1232],{"class":82},[58,96835,1164],{"class":75},[58,96837,94129],{"class":5862},[58,96839,383],{"class":92},[58,96841,796],{"class":82},[58,96843,799],{"class":75},[58,96845,96846,96848,96850,96852,96854],{"class":60,"line":68},[58,96847,1605],{"class":75},[58,96849,383],{"class":92},[58,96851,93631],{"class":75},[58,96853,1105],{"class":82},[58,96855,799],{"class":75},[58,96857,96858,96861,96863,96866,96868,96870,96873,96875],{"class":60,"line":79},[58,96859,96860],{"class":75},"np.add(",[58,96862,867],{"class":82},[58,96864,96865],{"class":75},",x,",[58,96867,93683],{"class":5862},[58,96869,383],{"class":92},[58,96871,96872],{"class":75},"y[:",[58,96874,1105],{"class":82},[58,96876,5303],{"class":75},[58,96878,96879],{"class":60,"line":105},[58,96880,96881],{"class":64},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[58,96883,96884],{"class":60,"line":627},[58,96885,96886],{"class":75},"y\n",[175,96888,12159],{},[175,96890,96891],{},[119,96892],{"alt":53,"src":96893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[48,96895,96897],{"className":31022,"code":96896,"language":31024,"meta":53,"style":53},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[55,96898,96899,96915,96935,96950],{"__ignoreMap":53},[58,96900,96901,96903,96905,96907,96909,96911,96913],{"class":60,"line":61},[58,96902,1605],{"class":75},[58,96904,383],{"class":92},[58,96906,93631],{"class":75},[58,96908,89],{"class":82},[58,96910,1164],{"class":75},[58,96912,1130],{"class":82},[58,96914,799],{"class":75},[58,96916,96917,96919,96921,96923,96925,96927,96929,96931,96933],{"class":60,"line":68},[58,96918,1630],{"class":75},[58,96920,383],{"class":92},[58,96922,96831],{"class":75},[58,96924,1105],{"class":82},[58,96926,1164],{"class":75},[58,96928,94129],{"class":5862},[58,96930,383],{"class":92},[58,96932,796],{"class":82},[58,96934,799],{"class":75},[58,96936,96937,96940,96942,96944,96946,96948],{"class":60,"line":79},[58,96938,96939],{"class":75},"np.add(x,",[58,96941,867],{"class":82},[58,96943,1164],{"class":75},[58,96945,93683],{"class":5862},[58,96947,383],{"class":92},[58,96949,94078],{"class":75},[58,96951,96952],{"class":60,"line":105},[58,96953,96954],{"class":64},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[175,96956,96957],{},"③empty_like()",[175,96959,96960],{},[25,96961,96962,96963,96968],{},"创建一个",[25,96964,96965],{},[25,96966,96967],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[175,96970,96971,96974],{},[55,96972,96973],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[175,96976,96977],{},[119,96978],{"alt":53,"src":96979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[114,96981,96983],{"id":96982},"_264-用法","2.6.4 ？？用法",[175,96985,96986],{},"当想查看一个函数的参数时，可以通过？？来实现",[48,96988,96990],{"className":31022,"code":96989,"language":31024,"meta":53,"style":53},"np.full??\n",[55,96991,96992],{"__ignoreMap":53},[58,96993,96994,96997],{"class":60,"line":61},[58,96995,96996],{"class":75},"np.full",[58,96998,96999],{"class":78034},"??\n",[114,97001,97003],{"id":97002},"_265-full创建数组","2.6.5 full()创建数组",[48,97005,97007],{"className":31022,"code":97006,"language":31024,"meta":53,"style":53},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[55,97008,97009,97014],{"__ignoreMap":53},[58,97010,97011],{"class":60,"line":61},[58,97012,97013],{"class":75},"full(shape,fill_value)\n",[58,97015,97016],{"class":60,"line":68},[58,97017,97018],{"class":75},"创建全为某个指定值的数组\n",[175,97020,95159],{},[48,97022,97024],{"className":31022,"code":97023,"language":31024,"meta":53,"style":53},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[55,97025,97026,97031],{"__ignoreMap":53},[58,97027,97028],{"class":60,"line":61},[58,97029,97030],{"class":64},"#创建一个一维数组,以20进行填充\n",[58,97032,97033,97036,97038,97040,97042],{"class":60,"line":68},[58,97034,97035],{"class":75},"np.full(",[58,97037,1232],{"class":82},[58,97039,1164],{"class":75},[58,97041,1486],{"class":82},[58,97043,799],{"class":75},[175,97045,93920],{},[48,97047,97049],{"className":31022,"code":97048,"language":31024,"meta":53,"style":53},"#创建二维数组\nnp.full((3,5),11)\n",[55,97050,97051,97055],{"__ignoreMap":53},[58,97052,97053],{"class":60,"line":61},[58,97054,94576],{"class":64},[58,97056,97057,97060,97062,97064,97066,97068,97070],{"class":60,"line":68},[58,97058,97059],{"class":75},"np.full((",[58,97061,861],{"class":82},[58,97063,1164],{"class":75},[58,97065,1105],{"class":82},[58,97067,42900],{"class":75},[58,97069,1258],{"class":82},[58,97071,799],{"class":75},[175,97073,97074],{},"③full_like用法",[175,97076,97077],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[175,97079,97080],{},"这里是指定填充而已",[48,97082,97084],{"className":31022,"code":97083,"language":31024,"meta":53,"style":53},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[55,97085,97086,97091,97115,97120],{"__ignoreMap":53},[58,97087,97088],{"class":60,"line":61},[58,97089,97090],{"class":64},"#创建一个指定形状数组\n",[58,97092,97093,97095,97097,97099,97101,97103,97105,97107,97109,97111,97113],{"class":60,"line":68},[58,97094,376],{"class":75},[58,97096,383],{"class":92},[58,97098,93631],{"class":75},[58,97100,89],{"class":82},[58,97102,1164],{"class":75},[58,97104,1111],{"class":82},[58,97106,93636],{"class":75},[58,97108,1079],{"class":82},[58,97110,1164],{"class":75},[58,97112,1206],{"class":82},[58,97114,799],{"class":75},[58,97116,97117],{"class":60,"line":79},[58,97118,97119],{"class":64},"#进行指定填充\n",[58,97121,97122,97125,97127],{"class":60,"line":105},[58,97123,97124],{"class":75},"np.full_like(a,",[58,97126,1232],{"class":82},[58,97128,799],{"class":75},[175,97130,12159],{},[175,97132,97133],{},[119,97134],{"alt":53,"src":97135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[114,97137,97139],{"id":97138},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22641,97141,97143],{"id":97142},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[48,97145,97147],{"className":31022,"code":97146,"language":31024,"meta":53,"style":53},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[55,97148,97149,97166],{"__ignoreMap":53},[58,97150,97151,97154,97156,97158,97160,97162,97164],{"class":60,"line":61},[58,97152,97153],{"class":75},"np.eye(",[58,97155,1079],{"class":82},[58,97157,1164],{"class":75},[58,97159,94129],{"class":5862},[58,97161,383],{"class":92},[58,97163,796],{"class":82},[58,97165,799],{"class":75},[58,97167,97168],{"class":60,"line":68},[58,97169,97170],{"class":64},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22641,97172,97174],{"id":97173},"_2662-法2identity","2.6.6.2 法2：identity()",[48,97176,97178],{"className":31022,"code":97177,"language":31024,"meta":53,"style":53},"#identity()\nnp.identity(5,dtype=int)\n",[55,97179,97180,97185],{"__ignoreMap":53},[58,97181,97182],{"class":60,"line":61},[58,97183,97184],{"class":64},"#identity()\n",[58,97186,97187,97190,97192,97194,97196,97198,97200],{"class":60,"line":68},[58,97188,97189],{"class":75},"np.identity(",[58,97191,1105],{"class":82},[58,97193,1164],{"class":75},[58,97195,94129],{"class":5862},[58,97197,383],{"class":92},[58,97199,796],{"class":82},[58,97201,799],{"class":75},[175,97203,97204],{},"两个函数是有区别的",[175,97206,97207],{},[119,97208],{"alt":53,"src":97209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[175,97211,97212],{},[119,97213],{"alt":53,"src":97214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[48,97216,97218],{"className":31022,"code":97217,"language":31024,"meta":53,"style":53},"# 创建一个 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",[55,97219,97220,97225,97237,97242,97247,97252,97257,97261,97266,97286,97290,97295,97300],{"__ignoreMap":53},[58,97221,97222],{"class":60,"line":61},[58,97223,97224],{"class":64},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[58,97226,97227,97229,97231,97233,97235],{"class":60,"line":68},[58,97228,97153],{"class":75},[58,97230,861],{"class":82},[58,97232,469],{"class":75},[58,97234,1079],{"class":82},[58,97236,799],{"class":75},[58,97238,97239],{"class":60,"line":79},[58,97240,97241],{"class":64},"# 输出:\n",[58,97243,97244],{"class":60,"line":105},[58,97245,97246],{"class":64},"# [[1. 0. 0. 0.]\n",[58,97248,97249],{"class":60,"line":627},[58,97250,97251],{"class":64},"#  [0. 1. 0. 0.]\n",[58,97253,97254],{"class":60,"line":509},[58,97255,97256],{"class":64},"#  [0. 0. 1. 0.]]\n",[58,97258,97259],{"class":60,"line":559},[58,97260,3046],{"emptyLinePlaceholder":720},[58,97262,97263],{"class":60,"line":654},[58,97264,97265],{"class":64},"# 对角线向上偏移1\n",[58,97267,97268,97270,97272,97274,97276,97278,97280,97282,97284],{"class":60,"line":671},[58,97269,97153],{"class":75},[58,97271,861],{"class":82},[58,97273,469],{"class":75},[58,97275,1079],{"class":82},[58,97277,469],{"class":75},[58,97279,1279],{"class":5862},[58,97281,383],{"class":92},[58,97283,89],{"class":82},[58,97285,799],{"class":75},[58,97287,97288],{"class":60,"line":677},[58,97289,97241],{"class":64},[58,97291,97292],{"class":60,"line":2260},[58,97293,97294],{"class":64},"# [[0. 1. 0. 0.]\n",[58,97296,97297],{"class":60,"line":694},[58,97298,97299],{"class":64},"#  [0. 0. 1. 0.]\n",[58,97301,97302],{"class":60,"line":2270},[58,97303,97304],{"class":64},"#  [0. 0. 0. 1.]]\n",[114,97306,97308],{"id":97307},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[48,97310,97312],{"className":31022,"code":97311,"language":31024,"meta":53,"style":53},"#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",[55,97313,97314,97319,97323,97328,97333,97338,97343,97348,97353,97358,97363],{"__ignoreMap":53},[58,97315,97316],{"class":60,"line":61},[58,97317,97318],{"class":64},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[58,97320,97321],{"class":60,"line":68},[58,97322,96327],{"class":386},[58,97324,97325],{"class":60,"line":79},[58,97326,97327],{"class":386},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[58,97329,97330],{"class":60,"line":105},[58,97331,97332],{"class":386},"参数介绍：\n",[58,97334,97335],{"class":60,"line":627},[58,97336,97337],{"class":386},"start：序列的起始值\n",[58,97339,97340],{"class":60,"line":509},[58,97341,97342],{"class":386},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[58,97344,97345],{"class":60,"line":559},[58,97346,97347],{"class":386},"num：要生长的等步长的样本数量，默认为50\n",[58,97349,97350],{"class":60,"line":654},[58,97351,97352],{"class":386},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[58,97354,97355],{"class":60,"line":671},[58,97356,97357],{"class":386},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[58,97359,97360],{"class":60,"line":677},[58,97361,97362],{"class":386},"dtype：ndarry的数据类型\n",[58,97364,97365],{"class":60,"line":2260},[58,97366,96327],{"class":386},[175,97368,97369],{},[119,97370],{"alt":53,"src":97371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[175,97373,97374],{},"这里num=是可以省略的",[175,97376,97377],{},"也就是下方两行代码结果是一模一样的",[48,97379,97381],{"className":31022,"code":97380,"language":31024,"meta":53,"style":53},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[55,97382,97383,97400],{"__ignoreMap":53},[58,97384,97385,97388,97390,97392,97394,97396,97398],{"class":60,"line":61},[58,97386,97387],{"class":75},"np.linspace(",[58,97389,89],{"class":82},[58,97391,1164],{"class":75},[58,97393,1105],{"class":82},[58,97395,1164],{"class":75},[58,97397,1105],{"class":82},[58,97399,799],{"class":75},[58,97401,97402,97404,97406,97408,97410,97412,97414,97416,97418],{"class":60,"line":68},[58,97403,97387],{"class":75},[58,97405,89],{"class":82},[58,97407,1164],{"class":75},[58,97409,1105],{"class":82},[58,97411,1164],{"class":75},[58,97413,2312],{"class":5862},[58,97415,383],{"class":92},[58,97417,1105],{"class":82},[58,97419,799],{"class":75},[114,97421,97423],{"id":97422},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[48,97425,97427],{"className":31022,"code":97426,"language":31024,"meta":53,"style":53},"#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",[55,97428,97429,97434,97438,97443,97448,97453,97458,97462,97467,97472,97476],{"__ignoreMap":53},[58,97430,97431],{"class":60,"line":61},[58,97432,97433],{"class":64},"#logspace函数用于创建一个等比数列，格式如下：\n",[58,97435,97436],{"class":60,"line":68},[58,97437,96327],{"class":386},[58,97439,97440],{"class":60,"line":79},[58,97441,97442],{"class":386},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[58,97444,97445],{"class":60,"line":105},[58,97446,97447],{"class":386},"参数为：\n",[58,97449,97450],{"class":60,"line":627},[58,97451,97452],{"class":386},"start:序列的起始位置为：base**start\n",[58,97454,97455],{"class":60,"line":509},[58,97456,97457],{"class":386},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[58,97459,97460],{"class":60,"line":559},[58,97461,97347],{"class":386},[58,97463,97464],{"class":60,"line":654},[58,97465,97466],{"class":386},"endpoint：是否包含 stop 这个值，默认是 True\n",[58,97468,97469],{"class":60,"line":671},[58,97470,97471],{"class":386},"base：对数的底数，默认是 10（常见对数）\n",[58,97473,97474],{"class":60,"line":677},[58,97475,97362],{"class":386},[58,97477,97478],{"class":60,"line":2260},[58,97479,96327],{"class":386},[175,97481,97482],{},[119,97483],{"alt":53,"src":97484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[175,97486,97487],{},"logspace()函数中的num参数也是可以不写num=的",[175,97489,97490],{},"endpoint是不可以省略的",[702,97492,97493],{},"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":53,"searchDepth":68,"depth":68,"links":97495},[97496,97500,97505,97509,97513,97514],{"id":95885,"depth":68,"text":95886,"children":97497},[97498,97499],{"id":95889,"depth":79,"text":95890},{"id":95962,"depth":79,"text":95963},{"id":95994,"depth":68,"text":95995,"children":97501},[97502,97503,97504],{"id":95998,"depth":79,"text":95999},{"id":96180,"depth":79,"text":96181},{"id":96258,"depth":79,"text":96259},{"id":96293,"depth":68,"text":96294,"children":97506},[97507,97508],{"id":96297,"depth":79,"text":96298},{"id":96354,"depth":79,"text":96355},{"id":96450,"depth":68,"text":96451,"children":97510},[97511,97512],{"id":96454,"depth":79,"text":96455},{"id":96466,"depth":79,"text":96467},{"id":96500,"depth":68,"text":96501},{"id":96537,"depth":68,"text":96538,"children":97515},[97516,97517,97518,97519,97520,97521,97522,97523],{"id":96541,"depth":79,"text":96542},{"id":96766,"depth":79,"text":96767},{"id":96773,"depth":79,"text":96774},{"id":96982,"depth":79,"text":96983},{"id":97002,"depth":79,"text":97003},{"id":97138,"depth":79,"text":97139},{"id":97307,"depth":79,"text":97308},{"id":97422,"depth":79,"text":97423},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95877,"description":717},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97530,"title":97531,"body":97532,"description":717,"extension":718,"meta":97625,"navigation":720,"path":97626,"seo":97627,"stem":97628,"__hash__":97629},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97533,"toc":97623},[97534,97537,97540,97543,97546,97549,97552,97555,97558,97561,97564,97567,97569,97572,97575,97580,97583,97586,97620],[10,97535,97531],{"id":97536},"_20魔法命令mprun",[175,97538,97539],{},"逐行分析数据内存的使用情况",[175,97541,97542],{},"语法格式：",[175,97544,97545],{},"%mprun -f 模块名.函数名 模块名.函数名()",[175,97547,97548],{},"分析结果列如下：",[175,97550,97551],{},"Line行号",[175,97553,97554],{},"Mem usage内存使用大小",[175,97556,97557],{},"increment内存增量",[175,97559,97560],{},"Line content代码内容",[175,97562,97563],{},"补充说明：",[175,97565,97566],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[175,97568,95832],{},[175,97570,97571],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[175,97573,97574],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[175,97576,97577],{},[119,97578],{"alt":53,"src":97579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[175,97581,97582],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[175,97584,97585],{},"这时候需要重新加载模块",[48,97587,97589],{"className":31022,"code":97588,"language":31024,"meta":53,"style":53},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[55,97590,97591,97596,97603,97608],{"__ignoreMap":53},[58,97592,97593],{"class":60,"line":61},[58,97594,97595],{"class":64},"#重新加载模块\n",[58,97597,97598,97600],{"class":60,"line":68},[58,97599,31036],{"class":92},[58,97601,97602],{"class":75}," importlib\n",[58,97604,97605],{"class":60,"line":79},[58,97606,97607],{"class":75},"importlib.reload(mprun_test)\n",[58,97609,97610,97612,97615,97617],{"class":60,"line":105},[58,97611,1114],{"class":92},[58,97613,97614],{"class":75},"mprun ",[58,97616,1318],{"class":92},[58,97618,97619],{"class":75},"f mprun_test.fun_test mprun_test.fun_test()\n",[702,97621,97622],{},"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":53,"searchDepth":68,"depth":68,"links":97624},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97531,"description":717},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97631,"title":97632,"body":97633,"description":717,"extension":718,"meta":97650,"navigation":720,"path":97651,"seo":97652,"stem":97653,"__hash__":97654},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97634,"toc":97648},[97635,97638,97643],[10,97636,97632],{"id":97637},"_3一维数组的索引和切片",[175,97639,97640],{},[119,97641],{"alt":53,"src":97642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[175,97644,97645],{},[119,97646],{"alt":53,"src":97647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":53,"searchDepth":68,"depth":68,"links":97649},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97632,"description":717},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97656,"title":97657,"body":97658,"description":717,"extension":718,"meta":98141,"navigation":720,"path":98142,"seo":98143,"stem":98144,"__hash__":98145},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97659,"toc":98139},[97660,97663,97666,97671,97704,97707,97745,97748,97782,97785,97890,97893,97930,97933,98034,98037,98088,98091,98133,98136],[10,97661,97657],{"id":97662},"_4二维数组的索引与切片",[175,97664,97665],{},"①获取指定单个元素",[175,97667,97668],{},[119,97669],{"alt":53,"src":97670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[48,97672,97674],{"className":31022,"code":97673,"language":31024,"meta":53,"style":53},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[55,97675,97676,97681,97686,97691],{"__ignoreMap":53},[58,97677,97678],{"class":60,"line":61},[58,97679,97680],{"class":64},"#获取元素9\n",[58,97682,97683],{"class":60,"line":68},[58,97684,97685],{"class":64},"#先获取所在行，再获取所在列\n",[58,97687,97688],{"class":60,"line":79},[58,97689,97690],{"class":64},"#数组[行索引号，列索引号]\n",[58,97692,97693,97696,97698,97700,97702],{"class":60,"line":105},[58,97694,97695],{"class":75},"a[",[58,97697,89],{"class":82},[58,97699,1164],{"class":75},[58,97701,867],{"class":82},[58,97703,33890],{"class":75},[175,97705,97706],{},"②获取整行元素",[48,97708,97710],{"className":31022,"code":97709,"language":31024,"meta":53,"style":53},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[55,97711,97712,97717,97722,97730,97735],{"__ignoreMap":53},[58,97713,97714],{"class":60,"line":61},[58,97715,97716],{"class":64},"#获取整行 数组[行索引号]\n",[58,97718,97719],{"class":60,"line":68},[58,97720,97721],{"class":64},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[58,97723,97724,97726,97728],{"class":60,"line":79},[58,97725,97695],{"class":75},[58,97727,867],{"class":82},[58,97729,33890],{"class":75},[58,97731,97732],{"class":60,"line":105},[58,97733,97734],{"class":64},"#也可以负索引获取一行\n",[58,97736,97737,97739,97741,97743],{"class":60,"line":627},[58,97738,97695],{"class":75},[58,97740,1318],{"class":92},[58,97742,89],{"class":82},[58,97744,33890],{"class":75},[175,97746,97747],{},"③获取整列元素",[48,97749,97751],{"className":31022,"code":97750,"language":31024,"meta":53,"style":53},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[55,97752,97753,97758,97767,97772],{"__ignoreMap":53},[58,97754,97755],{"class":60,"line":61},[58,97756,97757],{"class":64},"#获取整列 数组名[:,列索引]\n",[58,97759,97760,97763,97765],{"class":60,"line":68},[58,97761,97762],{"class":75},"a[:,",[58,97764,867],{"class":82},[58,97766,33890],{"class":75},[58,97768,97769],{"class":60,"line":79},[58,97770,97771],{"class":64},"#也可以负索引获取一列\n",[58,97773,97774,97776,97778,97780],{"class":60,"line":105},[58,97775,97762],{"class":75},[58,97777,1318],{"class":92},[58,97779,89],{"class":82},[58,97781,33890],{"class":75},[175,97783,97784],{},"④部分行部分列的元素",[48,97786,97788],{"className":31022,"code":97787,"language":31024,"meta":53,"style":53},"#部分行部分列 数组名[行切片，列切片]\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",[55,97789,97790,97795,97805,97809,97813,97818,97823,97827,97839,97843,97847,97852,97857,97862,97867,97871,97876],{"__ignoreMap":53},[58,97791,97792],{"class":60,"line":61},[58,97793,97794],{"class":64},"#部分行部分列 数组名[行切片，列切片]\n",[58,97796,97797,97800,97802],{"class":60,"line":68},[58,97798,97799],{"class":75},"a[:",[58,97801,867],{"class":82},[58,97803,97804],{"class":75},",:]\n",[58,97806,97807],{"class":60,"line":79},[58,97808,94193],{"class":64},[58,97810,97811],{"class":60,"line":105},[58,97812,94557],{"class":386},[58,97814,97815],{"class":60,"line":627},[58,97816,97817],{"class":386},"array([[ 1,  2,  3,  4,  5,  6],\n",[58,97819,97820],{"class":60,"line":509},[58,97821,97822],{"class":386},"       [ 7,  8,  9, 10, 11, 12]])\n",[58,97824,97825],{"class":60,"line":559},[58,97826,94557],{"class":386},[58,97828,97829,97831,97833,97835,97837],{"class":60,"line":654},[58,97830,97762],{"class":75},[58,97832,89],{"class":82},[58,97834,1644],{"class":75},[58,97836,1079],{"class":82},[58,97838,33890],{"class":75},[58,97840,97841],{"class":60,"line":671},[58,97842,94193],{"class":64},[58,97844,97845],{"class":60,"line":677},[58,97846,94557],{"class":386},[58,97848,97849],{"class":60,"line":2260},[58,97850,97851],{"class":386},"array([[ 2,  3,  4],\n",[58,97853,97854],{"class":60,"line":694},[58,97855,97856],{"class":386},"       [ 8,  9, 10],\n",[58,97858,97859],{"class":60,"line":2270},[58,97860,97861],{"class":386},"       [14, 15, 16],\n",[58,97863,97864],{"class":60,"line":2275},[58,97865,97866],{"class":386},"       [20, 21, 22]])\n",[58,97868,97869],{"class":60,"line":2289},[58,97870,94557],{"class":386},[58,97872,97873],{"class":60,"line":2294},[58,97874,97875],{"class":64},"#对列行同时进行切片，使用了step参数\n",[58,97877,97878,97881,97883,97886,97888],{"class":60,"line":2300},[58,97879,97880],{"class":75},"a[::",[58,97882,867],{"class":82},[58,97884,97885],{"class":75},",::",[58,97887,867],{"class":82},[58,97889,33890],{"class":75},[175,97891,97892],{},"⑤同时获取两个元素",[48,97894,97896],{"className":31022,"code":97895,"language":31024,"meta":53,"style":53},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[55,97897,97898,97903,97908],{"__ignoreMap":53},[58,97899,97900],{"class":60,"line":61},[58,97901,97902],{"class":64},"#同时获取第三行第二列，第四行第一列\n",[58,97904,97905],{"class":60,"line":68},[58,97906,97907],{"class":64},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[58,97909,97910,97913,97915,97917,97919,97921,97923,97925,97927],{"class":60,"line":79},[58,97911,97912],{"class":75},"a[(",[58,97914,867],{"class":82},[58,97916,1164],{"class":75},[58,97918,861],{"class":82},[58,97920,42891],{"class":75},[58,97922,89],{"class":82},[58,97924,1164],{"class":75},[58,97926,979],{"class":82},[58,97928,97929],{"class":75},")]\n",[175,97931,97932],{},"⑥切片，对行进行反向获取",[48,97934,97936],{"className":31022,"code":97935,"language":31024,"meta":53,"style":53},"#切片 对所有行进行反向获取\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",[55,97937,97938,97943,97953,97957,97961,97966,97971,97976,97981,97985,97990,98006,98010,98015,98020,98025,98030],{"__ignoreMap":53},[58,97939,97940],{"class":60,"line":61},[58,97941,97942],{"class":64},"#切片 对所有行进行反向获取\n",[58,97944,97945,97947,97949,97951],{"class":60,"line":68},[58,97946,97880],{"class":75},[58,97948,1318],{"class":92},[58,97950,89],{"class":82},[58,97952,33890],{"class":75},[58,97954,97955],{"class":60,"line":79},[58,97956,94193],{"class":64},[58,97958,97959],{"class":60,"line":105},[58,97960,94557],{"class":386},[58,97962,97963],{"class":60,"line":627},[58,97964,97965],{"class":386},"array([[19, 20, 21, 22, 23, 24],\n",[58,97967,97968],{"class":60,"line":509},[58,97969,97970],{"class":386},"       [13, 14, 15, 16, 17, 18],\n",[58,97972,97973],{"class":60,"line":559},[58,97974,97975],{"class":386},"       [ 7,  8,  9, 10, 11, 12],\n",[58,97977,97978],{"class":60,"line":654},[58,97979,97980],{"class":386},"       [ 1,  2,  3,  4,  5,  6]])\n",[58,97982,97983],{"class":60,"line":671},[58,97984,94557],{"class":386},[58,97986,97987],{"class":60,"line":677},[58,97988,97989],{"class":64},"#对行列都进行反向切片获取\n",[58,97991,97992,97994,97996,97998,98000,98002,98004],{"class":60,"line":2260},[58,97993,97880],{"class":75},[58,97995,1318],{"class":92},[58,97997,89],{"class":82},[58,97999,97885],{"class":75},[58,98001,1318],{"class":92},[58,98003,89],{"class":82},[58,98005,33890],{"class":75},[58,98007,98008],{"class":60,"line":694},[58,98009,94557],{"class":386},[58,98011,98012],{"class":60,"line":2270},[58,98013,98014],{"class":386},"array([[24, 23, 22, 21, 20, 19],\n",[58,98016,98017],{"class":60,"line":2275},[58,98018,98019],{"class":386},"       [18, 17, 16, 15, 14, 13],\n",[58,98021,98022],{"class":60,"line":2289},[58,98023,98024],{"class":386},"       [12, 11, 10,  9,  8,  7],\n",[58,98026,98027],{"class":60,"line":2294},[58,98028,98029],{"class":386},"       [ 6,  5,  4,  3,  2,  1]])\n",[58,98031,98032],{"class":60,"line":2300},[58,98033,94557],{"class":386},[175,98035,98036],{},"⑦修改元素",[48,98038,98040],{"className":31022,"code":98039,"language":31024,"meta":53,"style":53},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[55,98041,98042,98047,98065,98070],{"__ignoreMap":53},[58,98043,98044],{"class":60,"line":61},[58,98045,98046],{"class":64},"#获取前两行和前两列\n",[58,98048,98049,98052,98054,98056,98058,98061,98063],{"class":60,"line":68},[58,98050,98051],{"class":75},"sub_a",[58,98053,383],{"class":92},[58,98055,97799],{"class":75},[58,98057,867],{"class":82},[58,98059,98060],{"class":75},",:",[58,98062,867],{"class":82},[58,98064,33890],{"class":75},[58,98066,98067],{"class":60,"line":79},[58,98068,98069],{"class":64},"#修改sub_a第一个元素的值\n",[58,98071,98072,98075,98077,98079,98081,98083,98085],{"class":60,"line":105},[58,98073,98074],{"class":75},"sub_a[",[58,98076,979],{"class":82},[58,98078,1164],{"class":75},[58,98080,979],{"class":82},[58,98082,1724],{"class":75},[58,98084,383],{"class":92},[58,98086,98087],{"class":82},"100\n",[175,98089,98090],{},"⑧数组复制copy()",[48,98092,98094],{"className":31022,"code":98093,"language":31024,"meta":53,"style":53},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[55,98095,98096,98101,98111,98116],{"__ignoreMap":53},[58,98097,98098],{"class":60,"line":61},[58,98099,98100],{"class":64},"#数组复制\n",[58,98102,98103,98106,98108],{"class":60,"line":68},[58,98104,98105],{"class":75},"copy_a",[58,98107,383],{"class":92},[58,98109,98110],{"class":75},"np.copy(sub_a)\n",[58,98112,98113],{"class":60,"line":79},[58,98114,98115],{"class":64},"#修改copy_a后不影响原数组\n",[58,98117,98118,98121,98123,98125,98127,98129,98131],{"class":60,"line":105},[58,98119,98120],{"class":75},"copy_a[",[58,98122,979],{"class":82},[58,98124,1164],{"class":75},[58,98126,979],{"class":82},[58,98128,1724],{"class":75},[58,98130,383],{"class":92},[58,98132,98087],{"class":82},[175,98134,98135],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[702,98137,98138],{},"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":53,"searchDepth":68,"depth":68,"links":98140},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97657,"description":717},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98147,"title":98148,"body":98149,"description":717,"extension":718,"meta":98641,"navigation":720,"path":98642,"seo":98643,"stem":98644,"__hash__":98645},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98150,"toc":98633},[98151,98154,98158,98161,98164,98217,98220,98245,98248,98267,98287,98290,98306,98310,98356,98360,98402,98406,98409,98412,98415,98418,98421,98483,98543,98547,98550,98607,98611,98616,98625,98630],[10,98152,98148],{"id":98153},"_5改变数组的维度",[14,98155,98157],{"id":98156},"_51-使用reshape","5.1 使用reshape()",[175,98159,98160],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[175,98162,98163],{},"①一维数组转换为二维数组",[48,98165,98167],{"className":31022,"code":98166,"language":31024,"meta":53,"style":53},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[55,98168,98169,98185,98190,98195,98200],{"__ignoreMap":53},[58,98170,98171,98173,98175,98177,98179,98181,98183],{"class":60,"line":61},[58,98172,376],{"class":75},[58,98174,383],{"class":92},[58,98176,93631],{"class":75},[58,98178,89],{"class":82},[58,98180,1164],{"class":75},[58,98182,1309],{"class":82},[58,98184,799],{"class":75},[58,98186,98187],{"class":60,"line":68},[58,98188,98189],{"class":64},"#将一维数组进行转换\n",[58,98191,98192],{"class":60,"line":79},[58,98193,98194],{"class":64},"#注意点：元素个数不可以变\n",[58,98196,98197],{"class":60,"line":105},[58,98198,98199],{"class":64},"#转换维度要保持一致，不一致就异常！！！\n",[58,98201,98202,98204,98206,98209,98211,98213,98215],{"class":60,"line":627},[58,98203,93935],{"class":75},[58,98205,383],{"class":92},[58,98207,98208],{"class":75},"a.reshape(",[58,98210,867],{"class":82},[58,98212,1164],{"class":75},[58,98214,1130],{"class":82},[58,98216,799],{"class":75},[175,98218,98219],{},"②一维数组转换为三维数组",[48,98221,98223],{"className":31022,"code":98222,"language":31024,"meta":53,"style":53},"aaa=a.reshape(2,3,2)\n",[55,98224,98225],{"__ignoreMap":53},[58,98226,98227,98229,98231,98233,98235,98237,98239,98241,98243],{"class":60,"line":61},[58,98228,96150],{"class":75},[58,98230,383],{"class":92},[58,98232,98208],{"class":75},[58,98234,867],{"class":82},[58,98236,1164],{"class":75},[58,98238,861],{"class":82},[58,98240,1164],{"class":75},[58,98242,867],{"class":82},[58,98244,799],{"class":75},[175,98246,98247],{},"③二维数组转化为一维数组",[48,98249,98251],{"className":31022,"code":98250,"language":31024,"meta":53,"style":53},"#知道元素个数：\naa.reshape(12)\n",[55,98252,98253,98258],{"__ignoreMap":53},[58,98254,98255],{"class":60,"line":61},[58,98256,98257],{"class":64},"#知道元素个数：\n",[58,98259,98260,98263,98265],{"class":60,"line":68},[58,98261,98262],{"class":75},"aa.reshape(",[58,98264,1284],{"class":82},[58,98266,799],{"class":75},[48,98268,98270],{"className":31022,"code":98269,"language":31024,"meta":53,"style":53},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[55,98271,98272,98277],{"__ignoreMap":53},[58,98273,98274],{"class":60,"line":61},[58,98275,98276],{"class":64},"#不知道元素个数，参数传递-1\n",[58,98278,98279,98281,98283,98285],{"class":60,"line":68},[58,98280,98262],{"class":75},[58,98282,1318],{"class":92},[58,98284,89],{"class":82},[58,98286,799],{"class":75},[175,98288,98289],{},"④三维数组转换为一维数组",[48,98291,98293],{"className":31022,"code":98292,"language":31024,"meta":53,"style":53},"aaa.reshape(-1)\n",[55,98294,98295],{"__ignoreMap":53},[58,98296,98297,98300,98302,98304],{"class":60,"line":61},[58,98298,98299],{"class":75},"aaa.reshape(",[58,98301,1318],{"class":92},[58,98303,89],{"class":82},[58,98305,799],{"class":75},[14,98307,98309],{"id":98308},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[48,98311,98313],{"className":31022,"code":98312,"language":31024,"meta":53,"style":53},"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",[55,98314,98315,98342,98347,98351],{"__ignoreMap":53},[58,98316,98317,98319,98321,98323,98325,98327,98329,98331,98333,98335,98337,98339],{"class":60,"line":61},[58,98318,93935],{"class":75},[58,98320,383],{"class":92},[58,98322,93631],{"class":75},[58,98324,89],{"class":82},[58,98326,1164],{"class":75},[58,98328,1309],{"class":82},[58,98330,93636],{"class":75},[58,98332,867],{"class":82},[58,98334,1164],{"class":75},[58,98336,1130],{"class":82},[58,98338,1215],{"class":75},[58,98340,98341],{"class":64},"#转换为2行6列的数组\n",[58,98343,98344],{"class":60,"line":68},[58,98345,98346],{"class":75},"aa.revel()\n",[58,98348,98349],{"class":60,"line":79},[58,98350,94193],{"class":64},[58,98352,98353],{"class":60,"line":105},[58,98354,98355],{"class":64},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,98357,98359],{"id":98358},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[48,98361,98363],{"className":31022,"code":98362,"language":31024,"meta":53,"style":53},"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",[55,98364,98365,98389,98394,98398],{"__ignoreMap":53},[58,98366,98367,98369,98371,98373,98375,98377,98379,98381,98383,98385,98387],{"class":60,"line":61},[58,98368,93935],{"class":75},[58,98370,383],{"class":92},[58,98372,93631],{"class":75},[58,98374,89],{"class":82},[58,98376,1164],{"class":75},[58,98378,1309],{"class":82},[58,98380,93636],{"class":75},[58,98382,867],{"class":82},[58,98384,1164],{"class":75},[58,98386,1130],{"class":82},[58,98388,799],{"class":75},[58,98390,98391],{"class":60,"line":68},[58,98392,98393],{"class":75},"aa.flatten()\n",[58,98395,98396],{"class":60,"line":79},[58,98397,94193],{"class":64},[58,98399,98400],{"class":60,"line":105},[58,98401,98355],{"class":64},[14,98403,98405],{"id":98404},"_54-使用resize","5.4 使用resize()",[175,98407,98408],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[175,98410,98411],{},"通过resize方法可以改变数组的维度",[175,98413,98414],{},"#resize修改数组维度",[175,98416,98417],{},"#以元组的形式指定形状",[175,98419,98420],{},"#改变的是原数组",[48,98422,98424],{"className":31022,"code":98423,"language":31024,"meta":53,"style":53},"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",[55,98425,98426,98442,98462,98475,98479],{"__ignoreMap":53},[58,98427,98428,98430,98432,98434,98436,98438,98440],{"class":60,"line":61},[58,98429,376],{"class":75},[58,98431,383],{"class":92},[58,98433,93631],{"class":75},[58,98435,89],{"class":82},[58,98437,1164],{"class":75},[58,98439,1309],{"class":82},[58,98441,799],{"class":75},[58,98443,98444,98447,98449,98451,98453,98455,98457,98459],{"class":60,"line":68},[58,98445,98446],{"class":75},"a.shape",[58,98448,383],{"class":92},[58,98450,793],{"class":75},[58,98452,867],{"class":82},[58,98454,1164],{"class":75},[58,98456,1130],{"class":82},[58,98458,1215],{"class":75},[58,98460,98461],{"class":64},"#改变了原数组\n",[58,98463,98464,98466,98468,98471,98473],{"class":60,"line":79},[58,98465,376],{"class":75},[58,98467,383],{"class":92},[58,98469,98470],{"class":75},"resize((",[58,98472,1284],{"class":82},[58,98474,31141],{"class":75},[58,98476,98477],{"class":60,"line":105},[58,98478,94193],{"class":64},[58,98480,98481],{"class":60,"line":627},[58,98482,98355],{"class":64},[48,98484,98486],{"className":31022,"code":98485,"language":31024,"meta":53,"style":53},"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",[55,98487,98488,98501,98505,98509,98514,98519,98524,98529,98534,98539],{"__ignoreMap":53},[58,98489,98490,98493,98495,98497,98499],{"class":60,"line":61},[58,98491,98492],{"class":75},"a.resize((",[58,98494,1130],{"class":82},[58,98496,1164],{"class":75},[58,98498,867],{"class":82},[58,98500,31141],{"class":75},[58,98502,98503],{"class":60,"line":68},[58,98504,94193],{"class":64},[58,98506,98507],{"class":60,"line":79},[58,98508,94557],{"class":386},[58,98510,98511],{"class":60,"line":105},[58,98512,98513],{"class":386},"array([[ 1,  2],\n",[58,98515,98516],{"class":60,"line":627},[58,98517,98518],{"class":386},"       [ 3,  4],\n",[58,98520,98521],{"class":60,"line":509},[58,98522,98523],{"class":386},"       [ 5,  6],\n",[58,98525,98526],{"class":60,"line":559},[58,98527,98528],{"class":386},"       [ 7,  8],\n",[58,98530,98531],{"class":60,"line":654},[58,98532,98533],{"class":386},"       [ 9, 10],\n",[58,98535,98536],{"class":60,"line":671},[58,98537,98538],{"class":386},"       [11, 12]])\n",[58,98540,98541],{"class":60,"line":677},[58,98542,94557],{"class":386},[14,98544,98546],{"id":98545},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[175,98548,98549],{},"改变了原数组",[48,98551,98553],{"className":31022,"code":98552,"language":31024,"meta":53,"style":53},"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",[55,98554,98555,98571,98587,98591,98595,98599,98603],{"__ignoreMap":53},[58,98556,98557,98559,98561,98563,98565,98567,98569],{"class":60,"line":61},[58,98558,376],{"class":75},[58,98560,383],{"class":92},[58,98562,93631],{"class":75},[58,98564,89],{"class":82},[58,98566,1164],{"class":75},[58,98568,1309],{"class":82},[58,98570,799],{"class":75},[58,98572,98573,98575,98577,98579,98581,98583,98585],{"class":60,"line":68},[58,98574,98446],{"class":75},[58,98576,383],{"class":92},[58,98578,793],{"class":75},[58,98580,867],{"class":82},[58,98582,1164],{"class":75},[58,98584,1130],{"class":82},[58,98586,799],{"class":75},[58,98588,98589],{"class":60,"line":79},[58,98590,94193],{"class":64},[58,98592,98593],{"class":60,"line":105},[58,98594,94557],{"class":386},[58,98596,98597],{"class":60,"line":627},[58,98598,97817],{"class":386},[58,98600,98601],{"class":60,"line":509},[58,98602,97822],{"class":386},[58,98604,98605],{"class":60,"line":559},[58,98606,94557],{"class":386},[14,98608,98610],{"id":98609},"_56-重要比较","5.6 重要比较：",[175,98612,98613],{},[119,98614],{"alt":53,"src":98615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[175,98617,98618,98619,98621,98622,98624],{},"口诀：NumPy 函数要么用 ",[55,98620,96592],{},"，要么用 ",[55,98623,32140],{},"，创建结构用 shape，造数据用 size",[175,98626,98627],{},[119,98628],{"alt":53,"src":98629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[702,98631,98632],{},"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":53,"searchDepth":68,"depth":68,"links":98634},[98635,98636,98637,98638,98639,98640],{"id":98156,"depth":68,"text":98157},{"id":98308,"depth":68,"text":98309},{"id":98358,"depth":68,"text":98359},{"id":98404,"depth":68,"text":98405},{"id":98545,"depth":68,"text":98546},{"id":98609,"depth":68,"text":98610},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98148,"description":717},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98647,"title":98648,"body":98649,"description":717,"extension":718,"meta":99721,"navigation":720,"path":99722,"seo":99723,"stem":99724,"__hash__":99725},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98650,"toc":99715},[98651,98654,98658,98661,98664,98667,98732,98735,98775,98778,98860,98863,98868,98890,98892,98897,98902,98905,98908,99063,99066,99268,99272,99275,99278,99346,99348,99353,99356,99359,99439,99443,99446,99448,99521,99523,99528,99530,99610,99614,99617,99620,99623,99626,99629,99632,99712],[10,98652,98648],{"id":98653},"_6数组的拼接",[14,98655,98657],{"id":98656},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[175,98659,98660],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[175,98662,98663],{},"函数内部传两个数列构成的数列或者元组",[175,98665,98666],{},"①一维数组的拼接",[48,98668,98670],{"className":31022,"code":98669,"language":31024,"meta":53,"style":53},"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",[55,98671,98672,98692,98712,98717,98722,98727],{"__ignoreMap":53},[58,98673,98674,98676,98678,98680,98682,98684,98686,98688,98690],{"class":60,"line":61},[58,98675,376],{"class":75},[58,98677,383],{"class":92},[58,98679,93653],{"class":75},[58,98681,89],{"class":82},[58,98683,1164],{"class":75},[58,98685,867],{"class":82},[58,98687,1164],{"class":75},[58,98689,861],{"class":82},[58,98691,5303],{"class":75},[58,98693,98694,98696,98698,98700,98702,98704,98706,98708,98710],{"class":60,"line":68},[58,98695,1049],{"class":75},[58,98697,383],{"class":92},[58,98699,93653],{"class":75},[58,98701,1079],{"class":82},[58,98703,1164],{"class":75},[58,98705,1105],{"class":82},[58,98707,1164],{"class":75},[58,98709,1130],{"class":82},[58,98711,5303],{"class":75},[58,98713,98714],{"class":60,"line":79},[58,98715,98716],{"class":64},"#调用concatenate进行数组拼接\n",[58,98718,98719],{"class":60,"line":105},[58,98720,98721],{"class":75},"np.concatenate((a,b))\n",[58,98723,98724],{"class":60,"line":627},[58,98725,98726],{"class":64},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[58,98728,98729],{"class":60,"line":509},[58,98730,98731],{"class":64},"#np.concatenate([a,b])\n",[175,98733,98734],{},"②一维多个数组拼接",[48,98736,98738],{"className":31022,"code":98737,"language":31024,"meta":53,"style":53},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[55,98739,98740,98745,98765,98770],{"__ignoreMap":53},[58,98741,98742],{"class":60,"line":61},[58,98743,98744],{"class":64},"#也可以多个数组进行拼接\n",[58,98746,98747,98749,98751,98753,98755,98757,98759,98761,98763],{"class":60,"line":68},[58,98748,1074],{"class":75},[58,98750,383],{"class":92},[58,98752,93653],{"class":75},[58,98754,1232],{"class":82},[58,98756,1164],{"class":75},[58,98758,1258],{"class":82},[58,98760,1164],{"class":75},[58,98762,1309],{"class":82},[58,98764,5303],{"class":75},[58,98766,98767],{"class":60,"line":79},[58,98768,98769],{"class":75},"c\n",[58,98771,98772],{"class":60,"line":105},[58,98773,98774],{"class":75},"np.concatenate((a,b,c))\n",[175,98776,98777],{},"③二维数组拼接",[48,98779,98781],{"className":31022,"code":98780,"language":31024,"meta":53,"style":53},"#二维数组使用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",[55,98782,98783,98788,98812,98837,98842,98847],{"__ignoreMap":53},[58,98784,98785],{"class":60,"line":61},[58,98786,98787],{"class":64},"#二维数组使用concatenate进行拼接\n",[58,98789,98790,98792,98794,98796,98798,98800,98802,98804,98806,98808,98810],{"class":60,"line":68},[58,98791,93935],{"class":75},[58,98793,383],{"class":92},[58,98795,93631],{"class":75},[58,98797,89],{"class":82},[58,98799,1164],{"class":75},[58,98801,1309],{"class":82},[58,98803,93636],{"class":75},[58,98805,861],{"class":82},[58,98807,1164],{"class":75},[58,98809,1079],{"class":82},[58,98811,799],{"class":75},[58,98813,98814,98817,98819,98821,98823,98825,98827,98829,98831,98833,98835],{"class":60,"line":79},[58,98815,98816],{"class":75},"bb",[58,98818,383],{"class":92},[58,98820,93631],{"class":75},[58,98822,1123],{"class":82},[58,98824,1164],{"class":75},[58,98826,1428],{"class":82},[58,98828,93636],{"class":75},[58,98830,861],{"class":82},[58,98832,1164],{"class":75},[58,98834,1079],{"class":82},[58,98836,799],{"class":75},[58,98838,98839],{"class":60,"line":105},[58,98840,98841],{"class":64},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[58,98843,98844],{"class":60,"line":627},[58,98845,98846],{"class":64},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[58,98848,98849,98852,98854,98856,98858],{"class":60,"line":509},[58,98850,98851],{"class":75},"np.concatenate((aa,bb),",[58,98853,48158],{"class":5862},[58,98855,383],{"class":92},[58,98857,979],{"class":82},[58,98859,799],{"class":75},[175,98861,98862],{},"结果：",[175,98864,98865],{},[119,98866],{"alt":53,"src":98867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[48,98869,98871],{"className":31022,"code":98870,"language":31024,"meta":53,"style":53},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[55,98872,98873,98878],{"__ignoreMap":53},[58,98874,98875],{"class":60,"line":61},[58,98876,98877],{"class":64},"#指定axis为1进行拼接\n",[58,98879,98880,98882,98884,98886,98888],{"class":60,"line":68},[58,98881,98851],{"class":75},[58,98883,48158],{"class":5862},[58,98885,383],{"class":92},[58,98887,89],{"class":82},[58,98889,799],{"class":75},[175,98891,98862],{},[175,98893,98894],{},[119,98895],{"alt":53,"src":98896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[175,98898,98899],{},[25,98900,98901],{},"二维数组总结：0竖着方向，1横着方向",[175,98903,98904],{},"④三维数组拼接",[175,98906,98907],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[48,98909,98911],{"className":31022,"code":98910,"language":31024,"meta":53,"style":53},"#两个三行六列\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",[55,98912,98913,98918,98946,98976,98981,98998,99003,99008,99013,99030,99035,99040,99045,99058],{"__ignoreMap":53},[58,98914,98915],{"class":60,"line":61},[58,98916,98917],{"class":64},"#两个三行六列\n",[58,98919,98920,98922,98924,98926,98928,98930,98932,98934,98936,98938,98940,98942,98944],{"class":60,"line":68},[58,98921,96150],{"class":75},[58,98923,383],{"class":92},[58,98925,93631],{"class":75},[58,98927,89],{"class":82},[58,98929,1164],{"class":75},[58,98931,1111],{"class":82},[58,98933,93636],{"class":75},[58,98935,867],{"class":82},[58,98937,1164],{"class":75},[58,98939,861],{"class":82},[58,98941,1164],{"class":75},[58,98943,1130],{"class":82},[58,98945,799],{"class":75},[58,98947,98948,98951,98953,98955,98957,98959,98962,98964,98966,98968,98970,98972,98974],{"class":60,"line":79},[58,98949,98950],{"class":75},"bbb",[58,98952,383],{"class":92},[58,98954,93631],{"class":75},[58,98956,1123],{"class":82},[58,98958,1164],{"class":75},[58,98960,98961],{"class":82},"137",[58,98963,93636],{"class":75},[58,98965,867],{"class":82},[58,98967,1164],{"class":75},[58,98969,861],{"class":82},[58,98971,1164],{"class":75},[58,98973,1130],{"class":82},[58,98975,799],{"class":75},[58,98977,98978],{"class":60,"line":105},[58,98979,98980],{"class":64},"#axis=0\n",[58,98982,98983,98985,98987,98990,98992,98994,98996],{"class":60,"line":627},[58,98984,1481],{"class":75},[58,98986,383],{"class":92},[58,98988,98989],{"class":75},"np.concatenate((aaa,bbb),",[58,98991,48158],{"class":5862},[58,98993,383],{"class":92},[58,98995,979],{"class":82},[58,98997,799],{"class":75},[58,98999,99000],{"class":60,"line":509},[58,99001,99002],{"class":75},"s.shape\n",[58,99004,99005],{"class":60,"line":559},[58,99006,99007],{"class":64},"#输出：(4,3,6)\n",[58,99009,99010],{"class":60,"line":654},[58,99011,99012],{"class":64},"#axis=1\n",[58,99014,99015,99018,99020,99022,99024,99026,99028],{"class":60,"line":671},[58,99016,99017],{"class":75},"ss",[58,99019,383],{"class":92},[58,99021,98989],{"class":75},[58,99023,48158],{"class":5862},[58,99025,383],{"class":92},[58,99027,89],{"class":82},[58,99029,799],{"class":75},[58,99031,99032],{"class":60,"line":677},[58,99033,99034],{"class":75},"ss.shape\n",[58,99036,99037],{"class":60,"line":2260},[58,99038,99039],{"class":64},"#输出：(2,6,6)\n",[58,99041,99042],{"class":60,"line":694},[58,99043,99044],{"class":64},"#axis=2\n",[58,99046,99047,99049,99051,99053,99055],{"class":60,"line":2270},[58,99048,98989],{"class":75},[58,99050,48158],{"class":5862},[58,99052,383],{"class":92},[58,99054,867],{"class":82},[58,99056,99057],{"class":75},").shape\n",[58,99059,99060],{"class":60,"line":2275},[58,99061,99062],{"class":64},"#输出：（2，3，12）\n",[175,99064,99065],{},"⑤四维数组拼接",[48,99067,99069],{"className":31022,"code":99068,"language":31024,"meta":53,"style":53},"#两个三行六列\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",[55,99070,99071,99075,99103,99131,99156,99182,99186,99199,99204,99208,99220,99225,99229,99241,99246,99251,99263],{"__ignoreMap":53},[58,99072,99073],{"class":60,"line":61},[58,99074,98917],{"class":64},[58,99076,99077,99079,99081,99083,99085,99087,99089,99091,99093,99095,99097,99099,99101],{"class":60,"line":68},[58,99078,96150],{"class":75},[58,99080,383],{"class":92},[58,99082,93631],{"class":75},[58,99084,89],{"class":82},[58,99086,1164],{"class":75},[58,99088,1111],{"class":82},[58,99090,93636],{"class":75},[58,99092,867],{"class":82},[58,99094,1164],{"class":75},[58,99096,861],{"class":82},[58,99098,1164],{"class":75},[58,99100,1130],{"class":82},[58,99102,799],{"class":75},[58,99104,99105,99107,99109,99111,99113,99115,99117,99119,99121,99123,99125,99127,99129],{"class":60,"line":79},[58,99106,98950],{"class":75},[58,99108,383],{"class":92},[58,99110,93631],{"class":75},[58,99112,1123],{"class":82},[58,99114,1164],{"class":75},[58,99116,98961],{"class":82},[58,99118,93636],{"class":75},[58,99120,867],{"class":82},[58,99122,1164],{"class":75},[58,99124,861],{"class":82},[58,99126,1164],{"class":75},[58,99128,1130],{"class":82},[58,99130,799],{"class":75},[58,99132,99133,99136,99138,99140,99142,99144,99146,99148,99150,99152,99154],{"class":60,"line":105},[58,99134,99135],{"class":75},"aaaa",[58,99137,383],{"class":92},[58,99139,98299],{"class":75},[58,99141,867],{"class":82},[58,99143,1164],{"class":75},[58,99145,861],{"class":82},[58,99147,1164],{"class":75},[58,99149,861],{"class":82},[58,99151,1164],{"class":75},[58,99153,867],{"class":82},[58,99155,799],{"class":75},[58,99157,99158,99161,99163,99166,99168,99170,99172,99174,99176,99178,99180],{"class":60,"line":627},[58,99159,99160],{"class":75},"bbbb",[58,99162,383],{"class":92},[58,99164,99165],{"class":75},"bbb.reshape(",[58,99167,867],{"class":82},[58,99169,1164],{"class":75},[58,99171,861],{"class":82},[58,99173,1164],{"class":75},[58,99175,861],{"class":82},[58,99177,1164],{"class":75},[58,99179,867],{"class":82},[58,99181,799],{"class":75},[58,99183,99184],{"class":60,"line":509},[58,99185,98980],{"class":64},[58,99187,99188,99191,99193,99195,99197],{"class":60,"line":559},[58,99189,99190],{"class":75},"np.concatenate((aaaa,bbbb),",[58,99192,48158],{"class":5862},[58,99194,383],{"class":92},[58,99196,979],{"class":82},[58,99198,99057],{"class":75},[58,99200,99201],{"class":60,"line":654},[58,99202,99203],{"class":64},"#结果：（4，3，3，2）\n",[58,99205,99206],{"class":60,"line":671},[58,99207,99012],{"class":64},[58,99209,99210,99212,99214,99216,99218],{"class":60,"line":677},[58,99211,99190],{"class":75},[58,99213,48158],{"class":5862},[58,99215,383],{"class":92},[58,99217,89],{"class":82},[58,99219,99057],{"class":75},[58,99221,99222],{"class":60,"line":2260},[58,99223,99224],{"class":64},"#结果：（2，6，3，2）\n",[58,99226,99227],{"class":60,"line":694},[58,99228,99044],{"class":64},[58,99230,99231,99233,99235,99237,99239],{"class":60,"line":2270},[58,99232,99190],{"class":75},[58,99234,48158],{"class":5862},[58,99236,383],{"class":92},[58,99238,867],{"class":82},[58,99240,99057],{"class":75},[58,99242,99243],{"class":60,"line":2275},[58,99244,99245],{"class":64},"#结果：（2，3，6，2）\n",[58,99247,99248],{"class":60,"line":2289},[58,99249,99250],{"class":64},"#axis=3\n",[58,99252,99253,99255,99257,99259,99261],{"class":60,"line":2294},[58,99254,99190],{"class":75},[58,99256,48158],{"class":5862},[58,99258,383],{"class":92},[58,99260,861],{"class":82},[58,99262,99057],{"class":75},[58,99264,99265],{"class":60,"line":2300},[58,99266,99267],{"class":64},"#结果：（2，3，3，4）\n",[14,99269,99271],{"id":99270},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[175,99273,99274],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[175,99276,99277],{},"①二维数组",[48,99279,99281],{"className":31022,"code":99280,"language":31024,"meta":53,"style":53},"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",[55,99282,99283,99307,99331,99336,99341],{"__ignoreMap":53},[58,99284,99285,99287,99289,99291,99293,99295,99297,99299,99301,99303,99305],{"class":60,"line":61},[58,99286,93935],{"class":75},[58,99288,383],{"class":92},[58,99290,93631],{"class":75},[58,99292,89],{"class":82},[58,99294,1164],{"class":75},[58,99296,1309],{"class":82},[58,99298,93636],{"class":75},[58,99300,861],{"class":82},[58,99302,1164],{"class":75},[58,99304,1079],{"class":82},[58,99306,799],{"class":75},[58,99308,99309,99311,99313,99315,99317,99319,99321,99323,99325,99327,99329],{"class":60,"line":68},[58,99310,98816],{"class":75},[58,99312,383],{"class":92},[58,99314,93631],{"class":75},[58,99316,1123],{"class":82},[58,99318,1164],{"class":75},[58,99320,1428],{"class":82},[58,99322,93636],{"class":75},[58,99324,861],{"class":82},[58,99326,1164],{"class":75},[58,99328,1079],{"class":82},[58,99330,799],{"class":75},[58,99332,99333],{"class":60,"line":79},[58,99334,99335],{"class":75},"np.hstack((aa,bb))\n",[58,99337,99338],{"class":60,"line":105},[58,99339,99340],{"class":64},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[58,99342,99343],{"class":60,"line":627},[58,99344,99345],{"class":64},"#np.hstack([aa,bb])\n",[175,99347,98862],{},[175,99349,99350],{},[119,99351],{"alt":53,"src":99352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[175,99354,99355],{},"等效于concatenate()函数中axis=1时的情况",[175,99357,99358],{},"②三维数组",[48,99360,99362],{"className":31022,"code":99361,"language":31024,"meta":53,"style":53},"#两个三行六列\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",[55,99363,99364,99368,99396,99424,99429,99434],{"__ignoreMap":53},[58,99365,99366],{"class":60,"line":61},[58,99367,98917],{"class":64},[58,99369,99370,99372,99374,99376,99378,99380,99382,99384,99386,99388,99390,99392,99394],{"class":60,"line":68},[58,99371,96150],{"class":75},[58,99373,383],{"class":92},[58,99375,93631],{"class":75},[58,99377,89],{"class":82},[58,99379,1164],{"class":75},[58,99381,1111],{"class":82},[58,99383,93636],{"class":75},[58,99385,867],{"class":82},[58,99387,1164],{"class":75},[58,99389,861],{"class":82},[58,99391,1164],{"class":75},[58,99393,1130],{"class":82},[58,99395,799],{"class":75},[58,99397,99398,99400,99402,99404,99406,99408,99410,99412,99414,99416,99418,99420,99422],{"class":60,"line":79},[58,99399,98950],{"class":75},[58,99401,383],{"class":92},[58,99403,93631],{"class":75},[58,99405,1123],{"class":82},[58,99407,1164],{"class":75},[58,99409,98961],{"class":82},[58,99411,93636],{"class":75},[58,99413,867],{"class":82},[58,99415,1164],{"class":75},[58,99417,861],{"class":82},[58,99419,1164],{"class":75},[58,99421,1130],{"class":82},[58,99423,799],{"class":75},[58,99425,99426],{"class":60,"line":105},[58,99427,99428],{"class":64},"#使用hstack\n",[58,99430,99431],{"class":60,"line":627},[58,99432,99433],{"class":75},"np.hstack((aaa,bbb)).shape\n",[58,99435,99436],{"class":60,"line":509},[58,99437,99438],{"class":64},"#输出：（2，6，6）\n",[14,99440,99442],{"id":99441},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[175,99444,99445],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[175,99447,99277],{},[48,99449,99451],{"className":31022,"code":99450,"language":31024,"meta":53,"style":53},"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",[55,99452,99453,99477,99501,99506,99511,99516],{"__ignoreMap":53},[58,99454,99455,99457,99459,99461,99463,99465,99467,99469,99471,99473,99475],{"class":60,"line":61},[58,99456,93935],{"class":75},[58,99458,383],{"class":92},[58,99460,93631],{"class":75},[58,99462,89],{"class":82},[58,99464,1164],{"class":75},[58,99466,1309],{"class":82},[58,99468,93636],{"class":75},[58,99470,861],{"class":82},[58,99472,1164],{"class":75},[58,99474,1079],{"class":82},[58,99476,799],{"class":75},[58,99478,99479,99481,99483,99485,99487,99489,99491,99493,99495,99497,99499],{"class":60,"line":68},[58,99480,98816],{"class":75},[58,99482,383],{"class":92},[58,99484,93631],{"class":75},[58,99486,1123],{"class":82},[58,99488,1164],{"class":75},[58,99490,1428],{"class":82},[58,99492,93636],{"class":75},[58,99494,861],{"class":82},[58,99496,1164],{"class":75},[58,99498,1079],{"class":82},[58,99500,799],{"class":75},[58,99502,99503],{"class":60,"line":79},[58,99504,99505],{"class":64},"#vstack 垂直方向进行堆叠\n",[58,99507,99508],{"class":60,"line":105},[58,99509,99510],{"class":75},"np.vstack((aa,bb))\n",[58,99512,99513],{"class":60,"line":627},[58,99514,99515],{"class":64},"#与hstack传的参数类似，等价于：\n",[58,99517,99518],{"class":60,"line":509},[58,99519,99520],{"class":75},"np.vstack([aa,bb])\n",[175,99522,98862],{},[175,99524,99525],{},[119,99526],{"alt":53,"src":99527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[175,99529,99358],{},[48,99531,99533],{"className":31022,"code":99532,"language":31024,"meta":53,"style":53},"#两个三行六列\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",[55,99534,99535,99539,99567,99595,99600,99605],{"__ignoreMap":53},[58,99536,99537],{"class":60,"line":61},[58,99538,98917],{"class":64},[58,99540,99541,99543,99545,99547,99549,99551,99553,99555,99557,99559,99561,99563,99565],{"class":60,"line":68},[58,99542,96150],{"class":75},[58,99544,383],{"class":92},[58,99546,93631],{"class":75},[58,99548,89],{"class":82},[58,99550,1164],{"class":75},[58,99552,1111],{"class":82},[58,99554,93636],{"class":75},[58,99556,867],{"class":82},[58,99558,1164],{"class":75},[58,99560,861],{"class":82},[58,99562,1164],{"class":75},[58,99564,1130],{"class":82},[58,99566,799],{"class":75},[58,99568,99569,99571,99573,99575,99577,99579,99581,99583,99585,99587,99589,99591,99593],{"class":60,"line":79},[58,99570,98950],{"class":75},[58,99572,383],{"class":92},[58,99574,93631],{"class":75},[58,99576,1123],{"class":82},[58,99578,1164],{"class":75},[58,99580,98961],{"class":82},[58,99582,93636],{"class":75},[58,99584,867],{"class":82},[58,99586,1164],{"class":75},[58,99588,861],{"class":82},[58,99590,1164],{"class":75},[58,99592,1130],{"class":82},[58,99594,799],{"class":75},[58,99596,99597],{"class":60,"line":105},[58,99598,99599],{"class":64},"#使用vstack\n",[58,99601,99602],{"class":60,"line":627},[58,99603,99604],{"class":75},"np.vstack((aaa,bbb)).shape\n",[58,99606,99607],{"class":60,"line":509},[58,99608,99609],{"class":64},"#输出：（4，3，6）\n",[14,99611,99613],{"id":99612},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[175,99615,99616],{},"该方法是三维数组特有的方法",[175,99618,99619],{},"也就是说",[175,99621,99622],{},"一维数组拼接方法用：concatenate()",[175,99624,99625],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[175,99627,99628],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[175,99630,99631],{},"四维数组及多维数组只能用concatenate进行拼接",[48,99633,99635],{"className":31022,"code":99634,"language":31024,"meta":53,"style":53},"#两个三行六列\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",[55,99636,99637,99641,99669,99697,99702,99707],{"__ignoreMap":53},[58,99638,99639],{"class":60,"line":61},[58,99640,98917],{"class":64},[58,99642,99643,99645,99647,99649,99651,99653,99655,99657,99659,99661,99663,99665,99667],{"class":60,"line":68},[58,99644,96150],{"class":75},[58,99646,383],{"class":92},[58,99648,93631],{"class":75},[58,99650,89],{"class":82},[58,99652,1164],{"class":75},[58,99654,1111],{"class":82},[58,99656,93636],{"class":75},[58,99658,867],{"class":82},[58,99660,1164],{"class":75},[58,99662,861],{"class":82},[58,99664,1164],{"class":75},[58,99666,1130],{"class":82},[58,99668,799],{"class":75},[58,99670,99671,99673,99675,99677,99679,99681,99683,99685,99687,99689,99691,99693,99695],{"class":60,"line":79},[58,99672,98950],{"class":75},[58,99674,383],{"class":92},[58,99676,93631],{"class":75},[58,99678,1123],{"class":82},[58,99680,1164],{"class":75},[58,99682,98961],{"class":82},[58,99684,93636],{"class":75},[58,99686,867],{"class":82},[58,99688,1164],{"class":75},[58,99690,861],{"class":82},[58,99692,1164],{"class":75},[58,99694,1130],{"class":82},[58,99696,799],{"class":75},[58,99698,99699],{"class":60,"line":105},[58,99700,99701],{"class":64},"#使用dstack\n",[58,99703,99704],{"class":60,"line":627},[58,99705,99706],{"class":75},"np.dstack((aaa,bbb)).shape\n",[58,99708,99709],{"class":60,"line":509},[58,99710,99711],{"class":64},"#结果：（2，3，12）\n",[702,99713,99714],{},"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":53,"searchDepth":68,"depth":68,"links":99716},[99717,99718,99719,99720],{"id":98656,"depth":68,"text":98657},{"id":99270,"depth":68,"text":99271},{"id":99441,"depth":68,"text":99442},{"id":99612,"depth":68,"text":99613},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98648,"description":717},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99727,"title":99728,"body":99729,"description":717,"extension":718,"meta":100004,"navigation":720,"path":100005,"seo":100006,"stem":100007,"__hash__":100008},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99730,"toc":100002},[99731,99734,99737,99831,99834,99837,99840,99843,99846,99849,99852,99855,99999],[10,99732,99728],{"id":99733},"_7数组转置",[175,99735,99736],{},"使用transpose()函数",[48,99738,99740],{"className":31022,"code":99739,"language":31024,"meta":53,"style":53},"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",[55,99741,99742,99752,99776,99781,99786,99791,99796,99804,99808,99812,99817,99822,99827],{"__ignoreMap":53},[58,99743,99744,99746,99748,99750],{"class":60,"line":61},[58,99745,31036],{"class":92},[58,99747,32024],{"class":75},[58,99749,32027],{"class":92},[58,99751,32030],{"class":75},[58,99753,99754,99756,99758,99760,99762,99764,99766,99768,99770,99772,99774],{"class":60,"line":68},[58,99755,376],{"class":75},[58,99757,383],{"class":92},[58,99759,32361],{"class":75},[58,99761,89],{"class":82},[58,99763,1164],{"class":75},[58,99765,1309],{"class":82},[58,99767,93636],{"class":75},[58,99769,1079],{"class":82},[58,99771,1164],{"class":75},[58,99773,861],{"class":82},[58,99775,799],{"class":75},[58,99777,99778],{"class":60,"line":79},[58,99779,99780],{"class":64},"#二维数组转置\n",[58,99782,99783],{"class":60,"line":105},[58,99784,99785],{"class":64},"#调用transpose()函数\n",[58,99787,99788],{"class":60,"line":627},[58,99789,99790],{"class":75},"a.transpose()\n",[58,99792,99793],{"class":60,"line":509},[58,99794,99795],{"class":64},"#对于二维数组也可以采用.T来实现\n",[58,99797,99798,99801],{"class":60,"line":559},[58,99799,99800],{"class":75},"a.T",[58,99802,99803],{"class":64},"#与上述代码一样\n",[58,99805,99806],{"class":60,"line":654},[58,99807,94193],{"class":64},[58,99809,99810],{"class":60,"line":671},[58,99811,94557],{"class":386},[58,99813,99814],{"class":60,"line":677},[58,99815,99816],{"class":386},"array([[ 1,  4,  7, 10],\n",[58,99818,99819],{"class":60,"line":2260},[58,99820,99821],{"class":386},"       [ 2,  5,  8, 11],\n",[58,99823,99824],{"class":60,"line":694},[58,99825,99826],{"class":386},"       [ 3,  6,  9, 12]])\n",[58,99828,99829],{"class":60,"line":2270},[58,99830,94557],{"class":386},[175,99832,99833],{},"也可以使用np.transpose()的形式",[175,99835,99836],{},"#多维数组进行转置 np.transpose()",[175,99838,99839],{},"#对二维数组也可以使用np.transpose()进行转置",[175,99841,99842],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[175,99844,99845],{},"第二个参数，维度可以理解为用axis中的数来理解",[175,99847,99848],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[175,99850,99851],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[175,99853,99854],{},"四维及以上的数组也是一样的道理",[48,99856,99858],{"className":31022,"code":99857,"language":31024,"meta":53,"style":53},"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",[55,99859,99860,99888,99893,99898,99903,99921,99926,99958,99963,99968,99973,99994],{"__ignoreMap":53},[58,99861,99862,99864,99866,99868,99870,99872,99874,99876,99878,99880,99882,99884,99886],{"class":60,"line":61},[58,99863,1605],{"class":75},[58,99865,383],{"class":92},[58,99867,93631],{"class":75},[58,99869,89],{"class":82},[58,99871,1164],{"class":75},[58,99873,1111],{"class":82},[58,99875,93636],{"class":75},[58,99877,861],{"class":82},[58,99879,1164],{"class":75},[58,99881,1130],{"class":82},[58,99883,1164],{"class":75},[58,99885,867],{"class":82},[58,99887,799],{"class":75},[58,99889,99890],{"class":60,"line":68},[58,99891,99892],{"class":75},"x.shape\n",[58,99894,99895],{"class":60,"line":79},[58,99896,99897],{"class":64},"#结果：（3,6,2）\n",[58,99899,99900],{"class":60,"line":105},[58,99901,99902],{"class":64},"#使用np.transpose()进行转置 变为(2,6,3)\n",[58,99904,99905,99908,99910,99912,99914,99916,99918],{"class":60,"line":627},[58,99906,99907],{"class":75},"np.transpose(x,(",[58,99909,867],{"class":82},[58,99911,1164],{"class":75},[58,99913,89],{"class":82},[58,99915,1164],{"class":75},[58,99917,979],{"class":82},[58,99919,99920],{"class":75},")).shape\n",[58,99922,99923],{"class":60,"line":509},[58,99924,99925],{"class":64},"#结果：(2,6,3)\n",[58,99927,99928,99930,99932,99934,99936,99938,99940,99942,99944,99946,99948,99950,99952,99954,99956],{"class":60,"line":559},[58,99929,99135],{"class":75},[58,99931,383],{"class":92},[58,99933,93631],{"class":75},[58,99935,89],{"class":82},[58,99937,1164],{"class":75},[58,99939,1111],{"class":82},[58,99941,93636],{"class":75},[58,99943,861],{"class":82},[58,99945,1164],{"class":75},[58,99947,867],{"class":82},[58,99949,1164],{"class":75},[58,99951,89],{"class":82},[58,99953,1164],{"class":75},[58,99955,1130],{"class":82},[58,99957,799],{"class":75},[58,99959,99960],{"class":60,"line":654},[58,99961,99962],{"class":75},"aaaa.shape\n",[58,99964,99965],{"class":60,"line":671},[58,99966,99967],{"class":64},"#结果：（3，2，1，6）\n",[58,99969,99970],{"class":60,"line":677},[58,99971,99972],{"class":64},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[58,99974,99975,99978,99980,99982,99984,99986,99988,99990,99992],{"class":60,"line":2260},[58,99976,99977],{"class":75},"np.transpose(aaaa,(",[58,99979,89],{"class":82},[58,99981,1164],{"class":75},[58,99983,867],{"class":82},[58,99985,1164],{"class":75},[58,99987,979],{"class":82},[58,99989,1164],{"class":75},[58,99991,861],{"class":82},[58,99993,99920],{"class":75},[58,99995,99996],{"class":60,"line":694},[58,99997,99998],{"class":64},"#结果：(2,1,3,6)\n",[702,100000,100001],{},"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":53,"searchDepth":68,"depth":68,"links":100003},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99728,"description":717},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100010,"title":100011,"body":100012,"description":717,"extension":718,"meta":100746,"navigation":720,"path":100747,"seo":100748,"stem":100749,"__hash__":100750},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100013,"toc":100744},[100014,100017,100020,100023,100026,100029,100032,100035,100038,100147,100150,100153,100741],[10,100015,100011],{"id":100016},"_8数组分割",[175,100018,100019],{},"split分割",[175,100021,100022],{},"numpy.split(ary,indics_or_sections,axis)",[175,100024,100025],{},"解释：",[175,100027,100028],{},"ary:被分割的数组",[175,100030,100031],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[175,100033,100034],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[175,100036,100037],{},"①一维数组的分割",[48,100039,100041],{"className":31022,"code":100040,"language":31024,"meta":53,"style":53},"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",[55,100042,100043,100059,100064,100073,100077,100082,100090,100094,100099,100104,100117,100121,100126,100138,100142],{"__ignoreMap":53},[58,100044,100045,100047,100049,100051,100053,100055,100057],{"class":60,"line":61},[58,100046,376],{"class":75},[58,100048,383],{"class":92},[58,100050,93631],{"class":75},[58,100052,89],{"class":82},[58,100054,1164],{"class":75},[58,100056,1206],{"class":82},[58,100058,799],{"class":75},[58,100060,100061],{"class":60,"line":68},[58,100062,100063],{"class":64},"#如果传入整数，必须能够平分，否则会报错\n",[58,100065,100066,100069,100071],{"class":60,"line":79},[58,100067,100068],{"class":75},"np.split(a,",[58,100070,867],{"class":82},[58,100072,799],{"class":75},[58,100074,100075],{"class":60,"line":105},[58,100076,94193],{"class":64},[58,100078,100079],{"class":60,"line":627},[58,100080,100081],{"class":64},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[58,100083,100084,100086,100088],{"class":60,"line":509},[58,100085,100068],{"class":75},[58,100087,1079],{"class":82},[58,100089,799],{"class":75},[58,100091,100092],{"class":60,"line":559},[58,100093,94193],{"class":64},[58,100095,100096],{"class":60,"line":654},[58,100097,100098],{"class":64},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[58,100100,100101],{"class":60,"line":671},[58,100102,100103],{"class":64},"#传入数组\n",[58,100105,100106,100109,100111,100113,100115],{"class":60,"line":677},[58,100107,100108],{"class":75},"np.split(a,[",[58,100110,861],{"class":82},[58,100112,1164],{"class":75},[58,100114,1105],{"class":82},[58,100116,5303],{"class":75},[58,100118,100119],{"class":60,"line":2260},[58,100120,94193],{"class":64},[58,100122,100123],{"class":60,"line":694},[58,100124,100125],{"class":64},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[58,100127,100128,100130,100132,100134,100136],{"class":60,"line":2270},[58,100129,100108],{"class":75},[58,100131,1105],{"class":82},[58,100133,1164],{"class":75},[58,100135,1155],{"class":82},[58,100137,5303],{"class":75},[58,100139,100140],{"class":60,"line":2275},[58,100141,94193],{"class":64},[58,100143,100144],{"class":60,"line":2289},[58,100145,100146],{"class":64},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[175,100148,100149],{},"②二维数组的分割",[175,100151,100152],{},"使用split()",[48,100154,100156],{"className":31022,"code":100155,"language":31024,"meta":53,"style":53},"#二维数组分割\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",[55,100157,100158,100163,100187,100192,100201,100205,100209,100214,100219,100224,100229,100234,100239,100244,100248,100261,100265,100269,100273,100277,100281,100286,100291,100296,100300,100305,100321,100325,100329,100334,100339,100344,100349,100354,100359,100364,100369,100374,100379,100384,100389,100394,100399,100404,100409,100414,100419,100423,100427,100447,100451,100455,100460,100465,100470,100475,100480,100485,100490,100495,100500,100505,100510,100515,100520,100525,100530,100535,100540,100545,100549,100554,100563,100567,100571,100575,100579,100583,100587,100591,100595,100599,100608,100612,100616,100620,100624,100628,100632,100636,100640,100644,100648,100652,100656,100660,100664,100668,100672,100676,100680,100684,100688,100692,100705,100709,100713,100717,100721,100725,100729,100733,100737],{"__ignoreMap":53},[58,100159,100160],{"class":60,"line":61},[58,100161,100162],{"class":64},"#二维数组分割\n",[58,100164,100165,100167,100169,100171,100173,100175,100177,100179,100181,100183,100185],{"class":60,"line":68},[58,100166,93935],{"class":75},[58,100168,383],{"class":92},[58,100170,93631],{"class":75},[58,100172,89],{"class":82},[58,100174,1164],{"class":75},[58,100176,1111],{"class":82},[58,100178,93636],{"class":75},[58,100180,1130],{"class":82},[58,100182,1164],{"class":75},[58,100184,1130],{"class":82},[58,100186,799],{"class":75},[58,100188,100189],{"class":60,"line":79},[58,100190,100191],{"class":64},"#默认axis=0  传入整数平均分,按行来的\n",[58,100193,100194,100197,100199],{"class":60,"line":105},[58,100195,100196],{"class":75},"np.split(aa,",[58,100198,861],{"class":82},[58,100200,799],{"class":75},[58,100202,100203],{"class":60,"line":627},[58,100204,96393],{"class":64},[58,100206,100207],{"class":60,"line":509},[58,100208,94557],{"class":386},[58,100210,100211],{"class":60,"line":559},[58,100212,100213],{"class":386},"[array([[ 1,  2,  3,  4,  5,  6],\n",[58,100215,100216],{"class":60,"line":654},[58,100217,100218],{"class":386},"        [ 7,  8,  9, 10, 11, 12]]),\n",[58,100220,100221],{"class":60,"line":671},[58,100222,100223],{"class":386}," array([[13, 14, 15, 16, 17, 18],\n",[58,100225,100226],{"class":60,"line":677},[58,100227,100228],{"class":386},"        [19, 20, 21, 22, 23, 24]]),\n",[58,100230,100231],{"class":60,"line":2260},[58,100232,100233],{"class":386}," array([[25, 26, 27, 28, 29, 30],\n",[58,100235,100236],{"class":60,"line":694},[58,100237,100238],{"class":386},"        [31, 32, 33, 34, 35, 36]])]\n",[58,100240,100241],{"class":60,"line":2270},[58,100242,100243],{"class":386}," '''\n",[58,100245,100246],{"class":60,"line":2275},[58,100247,100103],{"class":64},[58,100249,100250,100253,100255,100257,100259],{"class":60,"line":2289},[58,100251,100252],{"class":75},"np.split(aa,[",[58,100254,867],{"class":82},[58,100256,1164],{"class":75},[58,100258,1105],{"class":82},[58,100260,5303],{"class":75},[58,100262,100263],{"class":60,"line":2294},[58,100264,96393],{"class":64},[58,100266,100267],{"class":60,"line":2300},[58,100268,94557],{"class":386},[58,100270,100271],{"class":60,"line":2321},[58,100272,100213],{"class":386},[58,100274,100275],{"class":60,"line":2326},[58,100276,100218],{"class":386},[58,100278,100279],{"class":60,"line":2340},[58,100280,100223],{"class":386},[58,100282,100283],{"class":60,"line":2345},[58,100284,100285],{"class":386},"        [19, 20, 21, 22, 23, 24],\n",[58,100287,100288],{"class":60,"line":2374},[58,100289,100290],{"class":386},"        [25, 26, 27, 28, 29, 30]]),\n",[58,100292,100293],{"class":60,"line":2379},[58,100294,100295],{"class":386}," array([[31, 32, 33, 34, 35, 36]])]\n",[58,100297,100298],{"class":60,"line":2396},[58,100299,94557],{"class":386},[58,100301,100302],{"class":60,"line":2401},[58,100303,100304],{"class":64},"#axis=1 按照列来分\n",[58,100306,100307,100309,100311,100313,100315,100317,100319],{"class":60,"line":2406},[58,100308,100196],{"class":75},[58,100310,861],{"class":82},[58,100312,1164],{"class":75},[58,100314,48158],{"class":5862},[58,100316,383],{"class":92},[58,100318,89],{"class":82},[58,100320,799],{"class":75},[58,100322,100323],{"class":60,"line":2411},[58,100324,96393],{"class":64},[58,100326,100327],{"class":60,"line":2425},[58,100328,94557],{"class":386},[58,100330,100331],{"class":60,"line":2430},[58,100332,100333],{"class":386},"[array([[ 1,  2],\n",[58,100335,100336],{"class":60,"line":3223},[58,100337,100338],{"class":386},"        [ 7,  8],\n",[58,100340,100341],{"class":60,"line":3237},[58,100342,100343],{"class":386},"        [13, 14],\n",[58,100345,100346],{"class":60,"line":3245},[58,100347,100348],{"class":386},"        [19, 20],\n",[58,100350,100351],{"class":60,"line":3250},[58,100352,100353],{"class":386},"        [25, 26],\n",[58,100355,100356],{"class":60,"line":3256},[58,100357,100358],{"class":386},"        [31, 32]]),\n",[58,100360,100361],{"class":60,"line":3262},[58,100362,100363],{"class":386}," array([[ 3,  4],\n",[58,100365,100366],{"class":60,"line":3267},[58,100367,100368],{"class":386},"        [ 9, 10],\n",[58,100370,100371],{"class":60,"line":8594},[58,100372,100373],{"class":386},"        [15, 16],\n",[58,100375,100376],{"class":60,"line":8618},[58,100377,100378],{"class":386},"        [21, 22],\n",[58,100380,100381],{"class":60,"line":8623},[58,100382,100383],{"class":386},"        [27, 28],\n",[58,100385,100386],{"class":60,"line":8629},[58,100387,100388],{"class":386},"        [33, 34]]),\n",[58,100390,100391],{"class":60,"line":8656},[58,100392,100393],{"class":386}," array([[ 5,  6],\n",[58,100395,100396],{"class":60,"line":8661},[58,100397,100398],{"class":386},"        [11, 12],\n",[58,100400,100401],{"class":60,"line":8667},[58,100402,100403],{"class":386},"        [17, 18],\n",[58,100405,100406],{"class":60,"line":8679},[58,100407,100408],{"class":386},"        [23, 24],\n",[58,100410,100411],{"class":60,"line":8691},[58,100412,100413],{"class":386},"        [29, 30],\n",[58,100415,100416],{"class":60,"line":8703},[58,100417,100418],{"class":386},"        [35, 36]])]\n",[58,100420,100421],{"class":60,"line":10361},[58,100422,100243],{"class":386},[58,100424,100425],{"class":60,"line":10386},[58,100426,100103],{"class":64},[58,100428,100429,100431,100433,100435,100437,100439,100441,100443,100445],{"class":60,"line":10409},[58,100430,100252],{"class":75},[58,100432,89],{"class":82},[58,100434,1164],{"class":75},[58,100436,867],{"class":82},[58,100438,42253],{"class":75},[58,100440,48158],{"class":5862},[58,100442,383],{"class":92},[58,100444,89],{"class":82},[58,100446,799],{"class":75},[58,100448,100449],{"class":60,"line":10433},[58,100450,94193],{"class":64},[58,100452,100453],{"class":60,"line":10438},[58,100454,94557],{"class":386},[58,100456,100457],{"class":60,"line":10443},[58,100458,100459],{"class":386},"[array([[ 1],\n",[58,100461,100462],{"class":60,"line":10448},[58,100463,100464],{"class":386},"        [ 7],\n",[58,100466,100467],{"class":60,"line":10457},[58,100468,100469],{"class":386},"        [13],\n",[58,100471,100472],{"class":60,"line":10462},[58,100473,100474],{"class":386},"        [19],\n",[58,100476,100477],{"class":60,"line":10468},[58,100478,100479],{"class":386},"        [25],\n",[58,100481,100482],{"class":60,"line":10489},[58,100483,100484],{"class":386},"        [31]]),\n",[58,100486,100487],{"class":60,"line":10495},[58,100488,100489],{"class":386}," array([[ 2],\n",[58,100491,100492],{"class":60,"line":10509},[58,100493,100494],{"class":386},"        [ 8],\n",[58,100496,100497],{"class":60,"line":10515},[58,100498,100499],{"class":386},"        [14],\n",[58,100501,100502],{"class":60,"line":10542},[58,100503,100504],{"class":386},"        [20],\n",[58,100506,100507],{"class":60,"line":10551},[58,100508,100509],{"class":386},"        [26],\n",[58,100511,100512],{"class":60,"line":10557},[58,100513,100514],{"class":386},"        [32]]),\n",[58,100516,100517],{"class":60,"line":10565},[58,100518,100519],{"class":386}," array([[ 3,  4,  5,  6],\n",[58,100521,100522],{"class":60,"line":10570},[58,100523,100524],{"class":386},"        [ 9, 10, 11, 12],\n",[58,100526,100527],{"class":60,"line":17247},[58,100528,100529],{"class":386},"        [15, 16, 17, 18],\n",[58,100531,100532],{"class":60,"line":17253},[58,100533,100534],{"class":386},"        [21, 22, 23, 24],\n",[58,100536,100537],{"class":60,"line":17276},[58,100538,100539],{"class":386},"        [27, 28, 29, 30],\n",[58,100541,100542],{"class":60,"line":17282},[58,100543,100544],{"class":386},"        [33, 34, 35, 36]])]\n",[58,100546,100547],{"class":60,"line":17305},[58,100548,94557],{"class":386},[58,100550,100551],{"class":60,"line":17319},[58,100552,100553],{"class":64},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[58,100555,100556,100559,100561],{"class":60,"line":17339},[58,100557,100558],{"class":75},"np.vsplit(aa,",[58,100560,861],{"class":82},[58,100562,799],{"class":75},[58,100564,100565],{"class":60,"line":17345},[58,100566,94193],{"class":64},[58,100568,100569],{"class":60,"line":17356},[58,100570,94557],{"class":386},[58,100572,100573],{"class":60,"line":17379},[58,100574,100213],{"class":386},[58,100576,100577],{"class":60,"line":17401},[58,100578,100218],{"class":386},[58,100580,100581],{"class":60,"line":17406},[58,100582,100223],{"class":386},[58,100584,100585],{"class":60,"line":17412},[58,100586,100228],{"class":386},[58,100588,100589],{"class":60,"line":17426},[58,100590,100233],{"class":386},[58,100592,100593],{"class":60,"line":17439},[58,100594,100238],{"class":386},[58,100596,100597],{"class":60,"line":17444},[58,100598,94557],{"class":386},[58,100600,100601,100604,100606],{"class":60,"line":17458},[58,100602,100603],{"class":75},"np.hsplit(aa,",[58,100605,861],{"class":82},[58,100607,799],{"class":75},[58,100609,100610],{"class":60,"line":17463},[58,100611,94193],{"class":64},[58,100613,100614],{"class":60,"line":17469},[58,100615,94557],{"class":386},[58,100617,100618],{"class":60,"line":17474},[58,100619,100333],{"class":386},[58,100621,100622],{"class":60,"line":17488},[58,100623,100338],{"class":386},[58,100625,100626],{"class":60,"line":17493},[58,100627,100343],{"class":386},[58,100629,100630],{"class":60,"line":17498},[58,100631,100348],{"class":386},[58,100633,100634],{"class":60,"line":17512},[58,100635,100353],{"class":386},[58,100637,100638],{"class":60,"line":17524},[58,100639,100358],{"class":386},[58,100641,100642],{"class":60,"line":17529},[58,100643,100363],{"class":386},[58,100645,100646],{"class":60,"line":17542},[58,100647,100368],{"class":386},[58,100649,100650],{"class":60,"line":17547},[58,100651,100373],{"class":386},[58,100653,100654],{"class":60,"line":17552},[58,100655,100378],{"class":386},[58,100657,100658],{"class":60,"line":17557},[58,100659,100383],{"class":386},[58,100661,100662],{"class":60,"line":17570},[58,100663,100388],{"class":386},[58,100665,100666],{"class":60,"line":17575},[58,100667,100393],{"class":386},[58,100669,100670],{"class":60,"line":33277},[58,100671,100398],{"class":386},[58,100673,100674],{"class":60,"line":33283},[58,100675,100403],{"class":386},[58,100677,100678],{"class":60,"line":33289},[58,100679,100408],{"class":386},[58,100681,100682],{"class":60,"line":33295},[58,100683,100413],{"class":386},[58,100685,100686],{"class":60,"line":33301},[58,100687,100418],{"class":386},[58,100689,100690],{"class":60,"line":33312},[58,100691,94557],{"class":386},[58,100693,100694,100697,100699,100701,100703],{"class":60,"line":33318},[58,100695,100696],{"class":75},"np.vsplit(aa,[",[58,100698,867],{"class":82},[58,100700,1164],{"class":75},[58,100702,1105],{"class":82},[58,100704,5303],{"class":75},[58,100706,100707],{"class":60,"line":33338},[58,100708,94193],{"class":64},[58,100710,100711],{"class":60,"line":33344},[58,100712,94557],{"class":386},[58,100714,100715],{"class":60,"line":33355},[58,100716,100213],{"class":386},[58,100718,100719],{"class":60,"line":33361},[58,100720,100218],{"class":386},[58,100722,100723],{"class":60,"line":33367},[58,100724,100223],{"class":386},[58,100726,100727],{"class":60,"line":33373},[58,100728,100285],{"class":386},[58,100730,100731],{"class":60,"line":33379},[58,100732,100290],{"class":386},[58,100734,100735],{"class":60,"line":33385},[58,100736,100295],{"class":386},[58,100738,100739],{"class":60,"line":33391},[58,100740,100243],{"class":386},[702,100742,100743],{},"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":53,"searchDepth":68,"depth":68,"links":100745},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100011,"description":717},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100752,"title":100753,"body":100754,"description":717,"extension":718,"meta":101248,"navigation":720,"path":101249,"seo":101250,"stem":101251,"__hash__":101252},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100755,"toc":101239},[100756,100759,100762,100787,100791,100850,100902,100906,100908,100944,100998,101000,101038,101109,101113,101118,101122,101125,101158,101161,101165,101168,101171,101174,101177,101182,101186,101189,101192,101195,101198,101203,101207,101212,101215,101236],[10,100757,100753],{"id":100758},"_9数学函数",[175,100760,100761],{},"补充回顾：python的列表推导式",[48,100763,100765],{"className":31022,"code":100764,"language":31024,"meta":53,"style":53},"[1\u002Fi for i in a]\n",[55,100766,100767],{"__ignoreMap":53},[58,100768,100769,100771,100773,100775,100778,100780,100782,100784],{"class":60,"line":61},[58,100770,1675],{"class":75},[58,100772,89],{"class":82},[58,100774,1370],{"class":92},[58,100776,100777],{"class":75},"i ",[58,100779,3671],{"class":92},[58,100781,10083],{"class":75},[58,100783,26687],{"class":92},[58,100785,100786],{"class":75}," a]\n",[14,100788,100790],{"id":100789},"_91-求倒数","9.1 求倒数",[48,100792,100794],{"className":31022,"code":100793,"language":31024,"meta":53,"style":53},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[55,100795,100796,100801,100829,100841],{"__ignoreMap":53},[58,100797,100798],{"class":60,"line":61},[58,100799,100800],{"class":64},"#数组求倒数\n",[58,100802,100803,100805,100807,100809,100811,100813,100815,100817,100819,100821,100823,100825,100827],{"class":60,"line":68},[58,100804,376],{"class":75},[58,100806,383],{"class":92},[58,100808,1675],{"class":75},[58,100810,89],{"class":82},[58,100812,1164],{"class":75},[58,100814,867],{"class":82},[58,100816,1164],{"class":75},[58,100818,861],{"class":82},[58,100820,1164],{"class":75},[58,100822,1079],{"class":82},[58,100824,1164],{"class":75},[58,100826,1105],{"class":82},[58,100828,33890],{"class":75},[58,100830,100831,100833,100835,100838],{"class":60,"line":79},[58,100832,1049],{"class":75},[58,100834,383],{"class":92},[58,100836,100837],{"class":75},"np.array(a)",[58,100839,100840],{"class":64},"#将列表转换为数组\n",[58,100842,100843,100845,100847],{"class":60,"line":105},[58,100844,89],{"class":82},[58,100846,1370],{"class":92},[58,100848,100849],{"class":75},"b\n",[48,100851,100853],{"className":31022,"code":100852,"language":31024,"meta":53,"style":53},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[55,100854,100855,100883,100892,100897],{"__ignoreMap":53},[58,100856,100857,100859,100861,100863,100865,100867,100869,100871,100873,100875,100877,100879,100881],{"class":60,"line":61},[58,100858,376],{"class":75},[58,100860,383],{"class":92},[58,100862,1675],{"class":75},[58,100864,89],{"class":82},[58,100866,1164],{"class":75},[58,100868,867],{"class":82},[58,100870,1164],{"class":75},[58,100872,861],{"class":82},[58,100874,1164],{"class":75},[58,100876,1079],{"class":82},[58,100878,1164],{"class":75},[58,100880,1105],{"class":82},[58,100882,33890],{"class":75},[58,100884,100885,100887,100889],{"class":60,"line":68},[58,100886,1049],{"class":75},[58,100888,383],{"class":92},[58,100890,100891],{"class":75},"np.array(a)\n",[58,100893,100894],{"class":60,"line":79},[58,100895,100896],{"class":64},"#调用numpy中的函数reciprocal()\n",[58,100898,100899],{"class":60,"line":105},[58,100900,100901],{"class":75},"np.reciprocal(b)\n",[14,100903,100905],{"id":100904},"_92-求平方","9.2 求平方",[175,100907,95159],{},[48,100909,100911],{"className":31022,"code":100910,"language":31024,"meta":53,"style":53},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[55,100912,100913,100918,100923,100939],{"__ignoreMap":53},[58,100914,100915],{"class":60,"line":61},[58,100916,100917],{"class":64},"#square()，求平方\n",[58,100919,100920],{"class":60,"line":68},[58,100921,100922],{"class":64},"#一维数组\n",[58,100924,100925,100927,100929,100931,100933,100935,100937],{"class":60,"line":79},[58,100926,376],{"class":75},[58,100928,383],{"class":92},[58,100930,93631],{"class":75},[58,100932,89],{"class":82},[58,100934,1164],{"class":75},[58,100936,1232],{"class":82},[58,100938,799],{"class":75},[58,100940,100941],{"class":60,"line":105},[58,100942,100943],{"class":75},"np.square(a)\n",[48,100945,100947],{"className":31022,"code":100946,"language":31024,"meta":53,"style":53},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[55,100948,100949,100954,100959,100980],{"__ignoreMap":53},[58,100950,100951],{"class":60,"line":61},[58,100952,100953],{"class":64},"#或者通过循环遍历的形式来计算\n",[58,100955,100956],{"class":60,"line":68},[58,100957,100958],{"class":64},"#这是一个列表\n",[58,100960,100961,100964,100966,100968,100970,100972,100974,100977],{"class":60,"line":79},[58,100962,100963],{"class":75},"[i",[58,100965,1241],{"class":92},[58,100967,100777],{"class":75},[58,100969,3671],{"class":92},[58,100971,10083],{"class":75},[58,100973,26687],{"class":92},[58,100975,100976],{"class":75}," a]",[58,100978,100979],{"class":64},"#这个求完之后在数列当中\n",[58,100981,100982,100985,100987,100989,100991,100993,100995],{"class":60,"line":105},[58,100983,100984],{"class":75},"np.array([i",[58,100986,1241],{"class":92},[58,100988,100777],{"class":75},[58,100990,3671],{"class":92},[58,100992,10083],{"class":75},[58,100994,26687],{"class":92},[58,100996,100997],{"class":75}," a])\n",[175,100999,93920],{},[48,101001,101003],{"className":31022,"code":101002,"language":31024,"meta":53,"style":53},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[55,101004,101005,101009,101033],{"__ignoreMap":53},[58,101006,101007],{"class":60,"line":61},[58,101008,93930],{"class":64},[58,101010,101011,101013,101015,101017,101019,101021,101023,101025,101027,101029,101031],{"class":60,"line":68},[58,101012,93935],{"class":75},[58,101014,383],{"class":92},[58,101016,93631],{"class":75},[58,101018,89],{"class":82},[58,101020,1164],{"class":75},[58,101022,1309],{"class":82},[58,101024,93636],{"class":75},[58,101026,1079],{"class":82},[58,101028,1164],{"class":75},[58,101030,861],{"class":82},[58,101032,799],{"class":75},[58,101034,101035],{"class":60,"line":79},[58,101036,101037],{"class":75},"np.square(aa)\n",[48,101039,101041],{"className":31022,"code":101040,"language":31024,"meta":53,"style":53},"#传统的方式\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",[55,101042,101043,101048,101057,101073,101089,101104],{"__ignoreMap":53},[58,101044,101045],{"class":60,"line":61},[58,101046,101047],{"class":64},"#传统的方式\n",[58,101049,101050,101052,101054],{"class":60,"line":68},[58,101051,98816],{"class":75},[58,101053,383],{"class":92},[58,101055,101056],{"class":75},"np.empty_like(aa)\n",[58,101058,101059,101061,101063,101065,101067,101069,101071],{"class":60,"line":79},[58,101060,3671],{"class":92},[58,101062,10083],{"class":75},[58,101064,26687],{"class":92},[58,101066,33087],{"class":82},[58,101068,793],{"class":75},[58,101070,1079],{"class":82},[58,101072,31430],{"class":75},[58,101074,101075,101077,101079,101081,101083,101085,101087],{"class":60,"line":105},[58,101076,3847],{"class":92},[58,101078,10145],{"class":75},[58,101080,26687],{"class":92},[58,101082,33087],{"class":82},[58,101084,793],{"class":75},[58,101086,861],{"class":82},[58,101088,31430],{"class":75},[58,101090,101091,101094,101096,101099,101101],{"class":60,"line":627},[58,101092,101093],{"class":75},"        bb[i,j]",[58,101095,383],{"class":92},[58,101097,101098],{"class":75},"aa[i,j]",[58,101100,1241],{"class":92},[58,101102,101103],{"class":75},"aa[i,j]\n",[58,101105,101106],{"class":60,"line":509},[58,101107,101108],{"class":75},"bb\n",[14,101110,101112],{"id":101111},"_93-求各元素的符号","9.3 求各元素的符号",[175,101114,101115],{},[119,101116],{"alt":53,"src":101117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,101119,101121],{"id":101120},"_94-modf函数","9.4 modf函数",[175,101123,101124],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[48,101126,101128],{"className":31022,"code":101127,"language":31024,"meta":53,"style":53},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[55,101129,101130,101153],{"__ignoreMap":53},[58,101131,101132,101134,101136,101138,101140,101142,101144,101146,101148,101151],{"class":60,"line":61},[58,101133,376],{"class":75},[58,101135,383],{"class":92},[58,101137,93631],{"class":75},[58,101139,1318],{"class":92},[58,101141,1232],{"class":82},[58,101143,1164],{"class":75},[58,101145,1232],{"class":82},[58,101147,1164],{"class":75},[58,101149,101150],{"class":82},"0.3",[58,101152,799],{"class":75},[58,101154,101155],{"class":60,"line":68},[58,101156,101157],{"class":75},"np.modf(a)\n",[175,101159,101160],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,101162,101164],{"id":101163},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[175,101166,101167],{},"np.cell()",[175,101169,101170],{},"np.floor()",[175,101172,101173],{},"np.rint()",[175,101175,101176],{},"对各元素分别向上取整、向下取整、四舍五入",[175,101178,101179],{},[119,101180],{"alt":53,"src":101181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,101183,101185],{"id":101184},"_96-around函数","9.6 around()函数",[175,101187,101188],{},"around()函数也可以实现对数的小数位数进行操作",[175,101190,101191],{},"其中的参数：",[175,101193,101194],{},"1.要传的数组",[175,101196,101197],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[175,101199,101200],{},[119,101201],{"alt":53,"src":101202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,101204,101206],{"id":101205},"_97-三角函数","9.7 三角函数",[175,101208,101209],{},[119,101210],{"alt":53,"src":101211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[175,101213,101214],{},"引入图像模块非常重要",[48,101216,101218],{"className":31022,"code":101217,"language":31024,"meta":53,"style":53},"from matplotlib import pyplot as plt\n",[55,101219,101220],{"__ignoreMap":53},[58,101221,101222,101224,101227,101229,101232,101234],{"class":60,"line":61},[58,101223,31381],{"class":92},[58,101225,101226],{"class":75}," matplotlib ",[58,101228,31036],{"class":92},[58,101230,101231],{"class":75}," pyplot ",[58,101233,32027],{"class":92},[58,101235,32081],{"class":75},[702,101237,101238],{},"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":53,"searchDepth":68,"depth":68,"links":101240},[101241,101242,101243,101244,101245,101246,101247],{"id":100789,"depth":68,"text":100790},{"id":100904,"depth":68,"text":100905},{"id":101111,"depth":68,"text":101112},{"id":101120,"depth":68,"text":101121},{"id":101163,"depth":68,"text":101164},{"id":101184,"depth":68,"text":101185},{"id":101205,"depth":68,"text":101206},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100753,"description":717},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101254,"title":101255,"body":101256,"description":717,"extension":718,"meta":101260,"navigation":720,"path":101261,"seo":101262,"stem":101263,"__hash__":101264},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101257,"toc":101258},[],{"title":53,"searchDepth":68,"depth":68,"links":101259},[],{"category":51064},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101255,"description":717},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101266,"title":101267,"body":101268,"description":53,"extension":718,"meta":103276,"navigation":720,"path":103277,"seo":103278,"stem":103279,"__hash__":103280},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101269,"toc":103252},[101270,101273,101277,101280,101283,101289,101292,101315,101318,101352,101355,101396,101400,101403,101496,101499,101543,101546,101563,101566,101580,101583,101586,101631,101634,101671,101675,101678,101684,101689,101709,101713,101716,101782,101785,101803,101807,101810,101839,101849,101855,101859,101862,101868,101879,101883,101886,101916,101919,102199,102202,102205,102216,102219,102222,102244,102251,102254,102272,102275,102278,102292,102300,102303,102329,102335,102338,102341,102351,102363,102383,102392,102412,102422,102446,102459,102473,102478,102519,102536,102561,102573,102593,102599,102644,102663,102680,102693,102709,102716,102728,102737,102772,102793,102818,102831,102855,102870,102895,102898,102919,102928,102931,102942,102946,102949,102955,102967,102974,102978,102981,102993,102996,103010,103013,103023,103033,103036,103076,103079,103083,103089,103092,103106,103110,103113,103146,103150,103153,103176,103184,103187,103193,103199,103202,103205,103233,103237,103240,103246,103249],[10,101271,101267],{"id":101272},"_1环境安装与第一个-mujoco-程序",[14,101274,101276],{"id":101275},"_1目标说明","1.目标说明",[175,101278,101279],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[175,101281,101282],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[48,101284,101287],{"className":101285,"code":101286,"language":5833,"meta":53},[5831],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[55,101288,101286],{"__ignoreMap":53},[175,101290,101291],{},"需要掌握:",[19,101293,101294,101297,101300,101305,101310],{},[22,101295,101296],{},"Fedora 44 下 MuJoCo 的系统依赖",[22,101298,101299],{},"Python 虚拟环境创建",[22,101301,101302],{},[55,101303,101304],{},"mujoco.MjModel",[22,101306,101307],{},[55,101308,101309],{},"mujoco.MjData",[22,101311,101312],{},[55,101313,101314],{},"mujoco.mj_step(model, data)",[175,101316,101317],{},"MuJoCo 中最重要的两个对象:",[926,101319,101320,101330],{},[929,101321,101322],{},[932,101323,101324,101327],{},[935,101325,101326],{"align":24379},"对象",[935,101328,101329],{"align":24379},"含义",[972,101331,101332,101342],{},[932,101333,101334,101339],{},[977,101335,101336],{"align":24379},[55,101337,101338],{},"MjModel",[977,101340,101341],{"align":24379},"模型结构，来自 XML，基本不随时间变化",[932,101343,101344,101349],{},[977,101345,101346],{"align":24379},[55,101347,101348],{},"MjData",[977,101350,101351],{"align":24379},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[175,101353,101354],{},"可以先用一个类比理解：",[926,101356,101357,101367],{},[929,101358,101359],{},[932,101360,101361,101364],{},[935,101362,101363],{"align":24379},"类比",[935,101365,101366],{"align":24379},"MuJoCo 对象",[972,101368,101369,101378,101387],{},[932,101370,101371,101374],{},[977,101372,101373],{"align":24379},"游戏地图和角色配置",[977,101375,101376],{"align":24379},[55,101377,101338],{},[932,101379,101380,101383],{},[977,101381,101382],{"align":24379},"游戏运行到当前帧的状态",[977,101384,101385],{"align":24379},[55,101386,101348],{},[932,101388,101389,101392],{},[977,101390,101391],{"align":24379},"前进一帧",[977,101393,101394],{"align":24379},[55,101395,101314],{},[14,101397,101399],{"id":101398},"_2环境与依赖安装","2.环境与依赖安装",[175,101401,101402],{},"Fedora 44 系统依赖:",[48,101404,101406],{"className":24465,"code":101405,"language":24467,"meta":53,"style":53},"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",[55,101407,101408,101420,101433,101446,101456,101466,101485],{"__ignoreMap":53},[58,101409,101410,101412,101414,101416,101418],{"class":60,"line":61},[58,101411,25220],{"class":379},[58,101413,26959],{"class":386},[58,101415,24477],{"class":386},[58,101417,27044],{"class":82},[58,101419,25322],{"class":82},[58,101421,101422,101425,101428,101431],{"class":60,"line":68},[58,101423,101424],{"class":386},"  python3",[58,101426,101427],{"class":386}," python3-pip",[58,101429,101430],{"class":386}," python3-virtualenv",[58,101432,25322],{"class":82},[58,101434,101435,101438,101441,101444],{"class":60,"line":79},[58,101436,101437],{"class":386},"  mesa-libGL",[58,101439,101440],{"class":386}," mesa-libGLU",[58,101442,101443],{"class":386}," mesa-dri-drivers",[58,101445,25322],{"class":82},[58,101447,101448,101451,101454],{"class":60,"line":105},[58,101449,101450],{"class":386},"  libglvnd-glx",[58,101452,101453],{"class":386}," libglvnd-opengl",[58,101455,25322],{"class":82},[58,101457,101458,101461,101464],{"class":60,"line":627},[58,101459,101460],{"class":386},"  glfw",[58,101462,101463],{"class":386}," glfw-devel",[58,101465,25322],{"class":82},[58,101467,101468,101471,101474,101477,101480,101483],{"class":60,"line":509},[58,101469,101470],{"class":386},"  libX11",[58,101472,101473],{"class":386}," libXcursor",[58,101475,101476],{"class":386}," libXi",[58,101478,101479],{"class":386}," libXinerama",[58,101481,101482],{"class":386}," libXrandr",[58,101484,25322],{"class":82},[58,101486,101487,101490,101493],{"class":60,"line":559},[58,101488,101489],{"class":386},"  gcc",[58,101491,101492],{"class":386}," gcc-c++",[58,101494,101495],{"class":386}," make\n",[175,101497,101498],{},"创建 Python 环境:",[48,101500,101502],{"className":24465,"code":101501,"language":24467,"meta":53,"style":53},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[55,101503,101504,101518,101526],{"__ignoreMap":53},[58,101505,101506,101509,101512,101515],{"class":60,"line":61},[58,101507,101508],{"class":379},"python3",[58,101510,101511],{"class":82}," -m",[58,101513,101514],{"class":386}," venv",[58,101516,101517],{"class":386}," .venv\n",[58,101519,101520,101523],{"class":60,"line":68},[58,101521,101522],{"class":82},"source",[58,101524,101525],{"class":386}," .venv\u002Fbin\u002Factivate\n",[58,101527,101528,101530,101532,101535,101537,101540],{"class":60,"line":79},[58,101529,31024],{"class":379},[58,101531,101511],{"class":82},[58,101533,101534],{"class":386}," pip",[58,101536,24477],{"class":386},[58,101538,101539],{"class":82}," --upgrade",[58,101541,101542],{"class":386}," pip\n",[175,101544,101545],{},"pip 安装:",[48,101547,101549],{"className":24465,"code":101548,"language":24467,"meta":53,"style":53},"pip install \"mujoco>=2.3\" numpy\n",[55,101550,101551],{"__ignoreMap":53},[58,101552,101553,101555,101557,101560],{"class":60,"line":61},[58,101554,24474],{"class":379},[58,101556,24477],{"class":386},[58,101558,101559],{"class":386}," \"mujoco>=2.3\"",[58,101561,101562],{"class":386}," numpy\n",[175,101564,101565],{},"安装完成后，先做最小检查：",[48,101567,101569],{"className":24465,"code":101568,"language":24467,"meta":53,"style":53},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[55,101570,101571],{"__ignoreMap":53},[58,101572,101573,101575,101577],{"class":60,"line":61},[58,101574,31024],{"class":379},[58,101576,31002],{"class":82},[58,101578,101579],{"class":386}," \"import mujoco; print(mujoco.__version__)\"\n",[175,101581,101582],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[175,101584,101585],{},"conda 安装:",[48,101587,101589],{"className":24465,"code":101588,"language":24467,"meta":53,"style":53},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[55,101590,101591,101611,101621],{"__ignoreMap":53},[58,101592,101593,101595,101597,101599,101602,101605,101608],{"class":60,"line":61},[58,101594,30974],{"class":379},[58,101596,29820],{"class":386},[58,101598,25759],{"class":82},[58,101600,101601],{"class":386}," mujoco-study",[58,101603,101604],{"class":386}," python=",[58,101606,101607],{"class":82},"3.10",[58,101609,101610],{"class":82}," -y\n",[58,101612,101613,101615,101618],{"class":60,"line":68},[58,101614,30974],{"class":379},[58,101616,101617],{"class":386}," activate",[58,101619,101620],{"class":386}," mujoco-study\n",[58,101622,101623,101625,101627,101629],{"class":60,"line":79},[58,101624,24474],{"class":379},[58,101626,24477],{"class":386},[58,101628,101559],{"class":386},[58,101630,101562],{"class":386},[175,101632,101633],{},"版本冲突说明:",[19,101635,101636,101642,101652,101661],{},[22,101637,101638,101639,29029],{},"不要安装 ",[55,101640,101641],{},"mujoco-py",[22,101643,101644,101645,101647,101648,101651],{},"如果旧项目里同时安装了 ",[55,101646,101641],{}," 和 ",[55,101649,101650],{},"mujoco","，建议新建干净虚拟环境。",[22,101653,101654,101657,101658,29029],{},[55,101655,101656],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[55,101659,101660],{},"~\u002F.mujoco\u002Fmujoco210",[22,101662,101663,101664,83169,101667,101670],{},"离屏渲染可能涉及 OpenGL 后端，",[55,101665,101666],{},"MUJOCO_GL=egl",[55,101668,101669],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101672,101674],{"id":101673},"_3核心概念解释","3.核心概念解释",[175,101676,101677],{},"MuJoCo 的基本执行流程:",[48,101679,101682],{"className":101680,"code":101681,"language":5833,"meta":53},[5831],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[55,101683,101681],{"__ignoreMap":53},[175,101685,101686,101688],{},[55,101687,101338],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[175,101690,101691,101693,101694,1000,101697,1000,101700,1000,101703,1000,101706,29029],{},[55,101692,101348],{}," 存放仿真运行时状态，例如 ",[55,101695,101696],{},"data.time",[55,101698,101699],{},"data.qpos",[55,101701,101702],{},"data.qvel",[55,101704,101705],{},"data.ctrl",[55,101707,101708],{},"data.xpos",[114,101710,101712],{"id":101711},"xml-是什么","XML 是什么",[175,101714,101715],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[48,101717,101719],{"className":53705,"code":101718,"language":53707,"meta":53,"style":53},"\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",[55,101720,101721,101743,101774],{"__ignoreMap":53},[58,101722,101723,101725,101727,101729,101731,101733,101736,101738,101741],{"class":60,"line":61},[58,101724,373],{"class":75},[58,101726,52438],{"class":71},[58,101728,15564],{"class":379},[58,101730,383],{"class":75},[58,101732,54129],{"class":386},[58,101734,101735],{"class":379}," pos",[58,101737,383],{"class":75},[58,101739,101740],{"class":386},"\"0 0 1\"",[58,101742,403],{"class":75},[58,101744,101745,101747,101750,101752,101754,101757,101759,101761,101763,101766,101768,101771],{"class":60,"line":68},[58,101746,52782],{"class":75},[58,101748,101749],{"class":71},"geom",[58,101751,15564],{"class":379},[58,101753,383],{"class":75},[58,101755,101756],{"class":386},"\"box_geom\"",[58,101758,54460],{"class":379},[58,101760,383],{"class":75},[58,101762,54129],{"class":386},[58,101764,101765],{"class":379}," size",[58,101767,383],{"class":75},[58,101769,101770],{"class":386},"\"0.1 0.1 0.1\"",[58,101772,101773],{"class":75},"\u002F>\n",[58,101775,101776,101778,101780],{"class":60,"line":79},[58,101777,52423],{"class":75},[58,101779,52438],{"class":71},[58,101781,403],{"class":75},[175,101783,101784],{},"这段意思是：",[19,101786,101787,101793,101800],{},[22,101788,101789,101790,101792],{},"创建一个叫 ",[55,101791,298],{}," 的刚体。",[22,101794,101795,101796,101799],{},"它初始放在 ",[55,101797,101798],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[22,101801,101802],{},"它里面有一个盒子形状的几何体。",[114,101804,101806],{"id":101805},"timestep-是什么","timestep 是什么",[175,101808,101809],{},"XML 里的：",[48,101811,101813],{"className":53705,"code":101812,"language":53707,"meta":53,"style":53},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[55,101814,101815],{"__ignoreMap":53},[58,101816,101817,101819,101821,101824,101826,101829,101832,101834,101837],{"class":60,"line":61},[58,101818,373],{"class":75},[58,101820,69798],{"class":71},[58,101822,101823],{"class":379}," timestep",[58,101825,383],{"class":75},[58,101827,101828],{"class":386},"\"0.01\"",[58,101830,101831],{"class":379}," gravity",[58,101833,383],{"class":75},[58,101835,101836],{"class":386},"\"0 0 -9.81\"",[58,101838,101773],{"class":75},[175,101840,101841,101842,101845,101846,101848],{},"表示每调用一次 ",[55,101843,101844],{},"mj_step","，仿真时间前进 ",[55,101847,39630],{}," 秒。循环 100 次，大约就是 1 秒：",[48,101850,101853],{"className":101851,"code":101852,"language":5833,"meta":53},[5831],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[55,101854,101852],{"__ignoreMap":53},[114,101856,101858],{"id":101857},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[175,101860,101861],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[48,101863,101866],{"className":101864,"code":101865,"language":5833,"meta":53},[5831],"x y z qw qx qy qz\n",[55,101867,101865],{"__ignoreMap":53},[175,101869,101870,101871,101874,101875,101878],{},"表示一个自由刚体的位置和姿态。其中 ",[55,101872,101873],{},"x y z"," 是位置，",[55,101876,101877],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,101880,101882],{"id":101881},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[175,101884,101885],{},"新建文件:",[48,101887,101889],{"className":24465,"code":101888,"language":24467,"meta":53,"style":53},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[55,101890,101891,101901,101908],{"__ignoreMap":53},[58,101892,101893,101896,101898],{"class":60,"line":61},[58,101894,101895],{"class":379},"mkdir",[58,101897,29860],{"class":82},[58,101899,101900],{"class":386}," mujoco_tutorial\n",[58,101902,101903,101906],{"class":60,"line":68},[58,101904,101905],{"class":82},"cd",[58,101907,101900],{"class":386},[58,101909,101910,101913],{"class":60,"line":79},[58,101911,101912],{"class":379},"touch",[58,101914,101915],{"class":386}," ch1_first_sim.py\n",[175,101917,101918],{},"写入:",[48,101920,101922],{"className":31022,"code":101921,"language":31024,"meta":53,"style":53},"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",[55,101923,101924,101931,101935,101939,101949,101954,101959,101963,101968,101973,101977,101982,101987,101992,101997,102002,102007,102011,102015,102019,102032,102046,102056,102060,102072,102084,102096,102108,102120,102124,102141,102146,102150,102161,102172,102176,102180,102194],{"__ignoreMap":53},[58,101925,101926,101928],{"class":60,"line":61},[58,101927,31036],{"class":92},[58,101929,101930],{"class":75}," mujoco\n",[58,101932,101933],{"class":60,"line":68},[58,101934,3046],{"emptyLinePlaceholder":720},[58,101936,101937],{"class":60,"line":79},[58,101938,3046],{"emptyLinePlaceholder":720},[58,101940,101941,101944,101946],{"class":60,"line":105},[58,101942,101943],{"class":82},"XML",[58,101945,14208],{"class":92},[58,101947,101948],{"class":386}," \"\"\"\n",[58,101950,101951],{"class":60,"line":627},[58,101952,101953],{"class":386},"\u003Cmujoco model=\"first_sim\">\n",[58,101955,101956],{"class":60,"line":509},[58,101957,101958],{"class":386},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[58,101960,101961],{"class":60,"line":559},[58,101962,3046],{"emptyLinePlaceholder":720},[58,101964,101965],{"class":60,"line":654},[58,101966,101967],{"class":386},"  \u003Cworldbody>\n",[58,101969,101970],{"class":60,"line":671},[58,101971,101972],{"class":386},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[58,101974,101975],{"class":60,"line":677},[58,101976,3046],{"emptyLinePlaceholder":720},[58,101978,101979],{"class":60,"line":2260},[58,101980,101981],{"class":386},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[58,101983,101984],{"class":60,"line":694},[58,101985,101986],{"class":386},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[58,101988,101989],{"class":60,"line":2270},[58,101990,101991],{"class":386},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[58,101993,101994],{"class":60,"line":2275},[58,101995,101996],{"class":386},"    \u003C\u002Fbody>\n",[58,101998,101999],{"class":60,"line":2289},[58,102000,102001],{"class":386},"  \u003C\u002Fworldbody>\n",[58,102003,102004],{"class":60,"line":2294},[58,102005,102006],{"class":386},"\u003C\u002Fmujoco>\n",[58,102008,102009],{"class":60,"line":2300},[58,102010,96327],{"class":386},[58,102012,102013],{"class":60,"line":2321},[58,102014,3046],{"emptyLinePlaceholder":720},[58,102016,102017],{"class":60,"line":2326},[58,102018,3046],{"emptyLinePlaceholder":720},[58,102020,102021,102023,102025,102028,102030],{"class":60,"line":2340},[58,102022,32591],{"class":92},[58,102024,2619],{"class":379},[58,102026,102027],{"class":75},"() -> ",[58,102029,96315],{"class":82},[58,102031,4385],{"class":75},[58,102033,102034,102037,102039,102042,102044],{"class":60,"line":2345},[58,102035,102036],{"class":75},"    model ",[58,102038,383],{"class":92},[58,102040,102041],{"class":75}," mujoco.MjModel.from_xml_string(",[58,102043,101943],{"class":82},[58,102045,799],{"class":75},[58,102047,102048,102051,102053],{"class":60,"line":2374},[58,102049,102050],{"class":75},"    data ",[58,102052,383],{"class":92},[58,102054,102055],{"class":75}," mujoco.MjData(model)\n",[58,102057,102058],{"class":60,"line":2379},[58,102059,3046],{"emptyLinePlaceholder":720},[58,102061,102062,102064,102066,102069],{"class":60,"line":2396},[58,102063,31943],{"class":82},[58,102065,793],{"class":75},[58,102067,102068],{"class":386},"\"nq:\"",[58,102070,102071],{"class":75},", model.nq)\n",[58,102073,102074,102076,102078,102081],{"class":60,"line":2401},[58,102075,31943],{"class":82},[58,102077,793],{"class":75},[58,102079,102080],{"class":386},"\"nv:\"",[58,102082,102083],{"class":75},", model.nv)\n",[58,102085,102086,102088,102090,102093],{"class":60,"line":2406},[58,102087,31943],{"class":82},[58,102089,793],{"class":75},[58,102091,102092],{"class":386},"\"nu:\"",[58,102094,102095],{"class":75},", model.nu)\n",[58,102097,102098,102100,102102,102105],{"class":60,"line":2411},[58,102099,31943],{"class":82},[58,102101,793],{"class":75},[58,102103,102104],{"class":386},"\"initial time:\"",[58,102106,102107],{"class":75},", data.time)\n",[58,102109,102110,102112,102114,102117],{"class":60,"line":2425},[58,102111,31943],{"class":82},[58,102113,793],{"class":75},[58,102115,102116],{"class":386},"\"initial qpos:\"",[58,102118,102119],{"class":75},", data.qpos.copy())\n",[58,102121,102122],{"class":60,"line":2430},[58,102123,3046],{"emptyLinePlaceholder":720},[58,102125,102126,102128,102131,102133,102135,102137,102139],{"class":60,"line":3223},[58,102127,3847],{"class":92},[58,102129,102130],{"class":75}," _ ",[58,102132,26687],{"class":92},[58,102134,33087],{"class":82},[58,102136,793],{"class":75},[58,102138,1097],{"class":82},[58,102140,31430],{"class":75},[58,102142,102143],{"class":60,"line":3237},[58,102144,102145],{"class":75},"        mujoco.mj_step(model, data)\n",[58,102147,102148],{"class":60,"line":3245},[58,102149,3046],{"emptyLinePlaceholder":720},[58,102151,102152,102154,102156,102159],{"class":60,"line":3250},[58,102153,31943],{"class":82},[58,102155,793],{"class":75},[58,102157,102158],{"class":386},"\"final time:\"",[58,102160,102107],{"class":75},[58,102162,102163,102165,102167,102170],{"class":60,"line":3256},[58,102164,31943],{"class":82},[58,102166,793],{"class":75},[58,102168,102169],{"class":386},"\"final qpos:\"",[58,102171,102119],{"class":75},[58,102173,102174],{"class":60,"line":3262},[58,102175,3046],{"emptyLinePlaceholder":720},[58,102177,102178],{"class":60,"line":3267},[58,102179,3046],{"emptyLinePlaceholder":720},[58,102181,102182,102184,102186,102189,102192],{"class":60,"line":8594},[58,102183,2180],{"class":92},[58,102185,31864],{"class":82},[58,102187,102188],{"class":92}," ==",[58,102190,102191],{"class":386}," \"__main__\"",[58,102193,4385],{"class":75},[58,102195,102196],{"class":60,"line":8618},[58,102197,102198],{"class":75},"    main()\n",[114,102200,102201],{"id":102201},"代码逐段解释",[175,102203,102204],{},"导入库：",[48,102206,102208],{"className":31022,"code":102207,"language":31024,"meta":53,"style":53},"import mujoco\n",[55,102209,102210],{"__ignoreMap":53},[58,102211,102212,102214],{"class":60,"line":61},[58,102213,31036],{"class":92},[58,102215,101930],{"class":75},[175,102217,102218],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[175,102220,102221],{},"定义 XML：",[48,102223,102225],{"className":31022,"code":102224,"language":31024,"meta":53,"style":53},"XML = \"\"\"\n...\n\"\"\"\n",[55,102226,102227,102235,102240],{"__ignoreMap":53},[58,102228,102229,102231,102233],{"class":60,"line":61},[58,102230,101943],{"class":82},[58,102232,14208],{"class":92},[58,102234,101948],{"class":386},[58,102236,102237],{"class":60,"line":68},[58,102238,102239],{"class":386},"...\n",[58,102241,102242],{"class":60,"line":79},[58,102243,96327],{"class":386},[175,102245,102246,102247,102250],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[55,102248,102249],{},"freejoint"," 的方块。",[175,102252,102253],{},"编译模型：",[48,102255,102257],{"className":31022,"code":102256,"language":31024,"meta":53,"style":53},"model = mujoco.MjModel.from_xml_string(XML)\n",[55,102258,102259],{"__ignoreMap":53},[58,102260,102261,102264,102266,102268,102270],{"class":60,"line":61},[58,102262,102263],{"class":75},"model ",[58,102265,383],{"class":92},[58,102267,102041],{"class":75},[58,102269,101943],{"class":82},[58,102271,799],{"class":75},[175,102273,102274],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[175,102276,102277],{},"创建数据：",[48,102279,102281],{"className":31022,"code":102280,"language":31024,"meta":53,"style":53},"data = mujoco.MjData(model)\n",[55,102282,102283],{"__ignoreMap":53},[58,102284,102285,102288,102290],{"class":60,"line":61},[58,102286,102287],{"class":75},"data ",[58,102289,383],{"class":92},[58,102291,102055],{"class":75},[175,102293,102294,102296,102297,102299],{},[55,102295,34045],{}," 会保存仿真当前状态。刚创建时，时间是 ",[55,102298,979],{},"，方块还在初始位置。",[175,102301,102302],{},"推进仿真：",[48,102304,102306],{"className":31022,"code":102305,"language":31024,"meta":53,"style":53},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[55,102307,102308,102324],{"__ignoreMap":53},[58,102309,102310,102312,102314,102316,102318,102320,102322],{"class":60,"line":61},[58,102311,3671],{"class":92},[58,102313,102130],{"class":75},[58,102315,26687],{"class":92},[58,102317,33087],{"class":82},[58,102319,793],{"class":75},[58,102321,1097],{"class":82},[58,102323,31430],{"class":75},[58,102325,102326],{"class":60,"line":68},[58,102327,102328],{"class":75},"    mujoco.mj_step(model, data)\n",[175,102330,102331,102332,102334],{},"每次 ",[55,102333,101844],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[114,102336,102337],{"id":102337},"代码逐行细讲",[175,102339,102340],{},"下面把完整代码按新手视角拆开讲。",[48,102342,102343],{"className":31022,"code":102207,"language":31024,"meta":53,"style":53},[55,102344,102345],{"__ignoreMap":53},[58,102346,102347,102349],{"class":60,"line":61},[58,102348,31036],{"class":92},[58,102350,101930],{"class":75},[175,102352,102353,102355,102356,1000,102358,1000,102360,29029],{},[55,102354,31036],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[55,102357,101304],{},[55,102359,101309],{},[55,102361,102362],{},"mujoco.mj_step",[48,102364,102365],{"className":31022,"code":102224,"language":31024,"meta":53,"style":53},[55,102366,102367,102375,102379],{"__ignoreMap":53},[58,102368,102369,102371,102373],{"class":60,"line":61},[58,102370,101943],{"class":82},[58,102372,14208],{"class":92},[58,102374,101948],{"class":386},[58,102376,102377],{"class":60,"line":68},[58,102378,102239],{"class":386},[58,102380,102381],{"class":60,"line":79},[58,102382,96327],{"class":386},[175,102384,102385,102387,102388,102391],{},[55,102386,101943],{}," 是一个变量名。右边的三引号 ",[55,102389,102390],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[48,102393,102394],{"className":53705,"code":101953,"language":53707,"meta":53,"style":53},[55,102395,102396],{"__ignoreMap":53},[58,102397,102398,102400,102402,102405,102407,102410],{"class":60,"line":61},[58,102399,373],{"class":75},[58,102401,101650],{"class":71},[58,102403,102404],{"class":379}," model",[58,102406,383],{"class":75},[58,102408,102409],{"class":386},"\"first_sim\"",[58,102411,403],{"class":75},[175,102413,102414,102415,102418,102419,29029],{},"这是 XML 的根标签。",[55,102416,102417],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[55,102420,102421],{},"first_sim",[48,102423,102424],{"className":53705,"code":101812,"language":53707,"meta":53,"style":53},[55,102425,102426],{"__ignoreMap":53},[58,102427,102428,102430,102432,102434,102436,102438,102440,102442,102444],{"class":60,"line":61},[58,102429,373],{"class":75},[58,102431,69798],{"class":71},[58,102433,101823],{"class":379},[58,102435,383],{"class":75},[58,102437,101828],{"class":386},[58,102439,101831],{"class":379},[58,102441,383],{"class":75},[58,102443,101836],{"class":386},[58,102445,101773],{"class":75},[175,102447,102448,102450,102451,102454,102455,102458],{},[55,102449,69798],{}," 用来设置仿真参数。",[55,102452,102453],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[55,102456,102457],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[48,102460,102462],{"className":53705,"code":102461,"language":53707,"meta":53,"style":53},"\u003Cworldbody>\n",[55,102463,102464],{"__ignoreMap":53},[58,102465,102466,102468,102471],{"class":60,"line":61},[58,102467,373],{"class":75},[58,102469,102470],{"class":71},"worldbody",[58,102472,403],{"class":75},[175,102474,102475,102477],{},[55,102476,102470],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[48,102479,102481],{"className":53705,"code":102480,"language":53707,"meta":53,"style":53},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[55,102482,102483],{"__ignoreMap":53},[58,102484,102485,102487,102489,102491,102493,102496,102498,102500,102503,102505,102507,102510,102512,102514,102517],{"class":60,"line":61},[58,102486,373],{"class":75},[58,102488,101749],{"class":71},[58,102490,15564],{"class":379},[58,102492,383],{"class":75},[58,102494,102495],{"class":386},"\"floor\"",[58,102497,54460],{"class":379},[58,102499,383],{"class":75},[58,102501,102502],{"class":386},"\"plane\"",[58,102504,101765],{"class":379},[58,102506,383],{"class":75},[58,102508,102509],{"class":386},"\"2 2 0.1\"",[58,102511,79398],{"class":379},[58,102513,383],{"class":75},[58,102515,102516],{"class":386},"\"0.8 0.8 0.8 1\"",[58,102518,101773],{"class":75},[175,102520,102521,102522,102524,102525,102528,102529,102532,102533,102535],{},"这行创建地面。",[55,102523,101749],{}," 是几何体。",[55,102526,102527],{},"name=\"floor\""," 是名字。",[55,102530,102531],{},"type=\"plane\""," 表示平面。",[55,102534,55744],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[48,102537,102539],{"className":53705,"code":102538,"language":53707,"meta":53,"style":53},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[55,102540,102541],{"__ignoreMap":53},[58,102542,102543,102545,102547,102549,102551,102553,102555,102557,102559],{"class":60,"line":61},[58,102544,373],{"class":75},[58,102546,52438],{"class":71},[58,102548,15564],{"class":379},[58,102550,383],{"class":75},[58,102552,54129],{"class":386},[58,102554,101735],{"class":379},[58,102556,383],{"class":75},[58,102558,101740],{"class":386},[58,102560,403],{"class":75},[175,102562,102563,102564,29029,102566,102569,102570,102572],{},"这行创建一个刚体，名字叫 ",[55,102565,298],{},[55,102567,102568],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[55,102571,101798],{},"，也就是离地面 1 米高。",[48,102574,102576],{"className":53705,"code":102575,"language":53707,"meta":53,"style":53},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[55,102577,102578],{"__ignoreMap":53},[58,102579,102580,102582,102584,102586,102588,102591],{"class":60,"line":61},[58,102581,373],{"class":75},[58,102583,102249],{"class":71},[58,102585,15564],{"class":379},[58,102587,383],{"class":75},[58,102589,102590],{"class":386},"\"box_free\"",[58,102592,101773],{"class":75},[175,102594,102595,102596,102598],{},"这行很重要。",[55,102597,102249],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[48,102600,102602],{"className":53705,"code":102601,"language":53707,"meta":53,"style":53},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[55,102603,102604],{"__ignoreMap":53},[58,102605,102606,102608,102610,102612,102614,102616,102618,102620,102622,102624,102626,102628,102631,102633,102635,102637,102639,102642],{"class":60,"line":61},[58,102607,373],{"class":75},[58,102609,101749],{"class":71},[58,102611,15564],{"class":379},[58,102613,383],{"class":75},[58,102615,101756],{"class":386},[58,102617,54460],{"class":379},[58,102619,383],{"class":75},[58,102621,54129],{"class":386},[58,102623,101765],{"class":379},[58,102625,383],{"class":75},[58,102627,101770],{"class":386},[58,102629,102630],{"class":379}," mass",[58,102632,383],{"class":75},[58,102634,4324],{"class":386},[58,102636,79398],{"class":379},[58,102638,383],{"class":75},[58,102640,102641],{"class":386},"\"1 0 0 1\"",[58,102643,101773],{"class":75},[175,102645,102646,102647,102650,102651,102654,102655,102658,102659,102662],{},"这行给 box body 添加一个盒子形状。",[55,102648,102649],{},"type=\"box\""," 表示形状是盒子。",[55,102652,102653],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[55,102656,102657],{},"mass=\"1\""," 表示质量是 1。",[55,102660,102661],{},"rgba=\"1 0 0 1\""," 表示红色。",[48,102664,102666],{"className":31022,"code":102665,"language":31024,"meta":53,"style":53},"def main() -> None:\n",[55,102667,102668],{"__ignoreMap":53},[58,102669,102670,102672,102674,102676,102678],{"class":60,"line":61},[58,102671,32591],{"class":92},[58,102673,2619],{"class":379},[58,102675,102027],{"class":75},[58,102677,96315],{"class":82},[58,102679,4385],{"class":75},[175,102681,102682,102684,102685,102688,102689,102692],{},[55,102683,32591],{}," 用来定义函数。这里定义了一个叫 ",[55,102686,102687],{},"main"," 的函数。",[55,102690,102691],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[48,102694,102695],{"className":31022,"code":102256,"language":31024,"meta":53,"style":53},[55,102696,102697],{"__ignoreMap":53},[58,102698,102699,102701,102703,102705,102707],{"class":60,"line":61},[58,102700,102263],{"class":75},[58,102702,383],{"class":92},[58,102704,102041],{"class":75},[58,102706,101943],{"class":82},[58,102708,799],{"class":75},[175,102710,102711,102712,102715],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[55,102713,102714],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[48,102717,102718],{"className":31022,"code":102280,"language":31024,"meta":53,"style":53},[55,102719,102720],{"__ignoreMap":53},[58,102721,102722,102724,102726],{"class":60,"line":61},[58,102723,102287],{"class":75},[58,102725,383],{"class":92},[58,102727,102055],{"class":75},[175,102729,102730,102731,102733,102734,102736],{},"这行创建仿真数据。",[55,102732,34045],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[55,102735,34045],{}," 都会变化。",[48,102738,102740],{"className":31022,"code":102739,"language":31024,"meta":53,"style":53},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[55,102741,102742,102752,102762],{"__ignoreMap":53},[58,102743,102744,102746,102748,102750],{"class":60,"line":61},[58,102745,31059],{"class":82},[58,102747,793],{"class":75},[58,102749,102068],{"class":386},[58,102751,102071],{"class":75},[58,102753,102754,102756,102758,102760],{"class":60,"line":68},[58,102755,31059],{"class":82},[58,102757,793],{"class":75},[58,102759,102080],{"class":386},[58,102761,102083],{"class":75},[58,102763,102764,102766,102768,102770],{"class":60,"line":79},[58,102765,31059],{"class":82},[58,102767,793],{"class":75},[58,102769,102092],{"class":386},[58,102771,102095],{"class":75},[175,102773,102774,102776,102777,102780,102781,102784,102785,102788,102789,102792],{},[55,102775,31059],{}," 用来输出信息。",[55,102778,102779],{},"model.nq"," 是位置变量数量，",[55,102782,102783],{},"model.nv"," 是速度变量数量，",[55,102786,102787],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[55,102790,102791],{},"nu"," 是 0。",[48,102794,102796],{"className":31022,"code":102795,"language":31024,"meta":53,"style":53},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[55,102797,102798,102808],{"__ignoreMap":53},[58,102799,102800,102802,102804,102806],{"class":60,"line":61},[58,102801,31059],{"class":82},[58,102803,793],{"class":75},[58,102805,102104],{"class":386},[58,102807,102107],{"class":75},[58,102809,102810,102812,102814,102816],{"class":60,"line":68},[58,102811,31059],{"class":82},[58,102813,793],{"class":75},[58,102815,102116],{"class":386},[58,102817,102119],{"class":75},[175,102819,102820,102821,102823,102824,102826,102827,102830],{},"这里打印初始时间和初始位置。",[55,102822,101696],{}," 一开始是 0。",[55,102825,101699],{}," 是位置数组。",[55,102828,102829],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[48,102832,102833],{"className":31022,"code":102305,"language":31024,"meta":53,"style":53},[55,102834,102835,102851],{"__ignoreMap":53},[58,102836,102837,102839,102841,102843,102845,102847,102849],{"class":60,"line":61},[58,102838,3671],{"class":92},[58,102840,102130],{"class":75},[58,102842,26687],{"class":92},[58,102844,33087],{"class":82},[58,102846,793],{"class":75},[58,102848,1097],{"class":82},[58,102850,31430],{"class":75},[58,102852,102853],{"class":60,"line":68},[58,102854,102328],{"class":75},[175,102856,102857,102859,102860,102863,102864,102866,102867,102869],{},[55,102858,3671],{}," 是循环。",[55,102861,102862],{},"range(100)"," 表示循环 100 次。",[55,102865,1776],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[55,102868,101844],{},"，仿真就前进一步。",[48,102871,102873],{"className":31022,"code":102872,"language":31024,"meta":53,"style":53},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[55,102874,102875,102885],{"__ignoreMap":53},[58,102876,102877,102879,102881,102883],{"class":60,"line":61},[58,102878,31059],{"class":82},[58,102880,793],{"class":75},[58,102882,102158],{"class":386},[58,102884,102107],{"class":75},[58,102886,102887,102889,102891,102893],{"class":60,"line":68},[58,102888,31059],{"class":82},[58,102890,793],{"class":75},[58,102892,102169],{"class":386},[58,102894,102119],{"class":75},[175,102896,102897],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[48,102899,102901],{"className":31022,"code":102900,"language":31024,"meta":53,"style":53},"if __name__ == \"__main__\":\n    main()\n",[55,102902,102903,102915],{"__ignoreMap":53},[58,102904,102905,102907,102909,102911,102913],{"class":60,"line":61},[58,102906,2180],{"class":92},[58,102908,31864],{"class":82},[58,102910,102188],{"class":92},[58,102912,102191],{"class":386},[58,102914,4385],{"class":75},[58,102916,102917],{"class":60,"line":68},[58,102918,102198],{"class":75},[175,102920,102921,102922,102925,102926,29029],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[55,102923,102924],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[55,102927,102924],{},[175,102929,102930],{},"运行:",[48,102932,102934],{"className":24465,"code":102933,"language":24467,"meta":53,"style":53},"python ch1_first_sim.py\n",[55,102935,102936],{"__ignoreMap":53},[58,102937,102938,102940],{"class":60,"line":61},[58,102939,31024],{"class":379},[58,102941,101915],{"class":386},[14,102943,102945],{"id":102944},"_5运行结果说明","5.运行结果说明",[175,102947,102948],{},"你应该看到类似输出:",[48,102950,102953],{"className":102951,"code":102952,"language":5833,"meta":53},[5831],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[55,102954,102952],{"__ignoreMap":53},[175,102956,102957,102959,102960,102963,102964,29029],{},[55,102958,102249],{}," 有 7 个位置变量: ",[55,102961,102962],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[55,102965,102966],{},"vx vy vz wx wy wz",[175,102968,102969,102970,102973],{},"你还会看到 ",[55,102971,102972],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,102975,102977],{"id":102976},"_6验证步骤","6.验证步骤",[175,102979,102980],{},"确认版本:",[48,102982,102983],{"className":24465,"code":101568,"language":24467,"meta":53,"style":53},[55,102984,102985],{"__ignoreMap":53},[58,102986,102987,102989,102991],{"class":60,"line":61},[58,102988,31024],{"class":379},[58,102990,31002],{"class":82},[58,102992,101579],{"class":386},[175,102994,102995],{},"确认导入的是官方 bindings:",[48,102997,102999],{"className":24465,"code":102998,"language":24467,"meta":53,"style":53},"python -c \"import mujoco; print(mujoco)\"\n",[55,103000,103001],{"__ignoreMap":53},[58,103002,103003,103005,103007],{"class":60,"line":61},[58,103004,31024],{"class":379},[58,103006,31002],{"class":82},[58,103008,103009],{"class":386}," \"import mujoco; print(mujoco)\"\n",[175,103011,103012],{},"运行程序:",[48,103014,103015],{"className":24465,"code":102933,"language":24467,"meta":53,"style":53},[55,103016,103017],{"__ignoreMap":53},[58,103018,103019,103021],{"class":60,"line":61},[58,103020,31024],{"class":379},[58,103022,101915],{"class":386},[175,103024,103025,103026,103029,103030,29029],{},"检查 ",[55,103027,103028],{},"final time"," 是否约等于 ",[55,103031,103032],{},"1.0",[175,103034,103035],{},"再做几个小实验：",[19,103037,103038,103048,103056,103069],{},[22,103039,103040,103041,103043,103044,103047],{},"把 ",[55,103042,102568],{}," 改成 ",[55,103045,103046],{},"pos=\"0 0 2\"","，观察初始高度变化。",[22,103049,103040,103050,103043,103052,103055],{},[55,103051,102457],{},[55,103053,103054],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[22,103057,103040,103058,103043,103060,103063,103064,103066,103067,29029],{},[55,103059,102453],{},[55,103061,103062],{},"timestep=\"0.005\"","，观察 100 步后的 ",[55,103065,103028],{}," 是否变成约 ",[55,103068,35973],{},[22,103070,103071,103072,103075],{},"删除 ",[55,103073,103074],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[175,103077,103078],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,103080,103082],{"id":103081},"_7常见错误与解决方案","7.常见错误与解决方案",[114,103084,103086],{"id":103085},"modulenotfounderror-no-module-named-mujoco",[55,103087,103088],{},"ModuleNotFoundError: No module named 'mujoco'",[175,103090,103091],{},"解决:",[48,103093,103095],{"className":24465,"code":103094,"language":24467,"meta":53,"style":53},"pip install \"mujoco>=2.3\"\n",[55,103096,103097],{"__ignoreMap":53},[58,103098,103099,103101,103103],{"class":60,"line":61},[58,103100,24474],{"class":379},[58,103102,24477],{"class":386},[58,103104,103105],{"class":386}," \"mujoco>=2.3\"\n",[114,103107,103109],{"id":103108},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[175,103111,103112],{},"先安装系统依赖:",[48,103114,103116],{"className":24465,"code":103115,"language":24467,"meta":53,"style":53},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[55,103117,103118],{"__ignoreMap":53},[58,103119,103120,103122,103124,103126,103128,103131,103133,103136,103138,103141,103143],{"class":60,"line":61},[58,103121,25220],{"class":379},[58,103123,26959],{"class":386},[58,103125,24477],{"class":386},[58,103127,27044],{"class":82},[58,103129,103130],{"class":386}," mesa-libGL",[58,103132,101443],{"class":386},[58,103134,103135],{"class":386}," glfw",[58,103137,101463],{"class":386},[58,103139,103140],{"class":386}," libX11",[58,103142,101476],{"class":386},[58,103144,103145],{"class":386}," libXrandr\n",[114,103147,103149],{"id":103148},"xml-解析失败","XML 解析失败",[175,103151,103152],{},"检查:",[19,103154,103155,103158,103161,103167],{},[22,103156,103157],{},"标签是否闭合",[22,103159,103160],{},"属性是否带引号",[22,103162,103163,103164],{},"根节点是否是 ",[55,103165,103166],{},"\u003Cmujoco>",[22,103168,103169,103171,103172,103175],{},[55,103170,52438],{}," 是否放在 ",[55,103173,103174],{},"\u003Cworldbody>"," 内部",[114,103177,103179,103181,103182],{"id":103178},"final-time-不是严格等于-10",[55,103180,103028],{}," 不是严格等于 ",[55,103183,103032],{},[175,103185,103186],{},"这通常不是错误。浮点数计算可能得到：",[48,103188,103191],{"className":103189,"code":103190,"language":5833,"meta":53},[5831],"1.0000000000000007\n",[55,103192,103190],{"__ignoreMap":53},[175,103194,103195,103196,103198],{},"只要接近 ",[55,103197,103032],{}," 就正常。",[114,103200,103201],{"id":103201},"方块没有掉下来",[175,103203,103204],{},"检查：",[19,103206,103207,103213,103219,103224],{},[22,103208,103209,103210],{},"方块 body 里是否有 ",[55,103211,103212],{},"\u003Cfreejoint\u002F>",[22,103214,103215,103216],{},"重力是否是 ",[55,103217,103218],{},"0 0 -9.81",[22,103220,103221,103222],{},"是否真的调用了 ",[55,103223,101314],{},[22,103225,103226,103227,103229,103230],{},"你看的是否是 ",[55,103228,102972],{},"，不是 ",[55,103231,103232],{},"initial qpos",[14,103234,103236],{"id":103235},"_8本章小结","8.本章小结",[175,103238,103239],{},"本章你已经完成了 MuJoCo 的最小闭环：",[48,103241,103244],{"className":103242,"code":103243,"language":5833,"meta":53},[5831],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[55,103245,103243],{"__ignoreMap":53},[175,103247,103248],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[702,103250,103251],{},"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":53,"searchDepth":68,"depth":68,"links":103253},[103254,103255,103256,103261,103265,103266,103267,103275],{"id":101275,"depth":68,"text":101276},{"id":101398,"depth":68,"text":101399},{"id":101673,"depth":68,"text":101674,"children":103257},[103258,103259,103260],{"id":101711,"depth":79,"text":101712},{"id":101805,"depth":79,"text":101806},{"id":101857,"depth":79,"text":101858},{"id":101881,"depth":68,"text":101882,"children":103262},[103263,103264],{"id":102201,"depth":79,"text":102201},{"id":102337,"depth":79,"text":102337},{"id":102944,"depth":68,"text":102945},{"id":102976,"depth":68,"text":102977},{"id":103081,"depth":68,"text":103082,"children":103268},[103269,103270,103271,103272,103274],{"id":103085,"depth":79,"text":103088},{"id":103108,"depth":79,"text":103109},{"id":103148,"depth":79,"text":103149},{"id":103178,"depth":79,"text":103273},"final time 不是严格等于 1.0",{"id":103201,"depth":79,"text":103201},{"id":103235,"depth":68,"text":103236},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101267,"description":53},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103282,"title":103283,"body":103284,"description":53,"extension":718,"meta":104940,"navigation":720,"path":104941,"seo":104942,"stem":104943,"__hash__":104944},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103285,"toc":104916},[103286,103289,103291,103294,103297,103314,103409,103412,103418,103420,103422,103446,103449,103463,103466,103507,103509,103522,103524,103527,103575,103587,103590,103593,103599,103612,103679,103682,103701,103704,103707,103713,103715,103724,103727,103731,103740,103822,103831,103835,103841,103855,103865,103867,104197,104200,104212,104214,104225,104227,104230,104248,104251,104254,104272,104283,104286,104301,104311,104313,104334,104351,104371,104377,104417,104433,104449,104455,104458,104482,104498,104503,104533,104550,104575,104578,104593,104602,104617,104626,104641,104648,104650,104660,104673,104680,104683,104722,104729,104731,104783,104785,104791,104794,104801,104808,104811,104813,104831,104834,104837,104871,104883,104885,104888,104910,104913],[10,103287,103283],{"id":103288},"_2xml-与-mjcf-物理建模基础",[14,103290,101276],{"id":101275},[175,103292,103293],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[175,103295,103296],{},"本章结束后，你应该能看懂一个简单模型里：",[19,103298,103299,103302,103305,103308,103311],{},[22,103300,103301],{},"地面在哪里。",[22,103303,103304],{},"物体初始位置在哪里。",[22,103306,103307],{},"几何体是什么形状。",[22,103309,103310],{},"哪些 body 可以自由运动。",[22,103312,103313],{},"如何用名字在 Python 里找到 XML 中的对象。",[926,103315,103316,103326],{},[929,103317,103318],{},[932,103319,103320,103323],{},[935,103321,103322],{"align":24379},"标签",[935,103324,103325],{"align":24379},"作用",[972,103327,103328,103337,103347,103356,103366,103376,103389,103399],{},[932,103329,103330,103334],{},[977,103331,103332],{"align":24379},[55,103333,103166],{},[977,103335,103336],{"align":24379},"根节点",[932,103338,103339,103344],{},[977,103340,103341],{"align":24379},[55,103342,103343],{},"\u003Coption>",[977,103345,103346],{"align":24379},"仿真参数",[932,103348,103349,103353],{},[977,103350,103351],{"align":24379},[55,103352,103174],{},[977,103354,103355],{"align":24379},"世界中的物体",[932,103357,103358,103363],{},[977,103359,103360],{"align":24379},[55,103361,103362],{},"\u003Cbody>",[977,103364,103365],{"align":24379},"刚体",[932,103367,103368,103373],{},[977,103369,103370],{"align":24379},[55,103371,103372],{},"\u003Cgeom>",[977,103374,103375],{"align":24379},"几何体、碰撞体、可视体",[932,103377,103378,103386],{},[977,103379,103380,25622,103383],{"align":24379},[55,103381,103382],{},"\u003Cjoint>",[55,103384,103385],{},"\u003Cfreejoint>",[977,103387,103388],{"align":24379},"关节",[932,103390,103391,103396],{},[977,103392,103393],{"align":24379},[55,103394,103395],{},"\u003Csite>",[977,103397,103398],{"align":24379},"标记点",[932,103400,103401,103406],{},[977,103402,103403],{"align":24379},[55,103404,103405],{},"\u003Cactuator>",[977,103407,103408],{"align":24379},"控制器",[175,103410,103411],{},"初学时可以先记住：",[48,103413,103416],{"className":103414,"code":103415,"language":5833,"meta":53},[5831],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[55,103417,103415],{"__ignoreMap":53},[14,103419,101399],{"id":101398},[175,103421,101402],{},[48,103423,103425],{"className":24465,"code":103424,"language":24467,"meta":53,"style":53},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[55,103426,103427],{"__ignoreMap":53},[58,103428,103429,103431,103433,103435,103437,103439,103441,103443],{"class":60,"line":61},[58,103430,25220],{"class":379},[58,103432,26959],{"class":386},[58,103434,24477],{"class":386},[58,103436,27044],{"class":82},[58,103438,103130],{"class":386},[58,103440,101443],{"class":386},[58,103442,103135],{"class":386},[58,103444,103445],{"class":386}," glfw-devel\n",[175,103447,103448],{},"pip:",[48,103450,103451],{"className":24465,"code":101548,"language":24467,"meta":53,"style":53},[55,103452,103453],{"__ignoreMap":53},[58,103454,103455,103457,103459,103461],{"class":60,"line":61},[58,103456,24474],{"class":379},[58,103458,24477],{"class":386},[58,103460,101559],{"class":386},[58,103462,101562],{"class":386},[175,103464,103465],{},"conda:",[48,103467,103469],{"className":24465,"code":103468,"language":24467,"meta":53,"style":53},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[55,103470,103471,103488,103497],{"__ignoreMap":53},[58,103472,103473,103475,103477,103479,103482,103484,103486],{"class":60,"line":61},[58,103474,30974],{"class":379},[58,103476,29820],{"class":386},[58,103478,25759],{"class":82},[58,103480,103481],{"class":386}," mujoco-xml",[58,103483,101604],{"class":386},[58,103485,101607],{"class":82},[58,103487,101610],{"class":82},[58,103489,103490,103492,103494],{"class":60,"line":68},[58,103491,30974],{"class":379},[58,103493,101617],{"class":386},[58,103495,103496],{"class":386}," mujoco-xml\n",[58,103498,103499,103501,103503,103505],{"class":60,"line":79},[58,103500,24474],{"class":379},[58,103502,24477],{"class":386},[58,103504,101559],{"class":386},[58,103506,101562],{"class":386},[175,103508,101633],{},[19,103510,103511,103514,103519],{},[22,103512,103513],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[22,103515,103516,103517,29029],{},"本章使用基础标签，适用于 ",[55,103518,101656],{},[22,103520,103521],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103523,101674],{"id":101673},[175,103525,103526],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[48,103528,103530],{"className":53705,"code":103529,"language":53707,"meta":53,"style":53},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[55,103531,103532,103546,103554,103559,103567],{"__ignoreMap":53},[58,103533,103534,103536,103538,103540,103542,103544],{"class":60,"line":61},[58,103535,373],{"class":75},[58,103537,101650],{"class":71},[58,103539,102404],{"class":379},[58,103541,383],{"class":75},[58,103543,63311],{"class":386},[58,103545,403],{"class":75},[58,103547,103548,103550,103552],{"class":60,"line":68},[58,103549,52782],{"class":75},[58,103551,102470],{"class":71},[58,103553,403],{"class":75},[58,103555,103556],{"class":60,"line":79},[58,103557,103558],{"class":75},"    ...\n",[58,103560,103561,103563,103565],{"class":60,"line":105},[58,103562,53055],{"class":75},[58,103564,102470],{"class":71},[58,103566,403],{"class":75},[58,103568,103569,103571,103573],{"class":60,"line":627},[58,103570,52423],{"class":75},[58,103572,101650],{"class":71},[58,103574,403],{"class":75},[175,103576,103577,103579,103580,103582,103583,103586],{},[55,103578,52438],{}," 表示刚体。",[55,103581,101749],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[55,103584,103585],{},"joint"," 表示刚体相对父刚体如何运动。",[114,103588,103589],{"id":103589},"层级结构非常重要",[175,103591,103592],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[48,103594,103597],{"className":103595,"code":103596,"language":5833,"meta":53},[5831],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[55,103598,103596],{"__ignoreMap":53},[175,103600,103601,101647,103604,103607,103608,103611],{},[55,103602,103603],{},"red_box_geom",[55,103605,103606],{},"box_center"," 都属于 ",[55,103609,103610],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[48,103613,103615],{"className":53705,"code":103614,"language":53707,"meta":53,"style":53},"\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",[55,103616,103617,103637,103651,103671],{"__ignoreMap":53},[58,103618,103619,103621,103623,103625,103627,103629,103631,103633,103635],{"class":60,"line":61},[58,103620,373],{"class":75},[58,103622,52438],{"class":71},[58,103624,15564],{"class":379},[58,103626,383],{"class":75},[58,103628,54129],{"class":386},[58,103630,101735],{"class":379},[58,103632,383],{"class":75},[58,103634,101740],{"class":386},[58,103636,403],{"class":75},[58,103638,103639,103641,103643,103645,103647,103649],{"class":60,"line":68},[58,103640,52782],{"class":75},[58,103642,102249],{"class":71},[58,103644,15564],{"class":379},[58,103646,383],{"class":75},[58,103648,102590],{"class":386},[58,103650,101773],{"class":75},[58,103652,103653,103655,103657,103659,103661,103663,103665,103667,103669],{"class":60,"line":79},[58,103654,52782],{"class":75},[58,103656,101749],{"class":71},[58,103658,54460],{"class":379},[58,103660,383],{"class":75},[58,103662,54129],{"class":386},[58,103664,101765],{"class":379},[58,103666,383],{"class":75},[58,103668,101770],{"class":386},[58,103670,101773],{"class":75},[58,103672,103673,103675,103677],{"class":60,"line":105},[58,103674,52423],{"class":75},[58,103676,52438],{"class":71},[58,103678,403],{"class":75},[175,103680,103681],{},"含义:",[19,103683,103684,103690,103695,103698],{},[22,103685,103686,103687,103689],{},"创建名为 ",[55,103688,298],{}," 的刚体",[22,103691,103692,103693],{},"初始位置在世界坐标 ",[55,103694,101798],{},[22,103696,103697],{},"它有一个自由关节",[22,103699,103700],{},"它有一个盒子几何体",[114,103702,103703],{"id":103703},"坐标怎么理解",[175,103705,103706],{},"MuJoCo 默认使用三维坐标：",[48,103708,103711],{"className":103709,"code":103710,"language":5833,"meta":53},[5831],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[55,103712,103710],{"__ignoreMap":53},[175,103714,15277],{},[48,103716,103718],{"className":53705,"code":103717,"language":53707,"meta":53,"style":53},"pos=\"0 0 1\"\n",[55,103719,103720],{"__ignoreMap":53},[58,103721,103722],{"class":60,"line":61},[58,103723,103717],{"class":75},[175,103725,103726],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[114,103728,103730],{"id":103729},"geom-的-size-怎么理解","geom 的 size 怎么理解",[175,103732,103733,103734,83160,103737,103739],{},"不同 ",[55,103735,103736],{},"type",[55,103738,32140],{}," 含义不同：",[926,103741,103742,103757],{},[929,103743,103744],{},[932,103745,103746,103750,103755],{},[935,103747,103748],{"align":24379},[55,103749,103736],{},[935,103751,103752,103754],{"align":24379},[55,103753,32140],{}," 示例",[935,103756,101329],{"align":24379},[972,103758,103759,103773,103788,103807],{},[932,103760,103761,103765,103770],{},[977,103762,103763],{"align":24379},[55,103764,298],{},[977,103766,103767],{"align":24379},[55,103768,103769],{},"size=\"0.1 0.2 0.3\"",[977,103771,103772],{"align":24379},"x\u002Fy\u002Fz 半边长，不是完整长度",[932,103774,103775,103780,103785],{},[977,103776,103777],{"align":24379},[55,103778,103779],{},"sphere",[977,103781,103782],{"align":24379},[55,103783,103784],{},"size=\"0.1\"",[977,103786,103787],{"align":24379},"球半径",[932,103789,103790,103795,103800],{},[977,103791,103792],{"align":24379},[55,103793,103794],{},"capsule",[977,103796,103797],{"align":24379},[55,103798,103799],{},"size=\"0.03\"",[977,103801,103802,103803,103806],{"align":24379},"胶囊半径，长度常用 ",[55,103804,103805],{},"fromto"," 指定",[932,103808,103809,103814,103819],{},[977,103810,103811],{"align":24379},[55,103812,103813],{},"plane",[977,103815,103816],{"align":24379},[55,103817,103818],{},"size=\"3 3 0.1\"",[977,103820,103821],{"align":24379},"可视平面大小，通常当地面",[175,103823,103824,103825,103827,103828,103830],{},"最容易踩坑的是 box：",[55,103826,102653],{}," 表示边长大约是 ",[55,103829,32681],{},"，因为 MuJoCo 用的是半边长。",[114,103832,103834],{"id":103833},"site-是什么","site 是什么",[175,103836,103837,103840],{},[55,103838,103839],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[19,103842,103843,103846,103849,103852],{},[22,103844,103845],{},"标记机械臂末端。",[22,103847,103848],{},"标记目标位置。",[22,103850,103851],{},"放传感器或相机参考点。",[22,103853,103854],{},"在 Python 中读取某个关键点的世界坐标。",[175,103856,103857,103858,101647,103861,103864],{},"在后面的 Reacher 任务中，",[55,103859,103860],{},"tip",[55,103862,103863],{},"target"," 就会用 site 表示。",[14,103866,101882],{"id":101881},[48,103868,103870],{"className":31022,"code":103869,"language":31024,"meta":53,"style":53},"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",[55,103871,103872,103878,103888,103892,103896,103904,103909,103913,103917,103921,103926,103930,103935,103940,103945,103950,103954,103958,103962,103966,103970,103974,103986,103998,104006,104010,104025,104040,104044,104057,104072,104085,104098,104102,104118,104122,104126,104137,104149,104161,104173,104177,104181,104193],{"__ignoreMap":53},[58,103873,103874,103876],{"class":60,"line":61},[58,103875,31036],{"class":92},[58,103877,101930],{"class":75},[58,103879,103880,103882,103884,103886],{"class":60,"line":68},[58,103881,31036],{"class":92},[58,103883,32024],{"class":75},[58,103885,32027],{"class":92},[58,103887,32030],{"class":75},[58,103889,103890],{"class":60,"line":79},[58,103891,3046],{"emptyLinePlaceholder":720},[58,103893,103894],{"class":60,"line":105},[58,103895,3046],{"emptyLinePlaceholder":720},[58,103897,103898,103900,103902],{"class":60,"line":627},[58,103899,101943],{"class":82},[58,103901,14208],{"class":92},[58,103903,101948],{"class":386},[58,103905,103906],{"class":60,"line":509},[58,103907,103908],{"class":386},"\u003Cmujoco model=\"xml_basic\">\n",[58,103910,103911],{"class":60,"line":559},[58,103912,101958],{"class":386},[58,103914,103915],{"class":60,"line":654},[58,103916,3046],{"emptyLinePlaceholder":720},[58,103918,103919],{"class":60,"line":671},[58,103920,101967],{"class":386},[58,103922,103923],{"class":60,"line":677},[58,103924,103925],{"class":386},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[58,103927,103928],{"class":60,"line":2260},[58,103929,3046],{"emptyLinePlaceholder":720},[58,103931,103932],{"class":60,"line":694},[58,103933,103934],{"class":386},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[58,103936,103937],{"class":60,"line":2270},[58,103938,103939],{"class":386},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[58,103941,103942],{"class":60,"line":2275},[58,103943,103944],{"class":386},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[58,103946,103947],{"class":60,"line":2289},[58,103948,103949],{"class":386},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[58,103951,103952],{"class":60,"line":2294},[58,103953,101996],{"class":386},[58,103955,103956],{"class":60,"line":2300},[58,103957,102001],{"class":386},[58,103959,103960],{"class":60,"line":2321},[58,103961,102006],{"class":386},[58,103963,103964],{"class":60,"line":2326},[58,103965,96327],{"class":386},[58,103967,103968],{"class":60,"line":2340},[58,103969,3046],{"emptyLinePlaceholder":720},[58,103971,103972],{"class":60,"line":2345},[58,103973,3046],{"emptyLinePlaceholder":720},[58,103975,103976,103978,103980,103982,103984],{"class":60,"line":2374},[58,103977,32591],{"class":92},[58,103979,2619],{"class":379},[58,103981,102027],{"class":75},[58,103983,96315],{"class":82},[58,103985,4385],{"class":75},[58,103987,103988,103990,103992,103994,103996],{"class":60,"line":2379},[58,103989,102036],{"class":75},[58,103991,383],{"class":92},[58,103993,102041],{"class":75},[58,103995,101943],{"class":82},[58,103997,799],{"class":75},[58,103999,104000,104002,104004],{"class":60,"line":2396},[58,104001,102050],{"class":75},[58,104003,383],{"class":92},[58,104005,102055],{"class":75},[58,104007,104008],{"class":60,"line":2401},[58,104009,3046],{"emptyLinePlaceholder":720},[58,104011,104012,104015,104017,104020,104023],{"class":60,"line":2406},[58,104013,104014],{"class":75},"    box_body_id ",[58,104016,383],{"class":92},[58,104018,104019],{"class":75}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[58,104021,104022],{"class":386},"\"red_box\"",[58,104024,799],{"class":75},[58,104026,104027,104030,104032,104035,104038],{"class":60,"line":2411},[58,104028,104029],{"class":75},"    site_id ",[58,104031,383],{"class":92},[58,104033,104034],{"class":75}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[58,104036,104037],{"class":386},"\"box_center\"",[58,104039,799],{"class":75},[58,104041,104042],{"class":60,"line":2425},[58,104043,3046],{"emptyLinePlaceholder":720},[58,104045,104046,104048,104051,104053,104055],{"class":60,"line":2430},[58,104047,3747],{"class":92},[58,104049,104050],{"class":75}," box_body_id ",[58,104052,373],{"class":92},[58,104054,4739],{"class":82},[58,104056,4385],{"class":75},[58,104058,104059,104062,104065,104067,104070],{"class":60,"line":3223},[58,104060,104061],{"class":92},"        raise",[58,104063,104064],{"class":82}," RuntimeError",[58,104066,793],{"class":75},[58,104068,104069],{"class":386},"\"body red_box not found\"",[58,104071,799],{"class":75},[58,104073,104074,104076,104079,104081,104083],{"class":60,"line":3237},[58,104075,3747],{"class":92},[58,104077,104078],{"class":75}," site_id ",[58,104080,373],{"class":92},[58,104082,4739],{"class":82},[58,104084,4385],{"class":75},[58,104086,104087,104089,104091,104093,104096],{"class":60,"line":3245},[58,104088,104061],{"class":92},[58,104090,104064],{"class":82},[58,104092,793],{"class":75},[58,104094,104095],{"class":386},"\"site box_center not found\"",[58,104097,799],{"class":75},[58,104099,104100],{"class":60,"line":3250},[58,104101,3046],{"emptyLinePlaceholder":720},[58,104103,104104,104106,104108,104110,104112,104114,104116],{"class":60,"line":3256},[58,104105,3847],{"class":92},[58,104107,102130],{"class":75},[58,104109,26687],{"class":92},[58,104111,33087],{"class":82},[58,104113,793],{"class":75},[58,104115,2369],{"class":82},[58,104117,31430],{"class":75},[58,104119,104120],{"class":60,"line":3262},[58,104121,102145],{"class":75},[58,104123,104124],{"class":60,"line":3267},[58,104125,3046],{"emptyLinePlaceholder":720},[58,104127,104128,104130,104132,104135],{"class":60,"line":8594},[58,104129,31943],{"class":82},[58,104131,793],{"class":75},[58,104133,104134],{"class":386},"\"simulation time:\"",[58,104136,102107],{"class":75},[58,104138,104139,104141,104143,104146],{"class":60,"line":8618},[58,104140,31943],{"class":82},[58,104142,793],{"class":75},[58,104144,104145],{"class":386},"\"box body position:\"",[58,104147,104148],{"class":75},", data.xpos[box_body_id].copy())\n",[58,104150,104151,104153,104155,104158],{"class":60,"line":8623},[58,104152,31943],{"class":82},[58,104154,793],{"class":75},[58,104156,104157],{"class":386},"\"site position:\"",[58,104159,104160],{"class":75},", data.site_xpos[site_id].copy())\n",[58,104162,104163,104165,104167,104170],{"class":60,"line":8629},[58,104164,31943],{"class":82},[58,104166,793],{"class":75},[58,104168,104169],{"class":386},"\"box qpos:\"",[58,104171,104172],{"class":75},", np.array(data.qpos))\n",[58,104174,104175],{"class":60,"line":8656},[58,104176,3046],{"emptyLinePlaceholder":720},[58,104178,104179],{"class":60,"line":8661},[58,104180,3046],{"emptyLinePlaceholder":720},[58,104182,104183,104185,104187,104189,104191],{"class":60,"line":8667},[58,104184,2180],{"class":92},[58,104186,31864],{"class":82},[58,104188,102188],{"class":92},[58,104190,102191],{"class":386},[58,104192,4385],{"class":75},[58,104194,104195],{"class":60,"line":8679},[58,104196,102198],{"class":75},[175,104198,104199],{},"保存为：",[48,104201,104203],{"className":24465,"code":104202,"language":24467,"meta":53,"style":53},"touch ch2_xml_basic.py\n",[55,104204,104205],{"__ignoreMap":53},[58,104206,104207,104209],{"class":60,"line":61},[58,104208,101912],{"class":379},[58,104210,104211],{"class":386}," ch2_xml_basic.py\n",[175,104213,102930],{},[48,104215,104217],{"className":24465,"code":104216,"language":24467,"meta":53,"style":53},"python ch2_xml_basic.py\n",[55,104218,104219],{"__ignoreMap":53},[58,104220,104221,104223],{"class":60,"line":61},[58,104222,31024],{"class":379},[58,104224,104211],{"class":386},[114,104226,102201],{"id":102201},[175,104228,104229],{},"用名字查找 body：",[48,104231,104233],{"className":31022,"code":104232,"language":31024,"meta":53,"style":53},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[55,104234,104235],{"__ignoreMap":53},[58,104236,104237,104240,104242,104244,104246],{"class":60,"line":61},[58,104238,104239],{"class":75},"box_body_id ",[58,104241,383],{"class":92},[58,104243,104019],{"class":75},[58,104245,104022],{"class":386},[58,104247,799],{"class":75},[175,104249,104250],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[175,104252,104253],{},"用名字查找 site：",[48,104255,104257],{"className":31022,"code":104256,"language":31024,"meta":53,"style":53},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[55,104258,104259],{"__ignoreMap":53},[58,104260,104261,104264,104266,104268,104270],{"class":60,"line":61},[58,104262,104263],{"class":75},"site_id ",[58,104265,383],{"class":92},[58,104267,104034],{"class":75},[58,104269,104037],{"class":386},[58,104271,799],{"class":75},[175,104273,104274,104275,104278,104279,104282],{},"注意第二个参数是对象类型。查 body 就用 ",[55,104276,104277],{},"mjOBJ_BODY","，查 site 就用 ",[55,104280,104281],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[175,104284,104285],{},"读取世界坐标：",[48,104287,104289],{"className":31022,"code":104288,"language":31024,"meta":53,"style":53},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[55,104290,104291,104296],{"__ignoreMap":53},[58,104292,104293],{"class":60,"line":61},[58,104294,104295],{"class":75},"data.xpos[box_body_id]\n",[58,104297,104298],{"class":60,"line":68},[58,104299,104300],{"class":75},"data.site_xpos[site_id]\n",[175,104302,104303,104306,104307,104310],{},[55,104304,104305],{},"xpos"," 是 body 的世界坐标，",[55,104308,104309],{},"site_xpos"," 是 site 的世界坐标。",[114,104312,102337],{"id":102337},[48,104314,104316],{"className":31022,"code":104315,"language":31024,"meta":53,"style":53},"import mujoco\nimport numpy as np\n",[55,104317,104318,104324],{"__ignoreMap":53},[58,104319,104320,104322],{"class":60,"line":61},[58,104321,31036],{"class":92},[58,104323,101930],{"class":75},[58,104325,104326,104328,104330,104332],{"class":60,"line":68},[58,104327,31036],{"class":92},[58,104329,32024],{"class":75},[58,104331,32027],{"class":92},[58,104333,32030],{"class":75},[175,104335,104336,104337,104340,104341,104344,104345,1000,104348,29029],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[55,104338,104339],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[55,104342,104343],{},"as np"," 是习惯写法，后面就可以写 ",[55,104346,104347],{},"np.array(...)",[55,104349,104350],{},"np.round(...)",[48,104352,104353],{"className":31022,"code":102224,"language":31024,"meta":53,"style":53},[55,104354,104355,104363,104367],{"__ignoreMap":53},[58,104356,104357,104359,104361],{"class":60,"line":61},[58,104358,101943],{"class":82},[58,104360,14208],{"class":92},[58,104362,101948],{"class":386},[58,104364,104365],{"class":60,"line":68},[58,104366,102239],{"class":386},[58,104368,104369],{"class":60,"line":79},[58,104370,96327],{"class":386},[175,104372,104373,104374,29029],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[55,104375,104376],{},"mujoco.MjModel.from_xml_string(XML)",[48,104378,104380],{"className":53705,"code":104379,"language":53707,"meta":53,"style":53},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[55,104381,104382],{"__ignoreMap":53},[58,104383,104384,104386,104388,104390,104392,104394,104396,104398,104401,104403,104405,104408,104410,104412,104415],{"class":60,"line":61},[58,104385,373],{"class":75},[58,104387,103839],{"class":71},[58,104389,15564],{"class":379},[58,104391,383],{"class":75},[58,104393,104037],{"class":386},[58,104395,101735],{"class":379},[58,104397,383],{"class":75},[58,104399,104400],{"class":386},"\"0 0 0\"",[58,104402,101765],{"class":379},[58,104404,383],{"class":75},[58,104406,104407],{"class":386},"\"0.03\"",[58,104409,79398],{"class":379},[58,104411,383],{"class":75},[58,104413,104414],{"class":386},"\"0 1 0 1\"",[58,104416,101773],{"class":75},[175,104418,104419,104421,104422,104425,104426,104428,104429,104432],{},[55,104420,103839],{}," 是标记点。",[55,104423,104424],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[55,104427,103799],{}," 表示显示出来的小球大小。",[55,104430,104431],{},"rgba=\"0 1 0 1\""," 表示绿色。",[48,104434,104435],{"className":31022,"code":104232,"language":31024,"meta":53,"style":53},[55,104436,104437],{"__ignoreMap":53},[58,104438,104439,104441,104443,104445,104447],{"class":60,"line":61},[58,104440,104239],{"class":75},[58,104442,383],{"class":92},[58,104444,104019],{"class":75},[58,104446,104022],{"class":386},[58,104448,799],{"class":75},[175,104450,104451,104452,104454],{},"这行的作用是：根据名字 ",[55,104453,104022],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[175,104456,104457],{},"拆开看：",[19,104459,104460,104466,104471,104477],{},[22,104461,104462,104465],{},[55,104463,104464],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[22,104467,104468,104470],{},[55,104469,102714],{}," 是被查询的模型。",[22,104472,104473,104476],{},[55,104474,104475],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[22,104478,104479,104481],{},[55,104480,104022],{}," 是 XML 里写的名字。",[48,104483,104484],{"className":31022,"code":104256,"language":31024,"meta":53,"style":53},[55,104485,104486],{"__ignoreMap":53},[58,104487,104488,104490,104492,104494,104496],{"class":60,"line":61},[58,104489,104263],{"class":75},[58,104491,383],{"class":92},[58,104493,104034],{"class":75},[58,104495,104037],{"class":386},[58,104497,799],{"class":75},[175,104499,104500,104501,29029],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[55,104502,104037],{},[48,104504,104506],{"className":31022,"code":104505,"language":31024,"meta":53,"style":53},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[55,104507,104508,104520],{"__ignoreMap":53},[58,104509,104510,104512,104514,104516,104518],{"class":60,"line":61},[58,104511,2180],{"class":92},[58,104513,104050],{"class":75},[58,104515,373],{"class":92},[58,104517,4739],{"class":82},[58,104519,4385],{"class":75},[58,104521,104522,104525,104527,104529,104531],{"class":60,"line":68},[58,104523,104524],{"class":92},"    raise",[58,104526,104064],{"class":82},[58,104528,793],{"class":75},[58,104530,104069],{"class":386},[58,104532,799],{"class":75},[175,104534,104535,104537,104538,104541,104542,104545,104546,104549],{},[55,104536,2180],{}," 是条件判断。",[55,104539,104540],{},"mj_name2id"," 找不到对象时会返回 ",[55,104543,104544],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[55,104547,104548],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[48,104551,104553],{"className":31022,"code":104552,"language":31024,"meta":53,"style":53},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[55,104554,104555,104571],{"__ignoreMap":53},[58,104556,104557,104559,104561,104563,104565,104567,104569],{"class":60,"line":61},[58,104558,3671],{"class":92},[58,104560,102130],{"class":75},[58,104562,26687],{"class":92},[58,104564,33087],{"class":82},[58,104566,793],{"class":75},[58,104568,2369],{"class":82},[58,104570,31430],{"class":75},[58,104572,104573],{"class":60,"line":68},[58,104574,102328],{"class":75},[175,104576,104577],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[48,104579,104581],{"className":31022,"code":104580,"language":31024,"meta":53,"style":53},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[55,104582,104583],{"__ignoreMap":53},[58,104584,104585,104587,104589,104591],{"class":60,"line":61},[58,104586,31059],{"class":82},[58,104588,793],{"class":75},[58,104590,104145],{"class":386},[58,104592,104148],{"class":75},[175,104594,104595,104597,104598,104601],{},[55,104596,101708],{}," 保存所有 body 的世界坐标。",[55,104599,104600],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[48,104603,104605],{"className":31022,"code":104604,"language":31024,"meta":53,"style":53},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[55,104606,104607],{"__ignoreMap":53},[58,104608,104609,104611,104613,104615],{"class":60,"line":61},[58,104610,31059],{"class":82},[58,104612,793],{"class":75},[58,104614,104157],{"class":386},[58,104616,104160],{"class":75},[175,104618,104619,104622,104623,104625],{},[55,104620,104621],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[55,104624,103606],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[48,104627,104629],{"className":31022,"code":104628,"language":31024,"meta":53,"style":53},"print(\"box qpos:\", np.array(data.qpos))\n",[55,104630,104631],{"__ignoreMap":53},[58,104632,104633,104635,104637,104639],{"class":60,"line":61},[58,104634,31059],{"class":82},[58,104636,793],{"class":75},[58,104638,104169],{"class":386},[58,104640,104172],{"class":75},[175,104642,104643,104644,104647],{},"这里打印广义位置数组。",[55,104645,104646],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104649,102945],{"id":102944},[175,104651,104652,104653,104656,104657,29029],{},"程序会输出 ",[55,104654,104655],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[55,104658,104659],{},"qpos",[175,104661,104662,104664,104665,104668,104669,104672],{},[55,104663,104600],{}," 是 body 的世界坐标位置。",[55,104666,104667],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[55,104670,104671],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[175,104674,82852,104675,83160,104677,104679],{},[55,104676,103606],{},[55,104678,104424],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[175,104681,104682],{},"如果你把 site 改成：",[48,104684,104686],{"className":53705,"code":104685,"language":53707,"meta":53,"style":53},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[55,104687,104688],{"__ignoreMap":53},[58,104689,104690,104692,104694,104696,104698,104701,104703,104705,104708,104710,104712,104714,104716,104718,104720],{"class":60,"line":61},[58,104691,373],{"class":75},[58,104693,103839],{"class":71},[58,104695,15564],{"class":379},[58,104697,383],{"class":75},[58,104699,104700],{"class":386},"\"box_top\"",[58,104702,101735],{"class":379},[58,104704,383],{"class":75},[58,104706,104707],{"class":386},"\"0 0 0.15\"",[58,104709,101765],{"class":379},[58,104711,383],{"class":75},[58,104713,104407],{"class":386},[58,104715,79398],{"class":379},[58,104717,383],{"class":75},[58,104719,104414],{"class":386},[58,104721,101773],{"class":75},[175,104723,104724,104725,104728],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[55,104726,104727],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104730,102977],{"id":102976},[19,104732,104733,104742,104745,104752,104758,104769],{},[22,104734,103040,104735,104737,104738,103043,104740,29029],{},[55,104736,103610],{}," 的初始高度从 ",[55,104739,89],{},[55,104741,867],{},[22,104743,104744],{},"重新运行程序。",[22,104746,104747,104748,104751],{},"观察 ",[55,104749,104750],{},"box qpos"," 和最终位置是否变化。",[22,104753,104754,104755,104757],{},"故意把 ",[55,104756,103839],{}," 名称改错，确认程序能报错。",[22,104759,103040,104760,104762,104763,103043,104765,104768],{},[55,104761,101749],{}," 的颜色 ",[55,104764,102661],{},[55,104766,104767],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[22,104770,103040,104771,83160,104773,103043,104776,104779,104780,104782],{},[55,104772,103606],{},[55,104774,104775],{},"pos",[55,104777,104778],{},"0 0 0.2","，观察 ",[55,104781,104727],{}," 如何变化。",[14,104784,103082],{"id":103081},[114,104786,104788],{"id":104787},"xml-error-schema-violation",[55,104789,104790],{},"XML Error: Schema violation",[175,104792,104793],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[114,104795,104797,81920,104799],{"id":104796},"mj_name2id-返回-1",[55,104798,104540],{},[55,104800,104544],{},[175,104802,104803,104804,104807],{},"说明名字没有找到。检查 XML 中 ",[55,104805,104806],{},"name=\"...\"","，并确认对象类型正确。",[114,104809,104810],{"id":104810},"物体不下落",[175,104812,103152],{},[19,104814,104815,104820,104825],{},[22,104816,104817,104818],{},"body 是否有 ",[55,104819,102249],{},[22,104821,104822,104823],{},"gravity 是否为 ",[55,104824,103218],{},[22,104826,104827,104828,104830],{},"body 是否被固定在 ",[55,104829,102470],{}," 中",[114,104832,104833],{"id":104833},"坐标看起来不符合预期",[175,104835,104836],{},"先区分两种坐标：",[926,104838,104839,104848],{},[929,104840,104841],{},[932,104842,104843,104846],{},[935,104844,104845],{"align":24379},"坐标",[935,104847,101329],{"align":24379},[972,104849,104850,104860],{},[932,104851,104852,104857],{},[977,104853,104854,104855],{"align":24379},"XML 里的 ",[55,104856,104775],{},[977,104858,104859],{"align":24379},"相对父 body 的局部坐标",[932,104861,104862,104868],{},[977,104863,104864,25622,104866],{"align":24379},[55,104865,101708],{},[55,104867,104621],{},[977,104869,104870],{"align":24379},"仿真更新后的世界坐标",[175,104872,104873,104874,104876,104877,83169,104880,104882],{},"如果你修改了 ",[55,104875,101699],{},"，但还没调用 ",[55,104878,104879],{},"mj_forward",[55,104881,101844],{},"，世界坐标可能还没有更新。",[14,104884,103236],{"id":103235},[175,104886,104887],{},"MJCF 建模先掌握四件事：",[19,104889,104890,104895,104900,104905],{},[22,104891,104892,104894],{},[55,104893,52438],{}," 表示刚体层级。",[22,104896,104897,104899],{},[55,104898,101749],{}," 表示形状、碰撞和质量。",[22,104901,104902,104904],{},[55,104903,103585],{}," 决定 body 能不能动、怎么动。",[22,104906,104907,104909],{},[55,104908,103839],{}," 用来标记关键点，方便 Python 读取位置。",[175,104911,104912],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[702,104914,104915],{},"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":53,"searchDepth":68,"depth":68,"links":104917},[104918,104919,104920,104926,104930,104931,104932,104939],{"id":101275,"depth":68,"text":101276},{"id":101398,"depth":68,"text":101399},{"id":101673,"depth":68,"text":101674,"children":104921},[104922,104923,104924,104925],{"id":103589,"depth":79,"text":103589},{"id":103703,"depth":79,"text":103703},{"id":103729,"depth":79,"text":103730},{"id":103833,"depth":79,"text":103834},{"id":101881,"depth":68,"text":101882,"children":104927},[104928,104929],{"id":102201,"depth":79,"text":102201},{"id":102337,"depth":79,"text":102337},{"id":102944,"depth":68,"text":102945},{"id":102976,"depth":68,"text":102977},{"id":103081,"depth":68,"text":103082,"children":104933},[104934,104935,104937,104938],{"id":104787,"depth":79,"text":104790},{"id":104796,"depth":79,"text":104936},"mj_name2id 返回 -1",{"id":104810,"depth":79,"text":104810},{"id":104833,"depth":79,"text":104833},{"id":103235,"depth":68,"text":103236},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103283,"description":53},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104946,"title":104947,"body":104948,"description":53,"extension":718,"meta":106443,"navigation":720,"path":106444,"seo":106445,"stem":106446,"__hash__":106447},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104949,"toc":106415},[104950,104953,104955,104958,104961,104999,105002,105008,105011,105013,105015,105042,105044,105058,105060,105101,105103,105127,105129,105132,105141,105150,105153,105162,105170,105179,105182,105192,105195,105247,105254,105260,105268,105316,105319,105338,105341,105349,105353,105362,105395,105397,105745,105747,105759,105761,105772,105774,105777,105798,105804,105807,105832,105842,105845,105853,105856,105859,105880,105891,105893,105913,105916,105937,105946,105965,105971,105996,105999,106013,106020,106044,106047,106055,106064,106080,106092,106100,106109,106111,106114,106138,106143,106146,106168,106170,106209,106211,106218,106220,106228,106231,106234,106246,106287,106294,106305,106312,106315,106364,106367,106370,106376,106378,106383,106409,106412],[10,104951,104947],{"id":104952},"_3python-控制接口读取状态与推进仿真",[14,104954,101276],{"id":101275},[175,104956,104957],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[175,104959,104960],{},"你将学习:",[19,104962,104963,104968,104973,104977,104982,104993],{},[22,104964,104965],{},[55,104966,104967],{},"MjModel.from_xml_string",[22,104969,104970],{},[55,104971,104972],{},"MjData(model)",[22,104974,104975],{},[55,104976,101844],{},[22,104978,104979],{},[55,104980,104981],{},"mj_resetData",[22,104983,104984,104985,1000,104987,1000,104990],{},"读取 ",[55,104986,104659],{},[55,104988,104989],{},"qvel",[55,104991,104992],{},"ctrl",[22,104994,104995,104996],{},"使用 ",[55,104997,104998],{},"model.opt.timestep",[175,105000,105001],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[48,105003,105006],{"className":105004,"code":105005,"language":5833,"meta":53},[5831],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[55,105007,105005],{"__ignoreMap":53},[175,105009,105010],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,105012,101399],{"id":101398},[175,105014,101402],{},[48,105016,105018],{"className":24465,"code":105017,"language":24467,"meta":53,"style":53},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[55,105019,105020],{"__ignoreMap":53},[58,105021,105022,105024,105026,105028,105030,105033,105035,105037,105039],{"class":60,"line":61},[58,105023,25220],{"class":379},[58,105025,26959],{"class":386},[58,105027,24477],{"class":386},[58,105029,27044],{"class":82},[58,105031,105032],{"class":386}," python3",[58,105034,101427],{"class":386},[58,105036,103130],{"class":386},[58,105038,101443],{"class":386},[58,105040,105041],{"class":386}," glfw\n",[175,105043,103448],{},[48,105045,105046],{"className":24465,"code":101548,"language":24467,"meta":53,"style":53},[55,105047,105048],{"__ignoreMap":53},[58,105049,105050,105052,105054,105056],{"class":60,"line":61},[58,105051,24474],{"class":379},[58,105053,24477],{"class":386},[58,105055,101559],{"class":386},[58,105057,101562],{"class":386},[175,105059,103465],{},[48,105061,105063],{"className":24465,"code":105062,"language":24467,"meta":53,"style":53},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[55,105064,105065,105082,105091],{"__ignoreMap":53},[58,105066,105067,105069,105071,105073,105076,105078,105080],{"class":60,"line":61},[58,105068,30974],{"class":379},[58,105070,29820],{"class":386},[58,105072,25759],{"class":82},[58,105074,105075],{"class":386}," mujoco-python-api",[58,105077,101604],{"class":386},[58,105079,101607],{"class":82},[58,105081,101610],{"class":82},[58,105083,105084,105086,105088],{"class":60,"line":68},[58,105085,30974],{"class":379},[58,105087,101617],{"class":386},[58,105089,105090],{"class":386}," mujoco-python-api\n",[58,105092,105093,105095,105097,105099],{"class":60,"line":79},[58,105094,24474],{"class":379},[58,105096,24477],{"class":386},[58,105098,101559],{"class":386},[58,105100,101562],{"class":386},[175,105102,101633],{},[19,105104,105105,105112,105121],{},[22,105106,105107,101647,105109,105111],{},[55,105108,101304],{},[55,105110,101309],{}," 是官方 Python bindings 的类名。",[22,105113,105114,105115,105118,105119,29029],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[55,105116,105117],{},"mjModel"," 在 Python 中是 ",[55,105120,101338],{},[22,105122,105123,105124,29029],{},"不要使用 ",[55,105125,105126],{},"sim = mujoco_py.MjSim(...)",[14,105128,101674],{"id":101673},[175,105130,105131],{},"仿真推进核心代码:",[48,105133,105135],{"className":31022,"code":105134,"language":31024,"meta":53,"style":53},"mujoco.mj_step(model, data)\n",[55,105136,105137],{"__ignoreMap":53},[58,105138,105139],{"class":60,"line":61},[58,105140,105134],{"class":75},[175,105142,105143,105144,1000,105146,1000,105148,29029],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[55,105145,101699],{},[55,105147,101702],{},[55,105149,101696],{},[175,105151,105152],{},"重置仿真:",[48,105154,105156],{"className":31022,"code":105155,"language":31024,"meta":53,"style":53},"mujoco.mj_resetData(model, data)\n",[55,105157,105158],{"__ignoreMap":53},[58,105159,105160],{"class":60,"line":61},[58,105161,105155],{"class":75},[175,105163,105164,105165,83169,105167,105169],{},"如果手动修改了 ",[55,105166,101699],{},[55,105168,101702],{},"，通常应调用:",[48,105171,105173],{"className":31022,"code":105172,"language":31024,"meta":53,"style":53},"mujoco.mj_forward(model, data)\n",[55,105174,105175],{"__ignoreMap":53},[58,105176,105177],{"class":60,"line":61},[58,105178,105172],{"class":75},[175,105180,105181],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[114,105183,105185,1000,105187,1000,105189,105191],{"id":105184},"qposqvelctrl-是什么",[55,105186,104659],{},[55,105188,104989],{},[55,105190,104992],{}," 是什么",[175,105193,105194],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[926,105196,105197,105209],{},[929,105198,105199],{},[932,105200,105201,105204,105206],{},[935,105202,105203],{"align":24379},"字段",[935,105205,101329],{"align":24379},[935,105207,105208],{"align":24379},"谁来修改",[972,105210,105211,105223,105235],{},[932,105212,105213,105217,105220],{},[977,105214,105215],{"align":24379},[55,105216,101699],{},[977,105218,105219],{"align":24379},"广义位置，例如小车位置、关节角、自由物体位置姿态",[977,105221,105222],{"align":24379},"MuJoCo 更新，也可以手动设置初始状态",[932,105224,105225,105229,105232],{},[977,105226,105227],{"align":24379},[55,105228,101702],{},[977,105230,105231],{"align":24379},"广义速度，例如小车速度、关节角速度",[977,105233,105234],{"align":24379},"MuJoCo 更新，也可以手动清零",[932,105236,105237,105241,105244],{},[977,105238,105239],{"align":24379},[55,105240,101705],{},[977,105242,105243],{"align":24379},"actuator 的控制输入",[977,105245,105246],{"align":24379},"主要由你的控制代码写入",[175,105248,195,105249,101647,105251,105253],{},[55,105250,104659],{},[55,105252,104989],{}," 不一定同维。自由刚体就是典型例子：",[48,105255,105258],{"className":105256,"code":105257,"language":5833,"meta":53},[5831],"freejoint: qpos 7 维，qvel 6 维\n",[55,105259,105257],{"__ignoreMap":53},[114,105261,105263,101647,105265,105267],{"id":105262},"mj_step-和-mj_forward-的区别",[55,105264,101844],{},[55,105266,104879],{}," 的区别",[926,105269,105270,105283],{},[929,105271,105272],{},[932,105273,105274,105277,105280],{},[935,105275,105276],{"align":24379},"函数",[935,105278,105279],{"align":24379},"是否推进时间",[935,105281,105282],{"align":24379},"什么时候用",[972,105284,105285,105298],{},[932,105286,105287,105292,105295],{},[977,105288,105289],{"align":24379},[55,105290,105291],{},"mj_step(model, data)",[977,105293,105294],{"align":24379},"是",[977,105296,105297],{"align":24379},"正常仿真循环，每调用一次前进一步",[932,105299,105300,105305,105308],{},[977,105301,105302],{"align":24379},[55,105303,105304],{},"mj_forward(model, data)",[977,105306,105307],{"align":24379},"否",[977,105309,105310,105311,1000,105313,105315],{"align":24379},"手动改了 ",[55,105312,104659],{},[55,105314,104989],{}," 后，刷新派生量",[175,105317,105318],{},"例如你写：",[48,105320,105322],{"className":31022,"code":105321,"language":31024,"meta":53,"style":53},"data.qpos[2] = 2.0\n",[55,105323,105324],{"__ignoreMap":53},[58,105325,105326,105329,105331,105333,105335],{"class":60,"line":61},[58,105327,105328],{"class":75},"data.qpos[",[58,105330,867],{"class":82},[58,105332,5089],{"class":75},[58,105334,383],{"class":92},[58,105336,105337],{"class":82}," 2.0\n",[175,105339,105340],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[48,105342,105343],{"className":31022,"code":105172,"language":31024,"meta":53,"style":53},[55,105344,105345],{"__ignoreMap":53},[58,105346,105347],{"class":60,"line":61},[58,105348,105172],{"class":75},[114,105350,105352],{"id":105351},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[175,105354,105355,105358,105359,105361],{},[55,105356,105357],{},"mujoco.mj_resetData(model, data)"," 会把 ",[55,105360,34045],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[48,105363,105365],{"className":31022,"code":105364,"language":31024,"meta":53,"style":53},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[55,105366,105367,105371,105381,105391],{"__ignoreMap":53},[58,105368,105369],{"class":60,"line":61},[58,105370,105155],{"class":75},[58,105372,105373,105376,105378],{"class":60,"line":68},[58,105374,105375],{"class":75},"data.qpos[:] ",[58,105377,383],{"class":92},[58,105379,105380],{"class":75}," random_qpos\n",[58,105382,105383,105386,105388],{"class":60,"line":79},[58,105384,105385],{"class":75},"data.qvel[:] ",[58,105387,383],{"class":92},[58,105389,105390],{"class":82}," 0.0\n",[58,105392,105393],{"class":60,"line":105},[58,105394,105172],{"class":75},[14,105396,101882],{"id":101881},[48,105398,105400],{"className":31022,"code":105399,"language":31024,"meta":53,"style":53},"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",[55,105401,105402,105408,105418,105422,105426,105434,105439,105443,105447,105451,105456,105460,105465,105470,105475,105479,105483,105487,105491,105495,105499,105518,105525,105537,105548,105564,105580,105584,105588,105600,105612,105620,105624,105635,105639,105655,105659,105663,105672,105676,105681,105690,105694,105707,105712,105721,105725,105729,105741],{"__ignoreMap":53},[58,105403,105404,105406],{"class":60,"line":61},[58,105405,31036],{"class":92},[58,105407,101930],{"class":75},[58,105409,105410,105412,105414,105416],{"class":60,"line":68},[58,105411,31036],{"class":92},[58,105413,32024],{"class":75},[58,105415,32027],{"class":92},[58,105417,32030],{"class":75},[58,105419,105420],{"class":60,"line":79},[58,105421,3046],{"emptyLinePlaceholder":720},[58,105423,105424],{"class":60,"line":105},[58,105425,3046],{"emptyLinePlaceholder":720},[58,105427,105428,105430,105432],{"class":60,"line":627},[58,105429,101943],{"class":82},[58,105431,14208],{"class":92},[58,105433,101948],{"class":386},[58,105435,105436],{"class":60,"line":509},[58,105437,105438],{"class":386},"\u003Cmujoco model=\"state_api\">\n",[58,105440,105441],{"class":60,"line":559},[58,105442,101958],{"class":386},[58,105444,105445],{"class":60,"line":654},[58,105446,3046],{"emptyLinePlaceholder":720},[58,105448,105449],{"class":60,"line":671},[58,105450,101967],{"class":386},[58,105452,105453],{"class":60,"line":677},[58,105454,105455],{"class":386},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[58,105457,105458],{"class":60,"line":2260},[58,105459,3046],{"emptyLinePlaceholder":720},[58,105461,105462],{"class":60,"line":694},[58,105463,105464],{"class":386},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[58,105466,105467],{"class":60,"line":2270},[58,105468,105469],{"class":386},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[58,105471,105472],{"class":60,"line":2275},[58,105473,105474],{"class":386},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[58,105476,105477],{"class":60,"line":2289},[58,105478,101996],{"class":386},[58,105480,105481],{"class":60,"line":2294},[58,105482,102001],{"class":386},[58,105484,105485],{"class":60,"line":2300},[58,105486,102006],{"class":386},[58,105488,105489],{"class":60,"line":2321},[58,105490,96327],{"class":386},[58,105492,105493],{"class":60,"line":2326},[58,105494,3046],{"emptyLinePlaceholder":720},[58,105496,105497],{"class":60,"line":2340},[58,105498,3046],{"emptyLinePlaceholder":720},[58,105500,105501,105503,105506,105509,105511,105514,105516],{"class":60,"line":2345},[58,105502,32591],{"class":92},[58,105504,105505],{"class":379}," print_state",[58,105507,105508],{"class":75},"(prefix: ",[58,105510,1952],{"class":82},[58,105512,105513],{"class":75},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[58,105515,96315],{"class":82},[58,105517,4385],{"class":75},[58,105519,105520,105522],{"class":60,"line":2374},[58,105521,31943],{"class":82},[58,105523,105524],{"class":75},"(prefix)\n",[58,105526,105527,105529,105531,105534],{"class":60,"line":2379},[58,105528,31943],{"class":82},[58,105530,793],{"class":75},[58,105532,105533],{"class":386},"\"  timestep:\"",[58,105535,105536],{"class":75},", model.opt.timestep)\n",[58,105538,105539,105541,105543,105546],{"class":60,"line":2396},[58,105540,31943],{"class":82},[58,105542,793],{"class":75},[58,105544,105545],{"class":386},"\"  time:\"",[58,105547,102107],{"class":75},[58,105549,105550,105552,105554,105557,105560,105562],{"class":60,"line":2401},[58,105551,31943],{"class":82},[58,105553,793],{"class":75},[58,105555,105556],{"class":386},"\"  qpos:\"",[58,105558,105559],{"class":75},", np.round(data.qpos.copy(), ",[58,105561,1079],{"class":82},[58,105563,31141],{"class":75},[58,105565,105566,105568,105570,105573,105576,105578],{"class":60,"line":2406},[58,105567,31943],{"class":82},[58,105569,793],{"class":75},[58,105571,105572],{"class":386},"\"  qvel:\"",[58,105574,105575],{"class":75},", np.round(data.qvel.copy(), ",[58,105577,1079],{"class":82},[58,105579,31141],{"class":75},[58,105581,105582],{"class":60,"line":2411},[58,105583,3046],{"emptyLinePlaceholder":720},[58,105585,105586],{"class":60,"line":2425},[58,105587,3046],{"emptyLinePlaceholder":720},[58,105589,105590,105592,105594,105596,105598],{"class":60,"line":2430},[58,105591,32591],{"class":92},[58,105593,2619],{"class":379},[58,105595,102027],{"class":75},[58,105597,96315],{"class":82},[58,105599,4385],{"class":75},[58,105601,105602,105604,105606,105608,105610],{"class":60,"line":3223},[58,105603,102036],{"class":75},[58,105605,383],{"class":92},[58,105607,102041],{"class":75},[58,105609,101943],{"class":82},[58,105611,799],{"class":75},[58,105613,105614,105616,105618],{"class":60,"line":3237},[58,105615,102050],{"class":75},[58,105617,383],{"class":92},[58,105619,102055],{"class":75},[58,105621,105622],{"class":60,"line":3245},[58,105623,3046],{"emptyLinePlaceholder":720},[58,105625,105626,105629,105632],{"class":60,"line":3250},[58,105627,105628],{"class":75},"    print_state(",[58,105630,105631],{"class":386},"\"initial\"",[58,105633,105634],{"class":75},", model, data)\n",[58,105636,105637],{"class":60,"line":3256},[58,105638,3046],{"emptyLinePlaceholder":720},[58,105640,105641,105643,105645,105647,105649,105651,105653],{"class":60,"line":3262},[58,105642,3847],{"class":92},[58,105644,102130],{"class":75},[58,105646,26687],{"class":92},[58,105648,33087],{"class":82},[58,105650,793],{"class":75},[58,105652,1442],{"class":82},[58,105654,31430],{"class":75},[58,105656,105657],{"class":60,"line":3267},[58,105658,102145],{"class":75},[58,105660,105661],{"class":60,"line":8594},[58,105662,3046],{"emptyLinePlaceholder":720},[58,105664,105665,105667,105670],{"class":60,"line":8618},[58,105666,105628],{"class":75},[58,105668,105669],{"class":386},"\"after 50 steps\"",[58,105671,105634],{"class":75},[58,105673,105674],{"class":60,"line":8623},[58,105675,3046],{"emptyLinePlaceholder":720},[58,105677,105678],{"class":60,"line":8629},[58,105679,105680],{"class":75},"    mujoco.mj_resetData(model, data)\n",[58,105682,105683,105685,105688],{"class":60,"line":8656},[58,105684,105628],{"class":75},[58,105686,105687],{"class":386},"\"after reset\"",[58,105689,105634],{"class":75},[58,105691,105692],{"class":60,"line":8661},[58,105693,3046],{"emptyLinePlaceholder":720},[58,105695,105696,105699,105701,105703,105705],{"class":60,"line":8667},[58,105697,105698],{"class":75},"    data.qpos[",[58,105700,867],{"class":82},[58,105702,5089],{"class":75},[58,105704,383],{"class":92},[58,105706,105337],{"class":82},[58,105708,105709],{"class":60,"line":8679},[58,105710,105711],{"class":75},"    mujoco.mj_forward(model, data)\n",[58,105713,105714,105716,105719],{"class":60,"line":8691},[58,105715,105628],{"class":75},[58,105717,105718],{"class":386},"\"after manual qpos edit\"",[58,105720,105634],{"class":75},[58,105722,105723],{"class":60,"line":8703},[58,105724,3046],{"emptyLinePlaceholder":720},[58,105726,105727],{"class":60,"line":10361},[58,105728,3046],{"emptyLinePlaceholder":720},[58,105730,105731,105733,105735,105737,105739],{"class":60,"line":10386},[58,105732,2180],{"class":92},[58,105734,31864],{"class":82},[58,105736,102188],{"class":92},[58,105738,102191],{"class":386},[58,105740,4385],{"class":75},[58,105742,105743],{"class":60,"line":10409},[58,105744,102198],{"class":75},[175,105746,104199],{},[48,105748,105750],{"className":24465,"code":105749,"language":24467,"meta":53,"style":53},"touch ch3_python_state.py\n",[55,105751,105752],{"__ignoreMap":53},[58,105753,105754,105756],{"class":60,"line":61},[58,105755,101912],{"class":379},[58,105757,105758],{"class":386}," ch3_python_state.py\n",[175,105760,102930],{},[48,105762,105764],{"className":24465,"code":105763,"language":24467,"meta":53,"style":53},"python ch3_python_state.py\n",[55,105765,105766],{"__ignoreMap":53},[58,105767,105768,105770],{"class":60,"line":61},[58,105769,31024],{"class":379},[58,105771,105758],{"class":386},[114,105773,102201],{"id":102201},[175,105775,105776],{},"打印状态的函数：",[48,105778,105780],{"className":31022,"code":105779,"language":31024,"meta":53,"style":53},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[55,105781,105782],{"__ignoreMap":53},[58,105783,105784,105786,105788,105790,105792,105794,105796],{"class":60,"line":61},[58,105785,32591],{"class":92},[58,105787,105505],{"class":379},[58,105789,105508],{"class":75},[58,105791,1952],{"class":82},[58,105793,105513],{"class":75},[58,105795,96315],{"class":82},[58,105797,4385],{"class":75},[175,105799,105800,105801,105803],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[55,105802,34045],{}," 里发生了什么。",[175,105805,105806],{},"推进 50 步：",[48,105808,105810],{"className":31022,"code":105809,"language":31024,"meta":53,"style":53},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[55,105811,105812,105828],{"__ignoreMap":53},[58,105813,105814,105816,105818,105820,105822,105824,105826],{"class":60,"line":61},[58,105815,3671],{"class":92},[58,105817,102130],{"class":75},[58,105819,26687],{"class":92},[58,105821,33087],{"class":82},[58,105823,793],{"class":75},[58,105825,1442],{"class":82},[58,105827,31430],{"class":75},[58,105829,105830],{"class":60,"line":68},[58,105831,102328],{"class":75},[175,105833,105834,105835,105838,105839,105841],{},"由于 ",[55,105836,105837],{},"timestep=0.01","，所以 50 步后时间约为 ",[55,105840,35973],{}," 秒。",[175,105843,105844],{},"重置：",[48,105846,105847],{"className":31022,"code":105155,"language":31024,"meta":53,"style":53},[55,105848,105849],{"__ignoreMap":53},[58,105850,105851],{"class":60,"line":61},[58,105852,105155],{"class":75},[175,105854,105855],{},"这会把时间、位置、速度恢复到初始状态。",[175,105857,105858],{},"手动改高度：",[48,105860,105862],{"className":31022,"code":105861,"language":31024,"meta":53,"style":53},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[55,105863,105864,105876],{"__ignoreMap":53},[58,105865,105866,105868,105870,105872,105874],{"class":60,"line":61},[58,105867,105328],{"class":75},[58,105869,867],{"class":82},[58,105871,5089],{"class":75},[58,105873,383],{"class":92},[58,105875,105337],{"class":82},[58,105877,105878],{"class":60,"line":68},[58,105879,105172],{"class":75},[175,105881,105882,105883,105886,105887,105890],{},"这个例子里 ",[55,105884,105885],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[55,105888,105889],{},"2.0"," 表示把小球放到更高的位置。",[114,105892,102337],{"id":102337},[48,105894,105895],{"className":31022,"code":105779,"language":31024,"meta":53,"style":53},[55,105896,105897],{"__ignoreMap":53},[58,105898,105899,105901,105903,105905,105907,105909,105911],{"class":60,"line":61},[58,105900,32591],{"class":92},[58,105902,105505],{"class":379},[58,105904,105508],{"class":75},[58,105906,1952],{"class":82},[58,105908,105513],{"class":75},[58,105910,96315],{"class":82},[58,105912,4385],{"class":75},[175,105914,105915],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[19,105917,105918,105927,105932],{},[22,105919,105920,105923,105924,105926],{},[55,105921,105922],{},"prefix","：一段文字，比如 ",[55,105925,105631],{},"，用来说明现在打印的是哪个阶段。",[22,105928,105929,105931],{},[55,105930,102714],{},"：MuJoCo 模型。",[22,105933,105934,105936],{},[55,105935,34045],{},"：MuJoCo 当前状态。",[175,105938,105939,1000,105942,105945],{},[55,105940,105941],{},"prefix: str",[55,105943,105944],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[48,105947,105949],{"className":31022,"code":105948,"language":31024,"meta":53,"style":53},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[55,105950,105951],{"__ignoreMap":53},[58,105952,105953,105955,105957,105959,105961,105963],{"class":60,"line":61},[58,105954,31059],{"class":82},[58,105956,793],{"class":75},[58,105958,105556],{"class":386},[58,105960,105559],{"class":75},[58,105962,1079],{"class":82},[58,105964,31141],{"class":75},[175,105966,105967,105970],{},[55,105968,105969],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[48,105972,105974],{"className":31022,"code":105973,"language":31024,"meta":53,"style":53},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[55,105975,105976,105988],{"__ignoreMap":53},[58,105977,105978,105980,105982,105984,105986],{"class":60,"line":61},[58,105979,102263],{"class":75},[58,105981,383],{"class":92},[58,105983,102041],{"class":75},[58,105985,101943],{"class":82},[58,105987,799],{"class":75},[58,105989,105990,105992,105994],{"class":60,"line":68},[58,105991,102287],{"class":75},[58,105993,383],{"class":92},[58,105995,102055],{"class":75},[175,105997,105998],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[48,106000,106002],{"className":31022,"code":106001,"language":31024,"meta":53,"style":53},"print_state(\"initial\", model, data)\n",[55,106003,106004],{"__ignoreMap":53},[58,106005,106006,106009,106011],{"class":60,"line":61},[58,106007,106008],{"class":75},"print_state(",[58,106010,105631],{"class":386},[58,106012,105634],{"class":75},[175,106014,106015,106016,106019],{},"调用刚才定义的 ",[55,106017,106018],{},"print_state"," 函数，打印初始状态。",[48,106021,106022],{"className":31022,"code":105809,"language":31024,"meta":53,"style":53},[55,106023,106024,106040],{"__ignoreMap":53},[58,106025,106026,106028,106030,106032,106034,106036,106038],{"class":60,"line":61},[58,106027,3671],{"class":92},[58,106029,102130],{"class":75},[58,106031,26687],{"class":92},[58,106033,33087],{"class":82},[58,106035,793],{"class":75},[58,106037,1442],{"class":82},[58,106039,31430],{"class":75},[58,106041,106042],{"class":60,"line":68},[58,106043,102328],{"class":75},[175,106045,106046],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[48,106048,106049],{"className":31022,"code":105155,"language":31024,"meta":53,"style":53},[55,106050,106051],{"__ignoreMap":53},[58,106052,106053],{"class":60,"line":61},[58,106054,105155],{"class":75},[175,106056,106057,106058,106060,106061,106063],{},"重置 ",[55,106059,34045],{},"。注意它不会重新创建 ",[55,106062,102714],{},"，因为模型结构没有变，只是状态回到初始值。",[48,106065,106066],{"className":31022,"code":105321,"language":31024,"meta":53,"style":53},[55,106067,106068],{"__ignoreMap":53},[58,106069,106070,106072,106074,106076,106078],{"class":60,"line":61},[58,106071,105328],{"class":75},[58,106073,867],{"class":82},[58,106075,5089],{"class":75},[58,106077,383],{"class":92},[58,106079,105337],{"class":82},[175,106081,106082,106083,1000,106086,1000,106089,106091],{},"这行是“手动改状态”。在 freejoint 中，",[55,106084,106085],{},"qpos[0]",[55,106087,106088],{},"qpos[1]",[55,106090,105885],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[48,106093,106094],{"className":31022,"code":105172,"language":31024,"meta":53,"style":53},[55,106095,106096],{"__ignoreMap":53},[58,106097,106098],{"class":60,"line":61},[58,106099,105172],{"class":75},[175,106101,106102,106103,106105,106106,106108],{},"手动改完 ",[55,106104,104659],{}," 后，调用 ",[55,106107,104879],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,106110,102945],{"id":102944},[175,106112,106113],{},"你会看到:",[19,106115,106116,106121,106126,106129],{},[22,106117,106118,106119],{},"初始时间为 ",[55,106120,979],{},[22,106122,106123,106124],{},"50 步后时间约为 ",[55,106125,35973],{},[22,106127,106128],{},"reset 后状态恢复",[22,106130,106131,106132,106135,106136],{},"手动修改 ",[55,106133,106134],{},"data.qpos[2]"," 后，小球高度变为 ",[55,106137,105889],{},[175,106139,106140,106142],{},[55,106141,105885],{}," 在这个例子中表示自由刚体的 z 坐标。",[175,106144,106145],{},"输出里可以重点看三件事：",[19,106147,106148,106156,106161],{},[22,106149,106150,106152,106153,106155],{},[55,106151,3033],{}," 是否随着 ",[55,106154,101844],{}," 增加。",[22,106157,106158,106160],{},[55,106159,104659],{}," 的 z 坐标是否因为下落而变化。",[22,106162,106163,106165,106166,29029],{},[55,106164,104981],{}," 后时间是否回到 ",[55,106167,979],{},[14,106169,102977],{"id":102976},[19,106171,106172,106178,106184,106190,106193,106202],{},[22,106173,106174,106175,29029],{},"修改 timestep 为 ",[55,106176,106177],{},"0.005",[22,106179,106180,106181,29029],{},"重新运行，检查 50 步后时间是否约为 ",[55,106182,106183],{},"0.25",[22,106185,106186,106187,29029],{},"修改重力为 ",[55,106188,106189],{},"0 0 -1.0",[22,106191,106192],{},"观察小球下降速度是否变慢。",[22,106194,103040,106195,103043,106198,106201],{},[55,106196,106197],{},"data.qpos[2] = 2.0",[55,106199,106200],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[22,106203,106204,106205,106208],{},"注释掉 ",[55,106206,106207],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,106210,103082],{"id":103081},[114,106212,106214,106215,106217],{"id":106213},"修改-dataqpos-后位置没有更新","修改 ",[55,106216,101699],{}," 后位置没有更新",[175,106219,103091],{},[48,106221,106222],{"className":31022,"code":105172,"language":31024,"meta":53,"style":53},[55,106223,106224],{"__ignoreMap":53},[58,106225,106226],{"class":60,"line":61},[58,106227,105172],{"class":75},[114,106229,106230],{"id":106230},"数组维度看不懂",[175,106232,106233],{},"打印模型维度:",[48,106235,106237],{"className":31022,"code":106236,"language":31024,"meta":53,"style":53},"print(model.nq, model.nv, model.nu)\n",[55,106238,106239],{"__ignoreMap":53},[58,106240,106241,106243],{"class":60,"line":61},[58,106242,31059],{"class":82},[58,106244,106245],{"class":75},"(model.nq, model.nv, model.nu)\n",[926,106247,106248,106256],{},[929,106249,106250],{},[932,106251,106252,106254],{},[935,106253,105203],{"align":24379},[935,106255,101329],{"align":24379},[972,106257,106258,106268,106278],{},[932,106259,106260,106265],{},[977,106261,106262],{"align":24379},[55,106263,106264],{},"nq",[977,106266,106267],{"align":24379},"位置变量数量",[932,106269,106270,106275],{},[977,106271,106272],{"align":24379},[55,106273,106274],{},"nv",[977,106276,106277],{"align":24379},"速度变量数量",[932,106279,106280,106284],{},[977,106281,106282],{"align":24379},[55,106283,102791],{},[977,106285,106286],{"align":24379},"控制输入数量",[114,106288,106290,106291,106293],{"id":106289},"误以为-qpos-一定等于关节数","误以为 ",[55,106292,104659],{}," 一定等于关节数",[175,106295,106296,106297,83160,106299,106301,106302,106304],{},"不是。例如 ",[55,106298,102249],{},[55,106300,104659],{}," 是 7 维，但 ",[55,106303,104989],{}," 是 6 维。",[114,106306,106308,106309,106311],{"id":106307},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[55,106310,104659],{}," 的第几位",[175,106313,106314],{},"初学时可以先打印：",[48,106316,106318],{"className":31022,"code":106317,"language":31024,"meta":53,"style":53},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[55,106319,106320,106330,106340,106352],{"__ignoreMap":53},[58,106321,106322,106324,106326,106328],{"class":60,"line":61},[58,106323,31059],{"class":82},[58,106325,793],{"class":75},[58,106327,102068],{"class":386},[58,106329,102071],{"class":75},[58,106331,106332,106334,106336,106338],{"class":60,"line":68},[58,106333,31059],{"class":82},[58,106335,793],{"class":75},[58,106337,102080],{"class":386},[58,106339,102083],{"class":75},[58,106341,106342,106344,106346,106349],{"class":60,"line":79},[58,106343,31059],{"class":82},[58,106345,793],{"class":75},[58,106347,106348],{"class":386},"\"qpos:\"",[58,106350,106351],{"class":75},", data.qpos)\n",[58,106353,106354,106356,106358,106361],{"class":60,"line":105},[58,106355,31059],{"class":82},[58,106357,793],{"class":75},[58,106359,106360],{"class":386},"\"qvel:\"",[58,106362,106363],{"class":75},", data.qvel)\n",[175,106365,106366],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[114,106368,106369],{"id":106369},"仿真结果每次都一样",[175,106371,106372,106373,106375],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[55,106374,104659],{},"、目标点或控制输入。",[14,106377,103236],{"id":103235},[175,106379,106380,106381,25262],{},"Python 控制 MuJoCo 的核心就是读写 ",[55,106382,34045],{},[19,106384,106385,106393,106398,106403],{},[22,106386,106387,106388,101647,106390,106392],{},"用 ",[55,106389,101699],{},[55,106391,101702],{}," 读取状态。",[22,106394,106387,106395,106397],{},[55,106396,101705],{}," 写入控制。",[22,106399,106387,106400,106402],{},[55,106401,101844],{}," 推进时间。",[22,106404,106405,106406,106408],{},"手动改状态后用 ",[55,106407,104879],{}," 刷新派生量。",[175,106410,106411],{},"理解这一章后，就可以进入关节和 actuator 控制。",[702,106413,106414],{},"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":53,"searchDepth":68,"depth":68,"links":106416},[106417,106418,106419,106426,106430,106431,106432,106442],{"id":101275,"depth":68,"text":101276},{"id":101398,"depth":68,"text":101399},{"id":101673,"depth":68,"text":101674,"children":106420},[106421,106423,106425],{"id":105184,"depth":79,"text":106422},"qpos、qvel、ctrl 是什么",{"id":105262,"depth":79,"text":106424},"mj_step 和 mj_forward 的区别",{"id":105351,"depth":79,"text":105352},{"id":101881,"depth":68,"text":101882,"children":106427},[106428,106429],{"id":102201,"depth":79,"text":102201},{"id":102337,"depth":79,"text":102337},{"id":102944,"depth":68,"text":102945},{"id":102976,"depth":68,"text":102977},{"id":103081,"depth":68,"text":103082,"children":106433},[106434,106436,106437,106439,106441],{"id":106213,"depth":79,"text":106435},"修改 data.qpos 后位置没有更新",{"id":106230,"depth":79,"text":106230},{"id":106289,"depth":79,"text":106438},"误以为 qpos 一定等于关节数",{"id":106307,"depth":79,"text":106440},"不知道某个元素在 qpos 的第几位",{"id":106369,"depth":79,"text":106369},{"id":103235,"depth":68,"text":103236},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104947,"description":53},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106449,"title":106450,"body":106451,"description":53,"extension":718,"meta":108141,"navigation":720,"path":108142,"seo":108143,"stem":108144,"__hash__":108145},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106452,"toc":108117},[106453,106456,106458,106461,106463,106488,106491,106510,106513,106515,106517,106541,106543,106557,106559,106600,106602,106626,106628,106631,106665,106667,106680,106683,106751,106760,106764,106767,106801,106807,106810,106814,106853,106856,106876,106880,106923,106925,106954,106957,106963,106966,106968,107362,107364,107376,107378,107389,107391,107394,107423,107431,107434,107469,107472,107474,107482,107485,107487,107498,107508,107528,107531,107567,107579,107627,107646,107688,107701,107729,107734,107755,107765,107783,107786,107820,107823,107843,107846,107865,107871,107873,107876,107882,107888,107898,107901,107907,107916,107918,107964,107966,107972,107978,107981,107984,108004,108007,108013,108019,108021,108044,108047,108050,108059,108062,108100,108102,108105,108111,108114],[10,106454,106450],{"id":106455},"_4关节actuator-与力控制",[14,106457,101276],{"id":101275},[175,106459,106460],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[175,106462,104960],{},[19,106464,106465,106471,106476,106480,106485],{},[22,106466,106467,106470],{},[55,106468,106469],{},"hinge"," 关节",[22,106472,106473],{},[55,106474,106475],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[22,106477,106478],{},[55,106479,101705],{},[22,106481,106482],{},[55,106483,106484],{},"ctrlrange",[22,106486,106487],{},"读取关节角和角速度",[175,106489,106490],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[48,106492,106494],{"className":31022,"code":106493,"language":31024,"meta":53,"style":53},"data.ctrl[0] = ...\n",[55,106495,106496],{"__ignoreMap":53},[58,106497,106498,106501,106503,106505,106507],{"class":60,"line":61},[58,106499,106500],{"class":75},"data.ctrl[",[58,106502,979],{"class":82},[58,106504,5089],{"class":75},[58,106506,383],{"class":92},[58,106508,106509],{"class":82}," ...\n",[175,106511,106512],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106514,101399],{"id":101398},[175,106516,101402],{},[48,106518,106519],{"className":24465,"code":105017,"language":24467,"meta":53,"style":53},[55,106520,106521],{"__ignoreMap":53},[58,106522,106523,106525,106527,106529,106531,106533,106535,106537,106539],{"class":60,"line":61},[58,106524,25220],{"class":379},[58,106526,26959],{"class":386},[58,106528,24477],{"class":386},[58,106530,27044],{"class":82},[58,106532,105032],{"class":386},[58,106534,101427],{"class":386},[58,106536,103130],{"class":386},[58,106538,101443],{"class":386},[58,106540,105041],{"class":386},[175,106542,103448],{},[48,106544,106545],{"className":24465,"code":101548,"language":24467,"meta":53,"style":53},[55,106546,106547],{"__ignoreMap":53},[58,106548,106549,106551,106553,106555],{"class":60,"line":61},[58,106550,24474],{"class":379},[58,106552,24477],{"class":386},[58,106554,101559],{"class":386},[58,106556,101562],{"class":386},[175,106558,103465],{},[48,106560,106562],{"className":24465,"code":106561,"language":24467,"meta":53,"style":53},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[55,106563,106564,106581,106590],{"__ignoreMap":53},[58,106565,106566,106568,106570,106572,106575,106577,106579],{"class":60,"line":61},[58,106567,30974],{"class":379},[58,106569,29820],{"class":386},[58,106571,25759],{"class":82},[58,106573,106574],{"class":386}," mujoco-control",[58,106576,101604],{"class":386},[58,106578,101607],{"class":82},[58,106580,101610],{"class":82},[58,106582,106583,106585,106587],{"class":60,"line":68},[58,106584,30974],{"class":379},[58,106586,101617],{"class":386},[58,106588,106589],{"class":386}," mujoco-control\n",[58,106591,106592,106594,106596,106598],{"class":60,"line":79},[58,106593,24474],{"class":379},[58,106595,24477],{"class":386},[58,106597,101559],{"class":386},[58,106599,101562],{"class":386},[175,106601,101633],{},[19,106603,106604,106610,106617,106623],{},[22,106605,106606,106609],{},[55,106607,106608],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[22,106611,106612,106614,106615,29029],{},[55,106613,101705],{}," 长度等于 ",[55,106616,102787],{},[22,106618,82852,106619,106622],{},[55,106620,106621],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[22,106624,106625],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106627,101674],{"id":101673},[175,106629,106630],{},"关节决定 body 如何运动:",[48,106632,106634],{"className":53705,"code":106633,"language":53707,"meta":53,"style":53},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[55,106635,106636],{"__ignoreMap":53},[58,106637,106638,106640,106642,106644,106646,106649,106651,106653,106655,106658,106660,106663],{"class":60,"line":61},[58,106639,373],{"class":75},[58,106641,103585],{"class":71},[58,106643,15564],{"class":379},[58,106645,383],{"class":75},[58,106647,106648],{"class":386},"\"hinge\"",[58,106650,54460],{"class":379},[58,106652,383],{"class":75},[58,106654,106648],{"class":386},[58,106656,106657],{"class":379}," axis",[58,106659,383],{"class":75},[58,106661,106662],{"class":386},"\"0 1 0\"",[58,106664,101773],{"class":75},[175,106666,103681],{},[19,106668,106669,106674,106677],{},[22,106670,106671,106672],{},"名字是 ",[55,106673,106469],{},[22,106675,106676],{},"类型是旋转关节",[22,106678,106679],{},"绕 y 轴旋转",[175,106681,106682],{},"actuator 决定如何施加控制:",[48,106684,106686],{"className":53705,"code":106685,"language":53707,"meta":53,"style":53},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[55,106687,106688,106697,106743],{"__ignoreMap":53},[58,106689,106690,106692,106695],{"class":60,"line":61},[58,106691,373],{"class":75},[58,106693,106694],{"class":71},"actuator",[58,106696,403],{"class":75},[58,106698,106699,106701,106704,106706,106708,106711,106714,106716,106718,106721,106723,106725,106728,106730,106733,106736,106738,106741],{"class":60,"line":68},[58,106700,52782],{"class":75},[58,106702,106703],{"class":71},"motor",[58,106705,15564],{"class":379},[58,106707,383],{"class":75},[58,106709,106710],{"class":386},"\"hinge_motor\"",[58,106712,106713],{"class":379}," joint",[58,106715,383],{"class":75},[58,106717,106648],{"class":386},[58,106719,106720],{"class":379}," gear",[58,106722,383],{"class":75},[58,106724,4324],{"class":386},[58,106726,106727],{"class":379}," ctrlrange",[58,106729,383],{"class":75},[58,106731,106732],{"class":386},"\"-2 2\"",[58,106734,106735],{"class":379}," ctrllimited",[58,106737,383],{"class":75},[58,106739,106740],{"class":386},"\"true\"",[58,106742,101773],{"class":75},[58,106744,106745,106747,106749],{"class":60,"line":79},[58,106746,52423],{"class":75},[58,106748,106694],{"class":71},[58,106750,403],{"class":75},[175,106752,106753,106756,106757,29029],{},[55,106754,106755],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[55,106758,106759],{},"[-2, 2]",[114,106761,106763],{"id":106762},"joint-和-actuator-的关系","joint 和 actuator 的关系",[175,106765,106766],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[926,106768,106769,106779],{},[929,106770,106771],{},[932,106772,106773,106775,106777],{},[935,106774,26397],{"align":24379},[935,106776,103325],{"align":24379},[935,106778,101363],{"align":24379},[972,106780,106781,106791],{},[932,106782,106783,106785,106788],{},[977,106784,103585],{"align":24379},[977,106786,106787],{"align":24379},"定义能怎么动",[977,106789,106790],{"align":24379},"门轴允许门旋转",[932,106792,106793,106795,106798],{},[977,106794,106694],{"align":24379},[977,106796,106797],{"align":24379},"定义怎么施力或控制",[977,106799,106800],{"align":24379},"人推门、马达带动门",[175,106802,106803,106804,106806],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[55,106805,101705],{}," 主动控制它。",[175,106808,106809],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[114,106811,106813],{"id":106812},"hinge-joint","hinge joint",[48,106815,106817],{"className":53705,"code":106816,"language":53707,"meta":53,"style":53},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[55,106818,106819],{"__ignoreMap":53},[58,106820,106821,106823,106825,106827,106829,106831,106833,106835,106837,106839,106841,106843,106846,106848,106851],{"class":60,"line":61},[58,106822,373],{"class":75},[58,106824,103585],{"class":71},[58,106826,15564],{"class":379},[58,106828,383],{"class":75},[58,106830,106648],{"class":386},[58,106832,54460],{"class":379},[58,106834,383],{"class":75},[58,106836,106648],{"class":386},[58,106838,106657],{"class":379},[58,106840,383],{"class":75},[58,106842,106662],{"class":386},[58,106844,106845],{"class":379}," damping",[58,106847,383],{"class":75},[58,106849,106850],{"class":386},"\"0.1\"",[58,106852,101773],{"class":75},[175,106854,106855],{},"含义：",[19,106857,106858,106864,106870],{},[22,106859,106860,106863],{},[55,106861,106862],{},"type=\"hinge\"","：只能绕一个轴旋转。",[22,106865,106866,106869],{},[55,106867,106868],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[22,106871,106872,106875],{},[55,106873,106874],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[114,106877,106879],{"id":106878},"motor-actuator","motor actuator",[48,106881,106883],{"className":53705,"code":106882,"language":53707,"meta":53,"style":53},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[55,106884,106885],{"__ignoreMap":53},[58,106886,106887,106889,106891,106893,106895,106897,106899,106901,106903,106905,106907,106909,106911,106913,106915,106917,106919,106921],{"class":60,"line":61},[58,106888,373],{"class":75},[58,106890,106703],{"class":71},[58,106892,15564],{"class":379},[58,106894,383],{"class":75},[58,106896,106710],{"class":386},[58,106898,106713],{"class":379},[58,106900,383],{"class":75},[58,106902,106648],{"class":386},[58,106904,106720],{"class":379},[58,106906,383],{"class":75},[58,106908,4324],{"class":386},[58,106910,106727],{"class":379},[58,106912,383],{"class":75},[58,106914,106732],{"class":386},[58,106916,106735],{"class":379},[58,106918,383],{"class":75},[58,106920,106740],{"class":386},[58,106922,101773],{"class":75},[175,106924,106855],{},[19,106926,106927,106936,106942,106948],{},[22,106928,106929,106932,106933,106935],{},[55,106930,106931],{},"joint=\"hinge\"","：这个电机作用在名为 ",[55,106934,106469],{}," 的关节上。",[22,106937,106938,106941],{},[55,106939,106940],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[22,106943,106944,106947],{},[55,106945,106946],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[22,106949,106950,106953],{},[55,106951,106952],{},"ctrllimited=\"true\"","：启用控制范围限制。",[175,106955,106956],{},"简单理解：",[48,106958,106961],{"className":106959,"code":106960,"language":5833,"meta":53},[5831],"实际施加效果 ≈ data.ctrl[0] * gear\n",[55,106962,106960],{"__ignoreMap":53},[175,106964,106965],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,106967,101882],{"id":101881},[48,106969,106971],{"className":31022,"code":106970,"language":31024,"meta":53,"style":53},"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",[55,106972,106973,106980,106984,106990,107000,107004,107008,107016,107021,107026,107030,107034,107039,107044,107048,107053,107058,107063,107068,107072,107076,107080,107085,107090,107095,107099,107103,107107,107111,107123,107135,107143,107147,107157,107167,107177,107181,107194,107207,107211,107228,107242,107277,107281,107285,107296,107311,107326,107338,107342,107346,107358],{"__ignoreMap":53},[58,106974,106975,106977],{"class":60,"line":61},[58,106976,31036],{"class":92},[58,106978,106979],{"class":75}," math\n",[58,106981,106982],{"class":60,"line":68},[58,106983,3046],{"emptyLinePlaceholder":720},[58,106985,106986,106988],{"class":60,"line":79},[58,106987,31036],{"class":92},[58,106989,101930],{"class":75},[58,106991,106992,106994,106996,106998],{"class":60,"line":105},[58,106993,31036],{"class":92},[58,106995,32024],{"class":75},[58,106997,32027],{"class":92},[58,106999,32030],{"class":75},[58,107001,107002],{"class":60,"line":627},[58,107003,3046],{"emptyLinePlaceholder":720},[58,107005,107006],{"class":60,"line":509},[58,107007,3046],{"emptyLinePlaceholder":720},[58,107009,107010,107012,107014],{"class":60,"line":559},[58,107011,101943],{"class":82},[58,107013,14208],{"class":92},[58,107015,101948],{"class":386},[58,107017,107018],{"class":60,"line":654},[58,107019,107020],{"class":386},"\u003Cmujoco model=\"one_link_motor\">\n",[58,107022,107023],{"class":60,"line":671},[58,107024,107025],{"class":386},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[58,107027,107028],{"class":60,"line":677},[58,107029,3046],{"emptyLinePlaceholder":720},[58,107031,107032],{"class":60,"line":2260},[58,107033,101967],{"class":386},[58,107035,107036],{"class":60,"line":694},[58,107037,107038],{"class":386},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[58,107040,107041],{"class":60,"line":2270},[58,107042,107043],{"class":386},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[58,107045,107046],{"class":60,"line":2275},[58,107047,3046],{"emptyLinePlaceholder":720},[58,107049,107050],{"class":60,"line":2289},[58,107051,107052],{"class":386},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[58,107054,107055],{"class":60,"line":2294},[58,107056,107057],{"class":386},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[58,107059,107060],{"class":60,"line":2300},[58,107061,107062],{"class":386},"        \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",[58,107064,107065],{"class":60,"line":2321},[58,107066,107067],{"class":386},"      \u003C\u002Fbody>\n",[58,107069,107070],{"class":60,"line":2326},[58,107071,101996],{"class":386},[58,107073,107074],{"class":60,"line":2340},[58,107075,102001],{"class":386},[58,107077,107078],{"class":60,"line":2345},[58,107079,3046],{"emptyLinePlaceholder":720},[58,107081,107082],{"class":60,"line":2374},[58,107083,107084],{"class":386},"  \u003Cactuator>\n",[58,107086,107087],{"class":60,"line":2379},[58,107088,107089],{"class":386},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[58,107091,107092],{"class":60,"line":2396},[58,107093,107094],{"class":386},"  \u003C\u002Factuator>\n",[58,107096,107097],{"class":60,"line":2401},[58,107098,102006],{"class":386},[58,107100,107101],{"class":60,"line":2406},[58,107102,96327],{"class":386},[58,107104,107105],{"class":60,"line":2411},[58,107106,3046],{"emptyLinePlaceholder":720},[58,107108,107109],{"class":60,"line":2425},[58,107110,3046],{"emptyLinePlaceholder":720},[58,107112,107113,107115,107117,107119,107121],{"class":60,"line":2430},[58,107114,32591],{"class":92},[58,107116,2619],{"class":379},[58,107118,102027],{"class":75},[58,107120,96315],{"class":82},[58,107122,4385],{"class":75},[58,107124,107125,107127,107129,107131,107133],{"class":60,"line":3223},[58,107126,102036],{"class":75},[58,107128,383],{"class":92},[58,107130,102041],{"class":75},[58,107132,101943],{"class":82},[58,107134,799],{"class":75},[58,107136,107137,107139,107141],{"class":60,"line":3237},[58,107138,102050],{"class":75},[58,107140,383],{"class":92},[58,107142,102055],{"class":75},[58,107144,107145],{"class":60,"line":3245},[58,107146,3046],{"emptyLinePlaceholder":720},[58,107148,107149,107151,107153,107155],{"class":60,"line":3250},[58,107150,31943],{"class":82},[58,107152,793],{"class":75},[58,107154,102068],{"class":386},[58,107156,102071],{"class":75},[58,107158,107159,107161,107163,107165],{"class":60,"line":3256},[58,107160,31943],{"class":82},[58,107162,793],{"class":75},[58,107164,102080],{"class":386},[58,107166,102083],{"class":75},[58,107168,107169,107171,107173,107175],{"class":60,"line":3262},[58,107170,31943],{"class":82},[58,107172,793],{"class":75},[58,107174,102092],{"class":386},[58,107176,102095],{"class":75},[58,107178,107179],{"class":60,"line":3267},[58,107180,3046],{"emptyLinePlaceholder":720},[58,107182,107183,107185,107188,107190,107192],{"class":60,"line":8594},[58,107184,3747],{"class":92},[58,107186,107187],{"class":75}," model.nu ",[58,107189,21591],{"class":92},[58,107191,25762],{"class":82},[58,107193,4385],{"class":75},[58,107195,107196,107198,107200,107202,107205],{"class":60,"line":8618},[58,107197,104061],{"class":92},[58,107199,104064],{"class":82},[58,107201,793],{"class":75},[58,107203,107204],{"class":386},"\"expected exactly one actuator\"",[58,107206,799],{"class":75},[58,107208,107209],{"class":60,"line":8623},[58,107210,3046],{"emptyLinePlaceholder":720},[58,107212,107213,107215,107217,107219,107221,107223,107226],{"class":60,"line":8629},[58,107214,3847],{"class":92},[58,107216,32260],{"class":75},[58,107218,26687],{"class":92},[58,107220,33087],{"class":82},[58,107222,793],{"class":75},[58,107224,107225],{"class":82},"2000",[58,107227,31430],{"class":75},[58,107229,107230,107233,107235,107237,107239],{"class":60,"line":8656},[58,107231,107232],{"class":75},"        t ",[58,107234,383],{"class":92},[58,107236,32260],{"class":75},[58,107238,1241],{"class":92},[58,107240,107241],{"class":75}," model.opt.timestep\n",[58,107243,107244,107247,107249,107251,107253,107256,107258,107261,107263,107265,107268,107270,107272,107274],{"class":60,"line":8661},[58,107245,107246],{"class":75},"        data.ctrl[",[58,107248,979],{"class":82},[58,107250,5089],{"class":75},[58,107252,383],{"class":92},[58,107254,107255],{"class":82}," 1.5",[58,107257,7164],{"class":92},[58,107259,107260],{"class":75}," math.sin(",[58,107262,105889],{"class":82},[58,107264,7164],{"class":92},[58,107266,107267],{"class":75}," math.pi ",[58,107269,1241],{"class":92},[58,107271,62499],{"class":82},[58,107273,7164],{"class":92},[58,107275,107276],{"class":75}," t)\n",[58,107278,107279],{"class":60,"line":8667},[58,107280,102145],{"class":75},[58,107282,107283],{"class":60,"line":8679},[58,107284,3046],{"emptyLinePlaceholder":720},[58,107286,107287,107289,107291,107294],{"class":60,"line":8691},[58,107288,31943],{"class":82},[58,107290,793],{"class":75},[58,107292,107293],{"class":386},"\"time:\"",[58,107295,102107],{"class":75},[58,107297,107298,107300,107302,107305,107307,107309],{"class":60,"line":8703},[58,107299,31943],{"class":82},[58,107301,793],{"class":75},[58,107303,107304],{"class":386},"\"joint qpos:\"",[58,107306,105559],{"class":75},[58,107308,1079],{"class":82},[58,107310,31141],{"class":75},[58,107312,107313,107315,107317,107320,107322,107324],{"class":60,"line":10361},[58,107314,31943],{"class":82},[58,107316,793],{"class":75},[58,107318,107319],{"class":386},"\"joint qvel:\"",[58,107321,105575],{"class":75},[58,107323,1079],{"class":82},[58,107325,31141],{"class":75},[58,107327,107328,107330,107332,107335],{"class":60,"line":10386},[58,107329,31943],{"class":82},[58,107331,793],{"class":75},[58,107333,107334],{"class":386},"\"last ctrl:\"",[58,107336,107337],{"class":75},", data.ctrl.copy())\n",[58,107339,107340],{"class":60,"line":10409},[58,107341,3046],{"emptyLinePlaceholder":720},[58,107343,107344],{"class":60,"line":10433},[58,107345,3046],{"emptyLinePlaceholder":720},[58,107347,107348,107350,107352,107354,107356],{"class":60,"line":10438},[58,107349,2180],{"class":92},[58,107351,31864],{"class":82},[58,107353,102188],{"class":92},[58,107355,102191],{"class":386},[58,107357,4385],{"class":75},[58,107359,107360],{"class":60,"line":10443},[58,107361,102198],{"class":75},[175,107363,104199],{},[48,107365,107367],{"className":24465,"code":107366,"language":24467,"meta":53,"style":53},"touch ch4_joint_motor.py\n",[55,107368,107369],{"__ignoreMap":53},[58,107370,107371,107373],{"class":60,"line":61},[58,107372,101912],{"class":379},[58,107374,107375],{"class":386}," ch4_joint_motor.py\n",[175,107377,102930],{},[48,107379,107381],{"className":24465,"code":107380,"language":24467,"meta":53,"style":53},"python ch4_joint_motor.py\n",[55,107382,107383],{"__ignoreMap":53},[58,107384,107385,107387],{"class":60,"line":61},[58,107386,31024],{"class":379},[58,107388,107375],{"class":386},[114,107390,102201],{"id":102201},[175,107392,107393],{},"检查 actuator 数量：",[48,107395,107397],{"className":31022,"code":107396,"language":31024,"meta":53,"style":53},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[55,107398,107399,107411],{"__ignoreMap":53},[58,107400,107401,107403,107405,107407,107409],{"class":60,"line":61},[58,107402,2180],{"class":92},[58,107404,107187],{"class":75},[58,107406,21591],{"class":92},[58,107408,25762],{"class":82},[58,107410,4385],{"class":75},[58,107412,107413,107415,107417,107419,107421],{"class":60,"line":68},[58,107414,104524],{"class":92},[58,107416,104064],{"class":82},[58,107418,793],{"class":75},[58,107420,107204],{"class":386},[58,107422,799],{"class":75},[175,107424,107425,107427,107428,107430],{},[55,107426,102787],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[55,107429,101705],{}," 长度应该是 1。",[175,107432,107433],{},"产生正弦控制信号：",[48,107435,107437],{"className":31022,"code":107436,"language":31024,"meta":53,"style":53},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[55,107438,107439],{"__ignoreMap":53},[58,107440,107441,107443,107445,107447,107449,107451,107453,107455,107457,107459,107461,107463,107465,107467],{"class":60,"line":61},[58,107442,106500],{"class":75},[58,107444,979],{"class":82},[58,107446,5089],{"class":75},[58,107448,383],{"class":92},[58,107450,107255],{"class":82},[58,107452,7164],{"class":92},[58,107454,107260],{"class":75},[58,107456,105889],{"class":82},[58,107458,7164],{"class":92},[58,107460,107267],{"class":75},[58,107462,1241],{"class":92},[58,107464,62499],{"class":82},[58,107466,7164],{"class":92},[58,107468,107276],{"class":75},[175,107470,107471],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[175,107473,102302],{},[48,107475,107476],{"className":31022,"code":105134,"language":31024,"meta":53,"style":53},[55,107477,107478],{"__ignoreMap":53},[58,107479,107480],{"class":60,"line":61},[58,107481,105134],{"class":75},[175,107483,107484],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[114,107486,102337],{"id":102337},[48,107488,107490],{"className":31022,"code":107489,"language":31024,"meta":53,"style":53},"import math\n",[55,107491,107492],{"__ignoreMap":53},[58,107493,107494,107496],{"class":60,"line":61},[58,107495,31036],{"class":92},[58,107497,106979],{"class":75},[175,107499,107500,107501,101647,107504,107507],{},"导入 Python 标准库里的数学模块。后面要用 ",[55,107502,107503],{},"math.sin",[55,107505,107506],{},"math.pi"," 生成周期变化的控制信号。",[48,107509,107510],{"className":31022,"code":104315,"language":31024,"meta":53,"style":53},[55,107511,107512,107518],{"__ignoreMap":53},[58,107513,107514,107516],{"class":60,"line":61},[58,107515,31036],{"class":92},[58,107517,101930],{"class":75},[58,107519,107520,107522,107524,107526],{"class":60,"line":68},[58,107521,31036],{"class":92},[58,107523,32024],{"class":75},[58,107525,32027],{"class":92},[58,107527,32030],{"class":75},[175,107529,107530],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[48,107532,107533],{"className":53705,"code":106816,"language":53707,"meta":53,"style":53},[55,107534,107535],{"__ignoreMap":53},[58,107536,107537,107539,107541,107543,107545,107547,107549,107551,107553,107555,107557,107559,107561,107563,107565],{"class":60,"line":61},[58,107538,373],{"class":75},[58,107540,103585],{"class":71},[58,107542,15564],{"class":379},[58,107544,383],{"class":75},[58,107546,106648],{"class":386},[58,107548,54460],{"class":379},[58,107550,383],{"class":75},[58,107552,106648],{"class":386},[58,107554,106657],{"class":379},[58,107556,383],{"class":75},[58,107558,106662],{"class":386},[58,107560,106845],{"class":379},[58,107562,383],{"class":75},[58,107564,106850],{"class":386},[58,107566,101773],{"class":75},[175,107568,107569,107570,107572,107573,107575,107576,107578],{},"这行定义关节。",[55,107571,106469],{}," 表示旋转关节。",[55,107574,106868],{}," 表示绕 y 轴旋转。",[55,107577,106874],{}," 表示有一点阻尼，运动不会完全无损耗。",[48,107580,107582],{"className":53705,"code":107581,"language":53707,"meta":53,"style":53},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[55,107583,107584],{"__ignoreMap":53},[58,107585,107586,107588,107590,107592,107594,107597,107599,107601,107604,107607,107609,107612,107614,107616,107618,107620,107622,107625],{"class":60,"line":61},[58,107587,373],{"class":75},[58,107589,101749],{"class":71},[58,107591,15564],{"class":379},[58,107593,383],{"class":75},[58,107595,107596],{"class":386},"\"link_geom\"",[58,107598,54460],{"class":379},[58,107600,383],{"class":75},[58,107602,107603],{"class":386},"\"capsule\"",[58,107605,107606],{"class":379}," fromto",[58,107608,383],{"class":75},[58,107610,107611],{"class":386},"\"0 0 0 0 0 0.5\"",[58,107613,101765],{"class":379},[58,107615,383],{"class":75},[58,107617,104407],{"class":386},[58,107619,102630],{"class":379},[58,107621,383],{"class":75},[58,107623,107624],{"class":386},"\"0.5\"",[58,107626,101773],{"class":75},[175,107628,107629,107630,107632,107633,107635,107636,107639,107640,29029,107643,107645],{},"这行定义摆杆的形状。",[55,107631,103794],{}," 是胶囊体，适合表示杆子。",[55,107634,103805],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[55,107637,107638],{},"(0,0,0)"," 延伸到 ",[55,107641,107642],{},"(0,0,0.5)",[55,107644,103799],{}," 是半径。",[48,107647,107648],{"className":53705,"code":106882,"language":53707,"meta":53,"style":53},[55,107649,107650],{"__ignoreMap":53},[58,107651,107652,107654,107656,107658,107660,107662,107664,107666,107668,107670,107672,107674,107676,107678,107680,107682,107684,107686],{"class":60,"line":61},[58,107653,373],{"class":75},[58,107655,106703],{"class":71},[58,107657,15564],{"class":379},[58,107659,383],{"class":75},[58,107661,106710],{"class":386},[58,107663,106713],{"class":379},[58,107665,383],{"class":75},[58,107667,106648],{"class":386},[58,107669,106720],{"class":379},[58,107671,383],{"class":75},[58,107673,4324],{"class":386},[58,107675,106727],{"class":379},[58,107677,383],{"class":75},[58,107679,106732],{"class":386},[58,107681,106735],{"class":379},[58,107683,383],{"class":75},[58,107685,106740],{"class":386},[58,107687,101773],{"class":75},[175,107689,107690,107691,107693,107694,107697,107698,107700],{},"这行定义电机。它作用在 ",[55,107692,106469],{}," 关节上。",[55,107695,107696],{},"gear"," 可以理解成放大倍数。",[55,107699,106484],{}," 限制控制输入范围。",[48,107702,107703],{"className":31022,"code":107396,"language":31024,"meta":53,"style":53},[55,107704,107705,107717],{"__ignoreMap":53},[58,107706,107707,107709,107711,107713,107715],{"class":60,"line":61},[58,107708,2180],{"class":92},[58,107710,107187],{"class":75},[58,107712,21591],{"class":92},[58,107714,25762],{"class":82},[58,107716,4385],{"class":75},[58,107718,107719,107721,107723,107725,107727],{"class":60,"line":68},[58,107720,104524],{"class":92},[58,107722,104064],{"class":82},[58,107724,793],{"class":75},[58,107726,107204],{"class":386},[58,107728,799],{"class":75},[175,107730,107731,107733],{},[55,107732,102787],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[48,107735,107737],{"className":31022,"code":107736,"language":31024,"meta":53,"style":53},"for step in range(2000):\n",[55,107738,107739],{"__ignoreMap":53},[58,107740,107741,107743,107745,107747,107749,107751,107753],{"class":60,"line":61},[58,107742,3671],{"class":92},[58,107744,32260],{"class":75},[58,107746,26687],{"class":92},[58,107748,33087],{"class":82},[58,107750,793],{"class":75},[58,107752,107225],{"class":82},[58,107754,31430],{"class":75},[175,107756,107757,107758,107760,107761,107764],{},"循环 2000 步。这里没有用 ",[55,107759,1776],{},"，而是用 ",[55,107762,107763],{},"step","，因为后面要用当前步数计算时间。",[48,107766,107768],{"className":31022,"code":107767,"language":31024,"meta":53,"style":53},"t = step * model.opt.timestep\n",[55,107769,107770],{"__ignoreMap":53},[58,107771,107772,107775,107777,107779,107781],{"class":60,"line":61},[58,107773,107774],{"class":75},"t ",[58,107776,383],{"class":92},[58,107778,32260],{"class":75},[58,107780,1241],{"class":92},[58,107782,107241],{"class":75},[175,107784,107785],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[48,107787,107788],{"className":31022,"code":107436,"language":31024,"meta":53,"style":53},[55,107789,107790],{"__ignoreMap":53},[58,107791,107792,107794,107796,107798,107800,107802,107804,107806,107808,107810,107812,107814,107816,107818],{"class":60,"line":61},[58,107793,106500],{"class":75},[58,107795,979],{"class":82},[58,107797,5089],{"class":75},[58,107799,383],{"class":92},[58,107801,107255],{"class":82},[58,107803,7164],{"class":92},[58,107805,107260],{"class":75},[58,107807,105889],{"class":82},[58,107809,7164],{"class":92},[58,107811,107267],{"class":75},[58,107813,1241],{"class":92},[58,107815,62499],{"class":82},[58,107817,7164],{"class":92},[58,107819,107276],{"class":75},[175,107821,107822],{},"这行给电机输入一个正弦波。拆开看：",[19,107824,107825,107831,107837],{},[22,107826,107827,107830],{},[55,107828,107829],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[22,107832,107833,107836],{},[55,107834,107835],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[22,107838,107839,107842],{},[55,107840,107841],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[175,107844,107845],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[48,107847,107849],{"className":31022,"code":107848,"language":31024,"meta":53,"style":53},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[55,107850,107851],{"__ignoreMap":53},[58,107852,107853,107855,107857,107859,107861,107863],{"class":60,"line":61},[58,107854,31059],{"class":82},[58,107856,793],{"class":75},[58,107858,107304],{"class":386},[58,107860,105559],{"class":75},[58,107862,1079],{"class":82},[58,107864,31141],{"class":75},[175,107866,107867,107868,107870],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[55,107869,101699],{}," 只有一个数。",[14,107872,102945],{"id":102944},[175,107874,107875],{},"输出类似:",[48,107877,107880],{"className":107878,"code":107879,"language":5833,"meta":53},[5831],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[55,107881,107879],{"__ignoreMap":53},[175,107883,107884,107885,107887],{},"这里 ",[55,107886,106755],{}," 是电机输入。",[175,107889,107890,107893,107894,107897],{},[55,107891,107892],{},"joint qpos"," 是关节角度，单位通常是弧度。",[55,107895,107896],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[175,107899,107900],{},"角度单位提示：",[48,107902,107905],{"className":107903,"code":107904,"language":5833,"meta":53},[5831],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[55,107906,107904],{"__ignoreMap":53},[175,107908,107909,107910,107912,107913,107915],{},"如果你看到 ",[55,107911,104659],{}," 是 ",[55,107914,35973],{},"，大约就是 28.6 度。",[14,107917,102977],{"id":102976},[19,107919,107920,107927,107930,107937,107940,107948,107956],{},[22,107921,103040,107922,103043,107924,29029],{},[55,107923,106940],{},[55,107925,107926],{},"gear=\"5\"",[22,107928,107929],{},"重新运行，观察关节运动是否更剧烈。",[22,107931,103040,107932,103043,107934,29029],{},[55,107933,106484],{},[55,107935,107936],{},"-0.2 0.2",[22,107938,107939],{},"重新运行，观察控制能力是否变弱。",[22,107941,107942,107943,107945,107946,29029],{},"去掉 actuator，确认 ",[55,107944,102787],{}," 变成 ",[55,107947,979],{},[22,107949,103040,107950,103043,107952,107955],{},[55,107951,106874],{},[55,107953,107954],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[22,107957,103040,107958,103043,107960,107963],{},[55,107959,106868],{},[55,107961,107962],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,107965,103082],{"id":103081},[114,107967,107969],{"id":107968},"indexerror-index-0-is-out-of-bounds",[55,107970,107971],{},"IndexError: index 0 is out of bounds",[175,107973,107974,107975,107977],{},"原因是 ",[55,107976,106621],{},"，没有 actuator。",[114,107979,107980],{"id":107980},"关节几乎不动",[175,107982,107983],{},"可能原因:",[19,107985,107986,107991,107995,108001],{},[22,107987,107988,107990],{},[55,107989,107696],{}," 太小",[22,107992,107993,107990],{},[55,107994,106484],{},[22,107996,107997,108000],{},[55,107998,107999],{},"damping"," 太大",[22,108002,108003],{},"重力方向导致运动不明显",[114,108005,108006],{"id":108006},"模型编译失败",[175,108008,108009,108010,108012],{},"检查 actuator 引用的 ",[55,108011,106931],{}," 是否存在，joint 名称是否拼写一致。",[114,108014,108016,108018],{"id":108015},"datactrl0-写了但没有效果",[55,108017,106755],{}," 写了但没有效果",[175,108020,103204],{},[19,108022,108023,108028,108031,108036,108041],{},[22,108024,108025,108027],{},[55,108026,102787],{}," 是否大于 0。",[22,108029,108030],{},"motor 是否引用了正确 joint。",[22,108032,108033,108035],{},[55,108034,107696],{}," 是否太小。",[22,108037,108038,108040],{},[55,108039,106484],{}," 是否把输入限制得太小。",[22,108042,108043],{},"body 是否真的有可动 joint。",[114,108045,108046],{"id":108046},"控制输入超过范围会怎样",[175,108048,108049],{},"如果设置了：",[48,108051,108053],{"className":53705,"code":108052,"language":53707,"meta":53,"style":53},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[55,108054,108055],{"__ignoreMap":53},[58,108056,108057],{"class":60,"line":61},[58,108058,108052],{"class":75},[175,108060,108061],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[48,108063,108065],{"className":31022,"code":108064,"language":31024,"meta":53,"style":53},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[55,108066,108067,108087],{"__ignoreMap":53},[58,108068,108069,108072,108074,108077,108079,108081,108083,108085],{"class":60,"line":61},[58,108070,108071],{"class":75},"action ",[58,108073,383],{"class":92},[58,108075,108076],{"class":75}," np.clip(action, ",[58,108078,1318],{"class":92},[58,108080,105889],{"class":82},[58,108082,469],{"class":75},[58,108084,105889],{"class":82},[58,108086,799],{"class":75},[58,108088,108089,108091,108093,108095,108097],{"class":60,"line":68},[58,108090,106500],{"class":75},[58,108092,979],{"class":82},[58,108094,5089],{"class":75},[58,108096,383],{"class":92},[58,108098,108099],{"class":75}," action\n",[14,108101,103236],{"id":103235},[175,108103,108104],{},"这一章建立了控制任务的基本形式：",[48,108106,108109],{"className":108107,"code":108108,"language":5833,"meta":53},[5831],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[55,108110,108108],{"__ignoreMap":53},[175,108112,108113],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[702,108115,108116],{},"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":53,"searchDepth":68,"depth":68,"links":108118},[108119,108120,108121,108126,108130,108131,108132,108140],{"id":101275,"depth":68,"text":101276},{"id":101398,"depth":68,"text":101399},{"id":101673,"depth":68,"text":101674,"children":108122},[108123,108124,108125],{"id":106762,"depth":79,"text":106763},{"id":106812,"depth":79,"text":106813},{"id":106878,"depth":79,"text":106879},{"id":101881,"depth":68,"text":101882,"children":108127},[108128,108129],{"id":102201,"depth":79,"text":102201},{"id":102337,"depth":79,"text":102337},{"id":102944,"depth":68,"text":102945},{"id":102976,"depth":68,"text":102977},{"id":103081,"depth":68,"text":103082,"children":108133},[108134,108135,108136,108137,108139],{"id":107968,"depth":79,"text":107971},{"id":107980,"depth":79,"text":107980},{"id":108006,"depth":79,"text":108006},{"id":108015,"depth":79,"text":108138},"data.ctrl[0] 写了但没有效果",{"id":108046,"depth":79,"text":108046},{"id":103235,"depth":68,"text":103236},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106450,"description":53},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108147,"title":108148,"body":108149,"description":53,"extension":718,"meta":110058,"navigation":720,"path":110059,"seo":110060,"stem":110061,"__hash__":110062},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108150,"toc":110034},[108151,108154,108156,108159,108167,108170,108187,108190,108215,108218,108264,108266,108268,108323,108325,108344,108346,108389,108392,108409,108412,108428,108438,108445,108447,108450,108453,108487,108490,108538,108542,108545,108559,108568,108572,108575,108600,108603,108607,108620,108623,108629,108632,108647,108649,108652,108912,108914,108926,108929,109241,109243,109255,109257,109260,109275,109280,109283,109305,109308,109311,109345,109348,109352,109363,109366,109383,109386,109400,109407,109427,109434,109448,109451,109463,109478,109498,109501,109523,109526,109530,109545,109556,109571,109574,109604,109620,109649,109657,109681,109684,109702,109712,109724,109731,109740,109746,109755,109758,109760,109769,109772,109787,109789,109792,109803,109806,109817,109820,109838,109840,109857,109860,109888,109890,109894,109897,109927,109933,109936,109940,109948,109951,109953,109974,109977,109980,109996,109999,110015,110017,110020,110031],[10,108152,108148],{"id":108153},"_5viewer-可视化与-renderer-离屏渲染",[14,108155,101276],{"id":101275},[175,108157,108158],{},"本章掌握两类可视化方式:",[19,108160,108161,108164],{},[22,108162,108163],{},"交互式 viewer: 适合人工观察仿真",[22,108165,108166],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[175,108168,108169],{},"使用官方接口:",[48,108171,108173],{"className":31022,"code":108172,"language":31024,"meta":53,"style":53},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[55,108174,108175,108182],{"__ignoreMap":53},[58,108176,108177,108179],{"class":60,"line":61},[58,108178,31036],{"class":92},[58,108180,108181],{"class":75}," mujoco.viewer\n",[58,108183,108184],{"class":60,"line":68},[58,108185,108186],{"class":75},"mujoco.viewer.launch_passive(model, data)\n",[175,108188,108189],{},"以及:",[48,108191,108193],{"className":31022,"code":108192,"language":31024,"meta":53,"style":53},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[55,108194,108195,108205],{"__ignoreMap":53},[58,108196,108197,108200,108202],{"class":60,"line":61},[58,108198,108199],{"class":75},"renderer ",[58,108201,383],{"class":92},[58,108203,108204],{"class":75}," mujoco.Renderer(model)\n",[58,108206,108207,108210,108212],{"class":60,"line":68},[58,108208,108209],{"class":75},"image ",[58,108211,383],{"class":92},[58,108213,108214],{"class":75}," renderer.render()\n",[175,108216,108217],{},"新手建议先理解二者区别：",[926,108219,108220,108236],{},[929,108221,108222],{},[932,108223,108224,108227,108230,108233],{},[935,108225,108226],{"align":24379},"工具",[935,108228,108229],{"align":24379},"用途",[935,108231,108232],{"align":24379},"是否打开窗口",[935,108234,108235],{"align":24379},"常见场景",[972,108237,108238,108251],{},[932,108239,108240,108243,108246,108248],{},[977,108241,108242],{"align":24379},"Viewer",[977,108244,108245],{"align":24379},"人眼实时观察仿真",[977,108247,105294],{"align":24379},[977,108249,108250],{"align":24379},"调试模型、看控制效果",[932,108252,108253,108256,108259,108261],{},[977,108254,108255],{"align":24379},"Renderer",[977,108257,108258],{"align":24379},"生成图像数组",[977,108260,105307],{"align":24379},[977,108262,108263],{"align":24379},"保存图片、训练视觉策略、服务器批量采集",[14,108265,101399],{"id":101398},[175,108267,101402],{},[48,108269,108271],{"className":24465,"code":108270,"language":24467,"meta":53,"style":53},"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",[55,108272,108273,108285,108295,108303,108311],{"__ignoreMap":53},[58,108274,108275,108277,108279,108281,108283],{"class":60,"line":61},[58,108276,25220],{"class":379},[58,108278,26959],{"class":386},[58,108280,24477],{"class":386},[58,108282,27044],{"class":82},[58,108284,25322],{"class":82},[58,108286,108287,108289,108291,108293],{"class":60,"line":68},[58,108288,101437],{"class":386},[58,108290,101440],{"class":386},[58,108292,101443],{"class":386},[58,108294,25322],{"class":82},[58,108296,108297,108299,108301],{"class":60,"line":79},[58,108298,101450],{"class":386},[58,108300,101453],{"class":386},[58,108302,25322],{"class":82},[58,108304,108305,108307,108309],{"class":60,"line":105},[58,108306,101460],{"class":386},[58,108308,101463],{"class":386},[58,108310,25322],{"class":82},[58,108312,108313,108315,108317,108319,108321],{"class":60,"line":627},[58,108314,101470],{"class":386},[58,108316,101473],{"class":386},[58,108318,101476],{"class":386},[58,108320,101479],{"class":386},[58,108322,103145],{"class":386},[175,108324,103448],{},[48,108326,108328],{"className":24465,"code":108327,"language":24467,"meta":53,"style":53},"pip install \"mujoco>=2.3\" numpy pillow\n",[55,108329,108330],{"__ignoreMap":53},[58,108331,108332,108334,108336,108338,108341],{"class":60,"line":61},[58,108333,24474],{"class":379},[58,108335,24477],{"class":386},[58,108337,101559],{"class":386},[58,108339,108340],{"class":386}," numpy",[58,108342,108343],{"class":386}," pillow\n",[175,108345,103465],{},[48,108347,108349],{"className":24465,"code":108348,"language":24467,"meta":53,"style":53},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[55,108350,108351,108368,108377],{"__ignoreMap":53},[58,108352,108353,108355,108357,108359,108362,108364,108366],{"class":60,"line":61},[58,108354,30974],{"class":379},[58,108356,29820],{"class":386},[58,108358,25759],{"class":82},[58,108360,108361],{"class":386}," mujoco-render",[58,108363,101604],{"class":386},[58,108365,101607],{"class":82},[58,108367,101610],{"class":82},[58,108369,108370,108372,108374],{"class":60,"line":68},[58,108371,30974],{"class":379},[58,108373,101617],{"class":386},[58,108375,108376],{"class":386}," mujoco-render\n",[58,108378,108379,108381,108383,108385,108387],{"class":60,"line":79},[58,108380,24474],{"class":379},[58,108382,24477],{"class":386},[58,108384,101559],{"class":386},[58,108386,108340],{"class":386},[58,108388,108343],{"class":386},[175,108390,108391],{},"离屏渲染后端:",[48,108393,108395],{"className":24465,"code":108394,"language":24467,"meta":53,"style":53},"export MUJOCO_GL=egl\n",[55,108396,108397],{"__ignoreMap":53},[58,108398,108399,108401,108404,108406],{"class":60,"line":61},[58,108400,25686],{"class":92},[58,108402,108403],{"class":75}," MUJOCO_GL",[58,108405,383],{"class":92},[58,108407,108408],{"class":75},"egl\n",[175,108410,108411],{},"或:",[48,108413,108415],{"className":24465,"code":108414,"language":24467,"meta":53,"style":53},"export MUJOCO_GL=osmesa\n",[55,108416,108417],{"__ignoreMap":53},[58,108418,108419,108421,108423,108425],{"class":60,"line":61},[58,108420,25686],{"class":92},[58,108422,108403],{"class":75},[58,108424,383],{"class":92},[58,108426,108427],{"class":75},"osmesa\n",[175,108429,108430,108431,108434,108435,29029],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[55,108432,108433],{},"egl"," 失败，再尝试 ",[55,108436,108437],{},"osmesa",[175,108439,108440,108441,108444],{},"如果你在本机桌面环境运行，通常先不要设置 ",[55,108442,108443],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,108446,101674],{"id":101673},[175,108448,108449],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[175,108451,108452],{},"典型 viewer 流程:",[48,108454,108456],{"className":31022,"code":108455,"language":31024,"meta":53,"style":53},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[55,108457,108458,108471,108478,108482],{"__ignoreMap":53},[58,108459,108460,108463,108466,108468],{"class":60,"line":61},[58,108461,108462],{"class":92},"with",[58,108464,108465],{"class":75}," mujoco.viewer.launch_passive(model, data) ",[58,108467,32027],{"class":92},[58,108469,108470],{"class":75}," viewer:\n",[58,108472,108473,108475],{"class":60,"line":68},[58,108474,2897],{"class":92},[58,108476,108477],{"class":75}," viewer.is_running():\n",[58,108479,108480],{"class":60,"line":79},[58,108481,102145],{"class":75},[58,108483,108484],{"class":60,"line":105},[58,108485,108486],{"class":75},"        viewer.sync()\n",[175,108488,108489],{},"典型 renderer 流程:",[48,108491,108493],{"className":31022,"code":108492,"language":31024,"meta":53,"style":53},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[55,108494,108495,108521,108525,108530],{"__ignoreMap":53},[58,108496,108497,108499,108501,108504,108506,108508,108510,108512,108514,108516,108519],{"class":60,"line":61},[58,108498,108199],{"class":75},[58,108500,383],{"class":92},[58,108502,108503],{"class":75}," mujoco.Renderer(model, ",[58,108505,25625],{"class":5862},[58,108507,383],{"class":92},[58,108509,42986],{"class":82},[58,108511,469],{"class":75},[58,108513,25621],{"class":5862},[58,108515,383],{"class":92},[58,108517,108518],{"class":82},"640",[58,108520,799],{"class":75},[58,108522,108523],{"class":60,"line":68},[58,108524,105134],{"class":75},[58,108526,108527],{"class":60,"line":79},[58,108528,108529],{"class":75},"renderer.update_scene(data)\n",[58,108531,108532,108534,108536],{"class":60,"line":105},[58,108533,108209],{"class":75},[58,108535,383],{"class":92},[58,108537,108214],{"class":75},[114,108539,108541],{"id":108540},"viewer-的同步逻辑","viewer 的同步逻辑",[175,108543,108544],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[48,108546,108548],{"className":31022,"code":108547,"language":31024,"meta":53,"style":53},"mujoco.mj_step(model, data)\nviewer.sync()\n",[55,108549,108550,108554],{"__ignoreMap":53},[58,108551,108552],{"class":60,"line":61},[58,108553,105134],{"class":75},[58,108555,108556],{"class":60,"line":68},[58,108557,108558],{"class":75},"viewer.sync()\n",[175,108560,108561,108563,108564,108567],{},[55,108562,101844],{}," 负责算物理，",[55,108565,108566],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[114,108569,108571],{"id":108570},"为什么要-sleep","为什么要 sleep",[175,108573,108574],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[48,108576,108578],{"className":31022,"code":108577,"language":31024,"meta":53,"style":53},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[55,108579,108580],{"__ignoreMap":53},[58,108581,108582,108585,108587,108590,108592,108595,108597],{"class":60,"line":61},[58,108583,108584],{"class":75},"sleep_time ",[58,108586,383],{"class":92},[58,108588,108589],{"class":75}," model.opt.timestep ",[58,108591,1318],{"class":92},[58,108593,108594],{"class":75}," (time.time() ",[58,108596,1318],{"class":92},[58,108598,108599],{"class":75}," step_start)\n",[175,108601,108602],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[114,108604,108606],{"id":108605},"renderer-输出是什么","renderer 输出是什么",[48,108608,108610],{"className":31022,"code":108609,"language":31024,"meta":53,"style":53},"image = renderer.render()\n",[55,108611,108612],{"__ignoreMap":53},[58,108613,108614,108616,108618],{"class":60,"line":61},[58,108615,108209],{"class":75},[58,108617,383],{"class":92},[58,108619,108214],{"class":75},[175,108621,108622],{},"得到的是 NumPy 数组，形状通常是：",[48,108624,108627],{"className":108625,"code":108626,"language":5833,"meta":53},[5831],"(height, width, 3)\n",[55,108628,108626],{"__ignoreMap":53},[175,108630,108631],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[48,108633,108635],{"className":31022,"code":108634,"language":31024,"meta":53,"style":53},"Image.fromarray(image).save(\"render_output.png\")\n",[55,108636,108637],{"__ignoreMap":53},[58,108638,108639,108642,108645],{"class":60,"line":61},[58,108640,108641],{"class":75},"Image.fromarray(image).save(",[58,108643,108644],{"class":386},"\"render_output.png\"",[58,108646,799],{"class":75},[14,108648,101882],{"id":101881},[175,108650,108651],{},"交互式 Viewer:",[48,108653,108655],{"className":31022,"code":108654,"language":31024,"meta":53,"style":53},"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",[55,108656,108657,108663,108667,108673,108679,108683,108687,108695,108700,108704,108708,108712,108717,108722,108726,108730,108734,108739,108743,108747,108751,108755,108759,108763,108775,108787,108795,108799,108809,108829,108839,108844,108849,108853,108870,108883,108888,108892,108896,108908],{"__ignoreMap":53},[58,108658,108659,108661],{"class":60,"line":61},[58,108660,31036],{"class":92},[58,108662,32473],{"class":75},[58,108664,108665],{"class":60,"line":68},[58,108666,3046],{"emptyLinePlaceholder":720},[58,108668,108669,108671],{"class":60,"line":79},[58,108670,31036],{"class":92},[58,108672,101930],{"class":75},[58,108674,108675,108677],{"class":60,"line":105},[58,108676,31036],{"class":92},[58,108678,108181],{"class":75},[58,108680,108681],{"class":60,"line":627},[58,108682,3046],{"emptyLinePlaceholder":720},[58,108684,108685],{"class":60,"line":509},[58,108686,3046],{"emptyLinePlaceholder":720},[58,108688,108689,108691,108693],{"class":60,"line":559},[58,108690,101943],{"class":82},[58,108692,14208],{"class":92},[58,108694,101948],{"class":386},[58,108696,108697],{"class":60,"line":654},[58,108698,108699],{"class":386},"\u003Cmujoco model=\"viewer_demo\">\n",[58,108701,108702],{"class":60,"line":671},[58,108703,101958],{"class":386},[58,108705,108706],{"class":60,"line":677},[58,108707,3046],{"emptyLinePlaceholder":720},[58,108709,108710],{"class":60,"line":2260},[58,108711,101967],{"class":386},[58,108713,108714],{"class":60,"line":694},[58,108715,108716],{"class":386},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[58,108718,108719],{"class":60,"line":2270},[58,108720,108721],{"class":386},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[58,108723,108724],{"class":60,"line":2275},[58,108725,3046],{"emptyLinePlaceholder":720},[58,108727,108728],{"class":60,"line":2289},[58,108729,101981],{"class":386},[58,108731,108732],{"class":60,"line":2294},[58,108733,101986],{"class":386},[58,108735,108736],{"class":60,"line":2300},[58,108737,108738],{"class":386},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[58,108740,108741],{"class":60,"line":2321},[58,108742,101996],{"class":386},[58,108744,108745],{"class":60,"line":2326},[58,108746,102001],{"class":386},[58,108748,108749],{"class":60,"line":2340},[58,108750,102006],{"class":386},[58,108752,108753],{"class":60,"line":2345},[58,108754,96327],{"class":386},[58,108756,108757],{"class":60,"line":2374},[58,108758,3046],{"emptyLinePlaceholder":720},[58,108760,108761],{"class":60,"line":2379},[58,108762,3046],{"emptyLinePlaceholder":720},[58,108764,108765,108767,108769,108771,108773],{"class":60,"line":2396},[58,108766,32591],{"class":92},[58,108768,2619],{"class":379},[58,108770,102027],{"class":75},[58,108772,96315],{"class":82},[58,108774,4385],{"class":75},[58,108776,108777,108779,108781,108783,108785],{"class":60,"line":2401},[58,108778,102036],{"class":75},[58,108780,383],{"class":92},[58,108782,102041],{"class":75},[58,108784,101943],{"class":82},[58,108786,799],{"class":75},[58,108788,108789,108791,108793],{"class":60,"line":2406},[58,108790,102050],{"class":75},[58,108792,383],{"class":92},[58,108794,102055],{"class":75},[58,108796,108797],{"class":60,"line":2411},[58,108798,3046],{"emptyLinePlaceholder":720},[58,108800,108801,108803,108805,108807],{"class":60,"line":2425},[58,108802,34822],{"class":92},[58,108804,108465],{"class":75},[58,108806,32027],{"class":92},[58,108808,108470],{"class":75},[58,108810,108811,108814,108817,108819,108822,108824,108827],{"class":60,"line":2430},[58,108812,108813],{"class":92},"        while",[58,108815,108816],{"class":75}," viewer.is_running() ",[58,108818,31106],{"class":92},[58,108820,108821],{"class":75}," data.time ",[58,108823,373],{"class":92},[58,108825,108826],{"class":82}," 5.0",[58,108828,4385],{"class":75},[58,108830,108831,108834,108836],{"class":60,"line":3223},[58,108832,108833],{"class":75},"            step_start ",[58,108835,383],{"class":92},[58,108837,108838],{"class":75}," time.time()\n",[58,108840,108841],{"class":60,"line":3237},[58,108842,108843],{"class":75},"            mujoco.mj_step(model, data)\n",[58,108845,108846],{"class":60,"line":3245},[58,108847,108848],{"class":75},"            viewer.sync()\n",[58,108850,108851],{"class":60,"line":3250},[58,108852,3046],{"emptyLinePlaceholder":720},[58,108854,108855,108858,108860,108862,108864,108866,108868],{"class":60,"line":3256},[58,108856,108857],{"class":75},"            sleep_time ",[58,108859,383],{"class":92},[58,108861,108589],{"class":75},[58,108863,1318],{"class":92},[58,108865,108594],{"class":75},[58,108867,1318],{"class":92},[58,108869,108599],{"class":75},[58,108871,108872,108874,108877,108879,108881],{"class":60,"line":3262},[58,108873,5288],{"class":92},[58,108875,108876],{"class":75}," sleep_time ",[58,108878,1744],{"class":92},[58,108880,4739],{"class":82},[58,108882,4385],{"class":75},[58,108884,108885],{"class":60,"line":3267},[58,108886,108887],{"class":75},"                time.sleep(sleep_time)\n",[58,108889,108890],{"class":60,"line":8594},[58,108891,3046],{"emptyLinePlaceholder":720},[58,108893,108894],{"class":60,"line":8618},[58,108895,3046],{"emptyLinePlaceholder":720},[58,108897,108898,108900,108902,108904,108906],{"class":60,"line":8623},[58,108899,2180],{"class":92},[58,108901,31864],{"class":82},[58,108903,102188],{"class":92},[58,108905,102191],{"class":386},[58,108907,4385],{"class":75},[58,108909,108910],{"class":60,"line":8629},[58,108911,102198],{"class":75},[175,108913,104199],{},[48,108915,108917],{"className":24465,"code":108916,"language":24467,"meta":53,"style":53},"touch ch5_viewer.py\n",[55,108918,108919],{"__ignoreMap":53},[58,108920,108921,108923],{"class":60,"line":61},[58,108922,101912],{"class":379},[58,108924,108925],{"class":386}," ch5_viewer.py\n",[175,108927,108928],{},"离屏 Renderer 保存图片:",[48,108930,108932],{"className":31022,"code":108931,"language":31024,"meta":53,"style":53},"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",[55,108933,108934,108946,108950,108956,108966,108970,108974,108982,108987,108991,108995,108999,109003,109008,109012,109016,109020,109024,109028,109032,109036,109040,109044,109048,109052,109064,109076,109084,109109,109113,109129,109133,109137,109152,109161,109165,109179,109184,109189,109193,109205,109217,109221,109225,109237],{"__ignoreMap":53},[58,108935,108936,108938,108941,108943],{"class":60,"line":61},[58,108937,31381],{"class":92},[58,108939,108940],{"class":75}," pathlib ",[58,108942,31036],{"class":92},[58,108944,108945],{"class":75}," Path\n",[58,108947,108948],{"class":60,"line":68},[58,108949,3046],{"emptyLinePlaceholder":720},[58,108951,108952,108954],{"class":60,"line":79},[58,108953,31036],{"class":92},[58,108955,101930],{"class":75},[58,108957,108958,108960,108962,108964],{"class":60,"line":105},[58,108959,31381],{"class":92},[58,108961,47907],{"class":82},[58,108963,47910],{"class":92},[58,108965,47913],{"class":75},[58,108967,108968],{"class":60,"line":627},[58,108969,3046],{"emptyLinePlaceholder":720},[58,108971,108972],{"class":60,"line":509},[58,108973,3046],{"emptyLinePlaceholder":720},[58,108975,108976,108978,108980],{"class":60,"line":559},[58,108977,101943],{"class":82},[58,108979,14208],{"class":92},[58,108981,101948],{"class":386},[58,108983,108984],{"class":60,"line":654},[58,108985,108986],{"class":386},"\u003Cmujoco model=\"renderer_demo\">\n",[58,108988,108989],{"class":60,"line":671},[58,108990,101958],{"class":386},[58,108992,108993],{"class":60,"line":677},[58,108994,3046],{"emptyLinePlaceholder":720},[58,108996,108997],{"class":60,"line":2260},[58,108998,101967],{"class":386},[58,109000,109001],{"class":60,"line":694},[58,109002,108716],{"class":386},[58,109004,109005],{"class":60,"line":2270},[58,109006,109007],{"class":386},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[58,109009,109010],{"class":60,"line":2275},[58,109011,108721],{"class":386},[58,109013,109014],{"class":60,"line":2289},[58,109015,3046],{"emptyLinePlaceholder":720},[58,109017,109018],{"class":60,"line":2294},[58,109019,101981],{"class":386},[58,109021,109022],{"class":60,"line":2300},[58,109023,101986],{"class":386},[58,109025,109026],{"class":60,"line":2321},[58,109027,108738],{"class":386},[58,109029,109030],{"class":60,"line":2326},[58,109031,101996],{"class":386},[58,109033,109034],{"class":60,"line":2340},[58,109035,102001],{"class":386},[58,109037,109038],{"class":60,"line":2345},[58,109039,102006],{"class":386},[58,109041,109042],{"class":60,"line":2374},[58,109043,96327],{"class":386},[58,109045,109046],{"class":60,"line":2379},[58,109047,3046],{"emptyLinePlaceholder":720},[58,109049,109050],{"class":60,"line":2396},[58,109051,3046],{"emptyLinePlaceholder":720},[58,109053,109054,109056,109058,109060,109062],{"class":60,"line":2401},[58,109055,32591],{"class":92},[58,109057,2619],{"class":379},[58,109059,102027],{"class":75},[58,109061,96315],{"class":82},[58,109063,4385],{"class":75},[58,109065,109066,109068,109070,109072,109074],{"class":60,"line":2406},[58,109067,102036],{"class":75},[58,109069,383],{"class":92},[58,109071,102041],{"class":75},[58,109073,101943],{"class":82},[58,109075,799],{"class":75},[58,109077,109078,109080,109082],{"class":60,"line":2411},[58,109079,102050],{"class":75},[58,109081,383],{"class":92},[58,109083,102055],{"class":75},[58,109085,109086,109089,109091,109093,109095,109097,109099,109101,109103,109105,109107],{"class":60,"line":2425},[58,109087,109088],{"class":75},"    renderer ",[58,109090,383],{"class":92},[58,109092,108503],{"class":75},[58,109094,25625],{"class":5862},[58,109096,383],{"class":92},[58,109098,42986],{"class":82},[58,109100,469],{"class":75},[58,109102,25621],{"class":5862},[58,109104,383],{"class":92},[58,109106,108518],{"class":82},[58,109108,799],{"class":75},[58,109110,109111],{"class":60,"line":2430},[58,109112,3046],{"emptyLinePlaceholder":720},[58,109114,109115,109117,109119,109121,109123,109125,109127],{"class":60,"line":3223},[58,109116,3847],{"class":92},[58,109118,102130],{"class":75},[58,109120,26687],{"class":92},[58,109122,33087],{"class":82},[58,109124,793],{"class":75},[58,109126,1097],{"class":82},[58,109128,31430],{"class":75},[58,109130,109131],{"class":60,"line":3237},[58,109132,102145],{"class":75},[58,109134,109135],{"class":60,"line":3245},[58,109136,3046],{"emptyLinePlaceholder":720},[58,109138,109139,109142,109145,109147,109150],{"class":60,"line":3250},[58,109140,109141],{"class":75},"    renderer.update_scene(data, ",[58,109143,109144],{"class":5862},"camera",[58,109146,383],{"class":92},[58,109148,109149],{"class":386},"\"fixed_camera\"",[58,109151,799],{"class":75},[58,109153,109154,109157,109159],{"class":60,"line":3256},[58,109155,109156],{"class":75},"    image ",[58,109158,383],{"class":92},[58,109160,108214],{"class":75},[58,109162,109163],{"class":60,"line":3262},[58,109164,3046],{"emptyLinePlaceholder":720},[58,109166,109167,109170,109172,109175,109177],{"class":60,"line":3267},[58,109168,109169],{"class":75},"    output_path ",[58,109171,383],{"class":92},[58,109173,109174],{"class":75}," Path(",[58,109176,108644],{"class":386},[58,109178,799],{"class":75},[58,109180,109181],{"class":60,"line":8594},[58,109182,109183],{"class":75},"    Image.fromarray(image).save(output_path)\n",[58,109185,109186],{"class":60,"line":8618},[58,109187,109188],{"class":75},"    renderer.close()\n",[58,109190,109191],{"class":60,"line":8623},[58,109192,3046],{"emptyLinePlaceholder":720},[58,109194,109195,109197,109199,109202],{"class":60,"line":8629},[58,109196,31943],{"class":82},[58,109198,793],{"class":75},[58,109200,109201],{"class":386},"\"saved:\"",[58,109203,109204],{"class":75},", output_path.resolve())\n",[58,109206,109207,109209,109211,109214],{"class":60,"line":8656},[58,109208,31943],{"class":82},[58,109210,793],{"class":75},[58,109212,109213],{"class":386},"\"image shape:\"",[58,109215,109216],{"class":75},", image.shape)\n",[58,109218,109219],{"class":60,"line":8661},[58,109220,3046],{"emptyLinePlaceholder":720},[58,109222,109223],{"class":60,"line":8667},[58,109224,3046],{"emptyLinePlaceholder":720},[58,109226,109227,109229,109231,109233,109235],{"class":60,"line":8679},[58,109228,2180],{"class":92},[58,109230,31864],{"class":82},[58,109232,102188],{"class":92},[58,109234,102191],{"class":386},[58,109236,4385],{"class":75},[58,109238,109239],{"class":60,"line":8691},[58,109240,102198],{"class":75},[175,109242,104199],{},[48,109244,109246],{"className":24465,"code":109245,"language":24467,"meta":53,"style":53},"touch ch5_renderer.py\n",[55,109247,109248],{"__ignoreMap":53},[58,109249,109250,109252],{"class":60,"line":61},[58,109251,101912],{"class":379},[58,109253,109254],{"class":386}," ch5_renderer.py\n",[114,109256,102201],{"id":102201},[175,109258,109259],{},"viewer 上下文：",[48,109261,109263],{"className":31022,"code":109262,"language":31024,"meta":53,"style":53},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[55,109264,109265],{"__ignoreMap":53},[58,109266,109267,109269,109271,109273],{"class":60,"line":61},[58,109268,108462],{"class":92},[58,109270,108465],{"class":75},[58,109272,32027],{"class":92},[58,109274,108470],{"class":75},[175,109276,109277,109279],{},[55,109278,108462],{}," 语句会创建窗口，并在退出时自动清理资源。",[175,109281,109282],{},"窗口循环：",[48,109284,109286],{"className":31022,"code":109285,"language":31024,"meta":53,"style":53},"while viewer.is_running() and data.time \u003C 5.0:\n",[55,109287,109288],{"__ignoreMap":53},[58,109289,109290,109293,109295,109297,109299,109301,109303],{"class":60,"line":61},[58,109291,109292],{"class":92},"while",[58,109294,108816],{"class":75},[58,109296,31106],{"class":92},[58,109298,108821],{"class":75},[58,109300,373],{"class":92},[58,109302,108826],{"class":82},[58,109304,4385],{"class":75},[175,109306,109307],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[175,109309,109310],{},"固定相机：",[48,109312,109314],{"className":53705,"code":109313,"language":53707,"meta":53,"style":53},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[55,109315,109316],{"__ignoreMap":53},[58,109317,109318,109320,109322,109324,109326,109328,109330,109332,109335,109338,109340,109343],{"class":60,"line":61},[58,109319,373],{"class":75},[58,109321,109144],{"class":71},[58,109323,15564],{"class":379},[58,109325,383],{"class":75},[58,109327,109149],{"class":386},[58,109329,101735],{"class":379},[58,109331,383],{"class":75},[58,109333,109334],{"class":386},"\"1.5 -2.0 1.2\"",[58,109336,109337],{"class":379}," xyaxes",[58,109339,383],{"class":75},[58,109341,109342],{"class":386},"\"1 0.75 0 0 0 1\"",[58,109344,101773],{"class":75},[175,109346,109347],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[114,109349,109351],{"id":109350},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[48,109353,109355],{"className":31022,"code":109354,"language":31024,"meta":53,"style":53},"import time\n",[55,109356,109357],{"__ignoreMap":53},[58,109358,109359,109361],{"class":60,"line":61},[58,109360,31036],{"class":92},[58,109362,32473],{"class":75},[175,109364,109365],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[48,109367,109369],{"className":31022,"code":109368,"language":31024,"meta":53,"style":53},"import mujoco\nimport mujoco.viewer\n",[55,109370,109371,109377],{"__ignoreMap":53},[58,109372,109373,109375],{"class":60,"line":61},[58,109374,31036],{"class":92},[58,109376,101930],{"class":75},[58,109378,109379,109381],{"class":60,"line":68},[58,109380,31036],{"class":92},[58,109382,108181],{"class":75},[175,109384,109385],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[48,109387,109388],{"className":31022,"code":109262,"language":31024,"meta":53,"style":53},[55,109389,109390],{"__ignoreMap":53},[58,109391,109392,109394,109396,109398],{"class":60,"line":61},[58,109393,108462],{"class":92},[58,109395,108465],{"class":75},[58,109397,32027],{"class":92},[58,109399,108470],{"class":75},[175,109401,109402,109403,109406],{},"打开一个 viewer 窗口。",[55,109404,109405],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[48,109408,109409],{"className":31022,"code":109285,"language":31024,"meta":53,"style":53},[55,109410,109411],{"__ignoreMap":53},[58,109412,109413,109415,109417,109419,109421,109423,109425],{"class":60,"line":61},[58,109414,109292],{"class":92},[58,109416,108816],{"class":75},[58,109418,31106],{"class":92},[58,109420,108821],{"class":75},[58,109422,373],{"class":92},[58,109424,108826],{"class":82},[58,109426,4385],{"class":75},[175,109428,109429,109430,109433],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[55,109431,109432],{},"viewer.is_running()"," 会变成 false，循环结束。",[48,109435,109437],{"className":31022,"code":109436,"language":31024,"meta":53,"style":53},"step_start = time.time()\n",[55,109438,109439],{"__ignoreMap":53},[58,109440,109441,109444,109446],{"class":60,"line":61},[58,109442,109443],{"class":75},"step_start ",[58,109445,383],{"class":92},[58,109447,108838],{"class":75},[175,109449,109450],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[48,109452,109453],{"className":31022,"code":108547,"language":31024,"meta":53,"style":53},[55,109454,109455,109459],{"__ignoreMap":53},[58,109456,109457],{"class":60,"line":61},[58,109458,105134],{"class":75},[58,109460,109461],{"class":60,"line":68},[58,109462,108558],{"class":75},[175,109464,109465,109467,109468,109470,109471,109473,109474,109477],{},[55,109466,101844],{}," 推进物理仿真。",[55,109469,108566],{}," 把最新的 ",[55,109472,34045],{}," 同步到窗口里显示。没有 ",[55,109475,109476],{},"sync()","，窗口可能看不到最新状态。",[48,109479,109480],{"className":31022,"code":108577,"language":31024,"meta":53,"style":53},[55,109481,109482],{"__ignoreMap":53},[58,109483,109484,109486,109488,109490,109492,109494,109496],{"class":60,"line":61},[58,109485,108584],{"class":75},[58,109487,383],{"class":92},[58,109489,108589],{"class":75},[58,109491,1318],{"class":92},[58,109493,108594],{"class":75},[58,109495,1318],{"class":92},[58,109497,108599],{"class":75},[175,109499,109500],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[48,109502,109504],{"className":31022,"code":109503,"language":31024,"meta":53,"style":53},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[55,109505,109506,109518],{"__ignoreMap":53},[58,109507,109508,109510,109512,109514,109516],{"class":60,"line":61},[58,109509,2180],{"class":92},[58,109511,108876],{"class":75},[58,109513,1744],{"class":92},[58,109515,4739],{"class":82},[58,109517,4385],{"class":75},[58,109519,109520],{"class":60,"line":68},[58,109521,109522],{"class":75},"    time.sleep(sleep_time)\n",[175,109524,109525],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[114,109527,109529],{"id":109528},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[48,109531,109533],{"className":31022,"code":109532,"language":31024,"meta":53,"style":53},"from pathlib import Path\n",[55,109534,109535],{"__ignoreMap":53},[58,109536,109537,109539,109541,109543],{"class":60,"line":61},[58,109538,31381],{"class":92},[58,109540,108940],{"class":75},[58,109542,31036],{"class":92},[58,109544,108945],{"class":75},[175,109546,109547,109548,109551,109552,109555],{},"导入 ",[55,109549,109550],{},"Path","，用来处理文件路径。相比直接写字符串，",[55,109553,109554],{},"Path(\"render_output.png\")"," 更清晰。",[48,109557,109559],{"className":31022,"code":109558,"language":31024,"meta":53,"style":53},"from PIL import Image\n",[55,109560,109561],{"__ignoreMap":53},[58,109562,109563,109565,109567,109569],{"class":60,"line":61},[58,109564,31381],{"class":92},[58,109566,47907],{"class":82},[58,109568,47910],{"class":92},[58,109570,47913],{"class":75},[175,109572,109573],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[48,109575,109576],{"className":53705,"code":109313,"language":53707,"meta":53,"style":53},[55,109577,109578],{"__ignoreMap":53},[58,109579,109580,109582,109584,109586,109588,109590,109592,109594,109596,109598,109600,109602],{"class":60,"line":61},[58,109581,373],{"class":75},[58,109583,109144],{"class":71},[58,109585,15564],{"class":379},[58,109587,383],{"class":75},[58,109589,109149],{"class":386},[58,109591,101735],{"class":379},[58,109593,383],{"class":75},[58,109595,109334],{"class":386},[58,109597,109337],{"class":379},[58,109599,383],{"class":75},[58,109601,109342],{"class":386},[58,109603,101773],{"class":75},[175,109605,109606,109607,109609,109610,109612,109613,109616,109617,109619],{},"定义一个相机。",[55,109608,80440],{}," 是相机名字。",[55,109611,104775],{}," 是相机在世界里的位置。",[55,109614,109615],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[55,109618,104775],{}," 来调视角。",[48,109621,109623],{"className":31022,"code":109622,"language":31024,"meta":53,"style":53},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[55,109624,109625],{"__ignoreMap":53},[58,109626,109627,109629,109631,109633,109635,109637,109639,109641,109643,109645,109647],{"class":60,"line":61},[58,109628,108199],{"class":75},[58,109630,383],{"class":92},[58,109632,108503],{"class":75},[58,109634,25625],{"class":5862},[58,109636,383],{"class":92},[58,109638,42986],{"class":82},[58,109640,469],{"class":75},[58,109642,25621],{"class":5862},[58,109644,383],{"class":92},[58,109646,108518],{"class":82},[58,109648,799],{"class":75},[175,109650,109651,109652,101647,109654,109656],{},"创建离屏渲染器。",[55,109653,25625],{},[55,109655,25621],{}," 决定输出图片大小。",[48,109658,109659],{"className":31022,"code":102305,"language":31024,"meta":53,"style":53},[55,109660,109661,109677],{"__ignoreMap":53},[58,109662,109663,109665,109667,109669,109671,109673,109675],{"class":60,"line":61},[58,109664,3671],{"class":92},[58,109666,102130],{"class":75},[58,109668,26687],{"class":92},[58,109670,33087],{"class":82},[58,109672,793],{"class":75},[58,109674,1097],{"class":82},[58,109676,31430],{"class":75},[58,109678,109679],{"class":60,"line":68},[58,109680,102328],{"class":75},[175,109682,109683],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[48,109685,109687],{"className":31022,"code":109686,"language":31024,"meta":53,"style":53},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[55,109688,109689],{"__ignoreMap":53},[58,109690,109691,109694,109696,109698,109700],{"class":60,"line":61},[58,109692,109693],{"class":75},"renderer.update_scene(data, ",[58,109695,109144],{"class":5862},[58,109697,383],{"class":92},[58,109699,109149],{"class":386},[58,109701,799],{"class":75},[175,109703,109704,109705,109707,109708,109711],{},"告诉 renderer：用当前 ",[55,109706,34045],{}," 的状态更新画面，并使用名为 ",[55,109709,109710],{},"fixed_camera"," 的相机视角。",[48,109713,109714],{"className":31022,"code":108609,"language":31024,"meta":53,"style":53},[55,109715,109716],{"__ignoreMap":53},[58,109717,109718,109720,109722],{"class":60,"line":61},[58,109719,108209],{"class":75},[58,109721,383],{"class":92},[58,109723,108214],{"class":75},[175,109725,109726,109727,109730],{},"真正渲染出图像。",[55,109728,109729],{},"image"," 是一个 NumPy 数组，不是文件。",[48,109732,109734],{"className":31022,"code":109733,"language":31024,"meta":53,"style":53},"Image.fromarray(image).save(output_path)\n",[55,109735,109736],{"__ignoreMap":53},[58,109737,109738],{"class":60,"line":61},[58,109739,109733],{"class":75},[175,109741,109742,109743,29029],{},"把数组转换成图片，并保存到 ",[55,109744,109745],{},"render_output.png",[48,109747,109749],{"className":31022,"code":109748,"language":31024,"meta":53,"style":53},"renderer.close()\n",[55,109750,109751],{"__ignoreMap":53},[58,109752,109753],{"class":60,"line":61},[58,109754,109748],{"class":75},[175,109756,109757],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,109759,102945],{"id":102944},[175,109761,109762,109763,109765,109766,29029],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[55,109764,109745],{},"，并输出图像数组形状，例如 ",[55,109767,109768],{},"(480, 640, 3)",[175,109770,109771],{},"如果图片里看不到方块，先检查：",[19,109773,109774,109777,109780],{},[22,109775,109776],{},"方块是否掉到相机视野外。",[22,109778,109779],{},"camera 位置是否合理。",[22,109781,109782,109783,109786],{},"是否在 ",[55,109784,109785],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,109788,102977],{"id":102976},[175,109790,109791],{},"运行 viewer:",[48,109793,109795],{"className":24465,"code":109794,"language":24467,"meta":53,"style":53},"python ch5_viewer.py\n",[55,109796,109797],{"__ignoreMap":53},[58,109798,109799,109801],{"class":60,"line":61},[58,109800,31024],{"class":379},[58,109802,108925],{"class":386},[175,109804,109805],{},"运行 renderer:",[48,109807,109809],{"className":24465,"code":109808,"language":24467,"meta":53,"style":53},"python ch5_renderer.py\n",[55,109810,109811],{"__ignoreMap":53},[58,109812,109813,109815],{"class":60,"line":61},[58,109814,31024],{"class":379},[58,109816,109254],{"class":386},[175,109818,109819],{},"如果在服务器上运行:",[48,109821,109823],{"className":24465,"code":109822,"language":24467,"meta":53,"style":53},"MUJOCO_GL=egl python ch5_renderer.py\n",[55,109824,109825],{"__ignoreMap":53},[58,109826,109827,109829,109831,109833,109836],{"class":60,"line":61},[58,109828,108443],{"class":75},[58,109830,383],{"class":92},[58,109832,108433],{"class":386},[58,109834,109835],{"class":379}," python",[58,109837,109254],{"class":386},[175,109839,108411],{},[48,109841,109843],{"className":24465,"code":109842,"language":24467,"meta":53,"style":53},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[55,109844,109845],{"__ignoreMap":53},[58,109846,109847,109849,109851,109853,109855],{"class":60,"line":61},[58,109848,108443],{"class":75},[58,109850,383],{"class":92},[58,109852,108437],{"class":386},[58,109854,109835],{"class":379},[58,109856,109254],{"class":386},[175,109858,109859],{},"再做几个练习：",[19,109861,109862,109869,109872,109878],{},[22,109863,109864,109865,109868],{},"把 renderer 分辨率改成 ",[55,109866,109867],{},"height=240, width=320","，观察输出 shape。",[22,109870,109871],{},"把方块颜色改成蓝色，重新保存图片。",[22,109873,109874,109875,109877],{},"把相机 ",[55,109876,104775],{}," 改远一点，观察画面中物体是否变小。",[22,109879,109880,109881,103043,109884,109887],{},"把 viewer 示例中的 ",[55,109882,109883],{},"data.time \u003C 5.0",[55,109885,109886],{},"data.time \u003C 20.0","，观察更长时间。",[14,109889,103082],{"id":103081},[114,109891,109893],{"id":109892},"viewer-窗口打不开","viewer 窗口打不开",[175,109895,109896],{},"安装:",[48,109898,109900],{"className":24465,"code":109899,"language":24467,"meta":53,"style":53},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[55,109901,109902],{"__ignoreMap":53},[58,109903,109904,109906,109908,109910,109912,109914,109916,109918,109920,109922,109924],{"class":60,"line":61},[58,109905,25220],{"class":379},[58,109907,26959],{"class":386},[58,109909,24477],{"class":386},[58,109911,27044],{"class":82},[58,109913,103135],{"class":386},[58,109915,101463],{"class":386},[58,109917,103140],{"class":386},[58,109919,101476],{"class":386},[58,109921,101482],{"class":386},[58,109923,101473],{"class":386},[58,109925,109926],{"class":386}," libXinerama\n",[114,109928,109930],{"id":109929},"glfwerror",[55,109931,109932],{},"GLFWError",[175,109934,109935],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[114,109937,109939],{"id":109938},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[175,109941,109942,109943,83169,109945,109947],{},"尝试 ",[55,109944,101666],{},[55,109946,101669],{},"。可能存在版本差异。",[114,109949,109950],{"id":109950},"保存图片是黑的",[175,109952,103204],{},[19,109954,109955,109958,109961,109971],{},[22,109956,109957],{},"XML 里是否有 light。",[22,109959,109960],{},"相机是否对着模型。",[22,109962,109963,109964,109967,109968,29029],{},"是否先 ",[55,109965,109966],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[55,109969,109970],{},"renderer.render()",[22,109972,109973],{},"物体是否已经掉出视野。",[114,109975,109976],{"id":109976},"远程服务器没有显示器",[175,109978,109979],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[48,109981,109982],{"className":24465,"code":109822,"language":24467,"meta":53,"style":53},[55,109983,109984],{"__ignoreMap":53},[58,109985,109986,109988,109990,109992,109994],{"class":60,"line":61},[58,109987,108443],{"class":75},[58,109989,383],{"class":92},[58,109991,108433],{"class":386},[58,109993,109835],{"class":379},[58,109995,109254],{"class":386},[175,109997,109998],{},"如果 EGL 不可用，再尝试：",[48,110000,110001],{"className":24465,"code":109842,"language":24467,"meta":53,"style":53},[55,110002,110003],{"__ignoreMap":53},[58,110004,110005,110007,110009,110011,110013],{"class":60,"line":61},[58,110006,108443],{"class":75},[58,110008,383],{"class":92},[58,110010,108437],{"class":386},[58,110012,109835],{"class":379},[58,110014,109254],{"class":386},[14,110016,103236],{"id":103235},[175,110018,110019],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[19,110021,110022,110025,110028],{},[22,110023,110024],{},"先用 viewer 看模型和控制是否正常。",[22,110026,110027],{},"再用 renderer 保存图片或构造视觉观测。",[22,110029,110030],{},"最后把状态、动作、图像、奖励组织成训练数据。",[702,110032,110033],{},"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":53,"searchDepth":68,"depth":68,"links":110035},[110036,110037,110038,110043,110048,110049,110050,110057],{"id":101275,"depth":68,"text":101276},{"id":101398,"depth":68,"text":101399},{"id":101673,"depth":68,"text":101674,"children":110039},[110040,110041,110042],{"id":108540,"depth":79,"text":108541},{"id":108570,"depth":79,"text":108571},{"id":108605,"depth":79,"text":108606},{"id":101881,"depth":68,"text":101882,"children":110044},[110045,110046,110047],{"id":102201,"depth":79,"text":102201},{"id":109350,"depth":79,"text":109351},{"id":109528,"depth":79,"text":109529},{"id":102944,"depth":68,"text":102945},{"id":102976,"depth":68,"text":102977},{"id":103081,"depth":68,"text":103082,"children":110051},[110052,110053,110054,110055,110056],{"id":109892,"depth":79,"text":109893},{"id":109929,"depth":79,"text":109932},{"id":109938,"depth":79,"text":109939},{"id":109950,"depth":79,"text":109950},{"id":109976,"depth":79,"text":109976},{"id":103235,"depth":68,"text":103236},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108148,"description":53},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110064,"title":110065,"body":110066,"description":53,"extension":718,"meta":111977,"navigation":720,"path":111978,"seo":111979,"stem":111980,"__hash__":111981},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110067,"toc":111953},[110068,110071,110073,110076,110078,110097,110100,110106,110109,110111,110113,110137,110139,110153,110155,110196,110198,110209,110211,110214,110220,110223,110257,110260,110292,110295,110327,110331,110334,110374,110377,110383,110386,110392,110396,110399,110405,110408,110412,110415,110455,110457,110470,110473,110475,111057,111059,111071,111074,111085,111087,111090,111109,111121,111124,111145,111148,111151,111194,111197,111200,111220,111227,111229,111247,111262,111265,111271,111274,111280,111297,111304,111335,111346,111380,111391,111408,111417,111425,111430,111444,111447,111468,111474,111488,111493,111523,111533,111558,111566,111589,111592,111608,111611,111619,111625,111647,111660,111681,111690,111729,111740,111742,111745,111751,111754,111757,111763,111766,111786,111789,111791,111830,111832,111835,111843,111846,111849,111876,111879,111889,111895,111898,111904,111906,111912,111916,111919,111921,111924,111948,111951],[10,110069,110065],{"id":110070},"_6控制任务cartpole",[14,110072,101276],{"id":101275},[175,110074,110075],{},"本章搭建一个最小 Cartpole 控制任务。",[175,110077,104960],{},[19,110079,110080,110083,110085,110088,110091,110094],{},[22,110081,110082],{},"slide joint",[22,110084,106813],{},[22,110086,110087],{},"cart force actuator",[22,110089,110090],{},"状态观测",[22,110092,110093],{},"简单控制循环",[22,110095,110096],{},"reward 设计雏形",[175,110098,110099],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[48,110101,110104],{"className":110102,"code":110103,"language":5833,"meta":53},[5831],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[55,110105,110103],{"__ignoreMap":53},[175,110107,110108],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110110,101399],{"id":101398},[175,110112,101402],{},[48,110114,110115],{"className":24465,"code":105017,"language":24467,"meta":53,"style":53},[55,110116,110117],{"__ignoreMap":53},[58,110118,110119,110121,110123,110125,110127,110129,110131,110133,110135],{"class":60,"line":61},[58,110120,25220],{"class":379},[58,110122,26959],{"class":386},[58,110124,24477],{"class":386},[58,110126,27044],{"class":82},[58,110128,105032],{"class":386},[58,110130,101427],{"class":386},[58,110132,103130],{"class":386},[58,110134,101443],{"class":386},[58,110136,105041],{"class":386},[175,110138,103448],{},[48,110140,110141],{"className":24465,"code":101548,"language":24467,"meta":53,"style":53},[55,110142,110143],{"__ignoreMap":53},[58,110144,110145,110147,110149,110151],{"class":60,"line":61},[58,110146,24474],{"class":379},[58,110148,24477],{"class":386},[58,110150,101559],{"class":386},[58,110152,101562],{"class":386},[175,110154,103465],{},[48,110156,110158],{"className":24465,"code":110157,"language":24467,"meta":53,"style":53},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[55,110159,110160,110177,110186],{"__ignoreMap":53},[58,110161,110162,110164,110166,110168,110171,110173,110175],{"class":60,"line":61},[58,110163,30974],{"class":379},[58,110165,29820],{"class":386},[58,110167,25759],{"class":82},[58,110169,110170],{"class":386}," mujoco-cartpole",[58,110172,101604],{"class":386},[58,110174,101607],{"class":82},[58,110176,101610],{"class":82},[58,110178,110179,110181,110183],{"class":60,"line":68},[58,110180,30974],{"class":379},[58,110182,101617],{"class":386},[58,110184,110185],{"class":386}," mujoco-cartpole\n",[58,110187,110188,110190,110192,110194],{"class":60,"line":79},[58,110189,24474],{"class":379},[58,110191,24477],{"class":386},[58,110193,101559],{"class":386},[58,110195,101562],{"class":386},[175,110197,101633],{},[19,110199,110200,110203,110206],{},[22,110201,110202],{},"本章不依赖 Gymnasium。",[22,110204,110205],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[22,110207,110208],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,110210,101674],{"id":101673},[175,110212,110213],{},"Cartpole 的模型结构:",[48,110215,110218],{"className":110216,"code":110217,"language":5833,"meta":53},[5831],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[55,110219,110217],{"__ignoreMap":53},[175,110221,110222],{},"小车通过 slide joint 左右移动:",[48,110224,110226],{"className":53705,"code":110225,"language":53707,"meta":53,"style":53},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[55,110227,110228],{"__ignoreMap":53},[58,110229,110230,110232,110234,110236,110238,110241,110243,110245,110248,110250,110252,110255],{"class":60,"line":61},[58,110231,373],{"class":75},[58,110233,103585],{"class":71},[58,110235,15564],{"class":379},[58,110237,383],{"class":75},[58,110239,110240],{"class":386},"\"cart_x\"",[58,110242,54460],{"class":379},[58,110244,383],{"class":75},[58,110246,110247],{"class":386},"\"slide\"",[58,110249,106657],{"class":379},[58,110251,383],{"class":75},[58,110253,110254],{"class":386},"\"1 0 0\"",[58,110256,101773],{"class":75},[175,110258,110259],{},"杆子通过 hinge joint 旋转:",[48,110261,110263],{"className":53705,"code":110262,"language":53707,"meta":53,"style":53},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[55,110264,110265],{"__ignoreMap":53},[58,110266,110267,110269,110271,110273,110275,110278,110280,110282,110284,110286,110288,110290],{"class":60,"line":61},[58,110268,373],{"class":75},[58,110270,103585],{"class":71},[58,110272,15564],{"class":379},[58,110274,383],{"class":75},[58,110276,110277],{"class":386},"\"pole_hinge\"",[58,110279,54460],{"class":379},[58,110281,383],{"class":75},[58,110283,106648],{"class":386},[58,110285,106657],{"class":379},[58,110287,383],{"class":75},[58,110289,106662],{"class":386},[58,110291,101773],{"class":75},[175,110293,110294],{},"控制力作用在小车 slide joint 上:",[48,110296,110298],{"className":53705,"code":110297,"language":53707,"meta":53,"style":53},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[55,110299,110300],{"__ignoreMap":53},[58,110301,110302,110304,110306,110308,110310,110313,110315,110317,110319,110321,110323,110325],{"class":60,"line":61},[58,110303,373],{"class":75},[58,110305,106703],{"class":71},[58,110307,15564],{"class":379},[58,110309,383],{"class":75},[58,110311,110312],{"class":386},"\"cart_motor\"",[58,110314,106713],{"class":379},[58,110316,383],{"class":75},[58,110318,110240],{"class":386},[58,110320,106720],{"class":379},[58,110322,383],{"class":75},[58,110324,54952],{"class":386},[58,110326,101773],{"class":75},[114,110328,110330],{"id":110329},"cartpole-的状态是什么","Cartpole 的状态是什么",[175,110332,110333],{},"这个简化模型有两个关节：",[926,110335,110336,110347],{},[929,110337,110338],{},[932,110339,110340,110342,110344],{},[935,110341,103388],{"align":24379},[935,110343,24380],{"align":24379},[935,110345,110346],{"align":24379},"对应状态",[972,110348,110349,110362],{},[932,110350,110351,110356,110359],{},[977,110352,110353],{"align":24379},[55,110354,110355],{},"cart_x",[977,110357,110358],{"align":24379},"slide",[977,110360,110361],{"align":24379},"小车 x 位置",[932,110363,110364,110369,110371],{},[977,110365,110366],{"align":24379},[55,110367,110368],{},"pole_hinge",[977,110370,106469],{"align":24379},[977,110372,110373],{"align":24379},"杆子角度",[175,110375,110376],{},"所以：",[48,110378,110381],{"className":110379,"code":110380,"language":5833,"meta":53},[5831],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[55,110382,110380],{"__ignoreMap":53},[175,110384,110385],{},"把它们拼起来就是观测：",[48,110387,110390],{"className":110388,"code":110389,"language":5833,"meta":53},[5831],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[55,110391,110389],{"__ignoreMap":53},[114,110393,110395],{"id":110394},"action-是什么","action 是什么",[175,110397,110398],{},"本章只有一个 actuator：",[48,110400,110403],{"className":110401,"code":110402,"language":5833,"meta":53},[5831],"data.ctrl[0] = action\n",[55,110404,110402],{"__ignoreMap":53},[175,110406,110407],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[114,110409,110411],{"id":110410},"reward-是什么","reward 是什么",[175,110413,110414],{},"奖励函数：",[48,110416,110418],{"className":31022,"code":110417,"language":31024,"meta":53,"style":53},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[55,110419,110420],{"__ignoreMap":53},[58,110421,110422,110424,110427,110429,110431,110433,110436,110438,110441,110443,110445,110447,110450,110452],{"class":60,"line":61},[58,110423,17689],{"class":92},[58,110425,110426],{"class":82}," float",[58,110428,793],{"class":75},[58,110430,103032],{"class":82},[58,110432,52909],{"class":92},[58,110434,110435],{"class":82}," 0.1",[58,110437,7164],{"class":92},[58,110439,110440],{"class":75}," cart_x ",[58,110442,1241],{"class":92},[58,110444,110440],{"class":75},[58,110446,1318],{"class":92},[58,110448,110449],{"class":75}," pole_angle ",[58,110451,1241],{"class":92},[58,110453,110454],{"class":75}," pole_angle)\n",[175,110456,106855],{},[19,110458,110459,110464,110467],{},[22,110460,110461,110462,29029],{},"基础奖励是 ",[55,110463,103032],{},[22,110465,110466],{},"小车离中心越远，扣分越多。",[22,110468,110469],{},"杆子角度越大，扣分越多。",[175,110471,110472],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,110474,101882],{"id":101881},[48,110476,110478],{"className":31022,"code":110477,"language":31024,"meta":53,"style":53},"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",[55,110479,110480,110486,110496,110500,110504,110512,110517,110521,110525,110529,110534,110538,110543,110548,110553,110557,110562,110567,110572,110576,110580,110584,110588,110592,110597,110601,110605,110609,110613,110617,110627,110634,110638,110642,110656,110670,110683,110713,110717,110721,110733,110745,110753,110757,110770,110774,110778,110787,110791,110807,110817,110830,110843,110847,110870,110888,110892,110904,110908,110912,110922,110932,110936,110952,110993,110997,111017,111033,111037,111041,111053],{"__ignoreMap":53},[58,110481,110482,110484],{"class":60,"line":61},[58,110483,31036],{"class":92},[58,110485,101930],{"class":75},[58,110487,110488,110490,110492,110494],{"class":60,"line":68},[58,110489,31036],{"class":92},[58,110491,32024],{"class":75},[58,110493,32027],{"class":92},[58,110495,32030],{"class":75},[58,110497,110498],{"class":60,"line":79},[58,110499,3046],{"emptyLinePlaceholder":720},[58,110501,110502],{"class":60,"line":105},[58,110503,3046],{"emptyLinePlaceholder":720},[58,110505,110506,110508,110510],{"class":60,"line":627},[58,110507,101943],{"class":82},[58,110509,14208],{"class":92},[58,110511,101948],{"class":386},[58,110513,110514],{"class":60,"line":509},[58,110515,110516],{"class":386},"\u003Cmujoco model=\"cartpole\">\n",[58,110518,110519],{"class":60,"line":559},[58,110520,101958],{"class":386},[58,110522,110523],{"class":60,"line":654},[58,110524,3046],{"emptyLinePlaceholder":720},[58,110526,110527],{"class":60,"line":671},[58,110528,101967],{"class":386},[58,110530,110531],{"class":60,"line":677},[58,110532,110533],{"class":386},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[58,110535,110536],{"class":60,"line":2260},[58,110537,3046],{"emptyLinePlaceholder":720},[58,110539,110540],{"class":60,"line":694},[58,110541,110542],{"class":386},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[58,110544,110545],{"class":60,"line":2270},[58,110546,110547],{"class":386},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[58,110549,110550],{"class":60,"line":2275},[58,110551,110552],{"class":386},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[58,110554,110555],{"class":60,"line":2289},[58,110556,3046],{"emptyLinePlaceholder":720},[58,110558,110559],{"class":60,"line":2294},[58,110560,110561],{"class":386},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[58,110563,110564],{"class":60,"line":2300},[58,110565,110566],{"class":386},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[58,110568,110569],{"class":60,"line":2321},[58,110570,110571],{"class":386},"        \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",[58,110573,110574],{"class":60,"line":2326},[58,110575,107067],{"class":386},[58,110577,110578],{"class":60,"line":2340},[58,110579,101996],{"class":386},[58,110581,110582],{"class":60,"line":2345},[58,110583,102001],{"class":386},[58,110585,110586],{"class":60,"line":2374},[58,110587,3046],{"emptyLinePlaceholder":720},[58,110589,110590],{"class":60,"line":2379},[58,110591,107084],{"class":386},[58,110593,110594],{"class":60,"line":2396},[58,110595,110596],{"class":386},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[58,110598,110599],{"class":60,"line":2401},[58,110600,107094],{"class":386},[58,110602,110603],{"class":60,"line":2406},[58,110604,102006],{"class":386},[58,110606,110607],{"class":60,"line":2411},[58,110608,96327],{"class":386},[58,110610,110611],{"class":60,"line":2425},[58,110612,3046],{"emptyLinePlaceholder":720},[58,110614,110615],{"class":60,"line":2430},[58,110616,3046],{"emptyLinePlaceholder":720},[58,110618,110619,110621,110624],{"class":60,"line":3223},[58,110620,32591],{"class":92},[58,110622,110623],{"class":379}," get_observation",[58,110625,110626],{"class":75},"(data: mujoco.MjData) -> np.ndarray:\n",[58,110628,110629,110631],{"class":60,"line":3237},[58,110630,4736],{"class":92},[58,110632,110633],{"class":75}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[58,110635,110636],{"class":60,"line":3245},[58,110637,3046],{"emptyLinePlaceholder":720},[58,110639,110640],{"class":60,"line":3250},[58,110641,3046],{"emptyLinePlaceholder":720},[58,110643,110644,110646,110649,110652,110654],{"class":60,"line":3256},[58,110645,32591],{"class":92},[58,110647,110648],{"class":379}," compute_reward",[58,110650,110651],{"class":75},"(obs: np.ndarray) -> ",[58,110653,832],{"class":82},[58,110655,4385],{"class":75},[58,110657,110658,110661,110663,110666,110668],{"class":60,"line":3262},[58,110659,110660],{"class":75},"    cart_x ",[58,110662,383],{"class":92},[58,110664,110665],{"class":75}," obs[",[58,110667,979],{"class":82},[58,110669,33890],{"class":75},[58,110671,110672,110675,110677,110679,110681],{"class":60,"line":3267},[58,110673,110674],{"class":75},"    pole_angle ",[58,110676,383],{"class":92},[58,110678,110665],{"class":75},[58,110680,89],{"class":82},[58,110682,33890],{"class":75},[58,110684,110685,110687,110689,110691,110693,110695,110697,110699,110701,110703,110705,110707,110709,110711],{"class":60,"line":8594},[58,110686,4736],{"class":92},[58,110688,110426],{"class":82},[58,110690,793],{"class":75},[58,110692,103032],{"class":82},[58,110694,52909],{"class":92},[58,110696,110435],{"class":82},[58,110698,7164],{"class":92},[58,110700,110440],{"class":75},[58,110702,1241],{"class":92},[58,110704,110440],{"class":75},[58,110706,1318],{"class":92},[58,110708,110449],{"class":75},[58,110710,1241],{"class":92},[58,110712,110454],{"class":75},[58,110714,110715],{"class":60,"line":8618},[58,110716,3046],{"emptyLinePlaceholder":720},[58,110718,110719],{"class":60,"line":8623},[58,110720,3046],{"emptyLinePlaceholder":720},[58,110722,110723,110725,110727,110729,110731],{"class":60,"line":8629},[58,110724,32591],{"class":92},[58,110726,2619],{"class":379},[58,110728,102027],{"class":75},[58,110730,96315],{"class":82},[58,110732,4385],{"class":75},[58,110734,110735,110737,110739,110741,110743],{"class":60,"line":8656},[58,110736,102036],{"class":75},[58,110738,383],{"class":92},[58,110740,102041],{"class":75},[58,110742,101943],{"class":82},[58,110744,799],{"class":75},[58,110746,110747,110749,110751],{"class":60,"line":8661},[58,110748,102050],{"class":75},[58,110750,383],{"class":92},[58,110752,102055],{"class":75},[58,110754,110755],{"class":60,"line":8667},[58,110756,3046],{"emptyLinePlaceholder":720},[58,110758,110759,110761,110763,110765,110767],{"class":60,"line":8679},[58,110760,105698],{"class":75},[58,110762,89],{"class":82},[58,110764,5089],{"class":75},[58,110766,383],{"class":92},[58,110768,110769],{"class":82}," 0.1\n",[58,110771,110772],{"class":60,"line":8691},[58,110773,105711],{"class":75},[58,110775,110776],{"class":60,"line":8703},[58,110777,3046],{"emptyLinePlaceholder":720},[58,110779,110780,110783,110785],{"class":60,"line":10361},[58,110781,110782],{"class":75},"    total_reward ",[58,110784,383],{"class":92},[58,110786,105390],{"class":82},[58,110788,110789],{"class":60,"line":10386},[58,110790,3046],{"emptyLinePlaceholder":720},[58,110792,110793,110795,110797,110799,110801,110803,110805],{"class":60,"line":10409},[58,110794,3847],{"class":92},[58,110796,32260],{"class":75},[58,110798,26687],{"class":92},[58,110800,33087],{"class":82},[58,110802,793],{"class":75},[58,110804,7056],{"class":82},[58,110806,31430],{"class":75},[58,110808,110809,110812,110814],{"class":60,"line":10433},[58,110810,110811],{"class":75},"        obs ",[58,110813,383],{"class":92},[58,110815,110816],{"class":75}," get_observation(data)\n",[58,110818,110819,110822,110824,110826,110828],{"class":60,"line":10438},[58,110820,110821],{"class":75},"        pole_angle ",[58,110823,383],{"class":92},[58,110825,110665],{"class":75},[58,110827,89],{"class":82},[58,110829,33890],{"class":75},[58,110831,110832,110835,110837,110839,110841],{"class":60,"line":10443},[58,110833,110834],{"class":75},"        pole_angular_velocity ",[58,110836,383],{"class":92},[58,110838,110665],{"class":75},[58,110840,861],{"class":82},[58,110842,33890],{"class":75},[58,110844,110845],{"class":60,"line":10448},[58,110846,3046],{"emptyLinePlaceholder":720},[58,110848,110849,110852,110854,110857,110859,110861,110863,110865,110867],{"class":60,"line":10457},[58,110850,110851],{"class":75},"        action ",[58,110853,383],{"class":92},[58,110855,110856],{"class":82}," 2.0",[58,110858,7164],{"class":92},[58,110860,110449],{"class":75},[58,110862,1267],{"class":92},[58,110864,62499],{"class":82},[58,110866,7164],{"class":92},[58,110868,110869],{"class":75}," pole_angular_velocity\n",[58,110871,110872,110874,110876,110878,110880,110882,110884,110886],{"class":60,"line":10462},[58,110873,110851],{"class":75},[58,110875,383],{"class":92},[58,110877,108076],{"class":75},[58,110879,1318],{"class":92},[58,110881,103032],{"class":82},[58,110883,469],{"class":75},[58,110885,103032],{"class":82},[58,110887,799],{"class":75},[58,110889,110890],{"class":60,"line":10468},[58,110891,3046],{"emptyLinePlaceholder":720},[58,110893,110894,110896,110898,110900,110902],{"class":60,"line":10489},[58,110895,107246],{"class":75},[58,110897,979],{"class":82},[58,110899,5089],{"class":75},[58,110901,383],{"class":92},[58,110903,108099],{"class":75},[58,110905,110906],{"class":60,"line":10495},[58,110907,102145],{"class":75},[58,110909,110910],{"class":60,"line":10509},[58,110911,3046],{"emptyLinePlaceholder":720},[58,110913,110914,110917,110919],{"class":60,"line":10515},[58,110915,110916],{"class":75},"        reward ",[58,110918,383],{"class":92},[58,110920,110921],{"class":75}," compute_reward(get_observation(data))\n",[58,110923,110924,110927,110929],{"class":60,"line":10542},[58,110925,110926],{"class":75},"        total_reward ",[58,110928,10122],{"class":92},[58,110930,110931],{"class":75}," reward\n",[58,110933,110934],{"class":60,"line":10551},[58,110935,3046],{"emptyLinePlaceholder":720},[58,110937,110938,110940,110942,110944,110946,110948,110950],{"class":60,"line":10557},[58,110939,3143],{"class":92},[58,110941,32260],{"class":75},[58,110943,1114],{"class":92},[58,110945,6400],{"class":82},[58,110947,102188],{"class":92},[58,110949,4739],{"class":82},[58,110951,4385],{"class":75},[58,110953,110954,110956,110958,110961,110964,110967,110970,110972,110975,110978,110980,110982,110984,110986,110989,110991],{"class":60,"line":10565},[58,110955,35294],{"class":82},[58,110957,793],{"class":75},[58,110959,110960],{"class":386},"\"step:\"",[58,110962,110963],{"class":75},", step, ",[58,110965,110966],{"class":386},"\"obs:\"",[58,110968,110969],{"class":75},", np.round(obs, ",[58,110971,861],{"class":82},[58,110973,110974],{"class":75},"), ",[58,110976,110977],{"class":386},"\"action:\"",[58,110979,469],{"class":75},[58,110981,32662],{"class":82},[58,110983,793],{"class":75},[58,110985,832],{"class":82},[58,110987,110988],{"class":75},"(action), ",[58,110990,861],{"class":82},[58,110992,31141],{"class":75},[58,110994,110995],{"class":60,"line":10570},[58,110996,3046],{"emptyLinePlaceholder":720},[58,110998,110999,111001,111003,111006,111008,111010,111013,111015],{"class":60,"line":17247},[58,111000,31943],{"class":82},[58,111002,793],{"class":75},[58,111004,111005],{"class":386},"\"total_reward:\"",[58,111007,469],{"class":75},[58,111009,32662],{"class":82},[58,111011,111012],{"class":75},"(total_reward, ",[58,111014,861],{"class":82},[58,111016,31141],{"class":75},[58,111018,111019,111021,111023,111026,111029,111031],{"class":60,"line":17253},[58,111020,31943],{"class":82},[58,111022,793],{"class":75},[58,111024,111025],{"class":386},"\"final obs:\"",[58,111027,111028],{"class":75},", np.round(get_observation(data), ",[58,111030,861],{"class":82},[58,111032,31141],{"class":75},[58,111034,111035],{"class":60,"line":17276},[58,111036,3046],{"emptyLinePlaceholder":720},[58,111038,111039],{"class":60,"line":17282},[58,111040,3046],{"emptyLinePlaceholder":720},[58,111042,111043,111045,111047,111049,111051],{"class":60,"line":17305},[58,111044,2180],{"class":92},[58,111046,31864],{"class":82},[58,111048,102188],{"class":92},[58,111050,102191],{"class":386},[58,111052,4385],{"class":75},[58,111054,111055],{"class":60,"line":17319},[58,111056,102198],{"class":75},[175,111058,104199],{},[48,111060,111062],{"className":24465,"code":111061,"language":24467,"meta":53,"style":53},"touch ch6_cartpole.py\n",[55,111063,111064],{"__ignoreMap":53},[58,111065,111066,111068],{"class":60,"line":61},[58,111067,101912],{"class":379},[58,111069,111070],{"class":386}," ch6_cartpole.py\n",[175,111072,111073],{},"运行：",[48,111075,111077],{"className":24465,"code":111076,"language":24467,"meta":53,"style":53},"python ch6_cartpole.py\n",[55,111078,111079],{"__ignoreMap":53},[58,111080,111081,111083],{"class":60,"line":61},[58,111082,31024],{"class":379},[58,111084,111070],{"class":386},[114,111086,102201],{"id":102201},[175,111088,111089],{},"构造观测：",[48,111091,111093],{"className":31022,"code":111092,"language":31024,"meta":53,"style":53},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[55,111094,111095,111103],{"__ignoreMap":53},[58,111096,111097,111099,111101],{"class":60,"line":61},[58,111098,32591],{"class":92},[58,111100,110623],{"class":379},[58,111102,110626],{"class":75},[58,111104,111105,111107],{"class":60,"line":68},[58,111106,4736],{"class":92},[58,111108,110633],{"class":75},[175,111110,111111,111114,111115,111117,111118,111120],{},[55,111112,111113],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[55,111116,104659],{}," 2 维，",[55,111119,104989],{}," 2 维，所以 obs 是 4 维。",[175,111122,111123],{},"设置初始角度：",[48,111125,111127],{"className":31022,"code":111126,"language":31024,"meta":53,"style":53},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[55,111128,111129,111141],{"__ignoreMap":53},[58,111130,111131,111133,111135,111137,111139],{"class":60,"line":61},[58,111132,105328],{"class":75},[58,111134,89],{"class":82},[58,111136,5089],{"class":75},[58,111138,383],{"class":92},[58,111140,110769],{"class":82},[58,111142,111143],{"class":60,"line":68},[58,111144,105172],{"class":75},[175,111146,111147],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[175,111149,111150],{},"简单反馈控制：",[48,111152,111154],{"className":31022,"code":111153,"language":31024,"meta":53,"style":53},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[55,111155,111156,111176],{"__ignoreMap":53},[58,111157,111158,111160,111162,111164,111166,111168,111170,111172,111174],{"class":60,"line":61},[58,111159,108071],{"class":75},[58,111161,383],{"class":92},[58,111163,110856],{"class":82},[58,111165,7164],{"class":92},[58,111167,110449],{"class":75},[58,111169,1267],{"class":92},[58,111171,62499],{"class":82},[58,111173,7164],{"class":92},[58,111175,110869],{"class":75},[58,111177,111178,111180,111182,111184,111186,111188,111190,111192],{"class":60,"line":68},[58,111179,108071],{"class":75},[58,111181,383],{"class":92},[58,111183,108076],{"class":75},[58,111185,1318],{"class":92},[58,111187,103032],{"class":82},[58,111189,469],{"class":75},[58,111191,103032],{"class":82},[58,111193,799],{"class":75},[175,111195,111196],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[175,111198,111199],{},"限制动作：",[48,111201,111203],{"className":31022,"code":111202,"language":31024,"meta":53,"style":53},"np.clip(action, -1.0, 1.0)\n",[55,111204,111205],{"__ignoreMap":53},[58,111206,111207,111210,111212,111214,111216,111218],{"class":60,"line":61},[58,111208,111209],{"class":75},"np.clip(action, ",[58,111211,1318],{"class":92},[58,111213,103032],{"class":82},[58,111215,469],{"class":75},[58,111217,103032],{"class":82},[58,111219,799],{"class":75},[175,111221,111222,111223,111226],{},"因为 XML 里 ",[55,111224,111225],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[114,111228,102337],{"id":102337},[48,111230,111231],{"className":31022,"code":111092,"language":31024,"meta":53,"style":53},[55,111232,111233,111241],{"__ignoreMap":53},[58,111234,111235,111237,111239],{"class":60,"line":61},[58,111236,32591],{"class":92},[58,111238,110623],{"class":379},[58,111240,110626],{"class":75},[58,111242,111243,111245],{"class":60,"line":68},[58,111244,4736],{"class":92},[58,111246,110633],{"class":75},[175,111248,111249,111250,111253,111254,111257,111258,111261],{},"这段定义了一个函数，用来获取当前观测。",[55,111251,111252],{},"data.qpos.copy()"," 是位置数组副本，",[55,111255,111256],{},"data.qvel.copy()"," 是速度数组副本。",[55,111259,111260],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[175,111263,111264],{},"在本章模型里：",[48,111266,111269],{"className":111267,"code":111268,"language":5833,"meta":53},[5831],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[55,111270,111268],{"__ignoreMap":53},[175,111272,111273],{},"所以返回的 obs 是：",[48,111275,111278],{"className":111276,"code":111277,"language":5833,"meta":53},[5831],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[55,111279,111277],{"__ignoreMap":53},[48,111281,111283],{"className":31022,"code":111282,"language":31024,"meta":53,"style":53},"def compute_reward(obs: np.ndarray) -> float:\n",[55,111284,111285],{"__ignoreMap":53},[58,111286,111287,111289,111291,111293,111295],{"class":60,"line":61},[58,111288,32591],{"class":92},[58,111290,110648],{"class":379},[58,111292,110651],{"class":75},[58,111294,832],{"class":82},[58,111296,4385],{"class":75},[175,111298,111299,111300,111303],{},"这行定义奖励函数。输入是观测 ",[55,111301,111302],{},"obs","，输出是一个浮点数奖励。",[48,111305,111307],{"className":31022,"code":111306,"language":31024,"meta":53,"style":53},"cart_x = obs[0]\npole_angle = obs[1]\n",[55,111308,111309,111322],{"__ignoreMap":53},[58,111310,111311,111314,111316,111318,111320],{"class":60,"line":61},[58,111312,111313],{"class":75},"cart_x ",[58,111315,383],{"class":92},[58,111317,110665],{"class":75},[58,111319,979],{"class":82},[58,111321,33890],{"class":75},[58,111323,111324,111327,111329,111331,111333],{"class":60,"line":68},[58,111325,111326],{"class":75},"pole_angle ",[58,111328,383],{"class":92},[58,111330,110665],{"class":75},[58,111332,89],{"class":82},[58,111334,33890],{"class":75},[175,111336,111337,111338,111341,111342,111345],{},"数组索引从 0 开始。",[55,111339,111340],{},"obs[0]"," 是第一个元素，也就是小车位置。",[55,111343,111344],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[48,111347,111348],{"className":31022,"code":110417,"language":31024,"meta":53,"style":53},[55,111349,111350],{"__ignoreMap":53},[58,111351,111352,111354,111356,111358,111360,111362,111364,111366,111368,111370,111372,111374,111376,111378],{"class":60,"line":61},[58,111353,17689],{"class":92},[58,111355,110426],{"class":82},[58,111357,793],{"class":75},[58,111359,103032],{"class":82},[58,111361,52909],{"class":92},[58,111363,110435],{"class":82},[58,111365,7164],{"class":92},[58,111367,110440],{"class":75},[58,111369,1241],{"class":92},[58,111371,110440],{"class":75},[58,111373,1318],{"class":92},[58,111375,110449],{"class":75},[58,111377,1241],{"class":92},[58,111379,110454],{"class":75},[175,111381,111382,111383,111386,111387,111390],{},"这行计算奖励。",[55,111384,111385],{},"cart_x * cart_x"," 是小车位置的平方，",[55,111388,111389],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[48,111392,111394],{"className":31022,"code":111393,"language":31024,"meta":53,"style":53},"data.qpos[1] = 0.1\n",[55,111395,111396],{"__ignoreMap":53},[58,111397,111398,111400,111402,111404,111406],{"class":60,"line":61},[58,111399,105328],{"class":75},[58,111401,89],{"class":82},[58,111403,5089],{"class":75},[58,111405,383],{"class":92},[58,111407,110769],{"class":82},[175,111409,111410,111411,111413,111414,111416],{},"手动设置杆子的初始角度。因为 ",[55,111412,106085],{}," 是小车位置，",[55,111415,106088],{}," 是杆子角度，所以这里改的是杆子。",[48,111418,111419],{"className":31022,"code":105172,"language":31024,"meta":53,"style":53},[55,111420,111421],{"__ignoreMap":53},[58,111422,111423],{"class":60,"line":61},[58,111424,105172],{"class":75},[175,111426,106131,111427,111429],{},[55,111428,104659],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[48,111431,111433],{"className":31022,"code":111432,"language":31024,"meta":53,"style":53},"total_reward = 0.0\n",[55,111434,111435],{"__ignoreMap":53},[58,111436,111437,111440,111442],{"class":60,"line":61},[58,111438,111439],{"class":75},"total_reward ",[58,111441,383],{"class":92},[58,111443,105390],{"class":82},[175,111445,111446],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[48,111448,111450],{"className":31022,"code":111449,"language":31024,"meta":53,"style":53},"for step in range(1000):\n",[55,111451,111452],{"__ignoreMap":53},[58,111453,111454,111456,111458,111460,111462,111464,111466],{"class":60,"line":61},[58,111455,3671],{"class":92},[58,111457,32260],{"class":75},[58,111459,26687],{"class":92},[58,111461,33087],{"class":82},[58,111463,793],{"class":75},[58,111465,7056],{"class":82},[58,111467,31430],{"class":75},[175,111469,111470,111471,111473],{},"循环 1000 步。",[55,111472,107763],{}," 是当前步数，从 0 到 999。",[48,111475,111477],{"className":31022,"code":111476,"language":31024,"meta":53,"style":53},"obs = get_observation(data)\n",[55,111478,111479],{"__ignoreMap":53},[58,111480,111481,111484,111486],{"class":60,"line":61},[58,111482,111483],{"class":75},"obs ",[58,111485,383],{"class":92},[58,111487,110816],{"class":75},[175,111489,111490,111491,29029],{},"读取当前状态，保存到 ",[55,111492,111302],{},[48,111494,111496],{"className":31022,"code":111495,"language":31024,"meta":53,"style":53},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[55,111497,111498,111510],{"__ignoreMap":53},[58,111499,111500,111502,111504,111506,111508],{"class":60,"line":61},[58,111501,111326],{"class":75},[58,111503,383],{"class":92},[58,111505,110665],{"class":75},[58,111507,89],{"class":82},[58,111509,33890],{"class":75},[58,111511,111512,111515,111517,111519,111521],{"class":60,"line":68},[58,111513,111514],{"class":75},"pole_angular_velocity ",[58,111516,383],{"class":92},[58,111518,110665],{"class":75},[58,111520,861],{"class":82},[58,111522,33890],{"class":75},[175,111524,111525,111526,111529,111530,29029],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[55,111527,111528],{},"obs[3]","？因为 obs 的顺序是 ",[55,111531,111532],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[48,111534,111536],{"className":31022,"code":111535,"language":31024,"meta":53,"style":53},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[55,111537,111538],{"__ignoreMap":53},[58,111539,111540,111542,111544,111546,111548,111550,111552,111554,111556],{"class":60,"line":61},[58,111541,108071],{"class":75},[58,111543,383],{"class":92},[58,111545,110856],{"class":82},[58,111547,7164],{"class":92},[58,111549,110449],{"class":75},[58,111551,1267],{"class":92},[58,111553,62499],{"class":82},[58,111555,7164],{"class":92},[58,111557,110869],{"class":75},[175,111559,111560,111561,101647,111563,111565],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[55,111562,105889],{},[55,111564,35973],{}," 是人为设置的系数，不是固定公式。",[48,111567,111569],{"className":31022,"code":111568,"language":31024,"meta":53,"style":53},"action = np.clip(action, -1.0, 1.0)\n",[55,111570,111571],{"__ignoreMap":53},[58,111572,111573,111575,111577,111579,111581,111583,111585,111587],{"class":60,"line":61},[58,111574,108071],{"class":75},[58,111576,383],{"class":92},[58,111578,108076],{"class":75},[58,111580,1318],{"class":92},[58,111582,103032],{"class":82},[58,111584,469],{"class":75},[58,111586,103032],{"class":82},[58,111588,799],{"class":75},[175,111590,111591],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[48,111593,111594],{"className":31022,"code":110402,"language":31024,"meta":53,"style":53},[55,111595,111596],{"__ignoreMap":53},[58,111597,111598,111600,111602,111604,111606],{"class":60,"line":61},[58,111599,106500],{"class":75},[58,111601,979],{"class":82},[58,111603,5089],{"class":75},[58,111605,383],{"class":92},[58,111607,108099],{"class":75},[175,111609,111610],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[48,111612,111613],{"className":31022,"code":105134,"language":31024,"meta":53,"style":53},[55,111614,111615],{"__ignoreMap":53},[58,111616,111617],{"class":60,"line":61},[58,111618,105134],{"class":75},[175,111620,111621,111622,111624],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[55,111623,106755],{}," 计算小车和杆子的下一刻状态。",[48,111626,111628],{"className":31022,"code":111627,"language":31024,"meta":53,"style":53},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[55,111629,111630,111639],{"__ignoreMap":53},[58,111631,111632,111635,111637],{"class":60,"line":61},[58,111633,111634],{"class":75},"reward ",[58,111636,383],{"class":92},[58,111638,110921],{"class":75},[58,111640,111641,111643,111645],{"class":60,"line":68},[58,111642,111439],{"class":75},[58,111644,10122],{"class":92},[58,111646,110931],{"class":75},[175,111648,111649,111650,111652,111653,111656,111657,29029],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[55,111651,10122],{}," 是简写，",[55,111654,111655],{},"total_reward += reward"," 等价于 ",[55,111658,111659],{},"total_reward = total_reward + reward",[48,111661,111663],{"className":31022,"code":111662,"language":31024,"meta":53,"style":53},"if step % 100 == 0:\n",[55,111664,111665],{"__ignoreMap":53},[58,111666,111667,111669,111671,111673,111675,111677,111679],{"class":60,"line":61},[58,111668,2180],{"class":92},[58,111670,32260],{"class":75},[58,111672,1114],{"class":92},[58,111674,6400],{"class":82},[58,111676,102188],{"class":92},[58,111678,4739],{"class":82},[58,111680,4385],{"class":75},[175,111682,111683,111685,111686,111689],{},[55,111684,1114],{}," 是取余数。",[55,111687,111688],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[48,111691,111693],{"className":31022,"code":111692,"language":31024,"meta":53,"style":53},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[55,111694,111695],{"__ignoreMap":53},[58,111696,111697,111699,111701,111703,111705,111707,111709,111711,111713,111715,111717,111719,111721,111723,111725,111727],{"class":60,"line":61},[58,111698,31059],{"class":82},[58,111700,793],{"class":75},[58,111702,110960],{"class":386},[58,111704,110963],{"class":75},[58,111706,110966],{"class":386},[58,111708,110969],{"class":75},[58,111710,861],{"class":82},[58,111712,110974],{"class":75},[58,111714,110977],{"class":386},[58,111716,469],{"class":75},[58,111718,32662],{"class":82},[58,111720,793],{"class":75},[58,111722,832],{"class":82},[58,111724,110988],{"class":75},[58,111726,861],{"class":82},[58,111728,31141],{"class":75},[175,111730,111731,111732,111735,111736,111739],{},"打印当前步数、观测和动作。",[55,111733,111734],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[55,111737,111738],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111741,102945],{"id":102944},[175,111743,111744],{},"观测向量:",[48,111746,111749],{"className":111747,"code":111748,"language":5833,"meta":53},[5831],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[55,111750,111748],{"__ignoreMap":53},[175,111752,111753],{},"控制器是教学用的简单线性反馈，不保证最优。",[175,111755,111756],{},"每隔 100 步会打印一次：",[48,111758,111761],{"className":111759,"code":111760,"language":5833,"meta":53},[5831],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[55,111762,111760],{"__ignoreMap":53},[175,111764,111765],{},"重点观察：",[19,111767,111768,111774,111779],{},[22,111769,111770,111773],{},[55,111771,111772],{},"pole_angle"," 是否越来越大。",[22,111775,111776,111778],{},[55,111777,110355],{}," 是否跑得太远。",[22,111780,111781,111782,83169,111784,29029],{},"action 是否经常被 clip 到 ",[55,111783,104544],{},[55,111785,89],{},[175,111787,111788],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,111790,102977],{"id":102976},[19,111792,111793,111799,111802,111808,111818,111824,111827],{},[22,111794,111795,111796,29029],{},"把初始角度改为 ",[55,111797,111798],{},"data.qpos[1] = 0.3",[22,111800,111801],{},"重新运行，观察控制是否变差。",[22,111803,111804,111805,111807],{},"把 actuator ",[55,111806,107696],{}," 改小。",[22,111809,111810,111811,111814,111815,29029],{},"打印 ",[55,111812,111813],{},"model.nq, model.nv, model.nu","，应为 ",[55,111816,111817],{},"2 2 1",[22,111819,111820,111821,111823],{},"把 reward 里的 ",[55,111822,111389],{}," 系数改大，观察总奖励变化。",[22,111825,111826],{},"把控制器改成反号，观察杆子是否更容易倒。",[22,111828,111829],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,111831,103082],{"id":103081},[114,111833,111834],{"id":111834},"杆子方向和预期不一致",[175,111836,103025,111837,111839,111840,111842],{},[55,111838,106868],{}," 和 capsule 的 ",[55,111841,103805],{},"，必要时用 viewer 可视化确认。",[114,111844,111845],{"id":111845},"控制器越控越倒",[175,111847,111848],{},"说明反馈符号可能反了，尝试:",[48,111850,111852],{"className":31022,"code":111851,"language":31024,"meta":53,"style":53},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[55,111853,111854],{"__ignoreMap":53},[58,111855,111856,111858,111860,111862,111864,111866,111868,111870,111872,111874],{"class":60,"line":61},[58,111857,108071],{"class":75},[58,111859,383],{"class":92},[58,111861,52909],{"class":92},[58,111863,105889],{"class":82},[58,111865,7164],{"class":92},[58,111867,110449],{"class":75},[58,111869,1318],{"class":92},[58,111871,62499],{"class":82},[58,111873,7164],{"class":92},[58,111875,110869],{"class":75},[114,111877,111878],{"id":111878},"小车飞走",[175,111880,111881,111882,111884,111885,111888],{},"降低 ",[55,111883,107696],{}," 或缩小 ",[55,111886,111887],{},"action"," 的 clip 范围。",[114,111890,111892,111894],{"id":111891},"obs3-为什么是杆子角速度",[55,111893,111528],{}," 为什么是杆子角速度",[175,111896,111897],{},"因为这个模型里：",[48,111899,111902],{"className":111900,"code":111901,"language":5833,"meta":53},[5831],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[55,111903,111901],{"__ignoreMap":53},[175,111905,110376],{},[48,111907,111910],{"className":111908,"code":111909,"language":5833,"meta":53},[5831],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[55,111911,111909],{"__ignoreMap":53},[114,111913,111915],{"id":111914},"reward-变成负数是否错误","reward 变成负数是否错误",[175,111917,111918],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,111920,103236],{"id":103235},[175,111922,111923],{},"一个控制任务通常包含：",[19,111925,111926,111929,111937,111942,111945],{},[22,111927,111928],{},"模型：Cartpole 的 body、joint、actuator。",[22,111930,111931,111932,1000,111934,111936],{},"观测：从 ",[55,111933,104659],{},[55,111935,104989],{}," 里取状态。",[22,111938,111939,111940,29029],{},"动作：写入 ",[55,111941,101705],{},[22,111943,111944],{},"奖励：根据任务目标打分。",[22,111946,111947],{},"循环：obs -> action -> step -> reward。",[175,111949,111950],{},"这就是后面 Gymnasium 环境的基本骨架。",[702,111952,104915],{},{"title":53,"searchDepth":68,"depth":68,"links":111954},[111955,111956,111957,111962,111966,111967,111968,111976],{"id":101275,"depth":68,"text":101276},{"id":101398,"depth":68,"text":101399},{"id":101673,"depth":68,"text":101674,"children":111958},[111959,111960,111961],{"id":110329,"depth":79,"text":110330},{"id":110394,"depth":79,"text":110395},{"id":110410,"depth":79,"text":110411},{"id":101881,"depth":68,"text":101882,"children":111963},[111964,111965],{"id":102201,"depth":79,"text":102201},{"id":102337,"depth":79,"text":102337},{"id":102944,"depth":68,"text":102945},{"id":102976,"depth":68,"text":102977},{"id":103081,"depth":68,"text":103082,"children":111969},[111970,111971,111972,111973,111975],{"id":111834,"depth":79,"text":111834},{"id":111845,"depth":79,"text":111845},{"id":111878,"depth":79,"text":111878},{"id":111891,"depth":79,"text":111974},"obs[3] 为什么是杆子角速度",{"id":111914,"depth":79,"text":111915},{"id":103235,"depth":68,"text":103236},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110065,"description":53},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111983,"title":111984,"body":111985,"description":53,"extension":718,"meta":113999,"navigation":720,"path":114000,"seo":114001,"stem":114002,"__hash__":114003},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111986,"toc":113975},[111987,111990,111992,111995,111997,112014,112017,112020,112026,112029,112031,112033,112057,112059,112073,112075,112116,112118,112136,112138,112141,112147,112150,112178,112182,112188,112213,112216,112247,112254,112257,112260,112266,112269,112275,112278,112284,112288,112291,112316,112319,112321,113081,113083,113095,113097,113108,113110,113113,113130,113133,113135,113146,113149,113151,113197,113200,113213,113216,113298,113301,113303,113319,113329,113342,113345,113384,113394,113405,113415,113428,113431,113460,113463,113473,113476,113482,113499,113510,113512,113518,113535,113546,113567,113570,113582,113585,113606,113609,113617,113625,113642,113645,113714,113721,113729,113732,113745,113752,113754,113757,113763,113766,113769,113775,113781,113783,113823,113825,113831,113840,113843,113845,113865,113868,113871,113877,113881,113883,113910,113913,113916,113943,113949,113952,113955,113957,113960,113963,113969,113972],[10,111988,111984],{"id":111989},"_7控制任务reacher-机械臂到达目标",[14,111991,101276],{"id":101275},[175,111993,111994],{},"本章搭建一个二维两关节 reacher 任务。",[175,111996,104960],{},[19,111998,111999,112002,112005,112008,112011],{},[22,112000,112001],{},"两个 hinge joint",[22,112003,112004],{},"两个 motor actuator",[22,112006,112007],{},"site 作为末端点和目标点",[22,112009,112010],{},"根据末端和目标距离设计 reward",[22,112012,112013],{},"构造机械臂任务的基本形式",[175,112015,112016],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[175,112018,112019],{},"Reacher 任务可以理解为：",[48,112021,112024],{"className":112022,"code":112023,"language":5833,"meta":53},[5831],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[55,112025,112023],{"__ignoreMap":53},[175,112027,112028],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112030,101399],{"id":101398},[175,112032,101402],{},[48,112034,112035],{"className":24465,"code":105017,"language":24467,"meta":53,"style":53},[55,112036,112037],{"__ignoreMap":53},[58,112038,112039,112041,112043,112045,112047,112049,112051,112053,112055],{"class":60,"line":61},[58,112040,25220],{"class":379},[58,112042,26959],{"class":386},[58,112044,24477],{"class":386},[58,112046,27044],{"class":82},[58,112048,105032],{"class":386},[58,112050,101427],{"class":386},[58,112052,103130],{"class":386},[58,112054,101443],{"class":386},[58,112056,105041],{"class":386},[175,112058,103448],{},[48,112060,112061],{"className":24465,"code":101548,"language":24467,"meta":53,"style":53},[55,112062,112063],{"__ignoreMap":53},[58,112064,112065,112067,112069,112071],{"class":60,"line":61},[58,112066,24474],{"class":379},[58,112068,24477],{"class":386},[58,112070,101559],{"class":386},[58,112072,101562],{"class":386},[175,112074,103465],{},[48,112076,112078],{"className":24465,"code":112077,"language":24467,"meta":53,"style":53},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[55,112079,112080,112097,112106],{"__ignoreMap":53},[58,112081,112082,112084,112086,112088,112091,112093,112095],{"class":60,"line":61},[58,112083,30974],{"class":379},[58,112085,29820],{"class":386},[58,112087,25759],{"class":82},[58,112089,112090],{"class":386}," mujoco-reacher",[58,112092,101604],{"class":386},[58,112094,101607],{"class":82},[58,112096,101610],{"class":82},[58,112098,112099,112101,112103],{"class":60,"line":68},[58,112100,30974],{"class":379},[58,112102,101617],{"class":386},[58,112104,112105],{"class":386}," mujoco-reacher\n",[58,112107,112108,112110,112112,112114],{"class":60,"line":79},[58,112109,24474],{"class":379},[58,112111,24477],{"class":386},[58,112113,101559],{"class":386},[58,112115,101562],{"class":386},[175,112117,101633],{},[19,112119,112120,112123,112126],{},[22,112121,112122],{},"本章使用低维状态，不使用图像输入。",[22,112124,112125],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[22,112127,112128,112129,1000,112131,1000,112133,112135],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[55,112130,104659],{},[55,112132,104989],{},[55,112134,104309],{}," 的方法一致。",[14,112137,101674],{"id":101673},[175,112139,112140],{},"Reacher 任务核心:",[48,112142,112145],{"className":112143,"code":112144,"language":5833,"meta":53},[5831],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[55,112146,112144],{"__ignoreMap":53},[175,112148,112149],{},"读取 site 世界坐标:",[48,112151,112153],{"className":31022,"code":112152,"language":31024,"meta":53,"style":53},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[55,112154,112155,112168],{"__ignoreMap":53},[58,112156,112157,112159,112161,112163,112166],{"class":60,"line":61},[58,112158,104263],{"class":75},[58,112160,383],{"class":92},[58,112162,104034],{"class":75},[58,112164,112165],{"class":386},"\"tip\"",[58,112167,799],{"class":75},[58,112169,112170,112173,112175],{"class":60,"line":68},[58,112171,112172],{"class":75},"tip_pos ",[58,112174,383],{"class":92},[58,112176,112177],{"class":75}," data.site_xpos[site_id]\n",[114,112179,112181],{"id":112180},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[175,112183,112184,112185,112187],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[55,112186,104659],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[48,112189,112191],{"className":31022,"code":112190,"language":31024,"meta":53,"style":53},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[55,112192,112193,112203],{"__ignoreMap":53},[58,112194,112195,112198,112200],{"class":60,"line":61},[58,112196,112197],{"class":75},"tip ",[58,112199,383],{"class":92},[58,112201,112202],{"class":75}," data.site_xpos[tip_site_id]\n",[58,112204,112205,112208,112210],{"class":60,"line":68},[58,112206,112207],{"class":75},"target ",[58,112209,383],{"class":92},[58,112211,112212],{"class":75}," data.site_xpos[target_site_id]\n",[175,112214,112215],{},"这样 reward 就很容易写：",[48,112217,112219],{"className":31022,"code":112218,"language":31024,"meta":53,"style":53},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[55,112220,112221,112236],{"__ignoreMap":53},[58,112222,112223,112226,112228,112231,112233],{"class":60,"line":61},[58,112224,112225],{"class":75},"dist ",[58,112227,383],{"class":92},[58,112229,112230],{"class":75}," np.linalg.norm(tip ",[58,112232,1318],{"class":92},[58,112234,112235],{"class":75}," target)\n",[58,112237,112238,112240,112242,112244],{"class":60,"line":68},[58,112239,111634],{"class":75},[58,112241,383],{"class":92},[58,112243,52909],{"class":92},[58,112245,112246],{"class":75},"dist\n",[175,112248,112249,112250,112253],{},"距离越小，",[55,112251,112252],{},"-dist"," 越接近 0，奖励越高。",[114,112255,112256],{"id":112256},"两关节机械臂的状态",[175,112258,112259],{},"这个模型有两个 hinge joint：",[48,112261,112264],{"className":112262,"code":112263,"language":5833,"meta":53},[5831],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[55,112265,112263],{"__ignoreMap":53},[175,112267,112268],{},"再加上末端和目标位置：",[48,112270,112273],{"className":112271,"code":112272,"language":5833,"meta":53},[5831],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[55,112274,112272],{"__ignoreMap":53},[175,112276,112277],{},"总维度：",[48,112279,112282],{"className":112280,"code":112281,"language":5833,"meta":53},[5831],"2 + 2 + 3 + 3 = 10\n",[55,112283,112281],{"__ignoreMap":53},[114,112285,112287],{"id":112286},"为什么-gravity-是-0","为什么 gravity 是 0",[175,112289,112290],{},"本章把重力设为：",[48,112292,112294],{"className":53705,"code":112293,"language":53707,"meta":53,"style":53},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[55,112295,112296],{"__ignoreMap":53},[58,112297,112298,112300,112302,112304,112306,112308,112310,112312,112314],{"class":60,"line":61},[58,112299,373],{"class":75},[58,112301,69798],{"class":71},[58,112303,101823],{"class":379},[58,112305,383],{"class":75},[58,112307,101828],{"class":386},[58,112309,101831],{"class":379},[58,112311,383],{"class":75},[58,112313,104400],{"class":386},[58,112315,101773],{"class":75},[175,112317,112318],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,112320,101882],{"id":101881},[48,112322,112324],{"className":31022,"code":112323,"language":31024,"meta":53,"style":53},"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",[55,112325,112326,112332,112342,112346,112350,112358,112363,112368,112372,112376,112381,112386,112390,112395,112400,112405,112409,112414,112419,112424,112429,112433,112437,112441,112445,112449,112454,112459,112463,112467,112471,112475,112479,112494,112503,112515,112538,112545,112549,112553,112563,112577,112591,112598,112602,112606,112620,112632,112644,112657,112672,112689,112693,112697,112709,112721,112729,112737,112741,112757,112762,112775,112788,112803,112807,112842,112874,112878,112882,112891,112895,112911,112921,112932,112948,112964,112980,112996,113000,113018,113038,113057,113061,113065,113077],{"__ignoreMap":53},[58,112327,112328,112330],{"class":60,"line":61},[58,112329,31036],{"class":92},[58,112331,101930],{"class":75},[58,112333,112334,112336,112338,112340],{"class":60,"line":68},[58,112335,31036],{"class":92},[58,112337,32024],{"class":75},[58,112339,32027],{"class":92},[58,112341,32030],{"class":75},[58,112343,112344],{"class":60,"line":79},[58,112345,3046],{"emptyLinePlaceholder":720},[58,112347,112348],{"class":60,"line":105},[58,112349,3046],{"emptyLinePlaceholder":720},[58,112351,112352,112354,112356],{"class":60,"line":627},[58,112353,101943],{"class":82},[58,112355,14208],{"class":92},[58,112357,101948],{"class":386},[58,112359,112360],{"class":60,"line":509},[58,112361,112362],{"class":386},"\u003Cmujoco model=\"two_link_reacher\">\n",[58,112364,112365],{"class":60,"line":559},[58,112366,112367],{"class":386},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[58,112369,112370],{"class":60,"line":654},[58,112371,3046],{"emptyLinePlaceholder":720},[58,112373,112374],{"class":60,"line":671},[58,112375,101967],{"class":386},[58,112377,112378],{"class":60,"line":677},[58,112379,112380],{"class":386},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[58,112382,112383],{"class":60,"line":2260},[58,112384,112385],{"class":386},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[58,112387,112388],{"class":60,"line":694},[58,112389,3046],{"emptyLinePlaceholder":720},[58,112391,112392],{"class":60,"line":2270},[58,112393,112394],{"class":386},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[58,112396,112397],{"class":60,"line":2275},[58,112398,112399],{"class":386},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[58,112401,112402],{"class":60,"line":2289},[58,112403,112404],{"class":386},"      \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",[58,112406,112407],{"class":60,"line":2294},[58,112408,3046],{"emptyLinePlaceholder":720},[58,112410,112411],{"class":60,"line":2300},[58,112412,112413],{"class":386},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[58,112415,112416],{"class":60,"line":2321},[58,112417,112418],{"class":386},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[58,112420,112421],{"class":60,"line":2326},[58,112422,112423],{"class":386},"        \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",[58,112425,112426],{"class":60,"line":2340},[58,112427,112428],{"class":386},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[58,112430,112431],{"class":60,"line":2345},[58,112432,107067],{"class":386},[58,112434,112435],{"class":60,"line":2374},[58,112436,101996],{"class":386},[58,112438,112439],{"class":60,"line":2379},[58,112440,102001],{"class":386},[58,112442,112443],{"class":60,"line":2396},[58,112444,3046],{"emptyLinePlaceholder":720},[58,112446,112447],{"class":60,"line":2401},[58,112448,107084],{"class":386},[58,112450,112451],{"class":60,"line":2406},[58,112452,112453],{"class":386},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[58,112455,112456],{"class":60,"line":2411},[58,112457,112458],{"class":386},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[58,112460,112461],{"class":60,"line":2425},[58,112462,107094],{"class":386},[58,112464,112465],{"class":60,"line":2430},[58,112466,102006],{"class":386},[58,112468,112469],{"class":60,"line":3223},[58,112470,96327],{"class":386},[58,112472,112473],{"class":60,"line":3237},[58,112474,3046],{"emptyLinePlaceholder":720},[58,112476,112477],{"class":60,"line":3245},[58,112478,3046],{"emptyLinePlaceholder":720},[58,112480,112481,112483,112486,112489,112491],{"class":60,"line":3250},[58,112482,32591],{"class":92},[58,112484,112485],{"class":379}," site_position",[58,112487,112488],{"class":75},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[58,112490,1952],{"class":82},[58,112492,112493],{"class":75},") -> np.ndarray:\n",[58,112495,112496,112498,112500],{"class":60,"line":3256},[58,112497,104029],{"class":75},[58,112499,383],{"class":92},[58,112501,112502],{"class":75}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[58,112504,112505,112507,112509,112511,112513],{"class":60,"line":3262},[58,112506,3747],{"class":92},[58,112508,104078],{"class":75},[58,112510,373],{"class":92},[58,112512,4739],{"class":82},[58,112514,4385],{"class":75},[58,112516,112517,112519,112521,112523,112525,112528,112530,112532,112534,112536],{"class":60,"line":3267},[58,112518,104061],{"class":92},[58,112520,104064],{"class":82},[58,112522,793],{"class":75},[58,112524,843],{"class":92},[58,112526,112527],{"class":386},"\"site not found: ",[58,112529,1681],{"class":82},[58,112531,80440],{"class":75},[58,112533,1730],{"class":82},[58,112535,1037],{"class":386},[58,112537,799],{"class":75},[58,112539,112540,112542],{"class":60,"line":8594},[58,112541,4736],{"class":92},[58,112543,112544],{"class":75}," data.site_xpos[site_id].copy()\n",[58,112546,112547],{"class":60,"line":8618},[58,112548,3046],{"emptyLinePlaceholder":720},[58,112550,112551],{"class":60,"line":8623},[58,112552,3046],{"emptyLinePlaceholder":720},[58,112554,112555,112557,112560],{"class":60,"line":8629},[58,112556,32591],{"class":92},[58,112558,112559],{"class":379}," get_obs",[58,112561,112562],{"class":75},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[58,112564,112565,112568,112570,112573,112575],{"class":60,"line":8656},[58,112566,112567],{"class":75},"    tip ",[58,112569,383],{"class":92},[58,112571,112572],{"class":75}," site_position(model, data, ",[58,112574,112165],{"class":386},[58,112576,799],{"class":75},[58,112578,112579,112582,112584,112586,112589],{"class":60,"line":8661},[58,112580,112581],{"class":75},"    target ",[58,112583,383],{"class":92},[58,112585,112572],{"class":75},[58,112587,112588],{"class":386},"\"target\"",[58,112590,799],{"class":75},[58,112592,112593,112595],{"class":60,"line":8667},[58,112594,4736],{"class":92},[58,112596,112597],{"class":75}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[58,112599,112600],{"class":60,"line":8679},[58,112601,3046],{"emptyLinePlaceholder":720},[58,112603,112604],{"class":60,"line":8691},[58,112605,3046],{"emptyLinePlaceholder":720},[58,112607,112608,112610,112613,112616,112618],{"class":60,"line":8703},[58,112609,32591],{"class":92},[58,112611,112612],{"class":379}," reward",[58,112614,112615],{"class":75},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[58,112617,832],{"class":82},[58,112619,4385],{"class":75},[58,112621,112622,112624,112626,112628,112630],{"class":60,"line":10361},[58,112623,112567],{"class":75},[58,112625,383],{"class":92},[58,112627,112572],{"class":75},[58,112629,112165],{"class":386},[58,112631,799],{"class":75},[58,112633,112634,112636,112638,112640,112642],{"class":60,"line":10386},[58,112635,112581],{"class":75},[58,112637,383],{"class":92},[58,112639,112572],{"class":75},[58,112641,112588],{"class":386},[58,112643,799],{"class":75},[58,112645,112646,112649,112651,112653,112655],{"class":60,"line":10409},[58,112647,112648],{"class":75},"    dist ",[58,112650,383],{"class":92},[58,112652,112230],{"class":75},[58,112654,1318],{"class":92},[58,112656,112235],{"class":75},[58,112658,112659,112662,112664,112667,112669],{"class":60,"line":10433},[58,112660,112661],{"class":75},"    control_cost ",[58,112663,383],{"class":92},[58,112665,112666],{"class":82}," 0.01",[58,112668,7164],{"class":92},[58,112670,112671],{"class":75}," np.sum(np.square(data.ctrl))\n",[58,112673,112674,112676,112678,112680,112682,112684,112686],{"class":60,"line":10438},[58,112675,4736],{"class":92},[58,112677,110426],{"class":82},[58,112679,793],{"class":75},[58,112681,1318],{"class":92},[58,112683,112225],{"class":75},[58,112685,1318],{"class":92},[58,112687,112688],{"class":75}," control_cost)\n",[58,112690,112691],{"class":60,"line":10443},[58,112692,3046],{"emptyLinePlaceholder":720},[58,112694,112695],{"class":60,"line":10448},[58,112696,3046],{"emptyLinePlaceholder":720},[58,112698,112699,112701,112703,112705,112707],{"class":60,"line":10457},[58,112700,32591],{"class":92},[58,112702,2619],{"class":379},[58,112704,102027],{"class":75},[58,112706,96315],{"class":82},[58,112708,4385],{"class":75},[58,112710,112711,112713,112715,112717,112719],{"class":60,"line":10462},[58,112712,102036],{"class":75},[58,112714,383],{"class":92},[58,112716,102041],{"class":75},[58,112718,101943],{"class":82},[58,112720,799],{"class":75},[58,112722,112723,112725,112727],{"class":60,"line":10468},[58,112724,102050],{"class":75},[58,112726,383],{"class":92},[58,112728,102055],{"class":75},[58,112730,112731,112733,112735],{"class":60,"line":10489},[58,112732,110782],{"class":75},[58,112734,383],{"class":92},[58,112736,105390],{"class":82},[58,112738,112739],{"class":60,"line":10495},[58,112740,3046],{"emptyLinePlaceholder":720},[58,112742,112743,112745,112747,112749,112751,112753,112755],{"class":60,"line":10509},[58,112744,3847],{"class":92},[58,112746,32260],{"class":75},[58,112748,26687],{"class":92},[58,112750,33087],{"class":82},[58,112752,793],{"class":75},[58,112754,65706],{"class":82},[58,112756,31430],{"class":75},[58,112758,112759],{"class":60,"line":10515},[58,112760,112761],{"class":75},"        mujoco.mj_forward(model, data)\n",[58,112763,112764,112767,112769,112771,112773],{"class":60,"line":10542},[58,112765,112766],{"class":75},"        tip ",[58,112768,383],{"class":92},[58,112770,112572],{"class":75},[58,112772,112165],{"class":386},[58,112774,799],{"class":75},[58,112776,112777,112780,112782,112784,112786],{"class":60,"line":10551},[58,112778,112779],{"class":75},"        target ",[58,112781,383],{"class":92},[58,112783,112572],{"class":75},[58,112785,112588],{"class":386},[58,112787,799],{"class":75},[58,112789,112790,112793,112795,112798,112800],{"class":60,"line":10557},[58,112791,112792],{"class":75},"        error ",[58,112794,383],{"class":92},[58,112796,112797],{"class":75}," target ",[58,112799,1318],{"class":92},[58,112801,112802],{"class":75}," tip\n",[58,112804,112805],{"class":60,"line":10565},[58,112806,3046],{"emptyLinePlaceholder":720},[58,112808,112809,112811,112813,112815,112817,112820,112822,112824,112827,112829,112832,112834,112836,112838,112840],{"class":60,"line":10570},[58,112810,107246],{"class":75},[58,112812,979],{"class":82},[58,112814,5089],{"class":75},[58,112816,383],{"class":92},[58,112818,112819],{"class":75}," np.clip(",[58,112821,105889],{"class":82},[58,112823,7164],{"class":92},[58,112825,112826],{"class":75}," error[",[58,112828,867],{"class":82},[58,112830,112831],{"class":75},"], ",[58,112833,1318],{"class":92},[58,112835,103032],{"class":82},[58,112837,469],{"class":75},[58,112839,103032],{"class":82},[58,112841,799],{"class":75},[58,112843,112844,112846,112848,112850,112852,112854,112856,112858,112860,112862,112864,112866,112868,112870,112872],{"class":60,"line":17247},[58,112845,107246],{"class":75},[58,112847,89],{"class":82},[58,112849,5089],{"class":75},[58,112851,383],{"class":92},[58,112853,112819],{"class":75},[58,112855,105889],{"class":82},[58,112857,7164],{"class":92},[58,112859,112826],{"class":75},[58,112861,979],{"class":82},[58,112863,112831],{"class":75},[58,112865,1318],{"class":92},[58,112867,103032],{"class":82},[58,112869,469],{"class":75},[58,112871,103032],{"class":82},[58,112873,799],{"class":75},[58,112875,112876],{"class":60,"line":17253},[58,112877,3046],{"emptyLinePlaceholder":720},[58,112879,112880],{"class":60,"line":17276},[58,112881,102145],{"class":75},[58,112883,112884,112886,112888],{"class":60,"line":17282},[58,112885,110926],{"class":75},[58,112887,10122],{"class":92},[58,112889,112890],{"class":75}," reward(model, data)\n",[58,112892,112893],{"class":60,"line":17305},[58,112894,3046],{"emptyLinePlaceholder":720},[58,112896,112897,112899,112901,112903,112905,112907,112909],{"class":60,"line":17319},[58,112898,3143],{"class":92},[58,112900,32260],{"class":75},[58,112902,1114],{"class":92},[58,112904,6400],{"class":82},[58,112906,102188],{"class":92},[58,112908,4739],{"class":82},[58,112910,4385],{"class":75},[58,112912,112913,112916,112918],{"class":60,"line":17339},[58,112914,112915],{"class":75},"            obs ",[58,112917,383],{"class":92},[58,112919,112920],{"class":75}," get_obs(model, data)\n",[58,112922,112923,112925,112927,112929],{"class":60,"line":17345},[58,112924,35294],{"class":82},[58,112926,793],{"class":75},[58,112928,110960],{"class":386},[58,112930,112931],{"class":75},", step)\n",[58,112933,112934,112936,112938,112941,112944,112946],{"class":60,"line":17356},[58,112935,35294],{"class":82},[58,112937,793],{"class":75},[58,112939,112940],{"class":386},"\"  tip:\"",[58,112942,112943],{"class":75},", np.round(tip, ",[58,112945,861],{"class":82},[58,112947,31141],{"class":75},[58,112949,112950,112952,112954,112957,112960,112962],{"class":60,"line":17379},[58,112951,35294],{"class":82},[58,112953,793],{"class":75},[58,112955,112956],{"class":386},"\"  target:\"",[58,112958,112959],{"class":75},", np.round(target, ",[58,112961,861],{"class":82},[58,112963,31141],{"class":75},[58,112965,112966,112968,112970,112973,112976,112978],{"class":60,"line":17401},[58,112967,35294],{"class":82},[58,112969,793],{"class":75},[58,112971,112972],{"class":386},"\"  ctrl:\"",[58,112974,112975],{"class":75},", np.round(data.ctrl.copy(), ",[58,112977,861],{"class":82},[58,112979,31141],{"class":75},[58,112981,112982,112984,112986,112989,112992,112994],{"class":60,"line":17406},[58,112983,35294],{"class":82},[58,112985,793],{"class":75},[58,112987,112988],{"class":386},"\"  obs_dim:\"",[58,112990,112991],{"class":75},", obs.shape[",[58,112993,979],{"class":82},[58,112995,5303],{"class":75},[58,112997,112998],{"class":60,"line":17412},[58,112999,3046],{"emptyLinePlaceholder":720},[58,113001,113002,113004,113006,113008,113010,113012,113014,113016],{"class":60,"line":17426},[58,113003,31943],{"class":82},[58,113005,793],{"class":75},[58,113007,111005],{"class":386},[58,113009,469],{"class":75},[58,113011,32662],{"class":82},[58,113013,111012],{"class":75},[58,113015,861],{"class":82},[58,113017,31141],{"class":75},[58,113019,113020,113022,113024,113027,113030,113032,113034,113036],{"class":60,"line":17439},[58,113021,31943],{"class":82},[58,113023,793],{"class":75},[58,113025,113026],{"class":386},"\"final tip:\"",[58,113028,113029],{"class":75},", np.round(site_position(model, data, ",[58,113031,112165],{"class":386},[58,113033,110974],{"class":75},[58,113035,861],{"class":82},[58,113037,31141],{"class":75},[58,113039,113040,113042,113044,113047,113049,113051,113053,113055],{"class":60,"line":17444},[58,113041,31943],{"class":82},[58,113043,793],{"class":75},[58,113045,113046],{"class":386},"\"target:\"",[58,113048,113029],{"class":75},[58,113050,112588],{"class":386},[58,113052,110974],{"class":75},[58,113054,861],{"class":82},[58,113056,31141],{"class":75},[58,113058,113059],{"class":60,"line":17458},[58,113060,3046],{"emptyLinePlaceholder":720},[58,113062,113063],{"class":60,"line":17463},[58,113064,3046],{"emptyLinePlaceholder":720},[58,113066,113067,113069,113071,113073,113075],{"class":60,"line":17469},[58,113068,2180],{"class":92},[58,113070,31864],{"class":82},[58,113072,102188],{"class":92},[58,113074,102191],{"class":386},[58,113076,4385],{"class":75},[58,113078,113079],{"class":60,"line":17474},[58,113080,102198],{"class":75},[175,113082,104199],{},[48,113084,113086],{"className":24465,"code":113085,"language":24467,"meta":53,"style":53},"touch ch7_reacher.py\n",[55,113087,113088],{"__ignoreMap":53},[58,113089,113090,113092],{"class":60,"line":61},[58,113091,101912],{"class":379},[58,113093,113094],{"class":386}," ch7_reacher.py\n",[175,113096,111073],{},[48,113098,113100],{"className":24465,"code":113099,"language":24467,"meta":53,"style":53},"python ch7_reacher.py\n",[55,113101,113102],{"__ignoreMap":53},[58,113103,113104,113106],{"class":60,"line":61},[58,113105,31024],{"class":379},[58,113107,113094],{"class":386},[114,113109,102201],{"id":102201},[175,113111,113112],{},"读取 site 坐标：",[48,113114,113116],{"className":31022,"code":113115,"language":31024,"meta":53,"style":53},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[55,113117,113118],{"__ignoreMap":53},[58,113119,113120,113122,113124,113126,113128],{"class":60,"line":61},[58,113121,32591],{"class":92},[58,113123,112485],{"class":379},[58,113125,112488],{"class":75},[58,113127,1952],{"class":82},[58,113129,112493],{"class":75},[175,113131,113132],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[175,113134,111089],{},[48,113136,113138],{"className":31022,"code":113137,"language":31024,"meta":53,"style":53},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[55,113139,113140],{"__ignoreMap":53},[58,113141,113142,113144],{"class":60,"line":61},[58,113143,17689],{"class":92},[58,113145,112597],{"class":75},[175,113147,113148],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[175,113150,110414],{},[48,113152,113154],{"className":31022,"code":113153,"language":31024,"meta":53,"style":53},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[55,113155,113156,113168,113181],{"__ignoreMap":53},[58,113157,113158,113160,113162,113164,113166],{"class":60,"line":61},[58,113159,112225],{"class":75},[58,113161,383],{"class":92},[58,113163,112230],{"class":75},[58,113165,1318],{"class":92},[58,113167,112235],{"class":75},[58,113169,113170,113173,113175,113177,113179],{"class":60,"line":68},[58,113171,113172],{"class":75},"control_cost ",[58,113174,383],{"class":92},[58,113176,112666],{"class":82},[58,113178,7164],{"class":92},[58,113180,112671],{"class":75},[58,113182,113183,113185,113187,113189,113191,113193,113195],{"class":60,"line":79},[58,113184,17689],{"class":92},[58,113186,110426],{"class":82},[58,113188,793],{"class":75},[58,113190,1318],{"class":92},[58,113192,112225],{"class":75},[58,113194,1318],{"class":92},[58,113196,112688],{"class":75},[175,113198,113199],{},"奖励由两部分组成：",[19,113201,113202,113207],{},[22,113203,113204,113206],{},[55,113205,112252],{},"：末端离目标越远，奖励越低。",[22,113208,113209,113212],{},[55,113210,113211],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[175,113214,113215],{},"简单控制器：",[48,113217,113219],{"className":31022,"code":113218,"language":31024,"meta":53,"style":53},"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",[55,113220,113221,113234,113266],{"__ignoreMap":53},[58,113222,113223,113226,113228,113230,113232],{"class":60,"line":61},[58,113224,113225],{"class":75},"error ",[58,113227,383],{"class":92},[58,113229,112797],{"class":75},[58,113231,1318],{"class":92},[58,113233,112802],{"class":75},[58,113235,113236,113238,113240,113242,113244,113246,113248,113250,113252,113254,113256,113258,113260,113262,113264],{"class":60,"line":68},[58,113237,106500],{"class":75},[58,113239,979],{"class":82},[58,113241,5089],{"class":75},[58,113243,383],{"class":92},[58,113245,112819],{"class":75},[58,113247,105889],{"class":82},[58,113249,7164],{"class":92},[58,113251,112826],{"class":75},[58,113253,867],{"class":82},[58,113255,112831],{"class":75},[58,113257,1318],{"class":92},[58,113259,103032],{"class":82},[58,113261,469],{"class":75},[58,113263,103032],{"class":82},[58,113265,799],{"class":75},[58,113267,113268,113270,113272,113274,113276,113278,113280,113282,113284,113286,113288,113290,113292,113294,113296],{"class":60,"line":79},[58,113269,106500],{"class":75},[58,113271,89],{"class":82},[58,113273,5089],{"class":75},[58,113275,383],{"class":92},[58,113277,112819],{"class":75},[58,113279,105889],{"class":82},[58,113281,7164],{"class":92},[58,113283,112826],{"class":75},[58,113285,979],{"class":82},[58,113287,112831],{"class":75},[58,113289,1318],{"class":92},[58,113291,103032],{"class":82},[58,113293,469],{"class":75},[58,113295,103032],{"class":82},[58,113297,799],{"class":75},[175,113299,113300],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[114,113302,102337],{"id":102337},[48,113304,113305],{"className":31022,"code":113115,"language":31024,"meta":53,"style":53},[55,113306,113307],{"__ignoreMap":53},[58,113308,113309,113311,113313,113315,113317],{"class":60,"line":61},[58,113310,32591],{"class":92},[58,113312,112485],{"class":379},[58,113314,112488],{"class":75},[58,113316,1952],{"class":82},[58,113318,112493],{"class":75},[175,113320,113321,113322,113324,113325,83169,113327,29029],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[55,113323,80440],{}," 是 site 的名字，比如 ",[55,113326,112165],{},[55,113328,112588],{},[48,113330,113332],{"className":31022,"code":113331,"language":31024,"meta":53,"style":53},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[55,113333,113334],{"__ignoreMap":53},[58,113335,113336,113338,113340],{"class":60,"line":61},[58,113337,104263],{"class":75},[58,113339,383],{"class":92},[58,113341,112502],{"class":75},[175,113343,113344],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[48,113346,113348],{"className":31022,"code":113347,"language":31024,"meta":53,"style":53},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[55,113349,113350,113362],{"__ignoreMap":53},[58,113351,113352,113354,113356,113358,113360],{"class":60,"line":61},[58,113353,2180],{"class":92},[58,113355,104078],{"class":75},[58,113357,373],{"class":92},[58,113359,4739],{"class":82},[58,113361,4385],{"class":75},[58,113363,113364,113366,113368,113370,113372,113374,113376,113378,113380,113382],{"class":60,"line":68},[58,113365,104524],{"class":92},[58,113367,104064],{"class":82},[58,113369,793],{"class":75},[58,113371,843],{"class":92},[58,113373,112527],{"class":386},[58,113375,1681],{"class":82},[58,113377,80440],{"class":75},[58,113379,1730],{"class":82},[58,113381,1037],{"class":386},[58,113383,799],{"class":75},[175,113385,113386,113387,113390,113391,113393],{},"如果 site 没找到，就主动报错。",[55,113388,113389],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[55,113392,80440],{}," 的值放进字符串里。",[48,113395,113397],{"className":31022,"code":113396,"language":31024,"meta":53,"style":53},"return data.site_xpos[site_id].copy()\n",[55,113398,113399],{"__ignoreMap":53},[58,113400,113401,113403],{"class":60,"line":61},[58,113402,17689],{"class":92},[58,113404,112544],{"class":75},[175,113406,113407,113408,113410,113411,113414],{},"返回这个 site 的世界坐标。",[55,113409,104309],{}," 里的每一行都是一个 site 的 ",[55,113412,113413],{},"(x, y, z)"," 坐标。",[48,113416,113418],{"className":31022,"code":113417,"language":31024,"meta":53,"style":53},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[55,113419,113420],{"__ignoreMap":53},[58,113421,113422,113424,113426],{"class":60,"line":61},[58,113423,32591],{"class":92},[58,113425,112559],{"class":379},[58,113427,112562],{"class":75},[175,113429,113430],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[48,113432,113434],{"className":31022,"code":113433,"language":31024,"meta":53,"style":53},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[55,113435,113436,113448],{"__ignoreMap":53},[58,113437,113438,113440,113442,113444,113446],{"class":60,"line":61},[58,113439,112197],{"class":75},[58,113441,383],{"class":92},[58,113443,112572],{"class":75},[58,113445,112165],{"class":386},[58,113447,799],{"class":75},[58,113449,113450,113452,113454,113456,113458],{"class":60,"line":68},[58,113451,112207],{"class":75},[58,113453,383],{"class":92},[58,113455,112572],{"class":75},[58,113457,112588],{"class":386},[58,113459,799],{"class":75},[175,113461,113462],{},"分别读取末端点和目标点的世界坐标。",[48,113464,113465],{"className":31022,"code":113137,"language":31024,"meta":53,"style":53},[55,113466,113467],{"__ignoreMap":53},[58,113468,113469,113471],{"class":60,"line":61},[58,113470,17689],{"class":92},[58,113472,112597],{"class":75},[175,113474,113475],{},"把四部分拼成一个观测数组：",[48,113477,113480],{"className":113478,"code":113479,"language":5833,"meta":53},[5831],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[55,113481,113479],{"__ignoreMap":53},[48,113483,113485],{"className":31022,"code":113484,"language":31024,"meta":53,"style":53},"dist = np.linalg.norm(tip - target)\n",[55,113486,113487],{"__ignoreMap":53},[58,113488,113489,113491,113493,113495,113497],{"class":60,"line":61},[58,113490,112225],{"class":75},[58,113492,383],{"class":92},[58,113494,112230],{"class":75},[58,113496,1318],{"class":92},[58,113498,112235],{"class":75},[175,113500,113501,113502,113505,113506,113509],{},"计算 tip 到 target 的距离。",[55,113503,113504],{},"tip - target"," 得到一个三维向量，",[55,113507,113508],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[175,113511,15277],{},[48,113513,113516],{"className":113514,"code":113515,"language":5833,"meta":53},[5831],"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",[55,113517,113515],{"__ignoreMap":53},[48,113519,113521],{"className":31022,"code":113520,"language":31024,"meta":53,"style":53},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[55,113522,113523],{"__ignoreMap":53},[58,113524,113525,113527,113529,113531,113533],{"class":60,"line":61},[58,113526,113172],{"class":75},[58,113528,383],{"class":92},[58,113530,112666],{"class":82},[58,113532,7164],{"class":92},[58,113534,112671],{"class":75},[175,113536,113537,113538,113541,113542,113545],{},"计算动作惩罚。",[55,113539,113540],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[55,113543,113544],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[48,113547,113549],{"className":31022,"code":113548,"language":31024,"meta":53,"style":53},"return float(-dist - control_cost)\n",[55,113550,113551],{"__ignoreMap":53},[58,113552,113553,113555,113557,113559,113561,113563,113565],{"class":60,"line":61},[58,113554,17689],{"class":92},[58,113556,110426],{"class":82},[58,113558,793],{"class":75},[58,113560,1318],{"class":92},[58,113562,112225],{"class":75},[58,113564,1318],{"class":92},[58,113566,112688],{"class":75},[175,113568,113569],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[48,113571,113572],{"className":31022,"code":111432,"language":31024,"meta":53,"style":53},[55,113573,113574],{"__ignoreMap":53},[58,113575,113576,113578,113580],{"class":60,"line":61},[58,113577,111439],{"class":75},[58,113579,383],{"class":92},[58,113581,105390],{"class":82},[175,113583,113584],{},"累计奖励变量，记录整个运行过程的总分。",[48,113586,113588],{"className":31022,"code":113587,"language":31024,"meta":53,"style":53},"for step in range(500):\n",[55,113589,113590],{"__ignoreMap":53},[58,113591,113592,113594,113596,113598,113600,113602,113604],{"class":60,"line":61},[58,113593,3671],{"class":92},[58,113595,32260],{"class":75},[58,113597,26687],{"class":92},[58,113599,33087],{"class":82},[58,113601,793],{"class":75},[58,113603,65706],{"class":82},[58,113605,31430],{"class":75},[175,113607,113608],{},"运行 500 个控制步。",[48,113610,113611],{"className":31022,"code":105172,"language":31024,"meta":53,"style":53},[55,113612,113613],{"__ignoreMap":53},[58,113614,113615],{"class":60,"line":61},[58,113616,105172],{"class":75},[175,113618,113619,113620,101647,113622,113624],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[55,113621,103860],{},[55,113623,103863],{}," 是当前状态下的坐标。",[48,113626,113628],{"className":31022,"code":113627,"language":31024,"meta":53,"style":53},"error = target - tip\n",[55,113629,113630],{"__ignoreMap":53},[58,113631,113632,113634,113636,113638,113640],{"class":60,"line":61},[58,113633,113225],{"class":75},[58,113635,383],{"class":92},[58,113637,112797],{"class":75},[58,113639,1318],{"class":92},[58,113641,112802],{"class":75},[175,113643,113644],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[48,113646,113648],{"className":31022,"code":113647,"language":31024,"meta":53,"style":53},"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",[55,113649,113650,113682],{"__ignoreMap":53},[58,113651,113652,113654,113656,113658,113660,113662,113664,113666,113668,113670,113672,113674,113676,113678,113680],{"class":60,"line":61},[58,113653,106500],{"class":75},[58,113655,979],{"class":82},[58,113657,5089],{"class":75},[58,113659,383],{"class":92},[58,113661,112819],{"class":75},[58,113663,105889],{"class":82},[58,113665,7164],{"class":92},[58,113667,112826],{"class":75},[58,113669,867],{"class":82},[58,113671,112831],{"class":75},[58,113673,1318],{"class":92},[58,113675,103032],{"class":82},[58,113677,469],{"class":75},[58,113679,103032],{"class":82},[58,113681,799],{"class":75},[58,113683,113684,113686,113688,113690,113692,113694,113696,113698,113700,113702,113704,113706,113708,113710,113712],{"class":60,"line":68},[58,113685,106500],{"class":75},[58,113687,89],{"class":82},[58,113689,5089],{"class":75},[58,113691,383],{"class":92},[58,113693,112819],{"class":75},[58,113695,105889],{"class":82},[58,113697,7164],{"class":92},[58,113699,112826],{"class":75},[58,113701,979],{"class":82},[58,113703,112831],{"class":75},[58,113705,1318],{"class":92},[58,113707,103032],{"class":82},[58,113709,469],{"class":75},[58,113711,103032],{"class":82},[58,113713,799],{"class":75},[175,113715,113716,113717,113720],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[55,113718,113719],{},"error -> ctrl -> step"," 的流程。",[48,113722,113723],{"className":31022,"code":105134,"language":31024,"meta":53,"style":53},[55,113724,113725],{"__ignoreMap":53},[58,113726,113727],{"class":60,"line":61},[58,113728,105134],{"class":75},[175,113730,113731],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[48,113733,113735],{"className":31022,"code":113734,"language":31024,"meta":53,"style":53},"obs = get_obs(model, data)\n",[55,113736,113737],{"__ignoreMap":53},[58,113738,113739,113741,113743],{"class":60,"line":61},[58,113740,111483],{"class":75},[58,113742,383],{"class":92},[58,113744,112920],{"class":75},[175,113746,113747,113748,113751],{},"读取最新观测。后面打印 ",[55,113749,113750],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113753,102945],{"id":102944},[175,113755,113756],{},"观测维度为:",[48,113758,113761],{"className":113759,"code":113760,"language":5833,"meta":53},[5831],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[55,113762,113760],{"__ignoreMap":53},[175,113764,113765],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[175,113767,113768],{},"程序每 100 步打印：",[48,113770,113773],{"className":113771,"code":113772,"language":5833,"meta":53},[5831],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[55,113774,113772],{"__ignoreMap":53},[175,113776,113777,113778,113780],{},"如果控制有效，你应该看到最终 ",[55,113779,103860],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,113782,102977],{"id":102976},[19,113784,113785,113788,113791,113797,113803,113810,113820],{},[22,113786,113787],{},"修改目标点位置。",[22,113789,113790],{},"重新运行，观察最终 tip 是否变化。",[22,113792,113793,113794,113796],{},"把 gravity 改成 ",[55,113795,103218],{},"，观察控制是否变差。",[22,113798,111810,113799,111814,113801,29029],{},[55,113800,102787],{},[55,113802,867],{},[22,113804,103040,113805,103043,113807,113809],{},[55,113806,111225],{},[55,113808,107936],{},"，观察机械臂是否更难移动。",[22,113811,103040,113812,83160,113814,103043,113816,113819],{},[55,113813,103863],{},[55,113815,104775],{},[55,113817,113818],{},"0.2 0 0.6","，观察 reward 和 final tip。",[22,113821,113822],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,113824,103082],{"id":103081},[114,113826,113828],{"id":113827},"site-not-found",[55,113829,113830],{},"site not found",[175,113832,113833,113834,101647,113837,29029],{},"检查 XML 中是否有 ",[55,113835,113836],{},"site name=\"tip\"",[55,113838,113839],{},"site name=\"target\"",[114,113841,113842],{"id":113842},"机械臂完全不动",[175,113844,103152],{},[19,113846,113847,113852,113855,113860],{},[22,113848,113849,113851],{},[55,113850,102787],{}," 是否为 2",[22,113853,113854],{},"actuator 是否引用正确 joint",[22,113856,113857,113859],{},[55,113858,101705],{}," 是否被赋值",[22,113861,113862,113863],{},"是否执行了 ",[55,113864,101314],{},[114,113866,113867],{"id":113867},"控制效果不好",[175,113869,113870],{},"正常。本章重点不是控制器最优，而是任务结构:",[48,113872,113875],{"className":113873,"code":113874,"language":5833,"meta":53},[5831],"obs → action → mj_step → reward → next_obs\n",[55,113876,113874],{"__ignoreMap":53},[114,113878,113880],{"id":113879},"tip-坐标不变化","tip 坐标不变化",[175,113882,103204],{},[19,113884,113885,113890,113898,113907],{},[22,113886,113887,113888,29029],{},"是否每步调用了 ",[55,113889,101314],{},[22,113891,113892,113893,101647,113895,29029],{},"是否写入了 ",[55,113894,106755],{},[55,113896,113897],{},"data.ctrl[1]",[22,113899,113900,113901,1000,113904,29029],{},"actuator 是否正确引用 ",[55,113902,113903],{},"joint1",[55,113905,113906],{},"joint2",[22,113908,113909],{},"控制输入是否太小。",[114,113911,113912],{"id":113912},"目标点不会动",[175,113914,113915],{},"本章的 target 是固定 site：",[48,113917,113919],{"className":53705,"code":113918,"language":53707,"meta":53,"style":53},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[55,113920,113921],{"__ignoreMap":53},[58,113922,113923,113925,113927,113929,113931,113933,113935,113937,113940],{"class":60,"line":61},[58,113924,373],{"class":75},[58,113926,103839],{"class":71},[58,113928,15564],{"class":379},[58,113930,383],{"class":75},[58,113932,112588],{"class":386},[58,113934,101735],{"class":379},[58,113936,383],{"class":75},[58,113938,113939],{"class":386},"\"0.5 0 0.4\"",[58,113941,113942],{"class":75}," ...\u002F>\n",[175,113944,113945,113946,113948],{},"它直接挂在 ",[55,113947,102470],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[114,113950,113951],{"id":113951},"机械臂不像真实机械臂",[175,113953,113954],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,113956,103236],{"id":103235},[175,113958,113959],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[175,113961,113962],{},"核心公式：",[48,113964,113967],{"className":113965,"code":113966,"language":5833,"meta":53},[5831],"distance = ||tip - target||\nreward = -distance - action_cost\n",[55,113968,113966],{"__ignoreMap":53},[175,113970,113971],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[702,113973,113974],{},"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":53,"searchDepth":68,"depth":68,"links":113976},[113977,113978,113979,113984,113988,113989,113990,113998],{"id":101275,"depth":68,"text":101276},{"id":101398,"depth":68,"text":101399},{"id":101673,"depth":68,"text":101674,"children":113980},[113981,113982,113983],{"id":112180,"depth":79,"text":112181},{"id":112256,"depth":79,"text":112256},{"id":112286,"depth":79,"text":112287},{"id":101881,"depth":68,"text":101882,"children":113985},[113986,113987],{"id":102201,"depth":79,"text":102201},{"id":102337,"depth":79,"text":102337},{"id":102944,"depth":68,"text":102945},{"id":102976,"depth":68,"text":102977},{"id":103081,"depth":68,"text":103082,"children":113991},[113992,113993,113994,113995,113996,113997],{"id":113827,"depth":79,"text":113830},{"id":113842,"depth":79,"text":113842},{"id":113867,"depth":79,"text":113867},{"id":113879,"depth":79,"text":113880},{"id":113912,"depth":79,"text":113912},{"id":113951,"depth":79,"text":113951},{"id":103235,"depth":68,"text":103236},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111984,"description":53},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114005,"title":114006,"body":114007,"description":53,"extension":718,"meta":117469,"navigation":720,"path":117470,"seo":117471,"stem":117472,"__hash__":117473},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114008,"toc":117440},[114009,114012,114014,114017,114020,114045,114048,114054,114057,114063,114065,114067,114091,114093,114111,114113,114156,114158,114185,114187,114190,114242,114245,114251,114260,114263,114301,114304,114343,114346,114354,114361,114364,114370,114372,114426,114433,114478,114481,114485,114501,114511,114513,115774,115776,115788,115790,115801,115803,115806,115827,115830,115833,115866,115872,115875,115908,115911,115914,115955,115960,115974,115977,115990,115995,116018,116020,116035,116045,116060,116067,116087,116102,116120,116123,116140,116148,116164,116170,116202,116215,116247,116257,116292,116306,116352,116366,116408,116419,116432,116438,116471,116474,116501,116511,116551,116561,116578,116585,116603,116606,116647,116660,116675,116678,116701,116704,116716,116719,116738,116743,116764,116767,116782,116785,116819,116831,116846,116849,116874,116877,116896,116899,116931,116934,116958,116964,116994,117001,117014,117017,117019,117021,117027,117030,117033,117045,117048,117050,117104,117106,117110,117116,117125,117128,117135,117137,117160,117163,117167,117169,117187,117193,117195,117228,117231,117237,117241,117244,117264,117269,117273,117280,117300,117305,117309,117312,117332,117335,117421,117425,117428,117434,117437],[10,114010,114006],{"id":114011},"_8gymnasium-风格强化学习接口基础",[14,114013,101276],{"id":101275},[175,114015,114016],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[175,114018,114019],{},"你将实现:",[48,114021,114023],{"className":31022,"code":114022,"language":31024,"meta":53,"style":53},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[55,114024,114025,114035],{"__ignoreMap":53},[58,114026,114027,114030,114032],{"class":60,"line":61},[58,114028,114029],{"class":75},"obs, info ",[58,114031,383],{"class":92},[58,114033,114034],{"class":75}," env.reset()\n",[58,114036,114037,114040,114042],{"class":60,"line":68},[58,114038,114039],{"class":75},"obs, reward, terminated, truncated, info ",[58,114041,383],{"class":92},[58,114043,114044],{"class":75}," env.step(action)\n",[175,114046,114047],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[175,114049,114050,114051,114053],{},"前面章节的代码都是“脚本式”的：在 ",[55,114052,102924],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[175,114055,114056],{},"可以先记住 Gymnasium 环境的核心交互：",[48,114058,114061],{"className":114059,"code":114060,"language":5833,"meta":53},[5831],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[55,114062,114060],{"__ignoreMap":53},[14,114064,101399],{"id":101398},[175,114066,101402],{},[48,114068,114069],{"className":24465,"code":105017,"language":24467,"meta":53,"style":53},[55,114070,114071],{"__ignoreMap":53},[58,114072,114073,114075,114077,114079,114081,114083,114085,114087,114089],{"class":60,"line":61},[58,114074,25220],{"class":379},[58,114076,26959],{"class":386},[58,114078,24477],{"class":386},[58,114080,27044],{"class":82},[58,114082,105032],{"class":386},[58,114084,101427],{"class":386},[58,114086,103130],{"class":386},[58,114088,101443],{"class":386},[58,114090,105041],{"class":386},[175,114092,103448],{},[48,114094,114096],{"className":24465,"code":114095,"language":24467,"meta":53,"style":53},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[55,114097,114098],{"__ignoreMap":53},[58,114099,114100,114102,114104,114106,114108],{"class":60,"line":61},[58,114101,24474],{"class":379},[58,114103,24477],{"class":386},[58,114105,101559],{"class":386},[58,114107,108340],{"class":386},[58,114109,114110],{"class":386}," gymnasium\n",[175,114112,103465],{},[48,114114,114116],{"className":24465,"code":114115,"language":24467,"meta":53,"style":53},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[55,114117,114118,114135,114144],{"__ignoreMap":53},[58,114119,114120,114122,114124,114126,114129,114131,114133],{"class":60,"line":61},[58,114121,30974],{"class":379},[58,114123,29820],{"class":386},[58,114125,25759],{"class":82},[58,114127,114128],{"class":386}," mujoco-gym-api",[58,114130,101604],{"class":386},[58,114132,101607],{"class":82},[58,114134,101610],{"class":82},[58,114136,114137,114139,114141],{"class":60,"line":68},[58,114138,30974],{"class":379},[58,114140,101617],{"class":386},[58,114142,114143],{"class":386}," mujoco-gym-api\n",[58,114145,114146,114148,114150,114152,114154],{"class":60,"line":79},[58,114147,24474],{"class":379},[58,114149,24477],{"class":386},[58,114151,101559],{"class":386},[58,114153,108340],{"class":386},[58,114155,114110],{"class":386},[175,114157,101633],{},[19,114159,114160,114170,114173,114179],{},[22,114161,114162,114163,114166,114167,29029],{},"本章使用 ",[55,114164,114165],{},"gymnasium","，不是旧版 ",[55,114168,114169],{},"gym",[22,114171,114172],{},"Gymnasium API 与旧 Gym API 有差异。",[22,114174,114175,114176,29029],{},"旧 Gym 常见返回值是 4 个: ",[55,114177,114178],{},"obs, reward, done, info",[22,114180,114181,114182,29029],{},"Gymnasium 返回值是 5 个: ",[55,114183,114184],{},"obs, reward, terminated, truncated, info",[14,114186,101674],{"id":101673},[175,114188,114189],{},"强化学习环境接口包含:",[926,114191,114192,114201],{},[929,114193,114194],{},[932,114195,114196,114199],{},[935,114197,114198],{"align":24379},"方法",[935,114200,103325],{"align":24379},[972,114202,114203,114213,114223,114233],{},[932,114204,114205,114210],{},[977,114206,114207],{"align":24379},[55,114208,114209],{},"reset()",[977,114211,114212],{"align":24379},"重置环境",[932,114214,114215,114220],{},[977,114216,114217],{"align":24379},[55,114218,114219],{},"step(action)",[977,114221,114222],{"align":24379},"执行动作",[932,114224,114225,114230],{},[977,114226,114227],{"align":24379},[55,114228,114229],{},"observation_space",[977,114231,114232],{"align":24379},"观测空间",[932,114234,114235,114240],{},[977,114236,114237],{"align":24379},[55,114238,114239],{},"action_space",[977,114241,24297],{"align":24379},[175,114243,114244],{},"一个最小环境需要完成:",[48,114246,114249],{"className":114247,"code":114248,"language":5833,"meta":53},[5831],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[55,114250,114248],{"__ignoreMap":53},[114,114252,114254,101647,114257,105267],{"id":114253},"terminated-和-truncated-的区别",[55,114255,114256],{},"terminated",[55,114258,114259],{},"truncated",[175,114261,114262],{},"Gymnasium 把“结束”拆成两个概念：",[926,114264,114265,114275],{},[929,114266,114267],{},[932,114268,114269,114271,114273],{},[935,114270,105203],{"align":24379},[935,114272,101329],{"align":24379},[935,114274,21830],{"align":24379},[972,114276,114277,114289],{},[932,114278,114279,114283,114286],{},[977,114280,114281],{"align":24379},[55,114282,114256],{},[977,114284,114285],{"align":24379},"任务自然结束",[977,114287,114288],{"align":24379},"机械臂到达目标、机器人摔倒",[932,114290,114291,114295,114298],{},[977,114292,114293],{"align":24379},[55,114294,114259],{},[977,114296,114297],{"align":24379},"因外部限制截断",[977,114299,114300],{"align":24379},"达到最大步数、时间限制",[175,114302,114303],{},"本章中：",[48,114305,114307],{"className":31022,"code":114306,"language":31024,"meta":53,"style":53},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[55,114308,114309,114324],{"__ignoreMap":53},[58,114310,114311,114314,114316,114319,114321],{"class":60,"line":61},[58,114312,114313],{"class":75},"terminated ",[58,114315,383],{"class":92},[58,114317,114318],{"class":75}," dist ",[58,114320,373],{"class":92},[58,114322,114323],{"class":82}," 0.05\n",[58,114325,114326,114329,114331,114333,114336,114338,114340],{"class":60,"line":68},[58,114327,114328],{"class":75},"truncated ",[58,114330,383],{"class":92},[58,114332,39517],{"class":82},[58,114334,114335],{"class":75},".steps ",[58,114337,2357],{"class":92},[58,114339,39517],{"class":82},[58,114341,114342],{"class":75},".max_steps\n",[175,114344,114345],{},"也就是：",[19,114347,114348,114351],{},[22,114349,114350],{},"末端距离目标小于 0.05，任务成功结束。",[22,114352,114353],{},"步数超过上限，episode 被截断。",[114,114355,114357,101647,114359],{"id":114356},"observation_space-和-action_space",[55,114358,114229],{},[55,114360,114239],{},[175,114362,114363],{},"这两个对象告诉算法：",[48,114365,114368],{"className":114366,"code":114367,"language":5833,"meta":53},[5831],"观测长什么样\n动作允许多大\n",[55,114369,114367],{"__ignoreMap":53},[175,114371,15277],{},[48,114373,114375],{"className":31022,"code":114374,"language":31024,"meta":53,"style":53},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[55,114376,114377],{"__ignoreMap":53},[58,114378,114379,114381,114384,114386,114389,114392,114395,114397,114399,114402,114404,114406,114408,114410,114412,114414,114416,114419,114421,114423],{"class":60,"line":61},[58,114380,31467],{"class":82},[58,114382,114383],{"class":75},".action_space ",[58,114385,383],{"class":92},[58,114387,114388],{"class":75}," spaces.Box(",[58,114390,114391],{"class":5862},"low",[58,114393,114394],{"class":92},"=-",[58,114396,103032],{"class":82},[58,114398,469],{"class":75},[58,114400,114401],{"class":5862},"high",[58,114403,383],{"class":92},[58,114405,103032],{"class":82},[58,114407,469],{"class":75},[58,114409,96592],{"class":5862},[58,114411,383],{"class":92},[58,114413,793],{"class":75},[58,114415,867],{"class":82},[58,114417,114418],{"class":75},",), ",[58,114420,94129],{"class":5862},[58,114422,383],{"class":92},[58,114424,114425],{"class":75},"np.float32)\n",[175,114427,114428,114429,114432],{},"表示动作是 2 维数组，每个值都在 ",[55,114430,114431],{},"[-1, 1]"," 范围内。",[48,114434,114436],{"className":31022,"code":114435,"language":31024,"meta":53,"style":53},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[55,114437,114438],{"__ignoreMap":53},[58,114439,114440,114442,114445,114447,114449,114451,114453,114456,114458,114460,114462,114464,114466,114468,114470,114472,114474,114476],{"class":60,"line":61},[58,114441,31467],{"class":82},[58,114443,114444],{"class":75},".observation_space ",[58,114446,383],{"class":92},[58,114448,114388],{"class":75},[58,114450,114391],{"class":5862},[58,114452,114394],{"class":92},[58,114454,114455],{"class":75},"np.inf, ",[58,114457,114401],{"class":5862},[58,114459,383],{"class":92},[58,114461,114455],{"class":75},[58,114463,96592],{"class":5862},[58,114465,383],{"class":92},[58,114467,793],{"class":75},[58,114469,1232],{"class":82},[58,114471,114418],{"class":75},[58,114473,94129],{"class":5862},[58,114475,383],{"class":92},[58,114477,114425],{"class":75},[175,114479,114480],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[114,114482,114484],{"id":114483},"frame_skip-是什么","frame_skip 是什么",[48,114486,114488],{"className":31022,"code":114487,"language":31024,"meta":53,"style":53},"self.frame_skip = 5\n",[55,114489,114490],{"__ignoreMap":53},[58,114491,114492,114494,114497,114499],{"class":60,"line":61},[58,114493,31467],{"class":82},[58,114495,114496],{"class":75},".frame_skip ",[58,114498,383],{"class":92},[58,114500,55063],{"class":82},[175,114502,114503,114504,114507,114508,114510],{},"表示外部调用一次 ",[55,114505,114506],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[55,114509,101844],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,114512,101882],{"id":101881},[48,114514,114516],{"className":31022,"code":114515,"language":31024,"meta":53,"style":53},"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",[55,114517,114518,114530,114536,114546,114557,114561,114565,114573,114578,114582,114586,114590,114594,114598,114602,114606,114611,114615,114619,114623,114628,114632,114636,114640,114644,114648,114652,114656,114660,114664,114668,114672,114676,114680,114698,114713,114717,114730,114740,114755,114772,114776,114797,114816,114841,114855,114859,114869,114881,114891,114895,114937,114975,114979,114989,115005,115020,115039,115046,115050,115063,115078,115093,115106,115125,115141,115145,115186,115201,115216,115220,115259,115270,115283,115287,115297,115306,115310,115320,115335,115353,115357,115368,115385,115398,115402,115412,115416,115427,115438,115442,115456,115470,115486,115490,115503,115520,115535,115542,115546,115550,115562,115572,115590,115602,115614,115618,115626,115642,115651,115660,115668,115710,115723,115728,115732,115750,115754,115758,115770],{"__ignoreMap":53},[58,114519,114520,114522,114525,114527],{"class":60,"line":61},[58,114521,31036],{"class":92},[58,114523,114524],{"class":75}," gymnasium ",[58,114526,32027],{"class":92},[58,114528,114529],{"class":75}," gym\n",[58,114531,114532,114534],{"class":60,"line":68},[58,114533,31036],{"class":92},[58,114535,101930],{"class":75},[58,114537,114538,114540,114542,114544],{"class":60,"line":79},[58,114539,31036],{"class":92},[58,114541,32024],{"class":75},[58,114543,32027],{"class":92},[58,114545,32030],{"class":75},[58,114547,114548,114550,114552,114554],{"class":60,"line":105},[58,114549,31381],{"class":92},[58,114551,114524],{"class":75},[58,114553,31036],{"class":92},[58,114555,114556],{"class":75}," spaces\n",[58,114558,114559],{"class":60,"line":627},[58,114560,3046],{"emptyLinePlaceholder":720},[58,114562,114563],{"class":60,"line":509},[58,114564,3046],{"emptyLinePlaceholder":720},[58,114566,114567,114569,114571],{"class":60,"line":559},[58,114568,101943],{"class":82},[58,114570,14208],{"class":92},[58,114572,101948],{"class":386},[58,114574,114575],{"class":60,"line":654},[58,114576,114577],{"class":386},"\u003Cmujoco model=\"gym_reacher\">\n",[58,114579,114580],{"class":60,"line":671},[58,114581,112367],{"class":386},[58,114583,114584],{"class":60,"line":677},[58,114585,3046],{"emptyLinePlaceholder":720},[58,114587,114588],{"class":60,"line":2260},[58,114589,101967],{"class":386},[58,114591,114592],{"class":60,"line":694},[58,114593,112385],{"class":386},[58,114595,114596],{"class":60,"line":2270},[58,114597,3046],{"emptyLinePlaceholder":720},[58,114599,114600],{"class":60,"line":2275},[58,114601,112394],{"class":386},[58,114603,114604],{"class":60,"line":2289},[58,114605,112399],{"class":386},[58,114607,114608],{"class":60,"line":2294},[58,114609,114610],{"class":386},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[58,114612,114613],{"class":60,"line":2300},[58,114614,3046],{"emptyLinePlaceholder":720},[58,114616,114617],{"class":60,"line":2321},[58,114618,112413],{"class":386},[58,114620,114621],{"class":60,"line":2326},[58,114622,112418],{"class":386},[58,114624,114625],{"class":60,"line":2340},[58,114626,114627],{"class":386},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[58,114629,114630],{"class":60,"line":2345},[58,114631,112428],{"class":386},[58,114633,114634],{"class":60,"line":2374},[58,114635,107067],{"class":386},[58,114637,114638],{"class":60,"line":2379},[58,114639,101996],{"class":386},[58,114641,114642],{"class":60,"line":2396},[58,114643,102001],{"class":386},[58,114645,114646],{"class":60,"line":2401},[58,114647,3046],{"emptyLinePlaceholder":720},[58,114649,114650],{"class":60,"line":2406},[58,114651,107084],{"class":386},[58,114653,114654],{"class":60,"line":2411},[58,114655,112453],{"class":386},[58,114657,114658],{"class":60,"line":2425},[58,114659,112458],{"class":386},[58,114661,114662],{"class":60,"line":2430},[58,114663,107094],{"class":386},[58,114665,114666],{"class":60,"line":3223},[58,114667,102006],{"class":386},[58,114669,114670],{"class":60,"line":3237},[58,114671,96327],{"class":386},[58,114673,114674],{"class":60,"line":3245},[58,114675,3046],{"emptyLinePlaceholder":720},[58,114677,114678],{"class":60,"line":3250},[58,114679,3046],{"emptyLinePlaceholder":720},[58,114681,114682,114684,114687,114689,114691,114693,114696],{"class":60,"line":3256},[58,114683,15338],{"class":92},[58,114685,114686],{"class":379}," ReacherEnv",[58,114688,793],{"class":75},[58,114690,114169],{"class":379},[58,114692,1344],{"class":75},[58,114694,114695],{"class":379},"Env",[58,114697,31430],{"class":75},[58,114699,114700,114703,114705,114707,114710],{"class":60,"line":3262},[58,114701,114702],{"class":75},"    metadata ",[58,114704,383],{"class":92},[58,114706,5094],{"class":75},[58,114708,114709],{"class":386},"\"render_modes\"",[58,114711,114712],{"class":75},": []}\n",[58,114714,114715],{"class":60,"line":3267},[58,114716,3046],{"emptyLinePlaceholder":720},[58,114718,114719,114721,114723,114726,114728],{"class":60,"line":8594},[58,114720,31445],{"class":92},[58,114722,31448],{"class":82},[58,114724,114725],{"class":75},"(self) -> ",[58,114727,96315],{"class":82},[58,114729,4385],{"class":75},[58,114731,114732,114734,114736,114738],{"class":60,"line":8618},[58,114733,31461],{"class":82},[58,114735,17904],{"class":75},[58,114737,31473],{"class":82},[58,114739,2622],{"class":75},[58,114741,114742,114744,114747,114749,114751,114753],{"class":60,"line":8623},[58,114743,31489],{"class":82},[58,114745,114746],{"class":75},".model ",[58,114748,383],{"class":92},[58,114750,102041],{"class":75},[58,114752,101943],{"class":82},[58,114754,799],{"class":75},[58,114756,114757,114759,114762,114764,114767,114769],{"class":60,"line":8629},[58,114758,31489],{"class":82},[58,114760,114761],{"class":75},".data ",[58,114763,383],{"class":92},[58,114765,114766],{"class":75}," mujoco.MjData(",[58,114768,31467],{"class":82},[58,114770,114771],{"class":75},".model)\n",[58,114773,114774],{"class":60,"line":8656},[58,114775,3046],{"emptyLinePlaceholder":720},[58,114777,114778,114780,114783,114785,114788,114790,114793,114795],{"class":60,"line":8661},[58,114779,31489],{"class":82},[58,114781,114782],{"class":75},".tip_site_id ",[58,114784,383],{"class":92},[58,114786,114787],{"class":75}," mujoco.mj_name2id(",[58,114789,31467],{"class":82},[58,114791,114792],{"class":75},".model, mujoco.mjtObj.mjOBJ_SITE, ",[58,114794,112165],{"class":386},[58,114796,799],{"class":75},[58,114798,114799,114801,114804,114806,114808,114810,114812,114814],{"class":60,"line":8667},[58,114800,31489],{"class":82},[58,114802,114803],{"class":75},".target_site_id ",[58,114805,383],{"class":92},[58,114807,114787],{"class":75},[58,114809,31467],{"class":82},[58,114811,114792],{"class":75},[58,114813,112588],{"class":386},[58,114815,799],{"class":75},[58,114817,114818,114820,114822,114824,114826,114828,114831,114833,114835,114837,114839],{"class":60,"line":8679},[58,114819,3143],{"class":92},[58,114821,39517],{"class":82},[58,114823,114782],{"class":75},[58,114825,373],{"class":92},[58,114827,4739],{"class":82},[58,114829,114830],{"class":92}," or",[58,114832,39517],{"class":82},[58,114834,114803],{"class":75},[58,114836,373],{"class":92},[58,114838,4739],{"class":82},[58,114840,4385],{"class":75},[58,114842,114843,114846,114848,114850,114853],{"class":60,"line":8691},[58,114844,114845],{"class":92},"            raise",[58,114847,104064],{"class":82},[58,114849,793],{"class":75},[58,114851,114852],{"class":386},"\"required sites not found\"",[58,114854,799],{"class":75},[58,114856,114857],{"class":60,"line":8703},[58,114858,3046],{"emptyLinePlaceholder":720},[58,114860,114861,114863,114865,114867],{"class":60,"line":10361},[58,114862,31489],{"class":82},[58,114864,114496],{"class":75},[58,114866,383],{"class":92},[58,114868,55063],{"class":82},[58,114870,114871,114873,114876,114878],{"class":60,"line":10386},[58,114872,31489],{"class":82},[58,114874,114875],{"class":75},".max_steps ",[58,114877,383],{"class":92},[58,114879,114880],{"class":82}," 200\n",[58,114882,114883,114885,114887,114889],{"class":60,"line":10409},[58,114884,31489],{"class":82},[58,114886,114335],{"class":75},[58,114888,383],{"class":92},[58,114890,47977],{"class":82},[58,114892,114893],{"class":60,"line":10433},[58,114894,3046],{"emptyLinePlaceholder":720},[58,114896,114897,114899,114901,114903,114905,114907,114909,114911,114913,114915,114917,114919,114921,114923,114925,114927,114929,114931,114933,114935],{"class":60,"line":10438},[58,114898,31489],{"class":82},[58,114900,114383],{"class":75},[58,114902,383],{"class":92},[58,114904,114388],{"class":75},[58,114906,114391],{"class":5862},[58,114908,114394],{"class":92},[58,114910,103032],{"class":82},[58,114912,469],{"class":75},[58,114914,114401],{"class":5862},[58,114916,383],{"class":92},[58,114918,103032],{"class":82},[58,114920,469],{"class":75},[58,114922,96592],{"class":5862},[58,114924,383],{"class":92},[58,114926,793],{"class":75},[58,114928,867],{"class":82},[58,114930,114418],{"class":75},[58,114932,94129],{"class":5862},[58,114934,383],{"class":92},[58,114936,114425],{"class":75},[58,114938,114939,114941,114943,114945,114947,114949,114951,114953,114955,114957,114959,114961,114963,114965,114967,114969,114971,114973],{"class":60,"line":10443},[58,114940,31489],{"class":82},[58,114942,114444],{"class":75},[58,114944,383],{"class":92},[58,114946,114388],{"class":75},[58,114948,114391],{"class":5862},[58,114950,114394],{"class":92},[58,114952,114455],{"class":75},[58,114954,114401],{"class":5862},[58,114956,383],{"class":92},[58,114958,114455],{"class":75},[58,114960,96592],{"class":5862},[58,114962,383],{"class":92},[58,114964,793],{"class":75},[58,114966,1232],{"class":82},[58,114968,114418],{"class":75},[58,114970,94129],{"class":5862},[58,114972,383],{"class":92},[58,114974,114425],{"class":75},[58,114976,114977],{"class":60,"line":10448},[58,114978,3046],{"emptyLinePlaceholder":720},[58,114980,114981,114983,114986],{"class":60,"line":10457},[58,114982,31445],{"class":92},[58,114984,114985],{"class":379}," _get_obs",[58,114987,114988],{"class":75},"(self) -> np.ndarray:\n",[58,114990,114991,114993,114995,114997,115000,115002],{"class":60,"line":10462},[58,114992,112766],{"class":75},[58,114994,383],{"class":92},[58,114996,39517],{"class":82},[58,114998,114999],{"class":75},".data.site_xpos[",[58,115001,31467],{"class":82},[58,115003,115004],{"class":75},".tip_site_id].copy()\n",[58,115006,115007,115009,115011,115013,115015,115017],{"class":60,"line":10468},[58,115008,112779],{"class":75},[58,115010,383],{"class":92},[58,115012,39517],{"class":82},[58,115014,114999],{"class":75},[58,115016,31467],{"class":82},[58,115018,115019],{"class":75},".target_site_id].copy()\n",[58,115021,115022,115024,115026,115029,115031,115034,115036],{"class":60,"line":10489},[58,115023,110811],{"class":75},[58,115025,383],{"class":92},[58,115027,115028],{"class":75}," np.concatenate([",[58,115030,31467],{"class":82},[58,115032,115033],{"class":75},".data.qpos.copy(), ",[58,115035,31467],{"class":82},[58,115037,115038],{"class":75},".data.qvel.copy(), tip, target])\n",[58,115040,115041,115043],{"class":60,"line":10495},[58,115042,15396],{"class":92},[58,115044,115045],{"class":75}," obs.astype(np.float32)\n",[58,115047,115048],{"class":60,"line":10509},[58,115049,3046],{"emptyLinePlaceholder":720},[58,115051,115052,115054,115057,115059,115061],{"class":60,"line":10515},[58,115053,31445],{"class":92},[58,115055,115056],{"class":379}," _get_reward",[58,115058,114725],{"class":75},[58,115060,832],{"class":82},[58,115062,4385],{"class":75},[58,115064,115065,115067,115069,115071,115073,115075],{"class":60,"line":10542},[58,115066,112766],{"class":75},[58,115068,383],{"class":92},[58,115070,39517],{"class":82},[58,115072,114999],{"class":75},[58,115074,31467],{"class":82},[58,115076,115077],{"class":75},".tip_site_id]\n",[58,115079,115080,115082,115084,115086,115088,115090],{"class":60,"line":10551},[58,115081,112779],{"class":75},[58,115083,383],{"class":92},[58,115085,39517],{"class":82},[58,115087,114999],{"class":75},[58,115089,31467],{"class":82},[58,115091,115092],{"class":75},".target_site_id]\n",[58,115094,115095,115098,115100,115102,115104],{"class":60,"line":10557},[58,115096,115097],{"class":75},"        dist ",[58,115099,383],{"class":92},[58,115101,112230],{"class":75},[58,115103,1318],{"class":92},[58,115105,112235],{"class":75},[58,115107,115108,115111,115113,115115,115117,115120,115122],{"class":60,"line":10565},[58,115109,115110],{"class":75},"        control_cost ",[58,115112,383],{"class":92},[58,115114,112666],{"class":82},[58,115116,7164],{"class":92},[58,115118,115119],{"class":75}," np.sum(np.square(",[58,115121,31467],{"class":82},[58,115123,115124],{"class":75},".data.ctrl))\n",[58,115126,115127,115129,115131,115133,115135,115137,115139],{"class":60,"line":10570},[58,115128,15396],{"class":92},[58,115130,110426],{"class":82},[58,115132,793],{"class":75},[58,115134,1318],{"class":92},[58,115136,112225],{"class":75},[58,115138,1318],{"class":92},[58,115140,112688],{"class":75},[58,115142,115143],{"class":60,"line":17247},[58,115144,3046],{"emptyLinePlaceholder":720},[58,115146,115147,115149,115152,115155,115157,115160,115162,115164,115166,115168,115170,115173,115176,115178,115180,115182,115184],{"class":60,"line":17253},[58,115148,31445],{"class":92},[58,115150,115151],{"class":379}," reset",[58,115153,115154],{"class":75},"(self, ",[58,115156,1241],{"class":92},[58,115158,115159],{"class":75},", seed: ",[58,115161,796],{"class":82},[58,115163,25753],{"class":92},[58,115165,39577],{"class":82},[58,115167,14208],{"class":92},[58,115169,39577],{"class":82},[58,115171,115172],{"class":75},", options: ",[58,115174,115175],{"class":82},"dict",[58,115177,25753],{"class":92},[58,115179,39577],{"class":82},[58,115181,14208],{"class":92},[58,115183,39577],{"class":82},[58,115185,31430],{"class":75},[58,115187,115188,115190,115193,115196,115198],{"class":60,"line":17276},[58,115189,31461],{"class":82},[58,115191,115192],{"class":75},"().reset(",[58,115194,115195],{"class":5862},"seed",[58,115197,383],{"class":92},[58,115199,115200],{"class":75},"seed)\n",[58,115202,115203,115206,115208,115211,115213],{"class":60,"line":17282},[58,115204,115205],{"class":75},"        mujoco.mj_resetData(",[58,115207,31467],{"class":82},[58,115209,115210],{"class":75},".model, ",[58,115212,31467],{"class":82},[58,115214,115215],{"class":75},".data)\n",[58,115217,115218],{"class":60,"line":17305},[58,115219,3046],{"emptyLinePlaceholder":720},[58,115221,115222,115224,115227,115229,115231,115234,115236,115238,115240,115242,115244,115246,115248,115250,115252,115254,115256],{"class":60,"line":17319},[58,115223,31489],{"class":82},[58,115225,115226],{"class":75},".data.qpos[:] ",[58,115228,383],{"class":92},[58,115230,39517],{"class":82},[58,115232,115233],{"class":75},".np_random.uniform(",[58,115235,114391],{"class":5862},[58,115237,114394],{"class":92},[58,115239,86840],{"class":82},[58,115241,469],{"class":75},[58,115243,114401],{"class":5862},[58,115245,383],{"class":92},[58,115247,86840],{"class":82},[58,115249,469],{"class":75},[58,115251,32140],{"class":5862},[58,115253,383],{"class":92},[58,115255,31467],{"class":82},[58,115257,115258],{"class":75},".model.nq)\n",[58,115260,115261,115263,115266,115268],{"class":60,"line":17339},[58,115262,31489],{"class":82},[58,115264,115265],{"class":75},".data.qvel[:] ",[58,115267,383],{"class":92},[58,115269,105390],{"class":82},[58,115271,115272,115275,115277,115279,115281],{"class":60,"line":17345},[58,115273,115274],{"class":75},"        mujoco.mj_forward(",[58,115276,31467],{"class":82},[58,115278,115210],{"class":75},[58,115280,31467],{"class":82},[58,115282,115215],{"class":75},[58,115284,115285],{"class":60,"line":17356},[58,115286,3046],{"emptyLinePlaceholder":720},[58,115288,115289,115291,115293,115295],{"class":60,"line":17379},[58,115290,31489],{"class":82},[58,115292,114335],{"class":75},[58,115294,383],{"class":92},[58,115296,47977],{"class":82},[58,115298,115299,115301,115303],{"class":60,"line":17401},[58,115300,15396],{"class":92},[58,115302,39517],{"class":82},[58,115304,115305],{"class":75},"._get_obs(), {}\n",[58,115307,115308],{"class":60,"line":17406},[58,115309,3046],{"emptyLinePlaceholder":720},[58,115311,115312,115314,115317],{"class":60,"line":17412},[58,115313,31445],{"class":92},[58,115315,115316],{"class":379}," step",[58,115318,115319],{"class":75},"(self, action):\n",[58,115321,115322,115324,115326,115329,115331,115333],{"class":60,"line":17426},[58,115323,110851],{"class":75},[58,115325,383],{"class":92},[58,115327,115328],{"class":75}," np.asarray(action, ",[58,115330,94129],{"class":5862},[58,115332,383],{"class":92},[58,115334,114425],{"class":75},[58,115336,115337,115339,115341,115343,115345,115348,115350],{"class":60,"line":17439},[58,115338,110851],{"class":75},[58,115340,383],{"class":92},[58,115342,108076],{"class":75},[58,115344,31467],{"class":82},[58,115346,115347],{"class":75},".action_space.low, ",[58,115349,31467],{"class":82},[58,115351,115352],{"class":75},".action_space.high)\n",[58,115354,115355],{"class":60,"line":17444},[58,115356,3046],{"emptyLinePlaceholder":720},[58,115358,115359,115361,115364,115366],{"class":60,"line":17458},[58,115360,31489],{"class":82},[58,115362,115363],{"class":75},".data.ctrl[:] ",[58,115365,383],{"class":92},[58,115367,108099],{"class":75},[58,115369,115370,115372,115374,115376,115378,115380,115382],{"class":60,"line":17463},[58,115371,4049],{"class":92},[58,115373,102130],{"class":75},[58,115375,26687],{"class":92},[58,115377,33087],{"class":82},[58,115379,793],{"class":75},[58,115381,31467],{"class":82},[58,115383,115384],{"class":75},".frame_skip):\n",[58,115386,115387,115390,115392,115394,115396],{"class":60,"line":17469},[58,115388,115389],{"class":75},"            mujoco.mj_step(",[58,115391,31467],{"class":82},[58,115393,115210],{"class":75},[58,115395,31467],{"class":82},[58,115397,115215],{"class":75},[58,115399,115400],{"class":60,"line":17474},[58,115401,3046],{"emptyLinePlaceholder":720},[58,115403,115404,115406,115408,115410],{"class":60,"line":17488},[58,115405,31489],{"class":82},[58,115407,114335],{"class":75},[58,115409,10122],{"class":92},[58,115411,56333],{"class":82},[58,115413,115414],{"class":60,"line":17493},[58,115415,3046],{"emptyLinePlaceholder":720},[58,115417,115418,115420,115422,115424],{"class":60,"line":17498},[58,115419,110811],{"class":75},[58,115421,383],{"class":92},[58,115423,39517],{"class":82},[58,115425,115426],{"class":75},"._get_obs()\n",[58,115428,115429,115431,115433,115435],{"class":60,"line":17512},[58,115430,110916],{"class":75},[58,115432,383],{"class":92},[58,115434,39517],{"class":82},[58,115436,115437],{"class":75},"._get_reward()\n",[58,115439,115440],{"class":60,"line":17524},[58,115441,3046],{"emptyLinePlaceholder":720},[58,115443,115444,115446,115448,115450,115452,115454],{"class":60,"line":17529},[58,115445,112766],{"class":75},[58,115447,383],{"class":92},[58,115449,39517],{"class":82},[58,115451,114999],{"class":75},[58,115453,31467],{"class":82},[58,115455,115077],{"class":75},[58,115457,115458,115460,115462,115464,115466,115468],{"class":60,"line":17542},[58,115459,112779],{"class":75},[58,115461,383],{"class":92},[58,115463,39517],{"class":82},[58,115465,114999],{"class":75},[58,115467,31467],{"class":82},[58,115469,115092],{"class":75},[58,115471,115472,115474,115476,115478,115481,115483],{"class":60,"line":17547},[58,115473,115097],{"class":75},[58,115475,383],{"class":92},[58,115477,110426],{"class":82},[58,115479,115480],{"class":75},"(np.linalg.norm(tip ",[58,115482,1318],{"class":92},[58,115484,115485],{"class":75}," target))\n",[58,115487,115488],{"class":60,"line":17552},[58,115489,3046],{"emptyLinePlaceholder":720},[58,115491,115492,115495,115497,115499,115501],{"class":60,"line":17557},[58,115493,115494],{"class":75},"        terminated ",[58,115496,383],{"class":92},[58,115498,114318],{"class":75},[58,115500,373],{"class":92},[58,115502,114323],{"class":82},[58,115504,115505,115508,115510,115512,115514,115516,115518],{"class":60,"line":17570},[58,115506,115507],{"class":75},"        truncated ",[58,115509,383],{"class":92},[58,115511,39517],{"class":82},[58,115513,114335],{"class":75},[58,115515,2357],{"class":92},[58,115517,39517],{"class":82},[58,115519,114342],{"class":75},[58,115521,115522,115525,115527,115529,115532],{"class":60,"line":17575},[58,115523,115524],{"class":75},"        info ",[58,115526,383],{"class":92},[58,115528,5094],{"class":75},[58,115530,115531],{"class":386},"\"distance\"",[58,115533,115534],{"class":75},": dist}\n",[58,115536,115537,115539],{"class":60,"line":33277},[58,115538,15396],{"class":92},[58,115540,115541],{"class":75}," obs, reward, terminated, truncated, info\n",[58,115543,115544],{"class":60,"line":33283},[58,115545,3046],{"emptyLinePlaceholder":720},[58,115547,115548],{"class":60,"line":33289},[58,115549,3046],{"emptyLinePlaceholder":720},[58,115551,115552,115554,115556,115558,115560],{"class":60,"line":33295},[58,115553,32591],{"class":92},[58,115555,2619],{"class":379},[58,115557,102027],{"class":75},[58,115559,96315],{"class":82},[58,115561,4385],{"class":75},[58,115563,115564,115567,115569],{"class":60,"line":33301},[58,115565,115566],{"class":75},"    env ",[58,115568,383],{"class":92},[58,115570,115571],{"class":75}," ReacherEnv()\n",[58,115573,115574,115577,115579,115582,115584,115586,115588],{"class":60,"line":33312},[58,115575,115576],{"class":75},"    obs, info ",[58,115578,383],{"class":92},[58,115580,115581],{"class":75}," env.reset(",[58,115583,115195],{"class":5862},[58,115585,383],{"class":92},[58,115587,979],{"class":82},[58,115589,799],{"class":75},[58,115591,115592,115594,115596,115599],{"class":60,"line":33318},[58,115593,31943],{"class":82},[58,115595,793],{"class":75},[58,115597,115598],{"class":386},"\"initial obs shape:\"",[58,115600,115601],{"class":75},", obs.shape)\n",[58,115603,115604,115606,115608,115611],{"class":60,"line":33338},[58,115605,31943],{"class":82},[58,115607,793],{"class":75},[58,115609,115610],{"class":386},"\"initial info:\"",[58,115612,115613],{"class":75},", info)\n",[58,115615,115616],{"class":60,"line":33344},[58,115617,3046],{"emptyLinePlaceholder":720},[58,115619,115620,115622,115624],{"class":60,"line":33355},[58,115621,110782],{"class":75},[58,115623,383],{"class":92},[58,115625,105390],{"class":82},[58,115627,115628,115630,115632,115634,115636,115638,115640],{"class":60,"line":33361},[58,115629,3847],{"class":92},[58,115631,32260],{"class":75},[58,115633,26687],{"class":92},[58,115635,33087],{"class":82},[58,115637,793],{"class":75},[58,115639,1486],{"class":82},[58,115641,31430],{"class":75},[58,115643,115644,115646,115648],{"class":60,"line":33367},[58,115645,110851],{"class":75},[58,115647,383],{"class":92},[58,115649,115650],{"class":75}," env.action_space.sample()\n",[58,115652,115653,115656,115658],{"class":60,"line":33373},[58,115654,115655],{"class":75},"        obs, reward, terminated, truncated, info ",[58,115657,383],{"class":92},[58,115659,114044],{"class":75},[58,115661,115662,115664,115666],{"class":60,"line":33379},[58,115663,110926],{"class":75},[58,115665,10122],{"class":92},[58,115667,110931],{"class":75},[58,115669,115670,115672,115674,115676,115678,115681,115683,115685,115688,115690,115692,115695,115697,115699,115702,115704,115706,115708],{"class":60,"line":33385},[58,115671,33095],{"class":82},[58,115673,793],{"class":75},[58,115675,110960],{"class":386},[58,115677,110963],{"class":75},[58,115679,115680],{"class":386},"\"reward:\"",[58,115682,469],{"class":75},[58,115684,32662],{"class":82},[58,115686,115687],{"class":75},"(reward, ",[58,115689,861],{"class":82},[58,115691,110974],{"class":75},[58,115693,115694],{"class":386},"\"distance:\"",[58,115696,469],{"class":75},[58,115698,32662],{"class":82},[58,115700,115701],{"class":75},"(info[",[58,115703,115531],{"class":386},[58,115705,112831],{"class":75},[58,115707,861],{"class":82},[58,115709,31141],{"class":75},[58,115711,115712,115714,115717,115720],{"class":60,"line":33391},[58,115713,3143],{"class":92},[58,115715,115716],{"class":75}," terminated ",[58,115718,115719],{"class":92},"or",[58,115721,115722],{"class":75}," truncated:\n",[58,115724,115725],{"class":60,"line":33397},[58,115726,115727],{"class":92},"            break\n",[58,115729,115730],{"class":60,"line":33417},[58,115731,3046],{"emptyLinePlaceholder":720},[58,115733,115734,115736,115738,115740,115742,115744,115746,115748],{"class":60,"line":33423},[58,115735,31943],{"class":82},[58,115737,793],{"class":75},[58,115739,111005],{"class":386},[58,115741,469],{"class":75},[58,115743,32662],{"class":82},[58,115745,111012],{"class":75},[58,115747,861],{"class":82},[58,115749,31141],{"class":75},[58,115751,115752],{"class":60,"line":33439},[58,115753,3046],{"emptyLinePlaceholder":720},[58,115755,115756],{"class":60,"line":33445},[58,115757,3046],{"emptyLinePlaceholder":720},[58,115759,115760,115762,115764,115766,115768],{"class":60,"line":33459},[58,115761,2180],{"class":92},[58,115763,31864],{"class":82},[58,115765,102188],{"class":92},[58,115767,102191],{"class":386},[58,115769,4385],{"class":75},[58,115771,115772],{"class":60,"line":33465},[58,115773,102198],{"class":75},[175,115775,104199],{},[48,115777,115779],{"className":24465,"code":115778,"language":24467,"meta":53,"style":53},"touch ch8_gym_env.py\n",[55,115780,115781],{"__ignoreMap":53},[58,115782,115783,115785],{"class":60,"line":61},[58,115784,101912],{"class":379},[58,115786,115787],{"class":386}," ch8_gym_env.py\n",[175,115789,111073],{},[48,115791,115793],{"className":24465,"code":115792,"language":24467,"meta":53,"style":53},"python ch8_gym_env.py\n",[55,115794,115795],{"__ignoreMap":53},[58,115796,115797,115799],{"class":60,"line":61},[58,115798,31024],{"class":379},[58,115800,115787],{"class":386},[114,115802,102201],{"id":102201},[175,115804,115805],{},"继承 Gymnasium 环境：",[48,115807,115809],{"className":31022,"code":115808,"language":31024,"meta":53,"style":53},"class ReacherEnv(gym.Env):\n",[55,115810,115811],{"__ignoreMap":53},[58,115812,115813,115815,115817,115819,115821,115823,115825],{"class":60,"line":61},[58,115814,15338],{"class":92},[58,115816,114686],{"class":379},[58,115818,793],{"class":75},[58,115820,114169],{"class":379},[58,115822,1344],{"class":75},[58,115824,114695],{"class":379},[58,115826,31430],{"class":75},[175,115828,115829],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[175,115831,115832],{},"初始化模型：",[48,115834,115836],{"className":31022,"code":115835,"language":31024,"meta":53,"style":53},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[55,115837,115838,115852],{"__ignoreMap":53},[58,115839,115840,115842,115844,115846,115848,115850],{"class":60,"line":61},[58,115841,31467],{"class":82},[58,115843,114746],{"class":75},[58,115845,383],{"class":92},[58,115847,102041],{"class":75},[58,115849,101943],{"class":82},[58,115851,799],{"class":75},[58,115853,115854,115856,115858,115860,115862,115864],{"class":60,"line":68},[58,115855,31467],{"class":82},[58,115857,114761],{"class":75},[58,115859,383],{"class":92},[58,115861,114766],{"class":75},[58,115863,31467],{"class":82},[58,115865,114771],{"class":75},[175,115867,115868,115869,115871],{},"这和前面章节一样，只是现在放到了类的 ",[55,115870,31473],{}," 里。",[175,115873,115874],{},"缓存 site ID：",[48,115876,115878],{"className":31022,"code":115877,"language":31024,"meta":53,"style":53},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[55,115879,115880,115894],{"__ignoreMap":53},[58,115881,115882,115884,115886,115888,115890,115892],{"class":60,"line":61},[58,115883,31467],{"class":82},[58,115885,114782],{"class":75},[58,115887,383],{"class":92},[58,115889,114787],{"class":75},[58,115891,90183],{"class":82},[58,115893,799],{"class":75},[58,115895,115896,115898,115900,115902,115904,115906],{"class":60,"line":68},[58,115897,31467],{"class":82},[58,115899,114803],{"class":75},[58,115901,383],{"class":92},[58,115903,114787],{"class":75},[58,115905,90183],{"class":82},[58,115907,799],{"class":75},[175,115909,115910],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[175,115912,115913],{},"reset：",[48,115915,115917],{"className":31022,"code":115916,"language":31024,"meta":53,"style":53},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[55,115918,115919],{"__ignoreMap":53},[58,115920,115921,115923,115925,115927,115929,115931,115933,115935,115937,115939,115941,115943,115945,115947,115949,115951,115953],{"class":60,"line":61},[58,115922,32591],{"class":92},[58,115924,115151],{"class":379},[58,115926,115154],{"class":75},[58,115928,1241],{"class":92},[58,115930,115159],{"class":75},[58,115932,796],{"class":82},[58,115934,25753],{"class":92},[58,115936,39577],{"class":82},[58,115938,14208],{"class":92},[58,115940,39577],{"class":82},[58,115942,115172],{"class":75},[58,115944,115175],{"class":82},[58,115946,25753],{"class":92},[58,115948,39577],{"class":82},[58,115950,14208],{"class":92},[58,115952,39577],{"class":82},[58,115954,31430],{"class":75},[175,115956,115957,115959],{},[55,115958,70688],{}," 做四件事：",[19,115961,115962,115965,115968,115971],{},[22,115963,115964],{},"设置随机种子。",[22,115966,115967],{},"重置 MuJoCo data。",[22,115969,115970],{},"随机初始化关节角。",[22,115972,115973],{},"返回初始观测和 info。",[175,115975,115976],{},"step：",[48,115978,115980],{"className":31022,"code":115979,"language":31024,"meta":53,"style":53},"def step(self, action):\n",[55,115981,115982],{"__ignoreMap":53},[58,115983,115984,115986,115988],{"class":60,"line":61},[58,115985,32591],{"class":92},[58,115987,115316],{"class":379},[58,115989,115319],{"class":75},[175,115991,115992,115994],{},[55,115993,107763],{}," 做六件事：",[19,115996,115997,116000,116006,116009,116012,116015],{},[22,115998,115999],{},"检查并裁剪 action。",[22,116001,116002,116003,29029],{},"写入 ",[55,116004,116005],{},"self.data.ctrl",[22,116007,116008],{},"连续推进若干个 MuJoCo 物理步。",[22,116010,116011],{},"计算新观测。",[22,116013,116014],{},"计算奖励和结束条件。",[22,116016,116017],{},"返回 Gymnasium 标准五元组。",[114,116019,102337],{"id":102337},[48,116021,116023],{"className":31022,"code":116022,"language":31024,"meta":53,"style":53},"import gymnasium as gym\n",[55,116024,116025],{"__ignoreMap":53},[58,116026,116027,116029,116031,116033],{"class":60,"line":61},[58,116028,31036],{"class":92},[58,116030,114524],{"class":75},[58,116032,32027],{"class":92},[58,116034,114529],{"class":75},[175,116036,116037,116038,116040,116041,116044],{},"导入 Gymnasium，并起别名 ",[55,116039,114169],{},"。后面写 ",[55,116042,116043],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[48,116046,116048],{"className":31022,"code":116047,"language":31024,"meta":53,"style":53},"from gymnasium import spaces\n",[55,116049,116050],{"__ignoreMap":53},[58,116051,116052,116054,116056,116058],{"class":60,"line":61},[58,116053,31381],{"class":92},[58,116055,114524],{"class":75},[58,116057,31036],{"class":92},[58,116059,114556],{"class":75},[175,116061,116062,116063,116066],{},"导入空间定义工具。",[55,116064,116065],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[48,116068,116069],{"className":31022,"code":115808,"language":31024,"meta":53,"style":53},[55,116070,116071],{"__ignoreMap":53},[58,116072,116073,116075,116077,116079,116081,116083,116085],{"class":60,"line":61},[58,116074,15338],{"class":92},[58,116076,114686],{"class":379},[58,116078,793],{"class":75},[58,116080,114169],{"class":379},[58,116082,1344],{"class":75},[58,116084,114695],{"class":379},[58,116086,31430],{"class":75},[175,116088,116089,116090,116093,116094,116096,116097,101647,116099,116101],{},"定义一个类，名字叫 ",[55,116091,116092],{},"ReacherEnv","。括号里的 ",[55,116095,116043],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[55,116098,70688],{},[55,116100,107763],{}," 这两个核心方法。",[48,116103,116105],{"className":31022,"code":116104,"language":31024,"meta":53,"style":53},"metadata = {\"render_modes\": []}\n",[55,116106,116107],{"__ignoreMap":53},[58,116108,116109,116112,116114,116116,116118],{"class":60,"line":61},[58,116110,116111],{"class":75},"metadata ",[58,116113,383],{"class":92},[58,116115,5094],{"class":75},[58,116117,114709],{"class":386},[58,116119,114712],{"class":75},[175,116121,116122],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[48,116124,116126],{"className":31022,"code":116125,"language":31024,"meta":53,"style":53},"def __init__(self) -> None:\n",[55,116127,116128],{"__ignoreMap":53},[58,116129,116130,116132,116134,116136,116138],{"class":60,"line":61},[58,116131,32591],{"class":92},[58,116133,31448],{"class":82},[58,116135,114725],{"class":75},[58,116137,96315],{"class":82},[58,116139,4385],{"class":75},[175,116141,116142,116144,116145,29029],{},[55,116143,31473],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[55,116146,116147],{},"env = ReacherEnv()",[48,116149,116151],{"className":31022,"code":116150,"language":31024,"meta":53,"style":53},"super().__init__()\n",[55,116152,116153],{"__ignoreMap":53},[58,116154,116155,116158,116160,116162],{"class":60,"line":61},[58,116156,116157],{"class":82},"super",[58,116159,17904],{"class":75},[58,116161,31473],{"class":82},[58,116163,2622],{"class":75},[175,116165,116166,116167,116169],{},"调用父类 ",[55,116168,116043],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[48,116171,116172],{"className":31022,"code":115835,"language":31024,"meta":53,"style":53},[55,116173,116174,116188],{"__ignoreMap":53},[58,116175,116176,116178,116180,116182,116184,116186],{"class":60,"line":61},[58,116177,31467],{"class":82},[58,116179,114746],{"class":75},[58,116181,383],{"class":92},[58,116183,102041],{"class":75},[58,116185,101943],{"class":82},[58,116187,799],{"class":75},[58,116189,116190,116192,116194,116196,116198,116200],{"class":60,"line":68},[58,116191,31467],{"class":82},[58,116193,114761],{"class":75},[58,116195,383],{"class":92},[58,116197,114766],{"class":75},[58,116199,31467],{"class":82},[58,116201,114771],{"class":75},[175,116203,116204,116205,116207,116208,101647,116211,116214],{},"把 MuJoCo 模型和状态保存到 ",[55,116206,31467],{}," 上。",[55,116209,116210],{},"self.model",[55,116212,116213],{},"self.data"," 表示这个环境对象自己的模型和状态。",[48,116216,116217],{"className":31022,"code":115877,"language":31024,"meta":53,"style":53},[55,116218,116219,116233],{"__ignoreMap":53},[58,116220,116221,116223,116225,116227,116229,116231],{"class":60,"line":61},[58,116222,31467],{"class":82},[58,116224,114782],{"class":75},[58,116226,383],{"class":92},[58,116228,114787],{"class":75},[58,116230,90183],{"class":82},[58,116232,799],{"class":75},[58,116234,116235,116237,116239,116241,116243,116245],{"class":60,"line":68},[58,116236,31467],{"class":82},[58,116238,114803],{"class":75},[58,116240,383],{"class":92},[58,116242,114787],{"class":75},[58,116244,90183],{"class":82},[58,116246,799],{"class":75},[175,116248,116249,116250,101647,116253,116256],{},"提前查好 tip 和 target 的 site ID。这样 ",[55,116251,116252],{},"_get_obs",[55,116254,116255],{},"_get_reward"," 里就不用每次按名字查找。",[48,116258,116260],{"className":31022,"code":116259,"language":31024,"meta":53,"style":53},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[55,116261,116262,116272,116282],{"__ignoreMap":53},[58,116263,116264,116266,116268,116270],{"class":60,"line":61},[58,116265,31467],{"class":82},[58,116267,114496],{"class":75},[58,116269,383],{"class":92},[58,116271,55063],{"class":82},[58,116273,116274,116276,116278,116280],{"class":60,"line":68},[58,116275,31467],{"class":82},[58,116277,114875],{"class":75},[58,116279,383],{"class":92},[58,116281,114880],{"class":82},[58,116283,116284,116286,116288,116290],{"class":60,"line":79},[58,116285,31467],{"class":82},[58,116287,114335],{"class":75},[58,116289,383],{"class":92},[58,116291,47977],{"class":82},[175,116293,116294,116297,116298,116301,116302,116305],{},[55,116295,116296],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[55,116299,116300],{},"max_steps"," 是一个 episode 最多运行多少步。",[55,116303,116304],{},"steps"," 记录当前 episode 已经走了多少步。",[48,116307,116308],{"className":31022,"code":114374,"language":31024,"meta":53,"style":53},[55,116309,116310],{"__ignoreMap":53},[58,116311,116312,116314,116316,116318,116320,116322,116324,116326,116328,116330,116332,116334,116336,116338,116340,116342,116344,116346,116348,116350],{"class":60,"line":61},[58,116313,31467],{"class":82},[58,116315,114383],{"class":75},[58,116317,383],{"class":92},[58,116319,114388],{"class":75},[58,116321,114391],{"class":5862},[58,116323,114394],{"class":92},[58,116325,103032],{"class":82},[58,116327,469],{"class":75},[58,116329,114401],{"class":5862},[58,116331,383],{"class":92},[58,116333,103032],{"class":82},[58,116335,469],{"class":75},[58,116337,96592],{"class":5862},[58,116339,383],{"class":92},[58,116341,793],{"class":75},[58,116343,867],{"class":82},[58,116345,114418],{"class":75},[58,116347,94129],{"class":5862},[58,116349,383],{"class":92},[58,116351,114425],{"class":75},[175,116353,116354,116355,116358,116359,101647,116362,116365],{},"定义动作空间。",[55,116356,116357],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[55,116360,116361],{},"low=-1.0",[55,116363,116364],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[48,116367,116368],{"className":31022,"code":114435,"language":31024,"meta":53,"style":53},[55,116369,116370],{"__ignoreMap":53},[58,116371,116372,116374,116376,116378,116380,116382,116384,116386,116388,116390,116392,116394,116396,116398,116400,116402,116404,116406],{"class":60,"line":61},[58,116373,31467],{"class":82},[58,116375,114444],{"class":75},[58,116377,383],{"class":92},[58,116379,114388],{"class":75},[58,116381,114391],{"class":5862},[58,116383,114394],{"class":92},[58,116385,114455],{"class":75},[58,116387,114401],{"class":5862},[58,116389,383],{"class":92},[58,116391,114455],{"class":75},[58,116393,96592],{"class":5862},[58,116395,383],{"class":92},[58,116397,793],{"class":75},[58,116399,1232],{"class":82},[58,116401,114418],{"class":75},[58,116403,94129],{"class":5862},[58,116405,383],{"class":92},[58,116407,114425],{"class":75},[175,116409,116410,116411,116414,116415,116418],{},"定义观测空间。",[55,116412,116413],{},"shape=(10,)"," 表示观测是 10 个数。",[55,116416,116417],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[48,116420,116422],{"className":31022,"code":116421,"language":31024,"meta":53,"style":53},"def _get_obs(self) -> np.ndarray:\n",[55,116423,116424],{"__ignoreMap":53},[58,116425,116426,116428,116430],{"class":60,"line":61},[58,116427,32591],{"class":92},[58,116429,114985],{"class":379},[58,116431,114988],{"class":75},[175,116433,116434,116435,116437],{},"定义内部函数，用来生成观测。函数名前面的 ",[55,116436,1776],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[48,116439,116441],{"className":31022,"code":116440,"language":31024,"meta":53,"style":53},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[55,116442,116443,116457],{"__ignoreMap":53},[58,116444,116445,116447,116449,116451,116453,116455],{"class":60,"line":61},[58,116446,112197],{"class":75},[58,116448,383],{"class":92},[58,116450,39517],{"class":82},[58,116452,114999],{"class":75},[58,116454,31467],{"class":82},[58,116456,115004],{"class":75},[58,116458,116459,116461,116463,116465,116467,116469],{"class":60,"line":68},[58,116460,112207],{"class":75},[58,116462,383],{"class":92},[58,116464,39517],{"class":82},[58,116466,114999],{"class":75},[58,116468,31467],{"class":82},[58,116470,115019],{"class":75},[175,116472,116473],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[48,116475,116477],{"className":31022,"code":116476,"language":31024,"meta":53,"style":53},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[55,116478,116479,116495],{"__ignoreMap":53},[58,116480,116481,116483,116485,116487,116489,116491,116493],{"class":60,"line":61},[58,116482,111483],{"class":75},[58,116484,383],{"class":92},[58,116486,115028],{"class":75},[58,116488,31467],{"class":82},[58,116490,115033],{"class":75},[58,116492,31467],{"class":82},[58,116494,115038],{"class":75},[58,116496,116497,116499],{"class":60,"line":68},[58,116498,17689],{"class":92},[58,116500,115045],{"class":75},[175,116502,116503,116504,116507,116508,116510],{},"拼接观测，并转换成 ",[55,116505,116506],{},"float32","。很多强化学习库默认使用 ",[55,116509,116506],{},"，所以这里主动转换。",[48,116512,116513],{"className":31022,"code":115916,"language":31024,"meta":53,"style":53},[55,116514,116515],{"__ignoreMap":53},[58,116516,116517,116519,116521,116523,116525,116527,116529,116531,116533,116535,116537,116539,116541,116543,116545,116547,116549],{"class":60,"line":61},[58,116518,32591],{"class":92},[58,116520,115151],{"class":379},[58,116522,115154],{"class":75},[58,116524,1241],{"class":92},[58,116526,115159],{"class":75},[58,116528,796],{"class":82},[58,116530,25753],{"class":92},[58,116532,39577],{"class":82},[58,116534,14208],{"class":92},[58,116536,39577],{"class":82},[58,116538,115172],{"class":75},[58,116540,115175],{"class":82},[58,116542,25753],{"class":92},[58,116544,39577],{"class":82},[58,116546,14208],{"class":92},[58,116548,39577],{"class":82},[58,116550,31430],{"class":75},[175,116552,116553,116554,116556,116557,116560],{},"定义 reset。",[55,116555,115195],{}," 用来控制随机数，保证实验可以复现。",[55,116558,116559],{},"options"," 用来接收额外配置，本章暂时不用。",[48,116562,116564],{"className":31022,"code":116563,"language":31024,"meta":53,"style":53},"super().reset(seed=seed)\n",[55,116565,116566],{"__ignoreMap":53},[58,116567,116568,116570,116572,116574,116576],{"class":60,"line":61},[58,116569,116157],{"class":82},[58,116571,115192],{"class":75},[58,116573,115195],{"class":5862},[58,116575,383],{"class":92},[58,116577,115200],{"class":75},[175,116579,116580,116581,116584],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[55,116582,116583],{},"self.np_random"," 生成可复现的随机数。",[48,116586,116588],{"className":31022,"code":116587,"language":31024,"meta":53,"style":53},"mujoco.mj_resetData(self.model, self.data)\n",[55,116589,116590],{"__ignoreMap":53},[58,116591,116592,116595,116597,116599,116601],{"class":60,"line":61},[58,116593,116594],{"class":75},"mujoco.mj_resetData(",[58,116596,31467],{"class":82},[58,116598,115210],{"class":75},[58,116600,31467],{"class":82},[58,116602,115215],{"class":75},[175,116604,116605],{},"把 MuJoCo 状态重置到默认状态。",[48,116607,116609],{"className":31022,"code":116608,"language":31024,"meta":53,"style":53},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[55,116610,116611],{"__ignoreMap":53},[58,116612,116613,116615,116617,116619,116621,116623,116625,116627,116629,116631,116633,116635,116637,116639,116641,116643,116645],{"class":60,"line":61},[58,116614,31467],{"class":82},[58,116616,115226],{"class":75},[58,116618,383],{"class":92},[58,116620,39517],{"class":82},[58,116622,115233],{"class":75},[58,116624,114391],{"class":5862},[58,116626,114394],{"class":92},[58,116628,86840],{"class":82},[58,116630,469],{"class":75},[58,116632,114401],{"class":5862},[58,116634,383],{"class":92},[58,116636,86840],{"class":82},[58,116638,469],{"class":75},[58,116640,32140],{"class":5862},[58,116642,383],{"class":92},[58,116644,31467],{"class":82},[58,116646,115258],{"class":75},[175,116648,115970,116649,116652,116653,116656,116657,116659],{},[55,116650,116651],{},"[:]"," 表示修改整个数组。",[55,116654,116655],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[55,116658,102779],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[48,116661,116663],{"className":31022,"code":116662,"language":31024,"meta":53,"style":53},"self.data.qvel[:] = 0.0\n",[55,116664,116665],{"__ignoreMap":53},[58,116666,116667,116669,116671,116673],{"class":60,"line":61},[58,116668,31467],{"class":82},[58,116670,115265],{"class":75},[58,116672,383],{"class":92},[58,116674,105390],{"class":82},[175,116676,116677],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[48,116679,116681],{"className":31022,"code":116680,"language":31024,"meta":53,"style":53},"self.steps = 0\nreturn self._get_obs(), {}\n",[55,116682,116683,116693],{"__ignoreMap":53},[58,116684,116685,116687,116689,116691],{"class":60,"line":61},[58,116686,31467],{"class":82},[58,116688,114335],{"class":75},[58,116690,383],{"class":92},[58,116692,47977],{"class":82},[58,116694,116695,116697,116699],{"class":60,"line":68},[58,116696,17689],{"class":92},[58,116698,39517],{"class":82},[58,116700,115305],{"class":75},[175,116702,116703],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[48,116705,116706],{"className":31022,"code":115979,"language":31024,"meta":53,"style":53},[55,116707,116708],{"__ignoreMap":53},[58,116709,116710,116712,116714],{"class":60,"line":61},[58,116711,32591],{"class":92},[58,116713,115316],{"class":379},[58,116715,115319],{"class":75},[175,116717,116718],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[48,116720,116722],{"className":31022,"code":116721,"language":31024,"meta":53,"style":53},"action = np.asarray(action, dtype=np.float32)\n",[55,116723,116724],{"__ignoreMap":53},[58,116725,116726,116728,116730,116732,116734,116736],{"class":60,"line":61},[58,116727,108071],{"class":75},[58,116729,383],{"class":92},[58,116731,115328],{"class":75},[58,116733,94129],{"class":5862},[58,116735,383],{"class":92},[58,116737,114425],{"class":75},[175,116739,116740,116741,29029],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[55,116742,116506],{},[48,116744,116746],{"className":31022,"code":116745,"language":31024,"meta":53,"style":53},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[55,116747,116748],{"__ignoreMap":53},[58,116749,116750,116752,116754,116756,116758,116760,116762],{"class":60,"line":61},[58,116751,108071],{"class":75},[58,116753,383],{"class":92},[58,116755,108076],{"class":75},[58,116757,31467],{"class":82},[58,116759,115347],{"class":75},[58,116761,31467],{"class":82},[58,116763,115352],{"class":75},[175,116765,116766],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[48,116768,116770],{"className":31022,"code":116769,"language":31024,"meta":53,"style":53},"self.data.ctrl[:] = action\n",[55,116771,116772],{"__ignoreMap":53},[58,116773,116774,116776,116778,116780],{"class":60,"line":61},[58,116775,31467],{"class":82},[58,116777,115363],{"class":75},[58,116779,383],{"class":92},[58,116781,108099],{"class":75},[175,116783,116784],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[48,116786,116788],{"className":31022,"code":116787,"language":31024,"meta":53,"style":53},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[55,116789,116790,116806],{"__ignoreMap":53},[58,116791,116792,116794,116796,116798,116800,116802,116804],{"class":60,"line":61},[58,116793,3671],{"class":92},[58,116795,102130],{"class":75},[58,116797,26687],{"class":92},[58,116799,33087],{"class":82},[58,116801,793],{"class":75},[58,116803,31467],{"class":82},[58,116805,115384],{"class":75},[58,116807,116808,116811,116813,116815,116817],{"class":60,"line":68},[58,116809,116810],{"class":75},"    mujoco.mj_step(",[58,116812,31467],{"class":82},[58,116814,115210],{"class":75},[58,116816,31467],{"class":82},[58,116818,115215],{"class":75},[175,116820,116821,116822,116825,116826,116828,116829,29029],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[55,116823,116824],{},"frame_skip=5","，所以外部调用一次 ",[55,116827,114506],{},"，内部实际执行 5 次 ",[55,116830,101844],{},[48,116832,116834],{"className":31022,"code":116833,"language":31024,"meta":53,"style":53},"self.steps += 1\n",[55,116835,116836],{"__ignoreMap":53},[58,116837,116838,116840,116842,116844],{"class":60,"line":61},[58,116839,31467],{"class":82},[58,116841,114335],{"class":75},[58,116843,10122],{"class":92},[58,116845,56333],{"class":82},[175,116847,116848],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[48,116850,116852],{"className":31022,"code":116851,"language":31024,"meta":53,"style":53},"obs = self._get_obs()\nreward = self._get_reward()\n",[55,116853,116854,116864],{"__ignoreMap":53},[58,116855,116856,116858,116860,116862],{"class":60,"line":61},[58,116857,111483],{"class":75},[58,116859,383],{"class":92},[58,116861,39517],{"class":82},[58,116863,115426],{"class":75},[58,116865,116866,116868,116870,116872],{"class":60,"line":68},[58,116867,111634],{"class":75},[58,116869,383],{"class":92},[58,116871,39517],{"class":82},[58,116873,115437],{"class":75},[175,116875,116876],{},"计算新的观测和奖励。",[48,116878,116880],{"className":31022,"code":116879,"language":31024,"meta":53,"style":53},"dist = float(np.linalg.norm(tip - target))\n",[55,116881,116882],{"__ignoreMap":53},[58,116883,116884,116886,116888,116890,116892,116894],{"class":60,"line":61},[58,116885,112225],{"class":75},[58,116887,383],{"class":92},[58,116889,110426],{"class":82},[58,116891,115480],{"class":75},[58,116893,1318],{"class":92},[58,116895,115485],{"class":75},[175,116897,116898],{},"计算末端到目标的距离，并转换成 Python float。",[48,116900,116901],{"className":31022,"code":114306,"language":31024,"meta":53,"style":53},[55,116902,116903,116915],{"__ignoreMap":53},[58,116904,116905,116907,116909,116911,116913],{"class":60,"line":61},[58,116906,114313],{"class":75},[58,116908,383],{"class":92},[58,116910,114318],{"class":75},[58,116912,373],{"class":92},[58,116914,114323],{"class":82},[58,116916,116917,116919,116921,116923,116925,116927,116929],{"class":60,"line":68},[58,116918,114328],{"class":75},[58,116920,383],{"class":92},[58,116922,39517],{"class":82},[58,116924,114335],{"class":75},[58,116926,2357],{"class":92},[58,116928,39517],{"class":82},[58,116930,114342],{"class":75},[175,116932,116933],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[48,116935,116937],{"className":31022,"code":116936,"language":31024,"meta":53,"style":53},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[55,116938,116939,116952],{"__ignoreMap":53},[58,116940,116941,116944,116946,116948,116950],{"class":60,"line":61},[58,116942,116943],{"class":75},"info ",[58,116945,383],{"class":92},[58,116947,5094],{"class":75},[58,116949,115531],{"class":386},[58,116951,115534],{"class":75},[58,116953,116954,116956],{"class":60,"line":68},[58,116955,17689],{"class":92},[58,116957,115541],{"class":75},[175,116959,116960,116963],{},[55,116961,116962],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[48,116965,116967],{"className":31022,"code":116966,"language":31024,"meta":53,"style":53},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[55,116968,116969,116978],{"__ignoreMap":53},[58,116970,116971,116974,116976],{"class":60,"line":61},[58,116972,116973],{"class":75},"env ",[58,116975,383],{"class":92},[58,116977,115571],{"class":75},[58,116979,116980,116982,116984,116986,116988,116990,116992],{"class":60,"line":68},[58,116981,114029],{"class":75},[58,116983,383],{"class":92},[58,116985,115581],{"class":75},[58,116987,115195],{"class":5862},[58,116989,383],{"class":92},[58,116991,979],{"class":82},[58,116993,799],{"class":75},[175,116995,116996,116997,117000],{},"创建环境并重置。",[55,116998,116999],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[48,117002,117004],{"className":31022,"code":117003,"language":31024,"meta":53,"style":53},"action = env.action_space.sample()\n",[55,117005,117006],{"__ignoreMap":53},[58,117007,117008,117010,117012],{"class":60,"line":61},[58,117009,108071],{"class":75},[58,117011,383],{"class":92},[58,117013,115650],{"class":75},[175,117015,117016],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117018,102945],{"id":102944},[175,117020,106113],{},[48,117022,117025],{"className":117023,"code":117024,"language":5833,"meta":53},[5831],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[55,117026,117024],{"__ignoreMap":53},[175,117028,117029],{},"这个环境已经具备强化学习环境的基本结构。",[175,117031,117032],{},"主函数里使用随机动作：",[48,117034,117035],{"className":31022,"code":117003,"language":31024,"meta":53,"style":53},[55,117036,117037],{"__ignoreMap":53},[58,117038,117039,117041,117043],{"class":60,"line":61},[58,117040,108071],{"class":75},[58,117042,383],{"class":92},[58,117044,115650],{"class":75},[175,117046,117047],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,117049,102977],{"id":102976},[19,117051,117052,117055,117061,117070,117079,117088,117094],{},[22,117053,117054],{},"运行程序。",[22,117056,117057,117058,29029],{},"确认 ",[55,117059,117060],{},"obs.shape == (10,)",[22,117062,111810,117063,117066,117067,29029],{},[55,117064,117065],{},"env.action_space","，应类似 ",[55,117068,117069],{},"Box(-1.0, 1.0, (2,), float32)",[22,117071,106214,117072,117075,117076,29029],{},[55,117073,117074],{},"self.max_steps = 10","，确认环境会更快 ",[55,117077,117078],{},"truncated=True",[22,117080,103040,117081,103043,117084,117087],{},[55,117082,117083],{},"terminated = dist \u003C 0.05",[55,117085,117086],{},"dist \u003C 0.2","，观察是否更容易结束。",[22,117089,103040,117090,117093],{},[55,117091,117092],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[22,117095,117096,117097,117099,117100,117103],{},"在 ",[55,117098,116962],{}," 里加入 ",[55,117101,117102],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117105,103082],{"id":103081},[114,117107,117109],{"id":117108},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[175,117111,117112,117113,117115],{},"Gymnasium 的 ",[55,117114,107763],{}," 返回 5 个值:",[48,117117,117119],{"className":31022,"code":117118,"language":31024,"meta":53,"style":53},"obs, reward, terminated, truncated, info\n",[55,117120,117121],{"__ignoreMap":53},[58,117122,117123],{"class":60,"line":61},[58,117124,117118],{"class":75},[175,117126,117127],{},"不是旧 Gym 的 4 个值。",[114,117129,117131,117134],{"id":117130},"datactrl-action-维度错误",[55,117132,117133],{},"data.ctrl[:] = action"," 维度错误",[175,117136,103152],{},[48,117138,117140],{"className":31022,"code":117139,"language":31024,"meta":53,"style":53},"print(self.model.nu)\nprint(action.shape)\n",[55,117141,117142,117153],{"__ignoreMap":53},[58,117143,117144,117146,117148,117150],{"class":60,"line":61},[58,117145,31059],{"class":82},[58,117147,793],{"class":75},[58,117149,31467],{"class":82},[58,117151,117152],{"class":75},".model.nu)\n",[58,117154,117155,117157],{"class":60,"line":68},[58,117156,31059],{"class":82},[58,117158,117159],{"class":75},"(action.shape)\n",[175,117161,117162],{},"两者必须匹配。",[114,117164,117166],{"id":117165},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[175,117168,103091],{},[48,117170,117172],{"className":31022,"code":117171,"language":31024,"meta":53,"style":53},"mujoco.mj_forward(self.model, self.data)\n",[55,117173,117174],{"__ignoreMap":53},[58,117175,117176,117179,117181,117183,117185],{"class":60,"line":61},[58,117177,117178],{"class":75},"mujoco.mj_forward(",[58,117180,31467],{"class":82},[58,117182,115210],{"class":75},[58,117184,31467],{"class":82},[58,117186,115215],{"class":75},[114,117188,117190,117192],{"id":117189},"observation_space-维度和-obs-不一致",[55,117191,114229],{}," 维度和 obs 不一致",[175,117194,103204],{},[48,117196,117198],{"className":31022,"code":117197,"language":31024,"meta":53,"style":53},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[55,117199,117200,117210,117217],{"__ignoreMap":53},[58,117201,117202,117204,117206,117208],{"class":60,"line":61},[58,117203,111483],{"class":75},[58,117205,383],{"class":92},[58,117207,39517],{"class":82},[58,117209,115426],{"class":75},[58,117211,117212,117214],{"class":60,"line":68},[58,117213,31059],{"class":82},[58,117215,117216],{"class":75},"(obs.shape)\n",[58,117218,117219,117221,117223,117225],{"class":60,"line":79},[58,117220,31059],{"class":82},[58,117222,793],{"class":75},[58,117224,31467],{"class":82},[58,117226,117227],{"class":75},".observation_space.shape)\n",[175,117229,117230],{},"两者必须一致。本章观测是：",[48,117232,117235],{"className":117233,"code":117234,"language":5833,"meta":53},[5831],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[55,117236,117234],{"__ignoreMap":53},[114,117238,117240],{"id":117239},"action-超过范围","action 超过范围",[175,117242,117243],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[48,117245,117246],{"className":31022,"code":116745,"language":31024,"meta":53,"style":53},[55,117247,117248],{"__ignoreMap":53},[58,117249,117250,117252,117254,117256,117258,117260,117262],{"class":60,"line":61},[58,117251,108071],{"class":75},[58,117253,383],{"class":92},[58,117255,108076],{"class":75},[58,117257,31467],{"class":82},[58,117259,115347],{"class":75},[58,117261,31467],{"class":82},[58,117263,115352],{"class":75},[175,117265,117266,117267,29029],{},"这能避免无效动作直接写入 ",[55,117268,101705],{},[114,117270,117272],{"id":117271},"忘记返回-info","忘记返回 info",[175,117274,117112,117275,101647,117277,117279],{},[55,117276,70688],{},[55,117278,107763],{}," 都会返回 info：",[48,117281,117282],{"className":31022,"code":114022,"language":31024,"meta":53,"style":53},[55,117283,117284,117292],{"__ignoreMap":53},[58,117285,117286,117288,117290],{"class":60,"line":61},[58,117287,114029],{"class":75},[58,117289,383],{"class":92},[58,117291,114034],{"class":75},[58,117293,117294,117296,117298],{"class":60,"line":68},[58,117295,114039],{"class":75},[58,117297,383],{"class":92},[58,117299,114044],{"class":75},[175,117301,117302,117303,29029],{},"即使暂时没有额外信息，也返回 ",[55,117304,33103],{},[14,117306,117308],{"id":117307},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[175,117310,117311],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[19,117313,117314,117317,117320,117323,117326,117329],{},[22,117315,117316],{},"更稳定的 reward。",[22,117318,117319],{},"合理的 episode 长度。",[22,117321,117322],{},"可重复的随机目标采样。",[22,117324,117325],{},"render 接口。",[22,117327,117328],{},"环境注册代码。",[22,117330,117331],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[175,117333,117334],{},"如果只是自己写训练循环，最小形式是：",[48,117336,117338],{"className":31022,"code":117337,"language":31024,"meta":53,"style":53},"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",[55,117339,117340,117348,117364,117368,117384,117393,117402,117412],{"__ignoreMap":53},[58,117341,117342,117344,117346],{"class":60,"line":61},[58,117343,116973],{"class":75},[58,117345,383],{"class":92},[58,117347,115571],{"class":75},[58,117349,117350,117352,117354,117356,117358,117360,117362],{"class":60,"line":68},[58,117351,114029],{"class":75},[58,117353,383],{"class":92},[58,117355,115581],{"class":75},[58,117357,115195],{"class":5862},[58,117359,383],{"class":92},[58,117361,979],{"class":82},[58,117363,799],{"class":75},[58,117365,117366],{"class":60,"line":79},[58,117367,3046],{"emptyLinePlaceholder":720},[58,117369,117370,117372,117374,117376,117378,117380,117382],{"class":60,"line":105},[58,117371,3671],{"class":92},[58,117373,102130],{"class":75},[58,117375,26687],{"class":92},[58,117377,33087],{"class":82},[58,117379,793],{"class":75},[58,117381,7056],{"class":82},[58,117383,31430],{"class":75},[58,117385,117386,117389,117391],{"class":60,"line":627},[58,117387,117388],{"class":75},"    action ",[58,117390,383],{"class":92},[58,117392,115650],{"class":75},[58,117394,117395,117398,117400],{"class":60,"line":509},[58,117396,117397],{"class":75},"    obs, reward, terminated, truncated, info ",[58,117399,383],{"class":92},[58,117401,114044],{"class":75},[58,117403,117404,117406,117408,117410],{"class":60,"line":559},[58,117405,3747],{"class":92},[58,117407,115716],{"class":75},[58,117409,115719],{"class":92},[58,117411,115722],{"class":75},[58,117413,117414,117417,117419],{"class":60,"line":654},[58,117415,117416],{"class":75},"        obs, info ",[58,117418,383],{"class":92},[58,117420,114034],{"class":75},[14,117422,117424],{"id":117423},"_9本章小结","9.本章小结",[175,117426,117427],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[48,117429,117432],{"className":117430,"code":117431,"language":5833,"meta":53},[5831],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[55,117433,117431],{"__ignoreMap":53},[175,117435,117436],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[702,117438,117439],{},"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":53,"searchDepth":68,"depth":68,"links":117441},[117442,117443,117444,117451,117455,117456,117457,117467,117468],{"id":101275,"depth":68,"text":101276},{"id":101398,"depth":68,"text":101399},{"id":101673,"depth":68,"text":101674,"children":117445},[117446,117448,117450],{"id":114253,"depth":79,"text":117447},"terminated 和 truncated 的区别",{"id":114356,"depth":79,"text":117449},"observation_space 和 action_space",{"id":114483,"depth":79,"text":114484},{"id":101881,"depth":68,"text":101882,"children":117452},[117453,117454],{"id":102201,"depth":79,"text":102201},{"id":102337,"depth":79,"text":102337},{"id":102944,"depth":68,"text":102945},{"id":102976,"depth":68,"text":102977},{"id":103081,"depth":68,"text":103082,"children":117458},[117459,117460,117462,117463,117465,117466],{"id":117108,"depth":79,"text":117109},{"id":117130,"depth":79,"text":117461},"data.ctrl[:] = action 维度错误",{"id":117165,"depth":79,"text":117166},{"id":117189,"depth":79,"text":117464},"observation_space 维度和 obs 不一致",{"id":117239,"depth":79,"text":117240},{"id":117271,"depth":79,"text":117272},{"id":117307,"depth":68,"text":117308},{"id":117423,"depth":68,"text":117424},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114006,"description":53},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117475,"title":117476,"body":117477,"description":117900,"extension":718,"meta":117901,"navigation":720,"path":117902,"seo":117903,"stem":117904,"__hash__":117905},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117478,"toc":117890},[117479,117483,117486,117489,117509,117515,117521,117531,117534,117537,117557,117560,117564,117567,117573,117576,117590,117593,117596,117670,117673,117679,117682,117705,117708,117758,117761,117767,117770,117773,117776,117795,117798,117804,117807,117810,117813,117833,117836,117839,117842,117887],[10,117480,117482],{"id":117481},"mujoco-学习","MuJoCo 学习",[175,117484,117485],{},"初版",[175,117487,117488],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[19,117490,117491,117494,117497,117506],{},[22,117492,117493],{},"MuJoCo 模型文件在描述什么。",[22,117495,117496],{},"Python 代码怎样读取和推进仿真。",[22,117498,117499,1000,117501,1000,117503,117505],{},[55,117500,104659],{},[55,117502,104989],{},[55,117504,104992],{}," 这些数组为什么重要。",[22,117507,117508],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[175,117510,117511,117512,117514],{},"默认环境为 Fedora 44、Python >= 3.10、",[55,117513,101656],{}," 官方 Python bindings。",[175,117516,117517,117518,117520],{},"注意：本文禁止使用 ",[55,117519,101641],{},"。所有示例均使用：",[48,117522,117523],{"className":31022,"code":102207,"language":31024,"meta":53,"style":53},[55,117524,117525],{"__ignoreMap":53},[58,117526,117527,117529],{"class":60,"line":61},[58,117528,31036],{"class":92},[58,117530,101930],{"class":75},[14,117532,117533],{"id":117533},"适合谁阅读",[175,117535,117536],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[19,117538,117539,117542,117545,117548],{},[22,117540,117541],{},"没学过 MuJoCo，只会一点 Python。",[22,117543,117544],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[22,117546,117547],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[22,117549,117550,117551,117553,117554,117556],{},"以前接触过 ",[55,117552,101641],{},"，现在想迁移到官方 ",[55,117555,101650],{}," Python bindings。",[175,117558,117559],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117561,117563],{"id":117562},"mujoco-到底是什么","MuJoCo 到底是什么",[175,117565,117566],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[48,117568,117571],{"className":117569,"code":117570,"language":5833,"meta":53},[5831],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[55,117572,117570],{"__ignoreMap":53},[175,117574,117575],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[19,117577,117578,117581,117584,117587],{},[22,117579,117580],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[22,117582,117583],{},"快速测试控制算法，不必一开始就上真实机器人。",[22,117585,117586],{},"生成强化学习环境。",[22,117588,117589],{},"采集状态、动作、图像、奖励等训练数据。",[14,117591,117592],{"id":117592},"学习前的心智模型",[175,117594,117595],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[926,117597,117598,117610],{},[929,117599,117600],{},[932,117601,117602,117605,117608],{},[935,117603,117604],{"align":24379},"部分",[935,117606,117607],{"align":24379},"负责什么",[935,117609,21830],{"align":24379},[972,117611,117612,117623,117635,117647,117659],{},[932,117613,117614,117617,117620],{},[977,117615,117616],{"align":24379},"MJCF XML",[977,117618,117619],{"align":24379},"定义世界和机器人结构",[977,117621,117622],{"align":24379},"地面、盒子、关节、电机、摄像头",[932,117624,117625,117629,117632],{},[977,117626,117627],{"align":24379},[55,117628,101338],{},[977,117630,117631],{"align":24379},"编译后的静态模型",[977,117633,117634],{"align":24379},"有几个关节、有几个电机、时间步长是多少",[932,117636,117637,117641,117644],{},[977,117638,117639],{"align":24379},[55,117640,101348],{},[977,117642,117643],{"align":24379},"运行中的动态状态",[977,117645,117646],{"align":24379},"当前时间、位置、速度、电机输入",[932,117648,117649,117653,117656],{},[977,117650,117651],{"align":24379},[55,117652,101844],{},[977,117654,117655],{"align":24379},"推进一步物理仿真",[977,117657,117658],{"align":24379},"根据重力、力、碰撞更新状态",[932,117660,117661,117664,117667],{},[977,117662,117663],{"align":24379},"Viewer \u002F Renderer",[977,117665,117666],{"align":24379},"把仿真显示出来",[977,117668,117669],{"align":24379},"打开窗口或保存图片",[175,117671,117672],{},"一句话总结：",[48,117674,117677],{"className":117675,"code":117676,"language":5833,"meta":53},[5831],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[55,117678,117676],{"__ignoreMap":53},[175,117680,117681],{},"参考来源：",[124,117683,117684,117691,117698],{},[22,117685,117686,117687],{},"MuJoCo Python 官方文档：",[376,117688,117689],{"href":117689,"rel":117690},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24508],[22,117692,117693,117694],{},"MuJoCo XML Reference：",[376,117695,117696],{"href":117696,"rel":117697},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24508],[22,117699,117700,117701],{},"MuJoCo Overview：",[376,117702,117703],{"href":117703,"rel":117704},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24508],[14,117706,117707],{"id":117707},"章节目录",[19,117709,117710,117716,117722,117728,117734,117740,117746,117752],{},[22,117711,117712],{},[376,117713,117715],{"href":117714},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[22,117717,117718],{},[376,117719,117721],{"href":117720},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[22,117723,117724],{},[376,117725,117727],{"href":117726},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[22,117729,117730],{},[376,117731,117733],{"href":117732},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[22,117735,117736],{},[376,117737,117739],{"href":117738},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[22,117741,117742],{},[376,117743,117745],{"href":117744},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[22,117747,117748],{},[376,117749,117751],{"href":117750},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[22,117753,117754],{},[376,117755,117757],{"href":117756},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,117759,117760],{"id":117760},"推荐学习路线",[48,117762,117765],{"className":117763,"code":117764,"language":5833,"meta":53},[5831],"环境安装\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",[55,117766,117764],{"__ignoreMap":53},[175,117768,117769],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,117771,117772],{"id":117772},"建议的目录结构",[175,117774,117775],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[48,117777,117779],{"className":24465,"code":117778,"language":24467,"meta":53,"style":53},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[55,117780,117781,117789],{"__ignoreMap":53},[58,117782,117783,117785,117787],{"class":60,"line":61},[58,117784,101895],{"class":379},[58,117786,29860],{"class":82},[58,117788,101900],{"class":386},[58,117790,117791,117793],{"class":60,"line":68},[58,117792,101905],{"class":82},[58,117794,101900],{"class":386},[175,117796,117797],{},"每一章的代码都单独保存：",[48,117799,117802],{"className":117800,"code":117801,"language":5833,"meta":53},[5831],"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",[55,117803,117801],{"__ignoreMap":53},[175,117805,117806],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,117808,117809],{"id":117809},"学习方法",[175,117811,117812],{},"每章建议按这个顺序操作：",[19,117814,117815,117818,117821,117824,117827,117830],{},[22,117816,117817],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[22,117819,117820],{},"复制最小可运行代码，保存成指定文件。",[22,117822,117823],{},"运行代码，确认没有报错。",[22,117825,117826],{},"对照“运行结果说明”理解输出。",[22,117828,117829],{},"做“验证步骤”，主动改一两个参数。",[22,117831,117832],{},"遇到报错先看“常见错误与解决方案”。",[175,117834,117835],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,117837,117838],{"id":117838},"全局排错顺序",[175,117840,117841],{},"遇到问题时，按下面顺序查：",[19,117843,117844,117850,117856,117861,117864,117867,117874,117884],{},[22,117845,117846,117847],{},"Python 环境是否激活：",[55,117848,117849],{},"which python",[22,117851,117852,117853],{},"MuJoCo 是否能导入：",[55,117854,117855],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[22,117857,117858,117859],{},"是否误装了 ",[55,117860,101641],{},[22,117862,117863],{},"XML 标签是否闭合、属性是否拼写正确",[22,117865,117866],{},"actuator 引用的 joint 名字是否存在",[22,117868,117869,117871,117872],{},[55,117870,101705],{}," 的长度是否等于 ",[55,117873,102787],{},[22,117875,106214,117876,83169,117878,117880,117881],{},[55,117877,104659],{},[55,117879,104989],{}," 后是否调用了 ",[55,117882,117883],{},"mujoco.mj_forward",[22,117885,117886],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[702,117888,117889],{},"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":53,"searchDepth":68,"depth":68,"links":117891},[117892,117893,117894,117895,117896,117897,117898,117899],{"id":117533,"depth":68,"text":117533},{"id":117562,"depth":68,"text":117563},{"id":117592,"depth":68,"text":117592},{"id":117707,"depth":68,"text":117707},{"id":117760,"depth":68,"text":117760},{"id":117772,"depth":68,"text":117772},{"id":117809,"depth":68,"text":117809},{"id":117838,"depth":68,"text":117838},"仿真搭建。",{"category":24021},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117476,"description":117900},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117907,"title":117908,"body":117909,"description":717,"extension":718,"meta":118364,"navigation":720,"path":118365,"seo":118366,"stem":118367,"__hash__":118368},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117910,"toc":118362},[117911,117914,117917,117923,118359],[10,117912,117908],{"id":117913},"_1-最常用的基本操作更新",[175,117915,117916],{},"装linux系统教程：",[175,117918,117919],{},[376,117920,117921],{"href":117921,"rel":117922},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24508],[48,117924,117928],{"className":117925,"code":117926,"language":117927,"meta":53,"style":53},"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",[55,117929,117930,117935,117940,117949,117954,117963,117968,117988,117993,118004,118009,118018,118023,118051,118056,118075,118080,118099,118103,118108,118124,118128,118133,118163,118167,118172,118188,118192,118197,118212,118216,118221,118237,118241,118246,118258,118270,118274,118279,118296,118300,118305,118323,118327,118332,118341,118345,118350],{"__ignoreMap":53},[58,117931,117932],{"class":60,"line":61},[58,117933,117934],{"class":64},"#更新相关的知识\n",[58,117936,117937],{"class":60,"line":68},[58,117938,117939],{"class":64},"# 更新软件包列表（从服务器获取最新软件信息）\n",[58,117941,117942,117944,117947],{"class":60,"line":79},[58,117943,25220],{"class":379},[58,117945,117946],{"class":386}," apt",[58,117948,26886],{"class":386},[58,117950,117951],{"class":60,"line":105},[58,117952,117953],{"class":64},"# 升级所有可更新的软件包（不删除旧包）\n",[58,117955,117956,117958,117960],{"class":60,"line":627},[58,117957,25220],{"class":379},[58,117959,117946],{"class":386},[58,117961,117962],{"class":386}," upgrade\n",[58,117964,117965],{"class":60,"line":509},[58,117966,117967],{"class":64},"#更新和升级软件包\n",[58,117969,117970,117972,117974,117977,117979,117981,117983,117986],{"class":60,"line":559},[58,117971,25220],{"class":379},[58,117973,117946],{"class":386},[58,117975,117976],{"class":386}," update",[58,117978,26834],{"class":75},[58,117980,25220],{"class":379},[58,117982,117946],{"class":386},[58,117984,117985],{"class":386}," upgrade",[58,117987,101610],{"class":82},[58,117989,117990],{"class":60,"line":654},[58,117991,117992],{"class":64},"#列出可更新的软件包及版本信息\n",[58,117994,117995,117998,118001],{"class":60,"line":671},[58,117996,117997],{"class":379},"apt",[58,117999,118000],{"class":386}," list",[58,118002,118003],{"class":82}," --upgradable\n",[58,118005,118006],{"class":60,"line":677},[58,118007,118008],{"class":64},"#彻底升级（处理依赖关系，可能删除旧包）\n",[58,118010,118011,118013,118015],{"class":60,"line":2260},[58,118012,25220],{"class":379},[58,118014,117946],{"class":386},[58,118016,118017],{"class":386}," full-upgrade\n",[58,118019,118020],{"class":60,"line":694},[58,118021,118022],{"class":64},"#设置指定版本\n",[58,118024,118025,118027,118029,118031,118033,118036,118038,118040,118042,118044,118047,118049],{"class":60,"line":2270},[58,118026,25220],{"class":379},[58,118028,117946],{"class":386},[58,118030,24477],{"class":386},[58,118032,29546],{"class":92},[58,118034,118035],{"class":386},"package_nam",[58,118037,864],{"class":75},[58,118039,1744],{"class":92},[58,118041,383],{"class":386},[58,118043,373],{"class":92},[58,118045,118046],{"class":386},"version_numbe",[58,118048,1456],{"class":75},[58,118050,403],{"class":92},[58,118052,118053],{"class":60,"line":2275},[58,118054,118055],{"class":64},"#只安装软件包不升级\n",[58,118057,118058,118060,118062,118064,118066,118068,118070,118072],{"class":60,"line":2289},[58,118059,25220],{"class":379},[58,118061,117946],{"class":386},[58,118063,24477],{"class":386},[58,118065,29546],{"class":92},[58,118067,118035],{"class":386},[58,118069,864],{"class":75},[58,118071,1744],{"class":92},[58,118073,118074],{"class":82}," --no-upgrade\n",[58,118076,118077],{"class":60,"line":2294},[58,118078,118079],{"class":64},"#只升级，不存在就不安装\n",[58,118081,118082,118084,118086,118088,118090,118092,118094,118096],{"class":60,"line":2300},[58,118083,25220],{"class":379},[58,118085,117946],{"class":386},[58,118087,24477],{"class":386},[58,118089,29546],{"class":92},[58,118091,118035],{"class":386},[58,118093,864],{"class":75},[58,118095,1744],{"class":92},[58,118097,118098],{"class":82}," --only-upgrade\n",[58,118100,118101],{"class":60,"line":2321},[58,118102,3046],{"emptyLinePlaceholder":720},[58,118104,118105],{"class":60,"line":2326},[58,118106,118107],{"class":64},"#安装指定的软件命令\n",[58,118109,118110,118112,118114,118116,118118,118120,118122],{"class":60,"line":2340},[58,118111,25220],{"class":379},[58,118113,117946],{"class":386},[58,118115,24477],{"class":386},[58,118117,29546],{"class":92},[58,118119,118035],{"class":386},[58,118121,864],{"class":75},[58,118123,403],{"class":92},[58,118125,118126],{"class":60,"line":2345},[58,118127,3046],{"emptyLinePlaceholder":720},[58,118129,118130],{"class":60,"line":2374},[58,118131,118132],{"class":64},"#安装多个软件包\n",[58,118134,118135,118137,118139,118141,118143,118146,118149,118151,118153,118156,118158,118160],{"class":60,"line":2379},[58,118136,25220],{"class":379},[58,118138,117946],{"class":386},[58,118140,24477],{"class":386},[58,118142,29546],{"class":92},[58,118144,118145],{"class":386},"package_",[58,118147,118148],{"class":92},"1>",[58,118150,29546],{"class":92},[58,118152,118145],{"class":386},[58,118154,118155],{"class":92},"2>",[58,118157,29546],{"class":92},[58,118159,118145],{"class":386},[58,118161,118162],{"class":92},"3>\n",[58,118164,118165],{"class":60,"line":2396},[58,118166,3046],{"emptyLinePlaceholder":720},[58,118168,118169],{"class":60,"line":2401},[58,118170,118171],{"class":64},"#更新指定的软件命令\n",[58,118173,118174,118176,118178,118180,118182,118184,118186],{"class":60,"line":2406},[58,118175,25220],{"class":379},[58,118177,117946],{"class":386},[58,118179,117976],{"class":386},[58,118181,29546],{"class":92},[58,118183,118035],{"class":386},[58,118185,864],{"class":75},[58,118187,403],{"class":92},[58,118189,118190],{"class":60,"line":2411},[58,118191,3046],{"emptyLinePlaceholder":720},[58,118193,118194],{"class":60,"line":2425},[58,118195,118196],{"class":64},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[58,118198,118199,118201,118204,118206,118208,118210],{"class":60,"line":2430},[58,118200,117997],{"class":379},[58,118202,118203],{"class":386}," show",[58,118205,29546],{"class":92},[58,118207,118035],{"class":386},[58,118209,864],{"class":75},[58,118211,403],{"class":92},[58,118213,118214],{"class":60,"line":3223},[58,118215,3046],{"emptyLinePlaceholder":720},[58,118217,118218],{"class":60,"line":3237},[58,118219,118220],{"class":64},"#删除软件包命令\n",[58,118222,118223,118225,118227,118229,118231,118233,118235],{"class":60,"line":3245},[58,118224,25220],{"class":379},[58,118226,117946],{"class":386},[58,118228,26723],{"class":386},[58,118230,29546],{"class":92},[58,118232,118035],{"class":386},[58,118234,864],{"class":75},[58,118236,403],{"class":92},[58,118238,118239],{"class":60,"line":3250},[58,118240,3046],{"emptyLinePlaceholder":720},[58,118242,118243],{"class":60,"line":3256},[58,118244,118245],{"class":64},"# 清理旧版本和缓存（释放磁盘空间）\n",[58,118247,118248,118250,118252,118255],{"class":60,"line":3262},[58,118249,25220],{"class":379},[58,118251,117946],{"class":386},[58,118253,118254],{"class":386}," autoremove",[58,118256,118257],{"class":64},"  # 删除不再需要的依赖和库文件\n",[58,118259,118260,118262,118264,118267],{"class":60,"line":3267},[58,118261,25220],{"class":379},[58,118263,117946],{"class":386},[58,118265,118266],{"class":386}," clean",[58,118268,118269],{"class":64},"       # 清理下载的缓存包\n",[58,118271,118272],{"class":60,"line":8594},[58,118273,3046],{"emptyLinePlaceholder":720},[58,118275,118276],{"class":60,"line":8618},[58,118277,118278],{"class":64},"#移除软件包及配置文件\n",[58,118280,118281,118283,118285,118288,118290,118292,118294],{"class":60,"line":8623},[58,118282,25220],{"class":379},[58,118284,117946],{"class":386},[58,118286,118287],{"class":386}," purge",[58,118289,29546],{"class":92},[58,118291,118035],{"class":386},[58,118293,864],{"class":75},[58,118295,403],{"class":92},[58,118297,118298],{"class":60,"line":8629},[58,118299,3046],{"emptyLinePlaceholder":720},[58,118301,118302],{"class":60,"line":8656},[58,118303,118304],{"class":64},"#查找软件包命令\n",[58,118306,118307,118309,118311,118314,118316,118319,118321],{"class":60,"line":8661},[58,118308,25220],{"class":379},[58,118310,117946],{"class":386},[58,118312,118313],{"class":386}," search",[58,118315,29546],{"class":92},[58,118317,118318],{"class":386},"keywor",[58,118320,1100],{"class":75},[58,118322,403],{"class":92},[58,118324,118325],{"class":60,"line":8667},[58,118326,3046],{"emptyLinePlaceholder":720},[58,118328,118329],{"class":60,"line":8679},[58,118330,118331],{"class":64},"#列出所有已安装的包\n",[58,118333,118334,118336,118338],{"class":60,"line":8691},[58,118335,117997],{"class":379},[58,118337,118000],{"class":386},[58,118339,118340],{"class":82}," --installed\n",[58,118342,118343],{"class":60,"line":8703},[58,118344,3046],{"emptyLinePlaceholder":720},[58,118346,118347],{"class":60,"line":10361},[58,118348,118349],{"class":64},"#列出所有已安装的包的版本信息\n",[58,118351,118352,118354,118356],{"class":60,"line":10386},[58,118353,117997],{"class":379},[58,118355,118000],{"class":386},[58,118357,118358],{"class":82}," --all-versions\n",[702,118360,118361],{},"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":53,"searchDepth":68,"depth":68,"links":118363},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117908,"description":717},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118370,"title":118371,"body":118372,"description":717,"extension":718,"meta":119113,"navigation":720,"path":119114,"seo":119115,"stem":119116,"__hash__":119117},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118373,"toc":119100},[118374,118377,118381,118384,118390,118394,118398,118404,118409,118414,118419,118424,118429,118432,118435,118438,118441,118445,118448,118453,118456,118461,118464,118469,118476,118479,118482,118485,118488,118491,118502,118506,118510,118515,118520,118524,118529,118533,118538,118542,118546,118551,118554,118599,118604,118608,118612,118617,118623,118628,118638,118643,118653,118658,118663,118690,118694,118697,118702,118705,118730,118734,118739,118742,118747,118752,118772,118777,118780,118795,118799,118852,118855,118860,118864,118867,118882,118885,118888,118893,118897,118901,118904,118908,118912,118915,118920,118925,118929,118936,118944,118947,118954,118959,118964,118967,118972,118979,118984,118991,118995,118997,119002,119006,119009,119012,119017,119020,119025,119028,119033,119038,119043,119047,119052,119056,119097],[10,118375,118371],{"id":118376},"_2-linux装机教程",[14,118378,118380],{"id":118379},"_21-实体机","2.1 实体机",[175,118382,118383],{},"使用清华源：（Ubuntu24.04）",[175,118385,118386],{},[376,118387,118388],{"href":118388,"rel":118389},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24508],[14,118391,118393],{"id":118392},"_22-普通虚拟机","2.2 普通虚拟机",[114,118395,118397],{"id":118396},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[175,118399,118400],{},[376,118401,118402],{"href":118402,"rel":118403},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24508],[175,118405,118406],{},[119,118407],{"alt":53,"src":118408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[175,118410,118411],{},[119,118412],{"alt":53,"src":118413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[175,118415,118416],{},[119,118417],{"alt":53,"src":118418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[175,118420,118421],{},[119,118422],{"alt":53,"src":118423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[175,118425,118426],{},[119,118427],{"alt":53,"src":118428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[175,118430,118431],{},"内存4G（4096MB）；",[175,118433,118434],{},"CPU给4个核；",[175,118436,118437],{},"硬盘动态分配60G；",[175,118439,118440],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[114,118442,118444],{"id":118443},"_222-安装ubuntu","2.2.2 安装Ubuntu",[175,118446,118447],{},"按照1.1的步骤下载Ubuntu",[175,118449,118450],{},[119,118451],{"alt":53,"src":118452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[175,118454,118455],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[175,118457,118458],{},[119,118459],{"alt":53,"src":118460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[175,118462,118463],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[175,118465,118466],{},[119,118467],{"alt":53,"src":118468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[175,118470,118471,118472,118475],{},"选择“正常安装”(找不到都用Alt+F7)， ",[25,118473,118474],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[175,118477,118478],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[175,118480,118481],{},"将改动写入磁盘吗 继续",[175,118483,118484],{},"选择东八区（shanghai，大致在地图上点一下），继续",[175,118486,118487],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[175,118489,118490],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[175,118492,118493,118494,118497,118498,118501],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[25,118495,118496],{},"除了"," 选不发送系统信息与不升级之外， ",[25,118499,118500],{},"其它"," 都跳过或前进）",[114,118503,118505],{"id":118504},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22641,118507,118509],{"id":118508},"_2231-全屏","2.2.3.1 全屏",[175,118511,118512],{},[119,118513],{"alt":53,"src":118514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[175,118516,118517],{},[119,118518],{"alt":53,"src":118519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22641,118521,118523],{"id":118522},"_2232-文件交换","2.2.3.2 文件交换",[175,118525,118526],{},[119,118527],{"alt":53,"src":118528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22641,118530,118532],{"id":118531},"_2233-新建文本文档","2.2.3.3 新建文本文档",[175,118534,118535],{},[119,118536],{"alt":53,"src":118537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,118539,118541],{"id":118540},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[114,118543,118545],{"id":118544},"_231-简介与优缺点","2.3.1 简介与优缺点",[19,118547,118548],{},[22,118549,118550],{},"什么情况下推荐？",[175,118552,118553],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[19,118555,118556],{"start":68},[22,118557,118558,118559],{},"优缺点：",[19,118560,118561,118591],{},[22,118562,118563,118564],{},"优点：",[19,118565,118566,118569,118576,118579,118582,118585,118588],{},[22,118567,118568],{},"WSL2是最好的Linux发行版;(bushi)",[22,118570,118571,118572,118575],{},"性能损耗极低。且比在Windows上跑深度性能 ",[25,118573,118574],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[22,118577,118578],{},"非常方便调用USB设备，可以USB直通;",[22,118580,118581],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[22,118583,118584],{},"非常方便Win与WSL2互相传文件等协同操作;",[22,118586,118587],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[22,118589,118590],{},"非常方便使用Windows的VScode远程开发;",[22,118592,118593,118594],{},"缺点：",[19,118595,118596],{},[22,118597,118598],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[175,118600,118601],{},[119,118602],{"alt":53,"src":118603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[114,118605,118607],{"id":118606},"_232-安装教程","2.3.2 安装教程",[22641,118609,118611],{"id":118610},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[19,118613,118614],{},[22,118615,118616],{},"方法一(图形界面)",[175,118618,118619,118620,25262],{},"用Win+R输入",[55,118621,118622],{},"appwiz.cpl",[175,118624,118625],{},[119,118626],{"alt":53,"src":118627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[175,118629,118630,118631,118634,118635,27117],{},"点击OK进入 ",[25,118632,118633],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[25,118636,118637],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[175,118639,118640],{},[119,118641],{"alt":53,"src":118642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[175,118644,118645,118646,101647,118649,118652],{},"选择 ",[25,118647,118648],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[25,118650,118651],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[175,118654,118655],{},[119,118656],{"alt":53,"src":118657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[19,118659,118660],{"start":68},[22,118661,118662],{},"方法二(命令行)",[48,118664,118668],{"className":118665,"code":118666,"language":118667,"meta":53,"style":53},"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",[55,118669,118670,118675,118680,118685],{"__ignoreMap":53},[58,118671,118672],{"class":60,"line":61},[58,118673,118674],{},"# 开启 Linux 子系统\n",[58,118676,118677],{"class":60,"line":68},[58,118678,118679],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[58,118681,118682],{"class":60,"line":79},[58,118683,118684],{},"# 开启虚拟机平台\n",[58,118686,118687],{"class":60,"line":105},[58,118688,118689],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22641,118691,118693],{"id":118692},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[175,118695,118696],{},"用管理员权限打开powershell",[175,118698,118699],{},[119,118700],{"alt":53,"src":118701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[175,118703,118704],{},"升级WSL并设置默认版本为WSL2",[48,118706,118708],{"className":118665,"code":118707,"language":118667,"meta":53,"style":53},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[55,118709,118710,118715,118720,118725],{"__ignoreMap":53},[58,118711,118712],{"class":60,"line":61},[58,118713,118714],{},"# 更新 wsl\n",[58,118716,118717],{"class":60,"line":68},[58,118718,118719],{},"wsl --update\n",[58,118721,118722],{"class":60,"line":79},[58,118723,118724],{},"# 将 wsl 版本设置为 wsl2\n",[58,118726,118727],{"class":60,"line":105},[58,118728,118729],{},"wsl --set-default-version 2\n",[22641,118731,118733],{"id":118732},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[19,118735,118736],{},[22,118737,118738],{},"方式一(商店下载)",[175,118740,118741],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[175,118743,118744],{},[119,118745],{"alt":53,"src":118746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[19,118748,118749],{"start":68},[22,118750,118751],{},"方式二(命令行安装)",[48,118753,118755],{"className":118665,"code":118754,"language":118667,"meta":53,"style":53},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[55,118756,118757,118762,118767],{"__ignoreMap":53},[58,118758,118759],{"class":60,"line":61},[58,118760,118761],{},"# 列出可安装的 Linux 版本\n",[58,118763,118764],{"class":60,"line":68},[58,118765,118766],{},"#（需要科学手段）\n",[58,118768,118769],{"class":60,"line":79},[58,118770,118771],{},"wsl --list --online\n",[175,118773,118774],{},[119,118775],{"alt":53,"src":118776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[175,118778,118779],{},"选择对应发行版并安装",[48,118781,118783],{"className":118665,"code":118782,"language":118667,"meta":53,"style":53},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[55,118784,118785,118790],{"__ignoreMap":53},[58,118786,118787],{"class":60,"line":61},[58,118788,118789],{},"# Ubuntu安装完毕后需要重启系统\n",[58,118791,118792],{"class":60,"line":68},[58,118793,118794],{},"wsl --install -d Ubuntu-24.04\n",[22641,118796,118798],{"id":118797},"_2324-查看系统状态","2.3.2.4 查看系统状态",[48,118800,118802],{"className":118665,"code":118801,"language":118667,"meta":53,"style":53},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[55,118803,118804,118809,118814,118819,118824,118828,118832,118837,118842,118847],{"__ignoreMap":53},[58,118805,118806],{"class":60,"line":61},[58,118807,118808],{},"# 查看 wsl\n",[58,118810,118811],{"class":60,"line":68},[58,118812,118813],{},"wsl -l\n",[58,118815,118816],{"class":60,"line":79},[58,118817,118818],{},"# 查看 wsl 运行版本或模式\n",[58,118820,118821],{"class":60,"line":105},[58,118822,118823],{},"wsl -l -v\n",[58,118825,118826],{"class":60,"line":627},[58,118827,3046],{"emptyLinePlaceholder":720},[58,118829,118830],{"class":60,"line":509},[58,118831,3046],{"emptyLinePlaceholder":720},[58,118833,118834],{"class":60,"line":559},[58,118835,118836],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[58,118838,118839],{"class":60,"line":654},[58,118840,118841],{},"wsl --set-version \u003Cdistro> 2\n",[58,118843,118844],{"class":60,"line":671},[58,118845,118846],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[58,118848,118849],{"class":60,"line":677},[58,118850,118851],{},"wsl --unregister \u003Cdistro>\n",[175,118853,118854],{},"输出Version为2即正常",[175,118856,118857],{},[119,118858],{"alt":53,"src":118859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22641,118861,118863],{"id":118862},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[175,118865,118866],{},"直接在Powershell里输入wsl命令进入子系统",[48,118868,118870],{"className":118665,"code":118869,"language":118667,"meta":53,"style":53},"# 进入子系统\nwsl\n",[55,118871,118872,118877],{"__ignoreMap":53},[58,118873,118874],{"class":60,"line":61},[58,118875,118876],{},"# 进入子系统\n",[58,118878,118879],{"class":60,"line":68},[58,118880,118881],{},"wsl\n",[175,118883,118884],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[175,118886,118887],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[175,118889,118890],{},[119,118891],{"alt":53,"src":118892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[114,118894,118896],{"id":118895},"_233-配置各种环境","2.3.3 配置各种环境",[22641,118898,118900],{"id":118899},"_2331-换源","2.3.3.1 换源",[175,118902,118903],{},"(同实体机LINUX，往下找教程)",[22641,118905,118907],{"id":118906},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23553,118909,118911],{"id":118910},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[175,118913,118914],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[175,118916,118917],{},[119,118918],{"alt":53,"src":118919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[175,118921,118922],{},[119,118923],{"alt":53,"src":118924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23553,118926,118928],{"id":118927},"_23322-cuda","2.3.3.2.2 CUDA",[175,118930,118931,118932],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[376,118933,118934],{"href":118934,"rel":118935},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24508],[175,118937,118938,118941],{},[119,118939],{"alt":53,"src":118940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[119,118942],{"alt":53,"src":118943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[175,118945,118946],{},"在下方的网站，选择合适的版本。",[175,118948,118949,118950],{},"WSL2 专属 CUDA 指南：",[376,118951,118952],{"href":118952,"rel":118953},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24508],[175,118955,118956],{},[25,118957,118958],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[175,118960,118961],{},[119,118962],{"alt":53,"src":118963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[175,118965,118966],{},"挨行敲一遍",[175,118968,118969],{},[119,118970],{"alt":53,"src":118971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[175,118973,118974,118975,118978],{},"敲完后，输入",[55,118976,118977],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[175,118980,118981],{},[119,118982],{"alt":53,"src":118983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[175,118985,118986,118987,118990],{},"（请详看下方教程的",[25,118988,118989],{},"安装CUDA的配置环境来看","如何配置环境）",[23553,118992,118994],{"id":118993},"_23323-cudnn","2.3.3.2.3 cuDNN",[175,118996,118903],{},[175,118998,118999],{},[119,119000],{"alt":53,"src":119001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22641,119003,119005],{"id":119004},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[175,119007,119008],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[175,119010,119011],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[175,119013,119014],{},[119,119015],{"alt":53,"src":119016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[175,119018,119019],{},"连接WSL2",[175,119021,119022],{},[119,119023],{"alt":53,"src":119024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[175,119026,119027],{},"远程开发成功。",[175,119029,119030],{},[119,119031],{"alt":53,"src":119032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[175,119034,119035],{},[119,119036],{"alt":53,"src":119037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[175,119039,119040],{},[119,119041],{"alt":53,"src":119042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22641,119044,119046],{"id":119045},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[175,119048,119049],{},[119,119050],{"alt":53,"src":119051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22641,119053,119055],{"id":119054},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[48,119057,119059],{"className":117925,"code":119058,"language":117927,"meta":53,"style":53},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[55,119060,119061,119069,119077,119088,119092],{"__ignoreMap":53},[58,119062,119063,119065,119067],{"class":60,"line":61},[58,119064,25220],{"class":379},[58,119066,117946],{"class":386},[58,119068,26886],{"class":386},[58,119070,119071,119073,119075],{"class":60,"line":68},[58,119072,25220],{"class":379},[58,119074,117946],{"class":386},[58,119076,117962],{"class":386},[58,119078,119079,119081,119083,119085],{"class":60,"line":79},[58,119080,25220],{"class":379},[58,119082,117946],{"class":386},[58,119084,24477],{"class":386},[58,119086,119087],{"class":386}," mesa-utils\n",[58,119089,119090],{"class":60,"line":105},[58,119091,3046],{"emptyLinePlaceholder":720},[58,119093,119094],{"class":60,"line":627},[58,119095,119096],{"class":64},"#然后重启wsl2即可\n",[702,119098,119099],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":53,"searchDepth":68,"depth":68,"links":119101},[119102,119103,119108],{"id":118379,"depth":68,"text":118380},{"id":118392,"depth":68,"text":118393,"children":119104},[119105,119106,119107],{"id":118396,"depth":79,"text":118397},{"id":118443,"depth":79,"text":118444},{"id":118504,"depth":79,"text":118505},{"id":118540,"depth":68,"text":118541,"children":119109},[119110,119111,119112],{"id":118544,"depth":79,"text":118545},{"id":118606,"depth":79,"text":118607},{"id":118895,"depth":79,"text":118896},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118371,"description":717},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119119,"title":119120,"body":119121,"description":717,"extension":718,"meta":122057,"navigation":720,"path":122058,"seo":122059,"stem":122060,"__hash__":122061},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119122,"toc":122029},[119123,119126,119130,119136,119140,119146,119150,119338,119341,119346,119350,119354,119357,119360,119366,119371,119374,119377,119382,119415,119420,119424,119501,119504,119509,119513,119516,119555,119558,119567,119585,119590,119597,119714,119719,119722,119749,119754,119758,119767,119817,119824,119828,119831,119845,119852,119886,119891,119895,119918,119921,119926,119930,119933,119936,119939,119981,119985,119988,119991,120032,120036,120040,120043,120048,120053,120056,120079,120082,120090,120095,120098,120103,120108,120111,120116,120120,120125,120148,120153,120215,120223,120228,120233,120236,120241,120244,120249,120254,120272,120277,120283,120288,120302,120306,120309,120312,120315,120358,120361,120366,120467,120470,120475,120479,120483,120520,120524,120528,120532,120578,120582,120627,120631,120638,120646,120701,120704,120781,120784,120807,120811,120814,120819,120824,120832,120835,120840,120845,120850,120853,120858,120867,120870,120875,120878,120949,120954,120957,120962,120965,120970,120973,120978,120981,120986,120991,120994,121069,121072,121085,121090,121093,121107,121110,121139,121144,121173,121176,121181,121185,121190,121199,121202,121207,121210,121215,121218,121221,121226,121229,121234,121239,121242,121247,121250,121375,121380,121410,121413,121418,121423,121440,121443,121486,121489,121516,121521,121534,121677,121681,121686,121700,121703,121754,121757,121787,121790,121806,121811,121825,121828,121895,121900,121909,121914,121917,121929,121934,121941,121965,121968,121973,121976,121995,122000,122007,122019,122026],[10,119124,119120],{"id":119125},"_3-安装必备配置",[14,119127,119129],{"id":119128},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[48,119131,119134],{"className":119132,"code":119133,"language":5833},[5831],"  打开下方网站（注意，该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",[55,119135,119133],{"__ignoreMap":53},[114,119137,119139],{"id":119138},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[48,119141,119144],{"className":119142,"code":119143,"language":5833},[5831],"  输入以下命令\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",[55,119145,119143],{"__ignoreMap":53},[114,119147,119149],{"id":119148},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[48,119151,119155],{"className":119152,"code":119153,"language":119154,"meta":53,"style":53},"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",[55,119156,119157,119165,119176,119188,119202,119206,119216,119221,119225,119229,119234,119238,119250,119254,119259,119263,119274,119278,119294,119298,119309,119313,119318,119322,119330],{"__ignoreMap":53},[58,119158,119159,119161,119163],{"class":60,"line":61},[58,119160,25220],{"class":379},[58,119162,117946],{"class":386},[58,119164,26886],{"class":386},[58,119166,119167,119169,119171,119173],{"class":60,"line":68},[58,119168,25220],{"class":379},[58,119170,117946],{"class":386},[58,119172,24477],{"class":386},[58,119174,119175],{"class":386}," vim\n",[58,119177,119178,119180,119183,119185],{"class":60,"line":79},[58,119179,25220],{"class":379},[58,119181,119182],{"class":386}," rm",[58,119184,25969],{"class":82},[58,119186,119187],{"class":386}," \u002Fetc\u002Fapt\u002Fsources.list\n",[58,119189,119190,119192,119194,119196,119199],{"class":60,"line":105},[58,119191,25220],{"class":379},[58,119193,119182],{"class":386},[58,119195,25969],{"class":82},[58,119197,119198],{"class":386}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[58,119200,119201],{"class":82},"**\n",[58,119203,119204],{"class":60,"line":627},[58,119205,3046],{"emptyLinePlaceholder":720},[58,119207,119208,119210,119213],{"class":60,"line":509},[58,119209,25220],{"class":379},[58,119211,119212],{"class":386}," vim",[58,119214,119215],{"class":386}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[58,119217,119218],{"class":60,"line":559},[58,119219,119220],{"class":386},"```\n",[58,119222,119223],{"class":60,"line":654},[58,119224,3046],{"emptyLinePlaceholder":720},[58,119226,119227],{"class":60,"line":671},[58,119228,3046],{"emptyLinePlaceholder":720},[58,119230,119231],{"class":60,"line":677},[58,119232,119233],{"class":379},"选择好Ubuntu版本后，复制下方的内容。\n",[58,119235,119236],{"class":60,"line":2260},[58,119237,3046],{"emptyLinePlaceholder":720},[58,119239,119240,119242,119245,119248],{"class":60,"line":694},[58,119241,1013],{"class":92},[58,119243,119244],{"class":386},"[](",[58,119246,119247],{"class":379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[58,119249,799],{"class":386},[58,119251,119252],{"class":60,"line":2270},[58,119253,3046],{"emptyLinePlaceholder":720},[58,119255,119256],{"class":60,"line":2275},[58,119257,119258],{"class":379},"粘贴进去\n",[58,119260,119261],{"class":60,"line":2289},[58,119262,3046],{"emptyLinePlaceholder":720},[58,119264,119265,119267,119269,119272],{"class":60,"line":2294},[58,119266,1013],{"class":92},[58,119268,119244],{"class":386},[58,119270,119271],{"class":379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[58,119273,799],{"class":386},[58,119275,119276],{"class":60,"line":2300},[58,119277,3046],{"emptyLinePlaceholder":720},[58,119279,119280,119283,119286,119289,119291],{"class":60,"line":2321},[58,119281,119282],{"class":379},"按一下ESC，然后英文冒号，输入",[58,119284,119285],{"class":386}," `",[58,119287,119288],{"class":379},":wq!",[58,119290,1756],{"class":386},[58,119292,119293],{"class":379},"然后回车\n",[58,119295,119296],{"class":60,"line":2326},[58,119297,3046],{"emptyLinePlaceholder":720},[58,119299,119300,119302,119304,119307],{"class":60,"line":2340},[58,119301,1013],{"class":92},[58,119303,119244],{"class":386},[58,119305,119306],{"class":379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[58,119308,799],{"class":386},[58,119310,119311],{"class":60,"line":2345},[58,119312,3046],{"emptyLinePlaceholder":720},[58,119314,119315],{"class":60,"line":2374},[58,119316,119317],{"class":379},"输入以下命令\n",[58,119319,119320],{"class":60,"line":2379},[58,119321,3046],{"emptyLinePlaceholder":720},[58,119323,119324,119327],{"class":60,"line":2396},[58,119325,119326],{"class":386},"```",[58,119328,119329],{"class":379},"Bash\n",[58,119331,119332,119334,119336],{"class":60,"line":2401},[58,119333,25220],{"class":379},[58,119335,117946],{"class":386},[58,119337,26886],{"class":386},[175,119339,119340],{},"这里被替换成对应学校则成功",[175,119342,119343],{},[119,119344],{"alt":53,"src":119345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,119347,119349],{"id":119348},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[114,119351,119353],{"id":119352},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[175,119355,119356],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[175,119358,119359],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[175,119361,119362],{},[376,119363,119364],{"href":119364,"rel":119365},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24508],[175,119367,119368],{},[119,119369],{"alt":53,"src":119370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[175,119372,119373],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[175,119375,119376],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[175,119378,119379],{},[119,119380],{"alt":53,"src":119381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[48,119383,119385],{"className":117925,"code":119384,"language":117927,"meta":53,"style":53},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[55,119386,119387,119392,119399,119404],{"__ignoreMap":53},[58,119388,119389],{"class":60,"line":61},[58,119390,119391],{"class":64},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[58,119393,119394,119396],{"class":60,"line":68},[58,119395,101905],{"class":82},[58,119397,119398],{"class":386}," ~\u002FDownloads\n",[58,119400,119401],{"class":60,"line":79},[58,119402,119403],{"class":64},"#下方chrome安装包名不一定是这个，根据名字来看\n",[58,119405,119406,119408,119410,119412],{"class":60,"line":105},[58,119407,25220],{"class":379},[58,119409,117946],{"class":386},[58,119411,24477],{"class":386},[58,119413,119414],{"class":386}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[175,119416,119417],{},[119,119418],{"alt":53,"src":119419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[114,119421,119423],{"id":119422},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[48,119425,119427],{"className":117925,"code":119426,"language":117927,"meta":53,"style":53},"# 老版\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",[55,119428,119429,119434,119442,119453,119458,119462,119467,119477,119485,119496],{"__ignoreMap":53},[58,119430,119431],{"class":60,"line":61},[58,119432,119433],{"class":64},"# 老版\n",[58,119435,119436,119438,119440],{"class":60,"line":68},[58,119437,25220],{"class":379},[58,119439,117946],{"class":386},[58,119441,26886],{"class":386},[58,119443,119444,119446,119448,119450],{"class":60,"line":79},[58,119445,25220],{"class":379},[58,119447,117946],{"class":386},[58,119449,24477],{"class":386},[58,119451,119452],{"class":386}," neofetch\n",[58,119454,119455],{"class":60,"line":105},[58,119456,119457],{"class":379},"neofetch\n",[58,119459,119460],{"class":60,"line":627},[58,119461,3046],{"emptyLinePlaceholder":720},[58,119463,119464],{"class":60,"line":509},[58,119465,119466],{"class":64},"# 新版\n",[58,119468,119469,119471,119474],{"class":60,"line":559},[58,119470,25220],{"class":379},[58,119472,119473],{"class":386}," add-apt-repository",[58,119475,119476],{"class":386}," ppa:zhangsongcui3371\u002Ffastfetch\n",[58,119478,119479,119481,119483],{"class":60,"line":654},[58,119480,25220],{"class":379},[58,119482,117946],{"class":386},[58,119484,26886],{"class":386},[58,119486,119487,119489,119491,119493],{"class":60,"line":671},[58,119488,25220],{"class":379},[58,119490,117946],{"class":386},[58,119492,24477],{"class":386},[58,119494,119495],{"class":386}," fastfetch\n",[58,119497,119498],{"class":60,"line":677},[58,119499,119500],{"class":379},"fastfetch\n",[175,119502,119503],{},"这里显示，一共有3162个debian的程序，7个snap程序",[175,119505,119506],{},[119,119507],{"alt":53,"src":119508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[114,119510,119512],{"id":119511},"_323-移除snap应用","3.2.3 移除snap应用",[175,119514,119515],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[48,119517,119519],{"className":117925,"code":119518,"language":117927,"meta":53,"style":53},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[55,119520,119521,119533,119544],{"__ignoreMap":53},[58,119522,119523,119525,119527,119530],{"class":60,"line":61},[58,119524,25220],{"class":379},[58,119526,27157],{"class":386},[58,119528,119529],{"class":386}," disable",[58,119531,119532],{"class":386}," snapd.service\n",[58,119534,119535,119537,119539,119541],{"class":60,"line":68},[58,119536,25220],{"class":379},[58,119538,27157],{"class":386},[58,119540,119529],{"class":386},[58,119542,119543],{"class":386}," snapd.socket\n",[58,119545,119546,119548,119550,119552],{"class":60,"line":79},[58,119547,25220],{"class":379},[58,119549,27157],{"class":386},[58,119551,119529],{"class":386},[58,119553,119554],{"class":386}," snapd.seeded.service\n",[175,119556,119557],{},"然后查看snap应用列表",[175,119559,119560,119561,119566],{},"根据你安装的选择不同（最小安装或普通安装），有",[376,119562,119565],{"href":119563,"rel":119564},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24508],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[48,119568,119570],{"className":117925,"code":119569,"language":117927,"meta":53,"style":53},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[55,119571,119572,119577],{"__ignoreMap":53},[58,119573,119574],{"class":60,"line":61},[58,119575,119576],{"class":64},"# 查询当前系统上snap安装了哪些app\n",[58,119578,119579,119582],{"class":60,"line":68},[58,119580,119581],{"class":379},"snap",[58,119583,119584],{"class":386}," list\n",[175,119586,119587],{},[119,119588],{"alt":53,"src":119589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[175,119591,119592,119593,119596],{},"卸载掉图中所有应用，按照 ",[25,119594,119595],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[48,119598,119600],{"className":117925,"code":119599,"language":117927,"meta":53,"style":53},"#移除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",[55,119601,119602,119607,119619,119624,119635,119640,119651,119656,119667,119672,119676,119681,119692,119703],{"__ignoreMap":53},[58,119603,119604],{"class":60,"line":61},[58,119605,119606],{"class":64},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[58,119608,119609,119611,119614,119616],{"class":60,"line":68},[58,119610,25220],{"class":379},[58,119612,119613],{"class":386}," snap",[58,119615,26723],{"class":386},[58,119617,119618],{"class":386}," snap-store\n",[58,119620,119621],{"class":60,"line":79},[58,119622,119623],{"class":64},"#移除firefox浏览器\n",[58,119625,119626,119628,119630,119632],{"class":60,"line":105},[58,119627,25220],{"class":379},[58,119629,119613],{"class":386},[58,119631,26723],{"class":386},[58,119633,119634],{"class":386}," firefox\n",[58,119636,119637],{"class":60,"line":627},[58,119638,119639],{"class":64},"#移除gnome-42-2204\n",[58,119641,119642,119644,119646,119648],{"class":60,"line":509},[58,119643,25220],{"class":379},[58,119645,119613],{"class":386},[58,119647,26723],{"class":386},[58,119649,119650],{"class":386}," gnome-42-2204\n",[58,119652,119653],{"class":60,"line":559},[58,119654,119655],{"class":64},"#移除gtk-common-themes\n",[58,119657,119658,119660,119662,119664],{"class":60,"line":654},[58,119659,25220],{"class":379},[58,119661,119613],{"class":386},[58,119663,26723],{"class":386},[58,119665,119666],{"class":386}," gtk-common-themes\n",[58,119668,119669],{"class":60,"line":671},[58,119670,119671],{"class":64},"#移除其它...\n",[58,119673,119674],{"class":60,"line":677},[58,119675,3320],{"class":75},[58,119677,119678],{"class":60,"line":2260},[58,119679,119680],{"class":64},"#移除core22,bare以及snapd\n",[58,119682,119683,119685,119687,119689],{"class":60,"line":694},[58,119684,25220],{"class":379},[58,119686,119613],{"class":386},[58,119688,26723],{"class":386},[58,119690,119691],{"class":386}," core22\n",[58,119693,119694,119696,119698,119700],{"class":60,"line":2270},[58,119695,25220],{"class":379},[58,119697,119613],{"class":386},[58,119699,26723],{"class":386},[58,119701,119702],{"class":386}," bare\n",[58,119704,119705,119707,119709,119711],{"class":60,"line":2275},[58,119706,25220],{"class":379},[58,119708,119613],{"class":386},[58,119710,26723],{"class":386},[58,119712,119713],{"class":386}," snapd\n",[175,119715,119716],{},[119,119717],{"alt":53,"src":119718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[175,119720,119721],{},"输入以下命令查看是否还有snap包",[48,119723,119725],{"className":117925,"code":119724,"language":117927,"meta":53,"style":53},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[55,119726,119727,119733,119737,119741,119745],{"__ignoreMap":53},[58,119728,119729,119731],{"class":60,"line":61},[58,119730,119581],{"class":379},[58,119732,119584],{"class":386},[58,119734,119735],{"class":60,"line":68},[58,119736,119433],{"class":64},[58,119738,119739],{"class":60,"line":79},[58,119740,119457],{"class":379},[58,119742,119743],{"class":60,"line":105},[58,119744,119466],{"class":64},[58,119746,119747],{"class":60,"line":627},[58,119748,119500],{"class":379},[175,119750,119751],{},[119,119752],{"alt":53,"src":119753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[114,119755,119757],{"id":119756},"_324-移除snap","3.2.4 移除snap",[175,119759,119760,119761,119766],{},"在删除掉",[376,119762,119765],{"href":119763,"rel":119764},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24508],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[48,119768,119770],{"className":117925,"code":119769,"language":117927,"meta":53,"style":53}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[55,119771,119772,119777,119790,119795,119806],{"__ignoreMap":53},[58,119773,119774],{"class":60,"line":61},[58,119775,119776],{"class":64}," #使用apt移除掉snap\n",[58,119778,119779,119781,119783,119785,119788],{"class":60,"line":68},[58,119780,25220],{"class":379},[58,119782,117946],{"class":386},[58,119784,118254],{"class":386},[58,119786,119787],{"class":82}," --purge",[58,119789,119713],{"class":386},[58,119791,119792],{"class":60,"line":79},[58,119793,119794],{"class":64},"#移除snapd的一些目录\n",[58,119796,119797,119799,119801,119803],{"class":60,"line":105},[58,119798,25220],{"class":379},[58,119800,119182],{"class":386},[58,119802,25969],{"class":82},[58,119804,119805],{"class":386}," \u002Fvar\u002Fcache\u002Fsnapd\n",[58,119807,119808,119810,119812,119814],{"class":60,"line":627},[58,119809,25220],{"class":379},[58,119811,119182],{"class":386},[58,119813,25969],{"class":82},[58,119815,119816],{"class":386}," ~\u002Fsnap\n",[175,119818,119819,119820,119823],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[55,119821,119822],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[114,119825,119827],{"id":119826},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[175,119829,119830],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[48,119832,119834],{"className":117925,"code":119833,"language":117927,"meta":53,"style":53},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[55,119835,119836],{"__ignoreMap":53},[58,119837,119838,119840,119842],{"class":60,"line":61},[58,119839,25220],{"class":379},[58,119841,119212],{"class":386},[58,119843,119844],{"class":386}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[175,119846,119847,119848,119851],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[55,119849,119850],{},":wq"," 回车",[48,119853,119855],{"className":117925,"code":119854,"language":117927,"meta":53,"style":53},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[55,119856,119857,119864,119878],{"__ignoreMap":53},[58,119858,119859,119862],{"class":60,"line":61},[58,119860,119861],{"class":379},"Package:",[58,119863,119713],{"class":386},[58,119865,119866,119869,119872,119875],{"class":60,"line":68},[58,119867,119868],{"class":379},"Pin:",[58,119870,119871],{"class":386}," release",[58,119873,119874],{"class":386}," a=",[58,119876,119877],{"class":82},"*\n",[58,119879,119880,119883],{"class":60,"line":79},[58,119881,119882],{"class":379},"Pin-Priority:",[58,119884,119885],{"class":82}," -10\n",[175,119887,119888],{},[119,119889],{"alt":53,"src":119890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[114,119892,119894],{"id":119893},"_326-测试是否成功","3.2.6 测试是否成功",[48,119896,119898],{"className":117925,"code":119897,"language":117927,"meta":53,"style":53},"sudo apt update\nsudo apt install firefox\n",[55,119899,119900,119908],{"__ignoreMap":53},[58,119901,119902,119904,119906],{"class":60,"line":61},[58,119903,25220],{"class":379},[58,119905,117946],{"class":386},[58,119907,26886],{"class":386},[58,119909,119910,119912,119914,119916],{"class":60,"line":68},[58,119911,25220],{"class":379},[58,119913,117946],{"class":386},[58,119915,24477],{"class":386},[58,119917,119634],{"class":386},[175,119919,119920],{},"这里提示snapd无法被安装，就证明成功了",[175,119922,119923],{},[119,119924],{"alt":53,"src":119925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[114,119927,119929],{"id":119928},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[175,119931,119932],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[175,119934,119935],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[175,119937,119938],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[48,119940,119942],{"className":117925,"code":119941,"language":117927,"meta":53,"style":53},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[55,119943,119944,119949,119958,119963,119971],{"__ignoreMap":53},[58,119945,119946],{"class":60,"line":61},[58,119947,119948],{"class":64},"# 添加Mozilla提供的源\n",[58,119950,119951,119953,119955],{"class":60,"line":68},[58,119952,25220],{"class":379},[58,119954,119473],{"class":386},[58,119956,119957],{"class":386}," ppa:mozillateam\u002Fppa\n",[58,119959,119960],{"class":60,"line":79},[58,119961,119962],{"class":64},"# 安装Firefox\n",[58,119964,119965,119967,119969],{"class":60,"line":105},[58,119966,25220],{"class":379},[58,119968,117946],{"class":386},[58,119970,26886],{"class":386},[58,119972,119973,119975,119977,119979],{"class":60,"line":627},[58,119974,25220],{"class":379},[58,119976,117946],{"class":386},[58,119978,24477],{"class":386},[58,119980,119634],{"class":386},[114,119982,119984],{"id":119983},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[175,119986,119987],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[175,119989,119990],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[48,119992,119994],{"className":117925,"code":119993,"language":117927,"meta":53,"style":53},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[55,119995,119996,120001,120011,120019,120023],{"__ignoreMap":53},[58,119997,119998],{"class":60,"line":61},[58,119999,120000],{"class":64},"#删掉禁止安装snap的配置文件\n",[58,120002,120003,120005,120007,120009],{"class":60,"line":68},[58,120004,25220],{"class":379},[58,120006,119182],{"class":386},[58,120008,25969],{"class":82},[58,120010,119844],{"class":386},[58,120012,120013,120015,120017],{"class":60,"line":79},[58,120014,25220],{"class":379},[58,120016,117946],{"class":386},[58,120018,26886],{"class":386},[58,120020,120021],{"class":60,"line":105},[58,120022,3046],{"emptyLinePlaceholder":720},[58,120024,120025,120027,120029],{"class":60,"line":627},[58,120026,25220],{"class":379},[58,120028,117946],{"class":386},[58,120030,120031],{"class":386}," dist-update\n",[14,120033,120035],{"id":120034},"_33-中文输入法","3.3 中文输入法",[114,120037,120039],{"id":120038},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[175,120041,120042],{},"官网下载搜狗输入法",[175,120044,120045],{},[119,120046],{"alt":53,"src":120047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[175,120049,120050],{},[119,120051],{"alt":53,"src":120052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[175,120054,120055],{},"打开终端输入如下",[48,120057,120059],{"className":117925,"code":120058,"language":117927,"meta":53,"style":53},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[55,120060,120061,120068],{"__ignoreMap":53},[58,120062,120063,120065],{"class":60,"line":61},[58,120064,101905],{"class":82},[58,120066,120067],{"class":386}," ~\u002FDownloads\u002F\n",[58,120069,120070,120072,120074,120076],{"class":60,"line":68},[58,120071,25220],{"class":379},[58,120073,117946],{"class":386},[58,120075,24477],{"class":386},[58,120077,120078],{"class":386}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[175,120080,120081],{},"打开Fcitx",[175,120083,120084,120087],{},[119,120085],{"alt":53,"src":120086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[119,120088],{"alt":53,"src":120089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[175,120091,120092],{},[119,120093],{"alt":53,"src":120094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[175,120096,120097],{},"添加搜狗输入法",[175,120099,120100],{},[119,120101],{"alt":53,"src":120102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[175,120104,120105],{},[119,120106],{"alt":53,"src":120107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[175,120109,120110],{},"将搜狗输入法设置为唯一输入法",[175,120112,120113],{},[119,120114],{"alt":53,"src":120115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[114,120117,120119],{"id":120118},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[19,120121,120122],{},[22,120123,120124],{},"卸载旧输入法",[48,120126,120128],{"className":119152,"code":120127,"language":119154,"meta":53,"style":53},"sudo apt purge fcitx* ibus*\n",[55,120129,120130],{"__ignoreMap":53},[58,120131,120132,120134,120136,120138,120141,120143,120146],{"class":60,"line":61},[58,120133,25220],{"class":379},[58,120135,117946],{"class":386},[58,120137,118287],{"class":386},[58,120139,120140],{"class":386}," fcitx",[58,120142,1241],{"class":82},[58,120144,120145],{"class":386}," ibus",[58,120147,119877],{"class":82},[19,120149,120150],{"start":68},[22,120151,120152],{},"安装Fcitx5",[48,120154,120156],{"className":117925,"code":120155,"language":117927,"meta":53,"style":53},"# 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",[55,120157,120158,120163,120177,120181,120186,120195,120203],{"__ignoreMap":53},[58,120159,120160],{"class":60,"line":61},[58,120161,120162],{"class":64},"# Ubuntu22.04及以上、Debian12及以上\n",[58,120164,120165,120167,120169,120171,120174],{"class":60,"line":68},[58,120166,25220],{"class":379},[58,120168,117946],{"class":386},[58,120170,24477],{"class":386},[58,120172,120173],{"class":386}," fcitx5",[58,120175,120176],{"class":386}," fcitx5-chinese-addons\n",[58,120178,120179],{"class":60,"line":79},[58,120180,3046],{"emptyLinePlaceholder":720},[58,120182,120183],{"class":60,"line":105},[58,120184,120185],{"class":64},"# Ubuntu20.04\n",[58,120187,120188,120190,120192],{"class":60,"line":627},[58,120189,25220],{"class":379},[58,120191,119473],{"class":386},[58,120193,120194],{"class":386}," ppa:zhsj\u002Ffcitx5\n",[58,120196,120197,120199,120201],{"class":60,"line":509},[58,120198,25220],{"class":379},[58,120200,117946],{"class":386},[58,120202,26886],{"class":386},[58,120204,120205,120207,120209,120211,120213],{"class":60,"line":559},[58,120206,25220],{"class":379},[58,120208,117946],{"class":386},[58,120210,24477],{"class":386},[58,120212,120173],{"class":386},[58,120214,120176],{"class":386},[19,120216,120217,120220],{"start":79},[22,120218,120219],{},"Reboot System",[22,120221,120222],{},"启动Fcitx5",[175,120224,120225],{},[119,120226],{"alt":53,"src":120227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[19,120229,120230],{"start":627},[22,120231,120232],{},"修改一些设置",[175,120234,120235],{},"将Pinyin和Keyboard - English US加入到左边。",[175,120237,120238],{},[119,120239],{"alt":53,"src":120240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[175,120242,120243],{},"添加快捷键以便于更好切换中英文",[175,120245,120246],{},[119,120247],{"alt":53,"src":120248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[19,120250,120251],{"start":509},[22,120252,120253],{},"重启",[48,120255,120257],{"className":119152,"code":120256,"language":119154,"meta":53,"style":53},"sudo shutdown -r now\n",[55,120258,120259],{"__ignoreMap":53},[58,120260,120261,120263,120266,120269],{"class":60,"line":61},[58,120262,25220],{"class":379},[58,120264,120265],{"class":386}," shutdown",[58,120267,120268],{"class":82}," -r",[58,120270,120271],{"class":386}," now\n",[19,120273,120274],{"start":559},[22,120275,120276],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[175,120278,120279],{},[376,120280,120281],{"href":120281,"rel":120282},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24508],[19,120284,120285],{"start":654},[22,120286,120287],{},"再重启",[48,120289,120290],{"className":119152,"code":120256,"language":119154,"meta":53,"style":53},[55,120291,120292],{"__ignoreMap":53},[58,120293,120294,120296,120298,120300],{"class":60,"line":61},[58,120295,25220],{"class":379},[58,120297,120265],{"class":386},[58,120299,120268],{"class":82},[58,120301,120271],{"class":386},[14,120303,120305],{"id":120304},"_34-pip3源替换","3.4 pip3源替换",[175,120307,120308],{},"非Debian系发行版需要做。",[175,120310,120311],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[175,120313,120314],{},"使用dnf的系统也可能不用做。",[48,120316,120318],{"className":117925,"code":120317,"language":117927,"meta":53,"style":53},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[55,120319,120320,120325,120332,120337,120342],{"__ignoreMap":53},[58,120321,120322],{"class":60,"line":61},[58,120323,120324],{"class":64},"# 检查是否已安装 pip\n",[58,120326,120327,120330],{"class":60,"line":68},[58,120328,120329],{"class":379},"pip3",[58,120331,26937],{"class":82},[58,120333,120334],{"class":60,"line":79},[58,120335,120336],{"class":64},"# 如果未安装，先安装 pip3（见下方）\n",[58,120338,120339],{"class":60,"line":105},[58,120340,120341],{"class":64},"# 配置 pip 使用清华源\n",[58,120343,120344,120346,120349,120352,120355],{"class":60,"line":627},[58,120345,120329],{"class":379},[58,120347,120348],{"class":386}," config",[58,120350,120351],{"class":386}," set",[58,120353,120354],{"class":386}," global.index-url",[58,120356,120357],{"class":386}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[175,120359,120360],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[175,120362,120363],{},[119,120364],{"alt":53,"src":120365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[48,120367,120369],{"className":117925,"code":120368,"language":117927,"meta":53,"style":53},"#安装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",[55,120370,120371,120376,120384,120395,120399,120404,120423,120427,120432,120444,120448,120453],{"__ignoreMap":53},[58,120372,120373],{"class":60,"line":61},[58,120374,120375],{"class":64},"#安装pip3\n",[58,120377,120378,120380,120382],{"class":60,"line":68},[58,120379,25220],{"class":379},[58,120381,117946],{"class":386},[58,120383,26886],{"class":386},[58,120385,120386,120388,120390,120392],{"class":60,"line":79},[58,120387,25220],{"class":379},[58,120389,26720],{"class":386},[58,120391,24477],{"class":386},[58,120393,120394],{"class":386}," python3-pip\n",[58,120396,120397],{"class":60,"line":105},[58,120398,3046],{"emptyLinePlaceholder":720},[58,120400,120401],{"class":60,"line":627},[58,120402,120403],{"class":64},"#更新pip3\n",[58,120405,120406,120408,120410,120412,120414,120416,120419,120421],{"class":60,"line":509},[58,120407,101508],{"class":379},[58,120409,101511],{"class":82},[58,120411,101534],{"class":386},[58,120413,24477],{"class":386},[58,120415,27074],{"class":82},[58,120417,120418],{"class":386}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[58,120420,101539],{"class":82},[58,120422,101542],{"class":386},[58,120424,120425],{"class":60,"line":559},[58,120426,3046],{"emptyLinePlaceholder":720},[58,120428,120429],{"class":60,"line":654},[58,120430,120431],{"class":64},"#设置pip源为清华源\n",[58,120433,120434,120436,120438,120440,120442],{"class":60,"line":671},[58,120435,120329],{"class":379},[58,120437,120348],{"class":386},[58,120439,120351],{"class":386},[58,120441,120354],{"class":386},[58,120443,120357],{"class":386},[58,120445,120446],{"class":60,"line":677},[58,120447,3046],{"emptyLinePlaceholder":720},[58,120449,120450],{"class":60,"line":2260},[58,120451,120452],{"class":64},"#测试\n",[58,120454,120455,120457,120459,120461,120463,120465],{"class":60,"line":694},[58,120456,101508],{"class":379},[58,120458,101511],{"class":82},[58,120460,101534],{"class":386},[58,120462,24477],{"class":386},[58,120464,101539],{"class":82},[58,120466,101542],{"class":386},[175,120468,120469],{},"成功的话，会看到Looking后面是tsinghua字样。",[175,120471,120472],{},[119,120473],{"alt":53,"src":120474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,120476,120478],{"id":120477},"_35-显卡驱动安装","3.5 显卡驱动安装",[114,120480,120482],{"id":120481},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[48,120484,120486],{"className":119152,"code":120485,"language":119154,"meta":53,"style":53},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[55,120487,120488,120493,120508,120513],{"__ignoreMap":53},[58,120489,120490],{"class":60,"line":61},[58,120491,120492],{"class":64},"# 如果是使用apt安装的驱动\n",[58,120494,120495,120497,120499,120501,120503,120506],{"class":60,"line":68},[58,120496,25220],{"class":379},[58,120498,26720],{"class":386},[58,120500,26723],{"class":386},[58,120502,119787],{"class":82},[58,120504,120505],{"class":386}," nvidia",[58,120507,119877],{"class":82},[58,120509,120510],{"class":60,"line":79},[58,120511,120512],{"class":64},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[58,120514,120515,120517],{"class":60,"line":105},[58,120516,25220],{"class":379},[58,120518,120519],{"class":386}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[114,120521,120523],{"id":120522},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22641,120525,120527],{"id":120526},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23553,120529,120531],{"id":120530},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[48,120533,120535],{"className":119152,"code":120534,"language":119154,"meta":53,"style":53},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[55,120536,120537,120542,120553,120558,120568,120573],{"__ignoreMap":53},[58,120538,120539],{"class":60,"line":61},[58,120540,120541],{"class":64},"# 安装英伟达驱动\n",[58,120543,120544,120546,120548,120550],{"class":60,"line":68},[58,120545,25220],{"class":379},[58,120547,117946],{"class":386},[58,120549,24477],{"class":386},[58,120551,120552],{"class":386}," nvidia-driver-版本号\n",[58,120554,120555],{"class":60,"line":79},[58,120556,120557],{"class":64},"# 重启 \n",[58,120559,120560,120562,120564,120566],{"class":60,"line":105},[58,120561,25220],{"class":379},[58,120563,120265],{"class":386},[58,120565,120268],{"class":82},[58,120567,120271],{"class":386},[58,120569,120570],{"class":60,"line":627},[58,120571,120572],{"class":64},"# 检查驱动是否安装成功\n",[58,120574,120575],{"class":60,"line":509},[58,120576,120577],{"class":379},"nvidia-smi\n",[23553,120579,120581],{"id":120580},"_35212-debian","3.5.2.1.2 Debian",[48,120583,120585],{"className":119152,"code":120584,"language":119154,"meta":53,"style":53},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[55,120586,120587,120591,120605,120609,120619,120623],{"__ignoreMap":53},[58,120588,120589],{"class":60,"line":61},[58,120590,120541],{"class":64},[58,120592,120593,120595,120597,120599,120602],{"class":60,"line":68},[58,120594,25220],{"class":379},[58,120596,117946],{"class":386},[58,120598,24477],{"class":386},[58,120600,120601],{"class":386}," nvidia-driver",[58,120603,120604],{"class":386}," nvidia-settings\n",[58,120606,120607],{"class":60,"line":79},[58,120608,120557],{"class":64},[58,120610,120611,120613,120615,120617],{"class":60,"line":105},[58,120612,25220],{"class":379},[58,120614,120265],{"class":386},[58,120616,120268],{"class":82},[58,120618,120271],{"class":386},[58,120620,120621],{"class":60,"line":627},[58,120622,120572],{"class":64},[58,120624,120625],{"class":60,"line":509},[58,120626,120577],{"class":379},[22641,120628,120630],{"id":120629},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[175,120632,120633,120634,120637],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[25,120635,120636],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[175,120639,120640,120641],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24196,120642,120643],{},[25,120644,120645],{},"（也可以不禁用桌面环境，直接进行下一步。）",[48,120647,120649],{"className":119152,"code":120648,"language":119154,"meta":53,"style":53},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[55,120650,120651,120656,120666,120671,120684,120689],{"__ignoreMap":53},[58,120652,120653],{"class":60,"line":61},[58,120654,120655],{"class":64},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[58,120657,120658,120660,120663],{"class":60,"line":68},[58,120659,25220],{"class":379},[58,120661,120662],{"class":386}," telinit",[58,120664,120665],{"class":82}," 3\n",[58,120667,120668],{"class":60,"line":79},[58,120669,120670],{"class":64},"# ubuntu 使用下方命令\n",[58,120672,120673,120675,120678,120681],{"class":60,"line":105},[58,120674,25220],{"class":379},[58,120676,120677],{"class":386}," service",[58,120679,120680],{"class":386}," lightdm",[58,120682,120683],{"class":386}," stop\n",[58,120685,120686],{"class":60,"line":627},[58,120687,120688],{"class":64},"# Fedora 使用下方命令\n",[58,120690,120691,120693,120695,120698],{"class":60,"line":509},[58,120692,25220],{"class":379},[58,120694,27157],{"class":386},[58,120696,120697],{"class":386}," isolate",[58,120699,120700],{"class":386}," multi-user.target\n",[175,120702,120703],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[48,120705,120707],{"className":119152,"code":120706,"language":119154,"meta":53,"style":53},"# 编译环境+准备工作\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",[55,120708,120709,120714,120725,120730,120737,120742,120754,120759,120766,120771],{"__ignoreMap":53},[58,120710,120711],{"class":60,"line":61},[58,120712,120713],{"class":64},"# 编译环境+准备工作\n",[58,120715,120716,120718,120720,120722],{"class":60,"line":68},[58,120717,25220],{"class":379},[58,120719,117946],{"class":386},[58,120721,24477],{"class":386},[58,120723,120724],{"class":386}," build-essential\n",[58,120726,120727],{"class":60,"line":79},[58,120728,120729],{"class":64},"# 进入到.run目录中\n",[58,120731,120732,120734],{"class":60,"line":105},[58,120733,101905],{"class":82},[58,120735,120736],{"class":386}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[58,120738,120739],{"class":60,"line":627},[58,120740,120741],{"class":64},"# 给驱动文件增加可执行权限：\n",[58,120743,120744,120746,120748,120751],{"class":60,"line":509},[58,120745,25220],{"class":379},[58,120747,25223],{"class":386},[58,120749,120750],{"class":386}," a+x",[58,120752,120753],{"class":386}," NVIDIA-Linux-x86_64-550.107.02.run\n",[58,120755,120756],{"class":60,"line":559},[58,120757,120758],{"class":64},"# 然后执行安装：\n",[58,120760,120761,120763],{"class":60,"line":654},[58,120762,25220],{"class":379},[58,120764,120765],{"class":386}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[58,120767,120768],{"class":60,"line":671},[58,120769,120770],{"class":64},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[58,120772,120773,120775,120778],{"class":60,"line":677},[58,120774,25220],{"class":379},[58,120776,120777],{"class":386}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[58,120779,120780],{"class":82},"  --no-opengl-files\n",[175,120782,120783],{},"安装完毕重启即可",[48,120785,120787],{"className":119152,"code":120786,"language":119154,"meta":53,"style":53},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[55,120788,120789,120793,120799,120803],{"__ignoreMap":53},[58,120790,120791],{"class":60,"line":61},[58,120792,120557],{"class":64},[58,120794,120795,120797],{"class":60,"line":68},[58,120796,25220],{"class":379},[58,120798,27291],{"class":386},[58,120800,120801],{"class":60,"line":79},[58,120802,120572],{"class":64},[58,120804,120805],{"class":60,"line":105},[58,120806,120577],{"class":379},[114,120808,120810],{"id":120809},"_353-安装cuda","3.5.3 安装CUDA",[175,120812,120813],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[175,120815,120816],{},[119,120817],{"alt":53,"src":120818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[19,120820,120821],{},[22,120822,120823],{},"先查看显卡驱动所支持的最高CUDA版本",[48,120825,120826],{"className":119152,"code":120577,"language":119154,"meta":53,"style":53},[55,120827,120828],{"__ignoreMap":53},[58,120829,120830],{"class":60,"line":61},[58,120831,120577],{"class":379},[175,120833,120834],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[175,120836,120837],{},[119,120838],{"alt":53,"src":120839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[19,120841,120842],{"start":68},[22,120843,120844],{},"下载CUDA并安装CUDA",[175,120846,118931,120847],{},[376,120848,118934],{"href":118934,"rel":120849},[24508],[175,120851,120852],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[175,120854,120855],{},[119,120856],{"alt":53,"src":120857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[175,120859,120860,120861,120866],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[376,120862,120865],{"href":120863,"rel":120864},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24508],"Vinci机器人队单片机教程","）",[175,120868,120869],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[175,120871,120872],{},[119,120873],{"alt":53,"src":120874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[175,120876,120877],{},"将最下方框框里的命令敲入终端",[48,120879,120881],{"className":119152,"code":120880,"language":119154,"meta":53,"style":53},"# 在当前文件夹下创建一个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",[55,120882,120883,120888,120897,120902,120909,120914,120922,120927,120938,120943],{"__ignoreMap":53},[58,120884,120885],{"class":60,"line":61},[58,120886,120887],{"class":64},"# 在当前文件夹下创建一个ttt的子文件夹\n",[58,120889,120890,120892,120894],{"class":60,"line":68},[58,120891,101895],{"class":379},[58,120893,29860],{"class":82},[58,120895,120896],{"class":386}," .\u002Fttt\n",[58,120898,120899],{"class":60,"line":79},[58,120900,120901],{"class":64},"# 进入ttt文件夹\n",[58,120903,120904,120906],{"class":60,"line":105},[58,120905,101905],{"class":82},[58,120907,120908],{"class":386}," ttt\n",[58,120910,120911],{"class":60,"line":627},[58,120912,120913],{"class":64},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[58,120915,120916,120919],{"class":60,"line":509},[58,120917,120918],{"class":379},"wget",[58,120920,120921],{"class":386}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[58,120923,120924],{"class":60,"line":559},[58,120925,120926],{"class":64},"# 给予权限\n",[58,120928,120929,120931,120933,120935],{"class":60,"line":654},[58,120930,25220],{"class":379},[58,120932,25223],{"class":386},[58,120934,120750],{"class":386},[58,120936,120937],{"class":386}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[58,120939,120940],{"class":60,"line":671},[58,120941,120942],{"class":64},"# 运行脚本\n",[58,120944,120945,120947],{"class":60,"line":677},[58,120946,25220],{"class":379},[58,120948,120937],{"class":386},[175,120950,120951],{},[119,120952],{"alt":53,"src":120953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[175,120955,120956],{},"正在安装中：",[175,120958,120959],{},[119,120960],{"alt":53,"src":120961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[175,120963,120964],{},"输入accept接受即可",[175,120966,120967],{},[119,120968],{"alt":53,"src":120969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[175,120971,120972],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[175,120974,120975],{},[119,120976],{"alt":53,"src":120977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[175,120979,120980],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[175,120982,120983],{},[119,120984],{"alt":53,"src":120985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[19,120987,120988],{"start":79},[22,120989,120990],{},"配置环境",[175,120992,120993],{},"根据上方确认一下路径，比如我上面红色框起来的为",[48,120995,120997],{"className":119152,"code":120996,"language":119154,"meta":53,"style":53},"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",[55,120998,120999,121015,121030],{"__ignoreMap":53},[58,121000,121001,121004,121007,121010,121013],{"class":60,"line":61},[58,121002,121003],{"class":379},"Please",[58,121005,121006],{"class":386}," make",[58,121008,121009],{"class":386}," sure",[58,121011,121012],{"class":386}," that",[58,121014,3320],{"class":75},[58,121016,121017,121019,121022,121025,121028],{"class":60,"line":68},[58,121018,52909],{"class":379},[58,121020,121021],{"class":386},"   PATH",[58,121023,121024],{"class":386}," includes",[58,121026,121027],{"class":386}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[58,121029,3320],{"class":75},[58,121031,121032,121034,121037,121039,121042,121045,121047,121050,121053,121056,121059,121061,121064,121066],{"class":60,"line":79},[58,121033,52909],{"class":379},[58,121035,121036],{"class":386},"   LD_LIBRARY_PATH",[58,121038,121024],{"class":386},[58,121040,121041],{"class":386}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[58,121043,121044],{"class":386}," or,",[58,121046,5855],{"class":386},[58,121048,121049],{"class":386}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[58,121051,121052],{"class":386}," to",[58,121054,121055],{"class":386}," \u002Fetc\u002Fld.so.conf",[58,121057,121058],{"class":386}," and",[58,121060,27874],{"class":386},[58,121062,121063],{"class":386}," ldconfig",[58,121065,65236],{"class":386},[58,121067,121068],{"class":386}," root\n",[175,121070,121071],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[48,121073,121075],{"className":119152,"code":121074,"language":119154,"meta":53,"style":53},"which nvcc\n",[55,121076,121077],{"__ignoreMap":53},[58,121078,121079,121082],{"class":60,"line":61},[58,121080,121081],{"class":82},"which",[58,121083,121084],{"class":386}," nvcc\n",[175,121086,121087],{},[119,121088],{"alt":53,"src":121089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[175,121091,121092],{},"所以我进行以下操作：",[48,121094,121096],{"className":119152,"code":121095,"language":119154,"meta":53,"style":53},"sudo vim ~\u002F.bashrc\n",[55,121097,121098],{"__ignoreMap":53},[58,121099,121100,121102,121104],{"class":60,"line":61},[58,121101,25220],{"class":379},[58,121103,119212],{"class":386},[58,121105,121106],{"class":386}," ~\u002F.bashrc\n",[175,121108,121109],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[48,121111,121113],{"className":119152,"code":121112,"language":119154,"meta":53,"style":53},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[55,121114,121115,121127],{"__ignoreMap":53},[58,121116,121117,121119,121122,121124],{"class":60,"line":61},[58,121118,25686],{"class":92},[58,121120,121121],{"class":75}," PATH",[58,121123,383],{"class":92},[58,121125,121126],{"class":75},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[58,121128,121129,121131,121134,121136],{"class":60,"line":68},[58,121130,25686],{"class":92},[58,121132,121133],{"class":75}," LD_LIBRARY_PATH",[58,121135,383],{"class":92},[58,121137,121138],{"class":75},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[175,121140,121141],{},[119,121142],{"alt":53,"src":121143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[48,121145,121147],{"className":119152,"code":121146,"language":119154,"meta":53,"style":53},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[55,121148,121149,121154,121160,121165],{"__ignoreMap":53},[58,121150,121151],{"class":60,"line":61},[58,121152,121153],{"class":64},"# 刷新当前终端的环境变量\n",[58,121155,121156,121158],{"class":60,"line":68},[58,121157,101522],{"class":82},[58,121159,121106],{"class":386},[58,121161,121162],{"class":60,"line":79},[58,121163,121164],{"class":64},"# 验证CUDA是否安装成功\n",[58,121166,121167,121170],{"class":60,"line":105},[58,121168,121169],{"class":379},"nvcc",[58,121171,121172],{"class":82}," -V\n",[175,121174,121175],{},"出现下图这种则安装成功。",[175,121177,121178],{},[119,121179],{"alt":53,"src":121180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[114,121182,121184],{"id":121183},"_354-安装cudnn","3.5.4 安装cuDNN",[19,121186,121187],{},[22,121188,121189],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[175,121191,121192,121193,121198],{},"前往 NVIDIA cuDNN 下载页面：",[376,121194,121197],{"href":121195,"rel":121196},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24508],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[175,121200,121201],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[175,121203,121204],{},[119,121205],{"alt":53,"src":121206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[175,121208,121209],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[175,121211,121212],{},[119,121213],{"alt":53,"src":121214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[175,121216,121217],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[175,121219,121220],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[175,121222,121223],{},[25,121224,121225],{},"我这里选择所有Linux X86_64最通用的办法：",[175,121227,121228],{},"下载好的：",[175,121230,121231],{},[119,121232],{"alt":53,"src":121233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[19,121235,121236],{"start":68},[22,121237,121238],{},"安装cuDNN",[175,121240,121241],{},"找到该文件所在目录，并打开终端，cd到该目录。",[175,121243,121244],{},[119,121245],{"alt":53,"src":121246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[175,121248,121249],{},"解压文件，并复制到对应位置完成安装",[48,121251,121253],{"className":119152,"code":121252,"language":119154,"meta":53,"style":53},"# 解压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",[55,121254,121255,121260,121271,121276,121283,121288,121304,121318,121323,121334,121343,121347,121363],{"__ignoreMap":53},[58,121256,121257],{"class":60,"line":61},[58,121258,121259],{"class":64},"# 解压cuDNN文件\n",[58,121261,121262,121265,121268],{"class":60,"line":68},[58,121263,121264],{"class":379},"tar",[58,121266,121267],{"class":82}," -xvf",[58,121269,121270],{"class":386}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[58,121272,121273],{"class":60,"line":79},[58,121274,121275],{"class":64},"# cd进文件夹\n",[58,121277,121278,121280],{"class":60,"line":105},[58,121279,101905],{"class":82},[58,121281,121282],{"class":386}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[58,121284,121285],{"class":60,"line":627},[58,121286,121287],{"class":64},"# 复制cuDNN文件到CUDA目录\n",[58,121289,121290,121292,121294,121297,121299,121302],{"class":60,"line":509},[58,121291,25220],{"class":379},[58,121293,28505],{"class":386},[58,121295,121296],{"class":386}," include\u002Fcudnn",[58,121298,1241],{"class":82},[58,121300,121301],{"class":386},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[58,121303,3320],{"class":75},[58,121305,121306,121308,121310,121313,121315],{"class":60,"line":559},[58,121307,25220],{"class":379},[58,121309,28505],{"class":386},[58,121311,121312],{"class":386}," lib\u002Flibcudnn",[58,121314,1241],{"class":82},[58,121316,121317],{"class":386},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[58,121319,121320],{"class":60,"line":654},[58,121321,121322],{"class":64},"# 对比一下有没有缺文件\n",[58,121324,121325,121327,121330,121332],{"class":60,"line":671},[58,121326,27405],{"class":379},[58,121328,121329],{"class":386}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[58,121331,1241],{"class":82},[58,121333,3320],{"class":75},[58,121335,121336,121338,121341],{"class":60,"line":677},[58,121337,27405],{"class":379},[58,121339,121340],{"class":386}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[58,121342,119877],{"class":82},[58,121344,121345],{"class":60,"line":2260},[58,121346,120926],{"class":64},[58,121348,121349,121351,121353,121356,121358,121360],{"class":60,"line":694},[58,121350,25220],{"class":379},[58,121352,25223],{"class":386},[58,121354,121355],{"class":386}," a+r",[58,121357,121329],{"class":386},[58,121359,1241],{"class":82},[58,121361,121362],{"class":75},"   \n",[58,121364,121365,121367,121369,121371,121373],{"class":60,"line":2270},[58,121366,25220],{"class":379},[58,121368,25223],{"class":386},[58,121370,121355],{"class":386},[58,121372,121340],{"class":386},[58,121374,119877],{"class":82},[19,121376,121377],{"start":79},[22,121378,121379],{},"检查是否安装成功",[48,121381,121383],{"className":119152,"code":121382,"language":119154,"meta":53,"style":53},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[55,121384,121385,121390],{"__ignoreMap":53},[58,121386,121387],{"class":60,"line":61},[58,121388,121389],{"class":64},"# 检查cuDNN版本命令\n",[58,121391,121392,121395,121398,121400,121402,121405,121408],{"class":60,"line":68},[58,121393,121394],{"class":379},"cat",[58,121396,121397],{"class":386}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[58,121399,25753],{"class":92},[58,121401,30880],{"class":379},[58,121403,121404],{"class":386}," CUDNN_MAJOR",[58,121406,121407],{"class":82}," -A",[58,121409,48367],{"class":82},[175,121411,121412],{},"出现下图这样的就是安装成功了",[175,121414,121415],{},[119,121416],{"alt":53,"src":121417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[19,121419,121420],{"start":105},[22,121421,121422],{},"软链接(一般不需要)",[48,121424,121426],{"className":119152,"code":121425,"language":119154,"meta":53,"style":53},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[55,121427,121428,121433],{"__ignoreMap":53},[58,121429,121430],{"class":60,"line":61},[58,121431,121432],{"class":64},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[58,121434,121435,121437],{"class":60,"line":68},[58,121436,25220],{"class":379},[58,121438,121439],{"class":386}," ldconfig\n",[175,121441,121442],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[48,121444,121449],{"className":121445,"code":121446,"language":121447,"meta":121448,"style":53},"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",[55,121450,121451,121456,121461,121466,121471,121476,121481],{"__ignoreMap":53},[58,121452,121453],{"class":60,"line":61},[58,121454,121455],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[58,121457,121458],{"class":60,"line":68},[58,121459,121460],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[58,121462,121463],{"class":60,"line":79},[58,121464,121465],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[58,121467,121468],{"class":60,"line":105},[58,121469,121470],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[58,121472,121473],{"class":60,"line":627},[58,121474,121475],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[58,121477,121478],{"class":60,"line":509},[58,121479,121480],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[58,121482,121483],{"class":60,"line":559},[58,121484,121485],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[175,121487,121488],{},"运行下方的命令",[48,121490,121492],{"className":119152,"code":121491,"language":119154,"meta":53,"style":53},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[55,121493,121494,121499,121506,121511],{"__ignoreMap":53},[58,121495,121496],{"class":60,"line":61},[58,121497,121498],{"class":64},"# cd进入CUDA路径\n",[58,121500,121501,121503],{"class":60,"line":68},[58,121502,101905],{"class":82},[58,121504,121505],{"class":386}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[58,121507,121508],{"class":60,"line":79},[58,121509,121510],{"class":64}," # 查看本路径下的需要软链接的文件名\n",[58,121512,121513],{"class":60,"line":105},[58,121514,121515],{"class":379}," ls\n",[175,121517,121518],{},[119,121519],{"alt":53,"src":121520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[175,121522,121523,121524,19053,121527,19053,121530,121533],{},"如上图，我需要将",[55,121525,121526],{},"libcudnn_xxx_xxxxx.so.8.9.7",[55,121528,121529],{},"libcudnn_xxx_xxxxx.so.8",[55,121531,121532],{},"libcudnn_xxx_xxxxx.so","软链接",[48,121535,121537],{"className":119152,"code":121536,"language":119154,"meta":53,"style":53},"# 创建符号链接。对于每个 .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",[55,121538,121539,121544,121560,121574,121588,121602,121616,121630,121644,121649,121655,121660],{"__ignoreMap":53},[58,121540,121541],{"class":60,"line":61},[58,121542,121543],{"class":64},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[58,121545,121546,121548,121551,121554,121557],{"class":60,"line":68},[58,121547,25220],{"class":379},[58,121549,121550],{"class":386}," ln",[58,121552,121553],{"class":82}," -sf",[58,121555,121556],{"class":386}," libcudnn_cnn_train.so.8.9.7",[58,121558,121559],{"class":386}," libcudnn_cnn_train.so.8\n",[58,121561,121562,121564,121566,121568,121571],{"class":60,"line":79},[58,121563,25220],{"class":379},[58,121565,121550],{"class":386},[58,121567,121553],{"class":82},[58,121569,121570],{"class":386}," libcudnn_adv_infer.so.8.9.7",[58,121572,121573],{"class":386}," libcudnn_adv_infer.so.8\n",[58,121575,121576,121578,121580,121582,121585],{"class":60,"line":105},[58,121577,25220],{"class":379},[58,121579,121550],{"class":386},[58,121581,121553],{"class":82},[58,121583,121584],{"class":386}," libcudnn_adv_train.so.8.9.7",[58,121586,121587],{"class":386}," libcudnn_adv_train.so.8\n",[58,121589,121590,121592,121594,121596,121599],{"class":60,"line":627},[58,121591,25220],{"class":379},[58,121593,121550],{"class":386},[58,121595,121553],{"class":82},[58,121597,121598],{"class":386}," libcudnn_cnn_infer.so.8.9.7",[58,121600,121601],{"class":386}," libcudnn_cnn_infer.so.8\n",[58,121603,121604,121606,121608,121610,121613],{"class":60,"line":509},[58,121605,25220],{"class":379},[58,121607,121550],{"class":386},[58,121609,121553],{"class":82},[58,121611,121612],{"class":386}," libcudnn.so.8.9.7",[58,121614,121615],{"class":386}," libcudnn.so.8\n",[58,121617,121618,121620,121622,121624,121627],{"class":60,"line":559},[58,121619,25220],{"class":379},[58,121621,121550],{"class":386},[58,121623,121553],{"class":82},[58,121625,121626],{"class":386}," libcudnn_ops_infer.so.8.9.7",[58,121628,121629],{"class":386}," libcudnn_ops_infer.so.8\n",[58,121631,121632,121634,121636,121638,121641],{"class":60,"line":654},[58,121633,25220],{"class":379},[58,121635,121550],{"class":386},[58,121637,121553],{"class":82},[58,121639,121640],{"class":386}," libcudnn_ops_train.so.8.9.7",[58,121642,121643],{"class":386}," libcudnn_ops_train.so.8\n",[58,121645,121646],{"class":60,"line":671},[58,121647,121648],{"class":64},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[58,121650,121651,121653],{"class":60,"line":677},[58,121652,25220],{"class":379},[58,121654,121439],{"class":386},[58,121656,121657],{"class":60,"line":2260},[58,121658,121659],{"class":64},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[58,121661,121662,121664,121667,121670,121672,121675],{"class":60,"line":694},[58,121663,27405],{"class":379},[58,121665,121666],{"class":82}," -l",[58,121668,121669],{"class":386}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[58,121671,1241],{"class":82},[58,121673,121674],{"class":386},".so",[58,121676,119877],{"class":82},[114,121678,121680],{"id":121679},"_355-常见问题","3.5.5 常见问题",[19,121682,121683],{},[22,121684,121685],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[48,121687,121689],{"className":119152,"code":121688,"language":119154,"meta":53,"style":53},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[55,121690,121691],{"__ignoreMap":53},[58,121692,121693,121695,121697],{"class":60,"line":61},[58,121694,25220],{"class":379},[58,121696,119212],{"class":386},[58,121698,121699],{"class":386}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[175,121701,121702],{},"blacklist-nouveau.conf文件内容如下：",[48,121704,121706],{"className":119152,"code":121705,"language":119154,"meta":53,"style":53},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[55,121707,121708,121716,121723,121735,121745],{"__ignoreMap":53},[58,121709,121710,121713],{"class":60,"line":61},[58,121711,121712],{"class":379},"blacklist",[58,121714,121715],{"class":386}," nouveau\n",[58,121717,121718,121720],{"class":60,"line":68},[58,121719,121712],{"class":379},[58,121721,121722],{"class":386}," lbm-nouveau\n",[58,121724,121725,121727,121730,121733],{"class":60,"line":79},[58,121726,116559],{"class":379},[58,121728,121729],{"class":386}," nouveau",[58,121731,121732],{"class":386}," modeset=",[58,121734,3731],{"class":82},[58,121736,121737,121740,121742],{"class":60,"line":105},[58,121738,121739],{"class":82},"alias",[58,121741,121729],{"class":386},[58,121743,121744],{"class":386}," off\n",[58,121746,121747,121749,121752],{"class":60,"line":627},[58,121748,121739],{"class":82},[58,121750,121751],{"class":386}," lbm-nouveau",[58,121753,121744],{"class":386},[175,121755,121756],{},"接着运行下方命令",[48,121758,121760],{"className":119152,"code":121759,"language":119154,"meta":53,"style":53},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[55,121761,121762,121772,121777],{"__ignoreMap":53},[58,121763,121764,121766,121769],{"class":60,"line":61},[58,121765,25220],{"class":379},[58,121767,121768],{"class":386}," update-initramfs",[58,121770,121771],{"class":82}," -u\n",[58,121773,121774],{"class":60,"line":68},[58,121775,121776],{"class":379},"或者\n",[58,121778,121779,121781,121784],{"class":60,"line":79},[58,121780,25220],{"class":379},[58,121782,121783],{"class":386}," dracut",[58,121785,121786],{"class":82}," --force\n",[175,121788,121789],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[48,121791,121793],{"className":119152,"code":121792,"language":119154,"meta":53,"style":53},"lsmod | grep nouveau\n",[55,121794,121795],{"__ignoreMap":53},[58,121796,121797,121800,121802,121804],{"class":60,"line":61},[58,121798,121799],{"class":379},"lsmod",[58,121801,25753],{"class":92},[58,121803,30880],{"class":379},[58,121805,121715],{"class":386},[19,121807,121808],{"start":68},[22,121809,121810],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[48,121812,121814],{"className":119152,"code":121813,"language":119154,"meta":53,"style":53},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[55,121815,121816],{"__ignoreMap":53},[58,121817,121818,121820,121822],{"class":60,"line":61},[58,121819,25220],{"class":379},[58,121821,119212],{"class":386},[58,121823,121824],{"class":386}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[175,121826,121827],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[48,121829,121831],{"className":119152,"code":121830,"language":119154,"meta":53,"style":53},"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",[55,121832,121833,121841,121849,121857,121864,121872,121882,121890],{"__ignoreMap":53},[58,121834,121835,121838],{"class":60,"line":61},[58,121836,121837],{"class":379},"Section",[58,121839,121840],{"class":386}," \"OutputClass\"\n",[58,121842,121843,121846],{"class":60,"line":68},[58,121844,121845],{"class":379},"   Identifier",[58,121847,121848],{"class":386}," \"nvidia\"\n",[58,121850,121851,121854],{"class":60,"line":79},[58,121852,121853],{"class":379},"   MatchDriver",[58,121855,121856],{"class":386}," \"nvidia-drm\"\n",[58,121858,121859,121862],{"class":60,"line":105},[58,121860,121861],{"class":379},"   Driver",[58,121863,121848],{"class":386},[58,121865,121866,121869],{"class":60,"line":627},[58,121867,121868],{"class":379},"   Option",[58,121870,121871],{"class":386}," \"AllowEmptyInitialConfiguration\"\n",[58,121873,121874,121876,121879],{"class":60,"line":509},[58,121875,121868],{"class":379},[58,121877,121878],{"class":386}," \"PrimaryGPU\"",[58,121880,121881],{"class":386}," \"yes\"\n",[58,121883,121884,121887],{"class":60,"line":559},[58,121885,121886],{"class":379},"   ModulePath",[58,121888,121889],{"class":386}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[58,121891,121892],{"class":60,"line":654},[58,121893,121894],{"class":379},"EndSection\n",[19,121896,121897],{"start":79},[22,121898,121899],{},"安装N卡驱动提示错误",[48,121901,121903],{"className":121445,"code":121902,"language":121447,"meta":121448,"style":53},"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",[55,121904,121905],{"__ignoreMap":53},[58,121906,121907],{"class":60,"line":61},[58,121908,121902],{},[19,121910,121911],{},[22,121912,121913],{},"检查当前运行的内核版本：",[175,121915,121916],{},"运行以下命令以查看你当前正在使用的内核版本：",[48,121918,121920],{"className":117925,"code":121919,"language":117927,"meta":53,"style":53},"uname -r\n",[55,121921,121922],{"__ignoreMap":53},[58,121923,121924,121926],{"class":60,"line":61},[58,121925,70836],{"class":379},[58,121927,121928],{"class":82}," -r\n",[19,121930,121931],{"start":68},[22,121932,121933],{},"安装内核开发文件：",[175,121935,121936,121937,121940],{},"确保你已经安装了与当前内核版本相匹配的 ",[55,121938,121939],{},"kernel-devel"," 包。运行以下命令来安装：",[48,121942,121944],{"className":117925,"code":121943,"language":117927,"meta":53,"style":53},"sudo dnf install kernel-devel-$(uname -r)\n",[55,121945,121946],{"__ignoreMap":53},[58,121947,121948,121950,121952,121954,121957,121959,121961,121963],{"class":60,"line":61},[58,121949,25220],{"class":379},[58,121951,26959],{"class":386},[58,121953,24477],{"class":386},[58,121955,121956],{"class":386}," kernel-devel-",[58,121958,25743],{"class":75},[58,121960,70836],{"class":379},[58,121962,120268],{"class":82},[58,121964,799],{"class":75},[175,121966,121967],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[19,121969,121970],{"start":79},[22,121971,121972],{},"安装内核源代码（如果需要）：",[175,121974,121975],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[48,121977,121979],{"className":117925,"code":121978,"language":117927,"meta":53,"style":53},"sudo dnf install kernel-headers kernel-source\n",[55,121980,121981],{"__ignoreMap":53},[58,121982,121983,121985,121987,121989,121992],{"class":60,"line":61},[58,121984,25220],{"class":379},[58,121986,26959],{"class":386},[58,121988,24477],{"class":386},[58,121990,121991],{"class":386}," kernel-headers",[58,121993,121994],{"class":386}," kernel-source\n",[19,121996,121997],{"start":105},[22,121998,121999],{},"检查安装：",[175,122001,122002,122003,122006],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[55,122004,122005],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[48,122008,122010],{"className":117925,"code":122009,"language":117927,"meta":53,"style":53},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[55,122011,122012],{"__ignoreMap":53},[58,122013,122014,122016],{"class":60,"line":61},[58,122015,27405],{"class":379},[58,122017,122018],{"class":386}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[175,122020,122021,122022,122025],{},"如果仍然遇到问题，可以通过 ",[55,122023,122024],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[702,122027,122028],{},"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":53,"searchDepth":68,"depth":68,"links":122030},[122031,122035,122045,122049,122050],{"id":119128,"depth":68,"text":119129,"children":122032},[122033,122034],{"id":119138,"depth":79,"text":119139},{"id":119148,"depth":79,"text":119149},{"id":119348,"depth":68,"text":119349,"children":122036},[122037,122038,122039,122040,122041,122042,122043,122044],{"id":119352,"depth":79,"text":119353},{"id":119422,"depth":79,"text":119423},{"id":119511,"depth":79,"text":119512},{"id":119756,"depth":79,"text":119757},{"id":119826,"depth":79,"text":119827},{"id":119893,"depth":79,"text":119894},{"id":119928,"depth":79,"text":119929},{"id":119983,"depth":79,"text":119984},{"id":120034,"depth":68,"text":120035,"children":122046},[122047,122048],{"id":120038,"depth":79,"text":120039},{"id":120118,"depth":79,"text":120119},{"id":120304,"depth":68,"text":120305},{"id":120477,"depth":68,"text":120478,"children":122051},[122052,122053,122054,122055,122056],{"id":120481,"depth":79,"text":120482},{"id":120522,"depth":79,"text":120523},{"id":120809,"depth":79,"text":120810},{"id":121183,"depth":79,"text":121184},{"id":121679,"depth":79,"text":121680},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119120,"description":717},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122063,"title":122064,"body":122065,"description":717,"extension":718,"meta":122405,"navigation":720,"path":122406,"seo":122407,"stem":122408,"__hash__":122409},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122066,"toc":122403},[122067,122070,122075,122078,122324,122329,122332,122368,122371,122400],[10,122068,122064],{"id":122069},"_4-命令教程长期积累",[19,122071,122072],{},[22,122073,122074],{},"大多数命令",[175,122076,122077],{},"常用 Linux 命令速查：",[48,122079,122081],{"className":117925,"code":122080,"language":117927,"meta":53,"style":53},"# 文件与目录\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",[55,122082,122083,122088,122095,122102,122110,122117,122124,122132,122140,122147,122154,122162,122166,122171,122178,122186,122193,122197,122202,122209,122217,122225,122233,122241,122245,122250,122258,122265,122272,122280,122288,122292,122297,122306,122315],{"__ignoreMap":53},[58,122084,122085],{"class":60,"line":61},[58,122086,122087],{"class":64},"# 文件与目录\n",[58,122089,122090,122092],{"class":60,"line":68},[58,122091,27405],{"class":379},[58,122093,122094],{"class":64},"        # 列出目录内容\n",[58,122096,122097,122099],{"class":60,"line":79},[58,122098,101905],{"class":82},[58,122100,122101],{"class":64},"        # 切换目录\n",[58,122103,122104,122107],{"class":60,"line":105},[58,122105,122106],{"class":82},"pwd",[58,122108,122109],{"class":64},"       # 显示当前路径\n",[58,122111,122112,122114],{"class":60,"line":627},[58,122113,101895],{"class":379},[58,122115,122116],{"class":64},"     # 创建目录\n",[58,122118,122119,122121],{"class":60,"line":509},[58,122120,25966],{"class":379},[58,122122,122123],{"class":64},"        # 删除文件或目录\n",[58,122125,122126,122129],{"class":60,"line":559},[58,122127,122128],{"class":379},"cp",[58,122130,122131],{"class":64},"        # 复制文件或目录\n",[58,122133,122134,122137],{"class":60,"line":654},[58,122135,122136],{"class":379},"mv",[58,122138,122139],{"class":64},"        # 移动\u002F重命名文件或目录\n",[58,122141,122142,122144],{"class":60,"line":671},[58,122143,101912],{"class":379},[58,122145,122146],{"class":64},"     # 创建空文件\n",[58,122148,122149,122151],{"class":60,"line":677},[58,122150,121394],{"class":379},[58,122152,122153],{"class":64},"       # 查看文件内容\n",[58,122155,122156,122159],{"class":60,"line":2260},[58,122157,122158],{"class":379},"head\u002Ftail",[58,122160,122161],{"class":64}," # 查看文件头部\u002F尾部\n",[58,122163,122164],{"class":60,"line":694},[58,122165,3046],{"emptyLinePlaceholder":720},[58,122167,122168],{"class":60,"line":2270},[58,122169,122170],{"class":64},"# 权限管理\n",[58,122172,122173,122175],{"class":60,"line":2275},[58,122174,25255],{"class":379},[58,122176,122177],{"class":64},"     # 修改文件权限\n",[58,122179,122180,122183],{"class":60,"line":2289},[58,122181,122182],{"class":379},"chown",[58,122184,122185],{"class":64},"     # 修改文件所有者\n",[58,122187,122188,122190],{"class":60,"line":2294},[58,122189,25220],{"class":379},[58,122191,122192],{"class":64},"      # 以管理员身份执行\n",[58,122194,122195],{"class":60,"line":2300},[58,122196,3046],{"emptyLinePlaceholder":720},[58,122198,122199],{"class":60,"line":2321},[58,122200,122201],{"class":64},"# 系统信息\n",[58,122203,122204,122206],{"class":60,"line":2326},[58,122205,70836],{"class":379},[58,122207,122208],{"class":64},"     # 系统信息\n",[58,122210,122211,122214],{"class":60,"line":2340},[58,122212,122213],{"class":379},"df",[58,122215,122216],{"class":64},"        # 磁盘使用情况\n",[58,122218,122219,122222],{"class":60,"line":2345},[58,122220,122221],{"class":379},"free",[58,122223,122224],{"class":64},"      # 内存使用情况\n",[58,122226,122227,122230],{"class":60,"line":2374},[58,122228,122229],{"class":379},"top\u002Fhtop",[58,122231,122232],{"class":64},"  # 进程监控\n",[58,122234,122235,122238],{"class":60,"line":2379},[58,122236,122237],{"class":379},"ps",[58,122239,122240],{"class":64},"        # 查看进程\n",[58,122242,122243],{"class":60,"line":2396},[58,122244,3046],{"emptyLinePlaceholder":720},[58,122246,122247],{"class":60,"line":2401},[58,122248,122249],{"class":64},"# 网络\n",[58,122251,122252,122255],{"class":60,"line":2406},[58,122253,122254],{"class":379},"ping",[58,122256,122257],{"class":64},"      # 测试网络连通性\n",[58,122259,122260,122262],{"class":60,"line":2411},[58,122261,27493],{"class":379},[58,122263,122264],{"class":64},"      # 发送 HTTP 请求\n",[58,122266,122267,122269],{"class":60,"line":2425},[58,122268,120918],{"class":379},[58,122270,122271],{"class":64},"      # 下载文件\n",[58,122273,122274,122277],{"class":60,"line":2430},[58,122275,122276],{"class":379},"ssh",[58,122278,122279],{"class":64},"       # 远程登录\n",[58,122281,122282,122285],{"class":60,"line":3223},[58,122283,122284],{"class":379},"scp",[58,122286,122287],{"class":64},"       # 远程文件传输\n",[58,122289,122290],{"class":60,"line":3237},[58,122291,3046],{"emptyLinePlaceholder":720},[58,122293,122294],{"class":60,"line":3245},[58,122295,122296],{"class":64},"# 包管理（Debian\u002FUbuntu）\n",[58,122298,122299,122301,122303],{"class":60,"line":3250},[58,122300,117997],{"class":379},[58,122302,117976],{"class":386},[58,122304,122305],{"class":64},"   # 更新软件源\n",[58,122307,122308,122310,122312],{"class":60,"line":3256},[58,122309,117997],{"class":379},[58,122311,24477],{"class":386},[58,122313,122314],{"class":64},"  # 安装软件包\n",[58,122316,122317,122319,122321],{"class":60,"line":3262},[58,122318,117997],{"class":379},[58,122320,26723],{"class":386},[58,122322,122323],{"class":64},"   # 卸载软件包\n",[19,122325,122326],{"start":68},[22,122327,122328],{},"KDE Dolphin 以root打开",[175,122330,122331],{},"kde5",[48,122333,122335],{"className":117925,"code":122334,"language":117927,"meta":53,"style":53},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[55,122336,122337],{"__ignoreMap":53},[58,122338,122339,122342,122345,122348,122350,122352,122355,122358,122360,122363,122365],{"class":60,"line":61},[58,122340,122341],{"class":379},"pkexec",[58,122343,122344],{"class":386}," env",[58,122346,122347],{"class":386}," DISPLAY=",[58,122349,28787],{"class":75},[58,122351,28845],{"class":386},[58,122353,122354],{"class":75},"$XAUTHORITY ",[58,122356,122357],{"class":386},"KDE_SESSION_VERSION=",[58,122359,1105],{"class":82},[58,122361,122362],{"class":386}," KDE_FULL_SESSION=",[58,122364,2012],{"class":82},[58,122366,122367],{"class":386}," dolphin\n",[175,122369,122370],{},"kde6",[48,122372,122374],{"className":117925,"code":122373,"language":117927,"meta":53,"style":53},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[55,122375,122376],{"__ignoreMap":53},[58,122377,122378,122380,122382,122384,122386,122388,122390,122392,122394,122396,122398],{"class":60,"line":61},[58,122379,122341],{"class":379},[58,122381,122344],{"class":386},[58,122383,122347],{"class":386},[58,122385,28787],{"class":75},[58,122387,28845],{"class":386},[58,122389,122354],{"class":75},[58,122391,122357],{"class":386},[58,122393,1130],{"class":82},[58,122395,122362],{"class":386},[58,122397,2012],{"class":82},[58,122399,122367],{"class":386},[702,122401,122402],{},"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":53,"searchDepth":68,"depth":68,"links":122404},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122064,"description":717},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122411,"title":122412,"body":122413,"description":717,"extension":718,"meta":122427,"navigation":720,"path":122428,"seo":122429,"stem":122430,"__hash__":122431},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122414,"toc":122425},[122415,122418],[10,122416,122412],{"id":122417},"_5-各种环境配置",[175,122419,122420],{},[376,122421,122424],{"href":122422,"rel":122423},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24508],"电控组环境搭建大全",{"title":53,"searchDepth":68,"depth":68,"links":122426},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122412,"description":717},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122433,"title":122434,"body":122435,"description":717,"extension":718,"meta":122783,"navigation":720,"path":122784,"seo":122785,"stem":122786,"__hash__":122787},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122436,"toc":122775},[122437,122440,122444,122448,122452,122457,122464,122468,122761,122765,122772],[10,122438,122434],{"id":122439},"_6-拓展功能",[14,122441,122443],{"id":122442},"_61-wine","6.1 Wine",[14,122445,122447],{"id":122446},"_62-android","6.2 Android",[114,122449,122451],{"id":122450},"_621-i卡a卡","6.2.1 I卡、A卡",[19,122453,122454],{},[22,122455,122456],{},"Wayland-Waydroid(体验超级好)",[175,122458,122459,122460],{},"Waydroid 官网与安装指南：",[376,122461,122462],{"href":122462,"rel":122463},"https:\u002F\u002Fwaydro.id\u002F",[24508],[114,122465,122467],{"id":122466},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[19,122469,122470],{},[22,122471,122472,122473,122475,122476,122480,122482,122485,122490,122687],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54352,122474],{},"BlissOS 官网下载：",[376,122477,122478],{"href":122478,"rel":122479},"https:\u002F\u002Fblissos.org\u002F",[24508],[54352,122481],{},[119,122483],{"alt":53,"src":122484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[19,122486,122487],{"start":79},[22,122488,122489],{},"比较推荐的配置",[48,122491,122493],{"className":117925,"code":122492,"language":117927,"meta":53,"style":53},"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",[55,122494,122495,122502,122512,122522,122532,122544,122554,122561,122571,122580,122589,122599,122609,122618,122628,122638,122650,122660,122669,122679],{"__ignoreMap":53},[58,122496,122497,122500],{"class":60,"line":61},[58,122498,122499],{"class":379},"qemu-system-x86_64",[58,122501,25322],{"class":82},[58,122503,122504,122507,122510],{"class":60,"line":68},[58,122505,122506],{"class":82},"        -M",[58,122508,122509],{"class":386}," q35,vmport=off",[58,122511,25322],{"class":82},[58,122513,122514,122517,122520],{"class":60,"line":79},[58,122515,122516],{"class":82},"        -accel",[58,122518,122519],{"class":386}," kvm",[58,122521,25322],{"class":82},[58,122523,122524,122527,122530],{"class":60,"line":105},[58,122525,122526],{"class":82},"        -cpu",[58,122528,122529],{"class":386}," qemu64,+sse3,+sse4.2",[58,122531,25322],{"class":82},[58,122533,122534,122537,122540,122542],{"class":60,"line":627},[58,122535,122536],{"class":82},"        -smp",[58,122538,122539],{"class":386}," 8,cores=",[58,122541,1079],{"class":82},[58,122543,25322],{"class":82},[58,122545,122546,122549,122552],{"class":60,"line":509},[58,122547,122548],{"class":82},"        -m",[58,122550,122551],{"class":386}," 6G",[58,122553,25322],{"class":82},[58,122555,122556,122559],{"class":60,"line":559},[58,122557,122558],{"class":82},"        -usb",[58,122560,25322],{"class":82},[58,122562,122563,122566,122569],{"class":60,"line":654},[58,122564,122565],{"class":82},"        -device",[58,122567,122568],{"class":386}," virtio-tablet",[58,122570,25322],{"class":82},[58,122572,122573,122575,122578],{"class":60,"line":671},[58,122574,122565],{"class":82},[58,122576,122577],{"class":386}," virtio-keyboard",[58,122579,25322],{"class":82},[58,122581,122582,122584,122587],{"class":60,"line":677},[58,122583,122565],{"class":82},[58,122585,122586],{"class":386}," usb-tablet",[58,122588,25322],{"class":82},[58,122590,122591,122594,122597],{"class":60,"line":2260},[58,122592,122593],{"class":82},"        -bios",[58,122595,122596],{"class":386}," OVMF-pure-efi64.fd",[58,122598,25322],{"class":82},[58,122600,122601,122604,122607],{"class":60,"line":694},[58,122602,122603],{"class":82},"        -net",[58,122605,122606],{"class":386}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[58,122608,25322],{"class":82},[58,122610,122611,122613,122616],{"class":60,"line":2270},[58,122612,122603],{"class":82},[58,122614,122615],{"class":386}," nic,model=virtio",[58,122617,25322],{"class":82},[58,122619,122620,122623,122626],{"class":60,"line":2275},[58,122621,122622],{"class":82},"        -audio",[58,122624,122625],{"class":386}," sdl,model=hda",[58,122627,25322],{"class":82},[58,122629,122630,122633,122636],{"class":60,"line":2289},[58,122631,122632],{"class":82},"        -display",[58,122634,122635],{"class":386}," sdl,gl=on,show-cursor=on",[58,122637,25322],{"class":82},[58,122639,122640,122642,122645,122648],{"class":60,"line":2294},[58,122641,122565],{"class":82},[58,122643,122644],{"class":386}," virtio-vga-gl,xres=1920,yres=",[58,122646,122647],{"class":82},"1080",[58,122649,25322],{"class":82},[58,122651,122652,122655,122658],{"class":60,"line":2300},[58,122653,122654],{"class":82},"        -drive",[58,122656,122657],{"class":386}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[58,122659,25322],{"class":82},[58,122661,122662,122664,122667],{"class":60,"line":2321},[58,122663,122654],{"class":82},[58,122665,122666],{"class":386}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[58,122668,25322],{"class":82},[58,122670,122671,122674,122677],{"class":60,"line":2326},[58,122672,122673],{"class":82},"        -monitor",[58,122675,122676],{"class":386}," stdio",[58,122678,25322],{"class":82},[58,122680,122681,122684],{"class":60,"line":2340},[58,122682,122683],{"class":82},"        -serial",[58,122685,122686],{"class":386}," none\n",[19,122688,122689],{"start":627},[22,122690,122691,122692],{},"常用操作：",[19,122693,122694,122697,122753],{},[22,122695,122696],{},"全屏：Ctrl+Alt+F",[22,122698,122699,122700,122705],{},"adb调试",[19,122701,122702],{},[22,122703,122704],{},"使Linux与Android用ADB连接。",[48,122706,122708],{"className":117925,"code":122707,"language":117927,"meta":53,"style":53},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[55,122709,122710,122715,122726,122731,122743,122748],{"__ignoreMap":53},[58,122711,122712],{"class":60,"line":61},[58,122713,122714],{"class":64},"# 连接安卓\n",[58,122716,122717,122720,122723],{"class":60,"line":68},[58,122718,122719],{"class":379},"adb",[58,122721,122722],{"class":386}," connect",[58,122724,122725],{"class":82}," 127.0.0.1\n",[58,122727,122728],{"class":60,"line":79},[58,122729,122730],{"class":64},"# 打开shell\n",[58,122732,122733,122735,122737,122740],{"class":60,"line":105},[58,122734,122719],{"class":379},[58,122736,27527],{"class":82},[58,122738,122739],{"class":386}," 127.0.0.1:5555",[58,122741,122742],{"class":386}," shell\n",[58,122744,122745],{"class":60,"line":627},[58,122746,122747],{"class":64},"# 使用root权限\n",[58,122749,122750],{"class":60,"line":509},[58,122751,122752],{"class":379},"su\n",[22,122754,122755,122756],{},"中文输入法",[19,122757,122758],{},[22,122759,122760],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,122762,122764],{"id":122763},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[175,122766,122767,122768],{},"rEFInd 官网与文档：",[376,122769,122770],{"href":122770,"rel":122771},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24508],[702,122773,122774],{},"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":53,"searchDepth":68,"depth":68,"links":122776},[122777,122778,122782],{"id":122442,"depth":68,"text":122443},{"id":122446,"depth":68,"text":122447,"children":122779},[122780,122781],{"id":122450,"depth":79,"text":122451},{"id":122466,"depth":79,"text":122467},{"id":122763,"depth":68,"text":122764},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122434,"description":717},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122789,"title":122790,"body":122791,"description":717,"extension":718,"meta":126090,"navigation":720,"path":126091,"seo":126092,"stem":126093,"__hash__":126094},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122792,"toc":126064},[122793,122796,122800,122803,122810,123060,123063,123135,123138,123142,123146,123151,123154,123157,123160,123165,123168,123171,123174,123179,123182,123187,123190,123193,123198,123201,123206,123209,123213,123217,123220,123225,123228,123242,123245,123248,123257,123260,123269,123272,123275,123284,123287,123296,123299,123302,123311,123314,123317,123332,123335,123338,123347,123352,123355,123358,123367,123370,123379,123382,123391,123394,123403,123408,123411,123419,123424,123427,123436,123439,123447,123452,123455,123464,123467,123470,123474,123477,123482,123485,123490,123504,123509,123514,123525,123530,123536,123541,123556,123561,123564,123569,123574,123579,123587,123592,123599,123604,123615,123620,123623,123627,123630,123633,123638,123641,123660,123665,123668,123677,123682,123685,123707,123710,123740,123743,123748,123751,123765,123770,123789,123792,123795,123800,123812,123817,123822,123825,123830,123833,123848,123851,123856,123861,123865,123870,123910,123913,123917,123923,123929,123934,123937,123944,123949,123956,123959,123962,123969,123983,123986,124046,124049,124063,124075,124078,124081,124084,124148,124151,124154,124157,124177,124180,124185,124192,124196,124199,124203,124208,124213,124217,124220,124223,124265,124270,124273,124295,124310,124312,124317,124329,124389,124391,124393,124447,124449,124451,124457,124462,124465,124470,124474,124477,124539,124544,124547,124549,124553,124565,124647,124649,124651,124705,124711,124713,124717,124722,124724,124729,124733,124753,124788,124792,124795,124798,124801,124808,124811,124823,124826,124841,124844,124863,124911,124914,124931,124934,124948,124953,124956,124965,124980,124992,125030,125035,125044,125049,125054,125080,125089,125093,125097,125102,125105,125109,125113,125118,125121,125126,125129,125134,125137,125142,125145,125149,125154,125157,125162,125165,125169,125174,125177,125182,125185,125190,125193,125197,125202,125205,125210,125213,125218,125221,125225,125230,125233,125238,125241,125246,125249,125254,125257,125262,125265,125270,125273,125277,125282,125285,125290,125297,125301,125306,125309,125314,125317,125321,125326,125329,125332,125335,125338,125341,125345,125348,125358,125363,125368,125390,125395,125400,125407,125411,125416,125419,125422,125427,125430,125433,125436,125439,125442,125445,125448,125451,125454,125457,125460,125463,125468,125473,125478,125483,125488,125493,125498,125501,125505,125508,125512,125517,125522,125527,125532,125536,125542,125550,125555,125558,125563,125578,125581,125586,125620,125635,125638,125693,125719,125731,125734,125743,125746,125761,125766,125769,125775,125780,125783,125788,125791,125796,125801,125808,125811,125826,125829,125864,125869,125877,125915,125918,125921,125926,125929,125934,125945,125979,125984,125987,125996,126001,126007,126010,126015,126024,126029,126032,126035,126040,126048,126051,126056,126061],[10,122794,122790],{"id":122795},"_7-其他操作",[14,122797,122799],{"id":122798},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[175,122801,122802],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[175,122804,122805,122806,122809],{},"进入工控机的硬盘目录，进入",[55,122807,122808],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[48,122811,122815],{"className":122812,"code":122813,"language":122814,"meta":53,"style":53},"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",[55,122816,122817,122825,122836,122843,122850,122862,122869,122881,122892,122903,122910,122917,122924,122936,122948,122955,122967,122979,122986,122998,123010,123022,123033,123040,123051],{"__ignoreMap":53},[58,122818,122819,122822],{"class":60,"line":61},[58,122820,122821],{"class":71},"network",[58,122823,122824],{"class":75},": \n",[58,122826,122827,122830,122832,122834],{"class":60,"line":68},[58,122828,122829],{"class":71},"  version",[58,122831,86],{"class":75},[58,122833,867],{"class":82},[58,122835,3320],{"class":75},[58,122837,122838,122841],{"class":60,"line":79},[58,122839,122840],{"class":71},"  wifis",[58,122842,122824],{"class":75},[58,122844,122845,122848],{"class":60,"line":105},[58,122846,122847],{"class":71},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[58,122849,122824],{"class":75},[58,122851,122852,122855,122857,122860],{"class":60,"line":627},[58,122853,122854],{"class":71},"      renderer",[58,122856,86],{"class":75},[58,122858,122859],{"class":386},"NetworkManager",[58,122861,3320],{"class":75},[58,122863,122864,122867],{"class":60,"line":509},[58,122865,122866],{"class":71},"      match",[58,122868,122824],{"class":75},[58,122870,122871,122874,122876,122879],{"class":60,"line":559},[58,122872,122873],{"class":71},"        name",[58,122875,86],{"class":75},[58,122877,122878],{"class":386},"\"wlan0\"",[58,122880,3320],{"class":75},[58,122882,122883,122886,122888,122890],{"class":60,"line":654},[58,122884,122885],{"class":71},"      dhcp4",[58,122887,86],{"class":75},[58,122889,2012],{"class":82},[58,122891,3320],{"class":75},[58,122893,122894,122897,122899,122901],{"class":60,"line":671},[58,122895,122896],{"class":71},"      dhcp6",[58,122898,86],{"class":75},[58,122900,2012],{"class":82},[58,122902,3320],{"class":75},[58,122904,122905,122908],{"class":60,"line":677},[58,122906,122907],{"class":71},"      access-points",[58,122909,122824],{"class":75},[58,122911,122912,122915],{"class":60,"line":2260},[58,122913,122914],{"class":386},"        \"EMIS_Vinci_Robocon_5G\"",[58,122916,122824],{"class":75},[58,122918,122919,122922],{"class":60,"line":694},[58,122920,122921],{"class":71},"          auth",[58,122923,122824],{"class":75},[58,122925,122926,122929,122931,122934],{"class":60,"line":2270},[58,122927,122928],{"class":71},"            key-management",[58,122930,86],{"class":75},[58,122932,122933],{"class":386},"\"psk\"",[58,122935,3320],{"class":75},[58,122937,122938,122941,122943,122946],{"class":60,"line":2275},[58,122939,122940],{"class":71},"            password",[58,122942,86],{"class":75},[58,122944,122945],{"class":386},"\"vinci666\"",[58,122947,3320],{"class":75},[58,122949,122950,122953],{"class":60,"line":2289},[58,122951,122952],{"class":71},"          networkmanager",[58,122954,122824],{"class":75},[58,122956,122957,122960,122962,122965],{"class":60,"line":2294},[58,122958,122959],{"class":71},"            uuid",[58,122961,86],{"class":75},[58,122963,122964],{"class":386},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[58,122966,3320],{"class":75},[58,122968,122969,122972,122974,122977],{"class":60,"line":2300},[58,122970,122971],{"class":71},"            name",[58,122973,86],{"class":75},[58,122975,122976],{"class":386},"\"EMIS_Vinci_Robocon_5G\"",[58,122978,3320],{"class":75},[58,122980,122981,122984],{"class":60,"line":2321},[58,122982,122983],{"class":71},"            passthrough",[58,122985,122824],{"class":75},[58,122987,122988,122991,122993,122996],{"class":60,"line":2326},[58,122989,122990],{"class":71},"              wifi-security.auth-alg",[58,122992,86],{"class":75},[58,122994,122995],{"class":386},"\"open\"",[58,122997,3320],{"class":75},[58,122999,123000,123003,123005,123008],{"class":60,"line":2340},[58,123001,123002],{"class":71},"              ipv6.addr-gen-mode",[58,123004,86],{"class":75},[58,123006,123007],{"class":386},"\"default\"",[58,123009,3320],{"class":75},[58,123011,123012,123015,123017,123020],{"class":60,"line":2345},[58,123013,123014],{"class":71},"              ipv6.ip6-privacy",[58,123016,86],{"class":75},[58,123018,123019],{"class":386},"\"-1\"",[58,123021,3320],{"class":75},[58,123023,123024,123027,123029,123031],{"class":60,"line":2374},[58,123025,123026],{"class":71},"              proxy._",[58,123028,86],{"class":75},[58,123030,8298],{"class":386},[58,123032,3320],{"class":75},[58,123034,123035,123038],{"class":60,"line":2379},[58,123036,123037],{"class":71},"      networkmanager",[58,123039,122824],{"class":75},[58,123041,123042,123045,123047,123049],{"class":60,"line":2396},[58,123043,123044],{"class":71},"        uuid",[58,123046,86],{"class":75},[58,123048,122964],{"class":386},[58,123050,3320],{"class":75},[58,123052,123053,123055,123057],{"class":60,"line":2401},[58,123054,122873],{"class":71},[58,123056,86],{"class":75},[58,123058,123059],{"class":386},"\"EMIS_Vinci_Robocon_5G\"\n",[175,123061,123062],{},"将其改为新wifi的名和密码：",[48,123064,123066],{"className":122812,"code":123065,"language":122814,"meta":53,"style":53},"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",[55,123067,123068,123074,123083,123089,123096,123105,123113,123119,123125],{"__ignoreMap":53},[58,123069,123070,123072],{"class":60,"line":61},[58,123071,122821],{"class":71},[58,123073,4385],{"class":75},[58,123075,123076,123078,123080],{"class":60,"line":68},[58,123077,122829],{"class":71},[58,123079,86],{"class":75},[58,123081,123082],{"class":82},"2\n",[58,123084,123085,123087],{"class":60,"line":79},[58,123086,122840],{"class":71},[58,123088,4385],{"class":75},[58,123090,123091,123094],{"class":60,"line":105},[58,123092,123093],{"class":71},"    wlan0",[58,123095,4385],{"class":75},[58,123097,123098,123100,123102],{"class":60,"line":627},[58,123099,122885],{"class":71},[58,123101,86],{"class":75},[58,123103,123104],{"class":82},"true\n",[58,123106,123107,123109,123111],{"class":60,"line":509},[58,123108,122896],{"class":71},[58,123110,86],{"class":75},[58,123112,123104],{"class":82},[58,123114,123115,123117],{"class":60,"line":559},[58,123116,122907],{"class":71},[58,123118,4385],{"class":75},[58,123120,123121,123123],{"class":60,"line":654},[58,123122,122914],{"class":386},[58,123124,4385],{"class":75},[58,123126,123127,123130,123132],{"class":60,"line":671},[58,123128,123129],{"class":71},"          password",[58,123131,86],{"class":75},[58,123133,123134],{"class":386},"\"vinci666\"\n",[175,123136,123137],{},"工控机开机即可连上网。",[14,123139,123141],{"id":123140},"_72-ssh远程开发","7.2 SSH远程开发",[114,123143,123145],{"id":123144},"_721-环境准备","7.2.1 环境准备",[175,123147,123148],{},[25,123149,123150],{},"1.硬件准备",[175,123152,123153],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[175,123155,123156],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[175,123158,123159],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[175,123161,123162],{},[25,123163,123164],{},"2.设置固定IP",[175,123166,123167],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[175,123169,123170],{},"1.进入设置界面",[175,123172,123173],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[175,123175,123176],{},[119,123177],{"alt":53,"src":123178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[175,123180,123181],{},"2.配置所连接的网络",[175,123183,123184],{},[119,123185],{"alt":53,"src":123186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[175,123188,123189],{},"3.设置固定IP",[175,123191,123192],{},"查看当前IP地址。",[175,123194,123195],{},[119,123196],{"alt":53,"src":123197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[175,123199,123200],{},"设置固定IP。",[175,123202,123203],{},[119,123204],{"alt":53,"src":123205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[175,123207,123208],{},"至此，IP配置完毕。",[114,123210,123212],{"id":123211},"_722-环境搭建","7.2.2 环境搭建",[175,123214,123215],{},[25,123216,26397],{},[175,123218,123219],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[175,123221,123222],{},[25,123223,123224],{},"实现",[175,123226,123227],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[19,123229,123230,123233,123236,123239],{},[22,123231,123232],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[22,123234,123235],{},"远程主机启动SSH服务；",[22,123237,123238],{},"本地主机登陆远程主机；",[22,123240,123241],{},"实现数据传输。",[175,123243,123244],{},"1.安装SSH客户端与服务端",[175,123246,123247],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[48,123249,123251],{"className":121445,"code":123250,"language":121447,"meta":121448,"style":53}," sudo apt install openssh-server\n",[55,123252,123253],{"__ignoreMap":53},[58,123254,123255],{"class":60,"line":61},[58,123256,123250],{},[175,123258,123259],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[48,123261,123263],{"className":121445,"code":123262,"language":121447,"meta":121448,"style":53},"sudo apt install openssh-client\n",[55,123264,123265],{"__ignoreMap":53},[58,123266,123267],{"class":60,"line":61},[58,123268,123262],{},[175,123270,123271],{},"2.远程主机启动SSH服务",[175,123273,123274],{},"远程主机启动 ssh 服务命令如下：",[48,123276,123278],{"className":121445,"code":123277,"language":121447,"meta":121448,"style":53},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[55,123279,123280],{"__ignoreMap":53},[58,123281,123282],{"class":60,"line":61},[58,123283,123277],{},[175,123285,123286],{},"启动后可使用如下命令查看服务是否正常运行：",[48,123288,123290],{"className":121445,"code":123289,"language":121447,"meta":121448,"style":53},"ps -e | grep ssh\n",[55,123291,123292],{"__ignoreMap":53},[58,123293,123294],{"class":60,"line":61},[58,123295,123289],{},[175,123297,123298],{},"如果启动成功，会包含 sshd 程序。",[175,123300,123301],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[48,123303,123305],{"className":121445,"code":123304,"language":121447,"meta":121448,"style":53},"sudo systemctl enable ssh\n",[55,123306,123307],{"__ignoreMap":53},[58,123308,123309],{"class":60,"line":61},[58,123310,123304],{},[175,123312,123313],{},"3.本地远程登录",[175,123315,123316],{},"登录远程主机可以调用如下命令:",[48,123318,123320],{"className":117925,"code":123319,"language":117927,"meta":53,"style":53},"ssh -X 用户名@ip地址\n",[55,123321,123322],{"__ignoreMap":53},[58,123323,123324,123326,123329],{"class":60,"line":61},[58,123325,122276],{"class":379},[58,123327,123328],{"class":82}," -X",[58,123330,123331],{"class":386}," 用户名@ip地址\n",[175,123333,123334],{},"然后根据提示，录入登陆密码，即可成功登录。",[175,123336,123337],{},"如果退出，可以调用exit命令：",[48,123339,123341],{"className":121445,"code":123340,"language":121447,"meta":121448,"style":53},"exit\n",[55,123342,123343],{"__ignoreMap":53},[58,123344,123345],{"class":60,"line":61},[58,123346,123340],{},[175,123348,123349],{},[25,123350,123351],{},"4.实现数据传输",[175,123353,123354],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[175,123356,123357],{},"上传文件指令格式如下：",[48,123359,123361],{"className":121445,"code":123360,"language":121447,"meta":121448,"style":53},"scp 本地文件路径 账号@ip:路径\n",[55,123362,123363],{"__ignoreMap":53},[58,123364,123365],{"class":60,"line":61},[58,123366,123360],{},[175,123368,123369],{},"上传文件夹指令格式如下：",[48,123371,123373],{"className":121445,"code":123372,"language":121447,"meta":121448,"style":53},"scp -r 本地文件夹路径 账号@ip:路径\n",[55,123374,123375],{"__ignoreMap":53},[58,123376,123377],{"class":60,"line":61},[58,123378,123372],{},[175,123380,123381],{},"下载文件指令格式如下：",[48,123383,123385],{"className":121445,"code":123384,"language":121447,"meta":121448,"style":53},"scp 账号@ip:路径 本地文件夹路径\n",[55,123386,123387],{"__ignoreMap":53},[58,123388,123389],{"class":60,"line":61},[58,123390,123384],{},[175,123392,123393],{},"下载文件夹指令格式如下：",[48,123395,123397],{"className":121445,"code":123396,"language":121447,"meta":121448,"style":53},"scp -r 账号@ip:路径 本地文件夹路径\n",[55,123398,123399],{"__ignoreMap":53},[58,123400,123401],{"class":60,"line":61},[58,123402,123396],{},[175,123404,123405],{},[25,123406,123407],{},"优化",[175,123409,123410],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[19,123412,123413,123416],{},[22,123414,123415],{},"本地生成密钥对；",[22,123417,123418],{},"将公钥上传至远程主机。",[175,123420,123421],{},[25,123422,123423],{},"1.生成密钥对",[175,123425,123426],{},"本地客户端生成公私钥：（一路回车默认即可）",[48,123428,123430],{"className":121445,"code":123429,"language":121447,"meta":121448,"style":53},"ssh-keygen\n",[55,123431,123432],{"__ignoreMap":53},[58,123433,123434],{"class":60,"line":61},[58,123435,123429],{},[175,123437,123438],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[19,123440,123441,123444],{},[22,123442,123443],{},"id_rsa （私钥）；",[22,123445,123446],{},"id_rsa.pub (公钥)。",[175,123448,123449],{},[25,123450,123451],{},"2.公钥上传",[175,123453,123454],{},"上传指令如下：",[48,123456,123458],{"className":121445,"code":123457,"language":121447,"meta":121448,"style":53},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[55,123459,123460],{"__ignoreMap":53},[58,123461,123462],{"class":60,"line":61},[58,123463,123457],{},[175,123465,123466],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[175,123468,123469],{},"以后再远程登录就无需录入密码了。",[114,123471,123473],{"id":123472},"_723-使用vscode优化","7.2.3 使用VScode优化",[175,123475,123476],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[175,123478,123479],{},[25,123480,123481],{},"1.准备工作",[175,123483,123484],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[175,123486,123487],{},[25,123488,123489],{},"2.为VScode安装远程开发插件",[175,123491,123492,123493,123496,123497,123500,123501,29029],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[55,123494,123495],{},"扩展：商店","的搜索栏输入",[55,123498,123499],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[55,123502,123503],{},"安装",[175,123505,123506],{},[119,123507],{"alt":53,"src":123508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[175,123510,123511],{},[25,123512,123513],{},"3.配置远程连接",[175,123515,123516,123517,123520,123521,123524],{},"步骤1：使用快捷键",[55,123518,123519],{},"ctrl + shift + p","打开命令输入窗口，并输入",[55,123522,123523],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[175,123526,123527],{},[119,123528],{"alt":53,"src":123529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[175,123531,123532,123533,29029],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[55,123534,123535],{},"Add New SSH Host",[175,123537,123538],{},[119,123539],{"alt":53,"src":123540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[175,123542,123543,123544,123547,123548,123551,123552,123555],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[55,123545,123546],{},"ssh +X ubuntu@192.168.43.164","，其中，",[55,123549,123550],{},"ubuntu","需要替换为你的登录用户名，",[55,123553,123554],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[175,123557,123558],{},[119,123559],{"alt":53,"src":123560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[175,123562,123563],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[175,123565,123566],{},[119,123567],{"alt":53,"src":123568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[175,123570,123571],{},[119,123572],{"alt":53,"src":123573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[175,123575,123576],{},[25,123577,123578],{},"4.使用",[175,123580,123581,123582,123520,123584,123586],{},"步骤1：继续使用快捷键",[55,123583,123519],{},[55,123585,123523],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[175,123588,123589],{},[119,123590],{"alt":53,"src":123591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[175,123593,123594,123595,123598],{},"或者，也可以点击侧边栏的",[55,123596,123597],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[175,123600,123601],{},[119,123602],{"alt":53,"src":123603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[175,123605,123606,123607,123610,123611,123614],{},"步骤2：选择菜单栏的",[55,123608,123609],{},"文件","下的",[55,123612,123613],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[175,123616,123617],{},[119,123618],{"alt":53,"src":123619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[175,123621,123622],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123624,123626],{"id":123625},"_73-远程桌面","7.3 远程桌面",[175,123628,123629],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[175,123631,123632],{},"我们选择使用VNC来看。",[19,123634,123635],{},[22,123636,123637],{},"安装VNC服务器：",[175,123639,123640],{},"这里以TigerVNC为例进行安装：",[48,123642,123644],{"className":117925,"code":123643,"language":117927,"meta":53,"style":53},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[55,123645,123646],{"__ignoreMap":53},[58,123647,123648,123650,123652,123654,123657],{"class":60,"line":61},[58,123649,25220],{"class":379},[58,123651,117946],{"class":386},[58,123653,24477],{"class":386},[58,123655,123656],{"class":386}," tigervnc-standalone-server",[58,123658,123659],{"class":386}," tigervnc-common\n",[19,123661,123662],{"start":68},[22,123663,123664],{},"设置VNC密码：",[175,123666,123667],{},"为VNC用户设置密码，运行以下命令：",[48,123669,123671],{"className":117925,"code":123670,"language":117927,"meta":53,"style":53},"vncpasswd\n",[55,123672,123673],{"__ignoreMap":53},[58,123674,123675],{"class":60,"line":61},[58,123676,123670],{"class":379},[19,123678,123679],{"start":79},[22,123680,123681],{},"配置VNC启动脚本:",[175,123683,123684],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[48,123686,123688],{"className":117925,"code":123687,"language":117927,"meta":53,"style":53},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[55,123689,123690,123699],{"__ignoreMap":53},[58,123691,123692,123694,123696],{"class":60,"line":61},[58,123693,101895],{"class":379},[58,123695,29860],{"class":82},[58,123697,123698],{"class":386}," ~\u002F.vnc\n",[58,123700,123701,123704],{"class":60,"line":68},[58,123702,123703],{"class":379},"nano",[58,123705,123706],{"class":386}," ~\u002F.vnc\u002Fxstartup\n",[175,123708,123709],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[48,123711,123713],{"className":117925,"code":123712,"language":117927,"meta":53,"style":53},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[55,123714,123715,123720,123728,123735],{"__ignoreMap":53},[58,123716,123717],{"class":60,"line":61},[58,123718,123719],{"class":64},"#!\u002Fbin\u002Fsh\n",[58,123721,123722,123725],{"class":60,"line":68},[58,123723,123724],{"class":82},"unset",[58,123726,123727],{"class":386}," SESSION_MANAGER\n",[58,123729,123730,123732],{"class":60,"line":79},[58,123731,123724],{"class":82},[58,123733,123734],{"class":386}," DBUS_SESSION_BUS_ADDRESS\n",[58,123736,123737],{"class":60,"line":105},[58,123738,123739],{"class":379},"gnome-session\n",[175,123741,123742],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[19,123744,123745],{"start":105},[22,123746,123747],{},"给予执行权限：",[175,123749,123750],{},"为xstartup文件设置执行权限：",[48,123752,123754],{"className":117925,"code":123753,"language":117927,"meta":53,"style":53},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[55,123755,123756],{"__ignoreMap":53},[58,123757,123758,123760,123763],{"class":60,"line":61},[58,123759,25255],{"class":379},[58,123761,123762],{"class":386}," +x",[58,123764,123706],{"class":386},[19,123766,123767],{"start":627},[22,123768,123769],{},"启动VNC服务器：",[48,123771,123773],{"className":117925,"code":123772,"language":117927,"meta":53,"style":53},"vncserver -geometry 1920x1080 -localhost=0\n",[55,123774,123775],{"__ignoreMap":53},[58,123776,123777,123780,123783,123786],{"class":60,"line":61},[58,123778,123779],{"class":379},"vncserver",[58,123781,123782],{"class":82}," -geometry",[58,123784,123785],{"class":386}," 1920x1080",[58,123787,123788],{"class":82}," -localhost=0\n",[175,123790,123791],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[175,123793,123794],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[19,123796,123797],{"start":509},[22,123798,123799],{},"查看已开启的VNC服务器：",[48,123801,123803],{"className":117925,"code":123802,"language":117927,"meta":53,"style":53},"vncserver -list\n",[55,123804,123805],{"__ignoreMap":53},[58,123806,123807,123809],{"class":60,"line":61},[58,123808,123779],{"class":379},[58,123810,123811],{"class":82}," -list\n",[175,123813,123814],{},[119,123815],{"alt":53,"src":123816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[19,123818,123819],{"start":559},[22,123820,123821],{},"连接到VNC服务器：",[175,123823,123824],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[19,123826,123827],{"start":654},[22,123828,123829],{},"停止VNC服务器：",[175,123831,123832],{},"如果需要停止VNC服务器，可以使用以下命令：",[48,123834,123836],{"className":117925,"code":123835,"language":117927,"meta":53,"style":53},"vncserver -kill :1\n",[55,123837,123838],{"__ignoreMap":53},[58,123839,123840,123842,123845],{"class":60,"line":61},[58,123841,123779],{"class":379},[58,123843,123844],{"class":82}," -kill",[58,123846,123847],{"class":386}," :1\n",[175,123849,123850],{},"将:1替换为你实际使用的显示编号。",[175,123852,123853],{},[119,123854],{"alt":53,"src":123855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[175,123857,123858],{},[119,123859],{"alt":53,"src":123860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,123862,123864],{"id":123863},"_74-usb端口设置","7.4 USB端口设置",[175,123866,123867],{},[25,123868,123869],{},"首先先配置好权限",[48,123871,123873],{"className":117925,"code":123872,"language":117927,"meta":53,"style":53},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[55,123874,123875,123880,123893,123900,123905],{"__ignoreMap":53},[58,123876,123877],{"class":60,"line":61},[58,123878,123879],{"class":64},"# 将用户权限提高\n",[58,123881,123882,123884,123886,123888,123891],{"class":60,"line":68},[58,123883,25220],{"class":379},[58,123885,27218],{"class":386},[58,123887,27221],{"class":82},[58,123889,123890],{"class":386}," dialout",[58,123892,27226],{"class":75},[58,123894,123895,123897],{"class":60,"line":79},[58,123896,27245],{"class":379},[58,123898,123899],{"class":386}," dialout\n",[58,123901,123902],{"class":60,"line":105},[58,123903,123904],{"class":64},"# 查看下面命令是否输出dialout（若输出才正常）\n",[58,123906,123907],{"class":60,"line":627},[58,123908,123909],{"class":379},"groups\n",[175,123911,123912],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[114,123914,123916],{"id":123915},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[175,123918,123919,123922],{},[25,123920,123921],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[175,123924,123925,123928],{},[25,123926,123927],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[175,123930,123931],{},[25,123932,123933],{},"流程如下：",[175,123935,123936],{},"（1）.查找设备idVendor和idProduct",[175,123938,123939,123940,123943],{},"接入两个USB设备，在终端调用指令",[55,123941,123942],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[175,123945,123946],{},[119,123947],{"alt":53,"src":123948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[175,123950,123951,123952,123955],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[55,123953,123954],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[175,123957,123958],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[175,123960,123961],{},"（2）.编写映射规则",[175,123963,123964,123965,123968],{},"在",[55,123966,123967],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[48,123970,123972],{"className":117925,"code":123971,"language":117927,"meta":53,"style":53},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[55,123973,123974],{"__ignoreMap":53},[58,123975,123976,123978,123980],{"class":60,"line":61},[58,123977,25220],{"class":379},[58,123979,119212],{"class":386},[58,123981,123982],{"class":386}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[175,123984,123985],{},"输入如下内容：",[48,123987,123989],{"className":117925,"code":123988,"language":117927,"meta":53,"style":53},"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",[55,123990,123991,124021],{"__ignoreMap":53},[58,123992,123993,123996,123998,124001,124004,124007,124010,124012,124015,124018],{"class":60,"line":61},[58,123994,123995],{"class":75},"KERNEL",[58,123997,383],{"class":92},[58,123999,124000],{"class":386},"=\"ttyUSB*\",",[58,124002,124003],{"class":379}," ATTRS",[58,124005,124006],{"class":386},"{idVendor}==",[58,124008,124009],{"class":379},"\"10c4\"",[58,124011,1164],{"class":379},[58,124013,124014],{"class":386}," ATTRS{idProduct}==\"ea60\",",[58,124016,124017],{"class":386}," MODE:=\"0777\",",[58,124019,124020],{"class":386}," SYMLINK+=\"mylidar\"\n",[58,124022,124023,124025,124027,124029,124031,124033,124036,124038,124041,124043],{"class":60,"line":68},[58,124024,123995],{"class":75},[58,124026,383],{"class":92},[58,124028,124000],{"class":386},[58,124030,124003],{"class":379},[58,124032,124006],{"class":386},[58,124034,124035],{"class":379},"\"1a86\"",[58,124037,1164],{"class":379},[58,124039,124040],{"class":386}," ATTRS{idProduct}==\"7523\",",[58,124042,124017],{"class":386},[58,124044,124045],{"class":386}," SYMLINK+=\"mycar\"\n",[175,124047,124048],{},"代码解释：",[124,124050,124051,124054,124057,124060],{},[22,124052,124053],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[22,124055,124056],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[22,124058,124059],{},"SYMLINK是符号连接，即绑定的别名；",[22,124061,124062],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[175,124064,124065,124066,124069,124072],{},"***小提示：***",[24196,124067,124068],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[55,124070,124071],{},"\u002Fetc\u002Fudev\u002Frule.d",[24196,124073,124074],{},"目录即可。",[175,124076,124077],{},"表格 还在加载中，请等待加载完成后再尝试复制",[175,124079,124080],{},"（3）.使规则生效",[175,124082,124083],{},"在终端下输入如下指令：",[48,124085,124087],{"className":117925,"code":124086,"language":117927,"meta":53,"style":53},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[55,124088,124089,124094,124106,124117,124121,124126,124139],{"__ignoreMap":53},[58,124090,124091],{"class":60,"line":61},[58,124092,124093],{"class":64},"# Ubuntu用下方命令\n",[58,124095,124096,124098,124100,124103],{"class":60,"line":68},[58,124097,25220],{"class":379},[58,124099,120677],{"class":386},[58,124101,124102],{"class":386}," udev",[58,124104,124105],{"class":386}," reload\n",[58,124107,124108,124110,124112,124114],{"class":60,"line":79},[58,124109,25220],{"class":379},[58,124111,120677],{"class":386},[58,124113,124102],{"class":386},[58,124115,124116],{"class":386}," restart\n",[58,124118,124119],{"class":60,"line":105},[58,124120,3046],{"emptyLinePlaceholder":720},[58,124122,124123],{"class":60,"line":627},[58,124124,124125],{"class":64},"#Fedora用下方命令\n",[58,124127,124128,124130,124133,124136],{"class":60,"line":509},[58,124129,25220],{"class":379},[58,124131,124132],{"class":386}," udevadm",[58,124134,124135],{"class":386}," control",[58,124137,124138],{"class":82}," --reload\n",[58,124140,124141,124143,124145],{"class":60,"line":559},[58,124142,25220],{"class":379},[58,124144,124132],{"class":386},[58,124146,124147],{"class":386}," trigger\n",[175,124149,124150],{},"再重新插拔设备即可。",[175,124152,124153],{},"（4）.测试",[175,124155,124156],{},"终端下输入如下指令",[48,124158,124160],{"className":117925,"code":124159,"language":117927,"meta":53,"style":53},"ll \u002Fdev | grep ttyUSB\n",[55,124161,124162],{"__ignoreMap":53},[58,124163,124164,124167,124170,124172,124174],{"class":60,"line":61},[58,124165,124166],{"class":379},"ll",[58,124168,124169],{"class":386}," \u002Fdev",[58,124171,25753],{"class":92},[58,124173,30880],{"class":379},[58,124175,124176],{"class":386}," ttyUSB\n",[175,124178,124179],{},"运行结果如下：",[175,124181,124182],{},[119,124183],{"alt":53,"src":124184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[175,124186,124187,124188,124191],{},"也可以多次插拔USB设备，会发现设备端口",[55,124189,124190],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[175,124193,124194],{},[25,124195,118593],{},[175,124197,124198],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[114,124200,124202],{"id":124201},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[175,124204,124205,124207],{},[25,124206,123921],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[175,124209,124210,124212],{},[25,124211,123927],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[175,124214,124215],{},[25,124216,123933],{},[175,124218,124219],{},"（1）.查看所连接的主机USB接口的KERNELS",[175,124221,124222],{},"调用如下指令查看第一台雷达的USB信息：",[48,124224,124226],{"className":117925,"code":124225,"language":117927,"meta":53,"style":53},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[55,124227,124228,124248],{"__ignoreMap":53},[58,124229,124230,124233,124235,124238,124241,124243,124245],{"class":60,"line":61},[58,124231,124232],{"class":379},"udevadm",[58,124234,70453],{"class":386},[58,124236,124237],{"class":82}," --attribute-walk",[58,124239,124240],{"class":82}," --name=\u002Fdev\u002FttyUSB0",[58,124242,25753],{"class":92},[58,124244,30880],{"class":379},[58,124246,124247],{"class":386}," KERNELS\n",[58,124249,124250,124252,124254,124256,124259,124261,124263],{"class":60,"line":68},[58,124251,124232],{"class":379},[58,124253,70453],{"class":386},[58,124255,124237],{"class":82},[58,124257,124258],{"class":82}," --name=\u002Fdev\u002FttyACM0",[58,124260,25753],{"class":92},[58,124262,30880],{"class":379},[58,124264,124247],{"class":386},[175,124266,124267],{},[119,124268],{"alt":53,"src":124269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[175,124271,124272],{},"调用如下指令查看第二台雷达的USB信息：",[48,124274,124276],{"className":117925,"code":124275,"language":117927,"meta":53,"style":53},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[55,124277,124278],{"__ignoreMap":53},[58,124279,124280,124282,124284,124286,124289,124291,124293],{"class":60,"line":61},[58,124281,124232],{"class":379},[58,124283,70453],{"class":386},[58,124285,124237],{"class":82},[58,124287,124288],{"class":82}," --name=\u002Fdev\u002FttyUSB1",[58,124290,25753],{"class":92},[58,124292,30880],{"class":379},[58,124294,124247],{"class":386},[175,124296,124297,124298,124301,124302,124305,124306,124309],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[55,124299,124300],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[55,124303,124304],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[25,124307,124308],{},"唯一性标识","”。",[175,124311,123961],{},[175,124313,123964,124314,124316],{},[55,124315,123967],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[48,124318,124319],{"className":117925,"code":123971,"language":117927,"meta":53,"style":53},[55,124320,124321],{"__ignoreMap":53},[58,124322,124323,124325,124327],{"class":60,"line":61},[58,124324,25220],{"class":379},[58,124326,119212],{"class":386},[58,124328,123982],{"class":386},[48,124330,124332],{"className":117925,"code":124331,"language":117927,"meta":53,"style":53},"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",[55,124333,124334,124363],{"__ignoreMap":53},[58,124335,124336,124338,124340,124342,124345,124347,124350,124353,124355,124358,124360],{"class":60,"line":61},[58,124337,123995],{"class":75},[58,124339,383],{"class":92},[58,124341,124000],{"class":386},[58,124343,124344],{"class":75}," KERNELS",[58,124346,383],{"class":92},[58,124348,124349],{"class":386},"=\"1-1.3:1.0\",",[58,124351,124352],{"class":379}," MODE:",[58,124354,383],{"class":386},[58,124356,124357],{"class":379},"\"0777\"",[58,124359,1164],{"class":379},[58,124361,124362],{"class":386}," SYMLINK+=\"rplidar_front\"\n",[58,124364,124365,124367,124369,124371,124373,124375,124378,124380,124382,124384,124386],{"class":60,"line":68},[58,124366,123995],{"class":75},[58,124368,383],{"class":92},[58,124370,124000],{"class":386},[58,124372,124344],{"class":75},[58,124374,383],{"class":92},[58,124376,124377],{"class":386},"=\"1-1.4:1.0\",",[58,124379,124352],{"class":379},[58,124381,383],{"class":386},[58,124383,124357],{"class":379},[58,124385,1164],{"class":379},[58,124387,124388],{"class":386}," SYMLINK+=\"rplidar_back\"\n",[175,124390,124080],{},[175,124392,124083],{},[48,124394,124395],{"className":117925,"code":124086,"language":117927,"meta":53,"style":53},[55,124396,124397,124401,124411,124421,124425,124429,124439],{"__ignoreMap":53},[58,124398,124399],{"class":60,"line":61},[58,124400,124093],{"class":64},[58,124402,124403,124405,124407,124409],{"class":60,"line":68},[58,124404,25220],{"class":379},[58,124406,120677],{"class":386},[58,124408,124102],{"class":386},[58,124410,124105],{"class":386},[58,124412,124413,124415,124417,124419],{"class":60,"line":79},[58,124414,25220],{"class":379},[58,124416,120677],{"class":386},[58,124418,124102],{"class":386},[58,124420,124116],{"class":386},[58,124422,124423],{"class":60,"line":105},[58,124424,3046],{"emptyLinePlaceholder":720},[58,124426,124427],{"class":60,"line":627},[58,124428,124125],{"class":64},[58,124430,124431,124433,124435,124437],{"class":60,"line":509},[58,124432,25220],{"class":379},[58,124434,124132],{"class":386},[58,124436,124135],{"class":386},[58,124438,124138],{"class":82},[58,124440,124441,124443,124445],{"class":60,"line":559},[58,124442,25220],{"class":379},[58,124444,124132],{"class":386},[58,124446,124147],{"class":386},[175,124448,124150],{},[175,124450,124153],{},[175,124452,124156,124453,124456],{},[55,124454,124455],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[175,124458,124459],{},[119,124460],{"alt":53,"src":124461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[175,124463,124464],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[175,124466,124467,124469],{},[25,124468,118593],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[114,124471,124473],{"id":124472},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[175,124475,124476],{},"（1）.查看所连接的主机USB接口的信息",[48,124478,124480],{"className":117925,"code":124479,"language":117927,"meta":53,"style":53},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[55,124481,124482,124512],{"__ignoreMap":53},[58,124483,124484,124486,124488,124491,124493,124495,124497,124499,124502,124505,124507,124510],{"class":60,"line":61},[58,124485,124232],{"class":379},[58,124487,70453],{"class":386},[58,124489,124490],{"class":82}," -a",[58,124492,29860],{"class":82},[58,124494,29066],{"class":75},[58,124496,124232],{"class":379},[58,124498,70453],{"class":386},[58,124500,124501],{"class":82}," -q",[58,124503,124504],{"class":386}," path",[58,124506,25759],{"class":82},[58,124508,124509],{"class":386}," \u002Fdev\u002FttyACM0",[58,124511,799],{"class":75},[58,124513,124514,124516,124518,124520,124522,124524,124526,124528,124530,124532,124534,124537],{"class":60,"line":68},[58,124515,124232],{"class":379},[58,124517,70453],{"class":386},[58,124519,124490],{"class":82},[58,124521,29860],{"class":82},[58,124523,29066],{"class":75},[58,124525,124232],{"class":379},[58,124527,70453],{"class":386},[58,124529,124501],{"class":82},[58,124531,124504],{"class":386},[58,124533,25759],{"class":82},[58,124535,124536],{"class":386}," \u002Fdev\u002FttyUSB0",[58,124538,799],{"class":75},[175,124540,124541],{},[119,124542],{"alt":53,"src":124543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[175,124545,124546],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[175,124548,123961],{},[175,124550,123964,124551,124316],{},[55,124552,123967],{},[48,124554,124555],{"className":117925,"code":123971,"language":117927,"meta":53,"style":53},[55,124556,124557],{"__ignoreMap":53},[58,124558,124559,124561,124563],{"class":60,"line":61},[58,124560,25220],{"class":379},[58,124562,119212],{"class":386},[58,124564,123982],{"class":386},[48,124566,124568],{"className":117925,"code":124567,"language":117927,"meta":53,"style":53},"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",[55,124569,124570,124598,124624],{"__ignoreMap":53},[58,124571,124572,124574,124576,124579,124581,124583,124585,124587,124590,124593,124595],{"class":60,"line":61},[58,124573,123995],{"class":75},[58,124575,383],{"class":92},[58,124577,124578],{"class":386},"=\"ttyACM*\",",[58,124580,124003],{"class":379},[58,124582,124006],{"class":386},[58,124584,124035],{"class":379},[58,124586,1164],{"class":379},[58,124588,124589],{"class":386}," ATTRS{idProduct}==\"55d4\",",[58,124591,124592],{"class":386}," ATTRS{serial}==\"0001\",",[58,124594,124017],{"class":386},[58,124596,124597],{"class":386}," SYMLINK+=\"ttyACM_MCU\"\n",[58,124599,124600,124602,124604,124606,124608,124610,124612,124614,124616,124619,124621],{"class":60,"line":68},[58,124601,123995],{"class":75},[58,124603,383],{"class":92},[58,124605,124578],{"class":386},[58,124607,124003],{"class":379},[58,124609,124006],{"class":386},[58,124611,124035],{"class":379},[58,124613,1164],{"class":379},[58,124615,124589],{"class":386},[58,124617,124618],{"class":386}," ATTRS{serial}==\"0002\",",[58,124620,124017],{"class":386},[58,124622,124623],{"class":386}," SYMLINK+=\"ttyACM_Lidar\"\n",[58,124625,124626,124628,124630,124632,124634,124636,124638,124640,124642,124644],{"class":60,"line":79},[58,124627,123995],{"class":75},[58,124629,383],{"class":92},[58,124631,124000],{"class":386},[58,124633,124003],{"class":379},[58,124635,124006],{"class":386},[58,124637,124035],{"class":379},[58,124639,1164],{"class":379},[58,124641,124040],{"class":386},[58,124643,124017],{"class":386},[58,124645,124646],{"class":386}," SYMLINK+=\"ttyUSB_IMU\"\n",[175,124648,124080],{},[175,124650,124083],{},[48,124652,124653],{"className":117925,"code":124086,"language":117927,"meta":53,"style":53},[55,124654,124655,124659,124669,124679,124683,124687,124697],{"__ignoreMap":53},[58,124656,124657],{"class":60,"line":61},[58,124658,124093],{"class":64},[58,124660,124661,124663,124665,124667],{"class":60,"line":68},[58,124662,25220],{"class":379},[58,124664,120677],{"class":386},[58,124666,124102],{"class":386},[58,124668,124105],{"class":386},[58,124670,124671,124673,124675,124677],{"class":60,"line":79},[58,124672,25220],{"class":379},[58,124674,120677],{"class":386},[58,124676,124102],{"class":386},[58,124678,124116],{"class":386},[58,124680,124681],{"class":60,"line":105},[58,124682,3046],{"emptyLinePlaceholder":720},[58,124684,124685],{"class":60,"line":627},[58,124686,124125],{"class":64},[58,124688,124689,124691,124693,124695],{"class":60,"line":509},[58,124690,25220],{"class":379},[58,124692,124132],{"class":386},[58,124694,124135],{"class":386},[58,124696,124138],{"class":82},[58,124698,124699,124701,124703],{"class":60,"line":559},[58,124700,25220],{"class":379},[58,124702,124132],{"class":386},[58,124704,124147],{"class":386},[175,124706,124707,124708],{},"再重新插拔设备即可，或者 ",[25,124709,124710],{},"直接重启系统。",[175,124712,124153],{},[175,124714,124156,124715,124456],{},[55,124716,124455],{},[175,124718,124719],{},[119,124720],{"alt":53,"src":124721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[175,124723,124464],{},[175,124725,124726,124728],{},[25,124727,118593],{}," 一些设备可能没有串口号等。",[114,124730,124732],{"id":124731},"_744-其他注意事项","7.4.4 其他注意事项",[175,124734,124735,124736,124738,124739,124742,124743,19053,124746,124749,124750,124752],{},"并非所有的USB设备端口号都是",[55,124737,124190],{},"的格式，比如Arduino的端口号可能是",[55,124740,124741],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[55,124744,124745],{},"videon",[55,124747,124748],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[55,124751,124745],{},"端口，绑定时需要关联的也是该接口。",[175,124754,124755,124756,124759,124760,124763,124764,124766,124767,124770,124771,124774,124775,124778,124779,124778,124782,124778,124785,29029],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[55,124757,124758],{},"KERNEL==\"ttyUSB*\"","修改为",[55,124761,124762],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[55,124765,124758],{},"修改为类似于",[55,124768,124769],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[55,124772,124773],{},"video[0,2,4,6]","表示可以绑定的端口为",[55,124776,124777],{},"video0","或",[55,124780,124781],{},"video2",[55,124783,124784],{},"video4",[55,124786,124787],{},"video6",[14,124789,124791],{"id":124790},"_75-挂载内网网页","7.5 挂载内网网页",[175,124793,124794],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[175,124796,124797],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[175,124799,124800],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[175,124802,124803,124804],{},"Termux 下载地址（F-Droid）：",[376,124805,124806],{"href":124806,"rel":124807},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24508],[175,124809,124810],{},"首先打开app后，先更新软件缓存：",[48,124812,124814],{"className":117925,"code":124813,"language":117927,"meta":53,"style":53},"pkg update\n",[55,124815,124816],{"__ignoreMap":53},[58,124817,124818,124821],{"class":60,"line":61},[58,124819,124820],{"class":379},"pkg",[58,124822,26886],{"class":386},[175,124824,124825],{},"然后换源",[48,124827,124829],{"className":117925,"code":124828,"language":117927,"meta":53,"style":53},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[55,124830,124831],{"__ignoreMap":53},[58,124832,124833,124835,124838],{"class":60,"line":61},[58,124834,123703],{"class":379},[58,124836,124837],{"class":75}," $PREFIX",[58,124839,124840],{"class":386},"\u002Fetc\u002Fapt\u002Fsources.list\n",[175,124842,124843],{},"将该文件内容替换为下面：",[48,124845,124847],{"className":117925,"code":124846,"language":117927,"meta":53,"style":53},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[55,124848,124849],{"__ignoreMap":53},[58,124850,124851,124854,124857,124860],{"class":60,"line":61},[58,124852,124853],{"class":379},"deb",[58,124855,124856],{"class":386}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[58,124858,124859],{"class":386}," stable",[58,124861,124862],{"class":386}," main\n",[124,124864,124865,124892],{},[22,124866,124867,124868,124870,124871],{},"如果你使用的是",[55,124869,123703],{},"编辑器：",[124,124872,124873,124880,124886],{},[22,124874,124875,124876,124879],{},"按 ",[55,124877,124878],{},"Ctrl+O"," 保存文件。",[22,124881,124875,124882,124885],{},[55,124883,124884],{},"Enter"," 确认文件名。",[22,124887,124875,124888,124891],{},[55,124889,124890],{},"Ctrl+X"," 退出编辑器。",[22,124893,124867,124894,124870,124897],{},[55,124895,124896],{},"vim",[124,124898,124899,124905],{},[22,124900,124875,124901,124904],{},[55,124902,124903],{},"Esc"," 退出编辑模式。",[22,124906,124907,124908,124910],{},"输入 ",[55,124909,119850],{}," 保存并退出。",[175,124912,124913],{},"接下来重新更新软件源：",[48,124915,124917],{"className":117925,"code":124916,"language":117927,"meta":53,"style":53},"pkg update && pkg upgrade\n",[55,124918,124919],{"__ignoreMap":53},[58,124920,124921,124923,124925,124927,124929],{"class":60,"line":61},[58,124922,124820],{"class":379},[58,124924,117976],{"class":386},[58,124926,26834],{"class":75},[58,124928,124820],{"class":379},[58,124930,117962],{"class":386},[175,124932,124933],{},"安装python：",[48,124935,124937],{"className":117925,"code":124936,"language":117927,"meta":53,"style":53},"pkg install python\n",[55,124938,124939],{"__ignoreMap":53},[58,124940,124941,124943,124945],{"class":60,"line":61},[58,124942,124820],{"class":379},[58,124944,24477],{"class":386},[58,124946,124947],{"class":386}," python\n",[175,124949,124950,27117],{},[25,124951,124952],{},"通过Termux访问设备存储",[175,124954,124955],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[48,124957,124959],{"className":117925,"code":124958,"language":117927,"meta":53,"style":53},"termux-setup-storage\n",[55,124960,124961],{"__ignoreMap":53},[58,124962,124963],{"class":60,"line":61},[58,124964,124958],{"class":379},[19,124966,124967],{},[22,124968,124969,27117,124972],{},[25,124970,124971],{},"进入HTML文件所在的目录",[19,124973,124974],{},[22,124975,124976,124977,124979],{},"使用",[55,124978,101905],{},"命令进入HTML文件所在的目录：",[48,124981,124983],{"className":117925,"code":124982,"language":117927,"meta":53,"style":53},"cd ~\u002Fyour_html_folder\n",[55,124984,124985],{"__ignoreMap":53},[58,124986,124987,124989],{"class":60,"line":61},[58,124988,101905],{"class":82},[58,124990,124991],{"class":386}," ~\u002Fyour_html_folder\n",[19,124993,124994],{"start":68},[22,124995,124996,27117,124999,125004,125021],{},[25,124997,124998],{},"启动Python HTTP服务器",[19,125000,125001],{},[22,125002,125003],{},"运行以下命令启动一个简单的HTTP服务器：",[48,125005,125007],{"className":117925,"code":125006,"language":117927,"meta":53,"style":53},"python -m http.server 8000\n",[55,125008,125009],{"__ignoreMap":53},[58,125010,125011,125013,125015,125018],{"class":60,"line":61},[58,125012,31024],{"class":379},[58,125014,101511],{"class":82},[58,125016,125017],{"class":386}," http.server",[58,125019,125020],{"class":82}," 8000\n",[19,125022,125023],{"start":79},[22,125024,125025,125026,125029],{},"这会在端口",[55,125027,125028],{},"8000","上启动一个Web服务器。",[124,125031,125032],{},[22,125033,125034],{},"启动服务器后，Termux会显示日志信息，例如：",[48,125036,125038],{"className":121445,"code":125037,"language":121447,"meta":121448,"style":53},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[55,125039,125040],{"__ignoreMap":53},[58,125041,125042],{"class":60,"line":61},[58,125043,125037],{},[124,125045,125046],{},[22,125047,125048],{},"这表示服务器已成功启动。",[175,125050,125051],{},[25,125052,125053],{},"在浏览器中访问HTML文件",[19,125055,125056],{},[22,125057,125058,27117,125061,125066],{},[25,125059,125060],{},"在同一设备上访问",[19,125062,125063],{},[22,125064,125065],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[48,125067,125070],{"className":125068,"code":125069,"language":72295,"meta":53,"style":53},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[55,125071,125072],{"__ignoreMap":53},[58,125073,125074,125077],{"class":60,"line":61},[58,125075,125076],{"class":75},"http:",[58,125078,125079],{"class":64},"\u002F\u002Flocalhost:8000\n",[124,125081,125082],{},[22,125083,125084,125085,125088],{},"如果HTML文件中有",[55,125086,125087],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,125090,125092],{"id":125091},"_76-linux重点知识","7.6 Linux重点知识",[114,125094,125096],{"id":125095},"_761-关于点的说明","7.6.1 关于点的说明",[175,125098,125099],{},[119,125100],{"alt":53,"src":125101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[175,125103,125104],{},"一点本目录，两点上目录",[114,125106,125108],{"id":125107},"_762-目录","7.6.2 目录",[22641,125110,125112],{"id":125111},"_7621-系统启动必须","7.6.2.1 系统启动必须",[175,125114,125115],{},[25,125116,125117],{},"\u002Fboot:",[175,125119,125120],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[175,125122,125123],{},[25,125124,125125],{},"\u002Fetc:",[175,125127,125128],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[175,125130,125131],{},[25,125132,125133],{},"\u002Flib：",[175,125135,125136],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[175,125138,125139],{},[25,125140,125141],{},"\u002Fsys:",[175,125143,125144],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22641,125146,125148],{"id":125147},"_7622-指令集合","7.6.2.2 指令集合",[175,125150,125151],{},[25,125152,125153],{},"\u002Fbin:",[175,125155,125156],{},"为二进制文件的缩写，存放最经常使用的命令",[175,125158,125159],{},[25,125160,125161],{},"\u002Fsbin:",[175,125163,125164],{},"只有系统管理员才能使用的程序和指令",[22641,125166,125168],{"id":125167},"_7623-外部文件管理","7.6.2.3 外部文件管理",[175,125170,125171],{},[25,125172,125173],{},"\u002Fdev:",[175,125175,125176],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[175,125178,125179],{},[25,125180,125181],{},"\u002Fmedia:",[175,125183,125184],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[175,125186,125187],{},[25,125188,125189],{},"\u002Fmnt:",[175,125191,125192],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22641,125194,125196],{"id":125195},"_7624-临时文件","7.6.2.4 临时文件",[175,125198,125199],{},[25,125200,125201],{},"\u002Frun:",[175,125203,125204],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[175,125206,125207],{},[25,125208,125209],{},"\u002Flost+found:",[175,125211,125212],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[175,125214,125215],{},[25,125216,125217],{},"\u002Ftmp:",[175,125219,125220],{},"这个目录是用来存放一些临时文件的",[22641,125222,125224],{"id":125223},"_7625-账户","7.6.2.5 账户",[175,125226,125227],{},[25,125228,125229],{},"\u002Froot：",[175,125231,125232],{},"系统管理员的用户主目录",[175,125234,125235,27117],{},[25,125236,125237],{},"\u002Fhome",[175,125239,125240],{},"用户的主目录，以用户的账号命名的",[175,125242,125243,27117],{},[25,125244,125245],{},"\u002Fusr",[175,125247,125248],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[175,125250,125251],{},[25,125252,125253],{},"\u002Fusr\u002Fbin：",[175,125255,125256],{},"系统用户使用的应用程序与指令",[175,125258,125259],{},[25,125260,125261],{},"\u002Fusr\u002Fsbin：",[175,125263,125264],{},"超级用户使用的比较高级的管理程序和系统守护程序",[175,125266,125267],{},[25,125268,125269],{},"\u002Fusr\u002Fsrc：",[175,125271,125272],{},"内核源代码默认的放置目录",[22641,125274,125276],{"id":125275},"_7626-运行过程要用","7.6.2.6 运行过程要用",[175,125278,125279],{},[25,125280,125281],{},"\u002Fvar：",[175,125283,125284],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[175,125286,125287],{},[25,125288,125289],{},"\u002Fproc:",[175,125291,125292,125293,125296],{},"管理 ",[25,125294,125295],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22641,125298,125300],{"id":125299},"_7627-扩展用的","7.6.2.7 扩展用的",[175,125302,125303],{},[25,125304,125305],{},"\u002Fopt:",[175,125307,125308],{},"默认是空的，我们安装额外软件可以放在这个里面",[175,125310,125311],{},[25,125312,125313],{},"\u002Fsrv:",[175,125315,125316],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[114,125318,125320],{"id":125319},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[175,125322,125323],{},[119,125324],{"alt":53,"src":125325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[175,125327,125328],{},"windows-->linux:",[175,125330,125331],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[175,125333,125334],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[175,125336,125337],{},"linux传输文件到windows",[175,125339,125340],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[114,125342,125344],{"id":125343},"_764-易忘知识","7.6.4 易忘知识",[175,125346,125347],{},"操作系统内核查看",[48,125349,125350],{"className":117925,"code":121919,"language":117927,"meta":53,"style":53},[55,125351,125352],{"__ignoreMap":53},[58,125353,125354,125356],{"class":60,"line":61},[58,125355,70836],{"class":379},[58,125357,121928],{"class":82},[175,125359,125360],{},[119,125361],{"alt":53,"src":125362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[175,125364,125365],{},[119,125366],{"alt":53,"src":125367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[48,125369,125371],{"className":117925,"code":125370,"language":117927,"meta":53,"style":53},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[55,125372,125373,125385],{"__ignoreMap":53},[58,125374,125375,125377,125380,125383],{"class":60,"line":61},[58,125376,122136],{"class":379},[58,125378,125379],{"class":386}," mvtest",[58,125381,125382],{"class":386}," mvtest2",[58,125384,3320],{"class":75},[58,125386,125387],{"class":60,"line":68},[58,125388,125389],{"class":379},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[175,125391,125392],{},[119,125393],{"alt":53,"src":125394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[175,125396,125397],{},[119,125398],{"alt":53,"src":125399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[175,125401,125402,125403,125406],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[55,125404,125405],{},"du -a"," 可以快速查看磁盘使用细节。",[114,125408,125410],{"id":125409},"_765-vim","7.6.5 Vim",[175,125412,125413],{},[119,125414],{"alt":53,"src":125415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[175,125417,125418],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[175,125420,125421],{},"一开始进去为命令模式，此时点击输入的字母为命令",[175,125423,125424],{},[25,125425,125426],{},"1.命令模式：",[175,125428,125429],{},"i 切换到输入模式，在光标当前位置开始输入文本",[175,125431,125432],{},"x 删除当前光标所在处的字符",[175,125434,125435],{},"：切换到底线命令模式，以在最底一行输入命令",[175,125437,125438],{},"a 进行插入模式，在光标下一个位置输入文本",[175,125440,125441],{},"o 在当前的下方插入一个新行，并进入插入模式",[175,125443,125444],{},"0 在当前行的上方插入一个新行，并进入插入模式",[175,125446,125447],{},"dd 剪切当前行",[175,125449,125450],{},"yy 复制当前行",[175,125452,125453],{},"p 粘贴剪贴板内容到光标下方",[175,125455,125456],{},"P 粘贴剪贴板内容到光标上方",[175,125458,125459],{},"u 撤销上一次操作",[175,125461,125462],{},"ctrl+r 重做上一次操作",[175,125464,125465,125467],{},[247,125466],{}," 保存文件",[175,125469,125470,125472],{},[1431,125471],{}," 退出Vim编辑器",[175,125474,125475,125477],{},[1431,125476],{},"! 强制退出Vim编辑器，不保存修改",[175,125479,125480],{},[25,125481,125482],{},"2.输入模式：",[175,125484,125485],{},[119,125486],{"alt":53,"src":125487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[175,125489,125490],{},[25,125491,125492],{},"3.底线命令模式：",[175,125494,125495],{},[119,125496],{"alt":53,"src":125497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[175,125499,125500],{},"按下esc可以退出底线命令模式",[114,125502,125504],{"id":125503},"_766-apt","7.6.6 apt",[175,125506,125507],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[114,125509,125511],{"id":125510},"_767-home与root的区别","7.6.7 home与root的区别",[175,125513,125514],{},[119,125515],{"alt":53,"src":125516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[175,125518,125519],{},[119,125520],{"alt":53,"src":125521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[175,125523,125524],{},[119,125525],{"alt":53,"src":125526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[175,125528,125529],{},[119,125530],{"alt":53,"src":125531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[114,125533,125535],{"id":125534},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[175,125537,125538],{},[376,125539,125540],{"href":125540,"rel":125541},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24508],[19,125543,125544,125547],{},[22,125545,125546],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[22,125548,125549],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[175,125551,125552],{},[119,125553],{"alt":53,"src":125554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[175,125556,125557],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[175,125559,125560],{},[119,125561],{"alt":53,"src":125562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[48,125564,125566],{"className":121445,"code":125565,"language":121447,"meta":121448,"style":53},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[55,125567,125568,125573],{"__ignoreMap":53},[58,125569,125570],{"class":60,"line":61},[58,125571,125572],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[58,125574,125575],{"class":60,"line":68},[58,125576,125577],{},".\u002Fpycharm.sh\n",[175,125579,125580],{},"3️⃣创建.desktop文件",[175,125582,125583],{},[25,125584,125585],{},"原理：",[124,125587,125588,125598],{},[22,125589,125590,125591,125597],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[25,125592,125593,125596],{},[55,125594,125595],{},".desktop"," 文件"," 来识别应用。",[22,125599,125600,125602,125603],{},[55,125601,125595],{}," 文件相当于一个“应用注册表”，告诉系统：",[124,125604,125605,125608,125611,125614,125617],{},[22,125606,125607],{},"应用名字（Name）",[22,125609,125610],{},"图标（Icon）",[22,125612,125613],{},"执行命令（Exec）",[22,125615,125616],{},"分类（Categories）",[22,125618,125619],{},"是否需要终端（Terminal）",[48,125621,125623],{"className":121445,"code":125622,"language":121447,"meta":121448,"style":53},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[55,125624,125625,125630],{"__ignoreMap":53},[58,125626,125627],{"class":60,"line":61},[58,125628,125629],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[58,125631,125632],{"class":60,"line":68},[58,125633,125634],{},"nano pycharm.desktop\n",[175,125636,125637],{},"nano是一个命令行下的编辑器，也可以使用vim",[48,125639,125641],{"className":121445,"code":125640,"language":121447,"meta":121448,"style":53},"[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",[55,125642,125643,125648,125653,125658,125663,125668,125673,125678,125683,125688],{"__ignoreMap":53},[58,125644,125645],{"class":60,"line":61},[58,125646,125647],{},"[Desktop Entry]\n",[58,125649,125650],{"class":60,"line":68},[58,125651,125652],{},"Version=1.0\n",[58,125654,125655],{"class":60,"line":79},[58,125656,125657],{},"Type=Application\n",[58,125659,125660],{"class":60,"line":105},[58,125661,125662],{},"Name=PyCharm\n",[58,125664,125665],{"class":60,"line":627},[58,125666,125667],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[58,125669,125670],{"class":60,"line":509},[58,125671,125672],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[58,125674,125675],{"class":60,"line":559},[58,125676,125677],{},"Comment=JetBrains PyCharm IDE\n",[58,125679,125680],{"class":60,"line":654},[58,125681,125682],{},"Categories=Development;IDE;\n",[58,125684,125685],{"class":60,"line":671},[58,125686,125687],{},"Terminal=false\n",[58,125689,125690],{"class":60,"line":677},[58,125691,125692],{},"StartupWMClass=jetbrains-pycharm\n",[124,125694,125695,125701,125707,125713],{},[22,125696,125697,125700],{},[55,125698,125699],{},"Exec"," → 点击图标时执行的命令",[22,125702,125703,125706],{},[55,125704,125705],{},"Icon"," → 显示在菜单和桌面上的图标",[22,125708,125709,125712],{},[55,125710,125711],{},"Terminal=false"," → 不打开终端",[22,125714,125715,125718],{},[55,125716,125717],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125720,125721,125722],"blockquote",{},[175,125723,125724,125725,125727,125728],{},"可以理解成 ",[55,125726,125595],{}," 文件是 Linux 的 ",[25,125729,125730],{},"快捷方式配置文件",[175,125732,125733],{},"4️⃣设置可执行权限",[48,125735,125737],{"className":121445,"code":125736,"language":121447,"meta":121448,"style":53},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[55,125738,125739],{"__ignoreMap":53},[58,125740,125741],{"class":60,"line":61},[58,125742,125736],{},[175,125744,125745],{},"5️⃣桌面图标启动的话如下：",[48,125747,125749],{"className":121445,"code":125748,"language":121447,"meta":121448,"style":53},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[55,125750,125751,125756],{"__ignoreMap":53},[58,125752,125753],{"class":60,"line":61},[58,125754,125755],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[58,125757,125758],{"class":60,"line":68},[58,125759,125760],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[19,125762,125763],{"start":79},[22,125764,125765],{},"下载Appimage文件实现软件的安装",[175,125767,125768],{},"1️⃣先下载appimage",[175,125770,125771],{},[376,125772,125773],{"href":125773,"rel":125774},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24508],[175,125776,125777],{},[119,125778],{"alt":53,"src":125779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[175,125781,125782],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[175,125784,125785],{},[119,125786],{"alt":53,"src":125787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[175,125789,125790],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[175,125792,125793],{},[119,125794],{"alt":53,"src":125795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[175,125797,125798],{},[119,125799],{"alt":53,"src":125800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[175,125802,125803,125804,125807],{},"3️⃣给他们放在",[55,125805,125806],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[175,125809,125810],{},"4️⃣给软件执行权限",[48,125812,125814],{"className":121445,"code":125813,"language":121447,"meta":121448,"style":53},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[55,125815,125816,125821],{"__ignoreMap":53},[58,125817,125818],{"class":60,"line":61},[58,125819,125820],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[58,125822,125823],{"class":60,"line":68},[58,125824,125825],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[175,125827,125828],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[48,125830,125832],{"className":117925,"code":125831,"language":117927,"meta":53,"style":53},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[55,125833,125834,125841,125848,125854],{"__ignoreMap":53},[58,125835,125836,125838],{"class":60,"line":61},[58,125837,101905],{"class":82},[58,125839,125840],{"class":386}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[58,125842,125843,125845],{"class":60,"line":68},[58,125844,101912],{"class":379},[58,125846,125847],{"class":386}," .\u002Fqqmusic.desktop\n",[58,125849,125850,125852],{"class":60,"line":79},[58,125851,124896],{"class":379},[58,125853,125847],{"class":386},[58,125855,125856,125858,125860,125862],{"class":60,"line":105},[58,125857,25220],{"class":379},[58,125859,25223],{"class":386},[58,125861,123762],{"class":386},[58,125863,125847],{"class":386},[175,125865,125866,125868],{},[55,125867,101912],{},"：一个 Linux 命令，主要功能是：",[124,125870,125871,125874],{},[22,125872,125873],{},"如果文件不存在，就创建一个新的空文件",[22,125875,125876],{},"如果文件已存在，就更新该文件的最后修改时间",[48,125878,125880],{"className":121445,"code":125879,"language":121447,"meta":121448,"style":53},"[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",[55,125881,125882,125886,125891,125896,125901,125905,125910],{"__ignoreMap":53},[58,125883,125884],{"class":60,"line":61},[58,125885,125647],{},[58,125887,125888],{"class":60,"line":68},[58,125889,125890],{},"Name=QQ音乐\n",[58,125892,125893],{"class":60,"line":79},[58,125894,125895],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[58,125897,125898],{"class":60,"line":105},[58,125899,125900],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[58,125902,125903],{"class":60,"line":627},[58,125904,125657],{},[58,125906,125907],{"class":60,"line":509},[58,125908,125909],{},"Categories=Audio;Music;Player;\n",[58,125911,125912],{"class":60,"line":559},[58,125913,125914],{},"Comment=QQ Music Client for Linux\n",[175,125916,125917],{},"将文件复制进去",[175,125919,125920],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[175,125922,125923],{},[119,125924],{"alt":53,"src":125925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[175,125927,125928],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[175,125930,125931],{},[119,125932],{"alt":53,"src":125933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[175,125935,125936,125937,125940,125941,125944],{},"如果你用的不是KDE，那么也可以直接修改",[55,125938,125939],{},"qqmuic.desktop","：在exec的末尾加上",[55,125942,125943],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[48,125946,125948],{"className":121445,"code":125947,"language":121447,"meta":121448,"style":53},"[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",[55,125949,125950,125954,125958,125963,125967,125971,125975],{"__ignoreMap":53},[58,125951,125952],{"class":60,"line":61},[58,125953,125647],{},[58,125955,125956],{"class":60,"line":68},[58,125957,125890],{},[58,125959,125960],{"class":60,"line":79},[58,125961,125962],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[58,125964,125965],{"class":60,"line":105},[58,125966,125900],{},[58,125968,125969],{"class":60,"line":627},[58,125970,125657],{},[58,125972,125973],{"class":60,"line":509},[58,125974,125909],{},[58,125976,125977],{"class":60,"line":559},[58,125978,125914],{},[175,125980,125981],{},[119,125982],{"alt":53,"src":125983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[175,125985,125986],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[48,125988,125990],{"className":121445,"code":125989,"language":121447,"meta":121448,"style":53},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[55,125991,125992],{"__ignoreMap":53},[58,125993,125994],{"class":60,"line":61},[58,125995,125989],{},[19,125997,125998],{"start":105},[22,125999,126000],{},"去Flathub上安装软件",[175,126002,126003],{},[376,126004,126005],{"href":126005,"rel":126006},"https:\u002F\u002Fflathub.org\u002F",[24508],[175,126008,126009],{},"1️⃣去上面的官网搜索软件+下载软件",[175,126011,126012],{},[119,126013],{"alt":53,"src":126014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[48,126016,126018],{"className":121445,"code":126017,"language":121447,"meta":121448,"style":53},"flatpak install flathub com.obsproject.Studio\n",[55,126019,126020],{"__ignoreMap":53},[58,126021,126022],{"class":60,"line":61},[58,126023,126017],{},[175,126025,126026],{},[119,126027],{"alt":53,"src":126028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[175,126030,126031],{},"2️⃣运行软件",[175,126033,126034],{},"a.官方方式：",[175,126036,126037],{},[119,126038],{"alt":53,"src":126039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[48,126041,126042],{"className":121445,"code":126017,"language":121447,"meta":121448,"style":53},[55,126043,126044],{"__ignoreMap":53},[58,126045,126046],{"class":60,"line":61},[58,126047,126017],{},[175,126049,126050],{},"b.当普通软件运行：",[175,126052,126053],{},[119,126054],{"alt":53,"src":126055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[175,126057,126058],{},[119,126059],{"alt":53,"src":126060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[702,126062,126063],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":53,"searchDepth":68,"depth":68,"links":126065},[126066,126067,126072,126073,126079,126080],{"id":122798,"depth":68,"text":122799},{"id":123140,"depth":68,"text":123141,"children":126068},[126069,126070,126071],{"id":123144,"depth":79,"text":123145},{"id":123211,"depth":79,"text":123212},{"id":123472,"depth":79,"text":123473},{"id":123625,"depth":68,"text":123626},{"id":123863,"depth":68,"text":123864,"children":126074},[126075,126076,126077,126078],{"id":123915,"depth":79,"text":123916},{"id":124201,"depth":79,"text":124202},{"id":124472,"depth":79,"text":124473},{"id":124731,"depth":79,"text":124732},{"id":124790,"depth":68,"text":124791},{"id":125091,"depth":68,"text":125092,"children":126081},[126082,126083,126084,126085,126086,126087,126088,126089],{"id":125095,"depth":79,"text":125096},{"id":125107,"depth":79,"text":125108},{"id":125319,"depth":79,"text":125320},{"id":125343,"depth":79,"text":125344},{"id":125409,"depth":79,"text":125410},{"id":125503,"depth":79,"text":125504},{"id":125510,"depth":79,"text":125511},{"id":125534,"depth":79,"text":125535},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122790,"description":717},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126096,"title":126097,"body":126098,"description":717,"extension":718,"meta":126102,"navigation":720,"path":126103,"seo":126104,"stem":126105,"__hash__":126106},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126099,"toc":126100},[],{"title":53,"searchDepth":68,"depth":68,"links":126101},[],{"category":30907},"\u002Fwiki\u002F2025-01-27-linux",{"title":126097,"description":717},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126108,"title":126109,"body":126110,"description":126114,"extension":718,"meta":126505,"navigation":720,"path":126506,"seo":126507,"stem":126508,"__hash__":126509},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126111,"toc":126503},[126112,126115,126119,126136,126139,126192,126196,126198,126238,126247,126251,126254,126495,126500],[175,126113,126114],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126116,126118],{"id":126117},"_1ubuntu环境配置","1.Ubuntu环境配置",[19,126120,126121,126124,126127,126130,126133],{},[22,126122,126123],{},"ubuntu环境换源",[22,126125,126126],{},"安装cuda",[22,126128,126129],{},"安装miniconda",[22,126131,126132],{},"安装pytorch",[22,126134,126135],{},"安装genesis",[175,126137,126138],{},"参考链接：",[48,126140,126142],{"className":24465,"code":126141,"language":24467,"meta":53,"style":53},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[55,126143,126144],{"__ignoreMap":53},[58,126145,126146,126149,126152,126155,126157,126160,126163,126165,126168,126171,126173,126176,126179,126181,126184,126187,126189],{"class":60,"line":61},[58,126147,126148],{"class":379},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[58,126150,126151],{"class":386},"=blogdetail",[58,126153,126154],{"class":75},"&sharetype",[58,126156,383],{"class":92},[58,126158,126159],{"class":386},"blogdetail",[58,126161,126162],{"class":75},"&sharerId",[58,126164,383],{"class":92},[58,126166,126167],{"class":386},"144728092",[58,126169,126170],{"class":75},"&sharerefer",[58,126172,383],{"class":92},[58,126174,126175],{"class":386},"PC",[58,126177,126178],{"class":75},"&sharesource",[58,126180,383],{"class":92},[58,126182,126183],{"class":386},"qq_69379513",[58,126185,126186],{"class":75},"&sharefrom",[58,126188,383],{"class":92},[58,126190,126191],{"class":386},"from_link\n",[10,126193,126195],{"id":126194},"_2genesis-报错issue","2.Genesis 报错issue",[175,126197,126138],{},[48,126199,126200],{"className":24465,"code":126141,"language":24467,"meta":53,"style":53},[55,126201,126202],{"__ignoreMap":53},[58,126203,126204,126206,126208,126210,126212,126214,126216,126218,126220,126222,126224,126226,126228,126230,126232,126234,126236],{"class":60,"line":61},[58,126205,126148],{"class":379},[58,126207,126151],{"class":386},[58,126209,126154],{"class":75},[58,126211,383],{"class":92},[58,126213,126159],{"class":386},[58,126215,126162],{"class":75},[58,126217,383],{"class":92},[58,126219,126167],{"class":386},[58,126221,126170],{"class":75},[58,126223,383],{"class":92},[58,126225,126175],{"class":386},[58,126227,126178],{"class":75},[58,126229,383],{"class":92},[58,126231,126183],{"class":386},[58,126233,126186],{"class":75},[58,126235,383],{"class":92},[58,126237,126191],{"class":386},[48,126239,126241],{"className":24465,"code":126240,"language":24467,"meta":53,"style":53},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[55,126242,126243],{"__ignoreMap":53},[58,126244,126245],{"class":60,"line":61},[58,126246,126240],{"class":379},[10,126248,126250],{"id":126249},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[175,126252,126253],{},"hello_robot.py",[48,126255,126257],{"className":31022,"code":126256,"language":31024,"meta":53,"style":53},"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",[55,126258,126259,126265,126280,126284,126296,126308,126312,126325,126329,126348,126358,126368,126382,126386,126390,126395,126399,126409,126416,126430,126437,126447,126452,126456,126474,126479,126483,126490],{"__ignoreMap":53},[58,126260,126261,126263],{"class":60,"line":61},[58,126262,31036],{"class":92},[58,126264,45949],{"class":75},[58,126266,126267,126270,126273,126275,126277],{"class":60,"line":68},[58,126268,126269],{"class":75},"os.environ[",[58,126271,126272],{"class":386},"'PYOPENGL_PLATFORM'",[58,126274,5089],{"class":75},[58,126276,383],{"class":92},[58,126278,126279],{"class":386}," 'glx'\n",[58,126281,126282],{"class":60,"line":79},[58,126283,3046],{"emptyLinePlaceholder":720},[58,126285,126286,126288,126291,126293],{"class":60,"line":105},[58,126287,31036],{"class":92},[58,126289,126290],{"class":75}," genesis ",[58,126292,32027],{"class":92},[58,126294,126295],{"class":75}," gs\n",[58,126297,126298,126300,126303,126305],{"class":60,"line":627},[58,126299,31381],{"class":92},[58,126301,126302],{"class":75}," pynput ",[58,126304,31036],{"class":92},[58,126306,126307],{"class":75}," keyboard\n",[58,126309,126310],{"class":60,"line":509},[58,126311,3046],{"emptyLinePlaceholder":720},[58,126313,126314,126317,126320,126322],{"class":60,"line":559},[58,126315,126316],{"class":75},"gs.init(",[58,126318,126319],{"class":5862},"backend",[58,126321,383],{"class":92},[58,126323,126324],{"class":75},"gs.gpu)\n",[58,126326,126327],{"class":60,"line":654},[58,126328,3046],{"emptyLinePlaceholder":720},[58,126330,126331,126334,126336,126339,126342,126344,126346],{"class":60,"line":671},[58,126332,126333],{"class":75},"scene ",[58,126335,383],{"class":92},[58,126337,126338],{"class":75}," gs.Scene(",[58,126340,126341],{"class":5862},"show_viewer",[58,126343,383],{"class":92},[58,126345,32120],{"class":82},[58,126347,799],{"class":75},[58,126349,126350,126353,126355],{"class":60,"line":677},[58,126351,126352],{"class":75},"plane ",[58,126354,383],{"class":92},[58,126356,126357],{"class":75}," scene.add_entity(gs.morphs.Plane())\n",[58,126359,126360,126363,126365],{"class":60,"line":2260},[58,126361,126362],{"class":75},"franka ",[58,126364,383],{"class":92},[58,126366,126367],{"class":75}," scene.add_entity(\n",[58,126369,126370,126373,126375,126377,126380],{"class":60,"line":694},[58,126371,126372],{"class":75},"    gs.morphs.MJCF(",[58,126374,45998],{"class":5862},[58,126376,383],{"class":92},[58,126378,126379],{"class":386},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[58,126381,38691],{"class":75},[58,126383,126384],{"class":60,"line":2270},[58,126385,799],{"class":75},[58,126387,126388],{"class":60,"line":2275},[58,126389,3046],{"emptyLinePlaceholder":720},[58,126391,126392],{"class":60,"line":2289},[58,126393,126394],{"class":75},"scene.build()\n",[58,126396,126397],{"class":60,"line":2294},[58,126398,3046],{"emptyLinePlaceholder":720},[58,126400,126401,126403,126406],{"class":60,"line":2300},[58,126402,32591],{"class":92},[58,126404,126405],{"class":379}," on_press",[58,126407,126408],{"class":75},"(key):\n",[58,126410,126411,126414],{"class":60,"line":2321},[58,126412,126413],{"class":92},"    try",[58,126415,4385],{"class":75},[58,126417,126418,126420,126423,126425,126428],{"class":60,"line":2326},[58,126419,3143],{"class":92},[58,126421,126422],{"class":75}," key.char ",[58,126424,3595],{"class":92},[58,126426,126427],{"class":386}," 'q'",[58,126429,4385],{"class":75},[58,126431,126432,126434],{"class":60,"line":2340},[58,126433,16375],{"class":92},[58,126435,126436],{"class":82}," False\n",[58,126438,126439,126442,126445],{"class":60,"line":2345},[58,126440,126441],{"class":92},"    except",[58,126443,126444],{"class":82}," AttributeError",[58,126446,4385],{"class":75},[58,126448,126449],{"class":60,"line":2374},[58,126450,126451],{"class":92},"        pass\n",[58,126453,126454],{"class":60,"line":2379},[58,126455,3046],{"emptyLinePlaceholder":720},[58,126457,126458,126461,126463,126466,126469,126471],{"class":60,"line":2396},[58,126459,126460],{"class":75},"listener ",[58,126462,383],{"class":92},[58,126464,126465],{"class":75}," keyboard.Listener(",[58,126467,126468],{"class":5862},"on_press",[58,126470,383],{"class":92},[58,126472,126473],{"class":75},"on_press)\n",[58,126475,126476],{"class":60,"line":2401},[58,126477,126478],{"class":75},"listener.start()\n",[58,126480,126481],{"class":60,"line":2406},[58,126482,3046],{"emptyLinePlaceholder":720},[58,126484,126485,126487],{"class":60,"line":2411},[58,126486,109292],{"class":92},[58,126488,126489],{"class":75}," listener.running:\n",[58,126491,126492],{"class":60,"line":2425},[58,126493,126494],{"class":75},"    scene.step()\n",[175,126496,126497],{},[119,126498],{"alt":53,"src":126499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[702,126501,126502],{},"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":53,"searchDepth":68,"depth":68,"links":126504},[],{"category":24021},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126109,"description":126114},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126511,"title":126512,"body":126513,"description":717,"extension":718,"meta":126528,"navigation":720,"path":126529,"seo":126530,"stem":126531,"__hash__":126532},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126514,"toc":126525},[126515,126518,126522],[10,126516,126512],{"id":126517},"_1-基础知识",[14,126519,126521],{"id":126520},"_11-js的组成","1.1 js的组成",[175,126523,126524],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":53,"searchDepth":68,"depth":68,"links":126526},[126527],{"id":126520,"depth":68,"text":126521},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126512,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126534,"title":126535,"body":126536,"description":717,"extension":718,"meta":126675,"navigation":720,"path":126676,"seo":126677,"stem":126678,"__hash__":126679},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126537,"toc":126663},[126538,126541,126545,126548,126552,126562,126566,126569,126572,126575,126579,126586,126592,126596,126602,126613,126617,126620,126624,126627,126631,126634,126638,126641,126645,126648,126651,126654,126657,126660],[10,126539,126535],{"id":126540},"_2-vscode必备内容",[14,126542,126544],{"id":126543},"_21-标签分类","2.1 标签分类",[175,126546,126547],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126549,126551],{"id":126550},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[175,126553,126554,126555,126557,126558,126561],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[55,126556,1013],{}," 然后按 ",[55,126559,126560],{},"Tab","，快速自动生成基本结构。",[14,126563,126565],{"id":126564},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[175,126567,126568],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[175,126570,126571],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[175,126573,126574],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126576,126578],{"id":126577},"_24-视图缩放","2.4 视图缩放",[175,126580,126581,126582,126585],{},"缩放视图 ",[55,126583,126584],{},"ctrl+"," 可实现代码增大。",[175,126587,126588,126591],{},[55,126589,126590],{},"ctrl-"," 可实现代码减小。",[14,126593,126595],{"id":126594},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[175,126597,126598,126599,29029],{},"VSCode 新建文件快捷键为 ",[55,126600,126601],{},"ctrl+N",[175,126603,126604,126605,126608,126609,126612],{},"保存快捷键为 ",[55,126606,126607],{},"ctrl+S","，将文本保存为 ",[55,126610,126611],{},".html"," 文件。",[14,126614,126616],{"id":126615},"_26-auto-rename-tag","2.6 Auto Rename Tag",[175,126618,126619],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126621,126623],{"id":126622},"_27-vscode-icons","2.7 vscode-icons",[175,126625,126626],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126628,126630],{"id":126629},"_28-easy-less","2.8 Easy LESS",[175,126632,126633],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126635,126637],{"id":126636},"_29-会了吧插件","2.9 会了吧插件",[175,126639,126640],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126642,126644],{"id":126643},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[175,126646,126647],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[175,126649,126650],{},"②选定多个相同的单词:ctrl+D",[175,126652,126653],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[175,126655,126656],{},"④全局替换某些单词:ctrl+h",[175,126658,126659],{},"⑤快速定位到某一行:ctrl+g",[175,126661,126662],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":53,"searchDepth":68,"depth":68,"links":126664},[126665,126666,126667,126668,126669,126670,126671,126672,126673,126674],{"id":126543,"depth":68,"text":126544},{"id":126550,"depth":68,"text":126551},{"id":126564,"depth":68,"text":126565},{"id":126577,"depth":68,"text":126578},{"id":126594,"depth":68,"text":126595},{"id":126615,"depth":68,"text":126616},{"id":126622,"depth":68,"text":126623},{"id":126629,"depth":68,"text":126630},{"id":126636,"depth":68,"text":126637},{"id":126643,"depth":68,"text":126644},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126535,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126681,"title":126682,"body":126683,"description":717,"extension":718,"meta":126842,"navigation":720,"path":126843,"seo":126844,"stem":126845,"__hash__":126846},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126684,"toc":126834},[126685,126688,126692,126702,126708,126714,126718,126727,126731,126736,126739,126742,126746,126749,126759,126768,126777,126786,126796,126803,126808,126813,126826],[10,126686,126682],{"id":126687},"_3-html文本与容器标签",[14,126689,126691],{"id":126690},"_31-标题标签","3.1 标题标签",[175,126693,126694,126697,126698,126701],{},[55,126695,126696],{},"\u003Ch1>","我是一级标签",[55,126699,126700],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[175,126703,126704,126697,126706],{},[55,126705,126696],{},[55,126707,126700],{},[175,126709,123964,126710,126713],{},[55,126711,126712],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,126715,126717],{"id":126716},"_32-段落标签","3.2 段落标签",[175,126719,126720,126723,126724],{},[55,126721,126722],{},"\u003Cp>","....",[55,126725,126726],{},"\u003C\u002Fp>",[14,126728,126730],{"id":126729},"_33-换行标签","3.3 换行标签",[175,126732,126733],{},[55,126734,126735],{},"\u003Cbr \u002F>",[175,126737,126738],{},"具有强制换行的作用",[175,126740,126741],{},"单标签",[14,126743,126745],{"id":126744},"_34-文本格式化标签","3.4 文本格式化标签",[175,126747,126748],{},"提供粗体、斜体和下划线等效果",[175,126750,126751,126752,83169,126755,126758],{},"加粗：",[55,126753,126754],{},"\u003Cstrong>...\u003C\u002Fstrong>",[55,126756,126757],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[175,126760,126761,126762,83169,126765,126758],{},"斜体：",[55,126763,126764],{},"\u003Cem>...\u003C\u002Fem>",[55,126766,126767],{},"\u003Ci>...\u003C\u002Fi>",[175,126769,126770,126771,83169,126774,126758],{},"删除线：",[55,126772,126773],{},"\u003Cdel>...\u003C\u002Fdel>",[55,126775,126776],{},"\u003Cs>...\u003C\u002Fs>",[175,126778,126779,126780,83169,126783,126758],{},"下划线：",[55,126781,126782],{},"\u003Cins>...\u003C\u002Fins>",[55,126784,126785],{},"\u003Cu>...\u003C\u002Fu>",[14,126787,126789,126790,19053,126793,103322],{"id":126788},"_35-div和span标签","3.5 ",[55,126791,126792],{},"\u003Cdiv>",[55,126794,126795],{},"\u003Cspan>",[175,126797,126798,101647,126800,126802],{},[55,126799,126792],{},[55,126801,126795],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[175,126804,126805],{},[55,126806,126807],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[175,126809,126810],{},[55,126811,126812],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[175,126814,126815,126816,126818,126819,126821,126822,126825],{},"两者特点：①",[55,126817,126792],{}," 标签用来布局，但一行通常只放一个 ",[55,126820,126792],{},"。可以理解为一个大盒子，独占一行，在 ",[55,126823,126824],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[175,126827,77880,126828,126830,126831,126833],{},[55,126829,126795],{}," 标签也可用于布局，一行可以放多个 ",[55,126832,126795],{},"，可理解为小盒子。",{"title":53,"searchDepth":68,"depth":68,"links":126835},[126836,126837,126838,126839,126840],{"id":126690,"depth":68,"text":126691},{"id":126716,"depth":68,"text":126717},{"id":126729,"depth":68,"text":126730},{"id":126744,"depth":68,"text":126745},{"id":126788,"depth":68,"text":126841},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126682,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126848,"title":126849,"body":126850,"description":717,"extension":718,"meta":127046,"navigation":720,"path":127047,"seo":127048,"stem":127049,"__hash__":127050},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126851,"toc":127038},[126852,126855,126859,126862,126868,126875,126881,126887,126890,126893,126896,126899,126902,126905,126908,126912,126915,126918,126921,126927,126933,126939,126946,126950,126956,126962,126965,126968,126974,126980,126986,126989,126992,126996,126999,127009,127015,127019,127028,127032,127035],[10,126853,126849],{"id":126854},"_4-html图像与链接",[14,126856,126858],{"id":126857},"_41-图像标签","4.1 图像标签",[175,126860,126861],{},"（1）标签",[175,126863,126864,126867],{},[55,126865,126866],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[175,126869,126870,126871,126874],{},"src是",[55,126872,126873],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[175,126876,126877,126878],{},"alt:文本，替换文本。图像不能显示的文字 ",[55,126879,126880],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[175,126882,126883,126884],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[55,126885,126886],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[175,126888,126889],{},"width:像素，设置图像的宽度",[175,126891,126892],{},"height:像素，设置图像的高度",[175,126894,126895],{},"border：像素，设置图像的边框粗细",[175,126897,126898],{},"（2）图像标签属性的注意点：",[175,126900,126901],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[175,126903,126904],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[175,126906,126907],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,126909,126911],{"id":126910},"_42-路径注意要点","4.2 路径注意要点：",[175,126913,126914],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[175,126916,126917],{},"（2）根目录：就是打开文件夹的第一层根目录",[175,126919,126920],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[175,126922,126923,126924],{},"①同一级路径：图像文件位于HTML文件同一级，如",[55,126925,126926],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[175,126928,126929,126930],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[55,126931,126932],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[175,126934,126935,126936],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[55,126937,126938],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[175,126940,126941,126942,1037],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[376,126943,126944],{"href":126944,"rel":126945},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24508],[14,126947,126949],{"id":126948},"_43-超链接标签","4.3 超链接标签",[175,126951,126952,126955],{},[55,126953,126954],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[175,126957,126958,126959],{},"①语法格式：",[55,126960,126961],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[175,126963,126964],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[175,126966,126967],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[175,126969,126970,126971],{},"③链接分类：外部链接：",[55,126972,126973],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[175,126975,126976,126977],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[55,126978,126979],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[175,126981,126982,126983],{},"空链接：如果当时没有确定链接目标时，",[55,126984,126985],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[175,126987,126988],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[175,126990,126991],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,126993,126995],{"id":126994},"_44-锚点链接","4.4 锚点链接",[175,126997,126998],{},"点我们点击链接，可以快速定位到页面中的某个位置",[175,127000,127001,127002,127005,127006],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[55,127003,127004],{},"\u003Ca href=\"#two\">","第二级",[55,127007,127008],{},"\u003C\u002Fa>",[175,127010,127011,127012],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[55,127013,127014],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,127016,127018],{"id":127017},"_45-注释标签","4.5 注释标签",[175,127020,127021,127024,127025],{},[55,127022,127023],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[55,127026,127027],{},"ctrl+\u002F",[14,127029,127031],{"id":127030},"_46-特殊字符","4.6 特殊字符",[175,127033,127034],{},"可以实现添加多个空格",[119,127036],{"style":121,"src":127037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":53,"searchDepth":68,"depth":68,"links":127039},[127040,127041,127042,127043,127044,127045],{"id":126857,"depth":68,"text":126858},{"id":126910,"depth":68,"text":126911},{"id":126948,"depth":68,"text":126949},{"id":126994,"depth":68,"text":126995},{"id":127017,"depth":68,"text":127018},{"id":127030,"depth":68,"text":127031},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126849,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127052,"title":127053,"body":127054,"description":717,"extension":718,"meta":127345,"navigation":720,"path":127346,"seo":127347,"stem":127348,"__hash__":127349},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127055,"toc":127336},[127056,127059,127063,127066,127069,127072,127075,127078,127081,127084,127087,127090,127110,127116,127120,127123,127126,127129,127132,127135,127138,127142,127145,127148,127151,127154,127167,127172,127175,127178,127191,127194,127197,127200,127203,127206,127210,127213,127220,127223,127226,127229,127232,127235,127241,127244,127247,127253,127256,127259,127262,127268,127271,127274,127288,127295,127298,127301,127308,127317,127320,127323,127326,127330,127333],[10,127057,127053],{"id":127058},"_5-html表格列表与表单",[14,127060,127062],{"id":127061},"_51-表格标签","5.1 表格标签",[175,127064,127065],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[175,127067,127068],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[175,127070,127071],{},"②表格基本语法：",[119,127073],{"style":121,"src":127074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[175,127076,127077],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[119,127079],{"style":121,"src":127080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[175,127082,127083],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[119,127085],{"style":121,"src":127086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[175,127088,127089],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[175,127091,127092,127095,127096,127098,127099,127102,127103,127105,127106,127109],{},[55,127093,127094],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[55,127097,127094],{},"内部必须拥有",[55,127100,127101],{},"\u003Ctr>","标签，一般位于第一行，",[55,127104,127094],{},"比",[55,127107,127108],{},"\u003Cth>","范围广",[175,127111,127112,127115],{},[55,127113,127114],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127117,127119],{"id":127118},"_52-合并单元格","5.2 合并单元格",[175,127121,127122],{},"（1）合并单元格方式：",[175,127124,127125],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[175,127127,127128],{},"②跨列合并：colspan=\"合并单元格的个数\"",[175,127130,127131],{},"（2）目标单元格：",[175,127133,127134],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[175,127136,127137],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127139,127141],{"id":127140},"_53-列表标签","5.3 列表标签",[175,127143,127144],{},"（1）分类：无序列表、有序列表、自定义列表",[175,127146,127147],{},"①无序列表：",[119,127149],{"style":121,"src":127150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[175,127152,127153],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[175,127155,127156,127159,127160,127163,127164,127166],{},[55,127157,127158],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[55,127161,127162],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[55,127165,127158],{},"中输入其他标签或文字是不对的",[175,127168,127169,127171],{},[55,127170,127162],{},"之间相当于一个容器，可以容纳所有元素",[175,127173,127174],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[175,127176,127177],{},"在css中去除前边的小圆点采用如下代码:",[48,127179,127181],{"className":50,"code":127180,"language":52,"meta":53,"style":53},"list-style: none;\n",[55,127182,127183],{"__ignoreMap":53},[58,127184,127185,127188],{"class":60,"line":61},[58,127186,127187],{"class":71},"list-style",[58,127189,127190],{"class":75},": none;\n",[175,127192,127193],{},"②有序列表：",[119,127195],{"style":121,"src":127196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[175,127198,127199],{},"③自定义列表：",[119,127201],{"style":121,"src":127202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[119,127204],{"style":121,"src":127205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,127207,127209],{"id":127208},"_54-表单标签","5.4 表单标签",[175,127211,127212],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[175,127214,127215,127216,127219],{},"（1）表单域：包含单元素的区域，",[55,127217,127218],{},"\u003Cform>","标签可以实现信息的收集和传递。",[119,127221],{"style":121,"src":127222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[175,127224,127225],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[175,127227,127228],{},"表单元素提交必须有name属性",[175,127230,127231],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[175,127233,127234],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[175,127236,77857,127237,127240],{},[55,127238,127239],{},"\u003Cinput>","输入表单元素",[119,127242],{"style":121,"src":127243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[119,127245],{"style":121,"src":127246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[175,127248,127249,127250],{},"单选按钮：",[55,127251,127252],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[119,127254],{"style":121,"src":127255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[175,127257,127258],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[119,127260],{"style":121,"src":127261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[175,127263,127264,127267],{},[25,127265,127266],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[175,127269,127270],{},"②select下拉表单元素：可以节约页面控件",[119,127272],{"style":121,"src":127273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[175,127275,127276,14439,127278,127281,127282,127284,127285,127287],{},[25,127277,822],{},[55,127279,127280],{},"\u003Cselect>","中至少包含一对",[55,127283,103343],{},"；在",[55,127286,103343],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[175,127289,127290,127291,127294],{},"③",[55,127292,127293],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[119,127296],{"style":121,"src":127297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[175,127299,127300],{},"3行20列",[14,127302,127304,127305,103322],{"id":127303},"_55-lable标签","5.5 ",[55,127306,127307],{},"\u003Clable>",[175,127309,127310,127311,127313,127314,127316],{},"它不是表单标签，但常常与表单标签搭配使用，",[55,127312,127307],{},"标签用于绑定一个表单标签，当点击",[55,127315,127307],{},"标签内的文本",[175,127318,127319],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[119,127321],{"style":121,"src":127322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[119,127324],{"style":121,"src":127325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,127327,127329],{"id":127328},"_56-实例","5.6 实例",[119,127331],{"style":121,"src":127332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[702,127334,127335],{},"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":53,"searchDepth":68,"depth":68,"links":127337},[127338,127339,127340,127341,127342,127344],{"id":127061,"depth":68,"text":127062},{"id":127118,"depth":68,"text":127119},{"id":127140,"depth":68,"text":127141},{"id":127208,"depth":68,"text":127209},{"id":127303,"depth":68,"text":127343},"5.5 \u003Clable>标签",{"id":127328,"depth":68,"text":127329},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127053,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127351,"title":127352,"body":127353,"description":717,"extension":718,"meta":127902,"navigation":720,"path":127903,"seo":127904,"stem":127905,"__hash__":127906},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127354,"toc":127877},[127355,127358,127362,127365,127368,127372,127375,127378,127381,127384,127387,127390,127393,127397,127400,127404,127407,127410,127413,127417,127420,127423,127426,127432,127435,127438,127441,127444,127447,127450,127453,127486,127490,127493,127496,127499,127503,127506,127509,127512,127515,127518,127522,127525,127528,127531,127535,127538,127542,127545,127549,127552,127557,127561,127564,127568,127571,127574,127577,127580,127607,127610,127614,127617,127620,127625,127628,127631,127635,127638,127643,127646,127649,127652,127656,127659,127662,127665,127669,127672,127675,127678,127682,127686,127689,127729,127732,127736,127743,127746,127750,127753,127799,127803,127806,127809,127812,127840,127844,127847,127874],[10,127356,127352],{"id":127357},"_6-css语法与文本样式",[14,127359,127361],{"id":127360},"_61-css语法规范","6.1 css语法规范",[175,127363,127364],{},"由两部分组成，选择器及一条或多条声明",[119,127366],{"style":121,"src":127367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[175,127369,127370],{},[25,127371,822],{},[175,127373,127374],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[175,127376,127377],{},"②属性与属性值以“键值对”的形式出现",[175,127379,127380],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[175,127382,127383],{},"④属性和属性值之间用英文“;”分开",[119,127385],{"style":121,"src":127386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[119,127388],{"style":121,"src":127389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[119,127391],{"style":121,"src":127392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,127394,127396],{"id":127395},"_62-css选择器","6.2 css选择器",[175,127398,127399],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[114,127401,127403],{"id":127402},"_621-标签选择器","6.2.1 标签选择器",[175,127405,127406],{},"①优点：能快速为页面中同类型的标签统一设置样式",[175,127408,127409],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[119,127411],{"style":121,"src":127412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[114,127414,127416],{"id":127415},"_622-类选择器","6.2.2 类选择器",[175,127418,127419],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[175,127421,127422],{},"②样例",[119,127424],{"style":121,"src":127425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[175,127427,127428,127429,127431],{},"③ ",[25,127430,127266],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[175,127433,127434],{},"可以理解为给这个标签起了个名字，来表示；",[175,127436,127437],{},"长名称或词组可以使用横线来为选择器命名；",[175,127439,127440],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[175,127442,127443],{},"命名要有意义；",[119,127445],{"style":121,"src":127446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[175,127448,127449],{},"类选择器也可以指定特殊的元素p.center{}",[175,127451,127452],{},"p.center和.center都对",[48,127454,127456],{"className":50,"code":127455,"language":52,"meta":53,"style":53},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[55,127457,127458,127463,127472,127482],{"__ignoreMap":53},[58,127459,127460],{"class":60,"line":61},[58,127461,127462],{"class":64},"\u002F* 类选择器指定特殊元素 *\u002F\n",[58,127464,127465,127467,127470],{"class":60,"line":68},[58,127466,175],{"class":71},[58,127468,127469],{"class":379},".center",[58,127471,76],{"class":75},[58,127473,127474,127476,127478,127480],{"class":60,"line":79},[58,127475,71158],{"class":82},[58,127477,86],{"class":75},[58,127479,52231],{"class":82},[58,127481,102],{"class":75},[58,127483,127484],{"class":60,"line":105},[58,127485,108],{"class":75},[114,127487,127489],{"id":127488},"_623-多类名使用","6.2.3 多类名使用",[175,127491,127492],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[119,127494],{"style":121,"src":127495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[175,127497,127498],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[114,127500,127502],{"id":127501},"_624-id选择器","6.2.4 id选择器",[175,127504,127505],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[175,127507,127508],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[119,127510],{"style":121,"src":127511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[175,127513,127514],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[175,127516,127517],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[114,127519,127521],{"id":127520},"_625-通配符选择器","6.2.5 通配符选择器",[175,127523,127524],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[175,127526,127527],{},"* {",[175,127529,127530],{},"color=\"red\"}",[114,127532,127534],{"id":127533},"_626-总结","6.2.6 总结",[119,127536],{"style":121,"src":127537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,127539,127541],{"id":127540},"_63-css字体属性","6.3 css字体属性",[175,127543,127544],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[114,127546,127548],{"id":127547},"_631-字体系列","6.3.1 字体系列",[175,127550,127551],{},"font-family: '宋体';",[175,127553,127554,127556],{},[25,127555,822],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[114,127558,127560],{"id":127559},"_632-字体大小","6.3.2 字体大小",[175,127562,127563],{},"font-size: 20px",[175,127565,127566,27117],{},[25,127567,127266],{},[175,127569,127570],{},"①px（像素）大小是网页的最常用单位",[175,127572,127573],{},"②谷歌浏览器默认为16px",[175,127575,127576],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[175,127578,127579],{},"④可以给body指定整个页面的大小：会自动引用",[48,127581,127583],{"className":50,"code":127582,"language":52,"meta":53,"style":53},"body {\n  font-size: 16px;\n}\n",[55,127584,127585,127591,127603],{"__ignoreMap":53},[58,127586,127587,127589],{"class":60,"line":61},[58,127588,52438],{"class":71},[58,127590,76],{"class":75},[58,127592,127593,127595,127597,127599,127601],{"class":60,"line":68},[58,127594,71258],{"class":82},[58,127596,86],{"class":75},[58,127598,1387],{"class":82},[58,127600,93],{"class":92},[58,127602,102],{"class":75},[58,127604,127605],{"class":60,"line":79},[58,127606,108],{"class":75},[175,127608,127609],{},"⑤标题标签比较特殊，需要单独指定大小",[114,127611,127613],{"id":127612},"_633-字体粗细","6.3.3 字体粗细",[175,127615,127616],{},"font-weight: bold;",[175,127618,127619],{},"font-weight: 100；",[175,127621,127622,127624],{},[25,127623,822],{}," ①粗体文字变细：尽量别用normal，多用数字",[175,127626,127627],{},"font-weight= 400;",[175,127629,127630],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[114,127632,127634],{"id":127633},"_634-文字样式","6.3.4 文字样式",[175,127636,127637],{},"font-style: normal；",[175,127639,127640,27117],{},[25,127641,127642],{},"属性值",[175,127644,127645],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[175,127647,127648],{},"②italic：浏览器会显示斜体的字体样式",[119,127650],{"style":121,"src":127651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[114,127653,127655],{"id":127654},"_635-字体符合属性","6.3.5 字体符合属性",[119,127657],{"style":121,"src":127658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[119,127660],{"style":121,"src":127661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[175,127663,127664],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[175,127666,127667,27117],{},[25,127668,127266],{},[175,127670,127671],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[175,127673,127674],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[175,127676,127677],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127679,127681],{"id":127680},"_64-css-test文本属性","6.4 css test文本属性",[114,127683,127685],{"id":127684},"_641-文本颜色","6.4.1 文本颜色",[175,127687,127688],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[48,127690,127692],{"className":50,"code":127691,"language":52,"meta":53,"style":53},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[55,127693,127694,127699,127705,127715,127720,127725],{"__ignoreMap":53},[58,127695,127696],{"class":60,"line":61},[58,127697,127698],{"class":64},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[58,127700,127701,127703],{"class":60,"line":68},[58,127702,175],{"class":71},[58,127704,76],{"class":75},[58,127706,127707,127709,127711,127713],{"class":60,"line":79},[58,127708,71536],{"class":82},[58,127710,86],{"class":75},[58,127712,58055],{"class":82},[58,127714,102],{"class":75},[58,127716,127717],{"class":60,"line":105},[58,127718,127719],{"class":64},"  \u002F* color: #ff0000; *\u002F\n",[58,127721,127722],{"class":60,"line":627},[58,127723,127724],{"class":64},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[58,127726,127727],{"class":60,"line":509},[58,127728,108],{"class":75},[119,127730],{"style":121,"src":127731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[114,127733,127735],{"id":127734},"_642-对齐文本","6.4.2 对齐文本",[175,127737,127738,127739,127742],{},"text-align属于用于设置元素内文本内容的 ",[25,127740,127741],{},"水平对齐"," 方式",[175,127744,127745],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[114,127747,127749],{"id":127748},"_643-装饰文本","6.4.3 装饰文本",[175,127751,127752],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[48,127754,127756],{"className":50,"code":127755,"language":52,"meta":53,"style":53},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[55,127757,127758,127764,127774,127778,127784,127795],{"__ignoreMap":53},[58,127759,127760,127762],{"class":60,"line":61},[58,127761,376],{"class":71},[58,127763,76],{"class":75},[58,127765,127766,127768,127770,127772],{"class":60,"line":68},[58,127767,71134],{"class":82},[58,127769,86],{"class":75},[58,127771,55373],{"class":82},[58,127773,102],{"class":75},[58,127775,127776],{"class":60,"line":79},[58,127777,108],{"class":75},[58,127779,127780,127782],{"class":60,"line":105},[58,127781,175],{"class":71},[58,127783,76],{"class":75},[58,127785,127786,127788,127790,127793],{"class":60,"line":627},[58,127787,71134],{"class":82},[58,127789,86],{"class":75},[58,127791,127792],{"class":82},"underline",[58,127794,102],{"class":75},[58,127796,127797],{"class":60,"line":509},[58,127798,108],{"class":75},[114,127800,127802],{"id":127801},"_644-文本缩进","6.4.4 文本缩进",[175,127804,127805],{},"实现文本的第一行首行缩进自己指定的距离",[175,127807,127808],{},"20px往右边走；-20px往左边走",[175,127810,127811],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[48,127813,127815],{"className":50,"code":127814,"language":52,"meta":53,"style":53},"p {\n  text-indent: 2em;\n}\n",[55,127816,127817,127823,127836],{"__ignoreMap":53},[58,127818,127819,127821],{"class":60,"line":61},[58,127820,175],{"class":71},[58,127822,76],{"class":75},[58,127824,127825,127828,127830,127832,127834],{"class":60,"line":68},[58,127826,127827],{"class":82},"  text-indent",[58,127829,86],{"class":75},[58,127831,867],{"class":82},[58,127833,24196],{"class":92},[58,127835,102],{"class":75},[58,127837,127838],{"class":60,"line":79},[58,127839,108],{"class":75},[114,127841,127843],{"id":127842},"_645-行间距","6.4.5 行间距",[175,127845,127846],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[48,127848,127850],{"className":50,"code":127849,"language":52,"meta":53,"style":53},"p {\n  line-height: 1.6;\n}\n",[55,127851,127852,127858,127870],{"__ignoreMap":53},[58,127853,127854,127856],{"class":60,"line":61},[58,127855,175],{"class":71},[58,127857,76],{"class":75},[58,127859,127860,127863,127865,127868],{"class":60,"line":68},[58,127861,127862],{"class":82},"  line-height",[58,127864,86],{"class":75},[58,127866,127867],{"class":82},"1.6",[58,127869,102],{"class":75},[58,127871,127872],{"class":60,"line":79},[58,127873,108],{"class":75},[702,127875,127876],{},"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":53,"searchDepth":68,"depth":68,"links":127878},[127879,127880,127888,127895],{"id":127360,"depth":68,"text":127361},{"id":127395,"depth":68,"text":127396,"children":127881},[127882,127883,127884,127885,127886,127887],{"id":127402,"depth":79,"text":127403},{"id":127415,"depth":79,"text":127416},{"id":127488,"depth":79,"text":127489},{"id":127501,"depth":79,"text":127502},{"id":127520,"depth":79,"text":127521},{"id":127533,"depth":79,"text":127534},{"id":127540,"depth":68,"text":127541,"children":127889},[127890,127891,127892,127893,127894],{"id":127547,"depth":79,"text":127548},{"id":127559,"depth":79,"text":127560},{"id":127612,"depth":79,"text":127613},{"id":127633,"depth":79,"text":127634},{"id":127654,"depth":79,"text":127655},{"id":127680,"depth":68,"text":127681,"children":127896},[127897,127898,127899,127900,127901],{"id":127684,"depth":79,"text":127685},{"id":127734,"depth":79,"text":127735},{"id":127748,"depth":79,"text":127749},{"id":127801,"depth":79,"text":127802},{"id":127842,"depth":79,"text":127843},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127352,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127908,"title":127909,"body":127910,"description":717,"extension":718,"meta":128557,"navigation":720,"path":128558,"seo":128559,"stem":128560,"__hash__":128561},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127911,"toc":128538},[127912,127915,127919,127923,127981,127985,127995,127998,128001,128005,128030,128034,128037,128040,128043,128046,128049,128053,128056,128059,128101,128104,128130,128136,128139,128143,128147,128153,128156,128159,128162,128165,128168,128171,128216,128220,128223,128226,128230,128234,128263,128266,128271,128274,128277,128280,128283,128287,128291,128294,128296,128299,128303,128306,128310,128313,128316,128319,128323,128327,128333,128343,128346,128349,128352,128355,128358,128481,128489,128497,128535],[10,127913,127909],{"id":127914},"_7-css引入方式与选择器进阶",[14,127916,127918],{"id":127917},"_71-css引入方式","7.1 css引入方式",[114,127920,127922],{"id":127921},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[48,127924,127926],{"className":364,"code":127925,"language":366,"meta":53,"style":53},"\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n",[55,127927,127928,127936,127943,127955,127968,127973],{"__ignoreMap":53},[58,127929,127930,127932,127934],{"class":60,"line":61},[58,127931,373],{"class":75},[58,127933,702],{"class":71},[58,127935,403],{"class":75},[58,127937,127938,127941],{"class":60,"line":68},[58,127939,127940],{"class":71},"  h1",[58,127942,76],{"class":75},[58,127944,127945,127948,127950,127953],{"class":60,"line":79},[58,127946,127947],{"class":82},"    color",[58,127949,86],{"class":75},[58,127951,127952],{"class":82},"blue",[58,127954,102],{"class":75},[58,127956,127957,127960,127962,127964,127966],{"class":60,"line":105},[58,127958,127959],{"class":82},"    font-size",[58,127961,86],{"class":75},[58,127963,1585],{"class":82},[58,127965,93],{"class":92},[58,127967,102],{"class":75},[58,127969,127970],{"class":60,"line":627},[58,127971,127972],{"class":75},"  }\n",[58,127974,127975,127977,127979],{"class":60,"line":509},[58,127976,52423],{"class":75},[58,127978,702],{"class":71},[58,127980,403],{"class":75},[175,127982,127983,27117],{},[25,127984,127266],{},[175,127986,77857,127987,127990,127991,127994],{},[55,127988,127989],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[55,127992,127993],{},"\u003Chead>","标签中",[175,127996,127997],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[175,127999,128000],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[114,128002,128004],{"id":128003},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[48,128006,128008],{"className":364,"code":128007,"language":366,"meta":53,"style":53},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[55,128009,128010],{"__ignoreMap":53},[58,128011,128012,128014,128016,128018,128020,128023,128026,128028],{"class":60,"line":61},[58,128013,373],{"class":75},[58,128015,175],{"class":71},[58,128017,63258],{"class":379},[58,128019,383],{"class":75},[58,128021,128022],{"class":386},"\"color: red; font-size: 16px;\"",[58,128024,128025],{"class":75},">这是一个段落\u003C\u002F",[58,128027,175],{"class":71},[58,128029,403],{"class":75},[175,128031,128032,27117],{},[25,128033,127266],{},[175,128035,128036],{},"①style其实就是标签的属性",[175,128038,128039],{},"②在双引号中间，写法要符合css规范",[175,128041,128042],{},"③可以控制当前的标签设置样式",[175,128044,128045],{},"④书写繁琐，简单时才用",[175,128047,128048],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[114,128050,128052],{"id":128051},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[175,128054,128055],{},"使用最多，单独建一个css文件，然后html引用",[175,128057,128058],{},"①css文件部分： style.css",[48,128060,128062],{"className":50,"code":128061,"language":52,"meta":53,"style":53},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[55,128063,128064,128069,128075,128085,128097],{"__ignoreMap":53},[58,128065,128066],{"class":60,"line":61},[58,128067,128068],{"class":64},"\u002F* style.css *\u002F\n",[58,128070,128071,128073],{"class":60,"line":68},[58,128072,10],{"class":71},[58,128074,76],{"class":75},[58,128076,128077,128079,128081,128083],{"class":60,"line":79},[58,128078,71536],{"class":82},[58,128080,86],{"class":75},[58,128082,127952],{"class":82},[58,128084,102],{"class":75},[58,128086,128087,128089,128091,128093,128095],{"class":60,"line":105},[58,128088,71258],{"class":82},[58,128090,86],{"class":75},[58,128092,1585],{"class":82},[58,128094,93],{"class":92},[58,128096,102],{"class":75},[58,128098,128099],{"class":60,"line":627},[58,128100,108],{"class":75},[175,128102,128103],{},"②html部分",[48,128105,128107],{"className":364,"code":128106,"language":366,"meta":53,"style":53},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[55,128108,128109],{"__ignoreMap":53},[58,128110,128111,128113,128115,128117,128119,128121,128123,128125,128128],{"class":60,"line":61},[58,128112,373],{"class":75},[58,128114,69637],{"class":71},[58,128116,69640],{"class":379},[58,128118,383],{"class":75},[58,128120,69645],{"class":386},[58,128122,380],{"class":379},[58,128124,383],{"class":75},[58,128126,128127],{"class":386},"\"style.css\"",[58,128129,403],{"class":75},[175,128131,128132,128135],{},[55,128133,128134],{},"\u003Chr>","水平线标签（但是不常用！）",[175,128137,128138],{},"ctrl+0回到页面原来大小",[14,128140,128142],{"id":128141},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[114,128144,128146],{"id":128145},"_721-快速生成html","7.2.1 快速生成html",[175,128148,128149,128150],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[55,128151,128152],{},"\u003Cdiv>``\u003C\u002Fdiv>",[175,128154,128155],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[175,128157,128158],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[175,128160,128161],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[175,128163,128164],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[175,128166,128167],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[175,128169,128170],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[48,128172,128174],{"className":364,"code":128173,"language":366,"meta":53,"style":53},"\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",[55,128175,128176,128181,128186,128191,128196,128201,128206,128211],{"__ignoreMap":53},[58,128177,128178],{"class":60,"line":61},[58,128179,128180],{"class":64},"\u003C!-- Emmet 语法示例 -->\n",[58,128182,128183],{"class":60,"line":68},[58,128184,128185],{"class":64},"\u003C!-- div*3        → 生成3个div -->\n",[58,128187,128188],{"class":60,"line":79},[58,128189,128190],{"class":64},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[58,128192,128193],{"class":60,"line":105},[58,128194,128195],{"class":64},"\u003C!-- div+p        → 兄弟div和p -->\n",[58,128197,128198],{"class":60,"line":627},[58,128199,128200],{"class":64},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[58,128202,128203],{"class":60,"line":509},[58,128204,128205],{"class":64},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[58,128207,128208],{"class":60,"line":559},[58,128209,128210],{"class":64},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[58,128212,128213],{"class":60,"line":654},[58,128214,128215],{"class":64},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[114,128217,128219],{"id":128218},"_722-快速生成css","7.2.2 快速生成css",[175,128221,128222],{},"简写开头",[175,128224,128225],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,128227,128229],{"id":128228},"_73-css复合选择器","7.3 css复合选择器",[114,128231,128233],{"id":128232},"_731-后代选择器","7.3.1 后代选择器",[48,128235,128237],{"className":50,"code":128236,"language":52,"meta":53,"style":53},".parent .child {\n  color: blue;\n}\n",[55,128238,128239,128249,128259],{"__ignoreMap":53},[58,128240,128241,128244,128247],{"class":60,"line":61},[58,128242,128243],{"class":379},".parent",[58,128245,128246],{"class":379}," .child",[58,128248,76],{"class":75},[58,128250,128251,128253,128255,128257],{"class":60,"line":68},[58,128252,71536],{"class":82},[58,128254,86],{"class":75},[58,128256,127952],{"class":82},[58,128258,102],{"class":75},[58,128260,128261],{"class":60,"line":79},[58,128262,108],{"class":75},[175,128264,128265],{},"元素1 元素2 {样式声明}",[175,128267,128268],{},[25,128269,128270],{},"注意点:",[175,128272,128273],{},"①元素1和元素2中间用空格隔开",[175,128275,128276],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[175,128278,128279],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[175,128281,128282],{},"④元素1和元素2可以是任意基础选择器",[114,128284,128286],{"id":128285},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[175,128288,128289],{},[25,128290,128270],{},[175,128292,128293],{},"①元素1和元素2中间用大于号隔开",[175,128295,128276],{},[175,128297,128298],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[114,128300,128302],{"id":128301},"_733-并集选择器","7.3.3 并集选择器",[175,128304,128305],{},"元素1，元素2 {样式声明}",[175,128307,128308],{},[25,128309,128270],{},[175,128311,128312],{},"①元素1和元素2中间用逗号隔开",[175,128314,128315],{},"②逗号可以理解为和的意思",[175,128317,128318],{},"③并集选择器通常用于集体声明",[114,128320,128322],{"id":128321},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[175,128324,128325],{},[25,128326,128270],{},[175,128328,128329,128330,128332],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69637,128331],{},"－:visited－:hover－:active。",[175,128334,128335,128336,128339,128340,26384],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128337,128338],"hover",{}," 、 ",[128341,128342],"first-child",{},[175,128344,128345],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[175,128347,128348],{},"link对没访问的进行设置",[175,128350,128351],{},"vistied对已访问的进行改变",[175,128353,128354],{},"hover鼠标经过就会变",[175,128356,128357],{},"active常按(点)就会变",[48,128359,128361],{"className":50,"code":128360,"language":52,"meta":53,"style":53},"\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",[55,128362,128363,128368,128377,128387,128397,128401,128410,128421,128425,128433,128443,128453,128457,128466,128477],{"__ignoreMap":53},[58,128364,128365],{"class":60,"line":61},[58,128366,128367],{"class":64},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[58,128369,128370,128372,128375],{"class":60,"line":68},[58,128371,376],{"class":71},[58,128373,128374],{"class":379},":link",[58,128376,76],{"class":75},[58,128378,128379,128381,128383,128385],{"class":60,"line":79},[58,128380,71536],{"class":82},[58,128382,86],{"class":75},[58,128384,63001],{"class":82},[58,128386,102],{"class":75},[58,128388,128389,128391,128393,128395],{"class":60,"line":105},[58,128390,71134],{"class":82},[58,128392,86],{"class":75},[58,128394,55373],{"class":82},[58,128396,102],{"class":75},[58,128398,128399],{"class":60,"line":627},[58,128400,108],{"class":75},[58,128402,128403,128405,128408],{"class":60,"line":509},[58,128404,376],{"class":71},[58,128406,128407],{"class":379},":visited",[58,128409,76],{"class":75},[58,128411,128412,128414,128416,128419],{"class":60,"line":559},[58,128413,71536],{"class":82},[58,128415,86],{"class":75},[58,128417,128418],{"class":82},"purple",[58,128420,102],{"class":75},[58,128422,128423],{"class":60,"line":654},[58,128424,108],{"class":75},[58,128426,128427,128429,128431],{"class":60,"line":671},[58,128428,376],{"class":71},[58,128430,61573],{"class":379},[58,128432,76],{"class":75},[58,128434,128435,128437,128439,128441],{"class":60,"line":677},[58,128436,71536],{"class":82},[58,128438,86],{"class":75},[58,128440,55523],{"class":82},[58,128442,102],{"class":75},[58,128444,128445,128447,128449,128451],{"class":60,"line":2260},[58,128446,71134],{"class":82},[58,128448,86],{"class":75},[58,128450,127792],{"class":82},[58,128452,102],{"class":75},[58,128454,128455],{"class":60,"line":694},[58,128456,108],{"class":75},[58,128458,128459,128461,128464],{"class":60,"line":2270},[58,128460,376],{"class":71},[58,128462,128463],{"class":379},":active",[58,128465,76],{"class":75},[58,128467,128468,128470,128472,128475],{"class":60,"line":2275},[58,128469,71536],{"class":82},[58,128471,86],{"class":75},[58,128473,128474],{"class":82},"green",[58,128476,102],{"class":75},[58,128478,128479],{"class":60,"line":2289},[58,128480,108],{"class":75},[114,128482,128484,128485,128488],{"id":128483},"_735-伪类选择器","7.3.5 ",[128486,128487],"focus",{},"伪类选择器",[175,128490,128491,128493,128494,128496],{},[128486,128492],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[55,128495,127239],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[48,128498,128500],{"className":50,"code":128499,"language":52,"meta":53,"style":53},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[55,128501,128502,128510,128521,128531],{"__ignoreMap":53},[58,128503,128504,128506,128508],{"class":60,"line":61},[58,128505,54457],{"class":71},[58,128507,62532],{"class":379},[58,128509,76],{"class":75},[58,128511,128512,128515,128517,128519],{"class":60,"line":68},[58,128513,128514],{"class":82},"  border-color",[58,128516,86],{"class":75},[58,128518,55523],{"class":82},[58,128520,102],{"class":75},[58,128522,128523,128525,128527,128529],{"class":60,"line":79},[58,128524,71430],{"class":82},[58,128526,86],{"class":75},[58,128528,55373],{"class":82},[58,128530,102],{"class":75},[58,128532,128533],{"class":60,"line":105},[58,128534,108],{"class":75},[702,128536,128537],{},"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":53,"searchDepth":68,"depth":68,"links":128539},[128540,128545,128549],{"id":127917,"depth":68,"text":127918,"children":128541},[128542,128543,128544],{"id":127921,"depth":79,"text":127922},{"id":128003,"depth":79,"text":128004},{"id":128051,"depth":79,"text":128052},{"id":128141,"depth":68,"text":128142,"children":128546},[128547,128548],{"id":128145,"depth":79,"text":128146},{"id":128218,"depth":79,"text":128219},{"id":128228,"depth":68,"text":128229,"children":128550},[128551,128552,128553,128554,128555],{"id":128232,"depth":79,"text":128233},{"id":128285,"depth":79,"text":128286},{"id":128301,"depth":79,"text":128302},{"id":128321,"depth":79,"text":128322},{"id":128483,"depth":79,"text":128556},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127909,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128563,"title":128564,"body":128565,"description":717,"extension":718,"meta":130485,"navigation":720,"path":130486,"seo":130487,"stem":130488,"__hash__":130489},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128566,"toc":130459},[128567,128570,128574,128583,128587,128613,128618,128621,128624,128627,128630,128634,128637,128647,128655,128659,128694,128699,128702,128705,128708,128711,128715,128718,128727,128731,128744,128749,128752,128755,128758,128762,128765,128769,128772,128826,128829,128860,128863,128917,128921,128924,129090,129213,129216,129219,129222,129225,129229,129232,129236,129239,129242,129246,129249,129280,129307,129335,129338,129342,129368,129411,129415,129509,129512,129538,129541,129544,129547,129550,129553,129556,129559,129562,129565,129569,129626,129653,129657,129705,129709,129750,129752,129755,129758,129761,129764,129768,129860,129863,129866,129869,129873,129996,130196,130200,130204,130207,130210,130213,130217,130220,130223,130248,130251,130254,130257,130260,130263,130267,130275,130337,130340,130398,130401,130404,130407,130410,130413,130416,130419,130456],[10,128568,128564],{"id":128569},"_8-css显示模式与背景特性",[14,128571,128573],{"id":128572},"_81-css元素显示模式","8.1 css元素显示模式",[175,128575,128576,128577,128579,128580,128582],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[55,128578,126792],{},"自己占一行，比如一行可以放多个",[55,128581,126795],{},"，HTML 元素一般分为块元素和行内元素两种类型",[114,128584,128586],{"id":128585},"_811-块元素","8.1.1 块元素",[175,128588,128589,128590,128592,128593,1000,128596,1000,128598,1000,128600,1000,128603,1000,128606,128609,128610,128612],{},"常见的块元素有",[55,128591,126696],{},"~",[55,128594,128595],{},"\u003Ch6>",[55,128597,126722],{},[55,128599,126792],{},[55,128601,128602],{},"\u003Cul>",[55,128604,128605],{},"\u003Col>",[55,128607,128608],{},"\u003Cli>","等，其中 ",[55,128611,126792],{}," 标签是最典型的块元素",[175,128614,128615],{},[25,128616,128617],{},"块级元素的特点：",[175,128619,128620],{},"① 比较霸道，自己独占一行。",[175,128622,128623],{},"② 高度，宽度、外边距以及内边距都可以控制。",[175,128625,128626],{},"③ 宽度默认是容器（父级宽度）的100%。",[175,128628,128629],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[175,128631,128632],{},[25,128633,822],{},[175,128635,128636],{},"①文字类的元素内不能使用块级元素",[175,128638,77880,128639,128641,128642,128644,128645],{},[55,128640,126722],{}," 标签主要用于存放文字，因此 ",[55,128643,126722],{}," 里面不能放块级元素，特别是不能放",[55,128646,126792],{},[175,128648,128649,128650,128592,128652,128654],{},"⑥同理， ",[55,128651,126696],{},[55,128653,128595],{},"等都是文字类块级标签，里面也不能放其他块级元素",[114,128656,128658],{"id":128657},"_812-行内元素","8.1.2 行内元素",[175,128660,128661,128662,1000,128664,1000,128667,1000,128670,1000,128673,1000,128676,1000,128679,1000,128682,1000,128685,1000,128688,128690,128691,128693],{},"常见的行内元素有 ",[55,128663,126954],{},[55,128665,128666],{},"\u003Cstrong>",[55,128668,128669],{},"\u003Cb>",[55,128671,128672],{},"\u003Cem>",[55,128674,128675],{},"\u003Ci>",[55,128677,128678],{},"\u003Cdel>",[55,128680,128681],{},"\u003Cs>",[55,128683,128684],{},"\u003Cins>",[55,128686,128687],{},"\u003Cu>",[55,128689,126795],{}," 等，其中 ",[55,128692,126795],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[175,128695,128696],{},[25,128697,128698],{},"特点：",[175,128700,128701],{},"① 相邻行内元素在一行上，一行可以显示多个。",[175,128703,128704],{},"② 高、宽直接设置是无效的。",[175,128706,128707],{},"③ 默认宽度就是它本身内容的宽度。",[175,128709,128710],{},"④ 行内元素只能容纳文本或其他行内元素。",[175,128712,128713],{},[25,128714,822],{},[175,128716,128717],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[175,128719,128720,128721,128723,128724,128726],{},"②特殊情况链接 ",[55,128722,126954],{}," 里面可以放块级元素，但是给 ",[55,128725,126954],{}," 转换一下块级模式最安全",[114,128728,128730],{"id":128729},"_813-行内块元素","8.1.3 行内块元素",[175,128732,128733,128734,1000,128737,1000,128740,128743],{},"在行内元素中有几个特殊的标签 —— ",[55,128735,128736],{},"\u003Cimg \u002F>",[55,128738,128739],{},"\u003Cinput \u002F>",[55,128741,128742],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[175,128745,128746],{},[25,128747,128748],{},"行内块元素的特点：",[175,128750,128751],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[175,128753,128754],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[175,128756,128757],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[114,128759,128761],{"id":128760},"_814-总结","8.1.4 总结",[119,128763],{"style":121,"src":128764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[114,128766,128768],{"id":128767},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[175,128770,128771],{},"①转换为块元素：display:block;",[48,128773,128775],{"className":50,"code":128774,"language":52,"meta":53,"style":53},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[55,128776,128777,128782,128788,128798,128810,128822],{"__ignoreMap":53},[58,128778,128779],{"class":60,"line":61},[58,128780,128781],{"class":64},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[58,128783,128784,128786],{"class":60,"line":68},[58,128785,376],{"class":71},[58,128787,76],{"class":75},[58,128789,128790,128792,128794,128796],{"class":60,"line":79},[58,128791,495],{"class":82},[58,128793,86],{"class":75},[58,128795,500],{"class":82},[58,128797,102],{"class":75},[58,128799,128800,128802,128804,128806,128808],{"class":60,"line":105},[58,128801,71200],{"class":82},[58,128803,86],{"class":75},[58,128805,1097],{"class":82},[58,128807,93],{"class":92},[58,128809,102],{"class":75},[58,128811,128812,128814,128816,128818,128820],{"class":60,"line":627},[58,128813,71420],{"class":82},[58,128815,86],{"class":75},[58,128817,1187],{"class":82},[58,128819,93],{"class":92},[58,128821,102],{"class":75},[58,128823,128824],{"class":60,"line":509},[58,128825,108],{"class":75},[175,128827,128828],{},"②转换为行内元素：display:inline;",[48,128830,128832],{"className":50,"code":128831,"language":52,"meta":53,"style":53},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[55,128833,128834,128839,128845,128856],{"__ignoreMap":53},[58,128835,128836],{"class":60,"line":61},[58,128837,128838],{"class":64},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[58,128840,128841,128843],{"class":60,"line":68},[58,128842,72],{"class":71},[58,128844,76],{"class":75},[58,128846,128847,128849,128851,128854],{"class":60,"line":79},[58,128848,495],{"class":82},[58,128850,86],{"class":75},[58,128852,128853],{"class":82},"inline",[58,128855,102],{"class":75},[58,128857,128858],{"class":60,"line":105},[58,128859,108],{"class":75},[175,128861,128862],{},"③转换为行内块：display:inline-block;",[48,128864,128866],{"className":50,"code":128865,"language":52,"meta":53,"style":53},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[55,128867,128868,128873,128879,128889,128901,128913],{"__ignoreMap":53},[58,128869,128870],{"class":60,"line":61},[58,128871,128872],{"class":64},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[58,128874,128875,128877],{"class":60,"line":68},[58,128876,58],{"class":71},[58,128878,76],{"class":75},[58,128880,128881,128883,128885,128887],{"class":60,"line":79},[58,128882,495],{"class":82},[58,128884,86],{"class":75},[58,128886,73014],{"class":82},[58,128888,102],{"class":75},[58,128890,128891,128893,128895,128897,128899],{"class":60,"line":105},[58,128892,71200],{"class":82},[58,128894,86],{"class":75},[58,128896,1398],{"class":82},[58,128898,93],{"class":92},[58,128900,102],{"class":75},[58,128902,128903,128905,128907,128909,128911],{"class":60,"line":627},[58,128904,71420],{"class":82},[58,128906,86],{"class":75},[58,128908,1735],{"class":82},[58,128910,93],{"class":92},[58,128912,102],{"class":75},[58,128914,128915],{"class":60,"line":509},[58,128916,108],{"class":75},[114,128918,128920],{"id":128919},"_816-小米侧边栏","8.1.6 小米侧边栏",[119,128922],{"style":121,"src":128923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[48,128925,128927],{"className":364,"code":128926,"language":366,"meta":53,"style":53},"\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",[55,128928,128929,128934,128949,128968,128987,129006,129025,129044,129063,129082],{"__ignoreMap":53},[58,128930,128931],{"class":60,"line":61},[58,128932,128933],{"class":64},"\u003C!-- 小米侧边栏案例 -->\n",[58,128935,128936,128938,128940,128942,128944,128947],{"class":60,"line":68},[58,128937,373],{"class":75},[58,128939,72],{"class":71},[58,128941,54124],{"class":379},[58,128943,383],{"class":75},[58,128945,128946],{"class":386},"\"sidebar\"",[58,128948,403],{"class":75},[58,128950,128951,128953,128955,128957,128959,128961,128964,128966],{"class":60,"line":79},[58,128952,52782],{"class":75},[58,128954,376],{"class":71},[58,128956,380],{"class":379},[58,128958,383],{"class":75},[58,128960,61694],{"class":386},[58,128962,128963],{"class":75},">手机 电话卡\u003C\u002F",[58,128965,376],{"class":71},[58,128967,403],{"class":75},[58,128969,128970,128972,128974,128976,128978,128980,128983,128985],{"class":60,"line":105},[58,128971,52782],{"class":75},[58,128973,376],{"class":71},[58,128975,380],{"class":379},[58,128977,383],{"class":75},[58,128979,61694],{"class":386},[58,128981,128982],{"class":75},">电视 盒子\u003C\u002F",[58,128984,376],{"class":71},[58,128986,403],{"class":75},[58,128988,128989,128991,128993,128995,128997,128999,129002,129004],{"class":60,"line":627},[58,128990,52782],{"class":75},[58,128992,376],{"class":71},[58,128994,380],{"class":379},[58,128996,383],{"class":75},[58,128998,61694],{"class":386},[58,129000,129001],{"class":75},">笔记本 平板\u003C\u002F",[58,129003,376],{"class":71},[58,129005,403],{"class":75},[58,129007,129008,129010,129012,129014,129016,129018,129021,129023],{"class":60,"line":509},[58,129009,52782],{"class":75},[58,129011,376],{"class":71},[58,129013,380],{"class":379},[58,129015,383],{"class":75},[58,129017,61694],{"class":386},[58,129019,129020],{"class":75},">出行 穿戴\u003C\u002F",[58,129022,376],{"class":71},[58,129024,403],{"class":75},[58,129026,129027,129029,129031,129033,129035,129037,129040,129042],{"class":60,"line":559},[58,129028,52782],{"class":75},[58,129030,376],{"class":71},[58,129032,380],{"class":379},[58,129034,383],{"class":75},[58,129036,61694],{"class":386},[58,129038,129039],{"class":75},">智能 路由器\u003C\u002F",[58,129041,376],{"class":71},[58,129043,403],{"class":75},[58,129045,129046,129048,129050,129052,129054,129056,129059,129061],{"class":60,"line":654},[58,129047,52782],{"class":75},[58,129049,376],{"class":71},[58,129051,380],{"class":379},[58,129053,383],{"class":75},[58,129055,61694],{"class":386},[58,129057,129058],{"class":75},">健康 儿童\u003C\u002F",[58,129060,376],{"class":71},[58,129062,403],{"class":75},[58,129064,129065,129067,129069,129071,129073,129075,129078,129080],{"class":60,"line":671},[58,129066,52782],{"class":75},[58,129068,376],{"class":71},[58,129070,380],{"class":379},[58,129072,383],{"class":75},[58,129074,61694],{"class":386},[58,129076,129077],{"class":75},">耳机 音响\u003C\u002F",[58,129079,376],{"class":71},[58,129081,403],{"class":75},[58,129083,129084,129086,129088],{"class":60,"line":677},[58,129085,52423],{"class":75},[58,129087,72],{"class":71},[58,129089,403],{"class":75},[48,129091,129093],{"className":50,"code":129092,"language":52,"meta":53,"style":53},".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",[55,129094,129095,129104,129114,129127,129139,129151,129163,129173,129184,129188,129198,129209],{"__ignoreMap":53},[58,129096,129097,129100,129102],{"class":60,"line":61},[58,129098,129099],{"class":379},".sidebar",[58,129101,2048],{"class":71},[58,129103,76],{"class":75},[58,129105,129106,129108,129110,129112],{"class":60,"line":68},[58,129107,495],{"class":82},[58,129109,86],{"class":75},[58,129111,500],{"class":82},[58,129113,102],{"class":75},[58,129115,129116,129118,129120,129123,129125],{"class":60,"line":79},[58,129117,71200],{"class":82},[58,129119,86],{"class":75},[58,129121,129122],{"class":82},"234",[58,129124,93],{"class":92},[58,129126,102],{"class":75},[58,129128,129129,129131,129133,129135,129137],{"class":60,"line":105},[58,129130,71420],{"class":82},[58,129132,86],{"class":75},[58,129134,1238],{"class":82},[58,129136,93],{"class":92},[58,129138,102],{"class":75},[58,129140,129141,129143,129145,129147,129149],{"class":60,"line":627},[58,129142,127862],{"class":82},[58,129144,86],{"class":75},[58,129146,1238],{"class":82},[58,129148,93],{"class":92},[58,129150,102],{"class":75},[58,129152,129153,129155,129157,129159,129161],{"class":60,"line":509},[58,129154,71455],{"class":82},[58,129156,86],{"class":75},[58,129158,1735],{"class":82},[58,129160,93],{"class":92},[58,129162,102],{"class":75},[58,129164,129165,129167,129169,129171],{"class":60,"line":559},[58,129166,71536],{"class":82},[58,129168,86],{"class":75},[58,129170,61476],{"class":82},[58,129172,102],{"class":75},[58,129174,129175,129177,129179,129182],{"class":60,"line":654},[58,129176,71510],{"class":82},[58,129178,86],{"class":75},[58,129180,129181],{"class":82},"#55585a",[58,129183,102],{"class":75},[58,129185,129186],{"class":60,"line":671},[58,129187,108],{"class":75},[58,129189,129190,129192,129194,129196],{"class":60,"line":677},[58,129191,129099],{"class":379},[58,129193,2048],{"class":71},[58,129195,61573],{"class":379},[58,129197,76],{"class":75},[58,129199,129200,129202,129204,129207],{"class":60,"line":2260},[58,129201,71510],{"class":82},[58,129203,86],{"class":75},[58,129205,129206],{"class":82},"#ff6700",[58,129208,102],{"class":75},[58,129210,129211],{"class":60,"line":694},[58,129212,108],{"class":75},[119,129214],{"style":121,"src":129215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[175,129217,129218],{},"行高=盒子高度：实现文字的垂直居中",[175,129220,129221],{},"原理讲解：",[119,129223],{"style":121,"src":129224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,129226,129228],{"id":129227},"_82-css背景","8.2 css背景",[175,129230,129231],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[114,129233,129235],{"id":129234},"_821-背景颜色","8.2.1 背景颜色",[175,129237,129238],{},"background-color:颜色值;",[175,129240,129241],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[114,129243,129245],{"id":129244},"_822-背景图片","8.2.2 背景图片",[175,129247,129248],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[48,129250,129252],{"className":50,"code":129251,"language":52,"meta":53,"style":53},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[55,129253,129254,129260,129276],{"__ignoreMap":53},[58,129255,129256,129258],{"class":60,"line":61},[58,129257,72],{"class":71},[58,129259,76],{"class":75},[58,129261,129262,129265,129267,129269,129271,129274],{"class":60,"line":68},[58,129263,129264],{"class":82},"  background-image",[58,129266,86],{"class":75},[58,129268,62358],{"class":82},[58,129270,793],{"class":75},[58,129272,129273],{"class":5862},"images\u002Fbg.png",[58,129275,3365],{"class":75},[58,129277,129278],{"class":60,"line":79},[58,129279,108],{"class":75},[926,129281,129282,129291],{},[929,129283,129284],{},[932,129285,129286,129289],{},[935,129287,129288],{"align":24379},"参数值",[935,129290,103325],{"align":24379},[972,129292,129293,129300],{},[932,129294,129295,129297],{},[977,129296,55373],{"align":24379},[977,129298,129299],{"align":24379},"无背景图（默认的）",[932,129301,129302,129304],{},[977,129303,62358],{"align":24379},[977,129305,129306],{"align":24379},"使用绝对或相对地址指定背景图像",[48,129308,129309],{"className":50,"code":129251,"language":52,"meta":53,"style":53},[55,129310,129311,129317,129331],{"__ignoreMap":53},[58,129312,129313,129315],{"class":60,"line":61},[58,129314,72],{"class":71},[58,129316,76],{"class":75},[58,129318,129319,129321,129323,129325,129327,129329],{"class":60,"line":68},[58,129320,129264],{"class":82},[58,129322,86],{"class":75},[58,129324,62358],{"class":82},[58,129326,793],{"class":75},[58,129328,129273],{"class":5862},[58,129330,3365],{"class":75},[58,129332,129333],{"class":60,"line":79},[58,129334,108],{"class":75},[175,129336,129337],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[114,129339,129341],{"id":129340},"_823-背景平铺","8.2.3 背景平铺",[48,129343,129345],{"className":50,"code":129344,"language":52,"meta":53,"style":53},"div {\n  background-repeat: no-repeat;\n}\n",[55,129346,129347,129353,129364],{"__ignoreMap":53},[58,129348,129349,129351],{"class":60,"line":61},[58,129350,72],{"class":71},[58,129352,76],{"class":75},[58,129354,129355,129358,129360,129362],{"class":60,"line":68},[58,129356,129357],{"class":82},"  background-repeat",[58,129359,86],{"class":75},[58,129361,62368],{"class":82},[58,129363,102],{"class":75},[58,129365,129366],{"class":60,"line":79},[58,129367,108],{"class":75},[926,129369,129370,129378],{},[929,129371,129372],{},[932,129373,129374,129376],{},[935,129375,129288],{"align":24379},[935,129377,103325],{"align":24379},[972,129379,129380,129388,129395,129403],{},[932,129381,129382,129385],{},[977,129383,129384],{"align":24379},"repeat",[977,129386,129387],{"align":24379},"背景图像在纵向和横向上平铺（默认的）",[932,129389,129390,129392],{},[977,129391,62368],{"align":24379},[977,129393,129394],{"align":24379},"背景图像不平铺",[932,129396,129397,129400],{},[977,129398,129399],{"align":24379},"repeat-x",[977,129401,129402],{"align":24379},"背景图像在横向上平铺",[932,129404,129405,129408],{},[977,129406,129407],{"align":24379},"repeat-y",[977,129409,129410],{"align":24379},"背景图像在纵向平铺",[114,129412,129414],{"id":129413},"_824-背景图片位置","8.2.4 背景图片位置",[48,129416,129418],{"className":50,"code":129417,"language":52,"meta":53,"style":53},"\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",[55,129419,129420,129425,129431,129445,129449,129454,129460,129476,129480,129485,129491,129505],{"__ignoreMap":53},[58,129421,129422],{"class":60,"line":61},[58,129423,129424],{"class":64},"\u002F* 方位名词 *\u002F\n",[58,129426,129427,129429],{"class":60,"line":68},[58,129428,72],{"class":71},[58,129430,76],{"class":75},[58,129432,129433,129436,129438,129440,129443],{"class":60,"line":79},[58,129434,129435],{"class":82},"  background-position",[58,129437,86],{"class":75},[58,129439,52231],{"class":82},[58,129441,129442],{"class":82}," top",[58,129444,102],{"class":75},[58,129446,129447],{"class":60,"line":105},[58,129448,108],{"class":75},[58,129450,129451],{"class":60,"line":627},[58,129452,129453],{"class":64},"\u002F* 精确单位 *\u002F\n",[58,129455,129456,129458],{"class":60,"line":509},[58,129457,72],{"class":71},[58,129459,76],{"class":75},[58,129461,129462,129464,129466,129468,129470,129472,129474],{"class":60,"line":559},[58,129463,129435],{"class":82},[58,129465,86],{"class":75},[58,129467,1486],{"class":82},[58,129469,93],{"class":92},[58,129471,58138],{"class":82},[58,129473,93],{"class":92},[58,129475,102],{"class":75},[58,129477,129478],{"class":60,"line":654},[58,129479,108],{"class":75},[58,129481,129482],{"class":60,"line":671},[58,129483,129484],{"class":64},"\u002F* 混合单位 *\u002F\n",[58,129486,129487,129489],{"class":60,"line":677},[58,129488,72],{"class":71},[58,129490,76],{"class":75},[58,129492,129493,129495,129497,129499,129501,129503],{"class":60,"line":2260},[58,129494,129435],{"class":82},[58,129496,86],{"class":75},[58,129498,1486],{"class":82},[58,129500,93],{"class":92},[58,129502,17787],{"class":82},[58,129504,102],{"class":75},[58,129506,129507],{"class":60,"line":694},[58,129508,108],{"class":75},[175,129510,129511],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[926,129513,129514,129522],{},[929,129515,129516],{},[932,129517,129518,129520],{},[935,129519,129288],{"align":24379},[935,129521,26513],{"align":24379},[972,129523,129524,129531],{},[932,129525,129526,129528],{},[977,129527,52606],{"align":24379},[977,129529,129530],{"align":24379},"百分数|由浮点数和单位标识符组成的长度值",[932,129532,129533,129535],{},[977,129534,595],{"align":24379},[977,129536,129537],{"align":24379},"top|center|bottom|left|center|right 方位名词",[175,129539,129540],{},"其他说明：",[175,129542,129543],{},"①参数是方位名词",[175,129545,129546],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[175,129548,129549],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[175,129551,129552],{},"②参数是精确单位",[175,129554,129555],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[175,129557,129558],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[175,129560,129561],{},"③参数是混合单位",[175,129563,129564],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[114,129566,129568],{"id":129567},"_825-背景图片固定","8.2.5 背景图片固定",[48,129570,129572],{"className":50,"code":129571,"language":52,"meta":53,"style":53},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[55,129573,129574,129579,129585,129597,129601,129606,129612,129622],{"__ignoreMap":53},[58,129575,129576],{"class":60,"line":61},[58,129577,129578],{"class":64},"\u002F* 背景滚动（默认） *\u002F\n",[58,129580,129581,129583],{"class":60,"line":68},[58,129582,72],{"class":71},[58,129584,76],{"class":75},[58,129586,129587,129590,129592,129595],{"class":60,"line":79},[58,129588,129589],{"class":82},"  background-attachment",[58,129591,86],{"class":75},[58,129593,129594],{"class":82},"scroll",[58,129596,102],{"class":75},[58,129598,129599],{"class":60,"line":105},[58,129600,108],{"class":75},[58,129602,129603],{"class":60,"line":627},[58,129604,129605],{"class":64},"\u002F* 背景固定 *\u002F\n",[58,129607,129608,129610],{"class":60,"line":509},[58,129609,72],{"class":71},[58,129611,76],{"class":75},[58,129613,129614,129616,129618,129620],{"class":60,"line":559},[58,129615,129589],{"class":82},[58,129617,86],{"class":75},[58,129619,666],{"class":82},[58,129621,102],{"class":75},[58,129623,129624],{"class":60,"line":654},[58,129625,108],{"class":75},[926,129627,129628,129637],{},[929,129629,129630],{},[932,129631,129632,129635],{},[935,129633,129634],{"align":24379},"参数",[935,129636,103325],{"align":24379},[972,129638,129639,129646],{},[932,129640,129641,129643],{},[977,129642,129594],{"align":24379},[977,129644,129645],{"align":24379},"背景图像是随对象内容滚动",[932,129647,129648,129650],{},[977,129649,666],{"align":24379},[977,129651,129652],{"align":24379},"背景图像固定",[114,129654,129656],{"id":129655},"_826-背景样式合写","8.2.6 背景样式合写",[48,129658,129660],{"className":50,"code":129659,"language":52,"meta":53,"style":53},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[55,129661,129662,129667,129673,129701],{"__ignoreMap":53},[58,129663,129664],{"class":60,"line":61},[58,129665,129666],{"class":64},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[58,129668,129669,129671],{"class":60,"line":68},[58,129670,72],{"class":71},[58,129672,76],{"class":75},[58,129674,129675,129677,129679,129681,129684,129686,129688,129690,129692,129695,129697,129699],{"class":60,"line":79},[58,129676,71243],{"class":82},[58,129678,86],{"class":75},[58,129680,61476],{"class":82},[58,129682,129683],{"class":82}," url",[58,129685,793],{"class":75},[58,129687,129273],{"class":5862},[58,129689,14358],{"class":75},[58,129691,62368],{"class":82},[58,129693,129694],{"class":82}," fixed",[58,129696,17787],{"class":82},[58,129698,129442],{"class":82},[58,129700,102],{"class":75},[58,129702,129703],{"class":60,"line":105},[58,129704,108],{"class":75},[114,129706,129708],{"id":129707},"_827-背景色半透明","8.2.7 背景色半透明",[48,129710,129712],{"className":50,"code":129711,"language":52,"meta":53,"style":53},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[55,129713,129714,129720,129746],{"__ignoreMap":53},[58,129715,129716,129718],{"class":60,"line":61},[58,129717,72],{"class":71},[58,129719,76],{"class":75},[58,129721,129722,129724,129726,129728,129730,129732,129734,129736,129738,129740,129742,129744],{"class":60,"line":68},[58,129723,71243],{"class":82},[58,129725,86],{"class":75},[58,129727,55744],{"class":82},[58,129729,793],{"class":75},[58,129731,979],{"class":82},[58,129733,469],{"class":75},[58,129735,979],{"class":82},[58,129737,469],{"class":75},[58,129739,979],{"class":82},[58,129741,469],{"class":75},[58,129743,101150],{"class":82},[58,129745,3365],{"class":75},[58,129747,129748],{"class":60,"line":79},[58,129749,108],{"class":75},[175,129751,100025],{},[175,129753,129754],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[175,129756,129757],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[175,129759,129760],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[175,129762,129763],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[114,129765,129767],{"id":129766},"_828-总结","8.2.8 总结",[926,129769,129770,129781],{},[929,129771,129772],{},[932,129773,129774,129777,129779],{},[935,129775,129776],{"align":24379},"属性",[935,129778,103325],{"align":24379},[935,129780,940],{"align":24379},[972,129782,129783,129794,129805,129816,129827,129838,129849],{},[932,129784,129785,129788,129791],{},[977,129786,129787],{"align":24379},"background-color",[977,129789,129790],{"align":24379},"背景颜色",[977,129792,129793],{"align":24379},"预定义的颜色值\u002F十六进制\u002FRGB代码",[932,129795,129796,129799,129802],{},[977,129797,129798],{"align":24379},"background-image",[977,129800,129801],{"align":24379},"背景图片",[977,129803,129804],{"align":24379},"url(图片路径)",[932,129806,129807,129810,129813],{},[977,129808,129809],{"align":24379},"background-repeat",[977,129811,129812],{"align":24379},"是否平铺",[977,129814,129815],{"align":24379},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[932,129817,129818,129821,129824],{},[977,129819,129820],{"align":24379},"background-position",[977,129822,129823],{"align":24379},"背景位置",[977,129825,129826],{"align":24379},"length\u002Fposition 分别是x和y坐标",[932,129828,129829,129832,129835],{},[977,129830,129831],{"align":24379},"background-attachment",[977,129833,129834],{"align":24379},"背景附着",[977,129836,129837],{"align":24379},"scroll(背景滚动) \u002Ffixed (背景固定)",[932,129839,129840,129843,129846],{},[977,129841,129842],{"align":24379},"背景简写",[977,129844,129845],{"align":24379},"书写更简单",[977,129847,129848],{"align":24379},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[932,129850,129851,129854,129857],{},[977,129852,129853],{"align":24379},"背景半透明",[977,129855,129856],{"align":24379},"背景颜色半透明",[977,129858,129859],{"align":24379},"background: rgba(0,0,0.3); 后面必须是4个值",[175,129861,129862],{},"颜色渐变：",[119,129864],{"style":121,"src":129865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[119,129867],{"style":121,"src":129868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[114,129870,129872],{"id":129871},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[48,129874,129876],{"className":364,"code":129875,"language":366,"meta":53,"style":53},"\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",[55,129877,129878,129893,129912,129931,129950,129969,129988],{"__ignoreMap":53},[58,129879,129880,129882,129884,129886,129888,129891],{"class":60,"line":61},[58,129881,373],{"class":75},[58,129883,72],{"class":71},[58,129885,54124],{"class":379},[58,129887,383],{"class":75},[58,129889,129890],{"class":386},"\"nav\"",[58,129892,403],{"class":75},[58,129894,129895,129897,129899,129901,129903,129905,129908,129910],{"class":60,"line":68},[58,129896,52782],{"class":75},[58,129898,376],{"class":71},[58,129900,380],{"class":379},[58,129902,383],{"class":75},[58,129904,61694],{"class":386},[58,129906,129907],{"class":75},">五彩导航1\u003C\u002F",[58,129909,376],{"class":71},[58,129911,403],{"class":75},[58,129913,129914,129916,129918,129920,129922,129924,129927,129929],{"class":60,"line":79},[58,129915,52782],{"class":75},[58,129917,376],{"class":71},[58,129919,380],{"class":379},[58,129921,383],{"class":75},[58,129923,61694],{"class":386},[58,129925,129926],{"class":75},">五彩导航2\u003C\u002F",[58,129928,376],{"class":71},[58,129930,403],{"class":75},[58,129932,129933,129935,129937,129939,129941,129943,129946,129948],{"class":60,"line":105},[58,129934,52782],{"class":75},[58,129936,376],{"class":71},[58,129938,380],{"class":379},[58,129940,383],{"class":75},[58,129942,61694],{"class":386},[58,129944,129945],{"class":75},">五彩导航3\u003C\u002F",[58,129947,376],{"class":71},[58,129949,403],{"class":75},[58,129951,129952,129954,129956,129958,129960,129962,129965,129967],{"class":60,"line":627},[58,129953,52782],{"class":75},[58,129955,376],{"class":71},[58,129957,380],{"class":379},[58,129959,383],{"class":75},[58,129961,61694],{"class":386},[58,129963,129964],{"class":75},">五彩导航4\u003C\u002F",[58,129966,376],{"class":71},[58,129968,403],{"class":75},[58,129970,129971,129973,129975,129977,129979,129981,129984,129986],{"class":60,"line":509},[58,129972,52782],{"class":75},[58,129974,376],{"class":71},[58,129976,380],{"class":379},[58,129978,383],{"class":75},[58,129980,61694],{"class":386},[58,129982,129983],{"class":75},">五彩导航5\u003C\u002F",[58,129985,376],{"class":71},[58,129987,403],{"class":75},[58,129989,129990,129992,129994],{"class":60,"line":559},[58,129991,52423],{"class":75},[58,129993,72],{"class":71},[58,129995,403],{"class":75},[48,129997,129999],{"className":50,"code":129998,"language":52,"meta":53,"style":53},".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",[55,130000,130001,130010,130020,130032,130044,130054,130066,130076,130080,130104,130127,130150,130173],{"__ignoreMap":53},[58,130002,130003,130006,130008],{"class":60,"line":61},[58,130004,130005],{"class":379},".nav",[58,130007,2048],{"class":71},[58,130009,76],{"class":75},[58,130011,130012,130014,130016,130018],{"class":60,"line":68},[58,130013,495],{"class":82},[58,130015,86],{"class":75},[58,130017,73014],{"class":82},[58,130019,102],{"class":75},[58,130021,130022,130024,130026,130028,130030],{"class":60,"line":79},[58,130023,71200],{"class":82},[58,130025,86],{"class":75},[58,130027,1602],{"class":82},[58,130029,93],{"class":92},[58,130031,102],{"class":75},[58,130033,130034,130036,130038,130040,130042],{"class":60,"line":105},[58,130035,71420],{"class":82},[58,130037,86],{"class":75},[58,130039,1641],{"class":82},[58,130041,93],{"class":92},[58,130043,102],{"class":75},[58,130045,130046,130048,130050,130052],{"class":60,"line":627},[58,130047,71158],{"class":82},[58,130049,86],{"class":75},[58,130051,52231],{"class":82},[58,130053,102],{"class":75},[58,130055,130056,130058,130060,130062,130064],{"class":60,"line":509},[58,130057,127862],{"class":82},[58,130059,86],{"class":75},[58,130061,1641],{"class":82},[58,130063,93],{"class":92},[58,130065,102],{"class":75},[58,130067,130068,130070,130072,130074],{"class":60,"line":559},[58,130069,71536],{"class":82},[58,130071,86],{"class":75},[58,130073,61476],{"class":82},[58,130075,102],{"class":75},[58,130077,130078],{"class":60,"line":654},[58,130079,108],{"class":75},[58,130081,130082,130084,130086,130089,130091,130093,130096,130098,130100,130102],{"class":60,"line":671},[58,130083,130005],{"class":379},[58,130085,2048],{"class":71},[58,130087,130088],{"class":379},":nth-child",[58,130090,793],{"class":75},[58,130092,89],{"class":82},[58,130094,130095],{"class":75},") { ",[58,130097,129787],{"class":82},[58,130099,86],{"class":75},[58,130101,129206],{"class":82},[58,130103,603],{"class":75},[58,130105,130106,130108,130110,130112,130114,130116,130118,130120,130122,130125],{"class":60,"line":677},[58,130107,130005],{"class":379},[58,130109,2048],{"class":71},[58,130111,130088],{"class":379},[58,130113,793],{"class":75},[58,130115,867],{"class":82},[58,130117,130095],{"class":75},[58,130119,129787],{"class":82},[58,130121,86],{"class":75},[58,130123,130124],{"class":82},"#ff0000",[58,130126,603],{"class":75},[58,130128,130129,130131,130133,130135,130137,130139,130141,130143,130145,130148],{"class":60,"line":2260},[58,130130,130005],{"class":379},[58,130132,2048],{"class":71},[58,130134,130088],{"class":379},[58,130136,793],{"class":75},[58,130138,861],{"class":82},[58,130140,130095],{"class":75},[58,130142,129787],{"class":82},[58,130144,86],{"class":75},[58,130146,130147],{"class":82},"#00a4ff",[58,130149,603],{"class":75},[58,130151,130152,130154,130156,130158,130160,130162,130164,130166,130168,130171],{"class":60,"line":694},[58,130153,130005],{"class":379},[58,130155,2048],{"class":71},[58,130157,130088],{"class":379},[58,130159,793],{"class":75},[58,130161,1079],{"class":82},[58,130163,130095],{"class":75},[58,130165,129787],{"class":82},[58,130167,86],{"class":75},[58,130169,130170],{"class":82},"#ff00ff",[58,130172,603],{"class":75},[58,130174,130175,130177,130179,130181,130183,130185,130187,130189,130191,130194],{"class":60,"line":2270},[58,130176,130005],{"class":379},[58,130178,2048],{"class":71},[58,130180,130088],{"class":379},[58,130182,793],{"class":75},[58,130184,1105],{"class":82},[58,130186,130095],{"class":75},[58,130188,129787],{"class":82},[58,130190,86],{"class":75},[58,130192,130193],{"class":82},"#00ff00",[58,130195,603],{"class":75},[14,130197,130199],{"id":130198},"_83-css三大特性","8.3 css三大特性",[114,130201,130203],{"id":130202},"_831-层叠性","8.3.1 层叠性",[175,130205,130206],{},"为了解决样式冲突问题",[175,130208,130209],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[175,130211,130212],{},"   ②样式不冲突，不会层叠",[114,130214,130216],{"id":130215},"_832-继承性","8.3.2 继承性",[175,130218,130219],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[175,130221,130222],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[48,130224,130226],{"className":50,"code":130225,"language":52,"meta":53,"style":53},"p {\n  color: #333;\n}\n",[55,130227,130228,130234,130244],{"__ignoreMap":53},[58,130229,130230,130232],{"class":60,"line":61},[58,130231,175],{"class":71},[58,130233,76],{"class":75},[58,130235,130236,130238,130240,130242],{"class":60,"line":68},[58,130237,71536],{"class":82},[58,130239,86],{"class":75},[58,130241,63001],{"class":82},[58,130243,102],{"class":75},[58,130245,130246],{"class":60,"line":79},[58,130247,108],{"class":75},[119,130249],{"style":121,"src":130250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[175,130252,130253],{},"解释：①行高可以跟单位也可以不跟单位",[175,130255,130256],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[175,130258,130259],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[175,130261,130262],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[114,130264,130266],{"id":130265},"_833-优先级","8.3.3 优先级",[19,130268,130269,130272],{},[22,130270,130271],{},"选择器相同，则执行层叠性",[22,130273,130274],{},"选择器不同，则根据选择器权重执行",[926,130276,130277,130287],{},[929,130278,130279],{},[932,130280,130281,130284],{},[935,130282,130283],{"align":24379},"选择器",[935,130285,130286],{"align":24379},"选择器权重",[972,130288,130289,130297,130305,130313,130321,130329],{},[932,130290,130291,130294],{},[977,130292,130293],{"align":24379},"继承 或者*",[977,130295,130296],{"align":24379},"0，0，0，0",[932,130298,130299,130302],{},[977,130300,130301],{"align":24379},"标签选择器",[977,130303,130304],{"align":24379},"0，0，0，1",[932,130306,130307,130310],{},[977,130308,130309],{"align":24379},"类选择器，伪类选择器",[977,130311,130312],{"align":24379},"0，0，1，0",[932,130314,130315,130318],{},[977,130316,130317],{"align":24379},"ID选择器",[977,130319,130320],{"align":24379},"0，1，0，0",[932,130322,130323,130326],{},[977,130324,130325],{"align":24379},"行内样式",[977,130327,130328],{"align":24379},"1，0，0，0",[932,130330,130331,130334],{},[977,130332,130333],{"align":24379},"！important",[977,130335,130336],{"align":24379},"无穷大",[175,130338,130339],{},"! important用法：",[48,130341,130343],{"className":50,"code":130342,"language":52,"meta":53,"style":53},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[55,130344,130345,130350,130356,130369,130373,130378,130384,130394],{"__ignoreMap":53},[58,130346,130347],{"class":60,"line":61},[58,130348,130349],{"class":64},"\u002F* !important 拥有最高优先级 *\u002F\n",[58,130351,130352,130354],{"class":60,"line":68},[58,130353,72],{"class":71},[58,130355,76],{"class":75},[58,130357,130358,130360,130362,130364,130367],{"class":60,"line":79},[58,130359,71536],{"class":82},[58,130361,86],{"class":75},[58,130363,52283],{"class":82},[58,130365,130366],{"class":92}," !important",[58,130368,102],{"class":75},[58,130370,130371],{"class":60,"line":105},[58,130372,108],{"class":75},[58,130374,130375],{"class":60,"line":627},[58,130376,130377],{"class":64},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[58,130379,130380,130382],{"class":60,"line":509},[58,130381,72],{"class":71},[58,130383,76],{"class":75},[58,130385,130386,130388,130390,130392],{"class":60,"line":559},[58,130387,71536],{"class":82},[58,130389,86],{"class":75},[58,130391,58055],{"class":82},[58,130393,102],{"class":75},[58,130395,130396],{"class":60,"line":654},[58,130397,108],{"class":75},[175,130399,130400],{},"优先级注意点：",[175,130402,130403],{},"①权重是有4组数字组成,但是不会有进位",[175,130405,130406],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[175,130408,130409],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[175,130411,130412],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[175,130414,130415],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[175,130417,130418],{},"⑥复合选择器",[926,130420,130421,130431],{},[929,130422,130423],{},[932,130424,130425,130428],{},[935,130426,130427],{"align":24379},"div ul li",[935,130429,130430],{"align":24379},"0,0,0,3",[972,130432,130433,130441,130449],{},[932,130434,130435,130438],{},[977,130436,130437],{"align":24379},".nav ul li",[977,130439,130440],{"align":24379},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[932,130442,130443,130446],{},[977,130444,130445],{"align":24379},"a:hover",[977,130447,130448],{"align":24379},"0,0,1,1",[932,130450,130451,130454],{},[977,130452,130453],{"align":24379},".nav a",[977,130455,130448],{"align":24379},[702,130457,130458],{},"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":53,"searchDepth":68,"depth":68,"links":130460},[130461,130469,130480],{"id":128572,"depth":68,"text":128573,"children":130462},[130463,130464,130465,130466,130467,130468],{"id":128585,"depth":79,"text":128586},{"id":128657,"depth":79,"text":128658},{"id":128729,"depth":79,"text":128730},{"id":128760,"depth":79,"text":128761},{"id":128767,"depth":79,"text":128768},{"id":128919,"depth":79,"text":128920},{"id":129227,"depth":68,"text":129228,"children":130470},[130471,130472,130473,130474,130475,130476,130477,130478,130479],{"id":129234,"depth":79,"text":129235},{"id":129244,"depth":79,"text":129245},{"id":129340,"depth":79,"text":129341},{"id":129413,"depth":79,"text":129414},{"id":129567,"depth":79,"text":129568},{"id":129655,"depth":79,"text":129656},{"id":129707,"depth":79,"text":129708},{"id":129766,"depth":79,"text":129767},{"id":129871,"depth":79,"text":129872},{"id":130198,"depth":68,"text":130199,"children":130481},[130482,130483,130484],{"id":130202,"depth":79,"text":130203},{"id":130215,"depth":79,"text":130216},{"id":130265,"depth":79,"text":130266},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128564,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130491,"title":130492,"body":130493,"description":717,"extension":718,"meta":132079,"navigation":720,"path":132080,"seo":132081,"stem":132082,"__hash__":132083},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130494,"toc":132058},[130495,130498,130502,130505,130508,130511,130514,130517,130520,130523,130527,130535,130569,130605,130608,130622,130627,130661,130664,130757,130762,130765,130795,130798,130803,130811,130815,130822,130868,130912,130917,130920,130923,130926,130929,130932,130935,130937,130940,130944,130949,130993,130998,131001,131004,131041,131046,131049,131052,131055,131058,131090,131093,131096,131099,131131,131134,131137,131140,131144,131147,131179,131182,131186,131206,131209,131217,131220,131224,131229,131232,131264,131269,131272,131310,131314,131319,131322,131325,131356,131359,131376,131381,131433,131493,131498,131552,131590,131594,131598,131601,131605,131613,131616,131618,131629,131634,131682,131716,131719,131722,131725,131728,131772,131775,131778,131781,131784,131787,131790,131834,131837,131840,131843,131846,131849,131852,131858,131861,131905,131908,131911,131914,131917,131920,131964,131967,131969,131972,131976,131980,132018,132022,132025,132028,132032,132040,132044,132047,132050,132053,132056],[10,130496,130492],{"id":130497},"_9-css盒模型浮动与切图",[14,130499,130501],{"id":130500},"_91-盒子模型","9.1 盒子模型",[175,130503,130504],{},"利用盒子来设计网页",[175,130506,130507],{},"盒子包含：边框、外边距、内边距、实际内容",[175,130509,130510],{},"网页布局设置：",[175,130512,130513],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[175,130515,130516],{},"②利用css设置好盒子样式，然后摆放到相应位置",[175,130518,130519],{},"③往盒子里装内容",[119,130521],{"style":121,"src":130522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[114,130524,130526],{"id":130525},"_911-边框border","9.1.1 边框（border）",[19,130528,130529,130532],{},[22,130530,130531],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[22,130533,130534],{},"语法",[48,130536,130537],{"className":50,"code":51,"language":52,"meta":53,"style":53},[55,130538,130539,130543,130549,130565],{"__ignoreMap":53},[58,130540,130541],{"class":60,"line":61},[58,130542,65],{"class":64},[58,130544,130545,130547],{"class":60,"line":68},[58,130546,72],{"class":71},[58,130548,76],{"class":75},[58,130550,130551,130553,130555,130557,130559,130561,130563],{"class":60,"line":79},[58,130552,83],{"class":82},[58,130554,86],{"class":75},[58,130556,89],{"class":82},[58,130558,93],{"class":92},[58,130560,96],{"class":82},[58,130562,99],{"class":82},[58,130564,102],{"class":75},[58,130566,130567],{"class":60,"line":105},[58,130568,108],{"class":75},[926,130570,130571,130579],{},[929,130572,130573],{},[932,130574,130575,130577],{},[935,130576,129776],{"align":24379},[935,130578,103325],{"align":24379},[972,130580,130581,130589,130597],{},[932,130582,130583,130586],{},[977,130584,130585],{"align":24379},"border-width",[977,130587,130588],{"align":24379},"定义边框粗细，单位是px",[932,130590,130591,130594],{},[977,130592,130593],{"align":24379},"border-style",[977,130595,130596],{"align":24379},"边框的样式",[932,130598,130599,130602],{},[977,130600,130601],{"align":24379},"border-color",[977,130603,130604],{"align":24379},"边框的颜色",[175,130606,130607],{},"边框样式 border-style 可以设置如下值：",[124,130609,130610,130613,130616,130619],{},[22,130611,130612],{},"none：没有边框即忽略所有边框的宽度（默认值）",[22,130614,130615],{},"solid：边框为单实线(最为常用的)",[22,130617,130618],{},"dashed：边框为虚线",[22,130620,130621],{},"dotted：边框为点线",[19,130623,130624],{"start":79},[22,130625,130626],{},"边框的合写分写",[48,130628,130629],{"className":50,"code":51,"language":52,"meta":53,"style":53},[55,130630,130631,130635,130641,130657],{"__ignoreMap":53},[58,130632,130633],{"class":60,"line":61},[58,130634,65],{"class":64},[58,130636,130637,130639],{"class":60,"line":68},[58,130638,72],{"class":71},[58,130640,76],{"class":75},[58,130642,130643,130645,130647,130649,130651,130653,130655],{"class":60,"line":79},[58,130644,83],{"class":82},[58,130646,86],{"class":75},[58,130648,89],{"class":82},[58,130650,93],{"class":92},[58,130652,96],{"class":82},[58,130654,99],{"class":82},[58,130656,102],{"class":75},[58,130658,130659],{"class":60,"line":105},[58,130660,108],{"class":75},[175,130662,130663],{},"边框分开写法：",[48,130665,130667],{"className":50,"code":130666,"language":52,"meta":53,"style":53},"\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",[55,130668,130669,130674,130680,130698,130716,130735,130753],{"__ignoreMap":53},[58,130670,130671],{"class":60,"line":61},[58,130672,130673],{"class":64},"\u002F* 边框分开写法 *\u002F\n",[58,130675,130676,130678],{"class":60,"line":68},[58,130677,72],{"class":71},[58,130679,76],{"class":75},[58,130681,130682,130685,130687,130689,130691,130693,130696],{"class":60,"line":79},[58,130683,130684],{"class":82},"  border-top",[58,130686,86],{"class":75},[58,130688,89],{"class":82},[58,130690,93],{"class":92},[58,130692,96],{"class":82},[58,130694,130695],{"class":82}," #000",[58,130697,102],{"class":75},[58,130699,130700,130703,130705,130707,130709,130711,130714],{"class":60,"line":105},[58,130701,130702],{"class":82},"  border-right",[58,130704,86],{"class":75},[58,130706,867],{"class":82},[58,130708,93],{"class":92},[58,130710,62873],{"class":82},[58,130712,130713],{"class":82}," #333",[58,130715,102],{"class":75},[58,130717,130718,130721,130723,130725,130727,130730,130733],{"class":60,"line":627},[58,130719,130720],{"class":82},"  border-bottom",[58,130722,86],{"class":75},[58,130724,861],{"class":82},[58,130726,93],{"class":92},[58,130728,130729],{"class":82}," dotted",[58,130731,130732],{"class":82}," #666",[58,130734,102],{"class":75},[58,130736,130737,130740,130742,130744,130746,130748,130751],{"class":60,"line":509},[58,130738,130739],{"class":82},"  border-left",[58,130741,86],{"class":75},[58,130743,89],{"class":82},[58,130745,93],{"class":92},[58,130747,96],{"class":82},[58,130749,130750],{"class":82}," #999",[58,130752,102],{"class":75},[58,130754,130755],{"class":60,"line":559},[58,130756,108],{"class":75},[19,130758,130759],{"start":105},[22,130760,130761],{},"表格的细线边框",[175,130763,130764],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[48,130766,130768],{"className":50,"code":130767,"language":52,"meta":53,"style":53},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[55,130769,130770,130775,130781,130791],{"__ignoreMap":53},[58,130771,130772],{"class":60,"line":61},[58,130773,130774],{"class":64},"\u002F* 表格细线边框合并 *\u002F\n",[58,130776,130777,130779],{"class":60,"line":68},[58,130778,926],{"class":71},[58,130780,76],{"class":75},[58,130782,130783,130785,130787,130789],{"class":60,"line":79},[58,130784,71210],{"class":82},[58,130786,86],{"class":75},[58,130788,65667],{"class":82},[58,130790,102],{"class":75},[58,130792,130793],{"class":60,"line":105},[58,130794,108],{"class":75},[175,130796,130797],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[19,130799,130800],{"start":627},[22,130801,130802],{},"解决边框额外增加盒子的实际大小的方法：",[124,130804,130805,130808],{},[22,130806,130807],{},"测量盒子大小的时候,不量边框",[22,130809,130810],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[114,130812,130814],{"id":130813},"_912-内边距","9.1.2 内边距",[19,130816,130817,130820],{},[22,130818,130819],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[22,130821,130534],{},[926,130823,130824,130834],{},[929,130825,130826],{},[932,130827,130828,130831],{},[935,130829,130830],{"align":24379},"值的个数",[935,130832,130833],{"align":24379},"表达意思",[972,130835,130836,130844,130852,130860],{},[932,130837,130838,130841],{},[977,130839,130840],{"align":24379},"padding: 5px;",[977,130842,130843],{"align":24379},"1个值，代表上下左右都有5个元素",[932,130845,130846,130849],{},[977,130847,130848],{"align":24379},"padding: 5px 10px;",[977,130850,130851],{"align":24379},"2个值，代表上下内边距为5像素，左右内边距为10像素",[932,130853,130854,130857],{},[977,130855,130856],{"align":24379},"padding: 5px 10px 20px;",[977,130858,130859],{"align":24379},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[932,130861,130862,130865],{},[977,130863,130864],{"align":24379},"padding: 5px 10px 20px 30px;",[977,130866,130867],{"align":24379},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[926,130869,130870,130878],{},[929,130871,130872],{},[932,130873,130874,130876],{},[935,130875,129776],{"align":24379},[935,130877,103325],{"align":24379},[972,130879,130880,130888,130896,130904],{},[932,130881,130882,130885],{},[977,130883,130884],{"align":24379},"padding-left",[977,130886,130887],{"align":24379},"左内边距",[932,130889,130890,130893],{},[977,130891,130892],{"align":24379},"padding-right",[977,130894,130895],{"align":24379},"右内边距",[932,130897,130898,130901],{},[977,130899,130900],{"align":24379},"padding-top",[977,130902,130903],{"align":24379},"上内边距",[932,130905,130906,130909],{},[977,130907,130908],{"align":24379},"padding-bottom",[977,130910,130911],{"align":24379},"下内边距",[19,130913,130914],{"start":79},[22,130915,130916],{},"内边距会影响盒子的实际大小",[175,130918,130919],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[175,130921,130922],{},"①内容和边框有了距离，添加了内边距",[175,130924,130925],{},"②padding影响了盒子实际大小",[175,130927,130928],{},"内边距对盒子大小的影响：",[175,130930,130931],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[175,130933,130934],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[175,130936,95849],{},[175,130938,130939],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[114,130941,130943],{"id":130942},"_913-外边距","9.1.3 外边距",[19,130945,130946],{},[22,130947,130948],{},"控制盒子与盒子之间的距离",[926,130950,130951,130959],{},[929,130952,130953],{},[932,130954,130955,130957],{},[935,130956,129776],{"align":24379},[935,130958,103325],{"align":24379},[972,130960,130961,130969,130977,130985],{},[932,130962,130963,130966],{},[977,130964,130965],{"align":24379},"margin-left",[977,130967,130968],{"align":24379},"左外边距",[932,130970,130971,130974],{},[977,130972,130973],{"align":24379},"margin-right",[977,130975,130976],{"align":24379},"右外边距",[932,130978,130979,130982],{},[977,130980,130981],{"align":24379},"margin-top",[977,130983,130984],{"align":24379},"上外边距",[932,130986,130987,130990],{},[977,130988,130989],{"align":24379},"margin-bottom",[977,130991,130992],{"align":24379},"下外边距",[19,130994,130995],{"start":68},[22,130996,130997],{},"外边距可以让块级盒子水平居中的两个条件：",[175,130999,131000],{},"①盒子必须指定了宽度（width）",[175,131002,131003],{},"②盒子左右的外边距都设置为 auto",[48,131005,131007],{"className":50,"code":131006,"language":52,"meta":53,"style":53},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[55,131008,131009,131014,131021,131037],{"__ignoreMap":53},[58,131010,131011],{"class":60,"line":61},[58,131012,131013],{"class":64},"\u002F* margin 复合写法（同上） *\u002F\n",[58,131015,131016,131019],{"class":60,"line":68},[58,131017,131018],{"class":379},".box",[58,131020,76],{"class":75},[58,131022,131023,131025,131027,131029,131031,131034],{"class":60,"line":79},[58,131024,71102],{"class":82},[58,131026,86],{"class":75},[58,131028,979],{"class":82},[58,131030,52195],{"class":82},[58,131032,131033],{"class":75},";  ",[58,131035,131036],{"class":64},"\u002F* 块级盒子水平居中 *\u002F\n",[58,131038,131039],{"class":60,"line":105},[58,131040,108],{"class":75},[19,131042,131043],{"start":79},[22,131044,131045],{},"外边距塌陷问题",[175,131047,131048],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[119,131050],{"style":121,"src":131051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[175,131053,131054],{},"解决方案：",[175,131056,131057],{},"①可以为父亲元素定义上边距",[48,131059,131060],{"className":50,"code":131006,"language":52,"meta":53,"style":53},[55,131061,131062,131066,131072,131086],{"__ignoreMap":53},[58,131063,131064],{"class":60,"line":61},[58,131065,131013],{"class":64},[58,131067,131068,131070],{"class":60,"line":68},[58,131069,131018],{"class":379},[58,131071,76],{"class":75},[58,131073,131074,131076,131078,131080,131082,131084],{"class":60,"line":79},[58,131075,71102],{"class":82},[58,131077,86],{"class":75},[58,131079,979],{"class":82},[58,131081,52195],{"class":82},[58,131083,131033],{"class":75},[58,131085,131036],{"class":64},[58,131087,131088],{"class":60,"line":105},[58,131089,108],{"class":75},[175,131091,131092],{},"②可以为父亲元素定义上内边距",[175,131094,131095],{},"③可以为父亲元素添加overflow:hidden",[119,131097],{"style":121,"src":131098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[48,131100,131101],{"className":50,"code":131006,"language":52,"meta":53,"style":53},[55,131102,131103,131107,131113,131127],{"__ignoreMap":53},[58,131104,131105],{"class":60,"line":61},[58,131106,131013],{"class":64},[58,131108,131109,131111],{"class":60,"line":68},[58,131110,131018],{"class":379},[58,131112,76],{"class":75},[58,131114,131115,131117,131119,131121,131123,131125],{"class":60,"line":79},[58,131116,71102],{"class":82},[58,131118,86],{"class":75},[58,131120,979],{"class":82},[58,131122,52195],{"class":82},[58,131124,131033],{"class":75},[58,131126,131036],{"class":64},[58,131128,131129],{"class":60,"line":105},[58,131130,108],{"class":75},[119,131132],{"style":121,"src":131133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[175,131135,131136],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[175,131138,131139],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[114,131141,131143],{"id":131142},"_914-清除内外边距","9.1.4 清除内外边距",[175,131145,131146],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[48,131148,131149],{"className":50,"code":131006,"language":52,"meta":53,"style":53},[55,131150,131151,131155,131161,131175],{"__ignoreMap":53},[58,131152,131153],{"class":60,"line":61},[58,131154,131013],{"class":64},[58,131156,131157,131159],{"class":60,"line":68},[58,131158,131018],{"class":379},[58,131160,76],{"class":75},[58,131162,131163,131165,131167,131169,131171,131173],{"class":60,"line":79},[58,131164,71102],{"class":82},[58,131166,86],{"class":75},[58,131168,979],{"class":82},[58,131170,52195],{"class":82},[58,131172,131033],{"class":75},[58,131174,131036],{"class":64},[58,131176,131177],{"class":60,"line":105},[58,131178,108],{"class":75},[175,131180,131181],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[114,131183,131185],{"id":131184},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[124,131187,131188,131191,131194,131197,131200,131203],{},[22,131189,131190],{},"文件→打开 ：可以打开我们要测量的图片",[22,131192,131193],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[22,131195,131196],{},"右击标尺，把里面的单位改为像素",[22,131198,131199],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[22,131201,131202],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[22,131204,131205],{},"用选区拖动 可以测量大小",[119,131207],{"style":121,"src":131208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[124,131210,131211,131214],{},[22,131212,131213],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[22,131215,131216],{},"吸管取色工具",[119,131218],{"style":121,"src":131219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[114,131221,131223],{"id":131222},"_916-案例","9.1.6 案例",[19,131225,131226],{},[22,131227,131228],{},"小米商品",[119,131230],{"style":121,"src":131231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[48,131233,131234],{"className":50,"code":131006,"language":52,"meta":53,"style":53},[55,131235,131236,131240,131246,131260],{"__ignoreMap":53},[58,131237,131238],{"class":60,"line":61},[58,131239,131013],{"class":64},[58,131241,131242,131244],{"class":60,"line":68},[58,131243,131018],{"class":379},[58,131245,76],{"class":75},[58,131247,131248,131250,131252,131254,131256,131258],{"class":60,"line":79},[58,131249,71102],{"class":82},[58,131251,86],{"class":75},[58,131253,979],{"class":82},[58,131255,52195],{"class":82},[58,131257,131033],{"class":75},[58,131259,131036],{"class":64},[58,131261,131262],{"class":60,"line":105},[58,131263,108],{"class":75},[19,131265,131266],{"start":68},[22,131267,131268],{},"快报模块",[119,131270],{"style":121,"src":131271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[48,131273,131275],{"className":364,"code":131274,"language":366,"meta":53,"style":53},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[55,131276,131277,131282,131297,131302],{"__ignoreMap":53},[58,131278,131279],{"class":60,"line":61},[58,131280,131281],{"class":64},"\u003C!-- HTML 代码示例 -->\n",[58,131283,131284,131286,131288,131290,131292,131295],{"class":60,"line":68},[58,131285,373],{"class":75},[58,131287,72],{"class":71},[58,131289,54124],{"class":379},[58,131291,383],{"class":75},[58,131293,131294],{"class":386},"\"example\"",[58,131296,403],{"class":75},[58,131298,131299],{"class":60,"line":79},[58,131300,131301],{"class":75},"  示例内容\n",[58,131303,131304,131306,131308],{"class":60,"line":105},[58,131305,52423],{"class":75},[58,131307,72],{"class":71},[58,131309,403],{"class":75},[114,131311,131313],{"id":131312},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[19,131315,131316],{},[22,131317,131318],{},"圆角边框",[175,131320,131321],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[119,131323],{"style":121,"src":131324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[48,131326,131328],{"className":50,"code":131327,"language":52,"meta":53,"style":53},"div {\n  border: 1px solid #ccc;\n}\n",[55,131329,131330,131336,131352],{"__ignoreMap":53},[58,131331,131332,131334],{"class":60,"line":61},[58,131333,72],{"class":71},[58,131335,76],{"class":75},[58,131337,131338,131340,131342,131344,131346,131348,131350],{"class":60,"line":68},[58,131339,83],{"class":82},[58,131341,86],{"class":75},[58,131343,89],{"class":82},[58,131345,93],{"class":92},[58,131347,96],{"class":82},[58,131349,99],{"class":82},[58,131351,102],{"class":75},[58,131353,131354],{"class":60,"line":79},[58,131355,108],{"class":75},[175,131357,131358],{},"解释:",[124,131360,131361,131364,131367,131370,131373],{},[22,131362,131363],{},"参数值可以为数值或百分比的形式",[22,131365,131366],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[22,131368,131369],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[22,131371,131372],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[22,131374,131375],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[19,131377,131378],{"start":68},[22,131379,131380],{},"盒子阴影",[48,131382,131384],{"className":50,"code":131383,"language":52,"meta":53,"style":53},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[55,131385,131386,131392,131429],{"__ignoreMap":53},[58,131387,131388,131390],{"class":60,"line":61},[58,131389,72],{"class":71},[58,131391,76],{"class":75},[58,131393,131394,131397,131399,131401,131403,131405,131407,131409,131411,131413,131415,131417,131419,131421,131423,131425,131427],{"class":60,"line":68},[58,131395,131396],{"class":82},"  box-shadow",[58,131398,86],{"class":75},[58,131400,979],{"class":82},[58,131402,15399],{"class":82},[58,131404,93],{"class":92},[58,131406,2684],{"class":82},[58,131408,93],{"class":92},[58,131410,79398],{"class":82},[58,131412,793],{"class":75},[58,131414,979],{"class":82},[58,131416,469],{"class":75},[58,131418,979],{"class":82},[58,131420,469],{"class":75},[58,131422,979],{"class":82},[58,131424,469],{"class":75},[58,131426,86840],{"class":82},[58,131428,3365],{"class":75},[58,131430,131431],{"class":60,"line":79},[58,131432,108],{"class":75},[926,131434,131435,131443],{},[929,131436,131437],{},[932,131438,131439,131441],{},[935,131440,940],{"align":24379},[935,131442,28133],{"align":24379},[972,131444,131445,131453,131461,131469,131477,131485],{},[932,131446,131447,131450],{},[977,131448,131449],{"align":24379},"h-shadow",[977,131451,131452],{"align":24379},"必需,水平阴影的位置,允许负值",[932,131454,131455,131458],{},[977,131456,131457],{"align":24379},"v-shadow",[977,131459,131460],{"align":24379},"必需,垂直阴影的位置,允许负值",[932,131462,131463,131466],{},[977,131464,131465],{"align":24379},"blur",[977,131467,131468],{"align":24379},"可选,模糊距离,就是影子的虚实",[932,131470,131471,131474],{},[977,131472,131473],{"align":24379},"spread",[977,131475,131476],{"align":24379},"可选,阴影尺寸",[932,131478,131479,131482],{},[977,131480,131481],{"align":24379},"color",[977,131483,131484],{"align":24379},"可选,阴影的颜色",[932,131486,131487,131490],{},[977,131488,131489],{"align":24379},"inset",[977,131491,131492],{"align":24379},"可选,将外部阴影(outset)改为内部阴影",[19,131494,131495],{"start":79},[22,131496,131497],{},"文字阴影",[48,131499,131501],{"className":50,"code":131500,"language":52,"meta":53,"style":53},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[55,131502,131503,131509,131548],{"__ignoreMap":53},[58,131504,131505,131507],{"class":60,"line":61},[58,131506,175],{"class":71},[58,131508,76],{"class":75},[58,131510,131511,131514,131516,131518,131520,131522,131524,131526,131528,131530,131532,131534,131536,131538,131540,131542,131544,131546],{"class":60,"line":68},[58,131512,131513],{"class":82},"  text-shadow",[58,131515,86],{"class":75},[58,131517,89],{"class":82},[58,131519,93],{"class":92},[58,131521,25762],{"class":82},[58,131523,93],{"class":92},[58,131525,15399],{"class":82},[58,131527,93],{"class":92},[58,131529,79398],{"class":82},[58,131531,793],{"class":75},[58,131533,979],{"class":82},[58,131535,469],{"class":75},[58,131537,979],{"class":82},[58,131539,469],{"class":75},[58,131541,979],{"class":82},[58,131543,469],{"class":75},[58,131545,101150],{"class":82},[58,131547,3365],{"class":75},[58,131549,131550],{"class":60,"line":79},[58,131551,108],{"class":75},[926,131553,131554,131562],{},[929,131555,131556],{},[932,131557,131558,131560],{},[935,131559,940],{"align":24379},[935,131561,28133],{"align":24379},[972,131563,131564,131570,131577,131584],{},[932,131565,131566,131568],{},[977,131567,131449],{"align":24379},[977,131569,131452],{"align":24379},[932,131571,131572,131574],{},[977,131573,131457],{"align":24379},[977,131575,131576],{"align":24379},"必需,垂直阴影位置,允许负值",[932,131578,131579,131581],{},[977,131580,131465],{"align":24379},[977,131582,131583],{"align":24379},"可选,模糊的距离",[932,131585,131586,131588],{},[977,131587,131481],{"align":24379},[977,131589,131484],{"align":24379},[14,131591,131593],{"id":131592},"_92-浮动","9.2 浮动",[114,131595,131597],{"id":131596},"_921-浮动介绍","9.2.1 浮动介绍",[175,131599,131600],{},"在16.2中详细介绍",[114,131602,131604],{"id":131603},"_922-清除浮动","9.2.2 清除浮动",[19,131606,131607,131610],{},[22,131608,131609],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[22,131611,131612],{},"清除浮动的本质",[175,131614,131615],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[175,131617,195],{},[124,131619,131620,131623,131626],{},[22,131621,131622],{},"如果父盒子本身有高度，则不需要清除浮动",[22,131624,131625],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[22,131627,131628],{},"父级有了高度，就不会影响下面的标准流了",[19,131630,131631],{"start":79},[22,131632,131633],{},"清除浮动样式",[48,131635,131637],{"className":50,"code":131636,"language":52,"meta":53,"style":53},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[55,131638,131639,131646,131657,131661,131668,131678],{"__ignoreMap":53},[58,131640,131641,131644],{"class":60,"line":61},[58,131642,131643],{"class":379},".left",[58,131645,76],{"class":75},[58,131647,131648,131651,131653,131655],{"class":60,"line":68},[58,131649,131650],{"class":82},"  float",[58,131652,86],{"class":75},[58,131654,24379],{"class":82},[58,131656,102],{"class":75},[58,131658,131659],{"class":60,"line":79},[58,131660,108],{"class":75},[58,131662,131663,131666],{"class":60,"line":105},[58,131664,131665],{"class":379},".right",[58,131667,76],{"class":75},[58,131669,131670,131672,131674,131676],{"class":60,"line":627},[58,131671,131650],{"class":82},[58,131673,86],{"class":75},[58,131675,73153],{"class":82},[58,131677,102],{"class":75},[58,131679,131680],{"class":60,"line":509},[58,131681,108],{"class":75},[926,131683,131684,131692],{},[929,131685,131686],{},[932,131687,131688,131690],{},[935,131689,127642],{"align":24379},[935,131691,28133],{"align":24379},[972,131693,131694,131701,131708],{},[932,131695,131696,131698],{},[977,131697,24379],{"align":24379},[977,131699,131700],{"align":24379},"不允许左侧有浮动元素（清除左侧浮动的影响）",[932,131702,131703,131705],{},[977,131704,73153],{"align":24379},[977,131706,131707],{"align":24379},"不允许右侧有浮动元素（清除右侧浮动的影响）",[932,131709,131710,131713],{},[977,131711,131712],{"align":24379},"both",[977,131714,131715],{"align":24379},"同时清除左右侧浮动的影响",[175,131717,131718],{},"法一",[175,131720,131721],{},"额外标签法也称为隔墙法",[175,131723,131724],{},"使用方式：",[175,131726,131727],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[48,131729,131730],{"className":50,"code":131636,"language":52,"meta":53,"style":53},[55,131731,131732,131738,131748,131752,131758,131768],{"__ignoreMap":53},[58,131733,131734,131736],{"class":60,"line":61},[58,131735,131643],{"class":379},[58,131737,76],{"class":75},[58,131739,131740,131742,131744,131746],{"class":60,"line":68},[58,131741,131650],{"class":82},[58,131743,86],{"class":75},[58,131745,24379],{"class":82},[58,131747,102],{"class":75},[58,131749,131750],{"class":60,"line":79},[58,131751,108],{"class":75},[58,131753,131754,131756],{"class":60,"line":105},[58,131755,131665],{"class":379},[58,131757,76],{"class":75},[58,131759,131760,131762,131764,131766],{"class":60,"line":627},[58,131761,131650],{"class":82},[58,131763,86],{"class":75},[58,131765,73153],{"class":82},[58,131767,102],{"class":75},[58,131769,131770],{"class":60,"line":509},[58,131771,108],{"class":75},[175,131773,131774],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[175,131776,131777],{},"优点： 通俗易懂，书写方便",[175,131779,131780],{},"缺点： 添加许多无意义的标签，结构化较差",[175,131782,131783],{},"注意： 要求这个新的空标签必须是块级元素。",[175,131785,131786],{},"法二",[175,131788,131789],{},"父级添加overflow属性",[48,131791,131792],{"className":50,"code":131636,"language":52,"meta":53,"style":53},[55,131793,131794,131800,131810,131814,131820,131830],{"__ignoreMap":53},[58,131795,131796,131798],{"class":60,"line":61},[58,131797,131643],{"class":379},[58,131799,76],{"class":75},[58,131801,131802,131804,131806,131808],{"class":60,"line":68},[58,131803,131650],{"class":82},[58,131805,86],{"class":75},[58,131807,24379],{"class":82},[58,131809,102],{"class":75},[58,131811,131812],{"class":60,"line":79},[58,131813,108],{"class":75},[58,131815,131816,131818],{"class":60,"line":105},[58,131817,131665],{"class":379},[58,131819,76],{"class":75},[58,131821,131822,131824,131826,131828],{"class":60,"line":627},[58,131823,131650],{"class":82},[58,131825,86],{"class":75},[58,131827,73153],{"class":82},[58,131829,102],{"class":75},[58,131831,131832],{"class":60,"line":509},[58,131833,108],{"class":75},[175,131835,131836],{},"overflow: hidden;",[175,131838,131839],{},"优点：代码简洁",[175,131841,131842],{},"缺点：无法显示溢出的部分",[175,131844,131845],{},"注意：是给父元素添加代码",[175,131847,131848],{},"法三",[175,131850,131851],{},"父级添加after伪元素",[175,131853,131854,131857],{},[131855,131856],"after",{}," 方式是额外标签法的升级版",[175,131859,131860],{},"使用的时候复制就可以",[48,131862,131863],{"className":50,"code":131636,"language":52,"meta":53,"style":53},[55,131864,131865,131871,131881,131885,131891,131901],{"__ignoreMap":53},[58,131866,131867,131869],{"class":60,"line":61},[58,131868,131643],{"class":379},[58,131870,76],{"class":75},[58,131872,131873,131875,131877,131879],{"class":60,"line":68},[58,131874,131650],{"class":82},[58,131876,86],{"class":75},[58,131878,24379],{"class":82},[58,131880,102],{"class":75},[58,131882,131883],{"class":60,"line":79},[58,131884,108],{"class":75},[58,131886,131887,131889],{"class":60,"line":105},[58,131888,131665],{"class":379},[58,131890,76],{"class":75},[58,131892,131893,131895,131897,131899],{"class":60,"line":627},[58,131894,131650],{"class":82},[58,131896,86],{"class":75},[58,131898,73153],{"class":82},[58,131900,102],{"class":75},[58,131902,131903],{"class":60,"line":509},[58,131904,108],{"class":75},[175,131906,131907],{},"优点：没有增加标签，结构更简单",[175,131909,131910],{},"缺点：照顾低版本浏览器",[175,131912,131913],{},"代表网站： 百度、淘宝网、网易等",[175,131915,131916],{},"法四",[175,131918,131919],{},"父级添加双伪元素",[48,131921,131922],{"className":50,"code":131636,"language":52,"meta":53,"style":53},[55,131923,131924,131930,131940,131944,131950,131960],{"__ignoreMap":53},[58,131925,131926,131928],{"class":60,"line":61},[58,131927,131643],{"class":379},[58,131929,76],{"class":75},[58,131931,131932,131934,131936,131938],{"class":60,"line":68},[58,131933,131650],{"class":82},[58,131935,86],{"class":75},[58,131937,24379],{"class":82},[58,131939,102],{"class":75},[58,131941,131942],{"class":60,"line":79},[58,131943,108],{"class":75},[58,131945,131946,131948],{"class":60,"line":105},[58,131947,131665],{"class":379},[58,131949,76],{"class":75},[58,131951,131952,131954,131956,131958],{"class":60,"line":627},[58,131953,131650],{"class":82},[58,131955,86],{"class":75},[58,131957,73153],{"class":82},[58,131959,102],{"class":75},[58,131961,131962],{"class":60,"line":509},[58,131963,108],{"class":75},[175,131965,131966],{},"优点：代码更简洁",[175,131968,131910],{},[175,131970,131971],{},"代表网站：小米、腾讯等",[14,131973,131975],{"id":131974},"_93-ps切图","9.3 PS切图",[114,131977,131979],{"id":131978},"_931-常见图片格式","9.3.1 常见图片格式",[926,131981,131982,131992],{},[929,131983,131984],{},[932,131985,131986,131989],{},[935,131987,131988],{"align":24379},"jpg图像格式",[935,131990,131991],{"align":24379},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[972,131993,131994,132002,132010],{},[932,131995,131996,131999],{},[977,131997,131998],{"align":24379},"gif图像格式",[977,132000,132001],{"align":24379},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[932,132003,132004,132007],{},[977,132005,132006],{"align":24379},"png图像格式",[977,132008,132009],{"align":24379},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[932,132011,132012,132015],{},[977,132013,132014],{"align":24379},"PSD图像格式",[977,132016,132017],{"align":24379},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[114,132019,132021],{"id":132020},"_932-图层切图","9.3.2 图层切图",[175,132023,132024],{},"最简单的切图方式：右击图层 → 导出 → 切片",[175,132026,132027],{},"按住shift选中两个图层->图层菜单->合并图层",[114,132029,132031],{"id":132030},"_933-切片切图","9.3.3 切片切图",[124,132033,132034,132037],{},[22,132035,132036],{},"利用切片工具手动划出",[22,132038,132039],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[114,132041,132043],{"id":132042},"_934-切图步骤","9.3.4 切图步骤",[175,132045,132046],{},"用切片工具选中：",[119,132048],{"style":121,"src":132049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[175,132051,132052],{},"文件 -> 导出",[119,132054],{"style":121,"src":132055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[702,132057,704],{},{"title":53,"searchDepth":68,"depth":68,"links":132059},[132060,132069,132073],{"id":130500,"depth":68,"text":130501,"children":132061},[132062,132063,132064,132065,132066,132067,132068],{"id":130525,"depth":79,"text":130526},{"id":130813,"depth":79,"text":130814},{"id":130942,"depth":79,"text":130943},{"id":131142,"depth":79,"text":131143},{"id":131184,"depth":79,"text":131185},{"id":131222,"depth":79,"text":131223},{"id":131312,"depth":79,"text":131313},{"id":131592,"depth":68,"text":131593,"children":132070},[132071,132072],{"id":131596,"depth":79,"text":131597},{"id":131603,"depth":79,"text":131604},{"id":131974,"depth":68,"text":131975,"children":132074},[132075,132076,132077,132078],{"id":131978,"depth":79,"text":131979},{"id":132020,"depth":79,"text":132021},{"id":132030,"depth":79,"text":132031},{"id":132042,"depth":79,"text":132043},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130492,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":4,"title":5,"body":132085,"description":717,"extension":718,"meta":132593,"navigation":720,"path":721,"seo":132594,"stem":723,"__hash__":724},{"type":7,"value":132086,"toc":132581},[132087,132089,132091,132109,132143,132145,132147,132149,132175,132181,132187,132193,132195,132197,132199,132201,132207,132217,132219,132221,132239,132241,132243,132253,132255,132257,132275,132277,132279,132295,132297,132301,132329,132333,132361,132363,132375,132419,132423,132467,132479,132573,132579],[10,132088,5],{"id":12},[14,132090,17],{"id":16},[19,132092,132093,132097,132101,132105],{},[22,132094,132095,28],{},[25,132096,27],{},[22,132098,132099,34],{},[25,132100,33],{},[22,132102,132103,40],{},[25,132104,39],{},[22,132106,132107,46],{},[25,132108,45],{},[48,132110,132111],{"className":50,"code":51,"language":52,"meta":53,"style":53},[55,132112,132113,132117,132123,132139],{"__ignoreMap":53},[58,132114,132115],{"class":60,"line":61},[58,132116,65],{"class":64},[58,132118,132119,132121],{"class":60,"line":68},[58,132120,72],{"class":71},[58,132122,76],{"class":75},[58,132124,132125,132127,132129,132131,132133,132135,132137],{"class":60,"line":79},[58,132126,83],{"class":82},[58,132128,86],{"class":75},[58,132130,89],{"class":82},[58,132132,93],{"class":92},[58,132134,96],{"class":82},[58,132136,99],{"class":82},[58,132138,102],{"class":75},[58,132140,132141],{"class":60,"line":105},[58,132142,108],{"class":75},[14,132144,112],{"id":111},[114,132146,117],{"id":116},[119,132148],{"style":121,"src":122},[124,132150,132151,132155,132159,132163,132167,132171],{},[22,132152,128,132153,132],{},[25,132154,131],{},[22,132156,135,132157,139],{},[25,132158,138],{},[22,132160,142,132161,146],{},[25,132162,145],{},[22,132164,149,132165,153],{},[25,132166,152],{},[22,132168,156,132169,160],{},[25,132170,159],{},[22,132172,163,132173],{},[25,132174,166],{},[19,132176,132177],{},[22,132178,132179],{},[25,132180,173],{},[175,132182,177,132183,181,132185],{},[25,132184,180],{},[25,132186,184],{},[124,132188,132189,132191],{},[22,132190,189],{},[22,132192,192],{},[175,132194,195],{},[175,132196,198],{},[175,132198,201],{},[175,132200,204],{},[19,132202,132203],{"start":68},[22,132204,132205],{},[25,132206,211],{},[124,132208,132209,132211,132213],{},[22,132210,216],{},[22,132212,219],{},[22,132214,132215,225],{},[55,132216,224],{},[114,132218,229],{"id":228},[119,132220],{"style":121,"src":232},[124,132222,132223,132227,132231,132235],{},[22,132224,237,132225,241],{},[25,132226,240],{},[22,132228,244,132229,248],{},[25,132230,247],{},[22,132232,251,132233,255],{},[25,132234,254],{},[22,132236,258,132237,262],{},[25,132238,261],{},[114,132240,266],{"id":265},[119,132242],{"style":121,"src":269},[124,132244,132245,132247,132249,132251],{},[22,132246,274],{},[22,132248,277],{},[22,132250,280],{},[22,132252,283],{},[114,132254,287],{"id":286},[119,132256],{"style":121,"src":290},[124,132258,132259,132263,132267,132271,132273],{},[22,132260,295,132261,299],{},[25,132262,298],{},[22,132264,302,132265,306],{},[25,132266,305],{},[22,132268,309,132269,313],{},[25,132270,312],{},[22,132272,316],{},[22,132274,319],{},[114,132276,323],{"id":322},[119,132278],{"style":121,"src":326},[124,132280,132281,132285,132287,132291],{},[22,132282,331,132283,335],{},[25,132284,334],{},[22,132286,338],{},[22,132288,341,132289,345],{},[25,132290,344],{},[22,132292,348,132293,352],{},[25,132294,351],{},[114,132296,356],{"id":355},[19,132298,132299],{},[22,132300,361],{},[48,132302,132303],{"className":364,"code":365,"language":366,"meta":53,"style":53},[55,132304,132305],{"__ignoreMap":53},[58,132306,132307,132309,132311,132313,132315,132317,132319,132321,132323,132325,132327],{"class":60,"line":61},[58,132308,373],{"class":75},[58,132310,376],{"class":71},[58,132312,380],{"class":379},[58,132314,383],{"class":75},[58,132316,387],{"class":386},[58,132318,390],{"class":379},[58,132320,383],{"class":75},[58,132322,395],{"class":386},[58,132324,398],{"class":75},[58,132326,376],{"class":71},[58,132328,403],{"class":75},[19,132330,132331],{"start":68},[22,132332,408],{},[48,132334,132335],{"className":364,"code":365,"language":366,"meta":53,"style":53},[55,132336,132337],{"__ignoreMap":53},[58,132338,132339,132341,132343,132345,132347,132349,132351,132353,132355,132357,132359],{"class":60,"line":61},[58,132340,373],{"class":75},[58,132342,376],{"class":71},[58,132344,380],{"class":379},[58,132346,383],{"class":75},[58,132348,387],{"class":386},[58,132350,390],{"class":379},[58,132352,383],{"class":75},[58,132354,395],{"class":386},[58,132356,398],{"class":75},[58,132358,376],{"class":71},[58,132360,403],{"class":75},[114,132362,440],{"id":439},[19,132364,132365,132367,132369,132371,132373],{},[22,132366,445],{},[22,132368,448],{},[22,132370,451],{},[22,132372,454],{},[22,132374,457],{},[48,132376,132377],{"className":50,"code":460,"language":52,"meta":53,"style":53},[55,132378,132379,132401,132405,132415],{"__ignoreMap":53},[58,132380,132381,132383,132385,132387,132389,132391,132393,132395,132397,132399],{"class":60,"line":61},[58,132382,72],{"class":71},[58,132384,469],{"class":75},[58,132386,175],{"class":71},[58,132388,469],{"class":75},[58,132390,10],{"class":71},[58,132392,469],{"class":75},[58,132394,124],{"class":71},[58,132396,469],{"class":75},[58,132398,22],{"class":71},[58,132400,76],{"class":75},[58,132402,132403],{"class":60,"line":68},[58,132404,490],{"class":64},[58,132406,132407,132409,132411,132413],{"class":60,"line":79},[58,132408,495],{"class":82},[58,132410,86],{"class":75},[58,132412,500],{"class":82},[58,132414,102],{"class":75},[58,132416,132417],{"class":60,"line":105},[58,132418,108],{"class":75},[19,132420,132421],{"start":509},[22,132422,512],{},[48,132424,132425],{"className":50,"code":460,"language":52,"meta":53,"style":53},[55,132426,132427,132449,132453,132463],{"__ignoreMap":53},[58,132428,132429,132431,132433,132435,132437,132439,132441,132443,132445,132447],{"class":60,"line":61},[58,132430,72],{"class":71},[58,132432,469],{"class":75},[58,132434,175],{"class":71},[58,132436,469],{"class":75},[58,132438,10],{"class":71},[58,132440,469],{"class":75},[58,132442,124],{"class":71},[58,132444,469],{"class":75},[58,132446,22],{"class":71},[58,132448,76],{"class":75},[58,132450,132451],{"class":60,"line":68},[58,132452,490],{"class":64},[58,132454,132455,132457,132459,132461],{"class":60,"line":79},[58,132456,495],{"class":82},[58,132458,86],{"class":75},[58,132460,500],{"class":82},[58,132462,102],{"class":75},[58,132464,132465],{"class":60,"line":105},[58,132466,108],{"class":75},[19,132468,132469,132471,132473,132475,132477],{"start":559},[22,132470,562],{},[22,132472,565],{},[22,132474,568],{},[22,132476,571],{},[22,132478,574],{},[48,132480,132481],{"className":50,"code":577,"language":52,"meta":53,"style":53},[55,132482,132483,132487,132501,132505,132519,132523,132537,132541,132555,132559],{"__ignoreMap":53},[58,132484,132485],{"class":60,"line":61},[58,132486,584],{"class":64},[58,132488,132489,132491,132493,132495,132497,132499],{"class":60,"line":68},[58,132490,589],{"class":379},[58,132492,592],{"class":75},[58,132494,595],{"class":82},[58,132496,86],{"class":75},[58,132498,600],{"class":82},[58,132500,603],{"class":75},[58,132502,132503],{"class":60,"line":79},[58,132504,608],{"class":64},[58,132506,132507,132509,132511,132513,132515,132517],{"class":60,"line":105},[58,132508,613],{"class":379},[58,132510,592],{"class":75},[58,132512,595],{"class":82},[58,132514,86],{"class":75},[58,132516,622],{"class":82},[58,132518,603],{"class":75},[58,132520,132521],{"class":60,"line":627},[58,132522,630],{"class":64},[58,132524,132525,132527,132529,132531,132533,132535],{"class":60,"line":509},[58,132526,635],{"class":379},[58,132528,592],{"class":75},[58,132530,595],{"class":82},[58,132532,86],{"class":75},[58,132534,644],{"class":82},[58,132536,603],{"class":75},[58,132538,132539],{"class":60,"line":559},[58,132540,651],{"class":64},[58,132542,132543,132545,132547,132549,132551,132553],{"class":60,"line":654},[58,132544,657],{"class":379},[58,132546,592],{"class":75},[58,132548,595],{"class":82},[58,132550,86],{"class":75},[58,132552,666],{"class":82},[58,132554,603],{"class":75},[58,132556,132557],{"class":60,"line":671},[58,132558,674],{"class":64},[58,132560,132561,132563,132565,132567,132569,132571],{"class":60,"line":677},[58,132562,680],{"class":379},[58,132564,592],{"class":75},[58,132566,595],{"class":82},[58,132568,86],{"class":75},[58,132570,689],{"class":82},[58,132572,603],{"class":75},[19,132574,132575,132577],{"start":694},[22,132576,697],{},[22,132578,700],{},[702,132580,704],{},{"title":53,"searchDepth":68,"depth":68,"links":132582},[132583,132584],{"id":16,"depth":68,"text":17},{"id":111,"depth":68,"text":112,"children":132585},[132586,132587,132588,132589,132590,132591,132592],{"id":116,"depth":79,"text":117},{"id":228,"depth":79,"text":229},{"id":265,"depth":79,"text":266},{"id":286,"depth":79,"text":287},{"id":322,"depth":79,"text":323},{"id":355,"depth":79,"text":356},{"id":439,"depth":79,"text":440},{},{"title":5,"description":717},{"id":132596,"title":132597,"body":132598,"description":717,"extension":718,"meta":134084,"navigation":720,"path":134085,"seo":134086,"stem":134087,"__hash__":134088},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132599,"toc":134076},[132600,132603,132607,132611,132622,132626,132643,132687,132720,132723,132740,132743,132746,132790,132794,132798,132801,132804,132808,132811,132822,132885,132926,132929,132944,132998,133006,133009,133020,133074,133100,133103,133116,133170,133202,133256,133279,133333,133336,133339,133346,133400,133421,133475,133478,133481,133566,133574,133631,133654,133658,133661,133679,133683,133702,133756,133794,133798,133801,133804,133826,133830,133838,133841,133846,133857,133860,133864,133878,133922,133925,133929,133932,133937,133963,133968,134045,134048,134052,134055,134058,134061,134064,134067,134070,134073],[10,132601,132597],{"id":132602},"_11-传统布局与定位体系",[14,132604,132606],{"id":132605},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[114,132608,132610],{"id":132609},"_1111-普通流标准流","11.1.1 普通流（标准流）",[124,132612,132613,132616,132619],{},[22,132614,132615],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[22,132617,132618],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[22,132620,132621],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[114,132623,132625],{"id":132624},"_1112-浮动","11.1.2 浮动",[124,132627,132628,132631,132634,132637,132640],{},[22,132629,132630],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[22,132632,132633],{},"浮动可以改变元素标签默认的排列方式",[22,132635,132636],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[22,132638,132639],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[22,132641,132642],{},"在使用行内块转换时盒子之间是有空隙的",[48,132644,132645],{"className":50,"code":131636,"language":52,"meta":53,"style":53},[55,132646,132647,132653,132663,132667,132673,132683],{"__ignoreMap":53},[58,132648,132649,132651],{"class":60,"line":61},[58,132650,131643],{"class":379},[58,132652,76],{"class":75},[58,132654,132655,132657,132659,132661],{"class":60,"line":68},[58,132656,131650],{"class":82},[58,132658,86],{"class":75},[58,132660,24379],{"class":82},[58,132662,102],{"class":75},[58,132664,132665],{"class":60,"line":79},[58,132666,108],{"class":75},[58,132668,132669,132671],{"class":60,"line":105},[58,132670,131665],{"class":379},[58,132672,76],{"class":75},[58,132674,132675,132677,132679,132681],{"class":60,"line":627},[58,132676,131650],{"class":82},[58,132678,86],{"class":75},[58,132680,73153],{"class":82},[58,132682,102],{"class":75},[58,132684,132685],{"class":60,"line":509},[58,132686,108],{"class":75},[926,132688,132689,132697],{},[929,132690,132691],{},[932,132692,132693,132695],{},[935,132694,127642],{"align":24379},[935,132696,28133],{"align":24379},[972,132698,132699,132706,132713],{},[932,132700,132701,132703],{},[977,132702,55373],{"align":24379},[977,132704,132705],{"align":24379},"元素不浮动（默认值）",[932,132707,132708,132710],{},[977,132709,24379],{"align":24379},[977,132711,132712],{"align":24379},"元素向左浮动",[932,132714,132715,132717],{},[977,132716,73153],{"align":24379},[977,132718,132719],{"align":24379},"元素向右浮动",[175,132721,132722],{},"浮动重点：",[124,132724,132725,132728,132731,132734,132737],{},[22,132726,132727],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[22,132729,132730],{},"浮动的元素会一行内显示并且元素顶部对齐",[22,132732,132733],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[22,132735,132736],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[22,132738,132739],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[175,132741,132742],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[175,132744,132745],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[48,132747,132748],{"className":50,"code":131636,"language":52,"meta":53,"style":53},[55,132749,132750,132756,132766,132770,132776,132786],{"__ignoreMap":53},[58,132751,132752,132754],{"class":60,"line":61},[58,132753,131643],{"class":379},[58,132755,76],{"class":75},[58,132757,132758,132760,132762,132764],{"class":60,"line":68},[58,132759,131650],{"class":82},[58,132761,86],{"class":75},[58,132763,24379],{"class":82},[58,132765,102],{"class":75},[58,132767,132768],{"class":60,"line":79},[58,132769,108],{"class":75},[58,132771,132772,132774],{"class":60,"line":105},[58,132773,131665],{"class":379},[58,132775,76],{"class":75},[58,132777,132778,132780,132782,132784],{"class":60,"line":627},[58,132779,131650],{"class":82},[58,132781,86],{"class":75},[58,132783,73153],{"class":82},[58,132785,102],{"class":75},[58,132787,132788],{"class":60,"line":509},[58,132789,108],{"class":75},[114,132791,132793],{"id":132792},"_1113-定位","11.1.3 定位",[22641,132795,132797],{"id":132796},"_11131-使用场景","11.1.3.1 使用场景",[175,132799,132800],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[175,132802,132803],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22641,132805,132807],{"id":132806},"_11132-定位组成","11.1.3.2 定位组成",[175,132809,132810],{},"定位 = 定位模式 + 边偏移",[19,132812,132813],{},[22,132814,132815,132818,132819],{},[25,132816,132817],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[25,132820,132821],{},"定位模式",[48,132823,132825],{"className":50,"code":132824,"language":52,"meta":53,"style":53},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[55,132826,132827,132833,132847,132864,132881],{"__ignoreMap":53},[58,132828,132829,132831],{"class":60,"line":61},[58,132830,131018],{"class":379},[58,132832,76],{"class":75},[58,132834,132835,132838,132840,132842,132844],{"class":60,"line":68},[58,132836,132837],{"class":82},"  position",[58,132839,86],{"class":75},[58,132841,622],{"class":82},[58,132843,131033],{"class":75},[58,132845,132846],{"class":64},"\u002F* 定位模式 *\u002F\n",[58,132848,132849,132852,132854,132856,132858,132861],{"class":60,"line":79},[58,132850,132851],{"class":82},"  top",[58,132853,86],{"class":75},[58,132855,1232],{"class":82},[58,132857,93],{"class":92},[58,132859,132860],{"class":75},";           ",[58,132862,132863],{"class":64},"\u002F* 边偏移：上 *\u002F\n",[58,132865,132866,132869,132871,132873,132875,132878],{"class":60,"line":105},[58,132867,132868],{"class":82},"  left",[58,132870,86],{"class":75},[58,132872,1486],{"class":82},[58,132874,93],{"class":92},[58,132876,132877],{"class":75},";          ",[58,132879,132880],{"class":64},"\u002F* 边偏移：左 *\u002F\n",[58,132882,132883],{"class":60,"line":627},[58,132884,108],{"class":75},[926,132886,132887,132896],{},[929,132888,132889],{},[932,132890,132891,132893],{},[935,132892,940],{"align":24379},[935,132894,132895],{"align":24379},"语义",[972,132897,132898,132905,132912,132919],{},[932,132899,132900,132902],{},[977,132901,600],{"align":24379},[977,132903,132904],{"align":24379},"静态定位",[932,132906,132907,132909],{},[977,132908,622],{"align":24379},[977,132910,132911],{"align":24379},"相对定位",[932,132913,132914,132916],{},[977,132915,644],{"align":24379},[977,132917,132918],{"align":24379},"绝对定位",[932,132920,132921,132923],{},[977,132922,666],{"align":24379},[977,132924,132925],{"align":24379},"固定定位",[175,132927,132928],{},"（1）静态定位：",[124,132930,132931,132942],{},[22,132932,132933,132934,132937,132938,132941],{},"静态定位是元素的 ",[25,132935,132936],{},"默认定位方式"," ， ",[25,132939,132940],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[22,132943,5827],{},[48,132945,132946],{"className":50,"code":132824,"language":52,"meta":53,"style":53},[55,132947,132948,132954,132966,132980,132994],{"__ignoreMap":53},[58,132949,132950,132952],{"class":60,"line":61},[58,132951,131018],{"class":379},[58,132953,76],{"class":75},[58,132955,132956,132958,132960,132962,132964],{"class":60,"line":68},[58,132957,132837],{"class":82},[58,132959,86],{"class":75},[58,132961,622],{"class":82},[58,132963,131033],{"class":75},[58,132965,132846],{"class":64},[58,132967,132968,132970,132972,132974,132976,132978],{"class":60,"line":79},[58,132969,132851],{"class":82},[58,132971,86],{"class":75},[58,132973,1232],{"class":82},[58,132975,93],{"class":92},[58,132977,132860],{"class":75},[58,132979,132863],{"class":64},[58,132981,132982,132984,132986,132988,132990,132992],{"class":60,"line":105},[58,132983,132868],{"class":82},[58,132985,86],{"class":75},[58,132987,1486],{"class":82},[58,132989,93],{"class":92},[58,132991,132877],{"class":75},[58,132993,132880],{"class":64},[58,132995,132996],{"class":60,"line":627},[58,132997,108],{"class":75},[124,132999,133000,133003],{},[22,133001,133002],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[22,133004,133005],{},"静态定位在布局时我们几乎不用的",[175,133007,133008],{},"（2）相对定位",[124,133010,133011,133018],{},[22,133012,133013,133014,133017],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[25,133015,133016],{},"原来的位置"," 来说的（自恋型）",[22,133019,5827],{},[48,133021,133022],{"className":50,"code":132824,"language":52,"meta":53,"style":53},[55,133023,133024,133030,133042,133056,133070],{"__ignoreMap":53},[58,133025,133026,133028],{"class":60,"line":61},[58,133027,131018],{"class":379},[58,133029,76],{"class":75},[58,133031,133032,133034,133036,133038,133040],{"class":60,"line":68},[58,133033,132837],{"class":82},[58,133035,86],{"class":75},[58,133037,622],{"class":82},[58,133039,131033],{"class":75},[58,133041,132846],{"class":64},[58,133043,133044,133046,133048,133050,133052,133054],{"class":60,"line":79},[58,133045,132851],{"class":82},[58,133047,86],{"class":75},[58,133049,1232],{"class":82},[58,133051,93],{"class":92},[58,133053,132860],{"class":75},[58,133055,132863],{"class":64},[58,133057,133058,133060,133062,133064,133066,133068],{"class":60,"line":105},[58,133059,132868],{"class":82},[58,133061,86],{"class":75},[58,133063,1486],{"class":82},[58,133065,93],{"class":92},[58,133067,132877],{"class":75},[58,133069,132880],{"class":64},[58,133071,133072],{"class":60,"line":627},[58,133073,108],{"class":75},[124,133075,133076],{},[22,133077,133078,133079,133081,133082,133084,133085,133088,133089,133092,133093,133095,133096,133099],{},"相对定位的特点：",[54352,133080],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54352,133083],{},"  ② ",[25,133086,133087],{},"原来"," 在标准流的 ",[25,133090,133091],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54352,133094],{},"  ③因此， ",[25,133097,133098],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[175,133101,133102],{},"（3）绝对定位",[124,133104,133105,133114],{},[22,133106,133107,133109,133110,133113],{},[25,133108,132918],{}," 是元素在移动位置的时候，是相对于它 ",[25,133111,133112],{},"祖先元素"," 来说的（拼爹型）",[22,133115,5827],{},[48,133117,133118],{"className":50,"code":132824,"language":52,"meta":53,"style":53},[55,133119,133120,133126,133138,133152,133166],{"__ignoreMap":53},[58,133121,133122,133124],{"class":60,"line":61},[58,133123,131018],{"class":379},[58,133125,76],{"class":75},[58,133127,133128,133130,133132,133134,133136],{"class":60,"line":68},[58,133129,132837],{"class":82},[58,133131,86],{"class":75},[58,133133,622],{"class":82},[58,133135,131033],{"class":75},[58,133137,132846],{"class":64},[58,133139,133140,133142,133144,133146,133148,133150],{"class":60,"line":79},[58,133141,132851],{"class":82},[58,133143,86],{"class":75},[58,133145,1232],{"class":82},[58,133147,93],{"class":92},[58,133149,132860],{"class":75},[58,133151,132863],{"class":64},[58,133153,133154,133156,133158,133160,133162,133164],{"class":60,"line":105},[58,133155,132868],{"class":82},[58,133157,86],{"class":75},[58,133159,1486],{"class":82},[58,133161,93],{"class":92},[58,133163,132877],{"class":75},[58,133165,132880],{"class":64},[58,133167,133168],{"class":60,"line":627},[58,133169,108],{"class":75},[124,133171,133172,133187,133196,133199],{},[22,133173,133174,133175,133177,133178,133180,133181,133183,133184,133186],{},"绝对定位的特点：",[54352,133176],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54352,133179],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54352,133182],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54352,133185],{},"  (4)固定定位",[22,133188,133189,133191,133192,133195],{},[25,133190,132925],{}," 是元素 ",[25,133193,133194],{},"固定于浏览器可视区的位置"," 。（认死理型）",[22,133197,133198],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[22,133200,133201],{},"语法:",[48,133203,133204],{"className":50,"code":132824,"language":52,"meta":53,"style":53},[55,133205,133206,133212,133224,133238,133252],{"__ignoreMap":53},[58,133207,133208,133210],{"class":60,"line":61},[58,133209,131018],{"class":379},[58,133211,76],{"class":75},[58,133213,133214,133216,133218,133220,133222],{"class":60,"line":68},[58,133215,132837],{"class":82},[58,133217,86],{"class":75},[58,133219,622],{"class":82},[58,133221,131033],{"class":75},[58,133223,132846],{"class":64},[58,133225,133226,133228,133230,133232,133234,133236],{"class":60,"line":79},[58,133227,132851],{"class":82},[58,133229,86],{"class":75},[58,133231,1232],{"class":82},[58,133233,93],{"class":92},[58,133235,132860],{"class":75},[58,133237,132863],{"class":64},[58,133239,133240,133242,133244,133246,133248,133250],{"class":60,"line":105},[58,133241,132868],{"class":82},[58,133243,86],{"class":75},[58,133245,1486],{"class":82},[58,133247,93],{"class":92},[58,133249,132877],{"class":75},[58,133251,132880],{"class":64},[58,133253,133254],{"class":60,"line":627},[58,133255,108],{"class":75},[124,133257,133258,133267],{},[22,133259,133260,133261,133263,133264,133266],{},"特点:",[54352,133262],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54352,133265],{},"  ②固定定位不再占有原先的位置,完全脱标",[22,133268,133269,133270,133272,133273,133275,133276,133278],{},"固定在版心位置的方法:",[54352,133271],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54352,133274],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54352,133277],{},"  实例：",[48,133280,133281],{"className":50,"code":132824,"language":52,"meta":53,"style":53},[55,133282,133283,133289,133301,133315,133329],{"__ignoreMap":53},[58,133284,133285,133287],{"class":60,"line":61},[58,133286,131018],{"class":379},[58,133288,76],{"class":75},[58,133290,133291,133293,133295,133297,133299],{"class":60,"line":68},[58,133292,132837],{"class":82},[58,133294,86],{"class":75},[58,133296,622],{"class":82},[58,133298,131033],{"class":75},[58,133300,132846],{"class":64},[58,133302,133303,133305,133307,133309,133311,133313],{"class":60,"line":79},[58,133304,132851],{"class":82},[58,133306,86],{"class":75},[58,133308,1232],{"class":82},[58,133310,93],{"class":92},[58,133312,132860],{"class":75},[58,133314,132863],{"class":64},[58,133316,133317,133319,133321,133323,133325,133327],{"class":60,"line":105},[58,133318,132868],{"class":82},[58,133320,86],{"class":75},[58,133322,1486],{"class":82},[58,133324,93],{"class":92},[58,133326,132877],{"class":75},[58,133328,132880],{"class":64},[58,133330,133331],{"class":60,"line":627},[58,133332,108],{"class":75},[119,133334],{"style":121,"src":133335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[175,133337,133338],{},"(5)粘性定位",[124,133340,133341,133344],{},[22,133342,133343],{},"粘性定位可以被认为是相对定位和固定定位的混合",[22,133345,5827],{},[48,133347,133348],{"className":50,"code":132824,"language":52,"meta":53,"style":53},[55,133349,133350,133356,133368,133382,133396],{"__ignoreMap":53},[58,133351,133352,133354],{"class":60,"line":61},[58,133353,131018],{"class":379},[58,133355,76],{"class":75},[58,133357,133358,133360,133362,133364,133366],{"class":60,"line":68},[58,133359,132837],{"class":82},[58,133361,86],{"class":75},[58,133363,622],{"class":82},[58,133365,131033],{"class":75},[58,133367,132846],{"class":64},[58,133369,133370,133372,133374,133376,133378,133380],{"class":60,"line":79},[58,133371,132851],{"class":82},[58,133373,86],{"class":75},[58,133375,1232],{"class":82},[58,133377,93],{"class":92},[58,133379,132860],{"class":75},[58,133381,132863],{"class":64},[58,133383,133384,133386,133388,133390,133392,133394],{"class":60,"line":105},[58,133385,132868],{"class":82},[58,133387,86],{"class":75},[58,133389,1486],{"class":82},[58,133391,93],{"class":92},[58,133393,132877],{"class":75},[58,133395,132880],{"class":64},[58,133397,133398],{"class":60,"line":627},[58,133399,108],{"class":75},[124,133401,133402],{},[22,133403,133404,133405,133407,133408,133410,133411,133413,133414,133417,133418,133420],{},"粘性定位的特点：",[54352,133406],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54352,133409],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54352,133412],{},"  ③必须添加 top 、left、right、bottom ",[25,133415,133416],{},"其中一个"," 才有效",[54352,133419],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[48,133422,133423],{"className":50,"code":132824,"language":52,"meta":53,"style":53},[55,133424,133425,133431,133443,133457,133471],{"__ignoreMap":53},[58,133426,133427,133429],{"class":60,"line":61},[58,133428,131018],{"class":379},[58,133430,76],{"class":75},[58,133432,133433,133435,133437,133439,133441],{"class":60,"line":68},[58,133434,132837],{"class":82},[58,133436,86],{"class":75},[58,133438,622],{"class":82},[58,133440,131033],{"class":75},[58,133442,132846],{"class":64},[58,133444,133445,133447,133449,133451,133453,133455],{"class":60,"line":79},[58,133446,132851],{"class":82},[58,133448,86],{"class":75},[58,133450,1232],{"class":82},[58,133452,93],{"class":92},[58,133454,132860],{"class":75},[58,133456,132863],{"class":64},[58,133458,133459,133461,133463,133465,133467,133469],{"class":60,"line":105},[58,133460,132868],{"class":82},[58,133462,86],{"class":75},[58,133464,1486],{"class":82},[58,133466,93],{"class":92},[58,133468,132877],{"class":75},[58,133470,132880],{"class":64},[58,133472,133473],{"class":60,"line":627},[58,133474,108],{"class":75},[119,133476],{"style":121,"src":133477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[175,133479,133480],{},"(6)总结",[926,133482,133483,133498],{},[929,133484,133485],{},[932,133486,133487,133489,133492,133495],{},[935,133488,132821],{"align":24379},[935,133490,133491],{"align":24379},"是否脱标",[935,133493,133494],{"align":24379},"移动位置",[935,133496,133497],{"align":24379},"是否常用",[972,133499,133500,133513,133527,133541,133554],{},[932,133501,133502,133505,133507,133510],{},[977,133503,133504],{"align":24379},"Static 静态定位",[977,133506,105307],{"align":24379},[977,133508,133509],{"align":24379},"不能使用边偏移",[977,133511,133512],{"align":24379},"很少",[932,133514,133515,133518,133521,133524],{},[977,133516,133517],{"align":24379},"Relative 相对定位",[977,133519,133520],{"align":24379},"否(占有位置)",[977,133522,133523],{"align":24379},"相对于自身位置移动",[977,133525,133526],{"align":24379},"基本单独使用",[932,133528,133529,133532,133535,133538],{},[977,133530,133531],{"align":24379},"Absolute 绝对定位",[977,133533,133534],{"align":24379},"是(不占有位置)",[977,133536,133537],{"align":24379},"带有定位的父级",[977,133539,133540],{"align":24379},"要和定位父级元素搭配使用",[932,133542,133543,133546,133548,133551],{},[977,133544,133545],{"align":24379},"Fixed 固定定位",[977,133547,133534],{"align":24379},[977,133549,133550],{"align":24379},"浏览器可视区",[977,133552,133553],{"align":24379},"单独使用,不需要父级",[932,133555,133556,133559,133561,133563],{},[977,133557,133558],{"align":24379},"Sticky 粘性定位",[977,133560,133520],{"align":24379},[977,133562,133550],{"align":24379},[977,133564,133565],{"align":24379},"当前阶段少",[19,133567,133568],{"start":68},[22,133569,133570,133573],{},[25,133571,133572],{},"边偏移"," 则决定了该元素的最终位置",[926,133575,133576,133587],{},[929,133577,133578],{},[932,133579,133580,133583,133585],{},[935,133581,133582],{"align":24379},"边偏移属性",[935,133584,28136],{"align":24379},[935,133586,28133],{"align":24379},[972,133588,133589,133600,133611,133621],{},[932,133590,133591,133594,133597],{},[977,133592,133593],{"align":24379},"top",[977,133595,133596],{"align":24379},"top: 80px;",[977,133598,133599],{"align":24379},"顶端偏移量，定义元素相对于父元素上边线的距离",[932,133601,133602,133605,133608],{},[977,133603,133604],{"align":24379},"bottom",[977,133606,133607],{"align":24379},"bottom: 80px ;",[977,133609,133610],{"align":24379},"底部偏移量，定义元素相对于其父元素下边线的距离",[932,133612,133613,133615,133618],{},[977,133614,24379],{"align":24379},[977,133616,133617],{"align":24379},"left: 80px ;",[977,133619,133620],{"align":24379},"左侧偏移量，定义元素相对于其父元素左边线的距离",[932,133622,133623,133625,133628],{},[977,133624,73153],{"align":24379},[977,133626,133627],{"align":24379},"right: 80px ;",[977,133629,133630],{"align":24379},"右侧偏移量，定义元素相对于其父元素右边线的距离",[124,133632,133633],{},[22,133634,195,133635,133637,133638,133640,133641,133643,133644,133647,133648,133650,133651,133653],{},[54352,133636],{},"  ① ",[25,133639,133572],{}," 需要和 ",[25,133642,132821],{}," 联合使用， ",[25,133645,133646],{},"单独使用无效"," ；",[54352,133649],{},"  ②top和bottom不要同时使用",[54352,133652],{},"  ③left和right不要同时使用",[22641,133655,133657],{"id":133656},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[175,133659,133660],{},"子级是绝对定位的话，父级要用相对定位",[124,133662,133663,133666,133669,133672],{},[22,133664,133665],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[22,133667,133668],{},"父盒子需要加定位限制子盒子在父盒子内显示",[22,133670,133671],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[22,133673,133674,133675,133678],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[25,133676,133677],{},"子绝父绝"," 也会遇到",[22641,133680,133682],{"id":133681},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[124,133684,133685,133700],{},[22,133686,133687,133688,133691,133692,133695,133696,133699],{},"在使用 ",[25,133689,133690],{},"定位"," 布局时，可能会 ",[25,133693,133694],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[25,133697,133698],{},"z-index"," 来控制盒子的前后次序 (z轴)",[22,133701,5827],{},[48,133703,133704],{"className":50,"code":132824,"language":52,"meta":53,"style":53},[55,133705,133706,133712,133724,133738,133752],{"__ignoreMap":53},[58,133707,133708,133710],{"class":60,"line":61},[58,133709,131018],{"class":379},[58,133711,76],{"class":75},[58,133713,133714,133716,133718,133720,133722],{"class":60,"line":68},[58,133715,132837],{"class":82},[58,133717,86],{"class":75},[58,133719,622],{"class":82},[58,133721,131033],{"class":75},[58,133723,132846],{"class":64},[58,133725,133726,133728,133730,133732,133734,133736],{"class":60,"line":79},[58,133727,132851],{"class":82},[58,133729,86],{"class":75},[58,133731,1232],{"class":82},[58,133733,93],{"class":92},[58,133735,132860],{"class":75},[58,133737,132863],{"class":64},[58,133739,133740,133742,133744,133746,133748,133750],{"class":60,"line":105},[58,133741,132868],{"class":82},[58,133743,86],{"class":75},[58,133745,1486],{"class":82},[58,133747,93],{"class":92},[58,133749,132877],{"class":75},[58,133751,132880],{"class":64},[58,133753,133754],{"class":60,"line":627},[58,133755,108],{"class":75},[124,133757,133758],{},[22,133759,133760,133761,133637,133763,133765,133766,128339,133769,83169,133772,133774,133775,133777,133778,133781,133782,133647,133785,133787,133788,133791,133793],{},"z-index的特性",[54352,133762],{},[25,133764,127642],{}," ： ",[25,133767,133768],{},"正整数",[25,133770,133771],{},"负整数",[25,133773,979],{}," ，默认值是 0，数值越大，盒子越靠上；",[54352,133776],{},"  ②如果 ",[25,133779,133780],{},"属性值相同"," ，则按照书写顺序， ",[25,133783,133784],{},"后来居上",[54352,133786],{},"  ③数字后面 ",[25,133789,133790],{},"不能加单位",[54352,133792],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22641,133795,133797],{"id":133796},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[175,133799,133800],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[175,133802,133803],{},"方法:",[124,133805,133806,133816],{},[22,133807,133808,133809,133812,133813],{},"left: 50%; 让 ",[25,133810,133811],{},"盒子的左侧"," 移动到 ",[25,133814,133815],{},"父级元素的水平中心位置",[22,133817,133818,133819,133822,133823],{},"margin-left: -100px; 让盒子 ",[25,133820,133821],{},"向左"," 移动 ",[25,133824,133825],{},"自身宽度的一半",[22641,133827,133829],{"id":133828},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[19,133831,133832,133835],{},[22,133833,133834],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[22,133836,133837],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[175,133839,133840],{},"也就是说绝对定位和固定定位和浮动类似",[19,133842,133843],{"start":79},[22,133844,133845],{},"display 是显示模式， 可以改变显示模式有以下方式:",[124,133847,133848,133851,133854],{},[22,133849,133850],{},"可以用inline-block 转换为行内块",[22,133852,133853],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[22,133855,133856],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[175,133858,133859],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22641,133861,133863],{"id":133862},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[19,133865,133866,133869,133872,133875],{},[22,133867,133868],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[22,133870,133871],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[22,133873,133874],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[22,133876,133877],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[48,133879,133880],{"className":50,"code":131636,"language":52,"meta":53,"style":53},[55,133881,133882,133888,133898,133902,133908,133918],{"__ignoreMap":53},[58,133883,133884,133886],{"class":60,"line":61},[58,133885,131643],{"class":379},[58,133887,76],{"class":75},[58,133889,133890,133892,133894,133896],{"class":60,"line":68},[58,133891,131650],{"class":82},[58,133893,86],{"class":75},[58,133895,24379],{"class":82},[58,133897,102],{"class":75},[58,133899,133900],{"class":60,"line":79},[58,133901,108],{"class":75},[58,133903,133904,133906],{"class":60,"line":105},[58,133905,131665],{"class":379},[58,133907,76],{"class":75},[58,133909,133910,133912,133914,133916],{"class":60,"line":627},[58,133911,131650],{"class":82},[58,133913,86],{"class":75},[58,133915,73153],{"class":82},[58,133917,102],{"class":75},[58,133919,133920],{"class":60,"line":509},[58,133921,108],{"class":75},[119,133923],{"style":121,"src":133924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22641,133926,133928],{"id":133927},"_11138-轮播图","11.1.3.8 轮播图",[119,133930],{"style":121,"src":133931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[19,133933,133934],{},[22,133935,133936],{},"制作顺序:",[124,133938,133939,133942,133945,133954],{},[22,133940,133941],{},"大盒子我们类名为： tb-promo 淘宝广告",[22,133943,133944],{},"里面先放一张图片",[22,133946,133947,133948,133950,133951,133953],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54352,133949],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54352,133952],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[22,133955,133956,133957,133959,133960,133962],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54352,133958],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54352,133961],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[19,133964,133965],{"start":68},[22,133966,133967],{},"代码模块",[48,133969,133971],{"className":50,"code":133970,"language":52,"meta":53,"style":53},"\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",[55,133972,133973,133978,133985,133995,134005,134015,134019,134024,134031,134041],{"__ignoreMap":53},[58,133974,133975],{"class":60,"line":61},[58,133976,133977],{"class":64},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[58,133979,133980,133983],{"class":60,"line":68},[58,133981,133982],{"class":379},".son",[58,133984,76],{"class":75},[58,133986,133987,133989,133991,133993],{"class":60,"line":79},[58,133988,132837],{"class":82},[58,133990,86],{"class":75},[58,133992,644],{"class":82},[58,133994,102],{"class":75},[58,133996,133997,133999,134001,134003],{"class":60,"line":105},[58,133998,132851],{"class":82},[58,134000,86],{"class":75},[58,134002,979],{"class":82},[58,134004,102],{"class":75},[58,134006,134007,134009,134011,134013],{"class":60,"line":627},[58,134008,132868],{"class":82},[58,134010,86],{"class":75},[58,134012,979],{"class":82},[58,134014,102],{"class":75},[58,134016,134017],{"class":60,"line":509},[58,134018,108],{"class":75},[58,134020,134021],{"class":60,"line":559},[58,134022,134023],{"class":64},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[58,134025,134026,134029],{"class":60,"line":654},[58,134027,134028],{"class":379},".father",[58,134030,76],{"class":75},[58,134032,134033,134035,134037,134039],{"class":60,"line":671},[58,134034,132837],{"class":82},[58,134036,86],{"class":75},[58,134038,622],{"class":82},[58,134040,102],{"class":75},[58,134042,134043],{"class":60,"line":677},[58,134044,108],{"class":75},[175,134046,134047],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[114,134049,134051],{"id":134050},"_1114-定位数值的移动","11.1.4 定位数值的移动",[119,134053],{"style":121,"src":134054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[175,134056,134057],{},"✨ 黄金口诀：",[175,134059,134060],{},"\"TOP正下负上，LEFT正右负左\"",[175,134062,134063],{},"\"RIGHT正左负右，BOTTOM正上负下",[175,134065,134066],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[175,134068,134069],{},"✨ 简单记：",[175,134071,134072],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[702,134074,134075],{},"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":53,"searchDepth":68,"depth":68,"links":134077},[134078],{"id":132605,"depth":68,"text":132606,"children":134079},[134080,134081,134082,134083],{"id":132609,"depth":79,"text":132610},{"id":132624,"depth":79,"text":132625},{"id":132792,"depth":79,"text":132793},{"id":134050,"depth":79,"text":134051},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132597,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134090,"title":134091,"body":134092,"description":717,"extension":718,"meta":135515,"navigation":720,"path":135516,"seo":135517,"stem":135518,"__hash__":135519},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134093,"toc":135494},[134094,134097,134101,134109,134113,134118,134126,134138,134142,134147,134155,134166,134170,134175,134216,134224,134228,134231,134234,134237,134331,134334,134428,134431,134525,134528,134531,134566,134569,134572,134602,134605,134608,134611,134614,134617,134620,134623,134693,134696,134700,134704,134745,134749,134755,134758,134761,134765,134768,134771,134774,134855,134858,134861,134865,134869,134872,134875,134878,134881,134884,134890,134899,134903,134922,134926,134936,134939,134942,134945,134948,134951,134954,134957,134960,134969,134973,134982,134985,134990,135043,135048,135214,135217,135220,135225,135228,135231,135234,135237,135242,135390,135393,135396,135401,135404,135409,135443,135446,135449,135453,135456,135463,135466,135469,135472,135475,135478,135481,135484,135488,135491],[10,134095,134091],{"id":134096},"_12-显示隐藏与图形资源",[14,134098,134100],{"id":134099},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[124,134102,134103,134106],{},[22,134104,134105],{},"目的:让一个元素在页面中消失或者显示出来",[22,134107,134108],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[114,134110,134112],{"id":134111},"_1211-display-显示","12.1.1 display 显示",[19,134114,134115],{},[22,134116,134117],{},"display 设置或检索对象是否及如何显示",[124,134119,134120,134123],{},[22,134121,134122],{},"display: none;隐藏对象",[22,134124,134125],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[19,134127,134128,134135],{"start":68},[22,134129,134130,134131,134134],{},"特点： display 隐藏元素后， ",[25,134132,134133],{},"不再占"," 有原来的位置",[22,134136,134137],{},"在js中使用非常的广泛",[114,134139,134141],{"id":134140},"_1212-visibility可见性","12.1.2 visibility可见性",[19,134143,134144],{},[22,134145,134146],{},"visibility 属性用于指定一个元素应可见还是隐藏",[124,134148,134149,134152],{},[22,134150,134151],{},"visibility： visible；元素可见",[22,134153,134154],{},"visibility：hidden；元素隐藏",[19,134156,134157,134160,134163],{"start":68},[22,134158,134159],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[22,134161,134162],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[22,134164,134165],{},"隐藏后继续占有原有位置",[114,134167,134169],{"id":134168},"_1213-overflow溢出","12.1.3 overflow溢出",[124,134171,134172],{},[22,134173,134174],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[926,134176,134177,134185],{},[929,134178,134179],{},[932,134180,134181,134183],{},[935,134182,127642],{"align":24379},[935,134184,28133],{"align":24379},[972,134186,134187,134195,134202,134209],{},[932,134188,134189,134192],{},[977,134190,134191],{"align":24379},"visible",[977,134193,134194],{"align":24379},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[932,134196,134197,134199],{},[977,134198,62346],{"align":24379},[977,134200,134201],{"align":24379},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[932,134203,134204,134206],{},[977,134205,129594],{"align":24379},[977,134207,134208],{"align":24379},"不管超出内容否，总是显示滚动条",[932,134210,134211,134213],{},[977,134212,73294],{"align":24379},[977,134214,134215],{"align":24379},"超出自动显示滚动条，不超出不显示滚动条",[124,134217,134218,134221],{},[22,134219,134220],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[22,134222,134223],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[114,134225,134227],{"id":134226},"_1214-案例收获","12.1.4 案例收获",[119,134229],{"style":121,"src":134230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[175,134232,134233],{},"问题：没做出来动态效果，使用hover没实现",[175,134235,134236],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[48,134238,134239],{"className":50,"code":577,"language":52,"meta":53,"style":53},[55,134240,134241,134245,134259,134263,134277,134281,134295,134299,134313,134317],{"__ignoreMap":53},[58,134242,134243],{"class":60,"line":61},[58,134244,584],{"class":64},[58,134246,134247,134249,134251,134253,134255,134257],{"class":60,"line":68},[58,134248,589],{"class":379},[58,134250,592],{"class":75},[58,134252,595],{"class":82},[58,134254,86],{"class":75},[58,134256,600],{"class":82},[58,134258,603],{"class":75},[58,134260,134261],{"class":60,"line":79},[58,134262,608],{"class":64},[58,134264,134265,134267,134269,134271,134273,134275],{"class":60,"line":105},[58,134266,613],{"class":379},[58,134268,592],{"class":75},[58,134270,595],{"class":82},[58,134272,86],{"class":75},[58,134274,622],{"class":82},[58,134276,603],{"class":75},[58,134278,134279],{"class":60,"line":627},[58,134280,630],{"class":64},[58,134282,134283,134285,134287,134289,134291,134293],{"class":60,"line":509},[58,134284,635],{"class":379},[58,134286,592],{"class":75},[58,134288,595],{"class":82},[58,134290,86],{"class":75},[58,134292,644],{"class":82},[58,134294,603],{"class":75},[58,134296,134297],{"class":60,"line":559},[58,134298,651],{"class":64},[58,134300,134301,134303,134305,134307,134309,134311],{"class":60,"line":654},[58,134302,657],{"class":379},[58,134304,592],{"class":75},[58,134306,595],{"class":82},[58,134308,86],{"class":75},[58,134310,666],{"class":82},[58,134312,603],{"class":75},[58,134314,134315],{"class":60,"line":671},[58,134316,674],{"class":64},[58,134318,134319,134321,134323,134325,134327,134329],{"class":60,"line":677},[58,134320,680],{"class":379},[58,134322,592],{"class":75},[58,134324,595],{"class":82},[58,134326,86],{"class":75},[58,134328,689],{"class":82},[58,134330,603],{"class":75},[175,134332,134333],{},"完整代码：",[48,134335,134336],{"className":50,"code":577,"language":52,"meta":53,"style":53},[55,134337,134338,134342,134356,134360,134374,134378,134392,134396,134410,134414],{"__ignoreMap":53},[58,134339,134340],{"class":60,"line":61},[58,134341,584],{"class":64},[58,134343,134344,134346,134348,134350,134352,134354],{"class":60,"line":68},[58,134345,589],{"class":379},[58,134347,592],{"class":75},[58,134349,595],{"class":82},[58,134351,86],{"class":75},[58,134353,600],{"class":82},[58,134355,603],{"class":75},[58,134357,134358],{"class":60,"line":79},[58,134359,608],{"class":64},[58,134361,134362,134364,134366,134368,134370,134372],{"class":60,"line":105},[58,134363,613],{"class":379},[58,134365,592],{"class":75},[58,134367,595],{"class":82},[58,134369,86],{"class":75},[58,134371,622],{"class":82},[58,134373,603],{"class":75},[58,134375,134376],{"class":60,"line":627},[58,134377,630],{"class":64},[58,134379,134380,134382,134384,134386,134388,134390],{"class":60,"line":509},[58,134381,635],{"class":379},[58,134383,592],{"class":75},[58,134385,595],{"class":82},[58,134387,86],{"class":75},[58,134389,644],{"class":82},[58,134391,603],{"class":75},[58,134393,134394],{"class":60,"line":559},[58,134395,651],{"class":64},[58,134397,134398,134400,134402,134404,134406,134408],{"class":60,"line":654},[58,134399,657],{"class":379},[58,134401,592],{"class":75},[58,134403,595],{"class":82},[58,134405,86],{"class":75},[58,134407,666],{"class":82},[58,134409,603],{"class":75},[58,134411,134412],{"class":60,"line":671},[58,134413,674],{"class":64},[58,134415,134416,134418,134420,134422,134424,134426],{"class":60,"line":677},[58,134417,680],{"class":379},[58,134419,592],{"class":75},[58,134421,595],{"class":82},[58,134423,86],{"class":75},[58,134425,689],{"class":82},[58,134427,603],{"class":75},[175,134429,134430],{},"分布思路重点详解：",[48,134432,134433],{"className":50,"code":577,"language":52,"meta":53,"style":53},[55,134434,134435,134439,134453,134457,134471,134475,134489,134493,134507,134511],{"__ignoreMap":53},[58,134436,134437],{"class":60,"line":61},[58,134438,584],{"class":64},[58,134440,134441,134443,134445,134447,134449,134451],{"class":60,"line":68},[58,134442,589],{"class":379},[58,134444,592],{"class":75},[58,134446,595],{"class":82},[58,134448,86],{"class":75},[58,134450,600],{"class":82},[58,134452,603],{"class":75},[58,134454,134455],{"class":60,"line":79},[58,134456,608],{"class":64},[58,134458,134459,134461,134463,134465,134467,134469],{"class":60,"line":105},[58,134460,613],{"class":379},[58,134462,592],{"class":75},[58,134464,595],{"class":82},[58,134466,86],{"class":75},[58,134468,622],{"class":82},[58,134470,603],{"class":75},[58,134472,134473],{"class":60,"line":627},[58,134474,630],{"class":64},[58,134476,134477,134479,134481,134483,134485,134487],{"class":60,"line":509},[58,134478,635],{"class":379},[58,134480,592],{"class":75},[58,134482,595],{"class":82},[58,134484,86],{"class":75},[58,134486,644],{"class":82},[58,134488,603],{"class":75},[58,134490,134491],{"class":60,"line":559},[58,134492,651],{"class":64},[58,134494,134495,134497,134499,134501,134503,134505],{"class":60,"line":654},[58,134496,657],{"class":379},[58,134498,592],{"class":75},[58,134500,595],{"class":82},[58,134502,86],{"class":75},[58,134504,666],{"class":82},[58,134506,603],{"class":75},[58,134508,134509],{"class":60,"line":671},[58,134510,674],{"class":64},[58,134512,134513,134515,134517,134519,134521,134523],{"class":60,"line":677},[58,134514,680],{"class":379},[58,134516,592],{"class":75},[58,134518,595],{"class":82},[58,134520,86],{"class":75},[58,134522,689],{"class":82},[58,134524,603],{"class":75},[119,134526],{"style":121,"src":134527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[175,134529,134530],{},"图片太大，盒子太小，此时需要修改图片的大小",[48,134532,134534],{"className":364,"code":134533,"language":366,"meta":53,"style":53},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[55,134535,134536],{"__ignoreMap":53},[58,134537,134538,134540,134542,134544,134546,134549,134551,134553,134556,134559,134561,134564],{"class":60,"line":61},[58,134539,373],{"class":75},[58,134541,119],{"class":71},[58,134543,55873],{"class":379},[58,134545,383],{"class":75},[58,134547,134548],{"class":386},"\"images\u002Fpic.jpg\"",[58,134550,55881],{"class":379},[58,134552,383],{"class":75},[58,134554,134555],{"class":386},"\"描述文字\"",[58,134557,134558],{"class":379}," title",[58,134560,383],{"class":75},[58,134562,134563],{"class":386},"\"悬停提示\"",[58,134565,403],{"class":75},[119,134567],{"style":121,"src":134568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[175,134570,134571],{},"制造遮罩层",[48,134573,134574],{"className":364,"code":134533,"language":366,"meta":53,"style":53},[55,134575,134576],{"__ignoreMap":53},[58,134577,134578,134580,134582,134584,134586,134588,134590,134592,134594,134596,134598,134600],{"class":60,"line":61},[58,134579,373],{"class":75},[58,134581,119],{"class":71},[58,134583,55873],{"class":379},[58,134585,383],{"class":75},[58,134587,134548],{"class":386},[58,134589,55881],{"class":379},[58,134591,383],{"class":75},[58,134593,134555],{"class":386},[58,134595,134558],{"class":379},[58,134597,383],{"class":75},[58,134599,134563],{"class":386},[58,134601,403],{"class":75},[175,134603,134604],{},"此时是这样的为标准流",[119,134606],{"style":121,"src":134607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[175,134609,134610],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[175,134612,134613],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[175,134615,134616],{},"让他在中间，用center(background-position)",[175,134618,134619],{},"将需要变的尽可能放到一个盒子中",[175,134621,134622],{},"放大盒子上内部盒子发生变化",[48,134624,134626],{"className":50,"code":134625,"language":52,"meta":53,"style":53},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[55,134627,134628,134634,134644,134648,134655,134665,134677,134689],{"__ignoreMap":53},[58,134629,134630,134632],{"class":60,"line":61},[58,134631,128243],{"class":379},[58,134633,76],{"class":75},[58,134635,134636,134638,134640,134642],{"class":60,"line":68},[58,134637,132837],{"class":82},[58,134639,86],{"class":75},[58,134641,622],{"class":82},[58,134643,102],{"class":75},[58,134645,134646],{"class":60,"line":79},[58,134647,108],{"class":75},[58,134649,134650,134653],{"class":60,"line":105},[58,134651,134652],{"class":379},".child",[58,134654,76],{"class":75},[58,134656,134657,134659,134661,134663],{"class":60,"line":627},[58,134658,132837],{"class":82},[58,134660,86],{"class":75},[58,134662,644],{"class":82},[58,134664,102],{"class":75},[58,134666,134667,134669,134671,134673,134675],{"class":60,"line":509},[58,134668,132851],{"class":82},[58,134670,86],{"class":75},[58,134672,1442],{"class":82},[58,134674,1114],{"class":92},[58,134676,102],{"class":75},[58,134678,134679,134681,134683,134685,134687],{"class":60,"line":559},[58,134680,132868],{"class":82},[58,134682,86],{"class":75},[58,134684,1442],{"class":82},[58,134686,1114],{"class":92},[58,134688,102],{"class":75},[58,134690,134691],{"class":60,"line":654},[58,134692,108],{"class":75},[175,134694,134695],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,134697,134699],{"id":134698},"_122-精灵图","12.2 精灵图",[114,134701,134703],{"id":134702},"_1221-理解","12.2.1 理解",[19,134705,134706,134724],{},[22,134707,134708,134709,132937,134712,134715,134716,134719,134720,134723],{},"目的： ",[25,134710,134711],{},"为了有效地减少服务器接收和发送请求的次数",[25,134713,134714],{},"提高"," 页面的 ",[25,134717,134718],{},"加载速度"," ，出现了 ",[25,134721,134722],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[22,134725,134726,134727,134729,134730,134732,134733,134735,134736,134738,134739,134741,134742,134744],{},"使用精灵图核心：",[54352,134728],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54352,134731],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54352,134734],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54352,134737],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54352,134740],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54352,134743],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[114,134746,134748],{"id":134747},"_1222-扒图","12.2.2 扒图",[48,134750,134753],{"className":134751,"code":134752,"language":5833},[5831],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[55,134754,134752],{"__ignoreMap":53},[119,134756],{"style":121,"src":134757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[119,134759],{"style":121,"src":134760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[114,134762,134764],{"id":134763},"_1223-精灵图的实现","12.2.3 精灵图的实现",[119,134766],{"style":121,"src":134767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[175,134769,134770],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[119,134772],{"style":121,"src":134773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[48,134775,134777],{"className":50,"code":134776,"language":52,"meta":53,"style":53},"\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",[55,134778,134779,134784,134791,134803,134815,134834,134851],{"__ignoreMap":53},[58,134780,134781],{"class":60,"line":61},[58,134782,134783],{"class":64},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[58,134785,134786,134789],{"class":60,"line":68},[58,134787,134788],{"class":379},".icon",[58,134790,76],{"class":75},[58,134792,134793,134795,134797,134799,134801],{"class":60,"line":79},[58,134794,71200],{"class":82},[58,134796,86],{"class":75},[58,134798,1486],{"class":82},[58,134800,93],{"class":92},[58,134802,102],{"class":75},[58,134804,134805,134807,134809,134811,134813],{"class":60,"line":105},[58,134806,71420],{"class":82},[58,134808,86],{"class":75},[58,134810,1486],{"class":82},[58,134812,93],{"class":92},[58,134814,102],{"class":75},[58,134816,134817,134819,134821,134823,134825,134828,134830,134832],{"class":60,"line":627},[58,134818,71243],{"class":82},[58,134820,86],{"class":75},[58,134822,62358],{"class":82},[58,134824,793],{"class":75},[58,134826,134827],{"class":5862},"sprites.png",[58,134829,14358],{"class":75},[58,134831,62368],{"class":82},[58,134833,102],{"class":75},[58,134835,134836,134838,134840,134842,134844,134847,134849],{"class":60,"line":509},[58,134837,129435],{"class":82},[58,134839,86],{"class":75},[58,134841,52401],{"class":82},[58,134843,93],{"class":92},[58,134845,134846],{"class":82}," -20",[58,134848,93],{"class":92},[58,134850,102],{"class":75},[58,134852,134853],{"class":60,"line":559},[58,134854,108],{"class":75},[119,134856],{"style":121,"src":134857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[175,134859,134860],{},"在前端中坐标轴的正方向是右和下",[14,134862,134864],{"id":134863},"_123-字体图标","12.3 字体图标",[114,134866,134868],{"id":134867},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[175,134870,134871],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[175,134873,134874],{},"精灵图是有诸多优点的，但是缺点很明显。",[175,134876,134877],{},"1.图片文件还是比较大的。",[175,134879,134880],{},"2.图片本身放大和缩小会失真。",[175,134882,134883],{},"3.一旦图片制作完毕想要更换非常复杂。",[175,134885,134886,134887,26384],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[25,134888,134889],{},"字体图标 iconfont",[175,134891,134892,134895,134896,29029],{},[25,134893,134894],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[25,134897,134898],{},"展示的是图标，本质属于字体",[114,134900,134902],{"id":134901},"_1232-字体图标的优点","12.3.2 字体图标的优点",[124,134904,134905,134910,134913,134916,134919],{},[22,134906,134907,134909],{},[25,134908,26520],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[22,134911,134912],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[22,134914,134915],{},"兼容性：几乎支持所有的浏览器，请放心使用",[22,134917,134918],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[22,134920,134921],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[114,134923,134925],{"id":134924},"_1233-字体库下载网站","12.3.3 字体库下载网站",[124,134927,134928],{},[22,134929,134930,134931],{},"icomoon字体库：",[376,134932,134935],{"href":134933,"rel":134934},"http:\u002F\u002Ficomoon.io\u002F",[24508],"http:\u002F\u002Ficomoon.io",[175,134937,134938],{},"进去之后点icomoon app",[119,134940],{"style":121,"src":134941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[175,134943,134944],{},"可以对其编辑：",[119,134946],{"style":121,"src":134947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[175,134949,134950],{},"生成字体：",[119,134952],{"style":121,"src":134953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[175,134955,134956],{},"下载：",[119,134958],{"style":121,"src":134959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[124,134961,134962],{},[22,134963,134964,134965],{},"阿里iconfont字体库： ",[376,134966,134967],{"href":134967,"rel":134968},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24508],[114,134970,134972],{"id":134971},"_1234-字体图标的引入","12.3.4 字体图标的引入",[19,134974,134975],{},[22,134976,134977,134978,134981],{},"把下载包里面的 ",[25,134979,134980],{},"fonts"," 文件夹放入页面根目录下",[119,134983],{"style":121,"src":134984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[19,134986,134987],{"start":68},[22,134988,134989],{},"字体文件格式",[926,134991,134992,135001],{},[929,134993,134994],{},[932,134995,134996,134999],{},[935,134997,134998],{"align":24379},"格式",[935,135000,24383],{"align":24379},[972,135002,135003,135013,135023,135033],{},[932,135004,135005,135010],{},[977,135006,135007],{"align":24379},[25,135008,135009],{},".ttf",[977,135011,135012],{"align":24379},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[932,135014,135015,135020],{},[977,135016,135017],{"align":24379},[25,135018,135019],{},".woff",[977,135021,135022],{"align":24379},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[932,135024,135025,135030],{},[977,135026,135027],{"align":24379},[25,135028,135029],{},".eot",[977,135031,135032],{"align":24379},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[932,135034,135035,135040],{},[977,135036,135037],{"align":24379},[25,135038,135039],{},"svg",[977,135041,135042],{"align":24379},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[19,135044,135045],{"start":79},[22,135046,135047],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[48,135049,135051],{"className":50,"code":135050,"language":52,"meta":53,"style":53},"\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",[55,135052,135053,135058,135065,135077,135093,135118,135139,135159,135179,135183,135189,135199,135210],{"__ignoreMap":53},[58,135054,135055],{"class":60,"line":61},[58,135056,135057],{"class":64},"\u002F* 引入字体图标 *\u002F\n",[58,135059,135060,135063],{"class":60,"line":68},[58,135061,135062],{"class":92},"@font-face",[58,135064,76],{"class":75},[58,135066,135067,135070,135072,135075],{"class":60,"line":79},[58,135068,135069],{"class":82},"  font-family",[58,135071,86],{"class":75},[58,135073,135074],{"class":386},"'icomoon'",[58,135076,102],{"class":75},[58,135078,135079,135082,135084,135086,135088,135091],{"class":60,"line":105},[58,135080,135081],{"class":82},"  src",[58,135083,86],{"class":75},[58,135085,62358],{"class":82},[58,135087,793],{"class":75},[58,135089,135090],{"class":386},"'fonts\u002Ficomoon.eot'",[58,135092,3365],{"class":75},[58,135094,135095,135097,135099,135101,135103,135106,135108,135111,135113,135116],{"class":60,"line":627},[58,135096,135081],{"class":82},[58,135098,86],{"class":75},[58,135100,62358],{"class":82},[58,135102,793],{"class":75},[58,135104,135105],{"class":386},"'fonts\u002Ficomoon.eot?#iefix'",[58,135107,14358],{"class":75},[58,135109,135110],{"class":82},"format",[58,135112,793],{"class":75},[58,135114,135115],{"class":386},"'embedded-opentype'",[58,135117,38691],{"class":75},[58,135119,135120,135123,135125,135128,135130,135132,135134,135137],{"class":60,"line":509},[58,135121,135122],{"class":82},"       url",[58,135124,793],{"class":75},[58,135126,135127],{"class":386},"'fonts\u002Ficomoon.woff'",[58,135129,14358],{"class":75},[58,135131,135110],{"class":82},[58,135133,793],{"class":75},[58,135135,135136],{"class":386},"'woff'",[58,135138,38691],{"class":75},[58,135140,135141,135143,135145,135148,135150,135152,135154,135157],{"class":60,"line":559},[58,135142,135122],{"class":82},[58,135144,793],{"class":75},[58,135146,135147],{"class":386},"'fonts\u002Ficomoon.ttf'",[58,135149,14358],{"class":75},[58,135151,135110],{"class":82},[58,135153,793],{"class":75},[58,135155,135156],{"class":386},"'truetype'",[58,135158,38691],{"class":75},[58,135160,135161,135163,135165,135168,135170,135172,135174,135177],{"class":60,"line":654},[58,135162,135122],{"class":82},[58,135164,793],{"class":75},[58,135166,135167],{"class":386},"'fonts\u002Ficomoon.svg#icomoon'",[58,135169,14358],{"class":75},[58,135171,135110],{"class":82},[58,135173,793],{"class":75},[58,135175,135176],{"class":386},"'svg'",[58,135178,3365],{"class":75},[58,135180,135181],{"class":60,"line":671},[58,135182,108],{"class":75},[58,135184,135185,135187],{"class":60,"line":677},[58,135186,134788],{"class":379},[58,135188,76],{"class":75},[58,135190,135191,135193,135195,135197],{"class":60,"line":2260},[58,135192,135069],{"class":82},[58,135194,86],{"class":75},[58,135196,135074],{"class":386},[58,135198,102],{"class":75},[58,135200,135201,135204,135206,135208],{"class":60,"line":694},[58,135202,135203],{"class":82},"  font-style",[58,135205,86],{"class":75},[58,135207,64473],{"class":82},[58,135209,102],{"class":75},[58,135211,135212],{"class":60,"line":2270},[58,135213,108],{"class":75},[175,135215,135216],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[119,135218],{"style":121,"src":135219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[19,135221,135222],{"start":105},[22,135223,135224],{},"添加字体",[119,135226],{"style":121,"src":135227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[175,135229,135230],{},"复制：",[119,135232],{"style":121,"src":135233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[175,135235,135236],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[19,135238,135239],{"start":627},[22,135240,135241],{},"代码展示：",[48,135243,135244],{"className":50,"code":135050,"language":52,"meta":53,"style":53},[55,135245,135246,135250,135256,135266,135280,135302,135320,135338,135356,135360,135366,135376,135386],{"__ignoreMap":53},[58,135247,135248],{"class":60,"line":61},[58,135249,135057],{"class":64},[58,135251,135252,135254],{"class":60,"line":68},[58,135253,135062],{"class":92},[58,135255,76],{"class":75},[58,135257,135258,135260,135262,135264],{"class":60,"line":79},[58,135259,135069],{"class":82},[58,135261,86],{"class":75},[58,135263,135074],{"class":386},[58,135265,102],{"class":75},[58,135267,135268,135270,135272,135274,135276,135278],{"class":60,"line":105},[58,135269,135081],{"class":82},[58,135271,86],{"class":75},[58,135273,62358],{"class":82},[58,135275,793],{"class":75},[58,135277,135090],{"class":386},[58,135279,3365],{"class":75},[58,135281,135282,135284,135286,135288,135290,135292,135294,135296,135298,135300],{"class":60,"line":627},[58,135283,135081],{"class":82},[58,135285,86],{"class":75},[58,135287,62358],{"class":82},[58,135289,793],{"class":75},[58,135291,135105],{"class":386},[58,135293,14358],{"class":75},[58,135295,135110],{"class":82},[58,135297,793],{"class":75},[58,135299,135115],{"class":386},[58,135301,38691],{"class":75},[58,135303,135304,135306,135308,135310,135312,135314,135316,135318],{"class":60,"line":509},[58,135305,135122],{"class":82},[58,135307,793],{"class":75},[58,135309,135127],{"class":386},[58,135311,14358],{"class":75},[58,135313,135110],{"class":82},[58,135315,793],{"class":75},[58,135317,135136],{"class":386},[58,135319,38691],{"class":75},[58,135321,135322,135324,135326,135328,135330,135332,135334,135336],{"class":60,"line":559},[58,135323,135122],{"class":82},[58,135325,793],{"class":75},[58,135327,135147],{"class":386},[58,135329,14358],{"class":75},[58,135331,135110],{"class":82},[58,135333,793],{"class":75},[58,135335,135156],{"class":386},[58,135337,38691],{"class":75},[58,135339,135340,135342,135344,135346,135348,135350,135352,135354],{"class":60,"line":654},[58,135341,135122],{"class":82},[58,135343,793],{"class":75},[58,135345,135167],{"class":386},[58,135347,14358],{"class":75},[58,135349,135110],{"class":82},[58,135351,793],{"class":75},[58,135353,135176],{"class":386},[58,135355,3365],{"class":75},[58,135357,135358],{"class":60,"line":671},[58,135359,108],{"class":75},[58,135361,135362,135364],{"class":60,"line":677},[58,135363,134788],{"class":379},[58,135365,76],{"class":75},[58,135367,135368,135370,135372,135374],{"class":60,"line":2260},[58,135369,135069],{"class":82},[58,135371,86],{"class":75},[58,135373,135074],{"class":386},[58,135375,102],{"class":75},[58,135377,135378,135380,135382,135384],{"class":60,"line":694},[58,135379,135203],{"class":82},[58,135381,86],{"class":75},[58,135383,64473],{"class":82},[58,135385,102],{"class":75},[58,135387,135388],{"class":60,"line":2270},[58,135389,108],{"class":75},[119,135391],{"style":121,"src":135392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[175,135394,135395],{},"更加细节展示：",[19,135397,135398],{},[22,135399,135400],{},"html 标签内添加小图标",[119,135402],{"style":121,"src":135403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[19,135405,135406],{"start":68},[22,135407,135408],{},"给标签定义字体",[48,135410,135411],{"className":364,"code":131274,"language":366,"meta":53,"style":53},[55,135412,135413,135417,135431,135435],{"__ignoreMap":53},[58,135414,135415],{"class":60,"line":61},[58,135416,131281],{"class":64},[58,135418,135419,135421,135423,135425,135427,135429],{"class":60,"line":68},[58,135420,373],{"class":75},[58,135422,72],{"class":71},[58,135424,54124],{"class":379},[58,135426,383],{"class":75},[58,135428,131294],{"class":386},[58,135430,403],{"class":75},[58,135432,135433],{"class":60,"line":79},[58,135434,131301],{"class":75},[58,135436,135437,135439,135441],{"class":60,"line":105},[58,135438,52423],{"class":75},[58,135440,72],{"class":71},[58,135442,403],{"class":75},[175,135444,135445],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[119,135447],{"style":121,"src":135448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[114,135450,135452],{"id":135451},"_1235-字体图标的追加","12.3.5 字体图标的追加",[175,135454,135455],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[175,135457,135458,135459,135462],{},"把压缩包里面的 ",[25,135460,135461],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[175,135464,135465],{},"打开网站，点下方：",[119,135467],{"style":121,"src":135468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[119,135470],{"style":121,"src":135471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[119,135473],{"style":121,"src":135474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[175,135476,135477],{},"点yes重新加载",[175,135479,135480],{},"然后重复之前的操作就可以实现了",[175,135482,135483],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[114,135485,135487],{"id":135486},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[119,135489],{"style":121,"src":135490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[702,135492,135493],{},"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":53,"searchDepth":68,"depth":68,"links":135495},[135496,135502,135507],{"id":134099,"depth":68,"text":134100,"children":135497},[135498,135499,135500,135501],{"id":134111,"depth":79,"text":134112},{"id":134140,"depth":79,"text":134141},{"id":134168,"depth":79,"text":134169},{"id":134226,"depth":79,"text":134227},{"id":134698,"depth":68,"text":134699,"children":135503},[135504,135505,135506],{"id":134702,"depth":79,"text":134703},{"id":134747,"depth":79,"text":134748},{"id":134763,"depth":79,"text":134764},{"id":134863,"depth":68,"text":134864,"children":135508},[135509,135510,135511,135512,135513,135514],{"id":134867,"depth":79,"text":134868},{"id":134901,"depth":79,"text":134902},{"id":134924,"depth":79,"text":134925},{"id":134971,"depth":79,"text":134972},{"id":135451,"depth":79,"text":135452},{"id":135486,"depth":79,"text":135487},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134091,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135521,"title":135522,"body":135523,"description":717,"extension":718,"meta":136750,"navigation":720,"path":136751,"seo":136752,"stem":136753,"__hash__":136754},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135524,"toc":136731},[135525,135528,135532,135535,135549,135617,135647,135650,135654,135658,135760,135807,135811,135814,135817,135851,135854,135857,135860,135863,135866,135869,135872,135874,135877,135880,135883,135886,135889,135892,135895,135923,135926,135930,135933,135940,135943,135946,135972,135975,135979,135982,135985,135992,135996,135999,136001,136033,136036,136039,136051,136057,136060,136063,136066,136068,136072,136075,136078,136081,136126,136130,136132,136135,136142,136184,136187,136191,136196,136210,136214,136217,136220,136223,136226,136229,136263,136266,136269,136323,136326,136329,136332,136335,136387,136390,136393,136442,136446,136448,136451,136454,136457,136460,136463,136521,136524,136530,136533,136536,136568,136571,136575,136579,136582,136614,136618,136621,136665,136669,136672,136675,136678,136681,136684,136687,136690,136692,136695,136697,136700,136703,136706,136709,136714,136717,136719,136722,136725,136728],[10,135526,135522],{"id":135527},"_13-界面样式与布局技巧",[14,135529,135531],{"id":135530},"_131-css三角","13.1 css三角",[175,135533,135534],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[124,135536,135537,135540,135543,135546],{},[22,135538,135539],{},"用css 边框可以模拟三角效果",[22,135541,135542],{},"宽度高度为0",[22,135544,135545],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[22,135547,135548],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[48,135550,135552],{"className":50,"code":135551,"language":52,"meta":53,"style":53},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[55,135553,135554,135559,135566,135576,135586,135602,135613],{"__ignoreMap":53},[58,135555,135556],{"class":60,"line":61},[58,135557,135558],{"class":64},"\u002F* CSS 实现三角形 *\u002F\n",[58,135560,135561,135564],{"class":60,"line":68},[58,135562,135563],{"class":379},".triangle",[58,135565,76],{"class":75},[58,135567,135568,135570,135572,135574],{"class":60,"line":79},[58,135569,71200],{"class":82},[58,135571,86],{"class":75},[58,135573,979],{"class":82},[58,135575,102],{"class":75},[58,135577,135578,135580,135582,135584],{"class":60,"line":105},[58,135579,71420],{"class":82},[58,135581,86],{"class":75},[58,135583,979],{"class":82},[58,135585,102],{"class":75},[58,135587,135588,135590,135592,135594,135596,135598,135600],{"class":60,"line":627},[58,135589,83],{"class":82},[58,135591,86],{"class":75},[58,135593,1232],{"class":82},[58,135595,93],{"class":92},[58,135597,96],{"class":82},[58,135599,64623],{"class":82},[58,135601,102],{"class":75},[58,135603,135604,135607,135609,135611],{"class":60,"line":509},[58,135605,135606],{"class":82},"  border-bottom-color",[58,135608,86],{"class":75},[58,135610,63001],{"class":82},[58,135612,102],{"class":75},[58,135614,135615],{"class":60,"line":559},[58,135616,108],{"class":75},[48,135618,135619],{"className":50,"code":131327,"language":52,"meta":53,"style":53},[55,135620,135621,135627,135643],{"__ignoreMap":53},[58,135622,135623,135625],{"class":60,"line":61},[58,135624,72],{"class":71},[58,135626,76],{"class":75},[58,135628,135629,135631,135633,135635,135637,135639,135641],{"class":60,"line":68},[58,135630,83],{"class":82},[58,135632,86],{"class":75},[58,135634,89],{"class":82},[58,135636,93],{"class":92},[58,135638,96],{"class":82},[58,135640,99],{"class":82},[58,135642,102],{"class":75},[58,135644,135645],{"class":60,"line":79},[58,135646,108],{"class":75},[119,135648],{"style":121,"src":135649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,135651,135653],{"id":135652},"_132-css用户界面样式","13.2 css用户界面样式",[114,135655,135657],{"id":135656},"_1321-鼠标样式","13.2.1 鼠标样式",[48,135659,135661],{"className":50,"code":135660,"language":52,"meta":53,"style":53},"\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",[55,135662,135663,135668,135687,135705,135724,135741],{"__ignoreMap":53},[58,135664,135665],{"class":60,"line":61},[58,135666,135667],{"class":64},"\u002F* 鼠标样式 *\u002F\n",[58,135669,135670,135672,135674,135677,135679,135681,135684],{"class":60,"line":68},[58,135671,72],{"class":71},[58,135673,592],{"class":75},[58,135675,135676],{"class":82},"cursor",[58,135678,86],{"class":75},[58,135680,62662],{"class":82},[58,135682,135683],{"class":75},"; }   ",[58,135685,135686],{"class":64},"\u002F* 手型 *\u002F\n",[58,135688,135689,135691,135693,135695,135697,135700,135702],{"class":60,"line":79},[58,135690,72],{"class":71},[58,135692,592],{"class":75},[58,135694,135676],{"class":82},[58,135696,86],{"class":75},[58,135698,135699],{"class":82},"default",[58,135701,135683],{"class":75},[58,135703,135704],{"class":64},"\u002F* 默认 *\u002F\n",[58,135706,135707,135709,135711,135713,135715,135718,135721],{"class":60,"line":105},[58,135708,72],{"class":71},[58,135710,592],{"class":75},[58,135712,135676],{"class":82},[58,135714,86],{"class":75},[58,135716,135717],{"class":82},"move",[58,135719,135720],{"class":75},"; }      ",[58,135722,135723],{"class":64},"\u002F* 移动 *\u002F\n",[58,135725,135726,135728,135730,135732,135734,135736,135738],{"class":60,"line":627},[58,135727,72],{"class":71},[58,135729,592],{"class":75},[58,135731,135676],{"class":82},[58,135733,86],{"class":75},[58,135735,5833],{"class":82},[58,135737,135720],{"class":75},[58,135739,135740],{"class":64},"\u002F* 文本 *\u002F\n",[58,135742,135743,135745,135747,135749,135751,135754,135757],{"class":60,"line":509},[58,135744,72],{"class":71},[58,135746,592],{"class":75},[58,135748,135676],{"class":82},[58,135750,86],{"class":75},[58,135752,135753],{"class":82},"not-allowed",[58,135755,135756],{"class":75},"; } ",[58,135758,135759],{"class":64},"\u002F* 禁止 *\u002F\n",[926,135761,135762,135770],{},[929,135763,135764],{},[932,135765,135766,135768],{},[935,135767,127642],{"align":24379},[935,135769,28133],{"align":24379},[972,135771,135772,135779,135786,135793,135800],{},[932,135773,135774,135776],{},[977,135775,135699],{"align":24379},[977,135777,135778],{"align":24379},"小白 默认",[932,135780,135781,135783],{},[977,135782,62662],{"align":24379},[977,135784,135785],{"align":24379},"小手",[932,135787,135788,135790],{},[977,135789,135717],{"align":24379},[977,135791,135792],{"align":24379},"移动",[932,135794,135795,135797],{},[977,135796,5833],{"align":24379},[977,135798,135799],{"align":24379},"文本",[932,135801,135802,135804],{},[977,135803,135753],{"align":24379},[977,135805,135806],{"align":24379},"禁止",[114,135808,135810],{"id":135809},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[175,135812,135813],{},"去除表单轮廓线",[175,135815,135816],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[48,135818,135819],{"className":50,"code":51,"language":52,"meta":53,"style":53},[55,135820,135821,135825,135831,135847],{"__ignoreMap":53},[58,135822,135823],{"class":60,"line":61},[58,135824,65],{"class":64},[58,135826,135827,135829],{"class":60,"line":68},[58,135828,72],{"class":71},[58,135830,76],{"class":75},[58,135832,135833,135835,135837,135839,135841,135843,135845],{"class":60,"line":79},[58,135834,83],{"class":82},[58,135836,86],{"class":75},[58,135838,89],{"class":82},[58,135840,93],{"class":92},[58,135842,96],{"class":82},[58,135844,99],{"class":82},[58,135846,102],{"class":75},[58,135848,135849],{"class":60,"line":105},[58,135850,108],{"class":75},[175,135852,135853],{},"文本域：",[119,135855],{"style":121,"src":135856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[175,135858,135859],{},"此时会有一个空白区域",[119,135861],{"style":121,"src":135862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[175,135864,135865],{},"写在同一行就不会出现这个问题",[119,135867],{"style":121,"src":135868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[175,135870,135871],{},"文本域是行内块元素，一定记住！！！",[175,135873,98862],{},[119,135875],{"style":121,"src":135876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[175,135878,135879],{},"文本域尽量放在一行",[175,135881,135882],{},"知识回顾：cols是列，rols是行",[119,135884],{"style":121,"src":135885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[175,135887,135888],{},"它可以进行拖动，显然这是我们不愿意看到的",[119,135890],{"style":121,"src":135891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[175,135893,135894],{},"使用resize进行解决",[48,135896,135898],{"className":50,"code":135897,"language":52,"meta":53,"style":53},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[55,135899,135900,135906,135919],{"__ignoreMap":53},[58,135901,135902,135904],{"class":60,"line":61},[58,135903,54457],{"class":71},[58,135905,76],{"class":75},[58,135907,135908,135910,135912,135914,135916],{"class":60,"line":68},[58,135909,71430],{"class":82},[58,135911,86],{"class":75},[58,135913,55373],{"class":82},[58,135915,131033],{"class":75},[58,135917,135918],{"class":64},"\u002F* 取消表单轮廓线 *\u002F\n",[58,135920,135921],{"class":60,"line":79},[58,135922,108],{"class":75},[175,135924,135925],{},"此时就无法通过右下方实现拖动了",[114,135927,135929],{"id":135928},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[175,135931,135932],{},"实现一个盒子中的文字和图片对齐",[175,135934,135935,135936,135939],{},"用于设置一个元素的 ",[25,135937,135938],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[175,135941,135942],{},"图片和文字默认是基线对齐",[119,135944],{"style":121,"src":135945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[48,135947,135948],{"className":50,"code":135897,"language":52,"meta":53,"style":53},[55,135949,135950,135956,135968],{"__ignoreMap":53},[58,135951,135952,135954],{"class":60,"line":61},[58,135953,54457],{"class":71},[58,135955,76],{"class":75},[58,135957,135958,135960,135962,135964,135966],{"class":60,"line":68},[58,135959,71430],{"class":82},[58,135961,86],{"class":75},[58,135963,55373],{"class":82},[58,135965,131033],{"class":75},[58,135967,135918],{"class":64},[58,135969,135970],{"class":60,"line":79},[58,135971,108],{"class":75},[119,135973],{"style":121,"src":135974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22641,135976,135978],{"id":135977},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[175,135980,135981],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[119,135983],{"style":121,"src":135984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[175,135986,135987,135988,135991],{},"此时可以给图片、表单这些行内块元素的 ",[25,135989,135990],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22641,135993,135995],{"id":135994},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[175,135997,135998],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[175,136000,15277],{},[48,136002,136004],{"className":50,"code":136003,"language":52,"meta":53,"style":53},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[55,136005,136006,136011,136017,136029],{"__ignoreMap":53},[58,136007,136008],{"class":60,"line":61},[58,136009,136010],{"class":64},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[58,136012,136013,136015],{"class":60,"line":68},[58,136014,119],{"class":71},[58,136016,76],{"class":75},[58,136018,136019,136022,136024,136027],{"class":60,"line":79},[58,136020,136021],{"class":82},"  vertical-align",[58,136023,86],{"class":75},[58,136025,136026],{"class":82},"middle",[58,136028,102],{"class":75},[58,136030,136031],{"class":60,"line":105},[58,136032,108],{"class":75},[119,136034],{"style":121,"src":136035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[175,136037,136038],{},"主要解决方法有两种：",[19,136040,136041],{},[22,136042,136043,136046,136047,136050],{},[25,136044,136045],{},"给图片"," 添加 ",[25,136048,136049],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[175,136052,136053,136054],{},"2.把图片转换为块级元素 ",[25,136055,136056],{},"display: block",[175,136058,136059],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[175,136061,136062],{},"img {",[175,136064,136065],{},"vertical-align:middle;",[175,136067,1730],{},[114,136069,136071],{"id":136070},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[175,136073,136074],{},"效果：",[119,136076],{"style":121,"src":136077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[175,136079,136080],{},"单行文本溢出显示省略号--必须满足三个条件：",[48,136082,136084],{"className":50,"code":136083,"language":52,"meta":53,"style":53},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[55,136085,136086,136091,136097,136107,136112,136122],{"__ignoreMap":53},[58,136087,136088],{"class":60,"line":61},[58,136089,136090],{"class":64},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[58,136092,136093,136095],{"class":60,"line":68},[58,136094,119],{"class":71},[58,136096,76],{"class":75},[58,136098,136099,136101,136103,136105],{"class":60,"line":79},[58,136100,136021],{"class":82},[58,136102,86],{"class":75},[58,136104,136026],{"class":82},[58,136106,102],{"class":75},[58,136108,136109],{"class":60,"line":105},[58,136110,136111],{"class":64},"  \u002F* 或 *\u002F\n",[58,136113,136114,136116,136118,136120],{"class":60,"line":627},[58,136115,495],{"class":82},[58,136117,86],{"class":75},[58,136119,500],{"class":82},[58,136121,102],{"class":75},[58,136123,136124],{"class":60,"line":509},[58,136125,108],{"class":75},[114,136127,136129],{"id":136128},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[175,136131,136074],{},[119,136133],{"style":121,"src":136134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[175,136136,136137,136138,136141],{},"多行文本溢出显示省略号， ",[25,136139,136140],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[48,136143,136144],{"className":50,"code":136083,"language":52,"meta":53,"style":53},[55,136145,136146,136150,136156,136166,136170,136180],{"__ignoreMap":53},[58,136147,136148],{"class":60,"line":61},[58,136149,136090],{"class":64},[58,136151,136152,136154],{"class":60,"line":68},[58,136153,119],{"class":71},[58,136155,76],{"class":75},[58,136157,136158,136160,136162,136164],{"class":60,"line":79},[58,136159,136021],{"class":82},[58,136161,86],{"class":75},[58,136163,136026],{"class":82},[58,136165,102],{"class":75},[58,136167,136168],{"class":60,"line":105},[58,136169,136111],{"class":64},[58,136171,136172,136174,136176,136178],{"class":60,"line":627},[58,136173,495],{"class":82},[58,136175,86],{"class":75},[58,136177,500],{"class":82},[58,136179,102],{"class":75},[58,136181,136182],{"class":60,"line":509},[58,136183,108],{"class":75},[175,136185,136186],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,136188,136190],{"id":136189},"_133-常见布局技巧","13.3 常见布局技巧",[175,136192,136193],{},[25,136194,136195],{},"巧妙利用一个技术更快更好的布局：",[19,136197,136198,136201,136204,136207],{},[22,136199,136200],{},"margin负值的运用",[22,136202,136203],{},"文字围绕浮动元素",[22,136205,136206],{},"行内块的巧妙运用",[22,136208,136209],{},"CSS三角强化",[114,136211,136213],{"id":136212},"_1331-margin负值的运用","13.3.1 margin负值的运用",[175,136215,136216],{},"应用场景：",[119,136218],{"style":121,"src":136219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[119,136221],{"style":121,"src":136222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[175,136224,136225],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[175,136227,136228],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[48,136230,136231],{"className":50,"code":51,"language":52,"meta":53,"style":53},[55,136232,136233,136237,136243,136259],{"__ignoreMap":53},[58,136234,136235],{"class":60,"line":61},[58,136236,65],{"class":64},[58,136238,136239,136241],{"class":60,"line":68},[58,136240,72],{"class":71},[58,136242,76],{"class":75},[58,136244,136245,136247,136249,136251,136253,136255,136257],{"class":60,"line":79},[58,136246,83],{"class":82},[58,136248,86],{"class":75},[58,136250,89],{"class":82},[58,136252,93],{"class":92},[58,136254,96],{"class":82},[58,136256,99],{"class":82},[58,136258,102],{"class":75},[58,136260,136261],{"class":60,"line":105},[58,136262,108],{"class":75},[119,136264],{"style":121,"src":136265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[175,136267,136268],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[48,136270,136272],{"className":50,"code":136271,"language":52,"meta":53,"style":53},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[55,136273,136274,136279,136285,136295,136307,136319],{"__ignoreMap":53},[58,136275,136276],{"class":60,"line":61},[58,136277,136278],{"class":64},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[58,136280,136281,136283],{"class":60,"line":68},[58,136282,131018],{"class":379},[58,136284,76],{"class":75},[58,136286,136287,136289,136291,136293],{"class":60,"line":79},[58,136288,132837],{"class":82},[58,136290,86],{"class":75},[58,136292,622],{"class":82},[58,136294,102],{"class":75},[58,136296,136297,136299,136301,136303,136305],{"class":60,"line":105},[58,136298,132851],{"class":82},[58,136300,86],{"class":75},[58,136302,1232],{"class":82},[58,136304,93],{"class":92},[58,136306,102],{"class":75},[58,136308,136309,136311,136313,136315,136317],{"class":60,"line":627},[58,136310,132868],{"class":82},[58,136312,86],{"class":75},[58,136314,1486],{"class":82},[58,136316,93],{"class":92},[58,136318,102],{"class":75},[58,136320,136321],{"class":60,"line":509},[58,136322,108],{"class":75},[175,136324,136325],{},"加上上述代码会发现：",[119,136327],{"style":121,"src":136328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[175,136330,136331],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[175,136333,136334],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[48,136336,136337],{"className":50,"code":136271,"language":52,"meta":53,"style":53},[55,136338,136339,136343,136349,136359,136371,136383],{"__ignoreMap":53},[58,136340,136341],{"class":60,"line":61},[58,136342,136278],{"class":64},[58,136344,136345,136347],{"class":60,"line":68},[58,136346,131018],{"class":379},[58,136348,76],{"class":75},[58,136350,136351,136353,136355,136357],{"class":60,"line":79},[58,136352,132837],{"class":82},[58,136354,86],{"class":75},[58,136356,622],{"class":82},[58,136358,102],{"class":75},[58,136360,136361,136363,136365,136367,136369],{"class":60,"line":105},[58,136362,132851],{"class":82},[58,136364,86],{"class":75},[58,136366,1232],{"class":82},[58,136368,93],{"class":92},[58,136370,102],{"class":75},[58,136372,136373,136375,136377,136379,136381],{"class":60,"line":627},[58,136374,132868],{"class":82},[58,136376,86],{"class":75},[58,136378,1486],{"class":82},[58,136380,93],{"class":92},[58,136382,102],{"class":75},[58,136384,136385],{"class":60,"line":509},[58,136386,108],{"class":75},[175,136388,136389],{},"解决方式2：",[175,136391,136392],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[48,136394,136396],{"className":50,"code":136395,"language":52,"meta":53,"style":53},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[55,136397,136398,136404,136414,136426,136438],{"__ignoreMap":53},[58,136399,136400,136402],{"class":60,"line":61},[58,136401,72],{"class":71},[58,136403,76],{"class":75},[58,136405,136406,136408,136410,136412],{"class":60,"line":68},[58,136407,132837],{"class":82},[58,136409,86],{"class":75},[58,136411,622],{"class":82},[58,136413,102],{"class":75},[58,136415,136416,136418,136420,136422,136424],{"class":60,"line":79},[58,136417,132851],{"class":82},[58,136419,86],{"class":75},[58,136421,1232],{"class":82},[58,136423,93],{"class":92},[58,136425,102],{"class":75},[58,136427,136428,136430,136432,136434,136436],{"class":60,"line":105},[58,136429,132868],{"class":82},[58,136431,86],{"class":75},[58,136433,1486],{"class":82},[58,136435,93],{"class":92},[58,136437,102],{"class":75},[58,136439,136440],{"class":60,"line":627},[58,136441,108],{"class":75},[114,136443,136445],{"id":136444},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[175,136447,136216],{},[119,136449],{"style":121,"src":136450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[175,136452,136453],{},"实现结构图：",[119,136455],{"style":121,"src":136456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[175,136458,136459],{},"巧妙运用浮动元素不会压住文字的特性",[175,136461,136462],{},"代码显示：",[48,136464,136466],{"className":50,"code":136465,"language":52,"meta":53,"style":53},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[55,136467,136468,136474,136484,136488,136493,136497,136503,136517],{"__ignoreMap":53},[58,136469,136470,136472],{"class":60,"line":61},[58,136471,131018],{"class":379},[58,136473,76],{"class":75},[58,136475,136476,136478,136480,136482],{"class":60,"line":68},[58,136477,131650],{"class":82},[58,136479,86],{"class":75},[58,136481,24379],{"class":82},[58,136483,102],{"class":75},[58,136485,136486],{"class":60,"line":79},[58,136487,108],{"class":75},[58,136489,136490],{"class":60,"line":105},[58,136491,136492],{"class":75},"```Css\n",[58,136494,136495],{"class":60,"line":627},[58,136496,131013],{"class":64},[58,136498,136499,136501],{"class":60,"line":509},[58,136500,131018],{"class":379},[58,136502,76],{"class":75},[58,136504,136505,136507,136509,136511,136513,136515],{"class":60,"line":559},[58,136506,71102],{"class":82},[58,136508,86],{"class":75},[58,136510,979],{"class":82},[58,136512,52195],{"class":82},[58,136514,131033],{"class":75},[58,136516,131036],{"class":64},[58,136518,136519],{"class":60,"line":654},[58,136520,108],{"class":75},[175,136522,136523],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[48,136525,136528],{"className":136526,"code":136527,"language":5833},[5831],"\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",[55,136529,136527],{"__ignoreMap":53},[119,136531],{"style":121,"src":136532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[175,136534,136535],{},"最终展示结果：",[48,136537,136538],{"className":50,"code":131006,"language":52,"meta":53,"style":53},[55,136539,136540,136544,136550,136564],{"__ignoreMap":53},[58,136541,136542],{"class":60,"line":61},[58,136543,131013],{"class":64},[58,136545,136546,136548],{"class":60,"line":68},[58,136547,131018],{"class":379},[58,136549,76],{"class":75},[58,136551,136552,136554,136556,136558,136560,136562],{"class":60,"line":79},[58,136553,71102],{"class":82},[58,136555,86],{"class":75},[58,136557,979],{"class":82},[58,136559,52195],{"class":82},[58,136561,131033],{"class":75},[58,136563,131036],{"class":64},[58,136565,136566],{"class":60,"line":105},[58,136567,108],{"class":75},[119,136569],{"style":121,"src":136570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136572,136574],{"id":136573},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[114,136576,136578],{"id":136577},"_1341-原理","13.4.1 原理",[119,136580],{"style":121,"src":136581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[48,136583,136584],{"className":50,"code":131006,"language":52,"meta":53,"style":53},[55,136585,136586,136590,136596,136610],{"__ignoreMap":53},[58,136587,136588],{"class":60,"line":61},[58,136589,131013],{"class":64},[58,136591,136592,136594],{"class":60,"line":68},[58,136593,131018],{"class":379},[58,136595,76],{"class":75},[58,136597,136598,136600,136602,136604,136606,136608],{"class":60,"line":79},[58,136599,71102],{"class":82},[58,136601,86],{"class":75},[58,136603,979],{"class":82},[58,136605,52195],{"class":82},[58,136607,131033],{"class":75},[58,136609,131036],{"class":64},[58,136611,136612],{"class":60,"line":105},[58,136613,108],{"class":75},[114,136615,136617],{"id":136616},"_1342-实例","13.4.2 实例",[119,136619],{"style":121,"src":136620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[48,136622,136623],{"className":50,"code":131636,"language":52,"meta":53,"style":53},[55,136624,136625,136631,136641,136645,136651,136661],{"__ignoreMap":53},[58,136626,136627,136629],{"class":60,"line":61},[58,136628,131643],{"class":379},[58,136630,76],{"class":75},[58,136632,136633,136635,136637,136639],{"class":60,"line":68},[58,136634,131650],{"class":82},[58,136636,86],{"class":75},[58,136638,24379],{"class":82},[58,136640,102],{"class":75},[58,136642,136643],{"class":60,"line":79},[58,136644,108],{"class":75},[58,136646,136647,136649],{"class":60,"line":105},[58,136648,131665],{"class":379},[58,136650,76],{"class":75},[58,136652,136653,136655,136657,136659],{"class":60,"line":627},[58,136654,131650],{"class":82},[58,136656,86],{"class":75},[58,136658,73153],{"class":82},[58,136660,102],{"class":75},[58,136662,136663],{"class":60,"line":509},[58,136664,108],{"class":75},[14,136666,136668],{"id":136667},"_135-css的初始化","13.5 css的初始化",[175,136670,136671],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[175,136673,136674],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[175,136676,136677],{},"每个网页都必须首先进行 CSS初始化。",[175,136679,136680],{},"这里我们以 京东CSS初始化代码为例。",[175,136682,136683],{},"在网页右键查看网页源代码",[175,136685,136686],{},"找到css的link引入语句",[175,136688,136689],{},"然后ctrl+f 输入body",[175,136691,77857],{},[119,136693],{"style":121,"src":136694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[175,136696,77880],{},[119,136698],{"style":121,"src":136699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[175,136701,136702],{},"③打开了网页上传压缩的代码",[119,136704],{"style":121,"src":136705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[175,136707,136708],{},"④从body前可以查看这个网页的初始化代码",[175,136710,136711],{},[25,136712,136713],{},"Unicode编码字体：",[175,136715,136716],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[175,136718,83837],{},[175,136720,136721],{},"黑体 \\9ED1\\4F53",[175,136723,136724],{},"宋体 \\5B8B\\4F53",[175,136726,136727],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[702,136729,136730],{},"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":53,"searchDepth":68,"depth":68,"links":136732},[136733,136734,136741,136745,136749],{"id":135530,"depth":68,"text":135531},{"id":135652,"depth":68,"text":135653,"children":136735},[136736,136737,136738,136739,136740],{"id":135656,"depth":79,"text":135657},{"id":135809,"depth":79,"text":135810},{"id":135928,"depth":79,"text":135929},{"id":136070,"depth":79,"text":136071},{"id":136128,"depth":79,"text":136129},{"id":136189,"depth":68,"text":136190,"children":136742},[136743,136744],{"id":136212,"depth":79,"text":136213},{"id":136444,"depth":79,"text":136445},{"id":136573,"depth":68,"text":136574,"children":136746},[136747,136748],{"id":136577,"depth":79,"text":136578},{"id":136616,"depth":79,"text":136617},{"id":136667,"depth":68,"text":136668},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135522,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136756,"title":136757,"body":136758,"description":717,"extension":718,"meta":138444,"navigation":720,"path":138445,"seo":138446,"stem":138447,"__hash__":138448},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136759,"toc":138433},[136760,136763,136767,136771,136774,136781,136784,136787,136825,136828,136830,136844,136848,136857,136861,136866,136869,136872,136875,136910,136915,136918,136948,136951,136956,136959,136962,136992,136995,137049,137052,137056,137061,137073,137076,137080,137110,137113,137118,137121,137151,137154,137158,137175,137179,137183,137186,137219,137222,137226,137229,137232,137235,137238,137241,137352,137355,137358,137361,137463,137466,137470,137474,137478,137481,137521,137524,137526,137542,137546,137549,137554,137635,137638,137641,137767,137772,137775,137783,137786,137791,137876,137879,137883,137886,137889,137893,137913,137918,138002,138005,138010,138013,138016,138094,138097,138100,138103,138106,138109,138114,138117,138120,138192,138195,138200,138203,138300,138303,138309,138312,138315,138318,138321,138324,138327,138330,138333,138337,138342,138345,138378,138383,138386,138427,138430],[10,136761,136757],{"id":136762},"_14-html5与css3新特性",[14,136764,136766],{"id":136765},"_141-html5的新特性","14.1 HTML5的新特性",[114,136768,136770],{"id":136769},"_1411-基本标签","14.1.1 基本标签",[175,136772,136773],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[175,136775,136776,136777,136780],{},"这些新特性都有兼容性问题，基本是 ",[25,136778,136779],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[175,136782,136783],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[175,136785,136786],{},"现在使用的是新特性：",[124,136788,136789,136795,136801,136807,136813,136819],{},[22,136790,136791,136794],{},[55,136792,136793],{},"\u003Cheader>"," 头部标签",[22,136796,136797,136800],{},[55,136798,136799],{},"\u003Cnav>"," 导航标签",[22,136802,136803,136806],{},[55,136804,136805],{},"\u003Carticle>"," 内容标签",[22,136808,136809,136812],{},[55,136810,136811],{},"\u003Csection>"," 定义文档某个区域",[22,136814,136815,136818],{},[55,136816,136817],{},"\u003Caside>"," 侧边栏标签",[22,136820,136821,136824],{},[55,136822,136823],{},"\u003Cfooter>"," 尾部标签",[119,136826],{"style":121,"src":136827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[175,136829,822],{},[124,136831,136832,136835,136838,136841],{},[22,136833,136834],{},"这种语义化标准主要是针对搜索引擎的",[22,136836,136837],{},"这些标签页面中可以经常使用",[22,136839,136840],{},"在IE9中，需要把这些元素转换为块级元素",[22,136842,136843],{},"移动端更喜欢使用这些标签",[114,136845,136847],{"id":136846},"_1412-多媒体标签","14.1.2 多媒体标签",[175,136849,136850,136851,136853,136854,136856],{},"音频 ",[25,136852,28818],{}," 和视频 ",[25,136855,28827],{}," 两个标签",[22641,136858,136860],{"id":136859},"_14121-视频标签-video","14.1.2.1 视频标签- video",[19,136862,136863],{},[22,136864,136865],{},"支持格式：",[119,136867],{"style":121,"src":136868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[175,136870,136871],{},"尽量使用MP4，兼容性好",[175,136873,136874],{},"用MP4就可以",[48,136876,136878],{"className":364,"code":136877,"language":366,"meta":53,"style":53},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[55,136879,136880],{"__ignoreMap":53},[58,136881,136882,136884,136886,136888,136890,136893,136895,136898,136901,136904,136906,136908],{"class":60,"line":61},[58,136883,373],{"class":75},[58,136885,28827],{"class":71},[58,136887,55873],{"class":379},[58,136889,383],{"class":75},[58,136891,136892],{"class":386},"\"movie.mp4\"",[58,136894,93052],{"class":379},[58,136896,136897],{"class":379}," autoplay",[58,136899,136900],{"class":379}," muted",[58,136902,136903],{"class":379}," loop",[58,136905,55948],{"class":75},[58,136907,28827],{"class":71},[58,136909,403],{"class":75},[19,136911,136912],{"start":68},[22,136913,136914],{},"兼容写法",[175,136916,136917],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[48,136919,136920],{"className":364,"code":136877,"language":366,"meta":53,"style":53},[55,136921,136922],{"__ignoreMap":53},[58,136923,136924,136926,136928,136930,136932,136934,136936,136938,136940,136942,136944,136946],{"class":60,"line":61},[58,136925,373],{"class":75},[58,136927,28827],{"class":71},[58,136929,55873],{"class":379},[58,136931,383],{"class":75},[58,136933,136892],{"class":386},[58,136935,93052],{"class":379},[58,136937,136897],{"class":379},[58,136939,136900],{"class":379},[58,136941,136903],{"class":379},[58,136943,55948],{"class":75},[58,136945,28827],{"class":71},[58,136947,403],{"class":75},[175,136949,136950],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[19,136952,136953],{"start":79},[22,136954,136955],{},"video常用属性",[119,136957],{"style":121,"src":136958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[175,136960,136961],{},"poster属性后面是跟的等待加载图片的地址",[48,136963,136964],{"className":364,"code":134533,"language":366,"meta":53,"style":53},[55,136965,136966],{"__ignoreMap":53},[58,136967,136968,136970,136972,136974,136976,136978,136980,136982,136984,136986,136988,136990],{"class":60,"line":61},[58,136969,373],{"class":75},[58,136971,119],{"class":71},[58,136973,55873],{"class":379},[58,136975,383],{"class":75},[58,136977,134548],{"class":386},[58,136979,55881],{"class":379},[58,136981,383],{"class":75},[58,136983,134555],{"class":386},[58,136985,134558],{"class":379},[58,136987,383],{"class":75},[58,136989,134563],{"class":386},[58,136991,403],{"class":75},[175,136993,136994],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[48,136996,136998],{"className":50,"code":136997,"language":52,"meta":53,"style":53},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[55,136999,137000,137005,137011,137035,137040,137045],{"__ignoreMap":53},[58,137001,137002],{"class":60,"line":61},[58,137003,137004],{"class":64},"\u002F* 2D 位移 *\u002F\n",[58,137006,137007,137009],{"class":60,"line":68},[58,137008,72],{"class":71},[58,137010,76],{"class":75},[58,137012,137013,137016,137018,137021,137023,137025,137027,137029,137031,137033],{"class":60,"line":79},[58,137014,137015],{"class":82},"  transform",[58,137017,86],{"class":75},[58,137019,137020],{"class":82},"translate",[58,137022,793],{"class":75},[58,137024,1097],{"class":82},[58,137026,93],{"class":92},[58,137028,469],{"class":75},[58,137030,1442],{"class":82},[58,137032,93],{"class":92},[58,137034,3365],{"class":75},[58,137036,137037],{"class":60,"line":105},[58,137038,137039],{"class":64},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[58,137041,137042],{"class":60,"line":627},[58,137043,137044],{"class":64},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[58,137046,137047],{"class":60,"line":509},[58,137048,108],{"class":75},[175,137050,137051],{},"muted:自动静音属性",[22641,137053,137055],{"id":137054},"_14122-音频标签audio","14.1.2.2 音频标签audio",[19,137057,137058],{},[22,137059,137060],{},"基本使用",[175,137062,137063,137064,137069,137070],{},"当前 ",[25,137065,137066],{},[55,137067,137068],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[25,137071,137072],{},"mp3格式",[119,137074],{"style":121,"src":137075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[19,137077,137078],{"start":68},[22,137079,136914],{},[48,137081,137082],{"className":364,"code":136877,"language":366,"meta":53,"style":53},[55,137083,137084],{"__ignoreMap":53},[58,137085,137086,137088,137090,137092,137094,137096,137098,137100,137102,137104,137106,137108],{"class":60,"line":61},[58,137087,373],{"class":75},[58,137089,28827],{"class":71},[58,137091,55873],{"class":379},[58,137093,383],{"class":75},[58,137095,136892],{"class":386},[58,137097,93052],{"class":379},[58,137099,136897],{"class":379},[58,137101,136900],{"class":379},[58,137103,136903],{"class":379},[58,137105,55948],{"class":75},[58,137107,28827],{"class":71},[58,137109,403],{"class":75},[175,137111,137112],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[19,137114,137115],{"start":79},[22,137116,137117],{},"常用属性",[119,137119],{"style":121,"src":137120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[48,137122,137123],{"className":364,"code":136877,"language":366,"meta":53,"style":53},[55,137124,137125],{"__ignoreMap":53},[58,137126,137127,137129,137131,137133,137135,137137,137139,137141,137143,137145,137147,137149],{"class":60,"line":61},[58,137128,373],{"class":75},[58,137130,28827],{"class":71},[58,137132,55873],{"class":379},[58,137134,383],{"class":75},[58,137136,136892],{"class":386},[58,137138,93052],{"class":379},[58,137140,136897],{"class":379},[58,137142,136900],{"class":379},[58,137144,136903],{"class":379},[58,137146,55948],{"class":75},[58,137148,28827],{"class":71},[58,137150,403],{"class":75},[175,137152,137153],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22641,137155,137157],{"id":137156},"_14123-总结","14.1.2.3 总结",[124,137159,137160,137163,137166,137169,137172],{},[22,137161,137162],{},"音频标签和视频标签使用方式基本一致",[22,137164,137165],{},"浏览器支持情况不同",[22,137167,137168],{},"谷歌浏览器把音频和视频自动播放禁止了",[22,137170,137171],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[22,137173,137174],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[114,137176,137178],{"id":137177},"_1413-表单元素","14.1.3 表单元素",[22641,137180,137182],{"id":137181},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[119,137184],{"style":121,"src":137185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[48,137187,137189],{"className":364,"code":137188,"language":366,"meta":53,"style":53},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[55,137190,137191],{"__ignoreMap":53},[58,137192,137193,137195,137197,137199,137201,137203,137205,137207,137210,137212,137214,137217],{"class":60,"line":61},[58,137194,373],{"class":75},[58,137196,54457],{"class":71},[58,137198,54460],{"class":379},[58,137200,383],{"class":75},[58,137202,63331],{"class":386},[58,137204,15564],{"class":379},[58,137206,383],{"class":75},[58,137208,137209],{"class":386},"\"username\"",[58,137211,61653],{"class":379},[58,137213,383],{"class":75},[58,137215,137216],{"class":386},"\"请输入用户名\"",[58,137218,403],{"class":75},[119,137220],{"style":121,"src":137221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22641,137223,137225],{"id":137224},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[119,137227],{"style":121,"src":137228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[175,137230,137231],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[175,137233,137234],{},"快捷操作：",[119,137236],{"style":121,"src":137237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[175,137239,137240],{},"例子1：",[48,137242,137244],{"className":364,"code":137243,"language":366,"meta":53,"style":53},"\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",[55,137245,137246,137269,137296,137325,137344],{"__ignoreMap":53},[58,137247,137248,137250,137252,137254,137256,137259,137262,137264,137267],{"class":60,"line":61},[58,137249,373],{"class":75},[58,137251,67257],{"class":71},[58,137253,67260],{"class":379},[58,137255,383],{"class":75},[58,137257,137258],{"class":386},"\"\u002Fsubmit\"",[58,137260,137261],{"class":379}," method",[58,137263,383],{"class":75},[58,137265,137266],{"class":386},"\"post\"",[58,137268,403],{"class":75},[58,137270,137271,137273,137275,137277,137279,137281,137283,137285,137287,137289,137291,137294],{"class":60,"line":68},[58,137272,52782],{"class":75},[58,137274,54457],{"class":71},[58,137276,54460],{"class":379},[58,137278,383],{"class":75},[58,137280,63331],{"class":386},[58,137282,15564],{"class":379},[58,137284,383],{"class":75},[58,137286,137209],{"class":386},[58,137288,61653],{"class":379},[58,137290,383],{"class":75},[58,137292,137293],{"class":386},"\"用户名\"",[58,137295,403],{"class":75},[58,137297,137298,137300,137302,137304,137306,137309,137311,137313,137316,137318,137320,137323],{"class":60,"line":79},[58,137299,52782],{"class":75},[58,137301,54457],{"class":71},[58,137303,54460],{"class":379},[58,137305,383],{"class":75},[58,137307,137308],{"class":386},"\"password\"",[58,137310,15564],{"class":379},[58,137312,383],{"class":75},[58,137314,137315],{"class":386},"\"pwd\"",[58,137317,61653],{"class":379},[58,137319,383],{"class":75},[58,137321,137322],{"class":386},"\"密码\"",[58,137324,403],{"class":75},[58,137326,137327,137329,137331,137333,137335,137337,137340,137342],{"class":60,"line":105},[58,137328,52782],{"class":75},[58,137330,54523],{"class":71},[58,137332,54460],{"class":379},[58,137334,383],{"class":75},[58,137336,67280],{"class":386},[58,137338,137339],{"class":75},">提交\u003C\u002F",[58,137341,54523],{"class":71},[58,137343,403],{"class":75},[58,137345,137346,137348,137350],{"class":60,"line":627},[58,137347,52423],{"class":75},[58,137349,67257],{"class":71},[58,137351,403],{"class":75},[119,137353],{"style":121,"src":137354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[175,137356,137357],{},"value是表单域的内容",[175,137359,137360],{},"例子2：",[48,137362,137363],{"className":364,"code":137243,"language":366,"meta":53,"style":53},[55,137364,137365,137385,137411,137437,137455],{"__ignoreMap":53},[58,137366,137367,137369,137371,137373,137375,137377,137379,137381,137383],{"class":60,"line":61},[58,137368,373],{"class":75},[58,137370,67257],{"class":71},[58,137372,67260],{"class":379},[58,137374,383],{"class":75},[58,137376,137258],{"class":386},[58,137378,137261],{"class":379},[58,137380,383],{"class":75},[58,137382,137266],{"class":386},[58,137384,403],{"class":75},[58,137386,137387,137389,137391,137393,137395,137397,137399,137401,137403,137405,137407,137409],{"class":60,"line":68},[58,137388,52782],{"class":75},[58,137390,54457],{"class":71},[58,137392,54460],{"class":379},[58,137394,383],{"class":75},[58,137396,63331],{"class":386},[58,137398,15564],{"class":379},[58,137400,383],{"class":75},[58,137402,137209],{"class":386},[58,137404,61653],{"class":379},[58,137406,383],{"class":75},[58,137408,137293],{"class":386},[58,137410,403],{"class":75},[58,137412,137413,137415,137417,137419,137421,137423,137425,137427,137429,137431,137433,137435],{"class":60,"line":79},[58,137414,52782],{"class":75},[58,137416,54457],{"class":71},[58,137418,54460],{"class":379},[58,137420,383],{"class":75},[58,137422,137308],{"class":386},[58,137424,15564],{"class":379},[58,137426,383],{"class":75},[58,137428,137315],{"class":386},[58,137430,61653],{"class":379},[58,137432,383],{"class":75},[58,137434,137322],{"class":386},[58,137436,403],{"class":75},[58,137438,137439,137441,137443,137445,137447,137449,137451,137453],{"class":60,"line":105},[58,137440,52782],{"class":75},[58,137442,54523],{"class":71},[58,137444,54460],{"class":379},[58,137446,383],{"class":75},[58,137448,67280],{"class":386},[58,137450,137339],{"class":75},[58,137452,54523],{"class":71},[58,137454,403],{"class":75},[58,137456,137457,137459,137461],{"class":60,"line":627},[58,137458,52423],{"class":75},[58,137460,67257],{"class":71},[58,137462,403],{"class":75},[119,137464],{"style":121,"src":137465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137467,137469],{"id":137468},"_142-css新特性","14.2 CSS新特性",[114,137471,137473],{"id":137472},"_1421-新增选择器","14.2.1 新增选择器",[22641,137475,137477],{"id":137476},"_14211-属性选择器","14.2.1.1 属性选择器",[119,137479],{"style":121,"src":137480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[48,137482,137484],{"className":50,"code":137483,"language":52,"meta":53,"style":53},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[55,137485,137486,137501,137517],{"__ignoreMap":53},[58,137487,137488,137490,137492,137494,137496,137498],{"class":60,"line":61},[58,137489,54457],{"class":71},[58,137491,1675],{"class":75},[58,137493,103736],{"class":379},[58,137495,383],{"class":92},[58,137497,63331],{"class":386},[58,137499,137500],{"class":75},"] {\n",[58,137502,137503,137505,137507,137509,137511,137513,137515],{"class":60,"line":68},[58,137504,83],{"class":82},[58,137506,86],{"class":75},[58,137508,89],{"class":82},[58,137510,93],{"class":92},[58,137512,96],{"class":82},[58,137514,130750],{"class":82},[58,137516,102],{"class":75},[58,137518,137519],{"class":60,"line":79},[58,137520,108],{"class":75},[119,137522],{"style":121,"src":137523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[175,137525,822],{},[124,137527,137528,137531,137534,137537],{},[22,137529,137530],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[22,137532,137533],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[22,137535,137536],{},"属性选择器也可以选择出来自定义的属性",[22,137538,137539,137541],{},[25,137540,195],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22641,137543,137545],{"id":137544},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[119,137547],{"style":121,"src":137548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[19,137550,137551],{},[22,137552,137553],{},"fist-child",[48,137555,137557],{"className":50,"code":137556,"language":52,"meta":53,"style":53},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[55,137558,137559,137564,137579,137599,137617],{"__ignoreMap":53},[58,137560,137561],{"class":60,"line":61},[58,137562,137563],{"class":64},"\u002F* 属性选择器 *\u002F\n",[58,137565,137566,137568,137570,137572,137574,137576],{"class":60,"line":68},[58,137567,54457],{"class":71},[58,137569,1675],{"class":75},[58,137571,103736],{"class":379},[58,137573,383],{"class":92},[58,137575,63331],{"class":386},[58,137577,137578],{"class":75},"] { }\n",[58,137580,137581,137583,137585,137587,137590,137593,137596],{"class":60,"line":79},[58,137582,54457],{"class":71},[58,137584,1675],{"class":75},[58,137586,15338],{"class":379},[58,137588,137589],{"class":92},"^=",[58,137591,137592],{"class":386},"\"icon\"",[58,137594,137595],{"class":75},"] { }  ",[58,137597,137598],{"class":64},"\u002F* 以 icon 开头 *\u002F\n",[58,137600,137601,137603,137605,137607,137610,137612,137614],{"class":60,"line":105},[58,137602,54457],{"class":71},[58,137604,1675],{"class":75},[58,137606,15338],{"class":379},[58,137608,137609],{"class":92},"$=",[58,137611,137592],{"class":386},[58,137613,137595],{"class":75},[58,137615,137616],{"class":64},"\u002F* 以 icon 结尾 *\u002F\n",[58,137618,137619,137621,137623,137625,137628,137630,137632],{"class":60,"line":627},[58,137620,54457],{"class":71},[58,137622,1675],{"class":75},[58,137624,15338],{"class":379},[58,137626,137627],{"class":92},"*=",[58,137629,137592],{"class":386},[58,137631,137595],{"class":75},[58,137633,137634],{"class":64},"\u002F* 包含 icon *\u002F\n",[175,137636,137637],{},"ul的第一个儿子文本为红色",[175,137639,137640],{},"一定要在冒号前加空格，不然就是选中所有的了",[48,137642,137644],{"className":50,"code":137643,"language":52,"meta":53,"style":53},".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",[55,137645,137646,137652,137662,137666,137670,137675,137688,137701,137717,137734,137751],{"__ignoreMap":53},[58,137647,137648,137650],{"class":60,"line":61},[58,137649,127469],{"class":379},[58,137651,76],{"class":75},[58,137653,137654,137656,137658,137660],{"class":60,"line":68},[58,137655,71536],{"class":82},[58,137657,86],{"class":75},[58,137659,58055],{"class":82},[58,137661,102],{"class":75},[58,137663,137664],{"class":60,"line":79},[58,137665,108],{"class":75},[58,137667,137668],{"class":60,"line":105},[58,137669,136492],{"class":75},[58,137671,137672],{"class":60,"line":627},[58,137673,137674],{"class":64},"\u002F* 结构伪类选择器 *\u002F\n",[58,137676,137677,137679,137682,137685],{"class":60,"line":509},[58,137678,22],{"class":71},[58,137680,137681],{"class":379},":first-child",[58,137683,137684],{"class":75}," { }           ",[58,137686,137687],{"class":64},"\u002F* 第一个 *\u002F\n",[58,137689,137690,137692,137695,137698],{"class":60,"line":559},[58,137691,22],{"class":71},[58,137693,137694],{"class":379},":last-child",[58,137696,137697],{"class":75}," { }            ",[58,137699,137700],{"class":64},"\u002F* 最后一个 *\u002F\n",[58,137702,137703,137705,137707,137709,137711,137714],{"class":60,"line":654},[58,137704,22],{"class":71},[58,137706,130088],{"class":379},[58,137708,793],{"class":75},[58,137710,867],{"class":82},[58,137712,137713],{"class":75},") { }          ",[58,137715,137716],{"class":64},"\u002F* 第2个 *\u002F\n",[58,137718,137719,137721,137723,137725,137728,137731],{"class":60,"line":671},[58,137720,22],{"class":71},[58,137722,130088],{"class":379},[58,137724,793],{"class":75},[58,137726,137727],{"class":82},"2n",[58,137729,137730],{"class":75},") { }         ",[58,137732,137733],{"class":64},"\u002F* 偶数 *\u002F\n",[58,137735,137736,137738,137740,137742,137745,137748],{"class":60,"line":677},[58,137737,22],{"class":71},[58,137739,130088],{"class":379},[58,137741,793],{"class":75},[58,137743,137744],{"class":82},"2n+1",[58,137746,137747],{"class":75},") { }       ",[58,137749,137750],{"class":64},"\u002F* 奇数 *\u002F\n",[58,137752,137753,137755,137757,137759,137762,137764],{"class":60,"line":2260},[58,137754,22],{"class":71},[58,137756,130088],{"class":379},[58,137758,793],{"class":75},[58,137760,137761],{"class":82},"-n+3",[58,137763,137747],{"class":75},[58,137765,137766],{"class":64},"\u002F* 前3个 *\u002F\n",[72,137768,137771],{"className":137769},[137770],"example","\n  示例内容\n",[175,137773,137774],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[124,137776,137777],{},[22,137778,137779,137782],{},[55,137780,137781],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[175,137784,137785],{},"也就是说它选择的是熊大",[19,137787,137788],{"start":509},[22,137789,137790],{},"权重",[48,137792,137794],{"className":50,"code":137793,"language":52,"meta":53,"style":53},"\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",[55,137795,137796,137800,137810,137820,137834,137848,137862],{"__ignoreMap":53},[58,137797,137798],{"class":60,"line":61},[58,137799,137674],{"class":64},[58,137801,137802,137804,137806,137808],{"class":60,"line":68},[58,137803,22],{"class":71},[58,137805,137681],{"class":379},[58,137807,137684],{"class":75},[58,137809,137687],{"class":64},[58,137811,137812,137814,137816,137818],{"class":60,"line":79},[58,137813,22],{"class":71},[58,137815,137694],{"class":379},[58,137817,137697],{"class":75},[58,137819,137700],{"class":64},[58,137821,137822,137824,137826,137828,137830,137832],{"class":60,"line":105},[58,137823,22],{"class":71},[58,137825,130088],{"class":379},[58,137827,793],{"class":75},[58,137829,867],{"class":82},[58,137831,137713],{"class":75},[58,137833,137716],{"class":64},[58,137835,137836,137838,137840,137842,137844,137846],{"class":60,"line":627},[58,137837,22],{"class":71},[58,137839,130088],{"class":379},[58,137841,793],{"class":75},[58,137843,137727],{"class":82},[58,137845,137730],{"class":75},[58,137847,137733],{"class":64},[58,137849,137850,137852,137854,137856,137858,137860],{"class":60,"line":509},[58,137851,22],{"class":71},[58,137853,130088],{"class":379},[58,137855,793],{"class":75},[58,137857,137744],{"class":82},[58,137859,137747],{"class":75},[58,137861,137750],{"class":64},[58,137863,137864,137866,137868,137870,137872,137874],{"class":60,"line":559},[58,137865,22],{"class":71},[58,137867,130088],{"class":379},[58,137869,793],{"class":75},[58,137871,137761],{"class":82},[58,137873,137747],{"class":75},[58,137875,137766],{"class":64},[175,137877,137878],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22641,137880,137882],{"id":137881},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[175,137884,137885],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[119,137887],{"style":121,"src":137888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[19,137890,137891],{},[22,137892,822],{},[124,137894,137895,137898,137901,137904,137907,137910],{},[22,137896,137897],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[22,137899,137900],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[22,137902,137903],{},"语法： element::before {}",[22,137905,137906],{},"before 和 after 必须有 content 属性",[22,137908,137909],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[22,137911,137912],{},"伪元素选择器和标签选择器一样，权重为 1",[19,137914,137915],{"start":68},[22,137916,137917],{},"实例",[48,137919,137920],{"className":50,"code":137793,"language":52,"meta":53,"style":53},[55,137921,137922,137926,137936,137946,137960,137974,137988],{"__ignoreMap":53},[58,137923,137924],{"class":60,"line":61},[58,137925,137674],{"class":64},[58,137927,137928,137930,137932,137934],{"class":60,"line":68},[58,137929,22],{"class":71},[58,137931,137681],{"class":379},[58,137933,137684],{"class":75},[58,137935,137687],{"class":64},[58,137937,137938,137940,137942,137944],{"class":60,"line":79},[58,137939,22],{"class":71},[58,137941,137694],{"class":379},[58,137943,137697],{"class":75},[58,137945,137700],{"class":64},[58,137947,137948,137950,137952,137954,137956,137958],{"class":60,"line":105},[58,137949,22],{"class":71},[58,137951,130088],{"class":379},[58,137953,793],{"class":75},[58,137955,867],{"class":82},[58,137957,137713],{"class":75},[58,137959,137716],{"class":64},[58,137961,137962,137964,137966,137968,137970,137972],{"class":60,"line":627},[58,137963,22],{"class":71},[58,137965,130088],{"class":379},[58,137967,793],{"class":75},[58,137969,137727],{"class":82},[58,137971,137730],{"class":75},[58,137973,137733],{"class":64},[58,137975,137976,137978,137980,137982,137984,137986],{"class":60,"line":509},[58,137977,22],{"class":71},[58,137979,130088],{"class":379},[58,137981,793],{"class":75},[58,137983,137744],{"class":82},[58,137985,137747],{"class":75},[58,137987,137750],{"class":64},[58,137989,137990,137992,137994,137996,137998,138000],{"class":60,"line":559},[58,137991,22],{"class":71},[58,137993,130088],{"class":379},[58,137995,793],{"class":75},[58,137997,137761],{"class":82},[58,137999,137747],{"class":75},[58,138001,137766],{"class":64},[119,138003],{"style":121,"src":138004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[19,138006,138007],{"start":79},[22,138008,138009],{},"使用场景1",[119,138011],{"style":121,"src":138012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[175,138014,138015],{},"不需要再加盒子来整红色那部分了",[48,138017,138019],{"className":50,"code":138018,"language":52,"meta":53,"style":53},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[55,138020,138021,138026,138035,138046,138056,138060,138069,138080,138090],{"__ignoreMap":53},[58,138022,138023],{"class":60,"line":61},[58,138024,138025],{"class":64},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[58,138027,138028,138030,138033],{"class":60,"line":68},[58,138029,72],{"class":71},[58,138031,138032],{"class":379},"::before",[58,138034,76],{"class":75},[58,138036,138037,138040,138042,138044],{"class":60,"line":79},[58,138038,138039],{"class":82},"  content",[58,138041,86],{"class":75},[58,138043,8298],{"class":386},[58,138045,102],{"class":75},[58,138047,138048,138050,138052,138054],{"class":60,"line":105},[58,138049,495],{"class":82},[58,138051,86],{"class":75},[58,138053,500],{"class":82},[58,138055,102],{"class":75},[58,138057,138058],{"class":60,"line":627},[58,138059,108],{"class":75},[58,138061,138062,138064,138067],{"class":60,"line":509},[58,138063,72],{"class":71},[58,138065,138066],{"class":379},"::after",[58,138068,76],{"class":75},[58,138070,138071,138073,138075,138078],{"class":60,"line":559},[58,138072,138039],{"class":82},[58,138074,86],{"class":75},[58,138076,138077],{"class":386},"\"→\"",[58,138079,102],{"class":75},[58,138081,138082,138084,138086,138088],{"class":60,"line":654},[58,138083,71536],{"class":82},[58,138085,86],{"class":75},[58,138087,62702],{"class":82},[58,138089,102],{"class":75},[58,138091,138092],{"class":60,"line":671},[58,138093,108],{"class":75},[119,138095],{"style":121,"src":138096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[175,138098,138099],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[119,138101],{"style":121,"src":138102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[175,138104,138105],{},"但是在引用时需要先转义一下",[175,138107,138108],{},"content='\\e930'",[19,138110,138111],{"start":105},[22,138112,138113],{},"使用场景2",[175,138115,138116],{},"仿土豆效果",[175,138118,138119],{},"通过使用伪元素选择器可以减少body中盒子的数量",[48,138121,138122],{"className":50,"code":138018,"language":52,"meta":53,"style":53},[55,138123,138124,138128,138136,138146,138156,138160,138168,138178,138188],{"__ignoreMap":53},[58,138125,138126],{"class":60,"line":61},[58,138127,138025],{"class":64},[58,138129,138130,138132,138134],{"class":60,"line":68},[58,138131,72],{"class":71},[58,138133,138032],{"class":379},[58,138135,76],{"class":75},[58,138137,138138,138140,138142,138144],{"class":60,"line":79},[58,138139,138039],{"class":82},[58,138141,86],{"class":75},[58,138143,8298],{"class":386},[58,138145,102],{"class":75},[58,138147,138148,138150,138152,138154],{"class":60,"line":105},[58,138149,495],{"class":82},[58,138151,86],{"class":75},[58,138153,500],{"class":82},[58,138155,102],{"class":75},[58,138157,138158],{"class":60,"line":627},[58,138159,108],{"class":75},[58,138161,138162,138164,138166],{"class":60,"line":509},[58,138163,72],{"class":71},[58,138165,138066],{"class":379},[58,138167,76],{"class":75},[58,138169,138170,138172,138174,138176],{"class":60,"line":559},[58,138171,138039],{"class":82},[58,138173,86],{"class":75},[58,138175,138077],{"class":386},[58,138177,102],{"class":75},[58,138179,138180,138182,138184,138186],{"class":60,"line":654},[58,138181,71536],{"class":82},[58,138183,86],{"class":75},[58,138185,62702],{"class":82},[58,138187,102],{"class":75},[58,138189,138190],{"class":60,"line":671},[58,138191,108],{"class":75},[119,138193],{"style":121,"src":138194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[19,138196,138197],{"start":627},[22,138198,138199],{},"使用场景3",[175,138201,138202],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[48,138204,138206],{"className":50,"code":138205,"language":52,"meta":53,"style":53},".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",[55,138207,138208,138214,138224,138228,138232,138236,138244,138254,138264,138268,138276,138286,138296],{"__ignoreMap":53},[58,138209,138210,138212],{"class":60,"line":61},[58,138211,131018],{"class":379},[58,138213,76],{"class":75},[58,138215,138216,138218,138220,138222],{"class":60,"line":68},[58,138217,131650],{"class":82},[58,138219,86],{"class":75},[58,138221,24379],{"class":82},[58,138223,102],{"class":75},[58,138225,138226],{"class":60,"line":79},[58,138227,108],{"class":75},[58,138229,138230],{"class":60,"line":105},[58,138231,136492],{"class":75},[58,138233,138234],{"class":60,"line":627},[58,138235,138025],{"class":64},[58,138237,138238,138240,138242],{"class":60,"line":509},[58,138239,72],{"class":71},[58,138241,138032],{"class":379},[58,138243,76],{"class":75},[58,138245,138246,138248,138250,138252],{"class":60,"line":559},[58,138247,138039],{"class":82},[58,138249,86],{"class":75},[58,138251,8298],{"class":386},[58,138253,102],{"class":75},[58,138255,138256,138258,138260,138262],{"class":60,"line":654},[58,138257,495],{"class":82},[58,138259,86],{"class":75},[58,138261,500],{"class":82},[58,138263,102],{"class":75},[58,138265,138266],{"class":60,"line":671},[58,138267,108],{"class":75},[58,138269,138270,138272,138274],{"class":60,"line":677},[58,138271,72],{"class":71},[58,138273,138066],{"class":379},[58,138275,76],{"class":75},[58,138277,138278,138280,138282,138284],{"class":60,"line":2260},[58,138279,138039],{"class":82},[58,138281,86],{"class":75},[58,138283,138077],{"class":386},[58,138285,102],{"class":75},[58,138287,138288,138290,138292,138294],{"class":60,"line":694},[58,138289,71536],{"class":82},[58,138291,86],{"class":75},[58,138293,62702],{"class":82},[58,138295,102],{"class":75},[58,138297,138298],{"class":60,"line":2270},[58,138299,108],{"class":75},[175,138301,138302],{},"div {\nmargin: 0 auto;\n}",[48,138304,138307],{"className":138305,"code":138306,"language":5833},[5831],"\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",[55,138308,138306],{"__ignoreMap":53},[175,138310,138311],{},"如果想让多个元素都发生变化",[175,138313,138314],{},"不能如下操作：",[175,138316,138317],{},"transition: width 2s ease 0.5s;",[175,138319,138320],{},"transition: height 2s ease 0.5s;不对！！！",[175,138322,138323],{},"上方会样式冲突，导致不显示任何过渡效果",[175,138325,138326],{},"使用如下：加逗号隔开",[175,138328,138329],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[175,138331,138332],{},"transition all 2s ease;",[114,138334,138336],{"id":138335},"_1426-过渡练习","14.2.6 过渡练习",[19,138338,138339],{},[22,138340,138341],{},"进度条",[119,138343],{"style":121,"src":138344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[48,138346,138348],{"className":50,"code":138347,"language":52,"meta":53,"style":53},"div {\n  transition: all 0.3s ease;\n}\n",[55,138349,138350,138356,138374],{"__ignoreMap":53},[58,138351,138352,138354],{"class":60,"line":61},[58,138353,72],{"class":71},[58,138355,76],{"class":75},[58,138357,138358,138361,138363,138365,138368,138370,138372],{"class":60,"line":68},[58,138359,138360],{"class":82},"  transition",[58,138362,86],{"class":75},[58,138364,28765],{"class":82},[58,138366,138367],{"class":82}," 0.3",[58,138369,1481],{"class":92},[58,138371,79311],{"class":82},[58,138373,102],{"class":75},[58,138375,138376],{"class":60,"line":79},[58,138377,108],{"class":75},[19,138379,138380],{"start":68},[22,138381,138382],{},"小米logo",[175,138384,138385],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[48,138387,138389],{"className":50,"code":138388,"language":52,"meta":53,"style":53},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[55,138390,138391,138396,138402,138418,138423],{"__ignoreMap":53},[58,138392,138393],{"class":60,"line":61},[58,138394,138395],{"class":64},"\u002F* CSS3 过渡 *\u002F\n",[58,138397,138398,138400],{"class":60,"line":68},[58,138399,72],{"class":71},[58,138401,76],{"class":75},[58,138403,138404,138406,138408,138410,138412,138414,138416],{"class":60,"line":79},[58,138405,138360],{"class":82},[58,138407,86],{"class":75},[58,138409,28765],{"class":82},[58,138411,138367],{"class":82},[58,138413,1481],{"class":92},[58,138415,79311],{"class":82},[58,138417,102],{"class":75},[58,138419,138420],{"class":60,"line":105},[58,138421,138422],{"class":64},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[58,138424,138425],{"class":60,"line":627},[58,138426,108],{"class":75},[175,138428,138429],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[702,138431,138432],{},"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":53,"searchDepth":68,"depth":68,"links":138434},[138435,138440],{"id":136765,"depth":68,"text":136766,"children":138436},[138437,138438,138439],{"id":136769,"depth":79,"text":136770},{"id":136846,"depth":79,"text":136847},{"id":137177,"depth":79,"text":137178},{"id":137468,"depth":68,"text":137469,"children":138441},[138442,138443],{"id":137472,"depth":79,"text":137473},{"id":138335,"depth":79,"text":138336},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136757,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138450,"title":138451,"body":138452,"description":717,"extension":718,"meta":140196,"navigation":720,"path":140197,"seo":140198,"stem":140199,"__hash__":140200},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138453,"toc":140177},[138454,138457,138461,138464,138470,138476,138480,138482,138485,138488,138491,138494,138497,138500,138503,138507,138511,138514,138517,138520,138524,138527,138530,138535,138538,138541,138544,138548,138551,138560,138563,138566,138570,138573,138576,138581,138588,138602,138610,138617,138622,138625,138628,138631,138638,138642,138648,138654,138657,138660,138665,138671,138673,138681,138686,138689,138695,138697,138702,138707,138710,138712,138717,138720,138725,138730,138764,138768,138772,138775,138779,138782,138868,138871,138908,138911,138947,138951,138956,138969,139023,139025,139053,139055,139083,139089,139103,139105,139149,139151,139195,139198,139205,139216,139218,139245,139247,139273,139280,139296,139298,139392,139394,139488,139495,139498,139503,139509,139583,139586,139588,139624,139626,139662,139665,139672,139691,139694,139697,139699,139724,139726,139750,139753,139756,139786,139790,139793,139856,139858,139924,139926,139990,139993,140025,140027,140053,140055,140081,140084,140115,140117,140143,140145,140171,140174],[10,138455,138451],{"id":138456},"_15-品优购项目上篇-搭建与公共模块",[14,138458,138460],{"id":138459},"_151-项目规划","15.1 项目规划",[119,138462],{"style":121,"src":138463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[175,138465,138466,138469],{},[25,138467,138468],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[175,138471,138472,138475],{},[25,138473,138474],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138477,138479],{"id":138478},"_152-项目介绍","15.2 项目介绍",[175,138481,138468],{},[119,138483],{"style":121,"src":138484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[175,138486,138487],{},"主页：",[119,138489],{"style":121,"src":138490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[175,138492,138493],{},"列表页：",[119,138495],{"style":121,"src":138496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[175,138498,138499],{},"注册页：",[119,138501],{"style":121,"src":138502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138504,138506],{"id":138505},"_153-项目搭建工作","15.3 项目搭建工作",[114,138508,138510],{"id":138509},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[119,138512],{"style":121,"src":138513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[175,138515,138516],{},"经常更换的图片要放到upload文件夹中",[175,138518,138519],{},"不经常换的放到images文件夹中",[114,138521,138523],{"id":138522},"_1532-创建文件如下","15.3.2 创建文件如下",[119,138525],{"style":121,"src":138526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[119,138528],{"style":121,"src":138529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[175,138531,138532],{},[25,138533,138534],{},"初始化样式：",[175,138536,138537],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[175,138539,138540],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[175,138542,138543],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[114,138545,138547],{"id":138546},"_1533-项目模块化开发","15.3.3 项目模块化开发",[175,138549,138550],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[175,138552,138553,138554,138559],{},"这里最典型的应用就是 ",[25,138555,138556],{},[55,138557,138558],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[119,138561],{"style":121,"src":138562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[175,138564,138565],{},"通过link方法来引入",[114,138567,138569],{"id":138568},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[119,138571],{"style":121,"src":138572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[175,138574,138575],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[19,138577,138578],{},[22,138579,138580],{},"制作favicon图标",[175,138582,138583,138584,138587],{},"①把品优购图标切成 ",[55,138585,138586],{},"png"," 图片",[175,138589,138590,138591,138593,138594,138597,138598],{},"②把 ",[55,138592,138586],{}," 图片转换为 ",[55,138595,138596],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[376,138599,138600],{"href":138600,"rel":138601},"http:\u002F\u002Fwww.bitbug.net\u002F",[24508],[19,138603,138604,138607],{"start":68},[22,138605,138606],{},"favicon图标放到网站根目录下",[22,138608,138609],{},"HTML页面引入favicon",[175,138611,138612,138613,138616],{},"在html 页面里面的 ",[55,138614,138615],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[175,138618,138619],{},[55,138620,138621],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[175,138623,138624],{},"复制这行代码或者在生成这个的网站进行复制",[119,138626],{"style":121,"src":138627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[175,138629,138630],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[175,138632,138633,138634],{},"例如:",[376,138635,138636],{"href":138636,"rel":138637},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24508],[114,138639,138641],{"id":138640},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[175,138643,138644,138647],{},[25,138645,138646],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[175,138649,138650,138653],{},[25,138651,138652],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[175,138655,138656],{},"页面必须有三个标签用来符合 SEO 优化",[119,138658],{"style":121,"src":138659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[19,138661,138662],{},[22,138663,138664],{},"title网站标题",[175,138666,138667,138670],{},[25,138668,138669],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[175,138672,69422],{},[124,138674,138675,138678],{},[22,138676,138677],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[22,138679,138680],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[19,138682,138683],{"start":68},[22,138684,138685],{},"description网站描述",[175,138687,138688],{},"简要说明我们网站主要是做什么的",[175,138690,138691,138694],{},[25,138692,138693],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[175,138696,69422],{},[175,138698,138699],{},[55,138700,138701],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[19,138703,138704],{"start":79},[22,138705,138706],{},"keywords关键词",[175,138708,138709],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[175,138711,69422],{},[175,138713,138714],{},[55,138715,138716],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[175,138718,138719],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[175,138721,138722],{},[25,138723,138724],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[19,138726,138727],{"start":105},[22,138728,138729],{},"代码总结",[48,138731,138732],{"className":364,"code":131274,"language":366,"meta":53,"style":53},[55,138733,138734,138738,138752,138756],{"__ignoreMap":53},[58,138735,138736],{"class":60,"line":61},[58,138737,131281],{"class":64},[58,138739,138740,138742,138744,138746,138748,138750],{"class":60,"line":68},[58,138741,373],{"class":75},[58,138743,72],{"class":71},[58,138745,54124],{"class":379},[58,138747,383],{"class":75},[58,138749,131294],{"class":386},[58,138751,403],{"class":75},[58,138753,138754],{"class":60,"line":79},[58,138755,131301],{"class":75},[58,138757,138758,138760,138762],{"class":60,"line":105},[58,138759,52423],{"class":75},[58,138761,72],{"class":71},[58,138763,403],{"class":75},[14,138765,138767],{"id":138766},"_154-项目公共部分制作","15.4 项目公共部分制作",[114,138769,138771],{"id":138770},"_1541-常用模块类命名","15.4.1 常用模块类命名",[119,138773],{"style":121,"src":138774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[114,138776,138778],{"id":138777},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[175,138780,138781],{},"布局思路：",[124,138783,138784,138787,138790,138812,138845],{},[22,138785,138786],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[22,138788,138789],{},"里面包含版心的盒子",[22,138791,138792,138793],{},"版心盒子里面包含 1 号左侧盒子左浮动",[124,138794,138795,138803,138809],{},[22,138796,138797,138798,22143,138800,138802],{},"1 号盒子 里面包含一个",[55,138799,124],{},[55,138801,124],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[22,138804,138805,138806,138808],{},"里面的内容是水平排列，所以需要给",[55,138807,22],{},"设置浮动",[22,138810,138811],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[22,138813,138814,138815],{},"版心盒子里面包含 2 号右侧盒子右浮动",[124,138816,138817,138831,138836],{},[22,138818,138819,138820,22143,138822,138824,138825,138827,138828,138830],{},"2 号盒子 里面包含一个",[55,138821,124],{},[55,138823,124],{},"包裹",[55,138826,22],{},"，中间的",[55,138829,1705],{},"可以用样式去设置，也可以用字符 |",[22,138832,138833,138834,138808],{},"里面内容水平排列，给",[55,138835,22],{},[22,138837,138838,138839,138841,138842,138844],{},"找到里面所有偶数的 ",[55,138840,22],{}," 设置样式（偶数的 ",[55,138843,22],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[22,138846,138847,138848],{},"需要用到字体图标",[124,138849,138850,138856,138859,138862,138865],{},[22,138851,138852,138853],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[55,138854,138855],{},"arrow-icon",[22,138857,138858],{},"先要引入字体图片的资源",[22,138860,138861],{},"在样式里面利用 font-face 来进行声明",[22,138863,138864],{},"在伪元素的 content属性设置 图标的编码",[22,138866,138867],{},"给伪元素设置font-family属性",[175,138869,138870],{},"结构实例代码：",[48,138872,138874],{"className":50,"code":138873,"language":52,"meta":53,"style":53},"div::before {\n  content: \"\";\n  display: block;\n}\n",[55,138875,138876,138884,138894,138904],{"__ignoreMap":53},[58,138877,138878,138880,138882],{"class":60,"line":61},[58,138879,72],{"class":71},[58,138881,138032],{"class":379},[58,138883,76],{"class":75},[58,138885,138886,138888,138890,138892],{"class":60,"line":68},[58,138887,138039],{"class":82},[58,138889,86],{"class":75},[58,138891,8298],{"class":386},[58,138893,102],{"class":75},[58,138895,138896,138898,138900,138902],{"class":60,"line":79},[58,138897,495],{"class":82},[58,138899,86],{"class":75},[58,138901,500],{"class":82},[58,138903,102],{"class":75},[58,138905,138906],{"class":60,"line":105},[58,138907,108],{"class":75},[175,138909,138910],{},"样式实例代码：",[48,138912,138913],{"className":50,"code":138873,"language":52,"meta":53,"style":53},[55,138914,138915,138923,138933,138943],{"__ignoreMap":53},[58,138916,138917,138919,138921],{"class":60,"line":61},[58,138918,72],{"class":71},[58,138920,138032],{"class":379},[58,138922,76],{"class":75},[58,138924,138925,138927,138929,138931],{"class":60,"line":68},[58,138926,138039],{"class":82},[58,138928,86],{"class":75},[58,138930,8298],{"class":386},[58,138932,102],{"class":75},[58,138934,138935,138937,138939,138941],{"class":60,"line":79},[58,138936,495],{"class":82},[58,138938,86],{"class":75},[58,138940,500],{"class":82},[58,138942,102],{"class":75},[58,138944,138945],{"class":60,"line":105},[58,138946,108],{"class":75},[114,138948,138950],{"id":138949},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[124,138952,138953],{},[22,138954,138955],{},"header 盒子必须要有高度",[175,138957,138958,138959,138961,138962],{},"1 号盒子是 ",[55,138960,138],{}," 标志定位，在正常开发过程中， ",[25,138963,138964,138965,138968],{},"logo的布局其实是有讲究的，需要进行 ",[55,138966,138967],{},"logoSEO","的优化 （★★★）",[124,138970,138971,138979,138987,139014],{},[22,138972,138973,138975,138976,138978],{},[55,138974,138],{}," 里面首先放一个 ",[55,138977,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[22,138980,138981,138983,138984,138986],{},[55,138982,10],{}," 里面再放一个链接，可以返回首页的，把 ",[55,138985,138],{}," 的背景图片给链接即可",[22,138988,138989,138990],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[124,138991,138992,139007],{},[22,138993,138994,138995,138998,138999,139002,139003,139006],{},"方法1：",[55,138996,138997],{},"text-indent"," 移到盒子外面（",[55,139000,139001],{},"text-indent: -9999px",") ，然后 ",[55,139004,139005],{},"overflow:hidden"," ，淘宝的做法",[22,139008,139009,139010,139013],{},"方法2：直接给 ",[55,139011,139012],{},"font-size: 0;"," 就看不到文字了，京东的做法",[22,139015,139016,139017,139019,139020,139022],{},"最后给链接一个 ",[55,139018,52049],{}," 属性，这样鼠标放到 ",[55,139021,138],{}," 上就可以看到提示文字了",[175,139024,138870],{},[48,139026,139027],{"className":364,"code":365,"language":366,"meta":53,"style":53},[55,139028,139029],{"__ignoreMap":53},[58,139030,139031,139033,139035,139037,139039,139041,139043,139045,139047,139049,139051],{"class":60,"line":61},[58,139032,373],{"class":75},[58,139034,376],{"class":71},[58,139036,380],{"class":379},[58,139038,383],{"class":75},[58,139040,387],{"class":386},[58,139042,390],{"class":379},[58,139044,383],{"class":75},[58,139046,395],{"class":386},[58,139048,398],{"class":75},[58,139050,376],{"class":71},[58,139052,403],{"class":75},[175,139054,138910],{},[48,139056,139057],{"className":364,"code":365,"language":366,"meta":53,"style":53},[55,139058,139059],{"__ignoreMap":53},[58,139060,139061,139063,139065,139067,139069,139071,139073,139075,139077,139079,139081],{"class":60,"line":61},[58,139062,373],{"class":75},[58,139064,376],{"class":71},[58,139066,380],{"class":379},[58,139068,383],{"class":75},[58,139070,387],{"class":386},[58,139072,390],{"class":379},[58,139074,383],{"class":75},[58,139076,395],{"class":386},[58,139078,398],{"class":75},[58,139080,376],{"class":71},[58,139082,403],{"class":75},[175,139084,139085,139086,139088],{},"2 号盒子是 ",[55,139087,152],{}," 搜索模块定位",[124,139090,139091,139094,139097,139100],{},[22,139092,139093],{},"search盒子利用定位的方式放在对应的位置",[22,139095,139096],{},"search盒子设置绝对定位，header盒子设置相对定位",[22,139098,139099],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[22,139101,139102],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[175,139104,138870],{},[48,139106,139107],{"className":50,"code":460,"language":52,"meta":53,"style":53},[55,139108,139109,139131,139135,139145],{"__ignoreMap":53},[58,139110,139111,139113,139115,139117,139119,139121,139123,139125,139127,139129],{"class":60,"line":61},[58,139112,72],{"class":71},[58,139114,469],{"class":75},[58,139116,175],{"class":71},[58,139118,469],{"class":75},[58,139120,10],{"class":71},[58,139122,469],{"class":75},[58,139124,124],{"class":71},[58,139126,469],{"class":75},[58,139128,22],{"class":71},[58,139130,76],{"class":75},[58,139132,139133],{"class":60,"line":68},[58,139134,490],{"class":64},[58,139136,139137,139139,139141,139143],{"class":60,"line":79},[58,139138,495],{"class":82},[58,139140,86],{"class":75},[58,139142,500],{"class":82},[58,139144,102],{"class":75},[58,139146,139147],{"class":60,"line":105},[58,139148,108],{"class":75},[175,139150,138910],{},[48,139152,139153],{"className":50,"code":460,"language":52,"meta":53,"style":53},[55,139154,139155,139177,139181,139191],{"__ignoreMap":53},[58,139156,139157,139159,139161,139163,139165,139167,139169,139171,139173,139175],{"class":60,"line":61},[58,139158,72],{"class":71},[58,139160,469],{"class":75},[58,139162,175],{"class":71},[58,139164,469],{"class":75},[58,139166,10],{"class":71},[58,139168,469],{"class":75},[58,139170,124],{"class":71},[58,139172,469],{"class":75},[58,139174,22],{"class":71},[58,139176,76],{"class":75},[58,139178,139179],{"class":60,"line":68},[58,139180,490],{"class":64},[58,139182,139183,139185,139187,139189],{"class":60,"line":79},[58,139184,495],{"class":82},[58,139186,86],{"class":75},[58,139188,500],{"class":82},[58,139190,102],{"class":75},[58,139192,139193],{"class":60,"line":105},[58,139194,108],{"class":75},[175,139196,139197],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[175,139199,139200,139201,139204],{},"3 号盒子是 ",[55,139202,139203],{},"hotwords"," 热词模块定位",[124,139206,139207,139210,139213],{},[22,139208,139209],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[22,139211,139212],{},"给里面所有的a标签设置 左右10px的外边距",[22,139214,139215],{},"给第一个a标签设置文字变红色（#c81623）",[175,139217,138870],{},[48,139219,139221],{"className":50,"code":139220,"language":52,"meta":53,"style":53},"div {\n  margin: 0 auto;\n}\n",[55,139222,139223,139229,139241],{"__ignoreMap":53},[58,139224,139225,139227],{"class":60,"line":61},[58,139226,72],{"class":71},[58,139228,76],{"class":75},[58,139230,139231,139233,139235,139237,139239],{"class":60,"line":68},[58,139232,71102],{"class":82},[58,139234,86],{"class":75},[58,139236,979],{"class":82},[58,139238,52195],{"class":82},[58,139240,102],{"class":75},[58,139242,139243],{"class":60,"line":79},[58,139244,108],{"class":75},[175,139246,138910],{},[48,139248,139249],{"className":50,"code":139220,"language":52,"meta":53,"style":53},[55,139250,139251,139257,139269],{"__ignoreMap":53},[58,139252,139253,139255],{"class":60,"line":61},[58,139254,72],{"class":71},[58,139256,76],{"class":75},[58,139258,139259,139261,139263,139265,139267],{"class":60,"line":68},[58,139260,71102],{"class":82},[58,139262,86],{"class":75},[58,139264,979],{"class":82},[58,139266,52195],{"class":82},[58,139268,102],{"class":75},[58,139270,139271],{"class":60,"line":79},[58,139272,108],{"class":75},[175,139274,139275,139276,139279],{},"4 号盒子是 ",[55,139277,139278],{},"shopcar"," 购物车模块",[124,139281,139282,139287,139290,139293],{},[22,139283,123964,139284,139286],{},[55,139285,139278],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[22,139288,139289],{},"count 统计部分用绝对定位做",[22,139291,139292],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[22,139294,139295],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[175,139297,138870],{},[48,139299,139300],{"className":50,"code":577,"language":52,"meta":53,"style":53},[55,139301,139302,139306,139320,139324,139338,139342,139356,139360,139374,139378],{"__ignoreMap":53},[58,139303,139304],{"class":60,"line":61},[58,139305,584],{"class":64},[58,139307,139308,139310,139312,139314,139316,139318],{"class":60,"line":68},[58,139309,589],{"class":379},[58,139311,592],{"class":75},[58,139313,595],{"class":82},[58,139315,86],{"class":75},[58,139317,600],{"class":82},[58,139319,603],{"class":75},[58,139321,139322],{"class":60,"line":79},[58,139323,608],{"class":64},[58,139325,139326,139328,139330,139332,139334,139336],{"class":60,"line":105},[58,139327,613],{"class":379},[58,139329,592],{"class":75},[58,139331,595],{"class":82},[58,139333,86],{"class":75},[58,139335,622],{"class":82},[58,139337,603],{"class":75},[58,139339,139340],{"class":60,"line":627},[58,139341,630],{"class":64},[58,139343,139344,139346,139348,139350,139352,139354],{"class":60,"line":509},[58,139345,635],{"class":379},[58,139347,592],{"class":75},[58,139349,595],{"class":82},[58,139351,86],{"class":75},[58,139353,644],{"class":82},[58,139355,603],{"class":75},[58,139357,139358],{"class":60,"line":559},[58,139359,651],{"class":64},[58,139361,139362,139364,139366,139368,139370,139372],{"class":60,"line":654},[58,139363,657],{"class":379},[58,139365,592],{"class":75},[58,139367,595],{"class":82},[58,139369,86],{"class":75},[58,139371,666],{"class":82},[58,139373,603],{"class":75},[58,139375,139376],{"class":60,"line":671},[58,139377,674],{"class":64},[58,139379,139380,139382,139384,139386,139388,139390],{"class":60,"line":677},[58,139381,680],{"class":379},[58,139383,592],{"class":75},[58,139385,595],{"class":82},[58,139387,86],{"class":75},[58,139389,689],{"class":82},[58,139391,603],{"class":75},[175,139393,138910],{},[48,139395,139396],{"className":50,"code":577,"language":52,"meta":53,"style":53},[55,139397,139398,139402,139416,139420,139434,139438,139452,139456,139470,139474],{"__ignoreMap":53},[58,139399,139400],{"class":60,"line":61},[58,139401,584],{"class":64},[58,139403,139404,139406,139408,139410,139412,139414],{"class":60,"line":68},[58,139405,589],{"class":379},[58,139407,592],{"class":75},[58,139409,595],{"class":82},[58,139411,86],{"class":75},[58,139413,600],{"class":82},[58,139415,603],{"class":75},[58,139417,139418],{"class":60,"line":79},[58,139419,608],{"class":64},[58,139421,139422,139424,139426,139428,139430,139432],{"class":60,"line":105},[58,139423,613],{"class":379},[58,139425,592],{"class":75},[58,139427,595],{"class":82},[58,139429,86],{"class":75},[58,139431,622],{"class":82},[58,139433,603],{"class":75},[58,139435,139436],{"class":60,"line":627},[58,139437,630],{"class":64},[58,139439,139440,139442,139444,139446,139448,139450],{"class":60,"line":509},[58,139441,635],{"class":379},[58,139443,592],{"class":75},[58,139445,595],{"class":82},[58,139447,86],{"class":75},[58,139449,644],{"class":82},[58,139451,603],{"class":75},[58,139453,139454],{"class":60,"line":559},[58,139455,651],{"class":64},[58,139457,139458,139460,139462,139464,139466,139468],{"class":60,"line":654},[58,139459,657],{"class":379},[58,139461,592],{"class":75},[58,139463,595],{"class":82},[58,139465,86],{"class":75},[58,139467,666],{"class":82},[58,139469,603],{"class":75},[58,139471,139472],{"class":60,"line":671},[58,139473,674],{"class":64},[58,139475,139476,139478,139480,139482,139484,139486],{"class":60,"line":677},[58,139477,680],{"class":379},[58,139479,592],{"class":75},[58,139481,595],{"class":82},[58,139483,86],{"class":75},[58,139485,689],{"class":82},[58,139487,603],{"class":75},[114,139489,139491,139492,139494],{"id":139490},"_1544-nav导航模块制作","15.4.4 ",[55,139493,145],{},"导航模块制作",[119,139496],{"style":121,"src":139497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[175,139499,139500,139502],{},[55,139501,145],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[175,139504,139505,139506],{},"1 号盒子左侧浮动，",[55,139507,139508],{},"dropdown",[124,139510,139511,139521,139529,139535,139543,139553,139561,139572],{},[22,139512,139513,139514,101647,139517,139520],{},"1号盒子有讲究，根据相关性 里面包含 ",[55,139515,139516],{},".dt",[55,139518,139519],{},".dd"," 两个盒子",[22,139522,139523,139525,139526,139528],{},[55,139524,139516],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[55,139527,139519],{}," 挤到下面去了",[22,139530,139531,139532,139534],{},"给 ",[55,139533,139519],{}," 盒子设置宽度 和 高度，以及背景颜色",[22,139536,139531,139537,139539,139540,120866],{},[55,139538,139519],{}," 盒子里面定义 无序列表 （",[55,139541,139542],{},"ul > li > a",[22,139544,139545,139546,139548,139549,139552],{},"每个 ",[55,139547,22],{}," 都有一个高度（",[55,139550,139551],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[22,139554,139531,139555,139557,139558,120866],{},[55,139556,22],{}," 里面的a设置文字大小（",[55,139559,139560],{},"14px",[22,139562,139531,139563,139565,139566,139568,139569,139571],{},[55,139564,22],{}," 设置 ",[55,139567,128337],{},"，当鼠标移入的时候，让",[55,139570,22],{},"的背景变成白色，让里面的文字变成红色",[22,139573,139574,139576,139577,139579,139580,139582],{},[55,139575,22],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[55,139578,22],{},"的右侧，那么给",[55,139581,22],{},"设置相对定位",[175,139584,139585],{},"一定要注意相关性",[175,139587,138870],{},[48,139589,139590],{"className":50,"code":138873,"language":52,"meta":53,"style":53},[55,139591,139592,139600,139610,139620],{"__ignoreMap":53},[58,139593,139594,139596,139598],{"class":60,"line":61},[58,139595,72],{"class":71},[58,139597,138032],{"class":379},[58,139599,76],{"class":75},[58,139601,139602,139604,139606,139608],{"class":60,"line":68},[58,139603,138039],{"class":82},[58,139605,86],{"class":75},[58,139607,8298],{"class":386},[58,139609,102],{"class":75},[58,139611,139612,139614,139616,139618],{"class":60,"line":79},[58,139613,495],{"class":82},[58,139615,86],{"class":75},[58,139617,500],{"class":82},[58,139619,102],{"class":75},[58,139621,139622],{"class":60,"line":105},[58,139623,108],{"class":75},[175,139625,138910],{},[48,139627,139628],{"className":50,"code":138873,"language":52,"meta":53,"style":53},[55,139629,139630,139638,139648,139658],{"__ignoreMap":53},[58,139631,139632,139634,139636],{"class":60,"line":61},[58,139633,72],{"class":71},[58,139635,138032],{"class":379},[58,139637,76],{"class":75},[58,139639,139640,139642,139644,139646],{"class":60,"line":68},[58,139641,138039],{"class":82},[58,139643,86],{"class":75},[58,139645,8298],{"class":386},[58,139647,102],{"class":75},[58,139649,139650,139652,139654,139656],{"class":60,"line":79},[58,139651,495],{"class":82},[58,139653,86],{"class":75},[58,139655,500],{"class":82},[58,139657,102],{"class":75},[58,139659,139660],{"class":60,"line":105},[58,139661,108],{"class":75},[175,139663,139664],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[175,139666,139667,139668,139671],{},"2 号盒子左侧浮动，",[55,139669,139670],{},"navitems"," 导航栏组",[124,139673,139674,139679,139688],{},[22,139675,139676,139677],{},"里面结构是 ",[55,139678,139542],{},[22,139680,139681,139682,139684,139685,139687],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[55,139683,376],{},"左右的",[55,139686,31527],{},"把两侧撑开",[22,139689,139690],{},"让文字垂直居中（行高等于高度）",[119,139692],{"style":121,"src":139693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[175,139695,139696],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[175,139698,138870],{},[48,139700,139702],{"className":50,"code":139701,"language":52,"meta":53,"style":53},".box {\n  float: left;\n}\n",[55,139703,139704,139710,139720],{"__ignoreMap":53},[58,139705,139706,139708],{"class":60,"line":61},[58,139707,131018],{"class":379},[58,139709,76],{"class":75},[58,139711,139712,139714,139716,139718],{"class":60,"line":68},[58,139713,131650],{"class":82},[58,139715,86],{"class":75},[58,139717,24379],{"class":82},[58,139719,102],{"class":75},[58,139721,139722],{"class":60,"line":79},[58,139723,108],{"class":75},[175,139725,138910],{},[48,139727,139728],{"className":50,"code":139701,"language":52,"meta":53,"style":53},[55,139729,139730,139736,139746],{"__ignoreMap":53},[58,139731,139732,139734],{"class":60,"line":61},[58,139733,131018],{"class":379},[58,139735,76],{"class":75},[58,139737,139738,139740,139742,139744],{"class":60,"line":68},[58,139739,131650],{"class":82},[58,139741,86],{"class":75},[58,139743,24379],{"class":82},[58,139745,102],{"class":75},[58,139747,139748],{"class":60,"line":79},[58,139749,108],{"class":75},[175,139751,139752],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[119,139754],{"style":121,"src":139755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[48,139757,139758],{"className":50,"code":131327,"language":52,"meta":53,"style":53},[55,139759,139760,139766,139782],{"__ignoreMap":53},[58,139761,139762,139764],{"class":60,"line":61},[58,139763,72],{"class":71},[58,139765,76],{"class":75},[58,139767,139768,139770,139772,139774,139776,139778,139780],{"class":60,"line":68},[58,139769,83],{"class":82},[58,139771,86],{"class":75},[58,139773,89],{"class":82},[58,139775,93],{"class":92},[58,139777,96],{"class":82},[58,139779,99],{"class":82},[58,139781,102],{"class":75},[58,139783,139784],{"class":60,"line":79},[58,139785,108],{"class":75},[114,139787,139789],{"id":139788},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[119,139791],{"style":121,"src":139792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[124,139794,139795,139800,139805],{},[22,139796,139797,139799],{},[55,139798,334],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[22,139801,139802,139804],{},[55,139803,334],{}," 里面有一个大的版心",[22,139806,139807,139808,139811,139812],{},"版心里面包含 1 号盒子，",[55,139809,139810],{},"mod_service"," 是服务模块，mod 是模块的意思",[124,139813,139814,139819,139832,139848,139853],{},[22,139815,139531,139816,139818],{},[55,139817,139810],{}," 设置高度（80px）和下边框",[22,139820,139821,139822,139825,139826,139828,139829,139831],{},"在里面定义 ",[55,139823,139824],{},"ul > li"," ,每个",[55,139827,22],{}," 宽度是300px 高度是 50px，给每个",[55,139830,22],{},"设置35px的左内边距",[22,139833,139834,139835,139837,139838,139840,139841,139843,139844,19053,139846,120866],{},"在每个",[55,139836,22],{},"里面，放一个 ",[55,139839,23553],{},"（里面放图标），一个",[55,139842,72],{},"（里面放",[55,139845,72],{},[55,139847,175],{},[22,139849,139531,139850,139852],{},[55,139851,23553],{},"设置浮动，让h5与这个div左右排列",[22,139854,139855],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[175,139857,138870],{},[48,139859,139861],{"className":50,"code":139860,"language":52,"meta":53,"style":53},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[55,139862,139863,139869,139881,139893,139920],{"__ignoreMap":53},[58,139864,139865,139867],{"class":60,"line":61},[58,139866,134788],{"class":379},[58,139868,76],{"class":75},[58,139870,139871,139873,139875,139877,139879],{"class":60,"line":68},[58,139872,71200],{"class":82},[58,139874,86],{"class":75},[58,139876,1486],{"class":82},[58,139878,93],{"class":92},[58,139880,102],{"class":75},[58,139882,139883,139885,139887,139889,139891],{"class":60,"line":79},[58,139884,71420],{"class":82},[58,139886,86],{"class":75},[58,139888,1486],{"class":82},[58,139890,93],{"class":92},[58,139892,102],{"class":75},[58,139894,139895,139897,139899,139901,139903,139905,139907,139909,139912,139914,139916,139918],{"class":60,"line":105},[58,139896,71243],{"class":82},[58,139898,86],{"class":75},[58,139900,62358],{"class":82},[58,139902,793],{"class":75},[58,139904,134827],{"class":5862},[58,139906,14358],{"class":75},[58,139908,62368],{"class":82},[58,139910,139911],{"class":82}," -10",[58,139913,93],{"class":92},[58,139915,134846],{"class":82},[58,139917,93],{"class":92},[58,139919,102],{"class":75},[58,139921,139922],{"class":60,"line":627},[58,139923,108],{"class":75},[175,139925,138910],{},[48,139927,139928],{"className":50,"code":139860,"language":52,"meta":53,"style":53},[55,139929,139930,139936,139948,139960,139986],{"__ignoreMap":53},[58,139931,139932,139934],{"class":60,"line":61},[58,139933,134788],{"class":379},[58,139935,76],{"class":75},[58,139937,139938,139940,139942,139944,139946],{"class":60,"line":68},[58,139939,71200],{"class":82},[58,139941,86],{"class":75},[58,139943,1486],{"class":82},[58,139945,93],{"class":92},[58,139947,102],{"class":75},[58,139949,139950,139952,139954,139956,139958],{"class":60,"line":79},[58,139951,71420],{"class":82},[58,139953,86],{"class":75},[58,139955,1486],{"class":82},[58,139957,93],{"class":92},[58,139959,102],{"class":75},[58,139961,139962,139964,139966,139968,139970,139972,139974,139976,139978,139980,139982,139984],{"class":60,"line":105},[58,139963,71243],{"class":82},[58,139965,86],{"class":75},[58,139967,62358],{"class":82},[58,139969,793],{"class":75},[58,139971,134827],{"class":5862},[58,139973,14358],{"class":75},[58,139975,62368],{"class":82},[58,139977,139911],{"class":82},[58,139979,93],{"class":92},[58,139981,134846],{"class":82},[58,139983,93],{"class":92},[58,139985,102],{"class":75},[58,139987,139988],{"class":60,"line":627},[58,139989,108],{"class":75},[175,139991,139992],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[124,139994,139995,139998,140004,140010,140022],{},[22,139996,139997],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[22,139999,140000,140001,120866],{},"里面的布局利用 自定义列表来实现（",[55,140002,140003],{},"dl > dt + dd",[22,140005,139531,140006,140009],{},[55,140007,140008],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[22,140011,139531,140012,140015,140016,19053,140018,140021],{},[55,140013,140014],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[55,140017,140014],{},[55,140019,140020],{},"dd","之间有些距离",[22,140023,140024],{},"最后一个 dl 结构和样式不一样，需要单独设置",[175,140026,138870],{},[48,140028,140029],{"className":50,"code":139220,"language":52,"meta":53,"style":53},[55,140030,140031,140037,140049],{"__ignoreMap":53},[58,140032,140033,140035],{"class":60,"line":61},[58,140034,72],{"class":71},[58,140036,76],{"class":75},[58,140038,140039,140041,140043,140045,140047],{"class":60,"line":68},[58,140040,71102],{"class":82},[58,140042,86],{"class":75},[58,140044,979],{"class":82},[58,140046,52195],{"class":82},[58,140048,102],{"class":75},[58,140050,140051],{"class":60,"line":79},[58,140052,108],{"class":75},[175,140054,138910],{},[48,140056,140057],{"className":50,"code":139220,"language":52,"meta":53,"style":53},[55,140058,140059,140065,140077],{"__ignoreMap":53},[58,140060,140061,140063],{"class":60,"line":61},[58,140062,72],{"class":71},[58,140064,76],{"class":75},[58,140066,140067,140069,140071,140073,140075],{"class":60,"line":68},[58,140068,71102],{"class":82},[58,140070,86],{"class":75},[58,140072,979],{"class":82},[58,140074,52195],{"class":82},[58,140076,102],{"class":75},[58,140078,140079],{"class":60,"line":79},[58,140080,108],{"class":75},[175,140082,140083],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[124,140085,140086,140095,140098,140109],{},[22,140087,140088,140089,140091,140092,140094],{},"分为上下两块，上面是 ",[55,140090,351],{}," 友情链接，下面是 ",[55,140093,344],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[22,140096,140097],{},"把内容分别复制到相应模块中",[22,140099,139531,140100,140102,140103,140105,140106,140108],{},[55,140101,351],{}," 设置 15px 的下外边距，给",[55,140104,351],{}," 里面 的 ",[55,140107,376],{}," 标签设置 左右 3px 的外边距",[22,140110,140111,140112,140114],{},"给",[55,140113,344],{}," 设置 20px 的行高",[175,140116,138870],{},[48,140118,140119],{"className":50,"code":139220,"language":52,"meta":53,"style":53},[55,140120,140121,140127,140139],{"__ignoreMap":53},[58,140122,140123,140125],{"class":60,"line":61},[58,140124,72],{"class":71},[58,140126,76],{"class":75},[58,140128,140129,140131,140133,140135,140137],{"class":60,"line":68},[58,140130,71102],{"class":82},[58,140132,86],{"class":75},[58,140134,979],{"class":82},[58,140136,52195],{"class":82},[58,140138,102],{"class":75},[58,140140,140141],{"class":60,"line":79},[58,140142,108],{"class":75},[175,140144,138910],{},[48,140146,140147],{"className":50,"code":139220,"language":52,"meta":53,"style":53},[55,140148,140149,140155,140167],{"__ignoreMap":53},[58,140150,140151,140153],{"class":60,"line":61},[58,140152,72],{"class":71},[58,140154,76],{"class":75},[58,140156,140157,140159,140161,140163,140165],{"class":60,"line":68},[58,140158,71102],{"class":82},[58,140160,86],{"class":75},[58,140162,979],{"class":82},[58,140164,52195],{"class":82},[58,140166,102],{"class":75},[58,140168,140169],{"class":60,"line":79},[58,140170,108],{"class":75},[175,140172,140173],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[702,140175,140176],{},"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":53,"searchDepth":68,"depth":68,"links":140178},[140179,140180,140181,140188],{"id":138459,"depth":68,"text":138460},{"id":138478,"depth":68,"text":138479},{"id":138505,"depth":68,"text":138506,"children":140182},[140183,140184,140185,140186,140187],{"id":138509,"depth":79,"text":138510},{"id":138522,"depth":79,"text":138523},{"id":138546,"depth":79,"text":138547},{"id":138568,"depth":79,"text":138569},{"id":138640,"depth":79,"text":138641},{"id":138766,"depth":68,"text":138767,"children":140189},[140190,140191,140192,140193,140195],{"id":138770,"depth":79,"text":138771},{"id":138777,"depth":79,"text":138778},{"id":138949,"depth":79,"text":138950},{"id":139490,"depth":79,"text":140194},"15.4.4 nav导航模块制作",{"id":139788,"depth":79,"text":139789},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138451,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140202,"title":140203,"body":140204,"description":717,"extension":718,"meta":142606,"navigation":720,"path":142607,"seo":142608,"stem":142609,"__hash__":142610},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140205,"toc":142583},[140206,140209,140213,140217,140229,140232,140235,140238,140249,140251,140275,140277,140301,140306,140309,140311,140347,140349,140385,140388,140393,140396,140399,140402,140432,140439,140442,140452,140454,140488,140491,140525,140531,140548,140550,140586,140588,140624,140629,140654,140656,140682,140684,140708,140715,140718,140782,140784,140826,140828,140868,140875,140880,140882,140912,140914,140944,140948,140951,140958,140970,140972,140998,141000,141024,141027,141029,141053,141059,141069,141071,141101,141103,141133,141140,141181,141183,141219,141221,141257,141261,141264,141267,141270,141276,141281,141284,141307,141310,141334,141337,141361,141366,141369,141372,141375,141378,141381,141455,141457,141487,141489,141519,141522,141525,141557,141561,141565,141579,141588,141591,141596,141598,141692,141694,141788,141811,141813,141837,141839,141863,141870,141873,141883,141885,141909,141914,141922,141924,141954,141959,141999,142001,142027,142029,142055,142059,142062,142067,142070,142074,142082,142089,142097,142099,142129,142131,142161,142169,142172,142175,142177,142207,142209,142239,142242,142247,142249,142273,142275,142299,142302,142387,142389,142413,142415,142439,142443,142445,142469,142471,142505,142509,142523,142526,142531,142534,142539,142542,142572,142580],[10,140207,140203],{"id":140208},"_16-品优购项目下篇-主体与页面开发",[14,140210,140212],{"id":140211},"_161-项目主体模块制作","16.1 项目主体模块制作",[114,140214,140216],{"id":140215},"_1611-首页制作","16.1.1 首页制作",[175,140218,140219,140221,140222,140224,140225,140228],{},[25,140220,102687],{}," 主体模块是 ",[25,140223,74689],{}," 里面专有的，注意需要新的样式文件 ",[25,140226,140227],{},"index.css，"," 就不要写在common.css中了",[119,140230],{"style":121,"src":140231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[119,140233],{"style":121,"src":140234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[175,140236,140237],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[124,140239,140240,140243,140246],{},[22,140241,140242],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[22,140244,140245],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[22,140247,140248],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[175,140250,138870],{},[48,140252,140253],{"className":50,"code":139701,"language":52,"meta":53,"style":53},[55,140254,140255,140261,140271],{"__ignoreMap":53},[58,140256,140257,140259],{"class":60,"line":61},[58,140258,131018],{"class":379},[58,140260,76],{"class":75},[58,140262,140263,140265,140267,140269],{"class":60,"line":68},[58,140264,131650],{"class":82},[58,140266,86],{"class":75},[58,140268,24379],{"class":82},[58,140270,102],{"class":75},[58,140272,140273],{"class":60,"line":79},[58,140274,108],{"class":75},[175,140276,138910],{},[48,140278,140279],{"className":50,"code":139701,"language":52,"meta":53,"style":53},[55,140280,140281,140287,140297],{"__ignoreMap":53},[58,140282,140283,140285],{"class":60,"line":61},[58,140284,131018],{"class":379},[58,140286,76],{"class":75},[58,140288,140289,140291,140293,140295],{"class":60,"line":68},[58,140290,131650],{"class":82},[58,140292,86],{"class":75},[58,140294,24379],{"class":82},[58,140296,102],{"class":75},[58,140298,140299],{"class":60,"line":79},[58,140300,108],{"class":75},[19,140302,140303],{},[22,140304,140305],{},"左侧focus模块制作",[119,140307],{"style":121,"src":140308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[175,140310,138870],{},[48,140312,140313],{"className":50,"code":128499,"language":52,"meta":53,"style":53},[55,140314,140315,140323,140333,140343],{"__ignoreMap":53},[58,140316,140317,140319,140321],{"class":60,"line":61},[58,140318,54457],{"class":71},[58,140320,62532],{"class":379},[58,140322,76],{"class":75},[58,140324,140325,140327,140329,140331],{"class":60,"line":68},[58,140326,128514],{"class":82},[58,140328,86],{"class":75},[58,140330,55523],{"class":82},[58,140332,102],{"class":75},[58,140334,140335,140337,140339,140341],{"class":60,"line":79},[58,140336,71430],{"class":82},[58,140338,86],{"class":75},[58,140340,55373],{"class":82},[58,140342,102],{"class":75},[58,140344,140345],{"class":60,"line":105},[58,140346,108],{"class":75},[175,140348,138910],{},[48,140350,140351],{"className":50,"code":128499,"language":52,"meta":53,"style":53},[55,140352,140353,140361,140371,140381],{"__ignoreMap":53},[58,140354,140355,140357,140359],{"class":60,"line":61},[58,140356,54457],{"class":71},[58,140358,62532],{"class":379},[58,140360,76],{"class":75},[58,140362,140363,140365,140367,140369],{"class":60,"line":68},[58,140364,128514],{"class":82},[58,140366,86],{"class":75},[58,140368,55523],{"class":82},[58,140370,102],{"class":75},[58,140372,140373,140375,140377,140379],{"class":60,"line":79},[58,140374,71430],{"class":82},[58,140376,86],{"class":75},[58,140378,55373],{"class":82},[58,140380,102],{"class":75},[58,140382,140383],{"class":60,"line":105},[58,140384,108],{"class":75},[175,140386,140387],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[19,140389,140390],{"start":68},[22,140391,140392],{},"右侧newsflash模块制作",[119,140394],{"style":121,"src":140395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[175,140397,140398],{},"右侧的模块 分为上中下三个盒子",[175,140400,140401],{},"结构代码：",[48,140403,140404],{"className":364,"code":134533,"language":366,"meta":53,"style":53},[55,140405,140406],{"__ignoreMap":53},[58,140407,140408,140410,140412,140414,140416,140418,140420,140422,140424,140426,140428,140430],{"class":60,"line":61},[58,140409,373],{"class":75},[58,140411,119],{"class":71},[58,140413,55873],{"class":379},[58,140415,383],{"class":75},[58,140417,134548],{"class":386},[58,140419,55881],{"class":379},[58,140421,383],{"class":75},[58,140423,134555],{"class":386},[58,140425,134558],{"class":379},[58,140427,383],{"class":75},[58,140429,134563],{"class":386},[58,140431,403],{"class":75},[175,140433,140434,140435,140438],{},"1 号盒子为 ",[55,140436,140437],{},"news"," 新闻模块 高度为 165px",[119,140440],{"style":121,"src":140441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[175,140443,140444,140445,140448,140449],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[55,140446,140447],{},"news-hd","，下面是 ",[55,140450,140451],{},"news-bd",[175,140453,140401],{},[48,140455,140456],{"className":364,"code":131274,"language":366,"meta":53,"style":53},[55,140457,140458,140462,140476,140480],{"__ignoreMap":53},[58,140459,140460],{"class":60,"line":61},[58,140461,131281],{"class":64},[58,140463,140464,140466,140468,140470,140472,140474],{"class":60,"line":68},[58,140465,373],{"class":75},[58,140467,72],{"class":71},[58,140469,54124],{"class":379},[58,140471,383],{"class":75},[58,140473,131294],{"class":386},[58,140475,403],{"class":75},[58,140477,140478],{"class":60,"line":79},[58,140479,131301],{"class":75},[58,140481,140482,140484,140486],{"class":60,"line":105},[58,140483,52423],{"class":75},[58,140485,72],{"class":71},[58,140487,403],{"class":75},[175,140489,140490],{},"样式代码：",[48,140492,140493],{"className":364,"code":131274,"language":366,"meta":53,"style":53},[55,140494,140495,140499,140513,140517],{"__ignoreMap":53},[58,140496,140497],{"class":60,"line":61},[58,140498,131281],{"class":64},[58,140500,140501,140503,140505,140507,140509,140511],{"class":60,"line":68},[58,140502,373],{"class":75},[58,140504,72],{"class":71},[58,140506,54124],{"class":379},[58,140508,383],{"class":75},[58,140510,131294],{"class":386},[58,140512,403],{"class":75},[58,140514,140515],{"class":60,"line":79},[58,140516,131301],{"class":75},[58,140518,140519,140521,140523],{"class":60,"line":105},[58,140520,52423],{"class":75},[58,140522,72],{"class":71},[58,140524,403],{"class":75},[175,140526,140527,140528,140530],{},"上面是",[55,140529,140447],{},"，设置高度是 33px，设置下边框",[124,140532,140533,140539],{},[22,140534,140535,140536,140538],{},"里面放一个",[55,140537,23553],{}," 标题",[22,140540,140541,140542,140544,140545,140547],{},"放一个a",[55,140543,103322],{},"，内容是 更多，然后让 ",[55,140546,376],{}," 进行右浮动，三角用伪元素设置字体图标就好",[175,140549,140401],{},[48,140551,140552],{"className":50,"code":138873,"language":52,"meta":53,"style":53},[55,140553,140554,140562,140572,140582],{"__ignoreMap":53},[58,140555,140556,140558,140560],{"class":60,"line":61},[58,140557,72],{"class":71},[58,140559,138032],{"class":379},[58,140561,76],{"class":75},[58,140563,140564,140566,140568,140570],{"class":60,"line":68},[58,140565,138039],{"class":82},[58,140567,86],{"class":75},[58,140569,8298],{"class":386},[58,140571,102],{"class":75},[58,140573,140574,140576,140578,140580],{"class":60,"line":79},[58,140575,495],{"class":82},[58,140577,86],{"class":75},[58,140579,500],{"class":82},[58,140581,102],{"class":75},[58,140583,140584],{"class":60,"line":105},[58,140585,108],{"class":75},[175,140587,140490],{},[48,140589,140590],{"className":50,"code":138873,"language":52,"meta":53,"style":53},[55,140591,140592,140600,140610,140620],{"__ignoreMap":53},[58,140593,140594,140596,140598],{"class":60,"line":61},[58,140595,72],{"class":71},[58,140597,138032],{"class":379},[58,140599,76],{"class":75},[58,140601,140602,140604,140606,140608],{"class":60,"line":68},[58,140603,138039],{"class":82},[58,140605,86],{"class":75},[58,140607,8298],{"class":386},[58,140609,102],{"class":75},[58,140611,140612,140614,140616,140618],{"class":60,"line":79},[58,140613,495],{"class":82},[58,140615,86],{"class":75},[58,140617,500],{"class":82},[58,140619,102],{"class":75},[58,140621,140622],{"class":60,"line":105},[58,140623,108],{"class":75},[175,140625,140626,140627],{},"下面是",[55,140628,140451],{},[124,140630,140631,140639],{},[22,140632,140633,140634,101647,140636,140638],{},"里面包含 ",[55,140635,124],{},[55,140637,22],{}," 还有链接",[22,140640,140111,140641,140643,140644,140646,140647,140650,140651],{},[55,140642,22],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[55,140645,131836],{}," 2.设置 ",[55,140648,140649],{},"white-space: nowrap;"," 3. 设置 ",[55,140652,140653],{},"text-overflow: ellipsis;",[175,140655,140401],{},[48,140657,140659],{"className":50,"code":140658,"language":52,"meta":53,"style":53},"div {\n  overflow: hidden;\n}\n",[55,140660,140661,140667,140678],{"__ignoreMap":53},[58,140662,140663,140665],{"class":60,"line":61},[58,140664,72],{"class":71},[58,140666,76],{"class":75},[58,140668,140669,140672,140674,140676],{"class":60,"line":68},[58,140670,140671],{"class":82},"  overflow",[58,140673,86],{"class":75},[58,140675,62346],{"class":82},[58,140677,102],{"class":75},[58,140679,140680],{"class":60,"line":79},[58,140681,108],{"class":75},[175,140683,140490],{},[48,140685,140686],{"className":50,"code":140658,"language":52,"meta":53,"style":53},[55,140687,140688,140694,140704],{"__ignoreMap":53},[58,140689,140690,140692],{"class":60,"line":61},[58,140691,72],{"class":71},[58,140693,76],{"class":75},[58,140695,140696,140698,140700,140702],{"class":60,"line":68},[58,140697,140671],{"class":82},[58,140699,86],{"class":75},[58,140701,62346],{"class":82},[58,140703,102],{"class":75},[58,140705,140706],{"class":60,"line":79},[58,140707,108],{"class":75},[175,140709,140710,140711,140714],{},"2 号盒子为 ",[55,140712,140713],{},"lifeservice"," 生活服务模块 高度为 209px",[119,140716],{"style":121,"src":140717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[124,140719,140720,140723,140733,140757,140768],{},[22,140721,140722],{},"设置边框（左右下边框）",[22,140724,140725,140726,140729,140730,140732],{},"里面的内容 是 ",[55,140727,140728],{},"ul > 12*li","，给",[55,140731,22],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[22,140734,140735,140736],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[124,140737,140738,140743,140752],{},[22,140739,140740,140742],{},[55,140741,140713],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[22,140744,140745,140746,140748,140749,140751],{},"可以让 ",[55,140747,140713],{}," 里面的 ",[55,140750,124],{}," 宽度为 252，就可以装的下 4 个 小 li",[22,140753,140754,140756],{},[55,140755,140713],{}," 盒子 overflow 隐藏多余的部分就可以了",[22,140758,117096,140759,140761,140762,140764,140765,140767],{},[55,140760,22],{}," 里面放一个 ",[55,140763,1227],{},"（里面放图标），下面的文本用 ",[55,140766,175],{}," 标签包裹",[22,140769,139531,140770,140772,140773,140775,140776,139565,140778,140781],{},[55,140771,1227],{}," 设置 24px宽和28px的高（注意 ",[55,140774,1227],{}," 是行内元素， 转成行内块），给 ",[55,140777,22],{},[55,140779,140780],{},"text-align:center"," 让里面内容居中显示",[175,140783,140401],{},[48,140785,140787],{"className":50,"code":140786,"language":52,"meta":53,"style":53},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[55,140788,140789,140807,140812,140822],{"__ignoreMap":53},[58,140790,140791,140793,140795,140797,140799,140801,140803,140805],{"class":60,"line":61},[58,140792,58],{"class":71},[58,140794,469],{"class":75},[58,140796,376],{"class":71},[58,140798,469],{"class":75},[58,140800,24196],{"class":71},[58,140802,469],{"class":75},[58,140804,25],{"class":71},[58,140806,76],{"class":75},[58,140808,140809],{"class":60,"line":68},[58,140810,140811],{"class":64},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[58,140813,140814,140816,140818,140820],{"class":60,"line":79},[58,140815,495],{"class":82},[58,140817,86],{"class":75},[58,140819,128853],{"class":82},[58,140821,102],{"class":75},[58,140823,140824],{"class":60,"line":105},[58,140825,108],{"class":75},[175,140827,140490],{},[48,140829,140830],{"className":50,"code":140786,"language":52,"meta":53,"style":53},[55,140831,140832,140850,140854,140864],{"__ignoreMap":53},[58,140833,140834,140836,140838,140840,140842,140844,140846,140848],{"class":60,"line":61},[58,140835,58],{"class":71},[58,140837,469],{"class":75},[58,140839,376],{"class":71},[58,140841,469],{"class":75},[58,140843,24196],{"class":71},[58,140845,469],{"class":75},[58,140847,25],{"class":71},[58,140849,76],{"class":75},[58,140851,140852],{"class":60,"line":68},[58,140853,140811],{"class":64},[58,140855,140856,140858,140860,140862],{"class":60,"line":79},[58,140857,495],{"class":82},[58,140859,86],{"class":75},[58,140861,128853],{"class":82},[58,140863,102],{"class":75},[58,140865,140866],{"class":60,"line":105},[58,140867,108],{"class":75},[175,140869,140870,140871,140874],{},"3 号盒子为 ",[55,140872,140873],{},"bargain"," 特价商品",[124,140876,140877],{},[22,140878,140879],{},"这个比较简单，直接插入一张图片即可",[175,140881,140401],{},[48,140883,140884],{"className":364,"code":134533,"language":366,"meta":53,"style":53},[55,140885,140886],{"__ignoreMap":53},[58,140887,140888,140890,140892,140894,140896,140898,140900,140902,140904,140906,140908,140910],{"class":60,"line":61},[58,140889,373],{"class":75},[58,140891,119],{"class":71},[58,140893,55873],{"class":379},[58,140895,383],{"class":75},[58,140897,134548],{"class":386},[58,140899,55881],{"class":379},[58,140901,383],{"class":75},[58,140903,134555],{"class":386},[58,140905,134558],{"class":379},[58,140907,383],{"class":75},[58,140909,134563],{"class":386},[58,140911,403],{"class":75},[175,140913,140490],{},[48,140915,140916],{"className":364,"code":134533,"language":366,"meta":53,"style":53},[55,140917,140918],{"__ignoreMap":53},[58,140919,140920,140922,140924,140926,140928,140930,140932,140934,140936,140938,140940,140942],{"class":60,"line":61},[58,140921,373],{"class":75},[58,140923,119],{"class":71},[58,140925,55873],{"class":379},[58,140927,383],{"class":75},[58,140929,134548],{"class":386},[58,140931,55881],{"class":379},[58,140933,383],{"class":75},[58,140935,134555],{"class":386},[58,140937,134558],{"class":379},[58,140939,383],{"class":75},[58,140941,134563],{"class":386},[58,140943,403],{"class":75},[114,140945,140947],{"id":140946},"_1612-推荐模块制作","16.1.2 推荐模块制作",[119,140949],{"style":121,"src":140950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[175,140952,140953,140954,140957],{},"大盒子 ",[55,140955,140956],{},"recom"," 推荐模块 recommend",[124,140959,140960],{},[22,140961,140962,140963,140965,140966,140969],{},"给这个 ",[55,140964,140956],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[55,140967,140968],{},"#ebebeb","），设置距离上边 12px",[175,140971,140401],{},[48,140973,140975],{"className":50,"code":140974,"language":52,"meta":53,"style":53},"div {\n  background-color: #f0f0f0;\n}\n",[55,140976,140977,140983,140994],{"__ignoreMap":53},[58,140978,140979,140981],{"class":60,"line":61},[58,140980,72],{"class":71},[58,140982,76],{"class":75},[58,140984,140985,140987,140989,140992],{"class":60,"line":68},[58,140986,71510],{"class":82},[58,140988,86],{"class":75},[58,140990,140991],{"class":82},"#f0f0f0",[58,140993,102],{"class":75},[58,140995,140996],{"class":60,"line":79},[58,140997,108],{"class":75},[175,140999,140490],{},[48,141001,141002],{"className":50,"code":140974,"language":52,"meta":53,"style":53},[55,141003,141004,141010,141020],{"__ignoreMap":53},[58,141005,141006,141008],{"class":60,"line":61},[58,141007,72],{"class":71},[58,141009,76],{"class":75},[58,141011,141012,141014,141016,141018],{"class":60,"line":68},[58,141013,71510],{"class":82},[58,141015,86],{"class":75},[58,141017,140991],{"class":82},[58,141019,102],{"class":75},[58,141021,141022],{"class":60,"line":79},[58,141023,108],{"class":75},[175,141025,141026],{},"里面包含 2 个盒子， 浮动即可",[175,141028,140401],{},[48,141030,141031],{"className":50,"code":139701,"language":52,"meta":53,"style":53},[55,141032,141033,141039,141049],{"__ignoreMap":53},[58,141034,141035,141037],{"class":60,"line":61},[58,141036,131018],{"class":379},[58,141038,76],{"class":75},[58,141040,141041,141043,141045,141047],{"class":60,"line":68},[58,141042,131650],{"class":82},[58,141044,86],{"class":75},[58,141046,24379],{"class":82},[58,141048,102],{"class":75},[58,141050,141051],{"class":60,"line":79},[58,141052,108],{"class":75},[175,141054,141055,141056],{},"1 号盒子 ",[55,141057,141058],{},"recom_hd",[124,141060,141061,141064],{},[22,141062,141063],{},"设置宽度205px，高度163px",[22,141065,140535,141066,141068],{},[55,141067,119],{},"标签，插入图片即可",[175,141070,140401],{},[48,141072,141073],{"className":364,"code":134533,"language":366,"meta":53,"style":53},[55,141074,141075],{"__ignoreMap":53},[58,141076,141077,141079,141081,141083,141085,141087,141089,141091,141093,141095,141097,141099],{"class":60,"line":61},[58,141078,373],{"class":75},[58,141080,119],{"class":71},[58,141082,55873],{"class":379},[58,141084,383],{"class":75},[58,141086,134548],{"class":386},[58,141088,55881],{"class":379},[58,141090,383],{"class":75},[58,141092,134555],{"class":386},[58,141094,134558],{"class":379},[58,141096,383],{"class":75},[58,141098,134563],{"class":386},[58,141100,403],{"class":75},[175,141102,140490],{},[48,141104,141105],{"className":364,"code":134533,"language":366,"meta":53,"style":53},[55,141106,141107],{"__ignoreMap":53},[58,141108,141109,141111,141113,141115,141117,141119,141121,141123,141125,141127,141129,141131],{"class":60,"line":61},[58,141110,373],{"class":75},[58,141112,119],{"class":71},[58,141114,55873],{"class":379},[58,141116,383],{"class":75},[58,141118,134548],{"class":386},[58,141120,55881],{"class":379},[58,141122,383],{"class":75},[58,141124,134555],{"class":386},[58,141126,134558],{"class":379},[58,141128,383],{"class":75},[58,141130,134563],{"class":386},[58,141132,403],{"class":75},[175,141134,141135,141136,141139],{},"2 号盒子 ",[55,141137,141138],{},"recom_bd"," ，注意里面的小竖线",[124,141141,141142,141153,141156,141161,141166],{},[22,141143,141144,141145,141147,141148,141150,141151],{},"右侧结构里面放 ",[55,141146,124],{}," 包含 4个 ",[55,141149,22],{},"，每个li里面包含一个",[55,141152,119],{},[22,141154,141155],{},"直接利用切片工具把里面的内容当成一张图片",[22,141157,139531,141158,141160],{},[55,141159,22],{}," 设置浮动",[22,141162,139531,141163,141165],{},[55,141164,119],{}," 设置宽高，宽度 248px，高度 163px",[22,141167,141168,141169,140729,141172,141174,141175,141177,141178],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[55,141170,141171],{},"top 10px",[55,141173,22],{},"设置相对定位（注意，最后一个",[55,141176,22],{},"不用设置伪元素），可以利用 ",[55,141179,141180],{},"nth-child(-n+3){...}",[175,141182,140401],{},[48,141184,141185],{"className":50,"code":138873,"language":52,"meta":53,"style":53},[55,141186,141187,141195,141205,141215],{"__ignoreMap":53},[58,141188,141189,141191,141193],{"class":60,"line":61},[58,141190,72],{"class":71},[58,141192,138032],{"class":379},[58,141194,76],{"class":75},[58,141196,141197,141199,141201,141203],{"class":60,"line":68},[58,141198,138039],{"class":82},[58,141200,86],{"class":75},[58,141202,8298],{"class":386},[58,141204,102],{"class":75},[58,141206,141207,141209,141211,141213],{"class":60,"line":79},[58,141208,495],{"class":82},[58,141210,86],{"class":75},[58,141212,500],{"class":82},[58,141214,102],{"class":75},[58,141216,141217],{"class":60,"line":105},[58,141218,108],{"class":75},[175,141220,140490],{},[48,141222,141223],{"className":50,"code":138873,"language":52,"meta":53,"style":53},[55,141224,141225,141233,141243,141253],{"__ignoreMap":53},[58,141226,141227,141229,141231],{"class":60,"line":61},[58,141228,72],{"class":71},[58,141230,138032],{"class":379},[58,141232,76],{"class":75},[58,141234,141235,141237,141239,141241],{"class":60,"line":68},[58,141236,138039],{"class":82},[58,141238,86],{"class":75},[58,141240,8298],{"class":386},[58,141242,102],{"class":75},[58,141244,141245,141247,141249,141251],{"class":60,"line":79},[58,141246,495],{"class":82},[58,141248,86],{"class":75},[58,141250,500],{"class":82},[58,141252,102],{"class":75},[58,141254,141255],{"class":60,"line":105},[58,141256,108],{"class":75},[114,141258,141260],{"id":141259},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[119,141262],{"style":121,"src":141263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[175,141265,141266],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[175,141268,141269],{},"第一楼是家用电器模块： 里面包含两个盒子",[175,141271,141272,141275],{},[55,141273,141274],{},"box_hd"," 制作",[175,141277,141055,141278,141280],{},[55,141279,141274],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[119,141282],{"style":121,"src":141283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[124,141285,141286,141291,141296,141299],{},[22,141287,141288,141290],{},[55,141289,141274],{}," 给 30px 的高度，2个像素的下边框",[22,141292,141293,141294],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[55,141295,139542],{},[22,141297,141298],{},"左侧盒左浮动，右侧盒子右浮动",[22,141300,141301,141303,141304,141306],{},[55,141302,376],{},"标签之间的距离用左右的",[55,141305,31527],{},"撑开即可",[175,141308,141309],{},"结构代码",[48,141311,141312],{"className":50,"code":139701,"language":52,"meta":53,"style":53},[55,141313,141314,141320,141330],{"__ignoreMap":53},[58,141315,141316,141318],{"class":60,"line":61},[58,141317,131018],{"class":379},[58,141319,76],{"class":75},[58,141321,141322,141324,141326,141328],{"class":60,"line":68},[58,141323,131650],{"class":82},[58,141325,86],{"class":75},[58,141327,24379],{"class":82},[58,141329,102],{"class":75},[58,141331,141332],{"class":60,"line":79},[58,141333,108],{"class":75},[175,141335,141336],{},"样式代码",[48,141338,141339],{"className":50,"code":139701,"language":52,"meta":53,"style":53},[55,141340,141341,141347,141357],{"__ignoreMap":53},[58,141342,141343,141345],{"class":60,"line":61},[58,141344,131018],{"class":379},[58,141346,76],{"class":75},[58,141348,141349,141351,141353,141355],{"class":60,"line":68},[58,141350,131650],{"class":82},[58,141352,86],{"class":75},[58,141354,24379],{"class":82},[58,141356,102],{"class":75},[58,141358,141359],{"class":60,"line":79},[58,141360,108],{"class":75},[175,141362,141363,141275],{},[55,141364,141365],{},"box_bd",[175,141367,141368],{},"2 号盒子 box_bd，不要给高度",[119,141370],{"style":121,"src":141371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[175,141373,141374],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[175,141376,141377],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[175,141379,141380],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[124,141382,141383,141395,141411],{},[22,141384,141385,141387,141388,141391,141392,141394],{},[55,141386,141365],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[55,141389,141390],{},"tab_content","，在",[55,141393,141390],{}," 里面包裹tab选项卡对应的内容",[22,141396,141397,141398,141401,141402,141404,141405,141407,141408,141410],{},"内容被一个大盒子包裹（",[55,141399,141400],{},"tab_list_item","），里面是 ",[55,141403,124],{}," 包裹 5个 ",[55,141406,22],{},"，每个",[55,141409,22],{},"设置对应的宽度，然后设置浮动",[22,141412,141413,141414,141416,141417,141419,141420],{},"而这5个",[55,141415,22],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[55,141418,22],{},"设置",[124,141421,141422,141440,141443],{},[22,141423,141424,141425,141427,141428,141430,141431,141433,141434,141436,141437,141439],{},"第一个小 ",[55,141426,22],{}," 分为上下结构，上面是 ",[55,141429,124],{}," 包裹 ",[55,141432,22],{}," ，",[55,141435,22],{},"里面包裹 ",[55,141438,376],{},"，下面插入一张图片",[22,141441,141442],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[22,141444,141445,141446,141448,141449,141451,141452,141454],{},"后面的小 ",[55,141447,22],{}," 里面先放一个",[55,141450,376],{},"标签，然后在",[55,141453,376],{},"标签里面插入图片即可",[175,141456,141309],{},[48,141458,141459],{"className":364,"code":134533,"language":366,"meta":53,"style":53},[55,141460,141461],{"__ignoreMap":53},[58,141462,141463,141465,141467,141469,141471,141473,141475,141477,141479,141481,141483,141485],{"class":60,"line":61},[58,141464,373],{"class":75},[58,141466,119],{"class":71},[58,141468,55873],{"class":379},[58,141470,383],{"class":75},[58,141472,134548],{"class":386},[58,141474,55881],{"class":379},[58,141476,383],{"class":75},[58,141478,134555],{"class":386},[58,141480,134558],{"class":379},[58,141482,383],{"class":75},[58,141484,134563],{"class":386},[58,141486,403],{"class":75},[175,141488,141336],{},[48,141490,141491],{"className":364,"code":134533,"language":366,"meta":53,"style":53},[55,141492,141493],{"__ignoreMap":53},[58,141494,141495,141497,141499,141501,141503,141505,141507,141509,141511,141513,141515,141517],{"class":60,"line":61},[58,141496,373],{"class":75},[58,141498,119],{"class":71},[58,141500,55873],{"class":379},[58,141502,383],{"class":75},[58,141504,134548],{"class":386},[58,141506,55881],{"class":379},[58,141508,383],{"class":75},[58,141510,134555],{"class":386},[58,141512,134558],{"class":379},[58,141514,383],{"class":75},[58,141516,134563],{"class":386},[58,141518,403],{"class":75},[175,141520,141521],{},"tab栏切换需求！！！！！！介绍：",[119,141523],{"style":121,"src":141524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[124,141526,141527,141535,141541,141544],{},[22,141528,141529,141532,141533],{},[55,141530,141531],{},"tab","栏的布局是 ",[55,141534,139542],{},[22,141536,141537,141538,141540],{},"有多少个",[55,141539,141531],{},"选项卡，那么对应就有多少个内容",[22,141542,141543],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[22,141545,141546,141547,141550,141551,141553,141554,141556],{},"等后面我们学习了",[55,141548,141549],{},"js","之后，我们就会配合",[55,141552,141549],{},"来实现，",[55,141555,141531],{},"栏的切换",[14,141558,141560],{"id":141559},"_162-列表制作","16.2 列表制作",[114,141562,141564],{"id":141563},"_1621-准备工作","16.2.1 准备工作",[124,141566,141567,141570,141573,141576],{},[22,141568,141569],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[22,141571,141572],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[22,141574,141575],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[22,141577,141578],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[114,141580,141582,141583,101647,141585,141587],{"id":141581},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[55,141584,131],{},[55,141586,145],{}," 修改",[119,141589],{"style":121,"src":141590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[124,141592,141593],{},[22,141594,141595],{},"秒杀盒子 sk（ second kill ） 定位即可",[175,141597,140401],{},[48,141599,141600],{"className":50,"code":577,"language":52,"meta":53,"style":53},[55,141601,141602,141606,141620,141624,141638,141642,141656,141660,141674,141678],{"__ignoreMap":53},[58,141603,141604],{"class":60,"line":61},[58,141605,584],{"class":64},[58,141607,141608,141610,141612,141614,141616,141618],{"class":60,"line":68},[58,141609,589],{"class":379},[58,141611,592],{"class":75},[58,141613,595],{"class":82},[58,141615,86],{"class":75},[58,141617,600],{"class":82},[58,141619,603],{"class":75},[58,141621,141622],{"class":60,"line":79},[58,141623,608],{"class":64},[58,141625,141626,141628,141630,141632,141634,141636],{"class":60,"line":105},[58,141627,613],{"class":379},[58,141629,592],{"class":75},[58,141631,595],{"class":82},[58,141633,86],{"class":75},[58,141635,622],{"class":82},[58,141637,603],{"class":75},[58,141639,141640],{"class":60,"line":627},[58,141641,630],{"class":64},[58,141643,141644,141646,141648,141650,141652,141654],{"class":60,"line":509},[58,141645,635],{"class":379},[58,141647,592],{"class":75},[58,141649,595],{"class":82},[58,141651,86],{"class":75},[58,141653,644],{"class":82},[58,141655,603],{"class":75},[58,141657,141658],{"class":60,"line":559},[58,141659,651],{"class":64},[58,141661,141662,141664,141666,141668,141670,141672],{"class":60,"line":654},[58,141663,657],{"class":379},[58,141665,592],{"class":75},[58,141667,595],{"class":82},[58,141669,86],{"class":75},[58,141671,666],{"class":82},[58,141673,603],{"class":75},[58,141675,141676],{"class":60,"line":671},[58,141677,674],{"class":64},[58,141679,141680,141682,141684,141686,141688,141690],{"class":60,"line":677},[58,141681,680],{"class":379},[58,141683,592],{"class":75},[58,141685,595],{"class":82},[58,141687,86],{"class":75},[58,141689,689],{"class":82},[58,141691,603],{"class":75},[175,141693,140490],{},[48,141695,141696],{"className":50,"code":577,"language":52,"meta":53,"style":53},[55,141697,141698,141702,141716,141720,141734,141738,141752,141756,141770,141774],{"__ignoreMap":53},[58,141699,141700],{"class":60,"line":61},[58,141701,584],{"class":64},[58,141703,141704,141706,141708,141710,141712,141714],{"class":60,"line":68},[58,141705,589],{"class":379},[58,141707,592],{"class":75},[58,141709,595],{"class":82},[58,141711,86],{"class":75},[58,141713,600],{"class":82},[58,141715,603],{"class":75},[58,141717,141718],{"class":60,"line":79},[58,141719,608],{"class":64},[58,141721,141722,141724,141726,141728,141730,141732],{"class":60,"line":105},[58,141723,613],{"class":379},[58,141725,592],{"class":75},[58,141727,595],{"class":82},[58,141729,86],{"class":75},[58,141731,622],{"class":82},[58,141733,603],{"class":75},[58,141735,141736],{"class":60,"line":627},[58,141737,630],{"class":64},[58,141739,141740,141742,141744,141746,141748,141750],{"class":60,"line":509},[58,141741,635],{"class":379},[58,141743,592],{"class":75},[58,141745,595],{"class":82},[58,141747,86],{"class":75},[58,141749,644],{"class":82},[58,141751,603],{"class":75},[58,141753,141754],{"class":60,"line":559},[58,141755,651],{"class":64},[58,141757,141758,141760,141762,141764,141766,141768],{"class":60,"line":654},[58,141759,657],{"class":379},[58,141761,592],{"class":75},[58,141763,595],{"class":82},[58,141765,86],{"class":75},[58,141767,666],{"class":82},[58,141769,603],{"class":75},[58,141771,141772],{"class":60,"line":671},[58,141773,674],{"class":64},[58,141775,141776,141778,141780,141782,141784,141786],{"class":60,"line":677},[58,141777,680],{"class":379},[58,141779,592],{"class":75},[58,141781,595],{"class":82},[58,141783,86],{"class":75},[58,141785,689],{"class":82},[58,141787,603],{"class":75},[124,141789,141790,141801],{},[22,141791,141792,141793,141796,141797,101647,141799],{},"1 号盒子左侧浮动 ",[55,141794,141795],{},"sk_list"," 里面包含 ",[55,141798,124],{},[55,141800,22],{},[22,141802,141803,141804,141796,141807,101647,141809],{},"2 号盒子左侧浮动 ",[55,141805,141806],{},"sk_con",[55,141808,124],{},[55,141810,22],{},[175,141812,140401],{},[48,141814,141815],{"className":50,"code":139701,"language":52,"meta":53,"style":53},[55,141816,141817,141823,141833],{"__ignoreMap":53},[58,141818,141819,141821],{"class":60,"line":61},[58,141820,131018],{"class":379},[58,141822,76],{"class":75},[58,141824,141825,141827,141829,141831],{"class":60,"line":68},[58,141826,131650],{"class":82},[58,141828,86],{"class":75},[58,141830,24379],{"class":82},[58,141832,102],{"class":75},[58,141834,141835],{"class":60,"line":79},[58,141836,108],{"class":75},[175,141838,140490],{},[48,141840,141841],{"className":50,"code":139701,"language":52,"meta":53,"style":53},[55,141842,141843,141849,141859],{"__ignoreMap":53},[58,141844,141845,141847],{"class":60,"line":61},[58,141846,131018],{"class":379},[58,141848,76],{"class":75},[58,141850,141851,141853,141855,141857],{"class":60,"line":68},[58,141852,131650],{"class":82},[58,141854,86],{"class":75},[58,141856,24379],{"class":82},[58,141858,102],{"class":75},[58,141860,141861],{"class":60,"line":79},[58,141862,108],{"class":75},[114,141864,141866,141867],{"id":141865},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[55,141868,141869],{},"sk_container",[119,141871],{"style":121,"src":141872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[124,141874,141875,141880],{},[22,141876,141055,141877,141879],{},[55,141878,141869],{}," 给宽度 1200，不要给高度",[22,141881,141882],{},"一定不要忘记清除浮动",[175,141884,140401],{},[48,141886,141887],{"className":50,"code":139701,"language":52,"meta":53,"style":53},[55,141888,141889,141895,141905],{"__ignoreMap":53},[58,141890,141891,141893],{"class":60,"line":61},[58,141892,131018],{"class":379},[58,141894,76],{"class":75},[58,141896,141897,141899,141901,141903],{"class":60,"line":68},[58,141898,131650],{"class":82},[58,141900,86],{"class":75},[58,141902,24379],{"class":82},[58,141904,102],{"class":75},[58,141906,141907],{"class":60,"line":79},[58,141908,108],{"class":75},[19,141910,141911],{},[22,141912,141913],{},"sk_hd制作",[124,141915,141916],{},[22,141917,141135,141918,141921],{},[55,141919,141920],{},"sk_hd"," ，插入图片即可",[175,141923,140401],{},[48,141925,141926],{"className":364,"code":134533,"language":366,"meta":53,"style":53},[55,141927,141928],{"__ignoreMap":53},[58,141929,141930,141932,141934,141936,141938,141940,141942,141944,141946,141948,141950,141952],{"class":60,"line":61},[58,141931,373],{"class":75},[58,141933,119],{"class":71},[58,141935,55873],{"class":379},[58,141937,383],{"class":75},[58,141939,134548],{"class":386},[58,141941,55881],{"class":379},[58,141943,383],{"class":75},[58,141945,134555],{"class":386},[58,141947,134558],{"class":379},[58,141949,383],{"class":75},[58,141951,134563],{"class":386},[58,141953,403],{"class":75},[19,141955,141956],{"start":68},[22,141957,141958],{},"sk_bd制作",[124,141960,141961],{},[22,141962,141963,141964,141967,141968,101647,141970,141972],{},"3 号盒子 ",[55,141965,141966],{},"sk_bd"," ，里面包含很多的 ",[55,141969,124],{},[55,141971,22],{},[124,141973,141974,141983],{},[22,141975,141976,141977,141979,141980,141982],{},"当鼠标移入到 ",[55,141978,22],{}," 上面的时候显示红色的边框，在这里先给 ",[55,141981,22],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[22,141984,141985,141986,141988,141989,141991,141992,141995,141996,141998],{},"由于给每个 ",[55,141987,22],{}," 都设置了外边距，导致一行的最后一个 ",[55,141990,22],{}," 掉了下来，在这里我们利用 ",[55,141993,141994],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[55,141997,22],{},"，去掉外边距就好了",[175,142000,140401],{},[48,142002,142003],{"className":50,"code":139220,"language":52,"meta":53,"style":53},[55,142004,142005,142011,142023],{"__ignoreMap":53},[58,142006,142007,142009],{"class":60,"line":61},[58,142008,72],{"class":71},[58,142010,76],{"class":75},[58,142012,142013,142015,142017,142019,142021],{"class":60,"line":68},[58,142014,71102],{"class":82},[58,142016,86],{"class":75},[58,142018,979],{"class":82},[58,142020,52195],{"class":82},[58,142022,102],{"class":75},[58,142024,142025],{"class":60,"line":79},[58,142026,108],{"class":75},[175,142028,140490],{},[48,142030,142031],{"className":50,"code":139220,"language":52,"meta":53,"style":53},[55,142032,142033,142039,142051],{"__ignoreMap":53},[58,142034,142035,142037],{"class":60,"line":61},[58,142036,72],{"class":71},[58,142038,76],{"class":75},[58,142040,142041,142043,142045,142047,142049],{"class":60,"line":68},[58,142042,71102],{"class":82},[58,142044,86],{"class":75},[58,142046,979],{"class":82},[58,142048,52195],{"class":82},[58,142050,102],{"class":75},[58,142052,142053],{"class":60,"line":79},[58,142054,108],{"class":75},[14,142056,142058],{"id":142057},"_163-注册页面制作","16.3 注册页面制作",[119,142060],{"style":121,"src":142061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[175,142063,142064,142066],{},[25,142065,195],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[119,142068],{"style":121,"src":142069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[114,142071,142073],{"id":142072},"_1631-准备工作","16.3.1 准备工作",[124,142075,142076,142079],{},[22,142077,142078],{},"创建register.html，引入 base.css，引入favicon图标",[22,142080,142081],{},"创建register.css ，在html页面进行引入",[114,142083,142085,142086,142088],{"id":142084},"_1632-header-头部实现","16.3.2 ",[55,142087,131],{}," 头部实现",[124,142090,142091,142094],{},[22,142092,142093],{},"整个内容用 版心 进行包裹",[22,142095,142096],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[175,142098,140401],{},[48,142100,142101],{"className":364,"code":134533,"language":366,"meta":53,"style":53},[55,142102,142103],{"__ignoreMap":53},[58,142104,142105,142107,142109,142111,142113,142115,142117,142119,142121,142123,142125,142127],{"class":60,"line":61},[58,142106,373],{"class":75},[58,142108,119],{"class":71},[58,142110,55873],{"class":379},[58,142112,383],{"class":75},[58,142114,134548],{"class":386},[58,142116,55881],{"class":379},[58,142118,383],{"class":75},[58,142120,134555],{"class":386},[58,142122,134558],{"class":379},[58,142124,383],{"class":75},[58,142126,134563],{"class":386},[58,142128,403],{"class":75},[175,142130,140490],{},[48,142132,142133],{"className":364,"code":134533,"language":366,"meta":53,"style":53},[55,142134,142135],{"__ignoreMap":53},[58,142136,142137,142139,142141,142143,142145,142147,142149,142151,142153,142155,142157,142159],{"class":60,"line":61},[58,142138,373],{"class":75},[58,142140,119],{"class":71},[58,142142,55873],{"class":379},[58,142144,383],{"class":75},[58,142146,134548],{"class":386},[58,142148,55881],{"class":379},[58,142150,383],{"class":75},[58,142152,134555],{"class":386},[58,142154,134558],{"class":379},[58,142156,383],{"class":75},[58,142158,134563],{"class":386},[58,142160,403],{"class":75},[114,142162,142164,142165,142168],{"id":142163},"_1633-registerarea-主体模块实现","16.3.3 ",[55,142166,142167],{},"registerarea"," 主体模块实现",[119,142170],{"style":121,"src":142171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[175,142173,142174],{},"整个大盒子 高度为 522px，设置4个边框",[175,142176,140401],{},[48,142178,142179],{"className":50,"code":131327,"language":52,"meta":53,"style":53},[55,142180,142181,142187,142203],{"__ignoreMap":53},[58,142182,142183,142185],{"class":60,"line":61},[58,142184,72],{"class":71},[58,142186,76],{"class":75},[58,142188,142189,142191,142193,142195,142197,142199,142201],{"class":60,"line":68},[58,142190,83],{"class":82},[58,142192,86],{"class":75},[58,142194,89],{"class":82},[58,142196,93],{"class":92},[58,142198,96],{"class":82},[58,142200,99],{"class":82},[58,142202,102],{"class":75},[58,142204,142205],{"class":60,"line":79},[58,142206,108],{"class":75},[175,142208,140490],{},[48,142210,142211],{"className":50,"code":131327,"language":52,"meta":53,"style":53},[55,142212,142213,142219,142235],{"__ignoreMap":53},[58,142214,142215,142217],{"class":60,"line":61},[58,142216,72],{"class":71},[58,142218,76],{"class":75},[58,142220,142221,142223,142225,142227,142229,142231,142233],{"class":60,"line":68},[58,142222,83],{"class":82},[58,142224,86],{"class":75},[58,142226,89],{"class":82},[58,142228,93],{"class":92},[58,142230,96],{"class":82},[58,142232,99],{"class":82},[58,142234,102],{"class":75},[58,142236,142237],{"class":60,"line":79},[58,142238,108],{"class":75},[175,142240,142241],{},"1号盒子 是一个 h3 标签，放标题",[124,142243,142244],{},[22,142245,142246],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[175,142248,140401],{},[48,142250,142251],{"className":50,"code":139701,"language":52,"meta":53,"style":53},[55,142252,142253,142259,142269],{"__ignoreMap":53},[58,142254,142255,142257],{"class":60,"line":61},[58,142256,131018],{"class":379},[58,142258,76],{"class":75},[58,142260,142261,142263,142265,142267],{"class":60,"line":68},[58,142262,131650],{"class":82},[58,142264,86],{"class":75},[58,142266,24379],{"class":82},[58,142268,102],{"class":75},[58,142270,142271],{"class":60,"line":79},[58,142272,108],{"class":75},[175,142274,140490],{},[48,142276,142277],{"className":50,"code":139701,"language":52,"meta":53,"style":53},[55,142278,142279,142285,142295],{"__ignoreMap":53},[58,142280,142281,142283],{"class":60,"line":61},[58,142282,131018],{"class":379},[58,142284,76],{"class":75},[58,142286,142287,142289,142291,142293],{"class":60,"line":68},[58,142288,131650],{"class":82},[58,142290,86],{"class":75},[58,142292,24379],{"class":82},[58,142294,102],{"class":75},[58,142296,142297],{"class":60,"line":79},[58,142298,108],{"class":75},[175,142300,142301],{},"2号盒子 里面放注册的内容",[124,142303,142304,142307,142316,142330,142343,142346,142349,142367,142381],{},[22,142305,142306],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[22,142308,142309,142310,142312,142313,142315],{},"里面的内容利用 ",[55,142311,124],{}," 包含 ",[55,142314,22],{}," 来实现的（不需要用表格）",[22,142317,139545,142318,142320,142321,142323,142324,142326,142327,142329],{},[55,142319,22],{}," 里面，左侧放 ",[55,142322,34252],{}," 标签， 中间放",[55,142325,54457],{}," 标签， 右侧放 ",[55,142328,58],{}," 提示信息",[22,142331,142332,142333,142335,142336,142338,142339,142342],{},"左侧 ",[55,142334,34252],{},"里面的文字都是右对齐，我们可以给",[55,142337,34252],{},"设置一个宽度（88px），然后利用",[55,142340,142341],{},"text-align"," 来设置右对齐",[22,142344,142345],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[22,142347,142348],{},"右侧 span修饰一下文字颜色",[22,142350,142351,142352],{},"提示信息的样式优化",[124,142353,142354,142357,142360],{},[22,142355,142356],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[22,142358,142359],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[22,142361,142362,142363,142366],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[55,142364,142365],{},"vertical-algin"," 来设置 图片与文字对齐方式",[22,142368,142369,142370],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[124,142371,142372,142378],{},[22,142373,142374,142375,142377],{},"设置 ",[55,142376,24196],{}," 的 左右 12px 的内边距，设置一下文字颜色",[22,142379,142380],{},"分别设置 背景颜色",[22,142382,142383,142384,142386],{},"同意协议 和 完成注册 都是用 ",[55,142385,22],{}," 进行包裹",[175,142388,140401],{},[48,142390,142391],{"className":50,"code":140974,"language":52,"meta":53,"style":53},[55,142392,142393,142399,142409],{"__ignoreMap":53},[58,142394,142395,142397],{"class":60,"line":61},[58,142396,72],{"class":71},[58,142398,76],{"class":75},[58,142400,142401,142403,142405,142407],{"class":60,"line":68},[58,142402,71510],{"class":82},[58,142404,86],{"class":75},[58,142406,140991],{"class":82},[58,142408,102],{"class":75},[58,142410,142411],{"class":60,"line":79},[58,142412,108],{"class":75},[175,142414,140490],{},[48,142416,142417],{"className":50,"code":140974,"language":52,"meta":53,"style":53},[55,142418,142419,142425,142435],{"__ignoreMap":53},[58,142420,142421,142423],{"class":60,"line":61},[58,142422,72],{"class":71},[58,142424,76],{"class":75},[58,142426,142427,142429,142431,142433],{"class":60,"line":68},[58,142428,71510],{"class":82},[58,142430,86],{"class":75},[58,142432,140991],{"class":82},[58,142434,102],{"class":75},[58,142436,142437],{"class":60,"line":79},[58,142438,108],{"class":75},[114,142440,142442],{"id":142441},"_1634-底部实现","16.3.4 底部实现",[175,142444,140401],{},[48,142446,142447],{"className":50,"code":140974,"language":52,"meta":53,"style":53},[55,142448,142449,142455,142465],{"__ignoreMap":53},[58,142450,142451,142453],{"class":60,"line":61},[58,142452,72],{"class":71},[58,142454,76],{"class":75},[58,142456,142457,142459,142461,142463],{"class":60,"line":68},[58,142458,71510],{"class":82},[58,142460,86],{"class":75},[58,142462,140991],{"class":82},[58,142464,102],{"class":75},[58,142466,142467],{"class":60,"line":79},[58,142468,108],{"class":75},[175,142470,140490],{},[48,142472,142473],{"className":364,"code":131274,"language":366,"meta":53,"style":53},[55,142474,142475,142479,142493,142497],{"__ignoreMap":53},[58,142476,142477],{"class":60,"line":61},[58,142478,131281],{"class":64},[58,142480,142481,142483,142485,142487,142489,142491],{"class":60,"line":68},[58,142482,373],{"class":75},[58,142484,72],{"class":71},[58,142486,54124],{"class":379},[58,142488,383],{"class":75},[58,142490,131294],{"class":386},[58,142492,403],{"class":75},[58,142494,142495],{"class":60,"line":79},[58,142496,131301],{"class":75},[58,142498,142499,142501,142503],{"class":60,"line":105},[58,142500,52423],{"class":75},[58,142502,72],{"class":71},[58,142504,403],{"class":75},[14,142506,142508],{"id":142507},"_164-项目总结","16.4 项目总结",[19,142510,142511,142514,142517,142520],{},[22,142512,142513],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[22,142515,142516],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[22,142518,142519],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[22,142521,142522],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[119,142524],{"style":121,"src":142525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[19,142527,142528],{"start":627},[22,142529,142530],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[119,142532],{"style":121,"src":142533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[19,142535,142536],{"start":509},[22,142537,142538],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[119,142540],{"style":121,"src":142541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[48,142543,142544],{"className":364,"code":137188,"language":366,"meta":53,"style":53},[55,142545,142546],{"__ignoreMap":53},[58,142547,142548,142550,142552,142554,142556,142558,142560,142562,142564,142566,142568,142570],{"class":60,"line":61},[58,142549,373],{"class":75},[58,142551,54457],{"class":71},[58,142553,54460],{"class":379},[58,142555,383],{"class":75},[58,142557,63331],{"class":386},[58,142559,15564],{"class":379},[58,142561,383],{"class":75},[58,142563,137209],{"class":386},[58,142565,61653],{"class":379},[58,142567,383],{"class":75},[58,142569,137216],{"class":386},[58,142571,403],{"class":75},[19,142573,142574,142577],{"start":559},[22,142575,142576],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[22,142578,142579],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[702,142581,142582],{},"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":53,"searchDepth":68,"depth":68,"links":142584},[142585,142590,142597,142605],{"id":140211,"depth":68,"text":140212,"children":142586},[142587,142588,142589],{"id":140215,"depth":79,"text":140216},{"id":140946,"depth":79,"text":140947},{"id":141259,"depth":79,"text":141260},{"id":141559,"depth":68,"text":141560,"children":142591},[142592,142593,142595],{"id":141563,"depth":79,"text":141564},{"id":141581,"depth":79,"text":142594},"16.2.2 列表页 header 和 nav 修改",{"id":141865,"depth":79,"text":142596},"16.2.3 列表页主体 sk_container",{"id":142057,"depth":68,"text":142058,"children":142598},[142599,142600,142602,142604],{"id":142072,"depth":79,"text":142073},{"id":142084,"depth":79,"text":142601},"16.3.2 header 头部实现",{"id":142163,"depth":79,"text":142603},"16.3.3 registerarea 主体模块实现",{"id":142441,"depth":79,"text":142442},{"id":142507,"depth":68,"text":142508},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140203,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142612,"title":142613,"body":142614,"description":717,"extension":718,"meta":142722,"navigation":720,"path":142723,"seo":142724,"stem":142725,"__hash__":142726},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142615,"toc":142717},[142616,142619,142623,142626,142629,142638,142647,142651,142656,142663,142681,142684,142687,142690,142693,142696,142699,142702,142705,142708,142711,142714],[10,142617,142613],{"id":142618},"_17-web服务器与网站发布",[14,142620,142622],{"id":142621},"_171-web服务器","17.1 Web服务器",[175,142624,142625],{},"把自己网站上传到服务器上，可以让其他人访问",[119,142627],{"style":121,"src":142628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[175,142630,142631,142634,142635],{},[25,142632,142633],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[25,142636,142637],{},"Web 服务器等",[175,142639,142640,142641,101647,142644,26384],{},"根据服务器在网络中所在的位置不同，又可分为 ",[25,142642,142643],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[25,142645,142646],{},"远程服务器",[114,142648,142650],{"id":142649},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[175,142652,142653],{},[25,142654,142655],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[175,142657,142658,142659],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[376,142660,142661],{"href":142661,"rel":142662},"http:\u002F\u002Ffree.3v.do\u002F",[24508],[124,142664,142665,142668,142671,142678],{},[22,142666,142667],{},"去免费空间网站注册账号。",[22,142669,142670],{},"记录下主机名、用户名、密码、域名。",[22,142672,142673,142674,142677],{},"利用 ",[55,142675,142676],{},"utftp"," 软件 上传网站到远程服务器",[22,142679,142680],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[175,142682,142683],{},"使用软件上传，对上传软件文件进行解压",[119,142685],{"style":121,"src":142686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[119,142688],{"style":121,"src":142689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[175,142691,142692],{},"输入刚刚申请的服务器账号信息：",[119,142694],{"style":121,"src":142695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[119,142697],{"style":121,"src":142698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[119,142700],{"style":121,"src":142701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[119,142703],{"style":121,"src":142704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[175,142706,142707],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[119,142709],{"style":121,"src":142710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[175,142712,142713],{},"浏览器输入域名即可访问",[175,142715,142716],{},"首页一定必须是index",{"title":53,"searchDepth":68,"depth":68,"links":142718},[142719],{"id":142621,"depth":68,"text":142622,"children":142720},[142721],{"id":142649,"depth":79,"text":142650},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142613,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142728,"title":142729,"body":142730,"description":717,"extension":718,"meta":143657,"navigation":720,"path":143658,"seo":143659,"stem":143660,"__hash__":143661},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142731,"toc":143640},[142732,142735,142739,142742,142745,142756,142759,142763,142767,142772,142775,142778,142781,142784,142788,142814,142818,142822,142825,142828,142832,142865,142869,142872,142875,142939,142943,142947,142950,142953,142956,142960,143005,143009,143012,143042,143046,143050,143053,143056,143060,143063,143132,143135,143243,143245,143251,143255,143258,143261,143357,143360,143364,143388,143392,143395,143399,143402,143406,143409,143412,143415,143418,143422,143425,143428,143432,143436,143439,143442,143445,143448,143452,143455,143459,143462,143465,143510,143514,143518,143521,143524,143527,143559,143563,143566,143600,143604,143607,143637],[10,142733,142729],{"id":142734},"_18-2d动画与3d转换",[14,142736,142738],{"id":142737},"_181-css3-2d转换","18.1 CSS3 2D转换",[175,142740,142741],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[175,142743,142744],{},"转换（transform）你可以简单理解为变形",[124,142746,142747,142750,142753],{},[22,142748,142749],{},"移动：translate",[22,142751,142752],{},"旋转：rotate",[22,142754,142755],{},"缩放：scale",[119,142757],{"style":121,"src":142758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[114,142760,142762],{"id":142761},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22641,142764,142766],{"id":142765},"_18111-translate介绍","18.1.1.1 translate介绍",[175,142768,142769,142770],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[25,142771,133690],{},[119,142773],{"style":121,"src":142774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[175,142776,142777],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[175,142779,142780],{},"对于行内元素无效",[175,142782,142783],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22641,142785,142787],{"id":142786},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[48,142789,142790],{"className":50,"code":139220,"language":52,"meta":53,"style":53},[55,142791,142792,142798,142810],{"__ignoreMap":53},[58,142793,142794,142796],{"class":60,"line":61},[58,142795,72],{"class":71},[58,142797,76],{"class":75},[58,142799,142800,142802,142804,142806,142808],{"class":60,"line":68},[58,142801,71102],{"class":82},[58,142803,86],{"class":75},[58,142805,979],{"class":82},[58,142807,52195],{"class":82},[58,142809,102],{"class":75},[58,142811,142812],{"class":60,"line":79},[58,142813,108],{"class":75},[114,142815,142817],{"id":142816},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22641,142819,142821],{"id":142820},"_18121-rotate介绍","18.1.2.1 rotate介绍",[175,142823,142824],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[119,142826],{"style":121,"src":142827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22641,142829,142831],{"id":142830},"_18122-旋转效果","18.1.2.2 旋转效果",[48,142833,142835],{"className":50,"code":142834,"language":52,"meta":53,"style":53},"div {\n  transform: rotate(45deg);\n}\n",[55,142836,142837,142843,142861],{"__ignoreMap":53},[58,142838,142839,142841],{"class":60,"line":61},[58,142840,72],{"class":71},[58,142842,76],{"class":75},[58,142844,142845,142847,142849,142852,142854,142856,142859],{"class":60,"line":68},[58,142846,137015],{"class":82},[58,142848,86],{"class":75},[58,142850,142851],{"class":82},"rotate",[58,142853,793],{"class":75},[58,142855,1315],{"class":82},[58,142857,142858],{"class":92},"deg",[58,142860,3365],{"class":75},[58,142862,142863],{"class":60,"line":79},[58,142864,108],{"class":75},[22641,142866,142868],{"id":142867},"_18123-三角做法","18.1.2.3 三角做法",[175,142870,142871],{},"该下标当经过最外层大盒子时会实现向上反转",[119,142873],{"style":121,"src":142874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[48,142876,142877],{"className":50,"code":135551,"language":52,"meta":53,"style":53},[55,142878,142879,142883,142889,142899,142909,142925,142935],{"__ignoreMap":53},[58,142880,142881],{"class":60,"line":61},[58,142882,135558],{"class":64},[58,142884,142885,142887],{"class":60,"line":68},[58,142886,135563],{"class":379},[58,142888,76],{"class":75},[58,142890,142891,142893,142895,142897],{"class":60,"line":79},[58,142892,71200],{"class":82},[58,142894,86],{"class":75},[58,142896,979],{"class":82},[58,142898,102],{"class":75},[58,142900,142901,142903,142905,142907],{"class":60,"line":105},[58,142902,71420],{"class":82},[58,142904,86],{"class":75},[58,142906,979],{"class":82},[58,142908,102],{"class":75},[58,142910,142911,142913,142915,142917,142919,142921,142923],{"class":60,"line":627},[58,142912,83],{"class":82},[58,142914,86],{"class":75},[58,142916,1232],{"class":82},[58,142918,93],{"class":92},[58,142920,96],{"class":82},[58,142922,64623],{"class":82},[58,142924,102],{"class":75},[58,142926,142927,142929,142931,142933],{"class":60,"line":509},[58,142928,135606],{"class":82},[58,142930,86],{"class":75},[58,142932,63001],{"class":82},[58,142934,102],{"class":75},[58,142936,142937],{"class":60,"line":559},[58,142938,108],{"class":75},[114,142940,142942],{"id":142941},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22641,142944,142946],{"id":142945},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[175,142948,142949],{},"设置中心点",[119,142951],{"style":121,"src":142952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[175,142954,142955],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22641,142957,142959],{"id":142958},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[48,142961,142963],{"className":50,"code":142962,"language":52,"meta":53,"style":53},"\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",[55,142964,142965,142970,142976,142991,142996,143001],{"__ignoreMap":53},[58,142966,142967],{"class":60,"line":61},[58,142968,142969],{"class":64},"\u002F* 转换中心点 *\u002F\n",[58,142971,142972,142974],{"class":60,"line":68},[58,142973,72],{"class":71},[58,142975,76],{"class":75},[58,142977,142978,142981,142983,142985,142987,142989],{"class":60,"line":79},[58,142979,142980],{"class":82},"  transform-origin",[58,142982,86],{"class":75},[58,142984,52231],{"class":82},[58,142986,17787],{"class":82},[58,142988,131033],{"class":75},[58,142990,135704],{"class":64},[58,142992,142993],{"class":60,"line":105},[58,142994,142995],{"class":64},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[58,142997,142998],{"class":60,"line":627},[58,142999,143000],{"class":64},"  \u002F* transform-origin: left top; *\u002F\n",[58,143002,143003],{"class":60,"line":509},[58,143004,108],{"class":75},[22641,143006,143008],{"id":143007},"_18133-旋转案例","18.1.3.3 旋转案例",[119,143010],{"style":121,"src":143011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[48,143013,143014],{"className":50,"code":142834,"language":52,"meta":53,"style":53},[55,143015,143016,143022,143038],{"__ignoreMap":53},[58,143017,143018,143020],{"class":60,"line":61},[58,143019,72],{"class":71},[58,143021,76],{"class":75},[58,143023,143024,143026,143028,143030,143032,143034,143036],{"class":60,"line":68},[58,143025,137015],{"class":82},[58,143027,86],{"class":75},[58,143029,142851],{"class":82},[58,143031,793],{"class":75},[58,143033,1315],{"class":82},[58,143035,142858],{"class":92},[58,143037,3365],{"class":75},[58,143039,143040],{"class":60,"line":79},[58,143041,108],{"class":75},[114,143043,143045],{"id":143044},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22641,143047,143049],{"id":143048},"_18141-scale介绍","18.1.4.1 scale介绍",[175,143051,143052],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[119,143054],{"style":121,"src":143055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22641,143057,143059],{"id":143058},"_18142-分页按钮","18.1.4.2 分页按钮",[119,143061],{"style":121,"src":143062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[48,143064,143066],{"className":50,"code":143065,"language":52,"meta":53,"style":53},"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",[55,143067,143068,143074,143090,143094,143098,143103,143109,143123,143128],{"__ignoreMap":53},[58,143069,143070,143072],{"class":60,"line":61},[58,143071,72],{"class":71},[58,143073,76],{"class":75},[58,143075,143076,143078,143080,143083,143085,143088],{"class":60,"line":68},[58,143077,137015],{"class":82},[58,143079,86],{"class":75},[58,143081,143082],{"class":82},"scale",[58,143084,793],{"class":75},[58,143086,143087],{"class":82},"1.2",[58,143089,3365],{"class":75},[58,143091,143092],{"class":60,"line":79},[58,143093,108],{"class":75},[58,143095,143096],{"class":60,"line":105},[58,143097,136492],{"class":75},[58,143099,143100],{"class":60,"line":627},[58,143101,143102],{"class":64},"\u002F* 2D 缩放 *\u002F\n",[58,143104,143105,143107],{"class":60,"line":509},[58,143106,72],{"class":71},[58,143108,76],{"class":75},[58,143110,143111,143113,143115,143117,143119,143121],{"class":60,"line":559},[58,143112,137015],{"class":82},[58,143114,86],{"class":75},[58,143116,143082],{"class":82},[58,143118,793],{"class":75},[58,143120,143087],{"class":82},[58,143122,3365],{"class":75},[58,143124,143125],{"class":60,"line":654},[58,143126,143127],{"class":64},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[58,143129,143130],{"class":60,"line":671},[58,143131,108],{"class":75},[175,143133,143134],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[48,143136,143138],{"className":50,"code":143137,"language":52,"meta":53,"style":53},"\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",[55,143139,143140,143145,143155,143176,143197,143201,143206,143212,143239],{"__ignoreMap":53},[58,143141,143142],{"class":60,"line":61},[58,143143,143144],{"class":64},"\u002F* 定义动画 *\u002F\n",[58,143146,143147,143150,143153],{"class":60,"line":68},[58,143148,143149],{"class":92},"@keyframes",[58,143151,143152],{"class":5862}," move",[58,143154,76],{"class":75},[58,143156,143157,143160,143162,143164,143166,143169,143171,143173],{"class":60,"line":79},[58,143158,143159],{"class":379},"  0%",[58,143161,592],{"class":75},[58,143163,48778],{"class":82},[58,143165,86],{"class":75},[58,143167,143168],{"class":82},"translateX",[58,143170,793],{"class":75},[58,143172,979],{"class":82},[58,143174,143175],{"class":75},"); }\n",[58,143177,143178,143181,143183,143185,143187,143189,143191,143193,143195],{"class":60,"line":105},[58,143179,143180],{"class":379},"  100%",[58,143182,592],{"class":75},[58,143184,48778],{"class":82},[58,143186,86],{"class":75},[58,143188,143168],{"class":82},[58,143190,793],{"class":75},[58,143192,1097],{"class":82},[58,143194,93],{"class":92},[58,143196,143175],{"class":75},[58,143198,143199],{"class":60,"line":627},[58,143200,108],{"class":75},[58,143202,143203],{"class":60,"line":509},[58,143204,143205],{"class":64},"\u002F* 调用动画 *\u002F\n",[58,143207,143208,143210],{"class":60,"line":559},[58,143209,72],{"class":71},[58,143211,76],{"class":75},[58,143213,143214,143217,143219,143221,143223,143225,143227,143229,143231,143234,143237],{"class":60,"line":654},[58,143215,143216],{"class":82},"  animation",[58,143218,86],{"class":75},[58,143220,135717],{"class":82},[58,143222,25762],{"class":82},[58,143224,1481],{"class":92},[58,143226,79311],{"class":82},[58,143228,4739],{"class":82},[58,143230,1481],{"class":92},[58,143232,143233],{"class":82}," infinite",[58,143235,143236],{"class":82}," alternate",[58,143238,102],{"class":75},[58,143240,143241],{"class":60,"line":671},[58,143242,108],{"class":75},[175,143244,143134],{},[48,143246,143249],{"className":143247,"code":143248,"language":5833},[5831],"\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",[55,143250,143248],{"__ignoreMap":53},[22641,143252,143254],{"id":143253},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[175,143256,143257],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[119,143259],{"style":121,"src":143260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[48,143262,143263],{"className":50,"code":143137,"language":52,"meta":53,"style":53},[55,143264,143265,143269,143277,143295,143315,143319,143323,143329,143353],{"__ignoreMap":53},[58,143266,143267],{"class":60,"line":61},[58,143268,143144],{"class":64},[58,143270,143271,143273,143275],{"class":60,"line":68},[58,143272,143149],{"class":92},[58,143274,143152],{"class":5862},[58,143276,76],{"class":75},[58,143278,143279,143281,143283,143285,143287,143289,143291,143293],{"class":60,"line":79},[58,143280,143159],{"class":379},[58,143282,592],{"class":75},[58,143284,48778],{"class":82},[58,143286,86],{"class":75},[58,143288,143168],{"class":82},[58,143290,793],{"class":75},[58,143292,979],{"class":82},[58,143294,143175],{"class":75},[58,143296,143297,143299,143301,143303,143305,143307,143309,143311,143313],{"class":60,"line":105},[58,143298,143180],{"class":379},[58,143300,592],{"class":75},[58,143302,48778],{"class":82},[58,143304,86],{"class":75},[58,143306,143168],{"class":82},[58,143308,793],{"class":75},[58,143310,1097],{"class":82},[58,143312,93],{"class":92},[58,143314,143175],{"class":75},[58,143316,143317],{"class":60,"line":627},[58,143318,108],{"class":75},[58,143320,143321],{"class":60,"line":509},[58,143322,143205],{"class":64},[58,143324,143325,143327],{"class":60,"line":559},[58,143326,72],{"class":71},[58,143328,76],{"class":75},[58,143330,143331,143333,143335,143337,143339,143341,143343,143345,143347,143349,143351],{"class":60,"line":654},[58,143332,143216],{"class":82},[58,143334,86],{"class":75},[58,143336,135717],{"class":82},[58,143338,25762],{"class":82},[58,143340,1481],{"class":92},[58,143342,79311],{"class":82},[58,143344,4739],{"class":82},[58,143346,1481],{"class":92},[58,143348,143233],{"class":82},[58,143350,143236],{"class":82},[58,143352,102],{"class":75},[58,143354,143355],{"class":60,"line":671},[58,143356,108],{"class":75},[175,143358,143359],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[114,143361,143363],{"id":143362},"_1823-知识点回顾","18.2.3 知识点回顾",[48,143365,143366],{"className":50,"code":129344,"language":52,"meta":53,"style":53},[55,143367,143368,143374,143384],{"__ignoreMap":53},[58,143369,143370,143372],{"class":60,"line":61},[58,143371,72],{"class":71},[58,143373,76],{"class":75},[58,143375,143376,143378,143380,143382],{"class":60,"line":68},[58,143377,129357],{"class":82},[58,143379,86],{"class":75},[58,143381,62368],{"class":82},[58,143383,102],{"class":75},[58,143385,143386],{"class":60,"line":79},[58,143387,108],{"class":75},[14,143389,143391],{"id":143390},"_183-3d-转换","18.3 3D 转换",[175,143393,143394],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[114,143396,143398],{"id":143397},"_1831-坐标轴认识","18.3.1 坐标轴认识",[119,143400],{"style":121,"src":143401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[114,143403,143405],{"id":143404},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[119,143407],{"style":121,"src":143408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[175,143410,143411],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[175,143413,143414],{},"translate3d的效果需要搭配透视perspective来使用",[119,143416],{"style":121,"src":143417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[114,143419,143421],{"id":143420},"_1833-透视-perspective","18.3.3 透视 perspective",[119,143423],{"style":121,"src":143424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[175,143426,143427],{},"透视写在父盒子上，单位为像素",[114,143429,143431],{"id":143430},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22641,143433,143435],{"id":143434},"_18341-分开解释","18.3.4.1 分开解释",[119,143437],{"style":121,"src":143438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[119,143440],{"style":121,"src":143441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[119,143443],{"style":121,"src":143444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[175,143446,143447],{},"总结来说就是左手原则",[22641,143449,143451],{"id":143450},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[119,143453],{"style":121,"src":143454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[114,143456,143458],{"id":143457},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[119,143460],{"style":121,"src":143461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[119,143463],{"style":121,"src":143464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[48,143466,143468],{"className":50,"code":143467,"language":52,"meta":53,"style":53},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[55,143469,143470,143476,143489,143506],{"__ignoreMap":53},[58,143471,143472,143474],{"class":60,"line":61},[58,143473,72],{"class":71},[58,143475,76],{"class":75},[58,143477,143478,143481,143483,143485,143487],{"class":60,"line":68},[58,143479,143480],{"class":82},"  perspective",[58,143482,86],{"class":75},[58,143484,65706],{"class":82},[58,143486,93],{"class":92},[58,143488,102],{"class":75},[58,143490,143491,143493,143495,143498,143500,143502,143504],{"class":60,"line":79},[58,143492,137015],{"class":82},[58,143494,86],{"class":75},[58,143496,143497],{"class":82},"rotateX",[58,143499,793],{"class":75},[58,143501,1315],{"class":82},[58,143503,142858],{"class":92},[58,143505,3365],{"class":75},[58,143507,143508],{"class":60,"line":105},[58,143509,108],{"class":75},[114,143511,143513],{"id":143512},"_1836-案例","18.3.6 案例",[22641,143515,143517],{"id":143516},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[119,143519],{"style":121,"src":143520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[119,143522],{"style":121,"src":143523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[119,143525],{"style":121,"src":143526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[48,143528,143530],{"className":50,"code":143529,"language":52,"meta":53,"style":53},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[55,143531,143532,143537,143543,143555],{"__ignoreMap":53},[58,143533,143534],{"class":60,"line":61},[58,143535,143536],{"class":64},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[58,143538,143539,143541],{"class":60,"line":68},[58,143540,134028],{"class":379},[58,143542,76],{"class":75},[58,143544,143545,143547,143549,143551,143553],{"class":60,"line":79},[58,143546,143480],{"class":82},[58,143548,86],{"class":75},[58,143550,65706],{"class":82},[58,143552,93],{"class":92},[58,143554,102],{"class":75},[58,143556,143557],{"class":60,"line":105},[58,143558,108],{"class":75},[22641,143560,143562],{"id":143561},"_18362-3d导航栏","18.3.6.2 3D导航栏",[119,143564],{"style":121,"src":143565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[48,143567,143568],{"className":364,"code":131274,"language":366,"meta":53,"style":53},[55,143569,143570,143574,143588,143592],{"__ignoreMap":53},[58,143571,143572],{"class":60,"line":61},[58,143573,131281],{"class":64},[58,143575,143576,143578,143580,143582,143584,143586],{"class":60,"line":68},[58,143577,373],{"class":75},[58,143579,72],{"class":71},[58,143581,54124],{"class":379},[58,143583,383],{"class":75},[58,143585,131294],{"class":386},[58,143587,403],{"class":75},[58,143589,143590],{"class":60,"line":79},[58,143591,131301],{"class":75},[58,143593,143594,143596,143598],{"class":60,"line":105},[58,143595,52423],{"class":75},[58,143597,72],{"class":71},[58,143599,403],{"class":75},[22641,143601,143603],{"id":143602},"_18363-旋转木马","18.3.6.3 旋转木马",[119,143605],{"style":121,"src":143606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[48,143608,143609],{"className":50,"code":142834,"language":52,"meta":53,"style":53},[55,143610,143611,143617,143633],{"__ignoreMap":53},[58,143612,143613,143615],{"class":60,"line":61},[58,143614,72],{"class":71},[58,143616,76],{"class":75},[58,143618,143619,143621,143623,143625,143627,143629,143631],{"class":60,"line":68},[58,143620,137015],{"class":82},[58,143622,86],{"class":75},[58,143624,142851],{"class":82},[58,143626,793],{"class":75},[58,143628,1315],{"class":82},[58,143630,142858],{"class":92},[58,143632,3365],{"class":75},[58,143634,143635],{"class":60,"line":79},[58,143636,108],{"class":75},[702,143638,143639],{},"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":53,"searchDepth":68,"depth":68,"links":143641},[143642,143649],{"id":142737,"depth":68,"text":142738,"children":143643},[143644,143645,143646,143647,143648],{"id":142761,"depth":79,"text":142762},{"id":142816,"depth":79,"text":142817},{"id":142941,"depth":79,"text":142942},{"id":143044,"depth":79,"text":143045},{"id":143362,"depth":79,"text":143363},{"id":143390,"depth":68,"text":143391,"children":143650},[143651,143652,143653,143654,143655,143656],{"id":143397,"depth":79,"text":143398},{"id":143404,"depth":79,"text":143405},{"id":143420,"depth":79,"text":143421},{"id":143430,"depth":79,"text":143431},{"id":143457,"depth":79,"text":143458},{"id":143512,"depth":79,"text":143513},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142729,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143663,"title":143664,"body":143665,"description":717,"extension":718,"meta":143868,"navigation":720,"path":143869,"seo":143870,"stem":143871,"__hash__":143872},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143666,"toc":143857},[143667,143670,143674,143677,143680,143684,143687,143690,143693,143697,143700,143704,143707,143711,143714,143718,143732,143736,143761,143764,143767,143784,143788,143792,143795,143798,143802,143805,143808,143826,143830,143833,143847,143851,143854],[10,143668,143664],{"id":143669},"_19-移动端基础-前缀现状与视口",[14,143671,143673],{"id":143672},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[119,143675],{"style":121,"src":143676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[175,143678,143679],{},"意思就是加个前缀，增加兼容性",[14,143681,143683],{"id":143682},"_192-移动端现状认识","19.2 移动端现状认识",[119,143685],{"style":121,"src":143686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[175,143688,143689],{},"调试方法：",[119,143691],{"style":121,"src":143692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,143694,143696],{"id":143695},"_193-视口","19.3 视口",[175,143698,143699],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[114,143701,143703],{"id":143702},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[119,143705],{"style":121,"src":143706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[114,143708,143710],{"id":143709},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[119,143712],{"style":121,"src":143713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[114,143715,143717],{"id":143716},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[124,143719,143720,143723,143726,143729],{},[22,143721,143722],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[22,143724,143725],{},"理想视口，对设备来讲，是最理想的视口尺寸",[22,143727,143728],{},"需要手动添写meta视口标签通知浏览器操作",[22,143730,143731],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[114,143733,143735],{"id":143734},"_1934-meta视口标签","19.3.4 meta视口标签",[48,143737,143739],{"className":364,"code":143738,"language":366,"meta":53,"style":53},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[55,143740,143741],{"__ignoreMap":53},[58,143742,143743,143745,143747,143749,143751,143753,143755,143757,143759],{"class":60,"line":61},[58,143744,373],{"class":75},[58,143746,51986],{"class":71},[58,143748,15564],{"class":379},[58,143750,383],{"class":75},[58,143752,52033],{"class":386},[58,143754,52013],{"class":379},[58,143756,383],{"class":75},[58,143758,52040],{"class":386},[58,143760,403],{"class":75},[119,143762],{"style":121,"src":143763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[175,143765,143766],{},"标准视口设置：",[19,143768,143769,143772,143775,143778,143781],{},[22,143770,143771],{},"视口宽度和设备保持一致",[22,143773,143774],{},"视口的默认缩放比例1.0",[22,143776,143777],{},"不允许用户自行缩放",[22,143779,143780],{},"最大允许的缩放比例1.0",[22,143782,143783],{},"最小允许的缩放比例1.0",[114,143785,143787],{"id":143786},"_1935-二倍图","19.3.5 二倍图",[22641,143789,143791],{"id":143790},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[119,143793],{"style":121,"src":143794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[119,143796],{"style":121,"src":143797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22641,143799,143801],{"id":143800},"_19352-多倍图","19.3.5.2 多倍图",[119,143803],{"style":121,"src":143804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[175,143806,143807],{},"二倍图法，代码如下：",[48,143809,143811],{"className":50,"code":143810,"language":52,"meta":53,"style":53},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[55,143812,143813,143818],{"__ignoreMap":53},[58,143814,143815],{"class":60,"line":61},[58,143816,143817],{"class":64},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[58,143819,143820,143823],{"class":60,"line":68},[58,143821,143822],{"class":71},"background-size",[58,143824,143825],{"class":75},": 50% 50%;\n",[22641,143827,143829],{"id":143828},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[119,143831],{"style":121,"src":143832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[19,143834,143835,143838,143841,143844],{},[22,143836,143837],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[22,143839,143840],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[22,143842,143843],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[22,143845,143846],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22641,143848,143850],{"id":143849},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[119,143852],{"style":121,"src":143853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[702,143855,143856],{},"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":53,"searchDepth":68,"depth":68,"links":143858},[143859,143860,143861],{"id":143672,"depth":68,"text":143673},{"id":143682,"depth":68,"text":143683},{"id":143695,"depth":68,"text":143696,"children":143862},[143863,143864,143865,143866,143867],{"id":143702,"depth":79,"text":143703},{"id":143709,"depth":79,"text":143710},{"id":143716,"depth":79,"text":143717},{"id":143734,"depth":79,"text":143735},{"id":143786,"depth":79,"text":143787},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143664,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143874,"title":143875,"body":143876,"description":717,"extension":718,"meta":144753,"navigation":720,"path":144754,"seo":144755,"stem":144756,"__hash__":144757},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143877,"toc":144737},[143878,143881,143885,143892,143895,143902,143905,143910,143913,143917,143921,143928,143931,143934,143938,143941,143944,143947,143950,143953,143957,143960,143964,143966,143969,143972,143975,143978,143980,143983,143985,144015,144017,144047,144051,144054,144058,144061,144078,144081,144084,144160,144162,144165,144168,144171,144174,144176,144179,144182,144186,144208,144211,144214,144218,144221,144227,144230,144234,144237,144240,144244,144247,144250,144253,144257,144260,144263,144266,144269,144273,144276,144280,144287,144290,144293,144296,144299,144309,144312,144315,144322,144325,144329,144332,144335,144339,144342,144345,144348,144393,144396,144399,144402,144404,144533,144535,144573,144576,144579,144581,144699,144701,144735],[10,143879,143875],{"id":143880},"_20-移动端布局实战上篇",[14,143882,143884],{"id":143883},"_201-移动端主流方案","20.1 移动端主流方案",[19,143886,143887],{},[22,143888,143889],{},[25,143890,143891],{},"单独移动端页面（主流）",[119,143893],{"style":121,"src":143894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[19,143896,143897],{"start":68},[22,143898,143899],{},[25,143900,143901],{},"响应式兼容PC移动端",[119,143903],{"style":121,"src":143904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[19,143906,143907],{"start":79},[22,143908,143909],{},"两种页面选型布局方式",[119,143911],{"style":121,"src":143912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,143914,143916],{"id":143915},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[114,143918,143920],{"id":143919},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[175,143922,143923,143924],{},"官网地址： ",[376,143925,143926],{"href":143926,"rel":143927},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24508],[119,143929],{"style":121,"src":143930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[119,143932],{"style":121,"src":143933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[114,143935,143937],{"id":143936},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[119,143939],{"style":121,"src":143940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[119,143942],{"style":121,"src":143943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[175,143945,143946],{},"去除高亮：",[175,143948,143949],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[175,143951,143952],{},"-webkit- tap-highlight-color: transparent;",[14,143954,143956],{"id":143955},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[119,143958],{"style":121,"src":143959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,143961,143963],{"id":143962},"_204-流式布局案例","20.4 流式布局案例",[175,143965,822],{},[175,143967,143968],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[175,143970,143971],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[175,143973,143974],{},"图片格式：",[119,143976],{"style":121,"src":143977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[175,143979,136074],{},[119,143981],{"style":121,"src":143982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[175,143984,140401],{},[48,143986,143987],{"className":364,"code":134533,"language":366,"meta":53,"style":53},[55,143988,143989],{"__ignoreMap":53},[58,143990,143991,143993,143995,143997,143999,144001,144003,144005,144007,144009,144011,144013],{"class":60,"line":61},[58,143992,373],{"class":75},[58,143994,119],{"class":71},[58,143996,55873],{"class":379},[58,143998,383],{"class":75},[58,144000,134548],{"class":386},[58,144002,55881],{"class":379},[58,144004,383],{"class":75},[58,144006,134555],{"class":386},[58,144008,134558],{"class":379},[58,144010,383],{"class":75},[58,144012,134563],{"class":386},[58,144014,403],{"class":75},[175,144016,140490],{},[48,144018,144019],{"className":364,"code":134533,"language":366,"meta":53,"style":53},[55,144020,144021],{"__ignoreMap":53},[58,144022,144023,144025,144027,144029,144031,144033,144035,144037,144039,144041,144043,144045],{"class":60,"line":61},[58,144024,373],{"class":75},[58,144026,119],{"class":71},[58,144028,55873],{"class":379},[58,144030,383],{"class":75},[58,144032,134548],{"class":386},[58,144034,55881],{"class":379},[58,144036,383],{"class":75},[58,144038,134555],{"class":386},[58,144040,134558],{"class":379},[58,144042,383],{"class":75},[58,144044,134563],{"class":386},[58,144046,403],{"class":75},[14,144048,144050],{"id":144049},"_205-flex布局","20.5 flex布局",[119,144052],{"style":121,"src":144053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[114,144055,144057],{"id":144056},"_2051-布局原理","20.5.1 布局原理",[175,144059,144060],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[124,144062,144063,144066,144069,144072,144075],{},[22,144064,144065],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[22,144067,144068],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[22,144070,144071],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[22,144073,144074],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[22,144076,144077],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[175,144079,144080],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[175,144082,144083],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[48,144085,144087],{"className":50,"code":144086,"language":52,"meta":53,"style":53},"\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",[55,144088,144089,144094,144101,144111,144123,144134,144145,144156],{"__ignoreMap":53},[58,144090,144091],{"class":60,"line":61},[58,144092,144093],{"class":64},"\u002F* Flex 弹性布局 *\u002F\n",[58,144095,144096,144099],{"class":60,"line":68},[58,144097,144098],{"class":379},".container",[58,144100,76],{"class":75},[58,144102,144103,144105,144107,144109],{"class":60,"line":79},[58,144104,495],{"class":82},[58,144106,86],{"class":75},[58,144108,52118],{"class":82},[58,144110,102],{"class":75},[58,144112,144113,144116,144118,144121],{"class":60,"line":105},[58,144114,144115],{"class":82},"  flex-direction",[58,144117,86],{"class":75},[58,144119,144120],{"class":82},"row",[58,144122,102],{"class":75},[58,144124,144125,144128,144130,144132],{"class":60,"line":627},[58,144126,144127],{"class":82},"  justify-content",[58,144129,86],{"class":75},[58,144131,52306],{"class":82},[58,144133,102],{"class":75},[58,144135,144136,144139,144141,144143],{"class":60,"line":509},[58,144137,144138],{"class":82},"  align-items",[58,144140,86],{"class":75},[58,144142,52231],{"class":82},[58,144144,102],{"class":75},[58,144146,144147,144150,144152,144154],{"class":60,"line":559},[58,144148,144149],{"class":82},"  flex-wrap",[58,144151,86],{"class":75},[58,144153,79241],{"class":82},[58,144155,102],{"class":75},[58,144157,144158],{"class":60,"line":654},[58,144159,108],{"class":75},[175,144161,71085],{},[175,144163,144164],{},".form-item .male-label {",[175,144166,144167],{},"   margin-right: 20px;",[175,144169,144170],{},"   display: inline-flex;",[175,144172,144173],{},"   align-items: center;",[175,144175,1730],{},[119,144177],{"style":121,"src":144178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[119,144180],{"style":121,"src":144181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[114,144183,144185],{"id":144184},"_2052-常见父项属性","20.5.2 常见父项属性",[19,144187,144188,144191,144194,144197,144200,144203,144206],{},[22,144189,144190],{},"flex-direction：设置主轴的方向",[22,144192,144193],{},"justify-content：设置主轴上的子元素排列方式",[22,144195,144196],{},"flex-wrap：设置子元素是否换行",[22,144198,144199],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[22,144201,144202],{},"align-items：设置侧轴上的子元素排列方式（单行）",[22,144204,144205],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[22,144207,144190],{},[119,144209],{"style":121,"src":144210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[119,144212],{"style":121,"src":144213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[19,144215,144216],{"start":68},[22,144217,144193],{},[119,144219],{"style":121,"src":144220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[175,144222,144223,144226],{},[55,144224,144225],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[175,144228,144229],{},"跟着主轴走",[19,144231,144232],{"start":79},[22,144233,144196],{},[119,144235],{"style":121,"src":144236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[175,144238,144239],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[19,144241,144242],{"start":105},[22,144243,144199],{},[119,144245],{"style":121,"src":144246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[175,144248,144249],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[175,144251,144252],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[19,144254,144255],{"start":627},[22,144256,144202],{},[119,144258],{"style":121,"src":144259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[175,144261,144262],{},"align-items与align-content之间的区别：",[175,144264,144265],{},"单找items，多找content",[119,144267],{"style":121,"src":144268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[19,144270,144271],{"start":509},[22,144272,144205],{},[119,144274],{"style":121,"src":144275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[114,144277,144279],{"id":144278},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[19,144281,144282],{},[22,144283,144284],{},[25,144285,144286],{},"flex 属性",[175,144288,144289],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[119,144291],{"style":121,"src":144292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[175,144294,144295],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[175,144297,144298],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[19,144300,144301],{"start":68},[22,144302,144303,14439,144306],{},[25,144304,144305],{},"align-self",[25,144307,144308],{},"控制子项自己在侧轴上的排列方式",[119,144310],{"style":121,"src":144311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[175,144313,144314],{},"单个子盒子在父盒子侧轴上的排列方式",[19,144316,144317],{"start":79},[22,144318,144319,144321],{},[25,144320,95926],{}," 属性定义项目的排列顺序",[119,144323],{"style":121,"src":144324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[114,144326,144328],{"id":144327},"_2054-背景线性渐变","20.5.4 背景线性渐变",[119,144330],{"style":121,"src":144331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[175,144333,144334],{},"必须要添加浏览器的私有前缀",[114,144336,144338],{"id":144337},"_2055-携程网首页案例","20.5.5 携程网首页案例",[175,144340,144341],{},"学到最重要的知识：",[175,144343,144344],{},"flex处理这样的布局思路",[119,144346],{"style":121,"src":144347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[48,144349,144351],{"className":50,"code":144350,"language":52,"meta":53,"style":53},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[55,144352,144353,144359,144369,144379,144389],{"__ignoreMap":53},[58,144354,144355,144357],{"class":60,"line":61},[58,144356,144098],{"class":379},[58,144358,76],{"class":75},[58,144360,144361,144363,144365,144367],{"class":60,"line":68},[58,144362,495],{"class":82},[58,144364,86],{"class":75},[58,144366,52118],{"class":82},[58,144368,102],{"class":75},[58,144370,144371,144373,144375,144377],{"class":60,"line":79},[58,144372,144127],{"class":82},[58,144374,86],{"class":75},[58,144376,52231],{"class":82},[58,144378,102],{"class":75},[58,144380,144381,144383,144385,144387],{"class":60,"line":105},[58,144382,144138],{"class":82},[58,144384,86],{"class":75},[58,144386,52231],{"class":82},[58,144388,102],{"class":75},[58,144390,144391],{"class":60,"line":627},[58,144392,108],{"class":75},[175,144394,144395],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[175,144397,144398],{},"使用属性选择器",[119,144400],{"style":121,"src":144401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[175,144403,69521],{},[48,144405,144407],{"className":364,"code":144406,"language":366,"meta":53,"style":53},"\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",[55,144408,144409,144414,144428,144433,144453,144458,144477,144482,144501,144506,144525],{"__ignoreMap":53},[58,144410,144411],{"class":60,"line":61},[58,144412,144413],{"class":64},"\u003C!-- 携程网移动端案例结构 -->\n",[58,144415,144416,144418,144420,144422,144424,144426],{"class":60,"line":68},[58,144417,373],{"class":75},[58,144419,72],{"class":71},[58,144421,54124],{"class":379},[58,144423,383],{"class":75},[58,144425,92952],{"class":386},[58,144427,403],{"class":75},[58,144429,144430],{"class":60,"line":79},[58,144431,144432],{"class":64},"  \u003C!-- 搜索栏 -->\n",[58,144434,144435,144437,144439,144441,144443,144446,144449,144451],{"class":60,"line":105},[58,144436,52782],{"class":75},[58,144438,72],{"class":71},[58,144440,54124],{"class":379},[58,144442,383],{"class":75},[58,144444,144445],{"class":386},"\"search-index\"",[58,144447,144448],{"class":75},">...\u003C\u002F",[58,144450,72],{"class":71},[58,144452,403],{"class":75},[58,144454,144455],{"class":60,"line":627},[58,144456,144457],{"class":64},"  \u003C!-- 焦点图 -->\n",[58,144459,144460,144462,144464,144466,144468,144471,144473,144475],{"class":60,"line":509},[58,144461,52782],{"class":75},[58,144463,72],{"class":71},[58,144465,54124],{"class":379},[58,144467,383],{"class":75},[58,144469,144470],{"class":386},"\"focus\"",[58,144472,144448],{"class":75},[58,144474,72],{"class":71},[58,144476,403],{"class":75},[58,144478,144479],{"class":60,"line":559},[58,144480,144481],{"class":64},"  \u003C!-- 主导航 -->\n",[58,144483,144484,144486,144488,144490,144492,144495,144497,144499],{"class":60,"line":654},[58,144485,52782],{"class":75},[58,144487,72],{"class":71},[58,144489,54124],{"class":379},[58,144491,383],{"class":75},[58,144493,144494],{"class":386},"\"local-nav\"",[58,144496,144448],{"class":75},[58,144498,72],{"class":71},[58,144500,403],{"class":75},[58,144502,144503],{"class":60,"line":671},[58,144504,144505],{"class":64},"  \u003C!-- 子导航 -->\n",[58,144507,144508,144510,144512,144514,144516,144519,144521,144523],{"class":60,"line":677},[58,144509,52782],{"class":75},[58,144511,72],{"class":71},[58,144513,54124],{"class":379},[58,144515,383],{"class":75},[58,144517,144518],{"class":386},"\"nav-common\"",[58,144520,144448],{"class":75},[58,144522,72],{"class":71},[58,144524,403],{"class":75},[58,144526,144527,144529,144531],{"class":60,"line":2260},[58,144528,52423],{"class":75},[58,144530,72],{"class":71},[58,144532,403],{"class":75},[175,144534,71085],{},[48,144536,144537],{"className":50,"code":137483,"language":52,"meta":53,"style":53},[55,144538,144539,144553,144569],{"__ignoreMap":53},[58,144540,144541,144543,144545,144547,144549,144551],{"class":60,"line":61},[58,144542,54457],{"class":71},[58,144544,1675],{"class":75},[58,144546,103736],{"class":379},[58,144548,383],{"class":92},[58,144550,63331],{"class":386},[58,144552,137500],{"class":75},[58,144554,144555,144557,144559,144561,144563,144565,144567],{"class":60,"line":68},[58,144556,83],{"class":82},[58,144558,86],{"class":75},[58,144560,89],{"class":82},[58,144562,93],{"class":92},[58,144564,96],{"class":82},[58,144566,130750],{"class":82},[58,144568,102],{"class":75},[58,144570,144571],{"class":60,"line":79},[58,144572,108],{"class":75},[175,144574,144575],{},"总代码和效果展示：",[119,144577],{"style":121,"src":144578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[175,144580,69521],{},[48,144582,144583],{"className":364,"code":144406,"language":366,"meta":53,"style":53},[55,144584,144585,144589,144603,144607,144625,144629,144647,144651,144669,144673,144691],{"__ignoreMap":53},[58,144586,144587],{"class":60,"line":61},[58,144588,144413],{"class":64},[58,144590,144591,144593,144595,144597,144599,144601],{"class":60,"line":68},[58,144592,373],{"class":75},[58,144594,72],{"class":71},[58,144596,54124],{"class":379},[58,144598,383],{"class":75},[58,144600,92952],{"class":386},[58,144602,403],{"class":75},[58,144604,144605],{"class":60,"line":79},[58,144606,144432],{"class":64},[58,144608,144609,144611,144613,144615,144617,144619,144621,144623],{"class":60,"line":105},[58,144610,52782],{"class":75},[58,144612,72],{"class":71},[58,144614,54124],{"class":379},[58,144616,383],{"class":75},[58,144618,144445],{"class":386},[58,144620,144448],{"class":75},[58,144622,72],{"class":71},[58,144624,403],{"class":75},[58,144626,144627],{"class":60,"line":627},[58,144628,144457],{"class":64},[58,144630,144631,144633,144635,144637,144639,144641,144643,144645],{"class":60,"line":509},[58,144632,52782],{"class":75},[58,144634,72],{"class":71},[58,144636,54124],{"class":379},[58,144638,383],{"class":75},[58,144640,144470],{"class":386},[58,144642,144448],{"class":75},[58,144644,72],{"class":71},[58,144646,403],{"class":75},[58,144648,144649],{"class":60,"line":559},[58,144650,144481],{"class":64},[58,144652,144653,144655,144657,144659,144661,144663,144665,144667],{"class":60,"line":654},[58,144654,52782],{"class":75},[58,144656,72],{"class":71},[58,144658,54124],{"class":379},[58,144660,383],{"class":75},[58,144662,144494],{"class":386},[58,144664,144448],{"class":75},[58,144666,72],{"class":71},[58,144668,403],{"class":75},[58,144670,144671],{"class":60,"line":671},[58,144672,144505],{"class":64},[58,144674,144675,144677,144679,144681,144683,144685,144687,144689],{"class":60,"line":677},[58,144676,52782],{"class":75},[58,144678,72],{"class":71},[58,144680,54124],{"class":379},[58,144682,383],{"class":75},[58,144684,144518],{"class":386},[58,144686,144448],{"class":75},[58,144688,72],{"class":71},[58,144690,403],{"class":75},[58,144692,144693,144695,144697],{"class":60,"line":2260},[58,144694,52423],{"class":75},[58,144696,72],{"class":71},[58,144698,403],{"class":75},[175,144700,71085],{},[48,144702,144703],{"className":364,"code":131274,"language":366,"meta":53,"style":53},[55,144704,144705,144709,144723,144727],{"__ignoreMap":53},[58,144706,144707],{"class":60,"line":61},[58,144708,131281],{"class":64},[58,144710,144711,144713,144715,144717,144719,144721],{"class":60,"line":68},[58,144712,373],{"class":75},[58,144714,72],{"class":71},[58,144716,54124],{"class":379},[58,144718,383],{"class":75},[58,144720,131294],{"class":386},[58,144722,403],{"class":75},[58,144724,144725],{"class":60,"line":79},[58,144726,131301],{"class":75},[58,144728,144729,144731,144733],{"class":60,"line":105},[58,144730,52423],{"class":75},[58,144732,72],{"class":71},[58,144734,403],{"class":75},[702,144736,138432],{},{"title":53,"searchDepth":68,"depth":68,"links":144738},[144739,144740,144744,144745,144746],{"id":143883,"depth":68,"text":143884},{"id":143915,"depth":68,"text":143916,"children":144741},[144742,144743],{"id":143919,"depth":79,"text":143920},{"id":143936,"depth":79,"text":143937},{"id":143955,"depth":68,"text":143956},{"id":143962,"depth":68,"text":143963},{"id":144049,"depth":68,"text":144050,"children":144747},[144748,144749,144750,144751,144752],{"id":144056,"depth":79,"text":144057},{"id":144184,"depth":79,"text":144185},{"id":144278,"depth":79,"text":144279},{"id":144327,"depth":79,"text":144328},{"id":144337,"depth":79,"text":144338},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143875,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144759,"title":144760,"body":144761,"description":717,"extension":718,"meta":145988,"navigation":720,"path":145989,"seo":145990,"stem":145991,"__hash__":145992},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144762,"toc":145966},[144763,144766,144770,144774,144777,144780,144784,144789,144792,144795,144798,144801,144804,144861,144864,144869,144872,144875,144879,144890,144894,144897,144900,144907,144912,144916,144919,144925,144928,144932,144935,144942,144945,144948,144955,144958,144965,144968,144971,144978,144981,144984,144986,145003,145007,145010,145013,145016,145020,145023,145026,145029,145032,145035,145038,145040,145043,145046,145108,145111,145221,145228,145234,145237,145240,145244,145247,145251,145256,145259,145266,145269,145275,145280,145283,145286,145289,145292,145295,145298,145301,145304,145360,145362,145388,145392,145395,145398,145401,145409,145412,145415,145419,145475,145478,145482,145488,145499,145502,145507,145510,145513,145519,145522,145525,145528,145531,145534,145537,145540,145543,145568,145574,145577,145580,145583,145586,145589,145592,145597,145600,145603,145606,145614,145617,145624,145627,145630,145632,145656,145658,145661,145664,145667,145670,145673,145676,145679,145713,145716,145719,145753,145760,145763,145766,145769,145772,145775,145778,145785,145788,145791,145794,145797,145804,145807,145810,145817,145820,145823,145827,145830,145833,145836,145839,145842,145845,145848,145851,145853,145877,145879,145903,145907,145918,145921,145924,145927,145930,145933,145936,145939,145942,145945,145948,145951,145954,145957,145960,145963],[10,144764,144760],{"id":144765},"_21-移动端布局实战下篇",[14,144767,144769],{"id":144768},"_211-rem适配布局","21.1 rem适配布局",[114,144771,144773],{"id":144772},"_2111-rem单位","21.1.1 rem单位",[119,144775],{"style":121,"src":144776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[175,144778,144779],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[114,144781,144783],{"id":144782},"_2112-媒体查询","21.1.2 媒体查询",[19,144785,144786],{},[22,144787,144788],{},"参数介绍",[119,144790],{"style":121,"src":144791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[119,144793],{"style":121,"src":144794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[119,144796],{"style":121,"src":144797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[119,144799],{"style":121,"src":144800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[119,144802],{"style":121,"src":144803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[48,144805,144807],{"className":50,"code":144806,"language":52,"meta":53,"style":53},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[55,144808,144809,144814,144833,144840,144853,144857],{"__ignoreMap":53},[58,144810,144811],{"class":60,"line":61},[58,144812,144813],{"class":64},"\u002F* 媒体查询 *\u002F\n",[58,144815,144816,144819,144821,144824,144826,144829,144831],{"class":60,"line":68},[58,144817,144818],{"class":92},"@media",[58,144820,2305],{"class":75},[58,144822,144823],{"class":82},"max-width",[58,144825,86],{"class":75},[58,144827,144828],{"class":82},"768",[58,144830,93],{"class":92},[58,144832,13086],{"class":75},[58,144834,144835,144838],{"class":60,"line":79},[58,144836,144837],{"class":379},"  .container",[58,144839,76],{"class":75},[58,144841,144842,144845,144847,144849,144851],{"class":60,"line":105},[58,144843,144844],{"class":82},"    width",[58,144846,86],{"class":75},[58,144848,1097],{"class":82},[58,144850,1114],{"class":92},[58,144852,102],{"class":75},[58,144854,144855],{"class":60,"line":627},[58,144856,127972],{"class":75},[58,144858,144859],{"class":60,"line":509},[58,144860,108],{"class":75},[175,144862,144863],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[19,144865,144866],{"start":68},[22,144867,144868],{},"引入资源",[119,144870],{"style":121,"src":144871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[175,144873,144874],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[114,144876,144878],{"id":144877},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[124,144880,144881,144884,144887],{},[22,144882,144883],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[22,144885,144886],{},"媒体查询可以根据不同设备宽度来修改样式",[22,144888,144889],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,144891,144893],{"id":144892},"_212-less基础","21.2 Less基础",[175,144895,144896],{},"css冗余度较高，不利于复用，没有很好的计算能力",[175,144898,144899],{},"Less可以解决该问题，它是css的扩展语言",[175,144901,144902,144903],{},"Less中文网址： ",[376,144904,144905],{"href":144905,"rel":144906},"http:\u002F\u002Flesscss.cn\u002F",[24508],[175,144908,144909],{},[25,144910,144911],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[114,144913,144915],{"id":144914},"_2121-less安装","21.2.1 less安装",[175,144917,144918],{},"如果使用vscode，则无需进行下方安装步骤",[175,144920,144921],{},[376,144922,144923],{"href":144923,"rel":144924},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24508],[119,144926],{"style":121,"src":144927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[114,144929,144931],{"id":144930},"_2122-less使用","21.2.2 less使用",[175,144933,144934],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[19,144936,144937],{},[22,144938,144939],{},[25,144940,144941],{},"Less 变量",[119,144943],{"style":121,"src":144944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[119,144946],{"style":121,"src":144947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[19,144949,144950],{"start":68},[22,144951,144952],{},[25,144953,144954],{},"Less 编译",[119,144956],{"style":121,"src":144957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[19,144959,144960],{"start":79},[22,144961,144962],{},[25,144963,144964],{},"Less 嵌套",[119,144966],{"style":121,"src":144967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[119,144969],{"style":121,"src":144970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[19,144972,144973],{"start":105},[22,144974,144975],{},[25,144976,144977],{},"Less 运算",[119,144979],{"style":121,"src":144980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[175,144982,144983],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[175,144985,822],{},[124,144987,144988,144991,144994,144997,145000],{},[22,144989,144990],{},"乘号（*）和除号（\u002F）的写法",[22,144992,144993],{},"运算符中间左右有个空格隔开 1px + 5",[22,144995,144996],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[22,144998,144999],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[22,145001,145002],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145004,145006],{"id":145005},"_213-rem-适配方案","21.3 rem 适配方案",[175,145008,145009],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[175,145011,145012],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[119,145014],{"style":121,"src":145015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[114,145017,145019],{"id":145018},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[175,145021,145022],{},"rem + 媒体查询 + less 技术",[119,145024],{"style":121,"src":145025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[175,145027,145028],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[175,145030,145031],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[119,145033],{"style":121,"src":145034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[175,145036,145037],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[175,145039,15277],{},[119,145041],{"style":121,"src":145042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[175,145044,145045],{},"index.html:",[48,145047,145049],{"className":50,"code":145048,"language":52,"meta":53,"style":53},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[55,145050,145051,145056,145062,145078,145082,145088,145104],{"__ignoreMap":53},[58,145052,145053],{"class":60,"line":61},[58,145054,145055],{"class":64},"\u002F* rem 适配方案 *\u002F\n",[58,145057,145058,145060],{"class":60,"line":68},[58,145059,51279],{"class":71},[58,145061,76],{"class":75},[58,145063,145064,145066,145068,145071,145073,145075],{"class":60,"line":79},[58,145065,71258],{"class":82},[58,145067,86],{"class":75},[58,145069,145070],{"class":82},"62.5",[58,145072,1114],{"class":92},[58,145074,131033],{"class":75},[58,145076,145077],{"class":64},"\u002F* 1rem = 10px *\u002F\n",[58,145079,145080],{"class":60,"line":105},[58,145081,108],{"class":75},[58,145083,145084,145086],{"class":60,"line":627},[58,145085,131018],{"class":379},[58,145087,76],{"class":75},[58,145089,145090,145092,145094,145096,145099,145101],{"class":60,"line":509},[58,145091,71200],{"class":82},[58,145093,86],{"class":75},[58,145095,1232],{"class":82},[58,145097,145098],{"class":92},"rem",[58,145100,131033],{"class":75},[58,145102,145103],{"class":64},"\u002F* 100px *\u002F\n",[58,145105,145106],{"class":60,"line":559},[58,145107,108],{"class":75},[175,145109,145110],{},"common.less",[48,145112,145114],{"className":50,"code":145113,"language":52,"meta":53,"style":53},"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",[55,145115,145116,145122,145137,145141,145147,145161,145165,145169,145173,145179,145193,145197,145203,145217],{"__ignoreMap":53},[58,145117,145118,145120],{"class":60,"line":61},[58,145119,51279],{"class":71},[58,145121,76],{"class":75},[58,145123,145124,145126,145128,145130,145132,145134],{"class":60,"line":68},[58,145125,71258],{"class":82},[58,145127,86],{"class":75},[58,145129,145070],{"class":82},[58,145131,1114],{"class":92},[58,145133,26711],{"class":75},[58,145135,145136],{"class":64},"\u002F* 10px *\u002F\n",[58,145138,145139],{"class":60,"line":79},[58,145140,108],{"class":75},[58,145142,145143,145145],{"class":60,"line":105},[58,145144,72],{"class":71},[58,145146,76],{"class":75},[58,145148,145149,145151,145153,145155,145157,145159],{"class":60,"line":627},[58,145150,71200],{"class":82},[58,145152,86],{"class":75},[58,145154,1232],{"class":82},[58,145156,145098],{"class":92},[58,145158,26711],{"class":75},[58,145160,145103],{"class":64},[58,145162,145163],{"class":60,"line":509},[58,145164,108],{"class":75},[58,145166,145167],{"class":60,"line":559},[58,145168,136492],{"class":75},[58,145170,145171],{"class":60,"line":654},[58,145172,145055],{"class":64},[58,145174,145175,145177],{"class":60,"line":671},[58,145176,51279],{"class":71},[58,145178,76],{"class":75},[58,145180,145181,145183,145185,145187,145189,145191],{"class":60,"line":677},[58,145182,71258],{"class":82},[58,145184,86],{"class":75},[58,145186,145070],{"class":82},[58,145188,1114],{"class":92},[58,145190,131033],{"class":75},[58,145192,145077],{"class":64},[58,145194,145195],{"class":60,"line":2260},[58,145196,108],{"class":75},[58,145198,145199,145201],{"class":60,"line":694},[58,145200,131018],{"class":379},[58,145202,76],{"class":75},[58,145204,145205,145207,145209,145211,145213,145215],{"class":60,"line":2270},[58,145206,71200],{"class":82},[58,145208,86],{"class":75},[58,145210,1232],{"class":82},[58,145212,145098],{"class":92},[58,145214,131033],{"class":75},[58,145216,145103],{"class":64},[58,145218,145219],{"class":60,"line":2275},[58,145220,108],{"class":75},[175,145222,145223,145224,145227],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24196,145225,145226],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[48,145229,145232],{"className":145230,"code":145231,"language":5833},[5831],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[55,145233,145231],{"__ignoreMap":53},[175,145235,145236],{},"less保存时会自动变成.css文件",[175,145238,145239],{},"好好搞懂上述代码写法",[114,145241,145243],{"id":145242},"_2132-样式导入样式","21.3.2 样式导入样式",[119,145245],{"style":121,"src":145246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[114,145248,145250],{"id":145249},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[19,145252,145253],{},[22,145254,145255],{},"准备工作",[119,145257],{"style":121,"src":145258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[175,145260,145261,145262],{},"github地址：",[376,145263,145264],{"href":145264,"rel":145265},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24508],[175,145267,145268],{},"下载之后，将index.js文件拖到项目中就可以了",[175,145270,145271,145272],{},"js文件引入到index.html中使用的是",[55,145273,145274],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[19,145276,145277],{"start":68},[22,145278,145279],{},"vscode插件",[119,145281],{"style":121,"src":145282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[175,145284,145285],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[175,145287,145288],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[119,145290],{"style":121,"src":145291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[175,145293,145294],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[119,145296],{"style":121,"src":145297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[175,145299,145300],{},"修改成75就可以，alt+z为快捷键",[175,145302,145303],{},"index.css：",[48,145305,145306],{"className":50,"code":145048,"language":52,"meta":53,"style":53},[55,145307,145308,145312,145318,145332,145336,145342,145356],{"__ignoreMap":53},[58,145309,145310],{"class":60,"line":61},[58,145311,145055],{"class":64},[58,145313,145314,145316],{"class":60,"line":68},[58,145315,51279],{"class":71},[58,145317,76],{"class":75},[58,145319,145320,145322,145324,145326,145328,145330],{"class":60,"line":79},[58,145321,71258],{"class":82},[58,145323,86],{"class":75},[58,145325,145070],{"class":82},[58,145327,1114],{"class":92},[58,145329,131033],{"class":75},[58,145331,145077],{"class":64},[58,145333,145334],{"class":60,"line":105},[58,145335,108],{"class":75},[58,145337,145338,145340],{"class":60,"line":627},[58,145339,131018],{"class":379},[58,145341,76],{"class":75},[58,145343,145344,145346,145348,145350,145352,145354],{"class":60,"line":509},[58,145345,71200],{"class":82},[58,145347,86],{"class":75},[58,145349,1232],{"class":82},[58,145351,145098],{"class":92},[58,145353,131033],{"class":75},[58,145355,145103],{"class":64},[58,145357,145358],{"class":60,"line":559},[58,145359,108],{"class":75},[175,145361,145045],{},[48,145363,145364],{"className":50,"code":127582,"language":52,"meta":53,"style":53},[55,145365,145366,145372,145384],{"__ignoreMap":53},[58,145367,145368,145370],{"class":60,"line":61},[58,145369,52438],{"class":71},[58,145371,76],{"class":75},[58,145373,145374,145376,145378,145380,145382],{"class":60,"line":68},[58,145375,71258],{"class":82},[58,145377,86],{"class":75},[58,145379,1387],{"class":82},[58,145381,93],{"class":92},[58,145383,102],{"class":75},[58,145385,145386],{"class":60,"line":79},[58,145387,108],{"class":75},[14,145389,145391],{"id":145390},"_214-响应式开发","21.4 响应式开发",[175,145393,145394],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[119,145396],{"style":121,"src":145397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[175,145399,145400],{},"做法：",[124,145402,145403,145406],{},[22,145404,145405],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[22,145407,145408],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[119,145410],{"style":121,"src":145411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[175,145413,145414],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[114,145416,145418],{"id":145417},"_2141-简单代码示范","21.4.1 简单代码示范",[48,145420,145421],{"className":50,"code":145048,"language":52,"meta":53,"style":53},[55,145422,145423,145427,145433,145447,145451,145457,145471],{"__ignoreMap":53},[58,145424,145425],{"class":60,"line":61},[58,145426,145055],{"class":64},[58,145428,145429,145431],{"class":60,"line":68},[58,145430,51279],{"class":71},[58,145432,76],{"class":75},[58,145434,145435,145437,145439,145441,145443,145445],{"class":60,"line":79},[58,145436,71258],{"class":82},[58,145438,86],{"class":75},[58,145440,145070],{"class":82},[58,145442,1114],{"class":92},[58,145444,131033],{"class":75},[58,145446,145077],{"class":64},[58,145448,145449],{"class":60,"line":105},[58,145450,108],{"class":75},[58,145452,145453,145455],{"class":60,"line":627},[58,145454,131018],{"class":379},[58,145456,76],{"class":75},[58,145458,145459,145461,145463,145465,145467,145469],{"class":60,"line":509},[58,145460,71200],{"class":82},[58,145462,86],{"class":75},[58,145464,1232],{"class":82},[58,145466,145098],{"class":92},[58,145468,131033],{"class":75},[58,145470,145103],{"class":64},[58,145472,145473],{"class":60,"line":559},[58,145474,108],{"class":75},[175,145476,145477],{},"父盒子一般命名为container",[114,145479,145481],{"id":145480},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[175,145483,145484,145485],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[25,145486,145487],{},"使得 Web 开发更加快捷",[124,145489,145490],{},[22,145491,145492,145493],{},"官网：",[25,145494,145495],{},[376,145496,145497],{"href":145497,"rel":145498},"http:\u002F\u002Fgetbootstrap.com\u002F",[24508],[175,145500,145501],{},"可以直接去官网拿现成的东西",[19,145503,145504],{},[22,145505,145506],{},"Bootstrap的使用",[175,145508,145509],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[175,145511,145512],{},"Bootstrap 使用四步曲：",[175,145514,145515,145518],{},[25,145516,145517],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[119,145520],{"style":121,"src":145521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[175,145523,145524],{},"打开Bootstrap官网，然后下载",[119,145526],{"style":121,"src":145527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[119,145529],{"style":121,"src":145530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[175,145532,145533],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[175,145535,145536],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[175,145538,145539],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[119,145541],{"style":121,"src":145542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[48,145544,145546],{"className":50,"code":145545,"language":52,"meta":53,"style":53},".center {\n  color: red;\n}\n",[55,145547,145548,145554,145564],{"__ignoreMap":53},[58,145549,145550,145552],{"class":60,"line":61},[58,145551,127469],{"class":379},[58,145553,76],{"class":75},[58,145555,145556,145558,145560,145562],{"class":60,"line":68},[58,145557,71536],{"class":82},[58,145559,86],{"class":75},[58,145561,58055],{"class":82},[58,145563,102],{"class":75},[58,145565,145566],{"class":60,"line":79},[58,145567,108],{"class":75},[175,145569,145570,145573],{},[55,145571,145572],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[119,145575],{"style":121,"src":145576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[119,145578],{"style":121,"src":145579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[119,145581],{"style":121,"src":145582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[175,145584,145585],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[119,145587],{"style":121,"src":145588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[175,145590,145591],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[19,145593,145594],{"start":68},[22,145595,145596],{},"布局容器",[119,145598],{"style":121,"src":145599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[175,145601,145602],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[175,145604,145605],{},"container-fluid用于移动式布局比较方便",[19,145607,145608],{"start":79},[22,145609,145610,145611],{},"bootstrap ",[25,145612,145613],{},"栅格系统原理",[119,145615],{"style":121,"src":145616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[19,145618,145619],{"start":105},[22,145620,145621],{},[25,145622,145623],{},"栅格选项参数",[119,145625],{"style":121,"src":145626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[175,145628,145629],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[175,145631,15277],{},[48,145633,145634],{"className":50,"code":145545,"language":52,"meta":53,"style":53},[55,145635,145636,145642,145652],{"__ignoreMap":53},[58,145637,145638,145640],{"class":60,"line":61},[58,145639,127469],{"class":379},[58,145641,76],{"class":75},[58,145643,145644,145646,145648,145650],{"class":60,"line":68},[58,145645,71536],{"class":82},[58,145647,86],{"class":75},[58,145649,58055],{"class":82},[58,145651,102],{"class":75},[58,145653,145654],{"class":60,"line":79},[58,145655,108],{"class":75},[175,145657,136074],{},[119,145659],{"style":121,"src":145660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[175,145662,145663],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[175,145665,145666],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[175,145668,145669],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[175,145671,145672],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[175,145674,145675],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[175,145677,145678],{},"汇总展示说明：",[48,145680,145681],{"className":364,"code":131274,"language":366,"meta":53,"style":53},[55,145682,145683,145687,145701,145705],{"__ignoreMap":53},[58,145684,145685],{"class":60,"line":61},[58,145686,131281],{"class":64},[58,145688,145689,145691,145693,145695,145697,145699],{"class":60,"line":68},[58,145690,373],{"class":75},[58,145692,72],{"class":71},[58,145694,54124],{"class":379},[58,145696,383],{"class":75},[58,145698,131294],{"class":386},[58,145700,403],{"class":75},[58,145702,145703],{"class":60,"line":79},[58,145704,131301],{"class":75},[58,145706,145707,145709,145711],{"class":60,"line":105},[58,145708,52423],{"class":75},[58,145710,72],{"class":71},[58,145712,403],{"class":75},[119,145714],{"style":121,"src":145715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[175,145717,145718],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[48,145720,145721],{"className":364,"code":131274,"language":366,"meta":53,"style":53},[55,145722,145723,145727,145741,145745],{"__ignoreMap":53},[58,145724,145725],{"class":60,"line":61},[58,145726,131281],{"class":64},[58,145728,145729,145731,145733,145735,145737,145739],{"class":60,"line":68},[58,145730,373],{"class":75},[58,145732,72],{"class":71},[58,145734,54124],{"class":379},[58,145736,383],{"class":75},[58,145738,131294],{"class":386},[58,145740,403],{"class":75},[58,145742,145743],{"class":60,"line":79},[58,145744,131301],{"class":75},[58,145746,145747,145749,145751],{"class":60,"line":105},[58,145748,52423],{"class":75},[58,145750,72],{"class":71},[58,145752,403],{"class":75},[19,145754,145755],{"start":627},[22,145756,145757],{},[25,145758,145759],{},"列嵌套",[119,145761],{"style":121,"src":145762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[175,145764,145765],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[175,145767,145768],{},"没加row内部这样：",[119,145770],{"style":121,"src":145771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[175,145773,145774],{},"加上row之后内部为：",[119,145776],{"style":121,"src":145777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[19,145779,145780],{"start":509},[22,145781,145782],{},[25,145783,145784],{},"列偏移",[119,145786],{"style":121,"src":145787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[175,145789,145790],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[175,145792,145793],{},"要加偏移量，即偏移份数",[175,145795,145796],{},"偏移的份数=12-两个盒子的份数",[19,145798,145799],{"start":559},[22,145800,145801],{},[25,145802,145803],{},"列排序",[119,145805],{"style":121,"src":145806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[175,145808,145809],{},"pull拉左；push推右",[19,145811,145812],{"start":654},[22,145813,145814],{},[25,145815,145816],{},"响应式工具",[119,145818],{"style":121,"src":145819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[175,145821,145822],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[114,145824,145826],{"id":145825},"_2143-响应式小项目","21.4.3 响应式小项目",[175,145828,145829],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[175,145831,145832],{},"ul {",[175,145834,145835],{},"list-style: none;",[175,145837,145838],{},"margin:0;",[175,145840,145841],{},"padding:0; }",[119,145843],{"style":121,"src":145844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[119,145846],{"style":121,"src":145847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[175,145849,145850],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[175,145852,69521],{},[48,145854,145855],{"className":50,"code":139701,"language":52,"meta":53,"style":53},[55,145856,145857,145863,145873],{"__ignoreMap":53},[58,145858,145859,145861],{"class":60,"line":61},[58,145860,131018],{"class":379},[58,145862,76],{"class":75},[58,145864,145865,145867,145869,145871],{"class":60,"line":68},[58,145866,131650],{"class":82},[58,145868,86],{"class":75},[58,145870,24379],{"class":82},[58,145872,102],{"class":75},[58,145874,145875],{"class":60,"line":79},[58,145876,108],{"class":75},[175,145878,71085],{},[48,145880,145881],{"className":50,"code":139701,"language":52,"meta":53,"style":53},[55,145882,145883,145889,145899],{"__ignoreMap":53},[58,145884,145885,145887],{"class":60,"line":61},[58,145886,131018],{"class":379},[58,145888,76],{"class":75},[58,145890,145891,145893,145895,145897],{"class":60,"line":68},[58,145892,131650],{"class":82},[58,145894,86],{"class":75},[58,145896,24379],{"class":82},[58,145898,102],{"class":75},[58,145900,145901],{"class":60,"line":79},[58,145902,108],{"class":75},[14,145904,145906],{"id":145905},"_215-swiper-插件使用","21.5 swiper 插件使用",[124,145908,145909,145912,145915],{},[22,145910,145911],{},"下载需要的css和js文件html页面中 引入相关文件",[22,145913,145914],{},"官网找到类似案例，复制html结构，css样式 js 语法",[22,145916,145917],{},"根据需求定制修改模块",[119,145919],{"style":121,"src":145920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[175,145922,145923],{},"解压后将这两部分放到项目中",[119,145925],{"style":121,"src":145926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[175,145928,145929],{},"这个插件可以帮助我们实现轮播图效果",[175,145931,145932],{},"用法：",[119,145934],{"style":121,"src":145935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[175,145937,145938],{},"找到自己喜欢的",[119,145940],{"style":121,"src":145941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[175,145943,145944],{},"右键，查看网页源代码",[119,145946],{"style":121,"src":145947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[175,145949,145950],{},"复制人家的结构内容",[175,145952,145953],{},"然后去看API文档：",[119,145955],{"style":121,"src":145956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[175,145958,145959],{},"可以看看如何修改样式",[175,145961,145962],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[702,145964,145965],{},"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":53,"searchDepth":68,"depth":68,"links":145967},[145968,145973,145977,145982,145987],{"id":144768,"depth":68,"text":144769,"children":145969},[145970,145971,145972],{"id":144772,"depth":79,"text":144773},{"id":144782,"depth":79,"text":144783},{"id":144877,"depth":79,"text":144878},{"id":144892,"depth":68,"text":144893,"children":145974},[145975,145976],{"id":144914,"depth":79,"text":144915},{"id":144930,"depth":79,"text":144931},{"id":145005,"depth":68,"text":145006,"children":145978},[145979,145980,145981],{"id":145018,"depth":79,"text":145019},{"id":145242,"depth":79,"text":145243},{"id":145249,"depth":79,"text":145250},{"id":145390,"depth":68,"text":145391,"children":145983},[145984,145985,145986],{"id":145417,"depth":79,"text":145418},{"id":145480,"depth":79,"text":145481},{"id":145825,"depth":79,"text":145826},{"id":145905,"depth":68,"text":145906},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144760,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145994,"title":145995,"body":145996,"description":717,"extension":718,"meta":146216,"navigation":720,"path":146217,"seo":146218,"stem":146219,"__hash__":146220},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145997,"toc":146212},[145998,146001,146005,146008,146023,146028,146031,146036,146071,146076,146088,146093,146106,146111,146128,146133,146153,146158,146176,146179,146182,146185,146188,146192,146195,146198,146201,146204,146207,146210],[10,145999,145995],{"id":146000},"_22-代码提交与新型相对单位",[14,146002,146004],{"id":146003},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[175,146006,146007],{},"法1：",[19,146009,146010,146017,146020],{},[22,146011,146012,146013],{},"登录网站注册：",[376,146014,146015],{"href":146015,"rel":146016},"https:\u002F\u002Fgitee.com\u002F",[24508],[22,146018,146019],{},"码云创建新的仓库",[22,146021,146022],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[124,146024,146025],{},[22,146026,146027],{},"在网站根目录右键-- Git Bash Here",[119,146029],{"style":121,"src":146030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[124,146032,146033],{},[22,146034,146035],{},"如果是第一次利用git提交，请配置好全局选项",[48,146037,146039],{"className":117925,"code":146038,"language":117927,"meta":53,"style":53},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[55,146040,146041,146057],{"__ignoreMap":53},[58,146042,146043,146046,146048,146051,146054],{"class":60,"line":61},[58,146044,146045],{"class":379},"git",[58,146047,120348],{"class":386},[58,146049,146050],{"class":82}," --global",[58,146052,146053],{"class":386}," user.name",[58,146055,146056],{"class":386}," \"你的名字\"\n",[58,146058,146059,146061,146063,146065,146068],{"class":60,"line":68},[58,146060,146045],{"class":379},[58,146062,120348],{"class":386},[58,146064,146050],{"class":82},[58,146066,146067],{"class":386}," user.email",[58,146069,146070],{"class":386}," \"你的邮箱\"\n",[124,146072,146073],{},[22,146074,146075],{},"初始化仓库",[48,146077,146079],{"className":117925,"code":146078,"language":117927,"meta":53,"style":53},"git init\n",[55,146080,146081],{"__ignoreMap":53},[58,146082,146083,146085],{"class":60,"line":61},[58,146084,146045],{"class":379},[58,146086,146087],{"class":386}," init\n",[124,146089,146090],{},[22,146091,146092],{},"把本地文件放到暂存区",[48,146094,146096],{"className":117925,"code":146095,"language":117927,"meta":53,"style":53},"git add .\n",[55,146097,146098],{"__ignoreMap":53},[58,146099,146100,146102,146104],{"class":60,"line":61},[58,146101,146045],{"class":379},[58,146103,5855],{"class":386},[58,146105,29385],{"class":386},[124,146107,146108],{},[22,146109,146110],{},"把本地文件放到本地仓库里面",[48,146112,146114],{"className":117925,"code":146113,"language":117927,"meta":53,"style":53},"git commit -m \"first commit\"\n",[55,146115,146116],{"__ignoreMap":53},[58,146117,146118,146120,146123,146125],{"class":60,"line":61},[58,146119,146045],{"class":379},[58,146121,146122],{"class":386}," commit",[58,146124,101511],{"class":82},[58,146126,146127],{"class":386}," \"first commit\"\n",[124,146129,146130],{},[22,146131,146132],{},"链接远程仓库",[48,146134,146136],{"className":117925,"code":146135,"language":117927,"meta":53,"style":53},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[55,146137,146138],{"__ignoreMap":53},[58,146139,146140,146142,146145,146147,146150],{"class":60,"line":61},[58,146141,146045],{"class":379},[58,146143,146144],{"class":386}," remote",[58,146146,5855],{"class":386},[58,146148,146149],{"class":386}," origin",[58,146151,146152],{"class":386}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[124,146154,146155],{},[22,146156,146157],{},"把本地仓库的文件推送到远程仓库 push",[48,146159,146161],{"className":117925,"code":146160,"language":117927,"meta":53,"style":53},"git push -u origin master\n",[55,146162,146163],{"__ignoreMap":53},[58,146164,146165,146167,146169,146171,146173],{"class":60,"line":61},[58,146166,146045],{"class":379},[58,146168,29660],{"class":386},[58,146170,28934],{"class":82},[58,146172,146149],{"class":386},[58,146174,146175],{"class":386}," master\n",[119,146177],{"style":121,"src":146178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[175,146180,146181],{},"上方方法暂未实现，后边学完git后在整",[175,146183,146184],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[119,146186],{"style":121,"src":146187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,146189,146191],{"id":146190},"_222-新型相对单位","22.2 新型相对单位",[119,146193],{"style":121,"src":146194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[119,146196],{"style":121,"src":146197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[175,146199,146200],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[175,146202,146203],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[119,146205],{"style":121,"src":146206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[175,146208,146209],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[702,146211,24601],{},{"title":53,"searchDepth":68,"depth":68,"links":146213},[146214,146215],{"id":146003,"depth":68,"text":146004},{"id":146190,"depth":68,"text":146191},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145995,"description":717},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146222,"title":146223,"body":146224,"description":146228,"extension":718,"meta":146229,"navigation":720,"path":146230,"seo":146231,"stem":146232,"__hash__":146233},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146225,"toc":146226},[],{"title":53,"searchDepth":68,"depth":68,"links":146227},[],"自己正经开始学编程的第一门语言！",{"category":93468},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146223,"description":146228},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146235,"title":146236,"body":146237,"description":717,"extension":718,"meta":147384,"navigation":720,"path":147385,"seo":147386,"stem":147387,"__hash__":147388},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146238,"toc":147360},[146239,146242,146246,146249,146252,146277,146280,146286,146290,146293,146320,146323,146363,146366,146378,146381,146387,146391,146395,146422,146439,146446,146450,146453,146479,146482,146486,146489,146529,146532,146549,146555,146559,146564,146608,146611,146629,146632,146700,146704,146711,146714,146729,146732,146741,146744,146755,146758,146767,146770,146787,146790,146805,146809,146813,146816,146818,146838,146842,146845,146848,146859,146862,146868,146872,146878,146905,146908,146920,146923,146934,146937,146943,146947,146953,147003,147006,147048,147051,147084,147087,147121,147125,147128,147148,147151,147187,147190,147203,147207,147211,147217,147220,147233,147237,147240,147246,147249,147253,147256,147259,147308,147312,147328,147334,147341,147347,147357],[10,146240,146236],{"id":146241},"_1-python环境与第一个程序",[14,146243,146245],{"id":146244},"_11-什么是python","1.1 什么是Python",[175,146247,146248],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[175,146250,146251],{},"理解 Python 时抓住三个关键词：",[19,146253,146254,146257,146260],{},[22,146255,146256],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[22,146258,146259],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[22,146261,146262,146263,1000,146266,1000,146269,1000,146272,1000,146274,29029],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[55,146264,146265],{},"os",[55,146267,146268],{},"sys",[55,146270,146271],{},"json",[55,146273,58494],{},[55,146275,146276],{},"datetime",[175,146278,146279],{},"Python 程序的运行链路：",[48,146281,146284],{"className":146282,"code":146283,"language":5833,"meta":53},[5831],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[55,146285,146283],{"__ignoreMap":53},[14,146287,146289],{"id":146288},"_12-python解释器","1.2 Python解释器",[175,146291,146292],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[48,146294,146296],{"className":24465,"code":146295,"language":24467,"meta":53,"style":53},"python --version\npython3 --version\npython\npython3\n",[55,146297,146298,146304,146310,146315],{"__ignoreMap":53},[58,146299,146300,146302],{"class":60,"line":61},[58,146301,31024],{"class":379},[58,146303,26937],{"class":82},[58,146305,146306,146308],{"class":60,"line":68},[58,146307,101508],{"class":379},[58,146309,26937],{"class":82},[58,146311,146312],{"class":60,"line":79},[58,146313,146314],{"class":379},"python\n",[58,146316,146317],{"class":60,"line":105},[58,146318,146319],{"class":379},"python3\n",[175,146321,146322],{},"进入交互模式后，可以直接输入表达式：",[48,146324,146326],{"className":31022,"code":146325,"language":31024,"meta":53,"style":53},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[55,146327,146328,146339,146344,146358],{"__ignoreMap":53},[58,146329,146330,146333,146335,146337],{"class":60,"line":61},[58,146331,146332],{"class":92},">>>",[58,146334,25762],{"class":82},[58,146336,46210],{"class":92},[58,146338,48367],{"class":82},[58,146340,146341],{"class":60,"line":68},[58,146342,146343],{"class":82},"3\n",[58,146345,146346,146348,146351,146353,146356],{"class":60,"line":79},[58,146347,146332],{"class":92},[58,146349,146350],{"class":82}," print",[58,146352,793],{"class":75},[58,146354,146355],{"class":386},"\"hello python\"",[58,146357,799],{"class":75},[58,146359,146360],{"class":60,"line":105},[58,146361,146362],{"class":75},"hello python\n",[175,146364,146365],{},"退出交互模式：",[48,146367,146369],{"className":31022,"code":146368,"language":31024,"meta":53,"style":53},"exit()\n",[55,146370,146371],{"__ignoreMap":53},[58,146372,146373,146376],{"class":60,"line":61},[58,146374,146375],{"class":82},"exit",[58,146377,2622],{"class":75},[175,146379,146380],{},"或使用快捷键：",[48,146382,146385],{"className":146383,"code":146384,"language":5833,"meta":53},[5831],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[55,146386,146384],{"__ignoreMap":53},[14,146388,146390],{"id":146389},"_13-安装python","1.3 安装Python",[114,146392,146394],{"id":146393},"_131-windows安装","1.3.1 Windows安装",[19,146396,146397,146404,146407,146413,146419],{},[22,146398,146399,146400],{},"打开 Python 官网：",[376,146401,146402],{"href":146402,"rel":146403},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24508],[22,146405,146406],{},"下载 Windows Installer。",[22,146408,146409,146410,29029],{},"安装时勾选 ",[55,146411,146412],{},"Add Python to PATH",[22,146414,146415,146416,29029],{},"点击 ",[55,146417,146418],{},"Install Now",[22,146420,146421],{},"安装完成后打开命令提示符验证：",[48,146423,146425],{"className":24465,"code":146424,"language":24467,"meta":53,"style":53},"python --version\npip --version\n",[55,146426,146427,146433],{"__ignoreMap":53},[58,146428,146429,146431],{"class":60,"line":61},[58,146430,31024],{"class":379},[58,146432,26937],{"class":82},[58,146434,146435,146437],{"class":60,"line":68},[58,146436,24474],{"class":379},[58,146438,26937],{"class":82},[175,146440,146441,146442,146445],{},"如果提示 ",[55,146443,146444],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[114,146447,146449],{"id":146448},"_132-macos安装","1.3.2 macOS安装",[175,146451,146452],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[48,146454,146456],{"className":24465,"code":146455,"language":24467,"meta":53,"style":53},"brew install python\npython3 --version\npip3 --version\n",[55,146457,146458,146467,146473],{"__ignoreMap":53},[58,146459,146460,146463,146465],{"class":60,"line":61},[58,146461,146462],{"class":379},"brew",[58,146464,24477],{"class":386},[58,146466,124947],{"class":386},[58,146468,146469,146471],{"class":60,"line":68},[58,146470,101508],{"class":379},[58,146472,26937],{"class":82},[58,146474,146475,146477],{"class":60,"line":79},[58,146476,120329],{"class":379},[58,146478,26937],{"class":82},[175,146480,146481],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[114,146483,146485],{"id":146484},"_133-linux安装","1.3.3 Linux安装",[175,146487,146488],{},"Ubuntu\u002FDebian：",[48,146490,146492],{"className":24465,"code":146491,"language":24467,"meta":53,"style":53},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[55,146493,146494,146502,146517,146523],{"__ignoreMap":53},[58,146495,146496,146498,146500],{"class":60,"line":61},[58,146497,25220],{"class":379},[58,146499,117946],{"class":386},[58,146501,26886],{"class":386},[58,146503,146504,146506,146508,146510,146512,146514],{"class":60,"line":68},[58,146505,25220],{"class":379},[58,146507,117946],{"class":386},[58,146509,24477],{"class":386},[58,146511,105032],{"class":386},[58,146513,101427],{"class":386},[58,146515,146516],{"class":386}," python3-venv\n",[58,146518,146519,146521],{"class":60,"line":79},[58,146520,101508],{"class":379},[58,146522,26937],{"class":82},[58,146524,146525,146527],{"class":60,"line":105},[58,146526,120329],{"class":379},[58,146528,26937],{"class":82},[175,146530,146531],{},"Fedora：",[48,146533,146535],{"className":24465,"code":146534,"language":24467,"meta":53,"style":53},"sudo dnf install python3 python3-pip\n",[55,146536,146537],{"__ignoreMap":53},[58,146538,146539,146541,146543,146545,146547],{"class":60,"line":61},[58,146540,25220],{"class":379},[58,146542,26959],{"class":386},[58,146544,24477],{"class":386},[58,146546,105032],{"class":386},[58,146548,120394],{"class":386},[175,146550,146551,146552,146554],{},"Linux 上通常使用 ",[55,146553,101508],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146556,146558],{"id":146557},"_14-pip包管理器","1.4 pip包管理器",[175,146560,146561,146563],{},[55,146562,24474],{}," 用来安装第三方库。",[48,146565,146567],{"className":24465,"code":146566,"language":24467,"meta":53,"style":53},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[55,146568,146569,146578,146587,146595,146601],{"__ignoreMap":53},[58,146570,146571,146573,146575],{"class":60,"line":61},[58,146572,24474],{"class":379},[58,146574,24477],{"class":386},[58,146576,146577],{"class":386}," requests\n",[58,146579,146580,146582,146585],{"class":60,"line":68},[58,146581,24474],{"class":379},[58,146583,146584],{"class":386}," uninstall",[58,146586,146577],{"class":386},[58,146588,146589,146591,146593],{"class":60,"line":79},[58,146590,24474],{"class":379},[58,146592,118203],{"class":386},[58,146594,146577],{"class":386},[58,146596,146597,146599],{"class":60,"line":105},[58,146598,24474],{"class":379},[58,146600,119584],{"class":386},[58,146602,146603,146605],{"class":60,"line":627},[58,146604,24474],{"class":379},[58,146606,146607],{"class":386}," freeze\n",[175,146609,146610],{},"国内网络较慢时可以临时使用镜像：",[48,146612,146614],{"className":24465,"code":146613,"language":24467,"meta":53,"style":53},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[55,146615,146616],{"__ignoreMap":53},[58,146617,146618,146620,146622,146625,146627],{"class":60,"line":61},[58,146619,24474],{"class":379},[58,146621,24477],{"class":386},[58,146623,146624],{"class":386}," requests",[58,146626,27074],{"class":82},[58,146628,120357],{"class":386},[175,146630,146631],{},"常见第三方库：",[926,146633,146634,146643],{},[929,146635,146636],{},[932,146637,146638,146641],{},[935,146639,146640],{},"库",[935,146642,103325],{},[972,146644,146645,146653,146660,146668,146676,146684,146692],{},[932,146646,146647,146650],{},[977,146648,146649],{},"requests",[977,146651,146652],{},"网络请求",[932,146654,146655,146657],{},[977,146656,101255],{},[977,146658,146659],{},"数值计算",[932,146661,146662,146665],{},[977,146663,146664],{},"pandas",[977,146666,146667],{},"表格数据处理",[932,146669,146670,146673],{},[977,146671,146672],{},"matplotlib",[977,146674,146675],{},"绘图",[932,146677,146678,146681],{},[977,146679,146680],{},"pyecharts",[977,146682,146683],{},"ECharts 图表",[932,146685,146686,146689],{},[977,146687,146688],{},"flask",[977,146690,146691],{},"Web 后端",[932,146693,146694,146697],{},[977,146695,146696],{},"pytest",[977,146698,146699],{},"自动化测试",[14,146701,146703],{"id":146702},"_15-虚拟环境","1.5 虚拟环境",[175,146705,146706,146707,146710],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[55,146708,146709],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[175,146712,146713],{},"创建虚拟环境：",[48,146715,146717],{"className":24465,"code":146716,"language":24467,"meta":53,"style":53},"python -m venv .venv\n",[55,146718,146719],{"__ignoreMap":53},[58,146720,146721,146723,146725,146727],{"class":60,"line":61},[58,146722,31024],{"class":379},[58,146724,101511],{"class":82},[58,146726,101514],{"class":386},[58,146728,101517],{"class":386},[175,146730,146731],{},"Windows 激活：",[48,146733,146735],{"className":24465,"code":146734,"language":24467,"meta":53,"style":53},".venv\\Scripts\\activate\n",[55,146736,146737],{"__ignoreMap":53},[58,146738,146739],{"class":60,"line":61},[58,146740,146734],{"class":379},[175,146742,146743],{},"macOS\u002FLinux 激活：",[48,146745,146747],{"className":24465,"code":146746,"language":24467,"meta":53,"style":53},"source .venv\u002Fbin\u002Factivate\n",[55,146748,146749],{"__ignoreMap":53},[58,146750,146751,146753],{"class":60,"line":61},[58,146752,101522],{"class":82},[58,146754,101525],{"class":386},[175,146756,146757],{},"退出虚拟环境：",[48,146759,146761],{"className":24465,"code":146760,"language":24467,"meta":53,"style":53},"deactivate\n",[55,146762,146763],{"__ignoreMap":53},[58,146764,146765],{"class":60,"line":61},[58,146766,146760],{"class":379},[175,146768,146769],{},"保存依赖：",[48,146771,146773],{"className":24465,"code":146772,"language":24467,"meta":53,"style":53},"pip freeze > requirements.txt\n",[55,146774,146775],{"__ignoreMap":53},[58,146776,146777,146779,146782,146784],{"class":60,"line":61},[58,146778,24474],{"class":379},[58,146780,146781],{"class":386}," freeze",[58,146783,26866],{"class":92},[58,146785,146786],{"class":386}," requirements.txt\n",[175,146788,146789],{},"安装依赖：",[48,146791,146793],{"className":24465,"code":146792,"language":24467,"meta":53,"style":53},"pip install -r requirements.txt\n",[55,146794,146795],{"__ignoreMap":53},[58,146796,146797,146799,146801,146803],{"class":60,"line":61},[58,146798,24474],{"class":379},[58,146800,24477],{"class":386},[58,146802,120268],{"class":82},[58,146804,146786],{"class":386},[14,146806,146808],{"id":146807},"_16-开发工具","1.6 开发工具",[114,146810,146812],{"id":146811},"_161-pycharm","1.6.1 PyCharm",[175,146814,146815],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[175,146817,122691],{},[19,146819,146820,146823,146826,146832,146835],{},[22,146821,146822],{},"New Project：创建项目。",[22,146824,146825],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[22,146827,146828,146829,126612],{},"New Python File：创建 ",[55,146830,146831],{},".py",[22,146833,146834],{},"Run：运行当前文件。",[22,146836,146837],{},"Debug：断点调试。",[114,146839,146841],{"id":146840},"_162-vs-code","1.6.2 VS Code",[175,146843,146844],{},"VS Code 轻量，适合后续多语言开发。",[175,146846,146847],{},"建议安装插件：",[19,146849,146850,146853,146856],{},[22,146851,146852],{},"Python。",[22,146854,146855],{},"Pylance。",[22,146857,146858],{},"Jupyter。",[175,146860,146861],{},"选择解释器：",[48,146863,146866],{"className":146864,"code":146865,"language":5833,"meta":53},[5831],"Ctrl + Shift + P -> Python: Select Interpreter\n",[55,146867,146865],{"__ignoreMap":53},[14,146869,146871],{"id":146870},"_17-第一个python程序","1.7 第一个Python程序",[175,146873,146874,146875,25262],{},"创建文件 ",[55,146876,146877],{},"hello.py",[48,146879,146881],{"className":31022,"code":146880,"language":31024,"meta":53,"style":53},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[55,146882,146883,146894],{"__ignoreMap":53},[58,146884,146885,146887,146889,146892],{"class":60,"line":61},[58,146886,31059],{"class":82},[58,146888,793],{"class":75},[58,146890,146891],{"class":386},"\"Hello World\"",[58,146893,799],{"class":75},[58,146895,146896,146898,146900,146903],{"class":60,"line":68},[58,146897,31059],{"class":82},[58,146899,793],{"class":75},[58,146901,146902],{"class":386},"\"你好，Python\"",[58,146904,799],{"class":75},[175,146906,146907],{},"在终端运行：",[48,146909,146911],{"className":24465,"code":146910,"language":24467,"meta":53,"style":53},"python hello.py\n",[55,146912,146913],{"__ignoreMap":53},[58,146914,146915,146917],{"class":60,"line":61},[58,146916,31024],{"class":379},[58,146918,146919],{"class":386}," hello.py\n",[175,146921,146922],{},"或：",[48,146924,146926],{"className":24465,"code":146925,"language":24467,"meta":53,"style":53},"python3 hello.py\n",[55,146927,146928],{"__ignoreMap":53},[58,146929,146930,146932],{"class":60,"line":61},[58,146931,101508],{"class":379},[58,146933,146919],{"class":386},[175,146935,146936],{},"输出：",[48,146938,146941],{"className":146939,"code":146940,"language":5833,"meta":53},[5831],"Hello World\n你好，Python\n",[55,146942,146940],{"__ignoreMap":53},[14,146944,146946],{"id":146945},"_18-print函数","1.8 print函数",[175,146948,146949,146952],{},[55,146950,146951],{},"print()"," 用来输出内容。",[48,146954,146956],{"className":31022,"code":146955,"language":31024,"meta":53,"style":53},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[55,146957,146958,146968,146978,146988],{"__ignoreMap":53},[58,146959,146960,146962,146964,146966],{"class":60,"line":61},[58,146961,31059],{"class":82},[58,146963,793],{"class":75},[58,146965,6490],{"class":386},[58,146967,799],{"class":75},[58,146969,146970,146972,146974,146976],{"class":60,"line":68},[58,146971,31059],{"class":82},[58,146973,793],{"class":75},[58,146975,1097],{"class":82},[58,146977,799],{"class":75},[58,146979,146980,146982,146984,146986],{"class":60,"line":79},[58,146981,31059],{"class":82},[58,146983,793],{"class":75},[58,146985,840],{"class":82},[58,146987,799],{"class":75},[58,146989,146990,146992,146994,146997,146999,147001],{"class":60,"line":105},[58,146991,31059],{"class":82},[58,146993,793],{"class":75},[58,146995,146996],{"class":386},"\"年龄:\"",[58,146998,469],{"class":75},[58,147000,1436],{"class":82},[58,147002,799],{"class":75},[175,147004,147005],{},"多个内容用逗号隔开，默认中间加空格：",[48,147007,147009],{"className":31022,"code":147008,"language":31024,"meta":53,"style":53},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[55,147010,147011,147021,147031],{"__ignoreMap":53},[58,147012,147013,147016,147018],{"class":60,"line":61},[58,147014,147015],{"class":75},"name ",[58,147017,383],{"class":92},[58,147019,147020],{"class":386}," \"张三\"\n",[58,147022,147023,147026,147028],{"class":60,"line":68},[58,147024,147025],{"class":75},"age ",[58,147027,383],{"class":92},[58,147029,147030],{"class":82}," 18\n",[58,147032,147033,147035,147037,147040,147043,147045],{"class":60,"line":79},[58,147034,31059],{"class":82},[58,147036,793],{"class":75},[58,147038,147039],{"class":386},"\"姓名:\"",[58,147041,147042],{"class":75},", name, ",[58,147044,146996],{"class":386},[58,147046,147047],{"class":75},", age)\n",[175,147049,147050],{},"修改分隔符：",[48,147052,147054],{"className":31022,"code":147053,"language":31024,"meta":53,"style":53},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[55,147055,147056],{"__ignoreMap":53},[58,147057,147058,147060,147062,147065,147067,147069,147071,147073,147075,147078,147080,147082],{"class":60,"line":61},[58,147059,31059],{"class":82},[58,147061,793],{"class":75},[58,147063,147064],{"class":386},"\"2024\"",[58,147066,469],{"class":75},[58,147068,54952],{"class":386},[58,147070,469],{"class":75},[58,147072,54952],{"class":386},[58,147074,469],{"class":75},[58,147076,147077],{"class":5862},"sep",[58,147079,383],{"class":92},[58,147081,33127],{"class":386},[58,147083,799],{"class":75},[175,147085,147086],{},"修改结尾符：",[48,147088,147090],{"className":31022,"code":147089,"language":31024,"meta":53,"style":53},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[55,147091,147092,147110],{"__ignoreMap":53},[58,147093,147094,147096,147098,147100,147102,147104,147106,147108],{"class":60,"line":61},[58,147095,31059],{"class":82},[58,147097,793],{"class":75},[58,147099,6490],{"class":386},[58,147101,469],{"class":75},[58,147103,46445],{"class":5862},[58,147105,383],{"class":92},[58,147107,5005],{"class":386},[58,147109,799],{"class":75},[58,147111,147112,147114,147116,147119],{"class":60,"line":68},[58,147113,31059],{"class":82},[58,147115,793],{"class":75},[58,147117,147118],{"class":386},"\"python\"",[58,147120,799],{"class":75},[14,147122,147124],{"id":147123},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[175,147126,147127],{},"交互运行适合临时验证：",[48,147129,147131],{"className":31022,"code":147130,"language":31024,"meta":53,"style":53},">>> 10 * 3\n30\n",[55,147132,147133,147143],{"__ignoreMap":53},[58,147134,147135,147137,147139,147141],{"class":60,"line":61},[58,147136,146332],{"class":92},[58,147138,2684],{"class":82},[58,147140,7164],{"class":92},[58,147142,120665],{"class":82},[58,147144,147145],{"class":60,"line":68},[58,147146,147147],{"class":82},"30\n",[175,147149,147150],{},"脚本运行适合保存程序：",[48,147152,147154],{"className":31022,"code":147153,"language":31024,"meta":53,"style":53},"price = 8\ncount = 5\nprint(price * count)\n",[55,147155,147156,147166,147175],{"__ignoreMap":53},[58,147157,147158,147161,147163],{"class":60,"line":61},[58,147159,147160],{"class":75},"price ",[58,147162,383],{"class":92},[58,147164,147165],{"class":82}," 8\n",[58,147167,147168,147171,147173],{"class":60,"line":68},[58,147169,147170],{"class":75},"count ",[58,147172,383],{"class":92},[58,147174,55063],{"class":82},[58,147176,147177,147179,147182,147184],{"class":60,"line":79},[58,147178,31059],{"class":82},[58,147180,147181],{"class":75},"(price ",[58,147183,1241],{"class":92},[58,147185,147186],{"class":75}," count)\n",[175,147188,147189],{},"实际学习中推荐：",[19,147191,147192,147195,147200],{},[22,147193,147194],{},"临时试一个语法，用交互模式。",[22,147196,147197,147198,126612],{},"写完整练习，用 ",[55,147199,146831],{},[22,147201,147202],{},"写项目，用独立目录和虚拟环境。",[14,147204,147206],{"id":147205},"_110-常见错误","1.10 常见错误",[114,147208,147210],{"id":147209},"_1101-命令找不到","1.10.1 命令找不到",[48,147212,147215],{"className":147213,"code":147214,"language":5833,"meta":53},[5831],"python: command not found\n",[55,147216,147214],{"__ignoreMap":53},[175,147218,147219],{},"原因：",[19,147221,147222,147225,147228],{},[22,147223,147224],{},"没安装 Python。",[22,147226,147227],{},"PATH 没配置。",[22,147229,147230,147231,29029],{},"Linux\u002FmacOS 应该使用 ",[55,147232,101508],{},[114,147234,147236],{"id":147235},"_1102-文件名冲突","1.10.2 文件名冲突",[175,147238,147239],{},"不要把文件命名为：",[48,147241,147244],{"className":147242,"code":147243,"language":5833,"meta":53},[5831],"random.py\njson.py\ntime.py\nrequests.py\n",[55,147245,147243],{"__ignoreMap":53},[175,147247,147248],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[114,147250,147252],{"id":147251},"_1103-中文乱码","1.10.3 中文乱码",[175,147254,147255],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[175,147257,147258],{},"如果读写文件出现乱码，要明确指定编码：",[48,147260,147262],{"className":31022,"code":147261,"language":31024,"meta":53,"style":53},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[55,147263,147264,147298],{"__ignoreMap":53},[58,147265,147266,147268,147271,147273,147276,147278,147281,147283,147286,147288,147291,147293,147295],{"class":60,"line":61},[58,147267,108462],{"class":92},[58,147269,147270],{"class":82}," open",[58,147272,793],{"class":75},[58,147274,147275],{"class":386},"\"data.txt\"",[58,147277,469],{"class":75},[58,147279,147280],{"class":386},"\"r\"",[58,147282,469],{"class":75},[58,147284,147285],{"class":5862},"encoding",[58,147287,383],{"class":92},[58,147289,147290],{"class":386},"\"utf-8\"",[58,147292,14358],{"class":75},[58,147294,32027],{"class":92},[58,147296,147297],{"class":75}," f:\n",[58,147299,147300,147303,147305],{"class":60,"line":68},[58,147301,147302],{"class":75},"    content ",[58,147304,383],{"class":92},[58,147306,147307],{"class":75}," f.read()\n",[14,147309,147311],{"id":147310},"_111-本章练习","1.11 本章练习",[19,147313,147314,147317,147323],{},[22,147315,147316],{},"安装 Python，并在终端输出版本号。",[22,147318,147319,147320,147322],{},"新建 ",[55,147321,146877],{},"，输出自己的姓名、年龄、学习目标。",[22,147324,104995,147325,147327],{},[55,147326,146951],{}," 输出下面格式：",[48,147329,147332],{"className":147330,"code":147331,"language":5833,"meta":53},[5831],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[55,147333,147331],{"__ignoreMap":53},[19,147335,147336],{"start":105},[22,147337,104995,147338,147340],{},[55,147339,147077],{}," 输出日期：",[48,147342,147345],{"className":147343,"code":147344,"language":5833,"meta":53},[5831],"2024-10-10\n",[55,147346,147344],{"__ignoreMap":53},[19,147348,147349],{"start":627},[22,147350,104995,147351,147353,147354,147356],{},[55,147352,46445],{}," 让两次 ",[55,147355,146951],{}," 输出在同一行。",[702,147358,147359],{},"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":53,"searchDepth":68,"depth":68,"links":147361},[147362,147363,147364,147369,147370,147371,147375,147376,147377,147378,147383],{"id":146244,"depth":68,"text":146245},{"id":146288,"depth":68,"text":146289},{"id":146389,"depth":68,"text":146390,"children":147365},[147366,147367,147368],{"id":146393,"depth":79,"text":146394},{"id":146448,"depth":79,"text":146449},{"id":146484,"depth":79,"text":146485},{"id":146557,"depth":68,"text":146558},{"id":146702,"depth":68,"text":146703},{"id":146807,"depth":68,"text":146808,"children":147372},[147373,147374],{"id":146811,"depth":79,"text":146812},{"id":146840,"depth":79,"text":146841},{"id":146870,"depth":68,"text":146871},{"id":146945,"depth":68,"text":146946},{"id":147123,"depth":68,"text":147124},{"id":147205,"depth":68,"text":147206,"children":147379},[147380,147381,147382],{"id":147209,"depth":79,"text":147210},{"id":147235,"depth":79,"text":147236},{"id":147251,"depth":79,"text":147252},{"id":147310,"depth":68,"text":147311},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146236,"description":717},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147390,"title":147391,"body":147392,"description":717,"extension":718,"meta":149796,"navigation":720,"path":149797,"seo":149798,"stem":149799,"__hash__":149800},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147393,"toc":149781},[147394,147397,147401,147404,147407,147424,147427,147469,147472,147476,147479,147482,147519,147522,147556,147559,147651,147655,147669,147672,147699,147702,147706,147809,147816,147819,147836,147840,147847,148036,148039,148112,148116,148119,148203,148206,148238,148242,148446,148449,148453,148459,148561,148564,148820,148824,148827,148830,148844,148846,149032,149036,149398,149404,149408,149411,149535,149538,149717,149720,149724,149757,149761,149778],[10,147395,147391],{"id":147396},"_10-json与pyecharts折线图",[14,147398,147400],{"id":147399},"_101-数据可视化","10.1 数据可视化",[175,147402,147403],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[175,147405,147406],{},"常见图表：",[19,147408,147409,147412,147415,147418,147421],{},[22,147410,147411],{},"折线图：看趋势。",[22,147413,147414],{},"柱状图：看分类对比。",[22,147416,147417],{},"饼图：看占比。",[22,147419,147420],{},"地图：看地域分布。",[22,147422,147423],{},"散点图：看两个变量之间的关系。",[175,147425,147426],{},"Python 可视化常用库：",[926,147428,147429,147437],{},[929,147430,147431],{},[932,147432,147433,147435],{},[935,147434,146640],{},[935,147436,24383],{},[972,147438,147439,147446,147454,147461],{},[932,147440,147441,147443],{},[977,147442,146672],{},[977,147444,147445],{},"基础、经典、可定制",[932,147447,147448,147451],{},[977,147449,147450],{},"seaborn",[977,147452,147453],{},"统计图表更美观",[932,147455,147456,147458],{},[977,147457,146680],{},[977,147459,147460],{},"生成交互式网页图表",[932,147462,147463,147466],{},[977,147464,147465],{},"plotly",[977,147467,147468],{},"交互图表能力强",[175,147470,147471],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147473,147475],{"id":147474},"_102-json回顾","10.2 JSON回顾",[175,147477,147478],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[175,147480,147481],{},"Python 字典：",[48,147483,147485],{"className":31022,"code":147484,"language":31024,"meta":53,"style":53},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[55,147486,147487,147495,147506,147515],{"__ignoreMap":53},[58,147488,147489,147491,147493],{"class":60,"line":61},[58,147490,102287],{"class":75},[58,147492,383],{"class":92},[58,147494,76],{"class":75},[58,147496,147497,147500,147502,147504],{"class":60,"line":68},[58,147498,147499],{"class":386},"    \"name\"",[58,147501,86],{"class":75},[58,147503,69901],{"class":386},[58,147505,32110],{"class":75},[58,147507,147508,147511,147513],{"class":60,"line":79},[58,147509,147510],{"class":386},"    \"value\"",[58,147512,86],{"class":75},[58,147514,98087],{"class":82},[58,147516,147517],{"class":60,"line":105},[58,147518,108],{"class":75},[175,147520,147521],{},"JSON 字符串：",[48,147523,147526],{"className":147524,"code":147525,"language":146271,"meta":53,"style":53},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[55,147527,147528,147532,147543,147552],{"__ignoreMap":53},[58,147529,147530],{"class":60,"line":61},[58,147531,2195],{"class":75},[58,147533,147534,147537,147539,147541],{"class":60,"line":68},[58,147535,147536],{"class":82},"  \"name\"",[58,147538,86],{"class":75},[58,147540,69901],{"class":386},[58,147542,32110],{"class":75},[58,147544,147545,147548,147550],{"class":60,"line":79},[58,147546,147547],{"class":82},"  \"value\"",[58,147549,86],{"class":75},[58,147551,98087],{"class":82},[58,147553,147554],{"class":60,"line":105},[58,147555,108],{"class":75},[175,147557,147558],{},"Python 与 JSON 的转换：",[48,147560,147562],{"className":31022,"code":147561,"language":31024,"meta":53,"style":53},"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",[55,147563,147564,147571,147575,147600,147604,147623,147630,147634,147644],{"__ignoreMap":53},[58,147565,147566,147568],{"class":60,"line":61},[58,147567,31036],{"class":92},[58,147569,147570],{"class":75}," json\n",[58,147572,147573],{"class":60,"line":68},[58,147574,3046],{"emptyLinePlaceholder":720},[58,147576,147577,147579,147581,147583,147585,147587,147589,147591,147594,147596,147598],{"class":60,"line":79},[58,147578,102287],{"class":75},[58,147580,383],{"class":92},[58,147582,5094],{"class":75},[58,147584,63311],{"class":386},[58,147586,86],{"class":75},[58,147588,69901],{"class":386},[58,147590,469],{"class":75},[58,147592,147593],{"class":386},"\"value\"",[58,147595,86],{"class":75},[58,147597,1097],{"class":82},[58,147599,108],{"class":75},[58,147601,147602],{"class":60,"line":105},[58,147603,3046],{"emptyLinePlaceholder":720},[58,147605,147606,147609,147611,147614,147617,147619,147621],{"class":60,"line":627},[58,147607,147608],{"class":75},"json_text ",[58,147610,383],{"class":92},[58,147612,147613],{"class":75}," json.dumps(data, ",[58,147615,147616],{"class":5862},"ensure_ascii",[58,147618,383],{"class":92},[58,147620,34631],{"class":82},[58,147622,799],{"class":75},[58,147624,147625,147627],{"class":60,"line":509},[58,147626,31059],{"class":82},[58,147628,147629],{"class":75},"(json_text)\n",[58,147631,147632],{"class":60,"line":559},[58,147633,3046],{"emptyLinePlaceholder":720},[58,147635,147636,147639,147641],{"class":60,"line":654},[58,147637,147638],{"class":75},"new_data ",[58,147640,383],{"class":92},[58,147642,147643],{"class":75}," json.loads(json_text)\n",[58,147645,147646,147648],{"class":60,"line":671},[58,147647,31059],{"class":82},[58,147649,147650],{"class":75},"(new_data)\n",[14,147652,147654],{"id":147653},"_103-安装pyecharts","10.3 安装pyecharts",[48,147656,147658],{"className":24465,"code":147657,"language":24467,"meta":53,"style":53},"pip install pyecharts\n",[55,147659,147660],{"__ignoreMap":53},[58,147661,147662,147664,147666],{"class":60,"line":61},[58,147663,24474],{"class":379},[58,147665,24477],{"class":386},[58,147667,147668],{"class":386}," pyecharts\n",[175,147670,147671],{},"验证：",[48,147673,147675],{"className":31022,"code":147674,"language":31024,"meta":53,"style":53},"import pyecharts\n\nprint(pyecharts.__version__)\n",[55,147676,147677,147683,147687],{"__ignoreMap":53},[58,147678,147679,147681],{"class":60,"line":61},[58,147680,31036],{"class":92},[58,147682,147668],{"class":75},[58,147684,147685],{"class":60,"line":68},[58,147686,3046],{"emptyLinePlaceholder":720},[58,147688,147689,147691,147694,147697],{"class":60,"line":79},[58,147690,31059],{"class":82},[58,147692,147693],{"class":75},"(pyecharts.",[58,147695,147696],{"class":82},"__version__",[58,147698,799],{"class":75},[175,147700,147701],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147703,147705],{"id":147704},"_104-第一个折线图","10.4 第一个折线图",[48,147707,147709],{"className":31022,"code":147708,"language":31024,"meta":53,"style":53},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[55,147710,147711,147723,147727,147737,147767,147799],{"__ignoreMap":53},[58,147712,147713,147715,147718,147720],{"class":60,"line":61},[58,147714,31381],{"class":92},[58,147716,147717],{"class":75}," pyecharts.charts ",[58,147719,31036],{"class":92},[58,147721,147722],{"class":75}," Line\n",[58,147724,147725],{"class":60,"line":68},[58,147726,3046],{"emptyLinePlaceholder":720},[58,147728,147729,147732,147734],{"class":60,"line":79},[58,147730,147731],{"class":75},"line ",[58,147733,383],{"class":92},[58,147735,147736],{"class":75}," Line()\n",[58,147738,147739,147742,147745,147747,147750,147752,147755,147757,147760,147762,147765],{"class":60,"line":105},[58,147740,147741],{"class":75},"line.add_xaxis([",[58,147743,147744],{"class":386},"\"周一\"",[58,147746,469],{"class":75},[58,147748,147749],{"class":386},"\"周二\"",[58,147751,469],{"class":75},[58,147753,147754],{"class":386},"\"周三\"",[58,147756,469],{"class":75},[58,147758,147759],{"class":386},"\"周四\"",[58,147761,469],{"class":75},[58,147763,147764],{"class":386},"\"周五\"",[58,147766,5303],{"class":75},[58,147768,147769,147772,147775,147777,147779,147781,147783,147785,147787,147789,147792,147794,147797],{"class":60,"line":627},[58,147770,147771],{"class":75},"line.add_yaxis(",[58,147773,147774],{"class":386},"\"销售额\"",[58,147776,78149],{"class":75},[58,147778,1097],{"class":82},[58,147780,469],{"class":75},[58,147782,1602],{"class":82},[58,147784,469],{"class":75},[58,147786,1647],{"class":82},[58,147788,469],{"class":75},[58,147790,147791],{"class":82},"150",[58,147793,469],{"class":75},[58,147795,147796],{"class":82},"180",[58,147798,5303],{"class":75},[58,147800,147801,147804,147807],{"class":60,"line":509},[58,147802,147803],{"class":75},"line.render(",[58,147805,147806],{"class":386},"\"line.html\"",[58,147808,799],{"class":75},[175,147810,147811,147812,147815],{},"运行后会生成 ",[55,147813,147814],{},"line.html","，用浏览器打开即可看到图表。",[175,147817,147818],{},"核心步骤：",[19,147820,147821,147824,147827,147830,147833],{},[22,147822,147823],{},"导入图表类。",[22,147825,147826],{},"创建图表对象。",[22,147828,147829],{},"添加 x 轴数据。",[22,147831,147832],{},"添加 y 轴数据。",[22,147834,147835],{},"渲染为 HTML。",[14,147837,147839],{"id":147838},"_105-全局配置","10.5 全局配置",[175,147841,147842,147843,147846],{},"常用配置在 ",[55,147844,147845],{},"pyecharts.options"," 中。",[48,147848,147850],{"className":31022,"code":147849,"language":31024,"meta":53,"style":53},"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",[55,147851,147852,147869,147879,147883,147891,147915,147943,147948,147967,147986,148004,148024,148028],{"__ignoreMap":53},[58,147853,147854,147856,147859,147861,147864,147866],{"class":60,"line":61},[58,147855,31381],{"class":92},[58,147857,147858],{"class":75}," pyecharts ",[58,147860,31036],{"class":92},[58,147862,147863],{"class":75}," options ",[58,147865,32027],{"class":92},[58,147867,147868],{"class":75}," opts\n",[58,147870,147871,147873,147875,147877],{"class":60,"line":68},[58,147872,31381],{"class":92},[58,147874,147717],{"class":75},[58,147876,31036],{"class":92},[58,147878,147722],{"class":75},[58,147880,147881],{"class":60,"line":79},[58,147882,3046],{"emptyLinePlaceholder":720},[58,147884,147885,147887,147889],{"class":60,"line":105},[58,147886,147731],{"class":75},[58,147888,383],{"class":92},[58,147890,147736],{"class":75},[58,147892,147893,147895,147897,147899,147901,147903,147905,147907,147909,147911,147913],{"class":60,"line":627},[58,147894,147741],{"class":75},[58,147896,147744],{"class":386},[58,147898,469],{"class":75},[58,147900,147749],{"class":386},[58,147902,469],{"class":75},[58,147904,147754],{"class":386},[58,147906,469],{"class":75},[58,147908,147759],{"class":386},[58,147910,469],{"class":75},[58,147912,147764],{"class":386},[58,147914,5303],{"class":75},[58,147916,147917,147919,147921,147923,147925,147927,147929,147931,147933,147935,147937,147939,147941],{"class":60,"line":509},[58,147918,147771],{"class":75},[58,147920,147774],{"class":386},[58,147922,78149],{"class":75},[58,147924,1097],{"class":82},[58,147926,469],{"class":75},[58,147928,1602],{"class":82},[58,147930,469],{"class":75},[58,147932,1647],{"class":82},[58,147934,469],{"class":75},[58,147936,147791],{"class":82},[58,147938,469],{"class":75},[58,147940,147796],{"class":82},[58,147942,5303],{"class":75},[58,147944,147945],{"class":60,"line":559},[58,147946,147947],{"class":75},"line.set_global_opts(\n",[58,147949,147950,147953,147955,147958,147960,147962,147965],{"class":60,"line":654},[58,147951,147952],{"class":5862},"    title_opts",[58,147954,383],{"class":92},[58,147956,147957],{"class":75},"opts.TitleOpts(",[58,147959,52049],{"class":5862},[58,147961,383],{"class":92},[58,147963,147964],{"class":386},"\"一周销售额\"",[58,147966,38691],{"class":75},[58,147968,147969,147972,147974,147977,147979,147981,147984],{"class":60,"line":671},[58,147970,147971],{"class":5862},"    xaxis_opts",[58,147973,383],{"class":92},[58,147975,147976],{"class":75},"opts.AxisOpts(",[58,147978,80440],{"class":5862},[58,147980,383],{"class":92},[58,147982,147983],{"class":386},"\"日期\"",[58,147985,38691],{"class":75},[58,147987,147988,147991,147993,147995,147997,147999,148002],{"class":60,"line":677},[58,147989,147990],{"class":5862},"    yaxis_opts",[58,147992,383],{"class":92},[58,147994,147976],{"class":75},[58,147996,80440],{"class":5862},[58,147998,383],{"class":92},[58,148000,148001],{"class":386},"\"金额\"",[58,148003,38691],{"class":75},[58,148005,148006,148009,148011,148014,148017,148019,148022],{"class":60,"line":2260},[58,148007,148008],{"class":5862},"    tooltip_opts",[58,148010,383],{"class":92},[58,148012,148013],{"class":75},"opts.TooltipOpts(",[58,148015,148016],{"class":5862},"trigger",[58,148018,383],{"class":92},[58,148020,148021],{"class":386},"\"axis\"",[58,148023,38691],{"class":75},[58,148025,148026],{"class":60,"line":694},[58,148027,799],{"class":75},[58,148029,148030,148032,148034],{"class":60,"line":2270},[58,148031,147803],{"class":75},[58,148033,147806],{"class":386},[58,148035,799],{"class":75},[175,148037,148038],{},"常见全局配置：",[926,148040,148041,148050],{},[929,148042,148043],{},[932,148044,148045,148048],{},[935,148046,148047],{},"配置",[935,148049,103325],{},[972,148051,148052,148062,148072,148082,148092,148102],{},[932,148053,148054,148059],{},[977,148055,148056],{},[55,148057,148058],{},"TitleOpts",[977,148060,148061],{},"标题",[932,148063,148064,148069],{},[977,148065,148066],{},[55,148067,148068],{},"LegendOpts",[977,148070,148071],{},"图例",[932,148073,148074,148079],{},[977,148075,148076],{},[55,148077,148078],{},"TooltipOpts",[977,148080,148081],{},"提示框",[932,148083,148084,148089],{},[977,148085,148086],{},[55,148087,148088],{},"AxisOpts",[977,148090,148091],{},"坐标轴",[932,148093,148094,148099],{},[977,148095,148096],{},[55,148097,148098],{},"VisualMapOpts",[977,148100,148101],{},"视觉映射",[932,148103,148104,148109],{},[977,148105,148106],{},[55,148107,148108],{},"DataZoomOpts",[977,148110,148111],{},"区域缩放",[14,148113,148115],{"id":148114},"_106-系列配置","10.6 系列配置",[175,148117,148118],{},"系列配置作用于某一组数据。",[48,148120,148122],{"className":31022,"code":148121,"language":31024,"meta":53,"style":53},"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",[55,148123,148124,148129,148140,148169,148180,148199],{"__ignoreMap":53},[58,148125,148126],{"class":60,"line":61},[58,148127,148128],{"class":75},"line.add_yaxis(\n",[58,148130,148131,148134,148136,148138],{"class":60,"line":68},[58,148132,148133],{"class":5862},"    series_name",[58,148135,383],{"class":92},[58,148137,147774],{"class":386},[58,148139,32110],{"class":75},[58,148141,148142,148145,148147,148149,148151,148153,148155,148157,148159,148161,148163,148165,148167],{"class":60,"line":79},[58,148143,148144],{"class":5862},"    y_axis",[58,148146,383],{"class":92},[58,148148,1675],{"class":75},[58,148150,1097],{"class":82},[58,148152,469],{"class":75},[58,148154,1602],{"class":82},[58,148156,469],{"class":75},[58,148158,1647],{"class":82},[58,148160,469],{"class":75},[58,148162,147791],{"class":82},[58,148164,469],{"class":75},[58,148166,147796],{"class":82},[58,148168,88465],{"class":75},[58,148170,148171,148174,148176,148178],{"class":60,"line":105},[58,148172,148173],{"class":5862},"    is_smooth",[58,148175,383],{"class":92},[58,148177,32120],{"class":82},[58,148179,32110],{"class":75},[58,148181,148182,148185,148187,148190,148193,148195,148197],{"class":60,"line":627},[58,148183,148184],{"class":5862},"    label_opts",[58,148186,383],{"class":92},[58,148188,148189],{"class":75},"opts.LabelOpts(",[58,148191,148192],{"class":5862},"is_show",[58,148194,383],{"class":92},[58,148196,32120],{"class":82},[58,148198,38691],{"class":75},[58,148200,148201],{"class":60,"line":509},[58,148202,799],{"class":75},[175,148204,148205],{},"常用参数：",[19,148207,148208,148214,148220,148226,148232],{},[22,148209,148210,148213],{},[55,148211,148212],{},"series_name","：系列名称。",[22,148215,148216,148219],{},[55,148217,148218],{},"y_axis","：y 轴数据。",[22,148221,148222,148225],{},[55,148223,148224],{},"is_smooth","：是否平滑曲线。",[22,148227,148228,148231],{},[55,148229,148230],{},"label_opts","：标签配置。",[22,148233,148234,148237],{},[55,148235,148236],{},"symbol_size","：标记点大小。",[14,148239,148241],{"id":148240},"_107-多条折线","10.7 多条折线",[48,148243,148245],{"className":31022,"code":148244,"language":31024,"meta":53,"style":53},"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",[55,148246,148247,148261,148271,148275,148304,148308,148316,148321,148359,148396,148400,148417,148433,148437],{"__ignoreMap":53},[58,148248,148249,148251,148253,148255,148257,148259],{"class":60,"line":61},[58,148250,31381],{"class":92},[58,148252,147858],{"class":75},[58,148254,31036],{"class":92},[58,148256,147863],{"class":75},[58,148258,32027],{"class":92},[58,148260,147868],{"class":75},[58,148262,148263,148265,148267,148269],{"class":60,"line":68},[58,148264,31381],{"class":92},[58,148266,147717],{"class":75},[58,148268,31036],{"class":92},[58,148270,147722],{"class":75},[58,148272,148273],{"class":60,"line":79},[58,148274,3046],{"emptyLinePlaceholder":720},[58,148276,148277,148280,148282,148284,148286,148288,148290,148292,148294,148296,148298,148300,148302],{"class":60,"line":105},[58,148278,148279],{"class":75},"dates ",[58,148281,383],{"class":92},[58,148283,52864],{"class":75},[58,148285,147744],{"class":386},[58,148287,469],{"class":75},[58,148289,147749],{"class":386},[58,148291,469],{"class":75},[58,148293,147754],{"class":386},[58,148295,469],{"class":75},[58,148297,147759],{"class":386},[58,148299,469],{"class":75},[58,148301,147764],{"class":386},[58,148303,33890],{"class":75},[58,148305,148306],{"class":60,"line":627},[58,148307,3046],{"emptyLinePlaceholder":720},[58,148309,148310,148312,148314],{"class":60,"line":509},[58,148311,147731],{"class":75},[58,148313,383],{"class":92},[58,148315,147736],{"class":75},[58,148317,148318],{"class":60,"line":559},[58,148319,148320],{"class":75},"line.add_xaxis(dates)\n",[58,148322,148323,148325,148328,148330,148332,148334,148337,148339,148341,148343,148345,148347,148349,148351,148353,148355,148357],{"class":60,"line":654},[58,148324,147771],{"class":75},[58,148326,148327],{"class":386},"\"线上销售\"",[58,148329,78149],{"class":75},[58,148331,1097],{"class":82},[58,148333,469],{"class":75},[58,148335,148336],{"class":82},"130",[58,148338,469],{"class":75},[58,148340,1602],{"class":82},[58,148342,469],{"class":75},[58,148344,21691],{"class":82},[58,148346,469],{"class":75},[58,148348,2369],{"class":82},[58,148350,112831],{"class":75},[58,148352,148224],{"class":5862},[58,148354,383],{"class":92},[58,148356,32120],{"class":82},[58,148358,799],{"class":75},[58,148360,148361,148363,148366,148368,148370,148372,148374,148376,148378,148380,148382,148384,148386,148388,148390,148392,148394],{"class":60,"line":671},[58,148362,147771],{"class":75},[58,148364,148365],{"class":386},"\"线下销售\"",[58,148367,78149],{"class":75},[58,148369,1398],{"class":82},[58,148371,469],{"class":75},[58,148373,1647],{"class":82},[58,148375,469],{"class":75},[58,148377,1097],{"class":82},[58,148379,469],{"class":75},[58,148381,1602],{"class":82},[58,148383,469],{"class":75},[58,148385,147791],{"class":82},[58,148387,112831],{"class":75},[58,148389,148224],{"class":5862},[58,148391,383],{"class":92},[58,148393,32120],{"class":82},[58,148395,799],{"class":75},[58,148397,148398],{"class":60,"line":677},[58,148399,147947],{"class":75},[58,148401,148402,148404,148406,148408,148410,148412,148415],{"class":60,"line":2260},[58,148403,147952],{"class":5862},[58,148405,383],{"class":92},[58,148407,147957],{"class":75},[58,148409,52049],{"class":5862},[58,148411,383],{"class":92},[58,148413,148414],{"class":386},"\"线上线下销售趋势\"",[58,148416,38691],{"class":75},[58,148418,148419,148421,148423,148425,148427,148429,148431],{"class":60,"line":694},[58,148420,148008],{"class":5862},[58,148422,383],{"class":92},[58,148424,148013],{"class":75},[58,148426,148016],{"class":5862},[58,148428,383],{"class":92},[58,148430,148021],{"class":386},[58,148432,38691],{"class":75},[58,148434,148435],{"class":60,"line":2270},[58,148436,799],{"class":75},[58,148438,148439,148441,148444],{"class":60,"line":2275},[58,148440,147803],{"class":75},[58,148442,148443],{"class":386},"\"sales.html\"",[58,148445,799],{"class":75},[175,148447,148448],{},"多条折线适合比较不同指标或不同地区。",[14,148450,148452],{"id":148451},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[175,148454,148455,148456,25262],{},"假设 ",[55,148457,148458],{},"sales.json",[48,148460,148462],{"className":147524,"code":148461,"language":146271,"meta":53,"style":53},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[55,148463,148464,148469,148501,148529,148557],{"__ignoreMap":53},[58,148465,148466],{"class":60,"line":61},[58,148467,148468],{"class":75},"[\n",[58,148470,148471,148474,148477,148479,148481,148483,148486,148488,148490,148492,148495,148497,148499],{"class":60,"line":68},[58,148472,148473],{"class":75},"  {",[58,148475,148476],{"class":82},"\"date\"",[58,148478,86],{"class":75},[58,148480,147744],{"class":386},[58,148482,469],{"class":75},[58,148484,148485],{"class":82},"\"online\"",[58,148487,86],{"class":75},[58,148489,1097],{"class":82},[58,148491,469],{"class":75},[58,148493,148494],{"class":82},"\"offline\"",[58,148496,86],{"class":75},[58,148498,1398],{"class":82},[58,148500,5576],{"class":75},[58,148502,148503,148505,148507,148509,148511,148513,148515,148517,148519,148521,148523,148525,148527],{"class":60,"line":79},[58,148504,148473],{"class":75},[58,148506,148476],{"class":82},[58,148508,86],{"class":75},[58,148510,147749],{"class":386},[58,148512,469],{"class":75},[58,148514,148485],{"class":82},[58,148516,86],{"class":75},[58,148518,148336],{"class":82},[58,148520,469],{"class":75},[58,148522,148494],{"class":82},[58,148524,86],{"class":75},[58,148526,1647],{"class":82},[58,148528,5576],{"class":75},[58,148530,148531,148533,148535,148537,148539,148541,148543,148545,148547,148549,148551,148553,148555],{"class":60,"line":105},[58,148532,148473],{"class":75},[58,148534,148476],{"class":82},[58,148536,86],{"class":75},[58,148538,147754],{"class":386},[58,148540,469],{"class":75},[58,148542,148485],{"class":82},[58,148544,86],{"class":75},[58,148546,1602],{"class":82},[58,148548,469],{"class":75},[58,148550,148494],{"class":82},[58,148552,86],{"class":75},[58,148554,1097],{"class":82},[58,148556,108],{"class":75},[58,148558,148559],{"class":60,"line":627},[58,148560,33890],{"class":75},[175,148562,148563],{},"读取并绘图：",[48,148565,148567],{"className":31022,"code":148566,"language":31024,"meta":53,"style":53},"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",[55,148568,148569,148575,148589,148599,148603,148635,148648,148652,148660,148669,148678,148682,148694,148703,148712,148721,148725,148733,148737,148754,148771,148775,148792,148808,148812],{"__ignoreMap":53},[58,148570,148571,148573],{"class":60,"line":61},[58,148572,31036],{"class":92},[58,148574,147570],{"class":75},[58,148576,148577,148579,148581,148583,148585,148587],{"class":60,"line":68},[58,148578,31381],{"class":92},[58,148580,147858],{"class":75},[58,148582,31036],{"class":92},[58,148584,147863],{"class":75},[58,148586,32027],{"class":92},[58,148588,147868],{"class":75},[58,148590,148591,148593,148595,148597],{"class":60,"line":79},[58,148592,31381],{"class":92},[58,148594,147717],{"class":75},[58,148596,31036],{"class":92},[58,148598,147722],{"class":75},[58,148600,148601],{"class":60,"line":105},[58,148602,3046],{"emptyLinePlaceholder":720},[58,148604,148605,148607,148609,148611,148614,148616,148618,148620,148622,148624,148626,148628,148630,148633],{"class":60,"line":627},[58,148606,108462],{"class":92},[58,148608,147270],{"class":82},[58,148610,793],{"class":75},[58,148612,148613],{"class":386},"\"sales.json\"",[58,148615,469],{"class":75},[58,148617,147280],{"class":386},[58,148619,469],{"class":75},[58,148621,147285],{"class":5862},[58,148623,383],{"class":92},[58,148625,147290],{"class":386},[58,148627,14358],{"class":75},[58,148629,32027],{"class":92},[58,148631,148632],{"class":5862}," file",[58,148634,4385],{"class":75},[58,148636,148637,148639,148641,148644,148646],{"class":60,"line":509},[58,148638,102050],{"class":75},[58,148640,383],{"class":92},[58,148642,148643],{"class":75}," json.load(",[58,148645,45998],{"class":5862},[58,148647,799],{"class":75},[58,148649,148650],{"class":60,"line":559},[58,148651,3046],{"emptyLinePlaceholder":720},[58,148653,148654,148656,148658],{"class":60,"line":654},[58,148655,148279],{"class":75},[58,148657,383],{"class":92},[58,148659,52476],{"class":75},[58,148661,148662,148665,148667],{"class":60,"line":671},[58,148663,148664],{"class":75},"online_sales ",[58,148666,383],{"class":92},[58,148668,52476],{"class":75},[58,148670,148671,148674,148676],{"class":60,"line":677},[58,148672,148673],{"class":75},"offline_sales ",[58,148675,383],{"class":92},[58,148677,52476],{"class":75},[58,148679,148680],{"class":60,"line":2260},[58,148681,3046],{"emptyLinePlaceholder":720},[58,148683,148684,148686,148689,148691],{"class":60,"line":694},[58,148685,3671],{"class":92},[58,148687,148688],{"class":75}," item ",[58,148690,26687],{"class":92},[58,148692,148693],{"class":75}," data:\n",[58,148695,148696,148699,148701],{"class":60,"line":2270},[58,148697,148698],{"class":75},"    dates.append(item[",[58,148700,148476],{"class":386},[58,148702,5303],{"class":75},[58,148704,148705,148708,148710],{"class":60,"line":2275},[58,148706,148707],{"class":75},"    online_sales.append(item[",[58,148709,148485],{"class":386},[58,148711,5303],{"class":75},[58,148713,148714,148717,148719],{"class":60,"line":2289},[58,148715,148716],{"class":75},"    offline_sales.append(item[",[58,148718,148494],{"class":386},[58,148720,5303],{"class":75},[58,148722,148723],{"class":60,"line":2294},[58,148724,3046],{"emptyLinePlaceholder":720},[58,148726,148727,148729,148731],{"class":60,"line":2300},[58,148728,147731],{"class":75},[58,148730,383],{"class":92},[58,148732,147736],{"class":75},[58,148734,148735],{"class":60,"line":2321},[58,148736,148320],{"class":75},[58,148738,148739,148741,148743,148746,148748,148750,148752],{"class":60,"line":2326},[58,148740,147771],{"class":75},[58,148742,148327],{"class":386},[58,148744,148745],{"class":75},", online_sales, ",[58,148747,148224],{"class":5862},[58,148749,383],{"class":92},[58,148751,32120],{"class":82},[58,148753,799],{"class":75},[58,148755,148756,148758,148760,148763,148765,148767,148769],{"class":60,"line":2340},[58,148757,147771],{"class":75},[58,148759,148365],{"class":386},[58,148761,148762],{"class":75},", offline_sales, ",[58,148764,148224],{"class":5862},[58,148766,383],{"class":92},[58,148768,32120],{"class":82},[58,148770,799],{"class":75},[58,148772,148773],{"class":60,"line":2345},[58,148774,147947],{"class":75},[58,148776,148777,148779,148781,148783,148785,148787,148790],{"class":60,"line":2374},[58,148778,147952],{"class":5862},[58,148780,383],{"class":92},[58,148782,147957],{"class":75},[58,148784,52049],{"class":5862},[58,148786,383],{"class":92},[58,148788,148789],{"class":386},"\"销售趋势\"",[58,148791,38691],{"class":75},[58,148793,148794,148796,148798,148800,148802,148804,148806],{"class":60,"line":2379},[58,148795,148008],{"class":5862},[58,148797,383],{"class":92},[58,148799,148013],{"class":75},[58,148801,148016],{"class":5862},[58,148803,383],{"class":92},[58,148805,148021],{"class":386},[58,148807,38691],{"class":75},[58,148809,148810],{"class":60,"line":2396},[58,148811,799],{"class":75},[58,148813,148814,148816,148818],{"class":60,"line":2401},[58,148815,147803],{"class":75},[58,148817,148443],{"class":386},[58,148819,799],{"class":75},[14,148821,148823],{"id":148822},"_109-数据清洗","10.9 数据清洗",[175,148825,148826],{},"真实数据经常不整齐，需要清洗。",[175,148828,148829],{},"常见问题：",[19,148831,148832,148835,148838,148841],{},[22,148833,148834],{},"数字是字符串。",[22,148836,148837],{},"字段缺失。",[22,148839,148840],{},"空值。",[22,148842,148843],{},"日期格式不统一。",[175,148845,15779],{},[48,148847,148849],{"className":31022,"code":148848,"language":31024,"meta":53,"style":53},"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",[55,148850,148851,148860,148883,148903,148924,148928,148932,148940,148949,148953,148964,148978,148987,148992,148996,149004,149014,149018,149025],{"__ignoreMap":53},[58,148852,148853,148856,148858],{"class":60,"line":61},[58,148854,148855],{"class":75},"raw_data ",[58,148857,383],{"class":92},[58,148859,56081],{"class":75},[58,148861,148862,148865,148867,148869,148871,148873,148876,148878,148881],{"class":60,"line":68},[58,148863,148864],{"class":75},"    {",[58,148866,148476],{"class":386},[58,148868,86],{"class":75},[58,148870,147744],{"class":386},[58,148872,469],{"class":75},[58,148874,148875],{"class":386},"\"sales\"",[58,148877,86],{"class":75},[58,148879,148880],{"class":386},"\"100\"",[58,148882,5576],{"class":75},[58,148884,148885,148887,148889,148891,148893,148895,148897,148899,148901],{"class":60,"line":79},[58,148886,148864],{"class":75},[58,148888,148476],{"class":386},[58,148890,86],{"class":75},[58,148892,147749],{"class":386},[58,148894,469],{"class":75},[58,148896,148875],{"class":386},[58,148898,86],{"class":75},[58,148900,8298],{"class":386},[58,148902,5576],{"class":75},[58,148904,148905,148907,148909,148911,148913,148915,148917,148919,148922],{"class":60,"line":105},[58,148906,148864],{"class":75},[58,148908,148476],{"class":386},[58,148910,86],{"class":75},[58,148912,147754],{"class":386},[58,148914,469],{"class":75},[58,148916,148875],{"class":386},[58,148918,86],{"class":75},[58,148920,148921],{"class":386},"\"120\"",[58,148923,5576],{"class":75},[58,148925,148926],{"class":60,"line":627},[58,148927,33890],{"class":75},[58,148929,148930],{"class":60,"line":509},[58,148931,3046],{"emptyLinePlaceholder":720},[58,148933,148934,148936,148938],{"class":60,"line":559},[58,148935,148279],{"class":75},[58,148937,383],{"class":92},[58,148939,52476],{"class":75},[58,148941,148942,148945,148947],{"class":60,"line":654},[58,148943,148944],{"class":75},"sales ",[58,148946,383],{"class":92},[58,148948,52476],{"class":75},[58,148950,148951],{"class":60,"line":671},[58,148952,3046],{"emptyLinePlaceholder":720},[58,148954,148955,148957,148959,148961],{"class":60,"line":677},[58,148956,3671],{"class":92},[58,148958,148688],{"class":75},[58,148960,26687],{"class":92},[58,148962,148963],{"class":75}," raw_data:\n",[58,148965,148966,148969,148971,148974,148976],{"class":60,"line":2260},[58,148967,148968],{"class":75},"    value ",[58,148970,383],{"class":92},[58,148972,148973],{"class":75}," item.get(",[58,148975,148875],{"class":386},[58,148977,799],{"class":75},[58,148979,148980,148982,148984],{"class":60,"line":694},[58,148981,3747],{"class":92},[58,148983,39574],{"class":92},[58,148985,148986],{"class":75}," value:\n",[58,148988,148989],{"class":60,"line":2270},[58,148990,148991],{"class":92},"        continue\n",[58,148993,148994],{"class":60,"line":2275},[58,148995,3046],{"emptyLinePlaceholder":720},[58,148997,148998,149000,149002],{"class":60,"line":2289},[58,148999,148698],{"class":75},[58,149001,148476],{"class":386},[58,149003,5303],{"class":75},[58,149005,149006,149009,149011],{"class":60,"line":2294},[58,149007,149008],{"class":75},"    sales.append(",[58,149010,796],{"class":82},[58,149012,149013],{"class":75},"(value))\n",[58,149015,149016],{"class":60,"line":2300},[58,149017,3046],{"emptyLinePlaceholder":720},[58,149019,149020,149022],{"class":60,"line":2321},[58,149021,31059],{"class":82},[58,149023,149024],{"class":75},"(dates)\n",[58,149026,149027,149029],{"class":60,"line":2326},[58,149028,31059],{"class":82},[58,149030,149031],{"class":75},"(sales)\n",[14,149033,149035],{"id":149034},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[48,149037,149039],{"className":31022,"code":149038,"language":31024,"meta":53,"style":53},"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",[55,149040,149041,149055,149065,149069,149077,149098,149120,149142,149164,149186,149190,149194,149216,149237,149241,149249,149253,149257,149267,149276,149286,149302,149306,149310,149327,149343,149359,149375,149385,149389],{"__ignoreMap":53},[58,149042,149043,149045,149047,149049,149051,149053],{"class":60,"line":61},[58,149044,31381],{"class":92},[58,149046,147858],{"class":75},[58,149048,31036],{"class":92},[58,149050,147863],{"class":75},[58,149052,32027],{"class":92},[58,149054,147868],{"class":75},[58,149056,149057,149059,149061,149063],{"class":60,"line":68},[58,149058,31381],{"class":92},[58,149060,147717],{"class":75},[58,149062,31036],{"class":92},[58,149064,147722],{"class":75},[58,149066,149067],{"class":60,"line":79},[58,149068,3046],{"emptyLinePlaceholder":720},[58,149070,149071,149073,149075],{"class":60,"line":105},[58,149072,148944],{"class":75},[58,149074,383],{"class":92},[58,149076,56081],{"class":75},[58,149078,149079,149081,149083,149085,149088,149090,149092,149094,149096],{"class":60,"line":627},[58,149080,148864],{"class":75},[58,149082,148476],{"class":386},[58,149084,86],{"class":75},[58,149086,149087],{"class":386},"\"2024-10-01\"",[58,149089,469],{"class":75},[58,149091,84714],{"class":386},[58,149093,86],{"class":75},[58,149095,92652],{"class":82},[58,149097,5576],{"class":75},[58,149099,149100,149102,149104,149106,149109,149111,149113,149115,149118],{"class":60,"line":509},[58,149101,148864],{"class":75},[58,149103,148476],{"class":386},[58,149105,86],{"class":75},[58,149107,149108],{"class":386},"\"2024-10-02\"",[58,149110,469],{"class":75},[58,149112,84714],{"class":386},[58,149114,86],{"class":75},[58,149116,149117],{"class":82},"1800",[58,149119,5576],{"class":75},[58,149121,149122,149124,149126,149128,149131,149133,149135,149137,149140],{"class":60,"line":559},[58,149123,148864],{"class":75},[58,149125,148476],{"class":386},[58,149127,86],{"class":75},[58,149129,149130],{"class":386},"\"2024-10-03\"",[58,149132,469],{"class":75},[58,149134,84714],{"class":386},[58,149136,86],{"class":75},[58,149138,149139],{"class":82},"1500",[58,149141,5576],{"class":75},[58,149143,149144,149146,149148,149150,149153,149155,149157,149159,149162],{"class":60,"line":654},[58,149145,148864],{"class":75},[58,149147,148476],{"class":386},[58,149149,86],{"class":75},[58,149151,149152],{"class":386},"\"2024-10-04\"",[58,149154,469],{"class":75},[58,149156,84714],{"class":386},[58,149158,86],{"class":75},[58,149160,149161],{"class":82},"2100",[58,149163,5576],{"class":75},[58,149165,149166,149168,149170,149172,149175,149177,149179,149181,149184],{"class":60,"line":671},[58,149167,148864],{"class":75},[58,149169,148476],{"class":386},[58,149171,86],{"class":75},[58,149173,149174],{"class":386},"\"2024-10-05\"",[58,149176,469],{"class":75},[58,149178,84714],{"class":386},[58,149180,86],{"class":75},[58,149182,149183],{"class":82},"2600",[58,149185,5576],{"class":75},[58,149187,149188],{"class":60,"line":677},[58,149189,33890],{"class":75},[58,149191,149192],{"class":60,"line":2260},[58,149193,3046],{"emptyLinePlaceholder":720},[58,149195,149196,149198,149200,149203,149205,149207,149209,149211,149213],{"class":60,"line":694},[58,149197,148279],{"class":75},[58,149199,383],{"class":92},[58,149201,149202],{"class":75}," [item[",[58,149204,148476],{"class":386},[58,149206,5089],{"class":75},[58,149208,3671],{"class":92},[58,149210,148688],{"class":75},[58,149212,26687],{"class":92},[58,149214,149215],{"class":75}," sales]\n",[58,149217,149218,149221,149223,149225,149227,149229,149231,149233,149235],{"class":60,"line":2270},[58,149219,149220],{"class":75},"amounts ",[58,149222,383],{"class":92},[58,149224,149202],{"class":75},[58,149226,84714],{"class":386},[58,149228,5089],{"class":75},[58,149230,3671],{"class":92},[58,149232,148688],{"class":75},[58,149234,26687],{"class":92},[58,149236,149215],{"class":75},[58,149238,149239],{"class":60,"line":2275},[58,149240,3046],{"emptyLinePlaceholder":720},[58,149242,149243,149245,149247],{"class":60,"line":2289},[58,149244,147731],{"class":75},[58,149246,383],{"class":92},[58,149248,147736],{"class":75},[58,149250,149251],{"class":60,"line":2294},[58,149252,148320],{"class":75},[58,149254,149255],{"class":60,"line":2300},[58,149256,148128],{"class":75},[58,149258,149259,149261,149263,149265],{"class":60,"line":2321},[58,149260,148133],{"class":5862},[58,149262,383],{"class":92},[58,149264,147774],{"class":386},[58,149266,32110],{"class":75},[58,149268,149269,149271,149273],{"class":60,"line":2326},[58,149270,148144],{"class":5862},[58,149272,383],{"class":92},[58,149274,149275],{"class":75},"amounts,\n",[58,149277,149278,149280,149282,149284],{"class":60,"line":2340},[58,149279,148173],{"class":5862},[58,149281,383],{"class":92},[58,149283,32120],{"class":82},[58,149285,32110],{"class":75},[58,149287,149288,149290,149292,149294,149296,149298,149300],{"class":60,"line":2345},[58,149289,148184],{"class":5862},[58,149291,383],{"class":92},[58,149293,148189],{"class":75},[58,149295,148192],{"class":5862},[58,149297,383],{"class":92},[58,149299,32120],{"class":82},[58,149301,38691],{"class":75},[58,149303,149304],{"class":60,"line":2374},[58,149305,799],{"class":75},[58,149307,149308],{"class":60,"line":2379},[58,149309,147947],{"class":75},[58,149311,149312,149314,149316,149318,149320,149322,149325],{"class":60,"line":2396},[58,149313,147952],{"class":5862},[58,149315,383],{"class":92},[58,149317,147957],{"class":75},[58,149319,52049],{"class":5862},[58,149321,383],{"class":92},[58,149323,149324],{"class":386},"\"每日销售额\"",[58,149326,38691],{"class":75},[58,149328,149329,149331,149333,149335,149337,149339,149341],{"class":60,"line":2401},[58,149330,147971],{"class":5862},[58,149332,383],{"class":92},[58,149334,147976],{"class":75},[58,149336,80440],{"class":5862},[58,149338,383],{"class":92},[58,149340,147983],{"class":386},[58,149342,38691],{"class":75},[58,149344,149345,149347,149349,149351,149353,149355,149357],{"class":60,"line":2406},[58,149346,147990],{"class":5862},[58,149348,383],{"class":92},[58,149350,147976],{"class":75},[58,149352,80440],{"class":5862},[58,149354,383],{"class":92},[58,149356,148001],{"class":386},[58,149358,38691],{"class":75},[58,149360,149361,149363,149365,149367,149369,149371,149373],{"class":60,"line":2411},[58,149362,148008],{"class":5862},[58,149364,383],{"class":92},[58,149366,148013],{"class":75},[58,149368,148016],{"class":5862},[58,149370,383],{"class":92},[58,149372,148021],{"class":386},[58,149374,38691],{"class":75},[58,149376,149377,149380,149382],{"class":60,"line":2425},[58,149378,149379],{"class":5862},"    datazoom_opts",[58,149381,383],{"class":92},[58,149383,149384],{"class":75},"[opts.DataZoomOpts()],\n",[58,149386,149387],{"class":60,"line":2430},[58,149388,799],{"class":75},[58,149390,149391,149393,149396],{"class":60,"line":3223},[58,149392,147803],{"class":75},[58,149394,149395],{"class":386},"\"daily_sales.html\"",[58,149397,799],{"class":75},[175,149399,149400,149403],{},[55,149401,149402],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149405,149407],{"id":149406},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[175,149409,149410],{},"如果数据结构如下：",[48,149412,149414],{"className":31022,"code":149413,"language":31024,"meta":53,"style":53},"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",[55,149415,149416,149424,149432,149454,149475,149480,149487,149507,149527,149531],{"__ignoreMap":53},[58,149417,149418,149420,149422],{"class":60,"line":61},[58,149419,102287],{"class":75},[58,149421,383],{"class":92},[58,149423,76],{"class":75},[58,149425,149426,149429],{"class":60,"line":68},[58,149427,149428],{"class":386},"    \"北京\"",[58,149430,149431],{"class":75},": [\n",[58,149433,149434,149436,149438,149440,149443,149445,149448,149450,149452],{"class":60,"line":79},[58,149435,5563],{"class":75},[58,149437,148476],{"class":386},[58,149439,86],{"class":75},[58,149441,149442],{"class":386},"\"2024-01-01\"",[58,149444,469],{"class":75},[58,149446,149447],{"class":386},"\"confirm\"",[58,149449,86],{"class":75},[58,149451,1232],{"class":82},[58,149453,5576],{"class":75},[58,149455,149456,149458,149460,149462,149465,149467,149469,149471,149473],{"class":60,"line":105},[58,149457,5563],{"class":75},[58,149459,148476],{"class":386},[58,149461,86],{"class":75},[58,149463,149464],{"class":386},"\"2024-01-02\"",[58,149466,469],{"class":75},[58,149468,149447],{"class":386},[58,149470,86],{"class":75},[58,149472,1284],{"class":82},[58,149474,5576],{"class":75},[58,149476,149477],{"class":60,"line":627},[58,149478,149479],{"class":75},"    ],\n",[58,149481,149482,149485],{"class":60,"line":509},[58,149483,149484],{"class":386},"    \"上海\"",[58,149486,149431],{"class":75},[58,149488,149489,149491,149493,149495,149497,149499,149501,149503,149505],{"class":60,"line":559},[58,149490,5563],{"class":75},[58,149492,148476],{"class":386},[58,149494,86],{"class":75},[58,149496,149442],{"class":386},[58,149498,469],{"class":75},[58,149500,149447],{"class":386},[58,149502,86],{"class":75},[58,149504,1181],{"class":82},[58,149506,5576],{"class":75},[58,149508,149509,149511,149513,149515,149517,149519,149521,149523,149525],{"class":60,"line":654},[58,149510,5563],{"class":75},[58,149512,148476],{"class":386},[58,149514,86],{"class":75},[58,149516,149464],{"class":386},[58,149518,469],{"class":75},[58,149520,149447],{"class":386},[58,149522,86],{"class":75},[58,149524,1309],{"class":82},[58,149526,5576],{"class":75},[58,149528,149529],{"class":60,"line":671},[58,149530,149479],{"class":75},[58,149532,149533],{"class":60,"line":677},[58,149534,108],{"class":75},[175,149536,149537],{},"绘制多地区趋势：",[48,149539,149541],{"className":31022,"code":149540,"language":31024,"meta":53,"style":53},"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",[55,149542,149543,149557,149567,149571,149596,149600,149608,149612,149616,149628,149650,149663,149667,149671,149688,149704,149708],{"__ignoreMap":53},[58,149544,149545,149547,149549,149551,149553,149555],{"class":60,"line":61},[58,149546,31381],{"class":92},[58,149548,147858],{"class":75},[58,149550,31036],{"class":92},[58,149552,147863],{"class":75},[58,149554,32027],{"class":92},[58,149556,147868],{"class":75},[58,149558,149559,149561,149563,149565],{"class":60,"line":68},[58,149560,31381],{"class":92},[58,149562,147717],{"class":75},[58,149564,31036],{"class":92},[58,149566,147722],{"class":75},[58,149568,149569],{"class":60,"line":79},[58,149570,3046],{"emptyLinePlaceholder":720},[58,149572,149573,149575,149577,149579,149581,149583,149585,149587,149589,149592,149594],{"class":60,"line":105},[58,149574,148279],{"class":75},[58,149576,383],{"class":92},[58,149578,149202],{"class":75},[58,149580,148476],{"class":386},[58,149582,5089],{"class":75},[58,149584,3671],{"class":92},[58,149586,148688],{"class":75},[58,149588,26687],{"class":92},[58,149590,149591],{"class":75}," data[",[58,149593,69901],{"class":386},[58,149595,78158],{"class":75},[58,149597,149598],{"class":60,"line":627},[58,149599,3046],{"emptyLinePlaceholder":720},[58,149601,149602,149604,149606],{"class":60,"line":509},[58,149603,147731],{"class":75},[58,149605,383],{"class":92},[58,149607,147736],{"class":75},[58,149609,149610],{"class":60,"line":559},[58,149611,148320],{"class":75},[58,149613,149614],{"class":60,"line":654},[58,149615,3046],{"emptyLinePlaceholder":720},[58,149617,149618,149620,149623,149625],{"class":60,"line":671},[58,149619,3671],{"class":92},[58,149621,149622],{"class":75}," city, records ",[58,149624,26687],{"class":92},[58,149626,149627],{"class":75}," data.items():\n",[58,149629,149630,149633,149635,149637,149639,149641,149643,149645,149647],{"class":60,"line":677},[58,149631,149632],{"class":75},"    values ",[58,149634,383],{"class":92},[58,149636,149202],{"class":75},[58,149638,149447],{"class":386},[58,149640,5089],{"class":75},[58,149642,3671],{"class":92},[58,149644,148688],{"class":75},[58,149646,26687],{"class":92},[58,149648,149649],{"class":75}," records]\n",[58,149651,149652,149655,149657,149659,149661],{"class":60,"line":2260},[58,149653,149654],{"class":75},"    line.add_yaxis(city, values, ",[58,149656,148224],{"class":5862},[58,149658,383],{"class":92},[58,149660,32120],{"class":82},[58,149662,799],{"class":75},[58,149664,149665],{"class":60,"line":694},[58,149666,3046],{"emptyLinePlaceholder":720},[58,149668,149669],{"class":60,"line":2270},[58,149670,147947],{"class":75},[58,149672,149673,149675,149677,149679,149681,149683,149686],{"class":60,"line":2275},[58,149674,147952],{"class":5862},[58,149676,383],{"class":92},[58,149678,147957],{"class":75},[58,149680,52049],{"class":5862},[58,149682,383],{"class":92},[58,149684,149685],{"class":386},"\"多地区趋势图\"",[58,149687,38691],{"class":75},[58,149689,149690,149692,149694,149696,149698,149700,149702],{"class":60,"line":2289},[58,149691,148008],{"class":5862},[58,149693,383],{"class":92},[58,149695,148013],{"class":75},[58,149697,148016],{"class":5862},[58,149699,383],{"class":92},[58,149701,148021],{"class":386},[58,149703,38691],{"class":75},[58,149705,149706],{"class":60,"line":2294},[58,149707,799],{"class":75},[58,149709,149710,149712,149715],{"class":60,"line":2300},[58,149711,147803],{"class":75},[58,149713,149714],{"class":386},"\"trend.html\"",[58,149716,799],{"class":75},[175,149718,149719],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149721,149723],{"id":149722},"_1012-易错点","10.12 易错点",[19,149725,149726,149732,149738,149748,149754],{},[22,149727,149728,149731],{},[55,149729,149730],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[22,149733,149734,149737],{},[55,149735,149736],{},"render()"," 生成的是 HTML，不是图片。",[22,149739,149740,149741,149744,149745,29029],{},"JSON 字符串用 ",[55,149742,149743],{},"json.loads()","，JSON 文件用 ",[55,149746,149747],{},"json.load()",[22,149749,149750,149751,29029],{},"中文 JSON 保存时加 ",[55,149752,149753],{},"ensure_ascii=False",[22,149755,149756],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,149758,149760],{"id":149759},"_1013-本章练习","10.13 本章练习",[19,149762,149763,149766,149769,149772,149775],{},[22,149764,149765],{},"安装 pyecharts 并生成第一个折线图。",[22,149767,149768],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[22,149770,149771],{},"绘制两条折线，对比线上和线下销售额。",[22,149773,149774],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[22,149776,149777],{},"对含有空值的销售数据进行清洗后再绘图。",[702,149779,149780],{},"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":53,"searchDepth":68,"depth":68,"links":149782},[149783,149784,149785,149786,149787,149788,149789,149790,149791,149792,149793,149794,149795],{"id":147399,"depth":68,"text":147400},{"id":147474,"depth":68,"text":147475},{"id":147653,"depth":68,"text":147654},{"id":147704,"depth":68,"text":147705},{"id":147838,"depth":68,"text":147839},{"id":148114,"depth":68,"text":148115},{"id":148240,"depth":68,"text":148241},{"id":148451,"depth":68,"text":148452},{"id":148822,"depth":68,"text":148823},{"id":149034,"depth":68,"text":149035},{"id":149406,"depth":68,"text":149407},{"id":149722,"depth":68,"text":149723},{"id":149759,"depth":68,"text":149760},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147391,"description":717},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149802,"title":149803,"body":149804,"description":717,"extension":718,"meta":152164,"navigation":720,"path":152165,"seo":152166,"stem":152167,"__hash__":152168},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149805,"toc":152141},[149806,149809,149813,149816,149819,149895,149898,149989,149992,149996,149999,150043,150056,150060,150063,150130,150133,150137,150140,150224,150232,150236,150241,150382,150385,150396,150402,150408,150522,150526,150529,150532,150785,150788,150792,150795,150899,150902,150906,151057,151061,151068,151181,151185,151188,151294,151297,151301,151304,151335,151338,151443,151446,151450,151454,151464,151532,151536,151543,151607,151610,151614,151620,151716,151725,151729,152053,152062,152066,152094,152098,152138],[10,149807,149803],{"id":149808},"_11-面向对象基础",[14,149810,149812],{"id":149811},"_111-什么是面向对象","11.1 什么是面向对象",[175,149814,149815],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[175,149817,149818],{},"面向过程：",[48,149820,149822],{"className":31022,"code":149821,"language":31024,"meta":53,"style":53},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[55,149823,149824,149833,149841,149845,149855,149886,149890],{"__ignoreMap":53},[58,149825,149826,149828,149830],{"class":60,"line":61},[58,149827,147015],{"class":75},[58,149829,383],{"class":92},[58,149831,149832],{"class":386}," \"小明\"\n",[58,149834,149835,149837,149839],{"class":60,"line":68},[58,149836,147025],{"class":75},[58,149838,383],{"class":92},[58,149840,147030],{"class":82},[58,149842,149843],{"class":60,"line":79},[58,149844,3046],{"emptyLinePlaceholder":720},[58,149846,149847,149849,149852],{"class":60,"line":105},[58,149848,32591],{"class":92},[58,149850,149851],{"class":379}," introduce",[58,149853,149854],{"class":75},"(name, age):\n",[58,149856,149857,149859,149861,149863,149866,149868,149870,149872,149875,149877,149879,149881,149884],{"class":60,"line":627},[58,149858,31943],{"class":82},[58,149860,793],{"class":75},[58,149862,843],{"class":92},[58,149864,149865],{"class":386},"\"我叫",[58,149867,1681],{"class":82},[58,149869,80440],{"class":75},[58,149871,1730],{"class":82},[58,149873,149874],{"class":386},"，今年",[58,149876,1681],{"class":82},[58,149878,70853],{"class":75},[58,149880,1730],{"class":82},[58,149882,149883],{"class":386},"岁\"",[58,149885,799],{"class":75},[58,149887,149888],{"class":60,"line":509},[58,149889,3046],{"emptyLinePlaceholder":720},[58,149891,149892],{"class":60,"line":559},[58,149893,149894],{"class":75},"introduce(name, age)\n",[175,149896,149897],{},"面向对象：",[48,149899,149901],{"className":31022,"code":149900,"language":31024,"meta":53,"style":53},"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",[55,149902,149903,149911,149919,149948,149952,149956,149966,149975,149984],{"__ignoreMap":53},[58,149904,149905,149907,149909],{"class":60,"line":61},[58,149906,15338],{"class":92},[58,149908,8544],{"class":379},[58,149910,4385],{"class":75},[58,149912,149913,149915,149917],{"class":60,"line":68},[58,149914,31445],{"class":92},[58,149916,149851],{"class":379},[58,149918,31451],{"class":75},[58,149920,149921,149923,149925,149927,149929,149932,149934,149936,149938,149940,149942,149944,149946],{"class":60,"line":79},[58,149922,33095],{"class":82},[58,149924,793],{"class":75},[58,149926,843],{"class":92},[58,149928,149865],{"class":386},[58,149930,149931],{"class":82},"{self",[58,149933,80931],{"class":75},[58,149935,1730],{"class":82},[58,149937,149874],{"class":386},[58,149939,149931],{"class":82},[58,149941,80943],{"class":75},[58,149943,1730],{"class":82},[58,149945,149883],{"class":386},[58,149947,799],{"class":75},[58,149949,149950],{"class":60,"line":105},[58,149951,3046],{"emptyLinePlaceholder":720},[58,149953,149954],{"class":60,"line":627},[58,149955,3046],{"emptyLinePlaceholder":720},[58,149957,149958,149961,149963],{"class":60,"line":509},[58,149959,149960],{"class":75},"student ",[58,149962,383],{"class":92},[58,149964,149965],{"class":75}," Student()\n",[58,149967,149968,149971,149973],{"class":60,"line":559},[58,149969,149970],{"class":75},"student.name ",[58,149972,383],{"class":92},[58,149974,149832],{"class":386},[58,149976,149977,149980,149982],{"class":60,"line":654},[58,149978,149979],{"class":75},"student.age ",[58,149981,383],{"class":92},[58,149983,147030],{"class":82},[58,149985,149986],{"class":60,"line":671},[58,149987,149988],{"class":75},"student.introduce()\n",[175,149990,149991],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,149993,149995],{"id":149994},"_112-类和对象","11.2 类和对象",[175,149997,149998],{},"类是模板，对象是根据模板创建出来的具体实例。",[48,150000,150002],{"className":31022,"code":150001,"language":31024,"meta":53,"style":53},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[55,150003,150004,150012,150017,150021,150025,150034],{"__ignoreMap":53},[58,150005,150006,150008,150010],{"class":60,"line":61},[58,150007,15338],{"class":92},[58,150009,8544],{"class":379},[58,150011,4385],{"class":75},[58,150013,150014],{"class":60,"line":68},[58,150015,150016],{"class":92},"    pass\n",[58,150018,150019],{"class":60,"line":79},[58,150020,3046],{"emptyLinePlaceholder":720},[58,150022,150023],{"class":60,"line":105},[58,150024,3046],{"emptyLinePlaceholder":720},[58,150026,150027,150030,150032],{"class":60,"line":627},[58,150028,150029],{"class":75},"student1 ",[58,150031,383],{"class":92},[58,150033,149965],{"class":75},[58,150035,150036,150039,150041],{"class":60,"line":509},[58,150037,150038],{"class":75},"student2 ",[58,150040,383],{"class":92},[58,150042,149965],{"class":75},[175,150044,150045,150048,150049,101647,150052,150055],{},[55,150046,150047],{},"Student"," 是类，",[55,150050,150051],{},"student1",[55,150053,150054],{},"student2"," 是对象。",[14,150057,150059],{"id":150058},"_113-属性","11.3 属性",[175,150061,150062],{},"属性是对象保存的数据。",[48,150064,150066],{"className":31022,"code":150065,"language":31024,"meta":53,"style":53},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[55,150067,150068,150076,150080,150084,150088,150096,150104,150112,150116,150123],{"__ignoreMap":53},[58,150069,150070,150072,150074],{"class":60,"line":61},[58,150071,15338],{"class":92},[58,150073,8544],{"class":379},[58,150075,4385],{"class":75},[58,150077,150078],{"class":60,"line":68},[58,150079,150016],{"class":92},[58,150081,150082],{"class":60,"line":79},[58,150083,3046],{"emptyLinePlaceholder":720},[58,150085,150086],{"class":60,"line":105},[58,150087,3046],{"emptyLinePlaceholder":720},[58,150089,150090,150092,150094],{"class":60,"line":627},[58,150091,149960],{"class":75},[58,150093,383],{"class":92},[58,150095,149965],{"class":75},[58,150097,150098,150100,150102],{"class":60,"line":509},[58,150099,149970],{"class":75},[58,150101,383],{"class":92},[58,150103,149832],{"class":386},[58,150105,150106,150108,150110],{"class":60,"line":559},[58,150107,149979],{"class":75},[58,150109,383],{"class":92},[58,150111,147030],{"class":82},[58,150113,150114],{"class":60,"line":654},[58,150115,3046],{"emptyLinePlaceholder":720},[58,150117,150118,150120],{"class":60,"line":671},[58,150119,31059],{"class":82},[58,150121,150122],{"class":75},"(student.name)\n",[58,150124,150125,150127],{"class":60,"line":677},[58,150126,31059],{"class":82},[58,150128,150129],{"class":75},"(student.age)\n",[175,150131,150132],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150134,150136],{"id":150135},"_114-方法","11.4 方法",[175,150138,150139],{},"类中的函数叫方法。",[48,150141,150142],{"className":31022,"code":149900,"language":31024,"meta":53,"style":53},[55,150143,150144,150152,150160,150188,150192,150196,150204,150212,150220],{"__ignoreMap":53},[58,150145,150146,150148,150150],{"class":60,"line":61},[58,150147,15338],{"class":92},[58,150149,8544],{"class":379},[58,150151,4385],{"class":75},[58,150153,150154,150156,150158],{"class":60,"line":68},[58,150155,31445],{"class":92},[58,150157,149851],{"class":379},[58,150159,31451],{"class":75},[58,150161,150162,150164,150166,150168,150170,150172,150174,150176,150178,150180,150182,150184,150186],{"class":60,"line":79},[58,150163,33095],{"class":82},[58,150165,793],{"class":75},[58,150167,843],{"class":92},[58,150169,149865],{"class":386},[58,150171,149931],{"class":82},[58,150173,80931],{"class":75},[58,150175,1730],{"class":82},[58,150177,149874],{"class":386},[58,150179,149931],{"class":82},[58,150181,80943],{"class":75},[58,150183,1730],{"class":82},[58,150185,149883],{"class":386},[58,150187,799],{"class":75},[58,150189,150190],{"class":60,"line":105},[58,150191,3046],{"emptyLinePlaceholder":720},[58,150193,150194],{"class":60,"line":627},[58,150195,3046],{"emptyLinePlaceholder":720},[58,150197,150198,150200,150202],{"class":60,"line":509},[58,150199,149960],{"class":75},[58,150201,383],{"class":92},[58,150203,149965],{"class":75},[58,150205,150206,150208,150210],{"class":60,"line":559},[58,150207,149970],{"class":75},[58,150209,383],{"class":92},[58,150211,149832],{"class":386},[58,150213,150214,150216,150218],{"class":60,"line":654},[58,150215,149979],{"class":75},[58,150217,383],{"class":92},[58,150219,147030],{"class":82},[58,150221,150222],{"class":60,"line":671},[58,150223,149988],{"class":75},[175,150225,150226,150228,150229,150231],{},[55,150227,31467],{}," 表示当前对象。调用方法时不需要手动传入 ",[55,150230,31467],{},"，Python 会自动传。",[14,150233,150235],{"id":150234},"_115-构造方法__init__","11.5 构造方法__init__",[175,150237,150238,150240],{},[55,150239,31473],{}," 在对象创建时自动执行，用于初始化属性。",[48,150242,150244],{"className":31022,"code":150243,"language":31024,"meta":53,"style":53},"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",[55,150245,150246,150254,150263,150275,150287,150298,150302,150310,150348,150352,150356,150378],{"__ignoreMap":53},[58,150247,150248,150250,150252],{"class":60,"line":61},[58,150249,15338],{"class":92},[58,150251,8544],{"class":379},[58,150253,4385],{"class":75},[58,150255,150256,150258,150260],{"class":60,"line":68},[58,150257,31445],{"class":92},[58,150259,31448],{"class":82},[58,150261,150262],{"class":75},"(self, name, age, score):\n",[58,150264,150265,150267,150270,150272],{"class":60,"line":79},[58,150266,31489],{"class":82},[58,150268,150269],{"class":75},".name ",[58,150271,383],{"class":92},[58,150273,150274],{"class":75}," name\n",[58,150276,150277,150279,150282,150284],{"class":60,"line":105},[58,150278,31489],{"class":82},[58,150280,150281],{"class":75},".age ",[58,150283,383],{"class":92},[58,150285,150286],{"class":75}," age\n",[58,150288,150289,150291,150294,150296],{"class":60,"line":627},[58,150290,31489],{"class":82},[58,150292,150293],{"class":75},".score ",[58,150295,383],{"class":92},[58,150297,2227],{"class":75},[58,150299,150300],{"class":60,"line":509},[58,150301,3046],{"emptyLinePlaceholder":720},[58,150303,150304,150306,150308],{"class":60,"line":559},[58,150305,31445],{"class":92},[58,150307,149851],{"class":379},[58,150309,31451],{"class":75},[58,150311,150312,150314,150316,150318,150320,150322,150324,150326,150328,150330,150332,150334,150337,150339,150342,150344,150346],{"class":60,"line":654},[58,150313,33095],{"class":82},[58,150315,793],{"class":75},[58,150317,843],{"class":92},[58,150319,149865],{"class":386},[58,150321,149931],{"class":82},[58,150323,80931],{"class":75},[58,150325,1730],{"class":82},[58,150327,149874],{"class":386},[58,150329,149931],{"class":82},[58,150331,80943],{"class":75},[58,150333,1730],{"class":82},[58,150335,150336],{"class":386},"岁，成绩",[58,150338,149931],{"class":82},[58,150340,150341],{"class":75},".score",[58,150343,1730],{"class":82},[58,150345,1037],{"class":386},[58,150347,799],{"class":75},[58,150349,150350],{"class":60,"line":671},[58,150351,3046],{"emptyLinePlaceholder":720},[58,150353,150354],{"class":60,"line":677},[58,150355,3046],{"emptyLinePlaceholder":720},[58,150357,150358,150360,150362,150365,150368,150370,150372,150374,150376],{"class":60,"line":2260},[58,150359,149960],{"class":75},[58,150361,383],{"class":92},[58,150363,150364],{"class":75}," Student(",[58,150366,150367],{"class":386},"\"小明\"",[58,150369,469],{"class":75},[58,150371,1436],{"class":82},[58,150373,469],{"class":75},[58,150375,1773],{"class":82},[58,150377,799],{"class":75},[58,150379,150380],{"class":60,"line":694},[58,150381,149988],{"class":75},[175,150383,150384],{},"构造方法的好处：",[19,150386,150387,150390,150393],{},[22,150388,150389],{},"创建对象时必须提供必要数据。",[22,150391,150392],{},"属性初始化集中，不容易漏。",[22,150394,150395],{},"对象状态更完整。",[14,150397,150399,150400],{"id":150398},"_116-str","11.6 ",[25,150401,1952],{},[175,150403,150404,150405,29029],{},"直接打印对象时，默认输出不直观。可以定义 ",[55,150406,150407],{},"__str__",[48,150409,150411],{"className":31022,"code":150410,"language":31024,"meta":53,"style":53},"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",[55,150412,150413,150421,150430,150440,150450,150454,150463,150491,150495,150499,150515],{"__ignoreMap":53},[58,150414,150415,150417,150419],{"class":60,"line":61},[58,150416,15338],{"class":92},[58,150418,8544],{"class":379},[58,150420,4385],{"class":75},[58,150422,150423,150425,150427],{"class":60,"line":68},[58,150424,31445],{"class":92},[58,150426,31448],{"class":82},[58,150428,150429],{"class":75},"(self, name, age):\n",[58,150431,150432,150434,150436,150438],{"class":60,"line":79},[58,150433,31489],{"class":82},[58,150435,150269],{"class":75},[58,150437,383],{"class":92},[58,150439,150274],{"class":75},[58,150441,150442,150444,150446,150448],{"class":60,"line":105},[58,150443,31489],{"class":82},[58,150445,150281],{"class":75},[58,150447,383],{"class":92},[58,150449,150286],{"class":75},[58,150451,150452],{"class":60,"line":627},[58,150453,3046],{"emptyLinePlaceholder":720},[58,150455,150456,150458,150461],{"class":60,"line":509},[58,150457,31445],{"class":92},[58,150459,150460],{"class":82}," __str__",[58,150462,31451],{"class":75},[58,150464,150465,150467,150470,150473,150475,150477,150479,150482,150484,150486,150488],{"class":60,"line":559},[58,150466,15396],{"class":92},[58,150468,150469],{"class":92}," f",[58,150471,150472],{"class":386},"\"Student(name=",[58,150474,149931],{"class":82},[58,150476,80931],{"class":75},[58,150478,1730],{"class":82},[58,150480,150481],{"class":386},", age=",[58,150483,149931],{"class":82},[58,150485,80943],{"class":75},[58,150487,1730],{"class":82},[58,150489,150490],{"class":386},")\"\n",[58,150492,150493],{"class":60,"line":654},[58,150494,3046],{"emptyLinePlaceholder":720},[58,150496,150497],{"class":60,"line":671},[58,150498,3046],{"emptyLinePlaceholder":720},[58,150500,150501,150503,150505,150507,150509,150511,150513],{"class":60,"line":677},[58,150502,149960],{"class":75},[58,150504,383],{"class":92},[58,150506,150364],{"class":75},[58,150508,150367],{"class":386},[58,150510,469],{"class":75},[58,150512,1436],{"class":82},[58,150514,799],{"class":75},[58,150516,150517,150519],{"class":60,"line":2260},[58,150518,31059],{"class":82},[58,150520,150521],{"class":75},"(student)\n",[14,150523,150525],{"id":150524},"_117-封装","11.7 封装",[175,150527,150528],{},"封装就是把数据和方法放到类中，并控制访问方式。",[175,150530,150531],{},"Python 中以双下划线开头的属性通常视为私有属性。",[48,150533,150535],{"className":31022,"code":150534,"language":31024,"meta":53,"style":53},"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",[55,150536,150537,150546,150555,150567,150579,150583,150592,150601,150605,150615,150628,150639,150644,150655,150659,150668,150680,150691,150695,150708,150719,150723,150734,150738,150742,150760,150769,150778],{"__ignoreMap":53},[58,150538,150539,150541,150544],{"class":60,"line":61},[58,150540,15338],{"class":92},[58,150542,150543],{"class":379}," Account",[58,150545,4385],{"class":75},[58,150547,150548,150550,150552],{"class":60,"line":68},[58,150549,31445],{"class":92},[58,150551,31448],{"class":82},[58,150553,150554],{"class":75},"(self, owner, balance):\n",[58,150556,150557,150559,150562,150564],{"class":60,"line":79},[58,150558,31489],{"class":82},[58,150560,150561],{"class":75},".owner ",[58,150563,383],{"class":92},[58,150565,150566],{"class":75}," owner\n",[58,150568,150569,150571,150574,150576],{"class":60,"line":105},[58,150570,31489],{"class":82},[58,150572,150573],{"class":75},".__balance ",[58,150575,383],{"class":92},[58,150577,150578],{"class":75}," balance\n",[58,150580,150581],{"class":60,"line":627},[58,150582,3046],{"emptyLinePlaceholder":720},[58,150584,150585,150587,150590],{"class":60,"line":509},[58,150586,31445],{"class":92},[58,150588,150589],{"class":379}," get_balance",[58,150591,31451],{"class":75},[58,150593,150594,150596,150598],{"class":60,"line":559},[58,150595,15396],{"class":92},[58,150597,39517],{"class":82},[58,150599,150600],{"class":75},".__balance\n",[58,150602,150603],{"class":60,"line":654},[58,150604,3046],{"emptyLinePlaceholder":720},[58,150606,150607,150609,150612],{"class":60,"line":671},[58,150608,31445],{"class":92},[58,150610,150611],{"class":379}," deposit",[58,150613,150614],{"class":75},"(self, money):\n",[58,150616,150617,150619,150622,150624,150626],{"class":60,"line":677},[58,150618,3143],{"class":92},[58,150620,150621],{"class":75}," money ",[58,150623,2236],{"class":92},[58,150625,4739],{"class":82},[58,150627,4385],{"class":75},[58,150629,150630,150632,150634,150637],{"class":60,"line":2260},[58,150631,35294],{"class":82},[58,150633,793],{"class":75},[58,150635,150636],{"class":386},"\"存款金额必须大于0\"",[58,150638,799],{"class":75},[58,150640,150641],{"class":60,"line":694},[58,150642,150643],{"class":92},"            return\n",[58,150645,150646,150648,150650,150652],{"class":60,"line":2270},[58,150647,31489],{"class":82},[58,150649,150573],{"class":75},[58,150651,10122],{"class":92},[58,150653,150654],{"class":75}," money\n",[58,150656,150657],{"class":60,"line":2275},[58,150658,3046],{"emptyLinePlaceholder":720},[58,150660,150661,150663,150666],{"class":60,"line":2289},[58,150662,31445],{"class":92},[58,150664,150665],{"class":379}," withdraw",[58,150667,150614],{"class":75},[58,150669,150670,150672,150674,150676,150678],{"class":60,"line":2294},[58,150671,3143],{"class":92},[58,150673,150621],{"class":75},[58,150675,2236],{"class":92},[58,150677,4739],{"class":82},[58,150679,4385],{"class":75},[58,150681,150682,150684,150686,150689],{"class":60,"line":2300},[58,150683,35294],{"class":82},[58,150685,793],{"class":75},[58,150687,150688],{"class":386},"\"取款金额必须大于0\"",[58,150690,799],{"class":75},[58,150692,150693],{"class":60,"line":2321},[58,150694,150643],{"class":92},[58,150696,150697,150699,150701,150703,150705],{"class":60,"line":2326},[58,150698,3143],{"class":92},[58,150700,150621],{"class":75},[58,150702,1744],{"class":92},[58,150704,39517],{"class":82},[58,150706,150707],{"class":75},".__balance:\n",[58,150709,150710,150712,150714,150717],{"class":60,"line":2340},[58,150711,35294],{"class":82},[58,150713,793],{"class":75},[58,150715,150716],{"class":386},"\"余额不足\"",[58,150718,799],{"class":75},[58,150720,150721],{"class":60,"line":2345},[58,150722,150643],{"class":92},[58,150724,150725,150727,150729,150732],{"class":60,"line":2374},[58,150726,31489],{"class":82},[58,150728,150573],{"class":75},[58,150730,150731],{"class":92},"-=",[58,150733,150654],{"class":75},[58,150735,150736],{"class":60,"line":2379},[58,150737,3046],{"emptyLinePlaceholder":720},[58,150739,150740],{"class":60,"line":2396},[58,150741,3046],{"emptyLinePlaceholder":720},[58,150743,150744,150747,150749,150752,150754,150756,150758],{"class":60,"line":2401},[58,150745,150746],{"class":75},"account ",[58,150748,383],{"class":92},[58,150750,150751],{"class":75}," Account(",[58,150753,150367],{"class":386},[58,150755,469],{"class":75},[58,150757,7056],{"class":82},[58,150759,799],{"class":75},[58,150761,150762,150765,150767],{"class":60,"line":2406},[58,150763,150764],{"class":75},"account.deposit(",[58,150766,2369],{"class":82},[58,150768,799],{"class":75},[58,150770,150771,150774,150776],{"class":60,"line":2411},[58,150772,150773],{"class":75},"account.withdraw(",[58,150775,1097],{"class":82},[58,150777,799],{"class":75},[58,150779,150780,150782],{"class":60,"line":2425},[58,150781,31059],{"class":82},[58,150783,150784],{"class":75},"(account.get_balance())\n",[175,150786,150787],{},"封装的意义是避免外部随意修改内部状态。",[14,150789,150791],{"id":150790},"_118-继承","11.8 继承",[175,150793,150794],{},"继承可以让子类复用父类的属性和方法。",[48,150796,150798],{"className":31022,"code":150797,"language":31024,"meta":53,"style":53},"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",[55,150799,150800,150809,150818,150829,150833,150837,150851,150860,150871,150875,150879,150889,150894],{"__ignoreMap":53},[58,150801,150802,150804,150807],{"class":60,"line":61},[58,150803,15338],{"class":92},[58,150805,150806],{"class":379}," Animal",[58,150808,4385],{"class":75},[58,150810,150811,150813,150816],{"class":60,"line":68},[58,150812,31445],{"class":92},[58,150814,150815],{"class":379}," eat",[58,150817,31451],{"class":75},[58,150819,150820,150822,150824,150827],{"class":60,"line":79},[58,150821,33095],{"class":82},[58,150823,793],{"class":75},[58,150825,150826],{"class":386},"\"吃东西\"",[58,150828,799],{"class":75},[58,150830,150831],{"class":60,"line":105},[58,150832,3046],{"emptyLinePlaceholder":720},[58,150834,150835],{"class":60,"line":627},[58,150836,3046],{"emptyLinePlaceholder":720},[58,150838,150839,150841,150844,150846,150849],{"class":60,"line":509},[58,150840,15338],{"class":92},[58,150842,150843],{"class":379}," Dog",[58,150845,793],{"class":75},[58,150847,150848],{"class":379},"Animal",[58,150850,31430],{"class":75},[58,150852,150853,150855,150858],{"class":60,"line":559},[58,150854,31445],{"class":92},[58,150856,150857],{"class":379}," bark",[58,150859,31451],{"class":75},[58,150861,150862,150864,150866,150869],{"class":60,"line":654},[58,150863,33095],{"class":82},[58,150865,793],{"class":75},[58,150867,150868],{"class":386},"\"汪汪\"",[58,150870,799],{"class":75},[58,150872,150873],{"class":60,"line":671},[58,150874,3046],{"emptyLinePlaceholder":720},[58,150876,150877],{"class":60,"line":677},[58,150878,3046],{"emptyLinePlaceholder":720},[58,150880,150881,150884,150886],{"class":60,"line":2260},[58,150882,150883],{"class":75},"dog ",[58,150885,383],{"class":92},[58,150887,150888],{"class":75}," Dog()\n",[58,150890,150891],{"class":60,"line":694},[58,150892,150893],{"class":75},"dog.eat()\n",[58,150895,150896],{"class":60,"line":2270},[58,150897,150898],{"class":75},"dog.bark()\n",[175,150900,150901],{},"子类可以扩展新方法，也可以重写父类方法。",[14,150903,150905],{"id":150904},"_119-方法重写","11.9 方法重写",[48,150907,150909],{"className":31022,"code":150908,"language":31024,"meta":53,"style":53},"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",[55,150910,150911,150919,150928,150939,150943,150947,150959,150967,150977,150981,150985,150998,151006,151017,151021,151025,151033,151043,151047,151052],{"__ignoreMap":53},[58,150912,150913,150915,150917],{"class":60,"line":61},[58,150914,15338],{"class":92},[58,150916,150806],{"class":379},[58,150918,4385],{"class":75},[58,150920,150921,150923,150926],{"class":60,"line":68},[58,150922,31445],{"class":92},[58,150924,150925],{"class":379}," speak",[58,150927,31451],{"class":75},[58,150929,150930,150932,150934,150937],{"class":60,"line":79},[58,150931,33095],{"class":82},[58,150933,793],{"class":75},[58,150935,150936],{"class":386},"\"动物叫\"",[58,150938,799],{"class":75},[58,150940,150941],{"class":60,"line":105},[58,150942,3046],{"emptyLinePlaceholder":720},[58,150944,150945],{"class":60,"line":627},[58,150946,3046],{"emptyLinePlaceholder":720},[58,150948,150949,150951,150953,150955,150957],{"class":60,"line":509},[58,150950,15338],{"class":92},[58,150952,150843],{"class":379},[58,150954,793],{"class":75},[58,150956,150848],{"class":379},[58,150958,31430],{"class":75},[58,150960,150961,150963,150965],{"class":60,"line":559},[58,150962,31445],{"class":92},[58,150964,150925],{"class":379},[58,150966,31451],{"class":75},[58,150968,150969,150971,150973,150975],{"class":60,"line":654},[58,150970,33095],{"class":82},[58,150972,793],{"class":75},[58,150974,150868],{"class":386},[58,150976,799],{"class":75},[58,150978,150979],{"class":60,"line":671},[58,150980,3046],{"emptyLinePlaceholder":720},[58,150982,150983],{"class":60,"line":677},[58,150984,3046],{"emptyLinePlaceholder":720},[58,150986,150987,150989,150992,150994,150996],{"class":60,"line":2260},[58,150988,15338],{"class":92},[58,150990,150991],{"class":379}," Cat",[58,150993,793],{"class":75},[58,150995,150848],{"class":379},[58,150997,31430],{"class":75},[58,150999,151000,151002,151004],{"class":60,"line":694},[58,151001,31445],{"class":92},[58,151003,150925],{"class":379},[58,151005,31451],{"class":75},[58,151007,151008,151010,151012,151015],{"class":60,"line":2270},[58,151009,33095],{"class":82},[58,151011,793],{"class":75},[58,151013,151014],{"class":386},"\"喵喵\"",[58,151016,799],{"class":75},[58,151018,151019],{"class":60,"line":2275},[58,151020,3046],{"emptyLinePlaceholder":720},[58,151022,151023],{"class":60,"line":2289},[58,151024,3046],{"emptyLinePlaceholder":720},[58,151026,151027,151029,151031],{"class":60,"line":2294},[58,151028,150883],{"class":75},[58,151030,383],{"class":92},[58,151032,150888],{"class":75},[58,151034,151035,151038,151040],{"class":60,"line":2300},[58,151036,151037],{"class":75},"cat ",[58,151039,383],{"class":92},[58,151041,151042],{"class":75}," Cat()\n",[58,151044,151045],{"class":60,"line":2321},[58,151046,3046],{"emptyLinePlaceholder":720},[58,151048,151049],{"class":60,"line":2326},[58,151050,151051],{"class":75},"dog.speak()\n",[58,151053,151054],{"class":60,"line":2340},[58,151055,151056],{"class":75},"cat.speak()\n",[14,151058,151060],{"id":151059},"_1110-super","11.10 super",[175,151062,151063,151064,151067],{},"子类可以通过 ",[55,151065,151066],{},"super()"," 调用父类方法。",[48,151069,151071],{"className":31022,"code":151070,"language":31024,"meta":53,"style":53},"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",[55,151072,151073,151081,151090,151100,151104,151108,151120,151129,151140,151150,151154,151158,151174],{"__ignoreMap":53},[58,151074,151075,151077,151079],{"class":60,"line":61},[58,151076,15338],{"class":92},[58,151078,16213],{"class":379},[58,151080,4385],{"class":75},[58,151082,151083,151085,151087],{"class":60,"line":68},[58,151084,31445],{"class":92},[58,151086,31448],{"class":82},[58,151088,151089],{"class":75},"(self, name):\n",[58,151091,151092,151094,151096,151098],{"class":60,"line":79},[58,151093,31489],{"class":82},[58,151095,150269],{"class":75},[58,151097,383],{"class":92},[58,151099,150274],{"class":75},[58,151101,151102],{"class":60,"line":105},[58,151103,3046],{"emptyLinePlaceholder":720},[58,151105,151106],{"class":60,"line":627},[58,151107,3046],{"emptyLinePlaceholder":720},[58,151109,151110,151112,151114,151116,151118],{"class":60,"line":509},[58,151111,15338],{"class":92},[58,151113,8544],{"class":379},[58,151115,793],{"class":75},[58,151117,19689],{"class":379},[58,151119,31430],{"class":75},[58,151121,151122,151124,151126],{"class":60,"line":559},[58,151123,31445],{"class":92},[58,151125,31448],{"class":82},[58,151127,151128],{"class":75},"(self, name, score):\n",[58,151130,151131,151133,151135,151137],{"class":60,"line":654},[58,151132,31461],{"class":82},[58,151134,17904],{"class":75},[58,151136,31473],{"class":82},[58,151138,151139],{"class":75},"(name)\n",[58,151141,151142,151144,151146,151148],{"class":60,"line":671},[58,151143,31489],{"class":82},[58,151145,150293],{"class":75},[58,151147,383],{"class":92},[58,151149,2227],{"class":75},[58,151151,151152],{"class":60,"line":677},[58,151153,3046],{"emptyLinePlaceholder":720},[58,151155,151156],{"class":60,"line":2260},[58,151157,3046],{"emptyLinePlaceholder":720},[58,151159,151160,151162,151164,151166,151168,151170,151172],{"class":60,"line":694},[58,151161,149960],{"class":75},[58,151163,383],{"class":92},[58,151165,150364],{"class":75},[58,151167,150367],{"class":386},[58,151169,469],{"class":75},[58,151171,1773],{"class":82},[58,151173,799],{"class":75},[58,151175,151176,151178],{"class":60,"line":2270},[58,151177,31059],{"class":82},[58,151179,151180],{"class":75},"(student.name, student.score)\n",[14,151182,151184],{"id":151183},"_1111-多态","11.11 多态",[175,151186,151187],{},"多态指不同对象响应同一个方法，表现出不同结果。",[48,151189,151191],{"className":31022,"code":151190,"language":31024,"meta":53,"style":53},"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",[55,151192,151193,151201,151209,151219,151223,151227,151235,151243,151253,151257,151261,151271,151276,151280,151284,151289],{"__ignoreMap":53},[58,151194,151195,151197,151199],{"class":60,"line":61},[58,151196,15338],{"class":92},[58,151198,150843],{"class":379},[58,151200,4385],{"class":75},[58,151202,151203,151205,151207],{"class":60,"line":68},[58,151204,31445],{"class":92},[58,151206,150925],{"class":379},[58,151208,31451],{"class":75},[58,151210,151211,151213,151215,151217],{"class":60,"line":79},[58,151212,33095],{"class":82},[58,151214,793],{"class":75},[58,151216,150868],{"class":386},[58,151218,799],{"class":75},[58,151220,151221],{"class":60,"line":105},[58,151222,3046],{"emptyLinePlaceholder":720},[58,151224,151225],{"class":60,"line":627},[58,151226,3046],{"emptyLinePlaceholder":720},[58,151228,151229,151231,151233],{"class":60,"line":509},[58,151230,15338],{"class":92},[58,151232,150991],{"class":379},[58,151234,4385],{"class":75},[58,151236,151237,151239,151241],{"class":60,"line":559},[58,151238,31445],{"class":92},[58,151240,150925],{"class":379},[58,151242,31451],{"class":75},[58,151244,151245,151247,151249,151251],{"class":60,"line":654},[58,151246,33095],{"class":82},[58,151248,793],{"class":75},[58,151250,151014],{"class":386},[58,151252,799],{"class":75},[58,151254,151255],{"class":60,"line":671},[58,151256,3046],{"emptyLinePlaceholder":720},[58,151258,151259],{"class":60,"line":677},[58,151260,3046],{"emptyLinePlaceholder":720},[58,151262,151263,151265,151268],{"class":60,"line":2260},[58,151264,32591],{"class":92},[58,151266,151267],{"class":379}," make_sound",[58,151269,151270],{"class":75},"(animal):\n",[58,151272,151273],{"class":60,"line":694},[58,151274,151275],{"class":75},"    animal.speak()\n",[58,151277,151278],{"class":60,"line":2270},[58,151279,3046],{"emptyLinePlaceholder":720},[58,151281,151282],{"class":60,"line":2275},[58,151283,3046],{"emptyLinePlaceholder":720},[58,151285,151286],{"class":60,"line":2289},[58,151287,151288],{"class":75},"make_sound(Dog())\n",[58,151290,151291],{"class":60,"line":2294},[58,151292,151293],{"class":75},"make_sound(Cat())\n",[175,151295,151296],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,151298,151300],{"id":151299},"_1112-类属性和实例属性","11.12 类属性和实例属性",[175,151302,151303],{},"实例属性属于对象：",[48,151305,151307],{"className":31022,"code":151306,"language":31024,"meta":53,"style":53},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[55,151308,151309,151317,151325],{"__ignoreMap":53},[58,151310,151311,151313,151315],{"class":60,"line":61},[58,151312,15338],{"class":92},[58,151314,8544],{"class":379},[58,151316,4385],{"class":75},[58,151318,151319,151321,151323],{"class":60,"line":68},[58,151320,31445],{"class":92},[58,151322,31448],{"class":82},[58,151324,151089],{"class":75},[58,151326,151327,151329,151331,151333],{"class":60,"line":79},[58,151328,31489],{"class":82},[58,151330,150269],{"class":75},[58,151332,383],{"class":92},[58,151334,150274],{"class":75},[175,151336,151337],{},"类属性属于类，所有对象共享：",[48,151339,151341],{"className":31022,"code":151340,"language":31024,"meta":53,"style":53},"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",[55,151342,151343,151351,151361,151365,151373,151383,151387,151391,151404,151418,151422,151429,151436],{"__ignoreMap":53},[58,151344,151345,151347,151349],{"class":60,"line":61},[58,151346,15338],{"class":92},[58,151348,8544],{"class":379},[58,151350,4385],{"class":75},[58,151352,151353,151356,151358],{"class":60,"line":68},[58,151354,151355],{"class":75},"    school ",[58,151357,383],{"class":92},[58,151359,151360],{"class":386}," \"黑马学校\"\n",[58,151362,151363],{"class":60,"line":79},[58,151364,3046],{"emptyLinePlaceholder":720},[58,151366,151367,151369,151371],{"class":60,"line":105},[58,151368,31445],{"class":92},[58,151370,31448],{"class":82},[58,151372,151089],{"class":75},[58,151374,151375,151377,151379,151381],{"class":60,"line":627},[58,151376,31489],{"class":82},[58,151378,150269],{"class":75},[58,151380,383],{"class":92},[58,151382,150274],{"class":75},[58,151384,151385],{"class":60,"line":509},[58,151386,3046],{"emptyLinePlaceholder":720},[58,151388,151389],{"class":60,"line":559},[58,151390,3046],{"emptyLinePlaceholder":720},[58,151392,151393,151396,151398,151400,151402],{"class":60,"line":654},[58,151394,151395],{"class":75},"s1 ",[58,151397,383],{"class":92},[58,151399,150364],{"class":75},[58,151401,150367],{"class":386},[58,151403,799],{"class":75},[58,151405,151406,151409,151411,151413,151416],{"class":60,"line":671},[58,151407,151408],{"class":75},"s2 ",[58,151410,383],{"class":92},[58,151412,150364],{"class":75},[58,151414,151415],{"class":386},"\"小红\"",[58,151417,799],{"class":75},[58,151419,151420],{"class":60,"line":677},[58,151421,3046],{"emptyLinePlaceholder":720},[58,151423,151424,151426],{"class":60,"line":2260},[58,151425,31059],{"class":82},[58,151427,151428],{"class":75},"(s1.school)\n",[58,151430,151431,151433],{"class":60,"line":694},[58,151432,31059],{"class":82},[58,151434,151435],{"class":75},"(s2.school)\n",[58,151437,151438,151440],{"class":60,"line":2270},[58,151439,31059],{"class":82},[58,151441,151442],{"class":75},"(Student.school)\n",[175,151444,151445],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151447,151449],{"id":151448},"_1113-类方法和静态方法","11.13 类方法和静态方法",[114,151451,151453],{"id":151452},"_11131-类方法","11.13.1 类方法",[175,151455,151456,151457,151460,151461,29029],{},"类方法使用 ",[55,151458,151459],{},"@classmethod","，第一个参数通常是 ",[55,151462,151463],{},"cls",[48,151465,151467],{"className":31022,"code":151466,"language":31024,"meta":53,"style":53},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[55,151468,151469,151477,151485,151489,151497,151507,151517,151521,151525],{"__ignoreMap":53},[58,151470,151471,151473,151475],{"class":60,"line":61},[58,151472,15338],{"class":92},[58,151474,8544],{"class":379},[58,151476,4385],{"class":75},[58,151478,151479,151481,151483],{"class":60,"line":68},[58,151480,151355],{"class":75},[58,151482,383],{"class":92},[58,151484,151360],{"class":386},[58,151486,151487],{"class":60,"line":79},[58,151488,3046],{"emptyLinePlaceholder":720},[58,151490,151491,151494],{"class":60,"line":105},[58,151492,151493],{"class":379},"    @",[58,151495,151496],{"class":82},"classmethod\n",[58,151498,151499,151501,151504],{"class":60,"line":627},[58,151500,31445],{"class":92},[58,151502,151503],{"class":379}," get_school",[58,151505,151506],{"class":75},"(cls):\n",[58,151508,151509,151511,151514],{"class":60,"line":509},[58,151510,15396],{"class":92},[58,151512,151513],{"class":82}," cls",[58,151515,151516],{"class":75},".school\n",[58,151518,151519],{"class":60,"line":559},[58,151520,3046],{"emptyLinePlaceholder":720},[58,151522,151523],{"class":60,"line":654},[58,151524,3046],{"emptyLinePlaceholder":720},[58,151526,151527,151529],{"class":60,"line":671},[58,151528,31059],{"class":82},[58,151530,151531],{"class":75},"(Student.get_school())\n",[114,151533,151535],{"id":151534},"_11132-静态方法","11.13.2 静态方法",[175,151537,151538,151539,151542],{},"静态方法使用 ",[55,151540,151541],{},"@staticmethod","，不需要访问实例和类。",[48,151544,151546],{"className":31022,"code":151545,"language":31024,"meta":53,"style":53},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[55,151547,151548,151557,151564,151573,151584,151588,151592],{"__ignoreMap":53},[58,151549,151550,151552,151555],{"class":60,"line":61},[58,151551,15338],{"class":92},[58,151553,151554],{"class":379}," MathUtils",[58,151556,4385],{"class":75},[58,151558,151559,151561],{"class":60,"line":68},[58,151560,151493],{"class":379},[58,151562,151563],{"class":82},"staticmethod\n",[58,151565,151566,151568,151570],{"class":60,"line":79},[58,151567,31445],{"class":92},[58,151569,5855],{"class":379},[58,151571,151572],{"class":75},"(a, b):\n",[58,151574,151575,151577,151579,151581],{"class":60,"line":105},[58,151576,15396],{"class":92},[58,151578,11514],{"class":75},[58,151580,1267],{"class":92},[58,151582,151583],{"class":75}," b\n",[58,151585,151586],{"class":60,"line":627},[58,151587,3046],{"emptyLinePlaceholder":720},[58,151589,151590],{"class":60,"line":509},[58,151591,3046],{"emptyLinePlaceholder":720},[58,151593,151594,151596,151599,151601,151603,151605],{"class":60,"line":559},[58,151595,31059],{"class":82},[58,151597,151598],{"class":75},"(MathUtils.add(",[58,151600,89],{"class":82},[58,151602,469],{"class":75},[58,151604,867],{"class":82},[58,151606,31141],{"class":75},[175,151608,151609],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151611,151613],{"id":151612},"_1114-dataclass","11.14 dataclass",[175,151615,151616,151619],{},[55,151617,151618],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[48,151621,151623],{"className":31022,"code":151622,"language":31024,"meta":53,"style":53},"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",[55,151624,151625,151637,151641,151645,151650,151658,151666,151674,151682,151686,151690,151710],{"__ignoreMap":53},[58,151626,151627,151629,151632,151634],{"class":60,"line":61},[58,151628,31381],{"class":92},[58,151630,151631],{"class":75}," dataclasses ",[58,151633,31036],{"class":92},[58,151635,151636],{"class":75}," dataclass\n",[58,151638,151639],{"class":60,"line":68},[58,151640,3046],{"emptyLinePlaceholder":720},[58,151642,151643],{"class":60,"line":79},[58,151644,3046],{"emptyLinePlaceholder":720},[58,151646,151647],{"class":60,"line":105},[58,151648,151649],{"class":379},"@dataclass\n",[58,151651,151652,151654,151656],{"class":60,"line":627},[58,151653,15338],{"class":92},[58,151655,8544],{"class":379},[58,151657,4385],{"class":75},[58,151659,151660,151663],{"class":60,"line":509},[58,151661,151662],{"class":75},"    name: ",[58,151664,151665],{"class":82},"str\n",[58,151667,151668,151671],{"class":60,"line":559},[58,151669,151670],{"class":75},"    age: ",[58,151672,151673],{"class":82},"int\n",[58,151675,151676,151679],{"class":60,"line":654},[58,151677,151678],{"class":75},"    score: ",[58,151680,151681],{"class":82},"float\n",[58,151683,151684],{"class":60,"line":671},[58,151685,3046],{"emptyLinePlaceholder":720},[58,151687,151688],{"class":60,"line":677},[58,151689,3046],{"emptyLinePlaceholder":720},[58,151691,151692,151694,151696,151698,151700,151702,151704,151706,151708],{"class":60,"line":2260},[58,151693,149960],{"class":75},[58,151695,383],{"class":92},[58,151697,150364],{"class":75},[58,151699,150367],{"class":386},[58,151701,469],{"class":75},[58,151703,1436],{"class":82},[58,151705,469],{"class":75},[58,151707,1773],{"class":82},[58,151709,799],{"class":75},[58,151711,151712,151714],{"class":60,"line":694},[58,151713,31059],{"class":82},[58,151715,150521],{"class":75},[175,151717,151718,151719,1000,151721,151724],{},"它会自动生成 ",[55,151720,31473],{},[55,151722,151723],{},"__repr__"," 等方法。适合数据模型类。",[14,151726,151728],{"id":151727},"_1115-小案例学生类","11.15 小案例：学生类",[48,151730,151732],{"className":31022,"code":151731,"language":31024,"meta":53,"style":53},"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",[55,151733,151734,151742,151751,151763,151773,151783,151793,151797,151806,151819,151823,151832,151838,151850,151862,151874,151886,151890,151894,151900,151910,151919,151929,151937,151945,151954,151958,151962,151970,152006,152010,152014,152039,152046],{"__ignoreMap":53},[58,151735,151736,151738,151740],{"class":60,"line":61},[58,151737,15338],{"class":92},[58,151739,8544],{"class":379},[58,151741,4385],{"class":75},[58,151743,151744,151746,151748],{"class":60,"line":68},[58,151745,31445],{"class":92},[58,151747,31448],{"class":82},[58,151749,151750],{"class":75},"(self, student_id, name, age, score):\n",[58,151752,151753,151755,151758,151760],{"class":60,"line":79},[58,151754,31489],{"class":82},[58,151756,151757],{"class":75},".student_id ",[58,151759,383],{"class":92},[58,151761,151762],{"class":75}," student_id\n",[58,151764,151765,151767,151769,151771],{"class":60,"line":105},[58,151766,31489],{"class":82},[58,151768,150269],{"class":75},[58,151770,383],{"class":92},[58,151772,150274],{"class":75},[58,151774,151775,151777,151779,151781],{"class":60,"line":627},[58,151776,31489],{"class":82},[58,151778,150281],{"class":75},[58,151780,383],{"class":92},[58,151782,150286],{"class":75},[58,151784,151785,151787,151789,151791],{"class":60,"line":509},[58,151786,31489],{"class":82},[58,151788,150293],{"class":75},[58,151790,383],{"class":92},[58,151792,2227],{"class":75},[58,151794,151795],{"class":60,"line":559},[58,151796,3046],{"emptyLinePlaceholder":720},[58,151798,151799,151801,151804],{"class":60,"line":654},[58,151800,31445],{"class":92},[58,151802,151803],{"class":379}," is_passed",[58,151805,31451],{"class":75},[58,151807,151808,151810,151812,151814,151816],{"class":60,"line":671},[58,151809,15396],{"class":92},[58,151811,39517],{"class":82},[58,151813,150293],{"class":75},[58,151815,2357],{"class":92},[58,151817,151818],{"class":82}," 60\n",[58,151820,151821],{"class":60,"line":677},[58,151822,3046],{"emptyLinePlaceholder":720},[58,151824,151825,151827,151830],{"class":60,"line":2260},[58,151826,31445],{"class":92},[58,151828,151829],{"class":379}," to_dict",[58,151831,31451],{"class":75},[58,151833,151834,151836],{"class":60,"line":694},[58,151835,15396],{"class":92},[58,151837,76],{"class":75},[58,151839,151840,151843,151845,151847],{"class":60,"line":2270},[58,151841,151842],{"class":386},"            \"student_id\"",[58,151844,86],{"class":75},[58,151846,31467],{"class":82},[58,151848,151849],{"class":75},".student_id,\n",[58,151851,151852,151855,151857,151859],{"class":60,"line":2275},[58,151853,151854],{"class":386},"            \"name\"",[58,151856,86],{"class":75},[58,151858,31467],{"class":82},[58,151860,151861],{"class":75},".name,\n",[58,151863,151864,151867,151869,151871],{"class":60,"line":2289},[58,151865,151866],{"class":386},"            \"age\"",[58,151868,86],{"class":75},[58,151870,31467],{"class":82},[58,151872,151873],{"class":75},".age,\n",[58,151875,151876,151879,151881,151883],{"class":60,"line":2294},[58,151877,151878],{"class":386},"            \"score\"",[58,151880,86],{"class":75},[58,151882,31467],{"class":82},[58,151884,151885],{"class":75},".score,\n",[58,151887,151888],{"class":60,"line":2300},[58,151889,3175],{"class":75},[58,151891,151892],{"class":60,"line":2321},[58,151893,3046],{"emptyLinePlaceholder":720},[58,151895,151896,151898],{"class":60,"line":2326},[58,151897,151493],{"class":379},[58,151899,151496],{"class":82},[58,151901,151902,151904,151907],{"class":60,"line":2340},[58,151903,31445],{"class":92},[58,151905,151906],{"class":379}," from_dict",[58,151908,151909],{"class":75},"(cls, data):\n",[58,151911,151912,151914,151916],{"class":60,"line":2345},[58,151913,15396],{"class":92},[58,151915,151513],{"class":82},[58,151917,151918],{"class":75},"(\n",[58,151920,151921,151924,151927],{"class":60,"line":2374},[58,151922,151923],{"class":75},"            data[",[58,151925,151926],{"class":386},"\"student_id\"",[58,151928,88465],{"class":75},[58,151930,151931,151933,151935],{"class":60,"line":2379},[58,151932,151923],{"class":75},[58,151934,63311],{"class":386},[58,151936,88465],{"class":75},[58,151938,151939,151941,151943],{"class":60,"line":2396},[58,151940,151923],{"class":75},[58,151942,69756],{"class":386},[58,151944,88465],{"class":75},[58,151946,151947,151949,151952],{"class":60,"line":2401},[58,151948,151923],{"class":75},[58,151950,151951],{"class":386},"\"score\"",[58,151953,88465],{"class":75},[58,151955,151956],{"class":60,"line":2406},[58,151957,38770],{"class":75},[58,151959,151960],{"class":60,"line":2411},[58,151961,3046],{"emptyLinePlaceholder":720},[58,151963,151964,151966,151968],{"class":60,"line":2425},[58,151965,31445],{"class":92},[58,151967,150460],{"class":82},[58,151969,31451],{"class":75},[58,151971,151972,151974,151976,151978,151980,151983,151985,151988,151990,151992,151994,151996,151998,152000,152002,152004],{"class":60,"line":2430},[58,151973,15396],{"class":92},[58,151975,150469],{"class":92},[58,151977,1037],{"class":386},[58,151979,149931],{"class":82},[58,151981,151982],{"class":75},".student_id",[58,151984,1730],{"class":82},[58,151986,151987],{"class":82}," {self",[58,151989,80931],{"class":75},[58,151991,1730],{"class":82},[58,151993,151987],{"class":82},[58,151995,80943],{"class":75},[58,151997,1730],{"class":82},[58,151999,151987],{"class":82},[58,152001,150341],{"class":75},[58,152003,1730],{"class":82},[58,152005,25777],{"class":386},[58,152007,152008],{"class":60,"line":3223},[58,152009,3046],{"emptyLinePlaceholder":720},[58,152011,152012],{"class":60,"line":3237},[58,152013,3046],{"emptyLinePlaceholder":720},[58,152015,152016,152018,152020,152022,152025,152027,152029,152031,152033,152035,152037],{"class":60,"line":3245},[58,152017,149960],{"class":75},[58,152019,383],{"class":92},[58,152021,150364],{"class":75},[58,152023,152024],{"class":386},"\"001\"",[58,152026,469],{"class":75},[58,152028,150367],{"class":386},[58,152030,469],{"class":75},[58,152032,1436],{"class":82},[58,152034,469],{"class":75},[58,152036,1773],{"class":82},[58,152038,799],{"class":75},[58,152040,152041,152043],{"class":60,"line":3250},[58,152042,31059],{"class":82},[58,152044,152045],{"class":75},"(student.is_passed())\n",[58,152047,152048,152050],{"class":60,"line":3256},[58,152049,31059],{"class":82},[58,152051,152052],{"class":75},"(student.to_dict())\n",[175,152054,152055,101647,152058,152061],{},[55,152056,152057],{},"to_dict()",[55,152059,152060],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,152063,152065],{"id":152064},"_1116-易错点","11.16 易错点",[19,152067,152068,152074,152080,152085,152088,152091],{},[22,152069,152070,152071,29029],{},"类名推荐使用大驼峰，如 ",[55,152072,152073],{},"StudentManager",[22,152075,152076,152077,152079],{},"方法第一个参数必须写 ",[55,152078,31467],{},"，调用时不用传。",[22,152081,152082,152084],{},[55,152083,31473],{}," 不是普通方法，它在创建对象时自动执行。",[22,152086,152087],{},"私有属性不是绝对安全，只是约定和名称改写。",[22,152089,152090],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[22,152092,152093],{},"类中方法太多时，说明职责可能过重。",[14,152095,152097],{"id":152096},"_1117-本章练习","11.17 本章练习",[19,152099,152100,152106,152112,152117,152130],{},[22,152101,152102,152103,152105],{},"定义 ",[55,152104,150047],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[22,152107,152102,152108,152111],{},[55,152109,152110],{},"Account"," 类，实现存款、取款、查询余额。",[22,152113,152102,152114,152116],{},[55,152115,17869],{}," 类，计算圆的周长和面积。",[22,152118,152102,152119,1000,152122,152125,152126,152129],{},[55,152120,152121],{},"Dog",[55,152123,152124],{},"Cat"," 类，并用同一个函数调用它们的 ",[55,152127,152128],{},"speak()"," 方法。",[22,152131,104995,152132,152134,152135,29029],{},[55,152133,151618],{}," 定义一个商品类 ",[55,152136,152137],{},"Product",[702,152139,152140],{},"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":53,"searchDepth":68,"depth":68,"links":152142},[152143,152144,152145,152146,152147,152148,152150,152151,152152,152153,152154,152155,152156,152160,152161,152162,152163],{"id":149811,"depth":68,"text":149812},{"id":149994,"depth":68,"text":149995},{"id":150058,"depth":68,"text":150059},{"id":150135,"depth":68,"text":150136},{"id":150234,"depth":68,"text":150235},{"id":150398,"depth":68,"text":152149},"11.6 str",{"id":150524,"depth":68,"text":150525},{"id":150790,"depth":68,"text":150791},{"id":150904,"depth":68,"text":150905},{"id":151059,"depth":68,"text":151060},{"id":151183,"depth":68,"text":151184},{"id":151299,"depth":68,"text":151300},{"id":151448,"depth":68,"text":151449,"children":152157},[152158,152159],{"id":151452,"depth":79,"text":151453},{"id":151534,"depth":79,"text":151535},{"id":151612,"depth":68,"text":151613},{"id":151727,"depth":68,"text":151728},{"id":152064,"depth":68,"text":152065},{"id":152096,"depth":68,"text":152097},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149803,"description":717},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152170,"title":152171,"body":152172,"description":717,"extension":718,"meta":155485,"navigation":720,"path":155486,"seo":155487,"stem":155488,"__hash__":155489},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152173,"toc":155461},[152174,152177,152181,152184,152187,152216,152219,152227,152231,152235,152238,152261,152264,152270,152274,153720,153723,153744,153748,153751,153763,153766,153950,153953,154079,154082,154086,154090,154226,154230,154316,154320,154402,154406,154443,154447,154636,154640,154643,154873,154877,154880,155061,155064,155068,155071,155077,155080,155106,155110,155113,155127,155130,155155,155158,155172,155175,155192,155195,155212,155215,155232,155236,155262,155266,155289,155293,155296,155298,155304,155306,155327,155330,155336,155342,155346,155349,155425,155428,155432,155458],[10,152175,152171],{"id":152176},"_12-综合案例与复习路线",[14,152178,152180],{"id":152179},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[175,152182,152183],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[175,152185,152186],{},"一个合格的入门综合项目最好覆盖：",[19,152188,152189,152192,152195,152198,152201,152204,152207,152210,152213],{},[22,152190,152191],{},"输入输出。",[22,152193,152194],{},"判断和循环。",[22,152196,152197],{},"函数拆分。",[22,152199,152200],{},"列表、字典等容器。",[22,152202,152203],{},"文件持久化。",[22,152205,152206],{},"异常处理。",[22,152208,152209],{},"模块拆分。",[22,152211,152212],{},"可选：面向对象。",[22,152214,152215],{},"可选：数据可视化。",[175,152217,152218],{},"本章整理两个方向：",[19,152220,152221,152224],{},[22,152222,152223],{},"学生管理系统。",[22,152225,152226],{},"销售数据统计和可视化。",[14,152228,152230],{"id":152229},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[114,152232,152234],{"id":152233},"_1221-需求","12.2.1 需求",[175,152236,152237],{},"实现一个命令行学生管理系统：",[19,152239,152240,152243,152246,152249,152252,152255,152258],{},[22,152241,152242],{},"添加学生。",[22,152244,152245],{},"删除学生。",[22,152247,152248],{},"修改学生。",[22,152250,152251],{},"查询学生。",[22,152253,152254],{},"显示所有学生。",[22,152256,152257],{},"保存到 JSON 文件。",[22,152259,152260],{},"程序启动时自动读取 JSON 文件。",[175,152262,152263],{},"学生字段：",[48,152265,152268],{"className":152266,"code":152267,"language":5833,"meta":53},[5831],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[55,152269,152267],{"__ignoreMap":53},[14,152271,152273],{"id":152272},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[48,152275,152277],{"className":31022,"code":152276,"language":31024,"meta":53,"style":53},"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",[55,152278,152279,152285,152295,152299,152313,152317,152321,152330,152342,152348,152352,152358,152389,152399,152406,152417,152423,152427,152431,152441,152472,152498,152502,152506,152515,152526,152537,152548,152559,152570,152581,152592,152596,152600,152610,152622,152638,152645,152652,152656,152660,152670,152678,152685,152698,152708,152719,152723,152727,152736,152744,152750,152762,152770,152781,152785,152789,152798,152814,152818,152825,152836,152841,152845,152861,152876,152891,152895,152900,152908,152916,152924,152932,152936,152941,152952,152956,152960,152969,152984,152994,152998,153010,153021,153025,153029,153034,153038,153049,153053,153057,153066,153081,153089,153093,153105,153115,153119,153123,153138,153151,153164,153168,153181,153193,153205,153209,153213,153224,153228,153232,153241,153256,153264,153268,153280,153290,153294,153298,153303,153307,153311,153321,153327,153349,153368,153387,153406,153411,153415,153419,153428,153436,153447,153451,153455,153481,153491,153496,153500,153504,153512,153522,153526,153534,153539,153555,153559,153573,153578,153592,153597,153610,153615,153628,153633,153646,153651,153664,153675,153679,153685,153696,153700,153704,153716],{"__ignoreMap":53},[58,152280,152281,152283],{"class":60,"line":61},[58,152282,31036],{"class":92},[58,152284,147570],{"class":75},[58,152286,152287,152289,152291,152293],{"class":60,"line":68},[58,152288,31381],{"class":92},[58,152290,108940],{"class":75},[58,152292,31036],{"class":92},[58,152294,108945],{"class":75},[58,152296,152297],{"class":60,"line":79},[58,152298,3046],{"emptyLinePlaceholder":720},[58,152300,152301,152304,152306,152308,152311],{"class":60,"line":105},[58,152302,152303],{"class":82},"DATA_FILE",[58,152305,14208],{"class":92},[58,152307,109174],{"class":75},[58,152309,152310],{"class":386},"\"students.json\"",[58,152312,799],{"class":75},[58,152314,152315],{"class":60,"line":627},[58,152316,3046],{"emptyLinePlaceholder":720},[58,152318,152319],{"class":60,"line":509},[58,152320,3046],{"emptyLinePlaceholder":720},[58,152322,152323,152325,152328],{"class":60,"line":559},[58,152324,32591],{"class":92},[58,152326,152327],{"class":379}," load_students",[58,152329,32597],{"class":75},[58,152331,152332,152334,152336,152339],{"class":60,"line":654},[58,152333,3747],{"class":92},[58,152335,39574],{"class":92},[58,152337,152338],{"class":82}," DATA_FILE",[58,152340,152341],{"class":75},".exists():\n",[58,152343,152344,152346],{"class":60,"line":671},[58,152345,15396],{"class":92},[58,152347,52476],{"class":75},[58,152349,152350],{"class":60,"line":677},[58,152351,3046],{"emptyLinePlaceholder":720},[58,152353,152354,152356],{"class":60,"line":2260},[58,152355,126413],{"class":92},[58,152357,4385],{"class":75},[58,152359,152360,152363,152365,152367,152369,152371,152373,152375,152377,152379,152381,152383,152385,152387],{"class":60,"line":694},[58,152361,152362],{"class":92},"        with",[58,152364,147270],{"class":82},[58,152366,793],{"class":75},[58,152368,152303],{"class":82},[58,152370,469],{"class":75},[58,152372,147280],{"class":386},[58,152374,469],{"class":75},[58,152376,147285],{"class":5862},[58,152378,383],{"class":92},[58,152380,147290],{"class":386},[58,152382,14358],{"class":75},[58,152384,32027],{"class":92},[58,152386,148632],{"class":5862},[58,152388,4385],{"class":75},[58,152390,152391,152393,152395,152397],{"class":60,"line":2270},[58,152392,16375],{"class":92},[58,152394,148643],{"class":75},[58,152396,45998],{"class":5862},[58,152398,799],{"class":75},[58,152400,152401,152403],{"class":60,"line":2275},[58,152402,126441],{"class":92},[58,152404,152405],{"class":75}," json.JSONDecodeError:\n",[58,152407,152408,152410,152412,152415],{"class":60,"line":2289},[58,152409,33095],{"class":82},[58,152411,793],{"class":75},[58,152413,152414],{"class":386},"\"数据文件格式错误，已使用空数据启动\"",[58,152416,799],{"class":75},[58,152418,152419,152421],{"class":60,"line":2294},[58,152420,15396],{"class":92},[58,152422,52476],{"class":75},[58,152424,152425],{"class":60,"line":2300},[58,152426,3046],{"emptyLinePlaceholder":720},[58,152428,152429],{"class":60,"line":2321},[58,152430,3046],{"emptyLinePlaceholder":720},[58,152432,152433,152435,152438],{"class":60,"line":2326},[58,152434,32591],{"class":92},[58,152436,152437],{"class":379}," save_students",[58,152439,152440],{"class":75},"(students):\n",[58,152442,152443,152445,152447,152449,152451,152453,152456,152458,152460,152462,152464,152466,152468,152470],{"class":60,"line":2340},[58,152444,34822],{"class":92},[58,152446,147270],{"class":82},[58,152448,793],{"class":75},[58,152450,152303],{"class":82},[58,152452,469],{"class":75},[58,152454,152455],{"class":386},"\"w\"",[58,152457,469],{"class":75},[58,152459,147285],{"class":5862},[58,152461,383],{"class":92},[58,152463,147290],{"class":386},[58,152465,14358],{"class":75},[58,152467,32027],{"class":92},[58,152469,148632],{"class":5862},[58,152471,4385],{"class":75},[58,152473,152474,152477,152479,152481,152483,152485,152487,152489,152492,152494,152496],{"class":60,"line":2345},[58,152475,152476],{"class":75},"        json.dump(students, ",[58,152478,45998],{"class":5862},[58,152480,469],{"class":75},[58,152482,147616],{"class":5862},[58,152484,383],{"class":92},[58,152486,34631],{"class":82},[58,152488,469],{"class":75},[58,152490,152491],{"class":5862},"indent",[58,152493,383],{"class":92},[58,152495,867],{"class":82},[58,152497,799],{"class":75},[58,152499,152500],{"class":60,"line":2374},[58,152501,3046],{"emptyLinePlaceholder":720},[58,152503,152504],{"class":60,"line":2379},[58,152505,3046],{"emptyLinePlaceholder":720},[58,152507,152508,152510,152513],{"class":60,"line":2396},[58,152509,32591],{"class":92},[58,152511,152512],{"class":379}," show_menu",[58,152514,32597],{"class":75},[58,152516,152517,152519,152521,152524],{"class":60,"line":2401},[58,152518,31943],{"class":82},[58,152520,793],{"class":75},[58,152522,152523],{"class":386},"\"====== 学生管理系统 ======\"",[58,152525,799],{"class":75},[58,152527,152528,152530,152532,152535],{"class":60,"line":2406},[58,152529,31943],{"class":82},[58,152531,793],{"class":75},[58,152533,152534],{"class":386},"\"1. 添加学生\"",[58,152536,799],{"class":75},[58,152538,152539,152541,152543,152546],{"class":60,"line":2411},[58,152540,31943],{"class":82},[58,152542,793],{"class":75},[58,152544,152545],{"class":386},"\"2. 删除学生\"",[58,152547,799],{"class":75},[58,152549,152550,152552,152554,152557],{"class":60,"line":2425},[58,152551,31943],{"class":82},[58,152553,793],{"class":75},[58,152555,152556],{"class":386},"\"3. 修改学生\"",[58,152558,799],{"class":75},[58,152560,152561,152563,152565,152568],{"class":60,"line":2430},[58,152562,31943],{"class":82},[58,152564,793],{"class":75},[58,152566,152567],{"class":386},"\"4. 查询学生\"",[58,152569,799],{"class":75},[58,152571,152572,152574,152576,152579],{"class":60,"line":3223},[58,152573,31943],{"class":82},[58,152575,793],{"class":75},[58,152577,152578],{"class":386},"\"5. 显示所有学生\"",[58,152580,799],{"class":75},[58,152582,152583,152585,152587,152590],{"class":60,"line":3237},[58,152584,31943],{"class":82},[58,152586,793],{"class":75},[58,152588,152589],{"class":386},"\"0. 退出系统\"",[58,152591,799],{"class":75},[58,152593,152594],{"class":60,"line":3245},[58,152595,3046],{"emptyLinePlaceholder":720},[58,152597,152598],{"class":60,"line":3250},[58,152599,3046],{"emptyLinePlaceholder":720},[58,152601,152602,152604,152607],{"class":60,"line":3256},[58,152603,32591],{"class":92},[58,152605,152606],{"class":379}," find_student",[58,152608,152609],{"class":75},"(students, student_id):\n",[58,152611,152612,152614,152617,152619],{"class":60,"line":3262},[58,152613,3847],{"class":92},[58,152615,152616],{"class":75}," student ",[58,152618,26687],{"class":92},[58,152620,152621],{"class":75}," students:\n",[58,152623,152624,152626,152629,152631,152633,152635],{"class":60,"line":3267},[58,152625,3143],{"class":92},[58,152627,152628],{"class":75}," student[",[58,152630,151926],{"class":386},[58,152632,5089],{"class":75},[58,152634,3595],{"class":92},[58,152636,152637],{"class":75}," student_id:\n",[58,152639,152640,152642],{"class":60,"line":8594},[58,152641,16375],{"class":92},[58,152643,152644],{"class":75}," student\n",[58,152646,152647,152649],{"class":60,"line":8618},[58,152648,4736],{"class":92},[58,152650,152651],{"class":82}," None\n",[58,152653,152654],{"class":60,"line":8623},[58,152655,3046],{"emptyLinePlaceholder":720},[58,152657,152658],{"class":60,"line":8629},[58,152659,3046],{"emptyLinePlaceholder":720},[58,152661,152662,152664,152667],{"class":60,"line":8656},[58,152663,32591],{"class":92},[58,152665,152666],{"class":379}," input_int",[58,152668,152669],{"class":75},"(prompt):\n",[58,152671,152672,152674,152676],{"class":60,"line":8661},[58,152673,2897],{"class":92},[58,152675,95921],{"class":82},[58,152677,4385],{"class":75},[58,152679,152680,152683],{"class":60,"line":8667},[58,152681,152682],{"class":92},"        try",[58,152684,4385],{"class":75},[58,152686,152687,152689,152691,152693,152695],{"class":60,"line":8679},[58,152688,16375],{"class":92},[58,152690,3028],{"class":82},[58,152692,793],{"class":75},[58,152694,54457],{"class":82},[58,152696,152697],{"class":75},"(prompt))\n",[58,152699,152700,152703,152706],{"class":60,"line":8691},[58,152701,152702],{"class":92},"        except",[58,152704,152705],{"class":82}," ValueError",[58,152707,4385],{"class":75},[58,152709,152710,152712,152714,152717],{"class":60,"line":8703},[58,152711,35294],{"class":82},[58,152713,793],{"class":75},[58,152715,152716],{"class":386},"\"请输入整数\"",[58,152718,799],{"class":75},[58,152720,152721],{"class":60,"line":10361},[58,152722,3046],{"emptyLinePlaceholder":720},[58,152724,152725],{"class":60,"line":10386},[58,152726,3046],{"emptyLinePlaceholder":720},[58,152728,152729,152731,152734],{"class":60,"line":10409},[58,152730,32591],{"class":92},[58,152732,152733],{"class":379}," input_float",[58,152735,152669],{"class":75},[58,152737,152738,152740,152742],{"class":60,"line":10433},[58,152739,2897],{"class":92},[58,152741,95921],{"class":82},[58,152743,4385],{"class":75},[58,152745,152746,152748],{"class":60,"line":10438},[58,152747,152682],{"class":92},[58,152749,4385],{"class":75},[58,152751,152752,152754,152756,152758,152760],{"class":60,"line":10443},[58,152753,16375],{"class":92},[58,152755,110426],{"class":82},[58,152757,793],{"class":75},[58,152759,54457],{"class":82},[58,152761,152697],{"class":75},[58,152763,152764,152766,152768],{"class":60,"line":10448},[58,152765,152702],{"class":92},[58,152767,152705],{"class":82},[58,152769,4385],{"class":75},[58,152771,152772,152774,152776,152779],{"class":60,"line":10457},[58,152773,35294],{"class":82},[58,152775,793],{"class":75},[58,152777,152778],{"class":386},"\"请输入数字\"",[58,152780,799],{"class":75},[58,152782,152783],{"class":60,"line":10462},[58,152784,3046],{"emptyLinePlaceholder":720},[58,152786,152787],{"class":60,"line":10468},[58,152788,3046],{"emptyLinePlaceholder":720},[58,152790,152791,152793,152796],{"class":60,"line":10489},[58,152792,32591],{"class":92},[58,152794,152795],{"class":379}," add_student",[58,152797,152440],{"class":75},[58,152799,152800,152803,152805,152807,152809,152812],{"class":60,"line":10495},[58,152801,152802],{"class":75},"    student_id ",[58,152804,383],{"class":92},[58,152806,61239],{"class":82},[58,152808,793],{"class":75},[58,152810,152811],{"class":386},"\"请输入学号:\"",[58,152813,799],{"class":75},[58,152815,152816],{"class":60,"line":10509},[58,152817,3046],{"emptyLinePlaceholder":720},[58,152819,152820,152822],{"class":60,"line":10515},[58,152821,3747],{"class":92},[58,152823,152824],{"class":75}," find_student(students, student_id):\n",[58,152826,152827,152829,152831,152834],{"class":60,"line":10542},[58,152828,33095],{"class":82},[58,152830,793],{"class":75},[58,152832,152833],{"class":386},"\"学号已存在\"",[58,152835,799],{"class":75},[58,152837,152838],{"class":60,"line":10551},[58,152839,152840],{"class":92},"        return\n",[58,152842,152843],{"class":60,"line":10557},[58,152844,3046],{"emptyLinePlaceholder":720},[58,152846,152847,152850,152852,152854,152856,152859],{"class":60,"line":10565},[58,152848,152849],{"class":75},"    name ",[58,152851,383],{"class":92},[58,152853,61239],{"class":82},[58,152855,793],{"class":75},[58,152857,152858],{"class":386},"\"请输入姓名:\"",[58,152860,799],{"class":75},[58,152862,152863,152866,152868,152871,152874],{"class":60,"line":10570},[58,152864,152865],{"class":75},"    age ",[58,152867,383],{"class":92},[58,152869,152870],{"class":75}," input_int(",[58,152872,152873],{"class":386},"\"请输入年龄:\"",[58,152875,799],{"class":75},[58,152877,152878,152881,152883,152886,152889],{"class":60,"line":17247},[58,152879,152880],{"class":75},"    score ",[58,152882,383],{"class":92},[58,152884,152885],{"class":75}," input_float(",[58,152887,152888],{"class":386},"\"请输入成绩:\"",[58,152890,799],{"class":75},[58,152892,152893],{"class":60,"line":17253},[58,152894,3046],{"emptyLinePlaceholder":720},[58,152896,152897],{"class":60,"line":17276},[58,152898,152899],{"class":75},"    students.append({\n",[58,152901,152902,152905],{"class":60,"line":17282},[58,152903,152904],{"class":386},"        \"student_id\"",[58,152906,152907],{"class":75},": student_id,\n",[58,152909,152910,152913],{"class":60,"line":17305},[58,152911,152912],{"class":386},"        \"name\"",[58,152914,152915],{"class":75},": name,\n",[58,152917,152918,152921],{"class":60,"line":17319},[58,152919,152920],{"class":386},"        \"age\"",[58,152922,152923],{"class":75},": age,\n",[58,152925,152926,152929],{"class":60,"line":17339},[58,152927,152928],{"class":386},"        \"score\"",[58,152930,152931],{"class":75},": score,\n",[58,152933,152934],{"class":60,"line":17345},[58,152935,34105],{"class":75},[58,152937,152938],{"class":60,"line":17356},[58,152939,152940],{"class":75},"    save_students(students)\n",[58,152942,152943,152945,152947,152950],{"class":60,"line":17379},[58,152944,31943],{"class":82},[58,152946,793],{"class":75},[58,152948,152949],{"class":386},"\"添加成功\"",[58,152951,799],{"class":75},[58,152953,152954],{"class":60,"line":17401},[58,152955,3046],{"emptyLinePlaceholder":720},[58,152957,152958],{"class":60,"line":17406},[58,152959,3046],{"emptyLinePlaceholder":720},[58,152961,152962,152964,152967],{"class":60,"line":17412},[58,152963,32591],{"class":92},[58,152965,152966],{"class":379}," delete_student",[58,152968,152440],{"class":75},[58,152970,152971,152973,152975,152977,152979,152982],{"class":60,"line":17426},[58,152972,152802],{"class":75},[58,152974,383],{"class":92},[58,152976,61239],{"class":82},[58,152978,793],{"class":75},[58,152980,152981],{"class":386},"\"请输入要删除的学号:\"",[58,152983,799],{"class":75},[58,152985,152986,152989,152991],{"class":60,"line":17439},[58,152987,152988],{"class":75},"    student ",[58,152990,383],{"class":92},[58,152992,152993],{"class":75}," find_student(students, student_id)\n",[58,152995,152996],{"class":60,"line":17444},[58,152997,3046],{"emptyLinePlaceholder":720},[58,152999,153000,153002,153004,153006,153008],{"class":60,"line":17458},[58,153001,3747],{"class":92},[58,153003,152616],{"class":75},[58,153005,39571],{"class":92},[58,153007,39577],{"class":82},[58,153009,4385],{"class":75},[58,153011,153012,153014,153016,153019],{"class":60,"line":17463},[58,153013,33095],{"class":82},[58,153015,793],{"class":75},[58,153017,153018],{"class":386},"\"学生不存在\"",[58,153020,799],{"class":75},[58,153022,153023],{"class":60,"line":17469},[58,153024,152840],{"class":92},[58,153026,153027],{"class":60,"line":17474},[58,153028,3046],{"emptyLinePlaceholder":720},[58,153030,153031],{"class":60,"line":17488},[58,153032,153033],{"class":75},"    students.remove(student)\n",[58,153035,153036],{"class":60,"line":17493},[58,153037,152940],{"class":75},[58,153039,153040,153042,153044,153047],{"class":60,"line":17498},[58,153041,31943],{"class":82},[58,153043,793],{"class":75},[58,153045,153046],{"class":386},"\"删除成功\"",[58,153048,799],{"class":75},[58,153050,153051],{"class":60,"line":17512},[58,153052,3046],{"emptyLinePlaceholder":720},[58,153054,153055],{"class":60,"line":17524},[58,153056,3046],{"emptyLinePlaceholder":720},[58,153058,153059,153061,153064],{"class":60,"line":17529},[58,153060,32591],{"class":92},[58,153062,153063],{"class":379}," update_student",[58,153065,152440],{"class":75},[58,153067,153068,153070,153072,153074,153076,153079],{"class":60,"line":17542},[58,153069,152802],{"class":75},[58,153071,383],{"class":92},[58,153073,61239],{"class":82},[58,153075,793],{"class":75},[58,153077,153078],{"class":386},"\"请输入要修改的学号:\"",[58,153080,799],{"class":75},[58,153082,153083,153085,153087],{"class":60,"line":17547},[58,153084,152988],{"class":75},[58,153086,383],{"class":92},[58,153088,152993],{"class":75},[58,153090,153091],{"class":60,"line":17552},[58,153092,3046],{"emptyLinePlaceholder":720},[58,153094,153095,153097,153099,153101,153103],{"class":60,"line":17557},[58,153096,3747],{"class":92},[58,153098,152616],{"class":75},[58,153100,39571],{"class":92},[58,153102,39577],{"class":82},[58,153104,4385],{"class":75},[58,153106,153107,153109,153111,153113],{"class":60,"line":17570},[58,153108,33095],{"class":82},[58,153110,793],{"class":75},[58,153112,153018],{"class":386},[58,153114,799],{"class":75},[58,153116,153117],{"class":60,"line":17575},[58,153118,152840],{"class":92},[58,153120,153121],{"class":60,"line":33277},[58,153122,3046],{"emptyLinePlaceholder":720},[58,153124,153125,153127,153129,153131,153133,153136],{"class":60,"line":33283},[58,153126,152849],{"class":75},[58,153128,383],{"class":92},[58,153130,61239],{"class":82},[58,153132,793],{"class":75},[58,153134,153135],{"class":386},"\"请输入新姓名:\"",[58,153137,799],{"class":75},[58,153139,153140,153142,153144,153146,153149],{"class":60,"line":33289},[58,153141,152865],{"class":75},[58,153143,383],{"class":92},[58,153145,152870],{"class":75},[58,153147,153148],{"class":386},"\"请输入新年龄:\"",[58,153150,799],{"class":75},[58,153152,153153,153155,153157,153159,153162],{"class":60,"line":33295},[58,153154,152880],{"class":75},[58,153156,383],{"class":92},[58,153158,152885],{"class":75},[58,153160,153161],{"class":386},"\"请输入新成绩:\"",[58,153163,799],{"class":75},[58,153165,153166],{"class":60,"line":33301},[58,153167,3046],{"emptyLinePlaceholder":720},[58,153169,153170,153173,153175,153177,153179],{"class":60,"line":33312},[58,153171,153172],{"class":75},"    student[",[58,153174,63311],{"class":386},[58,153176,5089],{"class":75},[58,153178,383],{"class":92},[58,153180,150274],{"class":75},[58,153182,153183,153185,153187,153189,153191],{"class":60,"line":33318},[58,153184,153172],{"class":75},[58,153186,69756],{"class":386},[58,153188,5089],{"class":75},[58,153190,383],{"class":92},[58,153192,150286],{"class":75},[58,153194,153195,153197,153199,153201,153203],{"class":60,"line":33338},[58,153196,153172],{"class":75},[58,153198,151951],{"class":386},[58,153200,5089],{"class":75},[58,153202,383],{"class":92},[58,153204,2227],{"class":75},[58,153206,153207],{"class":60,"line":33344},[58,153208,3046],{"emptyLinePlaceholder":720},[58,153210,153211],{"class":60,"line":33355},[58,153212,152940],{"class":75},[58,153214,153215,153217,153219,153222],{"class":60,"line":33361},[58,153216,31943],{"class":82},[58,153218,793],{"class":75},[58,153220,153221],{"class":386},"\"修改成功\"",[58,153223,799],{"class":75},[58,153225,153226],{"class":60,"line":33367},[58,153227,3046],{"emptyLinePlaceholder":720},[58,153229,153230],{"class":60,"line":33373},[58,153231,3046],{"emptyLinePlaceholder":720},[58,153233,153234,153236,153239],{"class":60,"line":33379},[58,153235,32591],{"class":92},[58,153237,153238],{"class":379}," query_student",[58,153240,152440],{"class":75},[58,153242,153243,153245,153247,153249,153251,153254],{"class":60,"line":33385},[58,153244,152802],{"class":75},[58,153246,383],{"class":92},[58,153248,61239],{"class":82},[58,153250,793],{"class":75},[58,153252,153253],{"class":386},"\"请输入要查询的学号:\"",[58,153255,799],{"class":75},[58,153257,153258,153260,153262],{"class":60,"line":33391},[58,153259,152988],{"class":75},[58,153261,383],{"class":92},[58,153263,152993],{"class":75},[58,153265,153266],{"class":60,"line":33397},[58,153267,3046],{"emptyLinePlaceholder":720},[58,153269,153270,153272,153274,153276,153278],{"class":60,"line":33417},[58,153271,3747],{"class":92},[58,153273,152616],{"class":75},[58,153275,39571],{"class":92},[58,153277,39577],{"class":82},[58,153279,4385],{"class":75},[58,153281,153282,153284,153286,153288],{"class":60,"line":33423},[58,153283,33095],{"class":82},[58,153285,793],{"class":75},[58,153287,153018],{"class":386},[58,153289,799],{"class":75},[58,153291,153292],{"class":60,"line":33439},[58,153293,152840],{"class":92},[58,153295,153296],{"class":60,"line":33445},[58,153297,3046],{"emptyLinePlaceholder":720},[58,153299,153300],{"class":60,"line":33459},[58,153301,153302],{"class":75},"    print_student(student)\n",[58,153304,153305],{"class":60,"line":33465},[58,153306,3046],{"emptyLinePlaceholder":720},[58,153308,153309],{"class":60,"line":33480},[58,153310,3046],{"emptyLinePlaceholder":720},[58,153312,153313,153315,153318],{"class":60,"line":33486},[58,153314,32591],{"class":92},[58,153316,153317],{"class":379}," print_student",[58,153319,153320],{"class":75},"(student):\n",[58,153322,153323,153325],{"class":60,"line":33495},[58,153324,31943],{"class":82},[58,153326,151918],{"class":75},[58,153328,153329,153332,153334,153336,153339,153342,153344,153347],{"class":60,"line":33501},[58,153330,153331],{"class":92},"        f",[58,153333,1037],{"class":386},[58,153335,1681],{"class":82},[58,153337,153338],{"class":75},"student[",[58,153340,153341],{"class":386},"'student_id'",[58,153343,1724],{"class":75},[58,153345,153346],{"class":82},"}\\t",[58,153348,25777],{"class":386},[58,153350,153351,153353,153355,153357,153359,153362,153364,153366],{"class":60,"line":33510},[58,153352,153331],{"class":92},[58,153354,1037],{"class":386},[58,153356,1681],{"class":82},[58,153358,153338],{"class":75},[58,153360,153361],{"class":386},"'name'",[58,153363,1724],{"class":75},[58,153365,153346],{"class":82},[58,153367,25777],{"class":386},[58,153369,153370,153372,153374,153376,153378,153381,153383,153385],{"class":60,"line":33516},[58,153371,153331],{"class":92},[58,153373,1037],{"class":386},[58,153375,1681],{"class":82},[58,153377,153338],{"class":75},[58,153379,153380],{"class":386},"'age'",[58,153382,1724],{"class":75},[58,153384,153346],{"class":82},[58,153386,25777],{"class":386},[58,153388,153389,153391,153393,153395,153397,153400,153402,153404],{"class":60,"line":33522},[58,153390,153331],{"class":92},[58,153392,1037],{"class":386},[58,153394,1681],{"class":82},[58,153396,153338],{"class":75},[58,153398,153399],{"class":386},"'score'",[58,153401,1724],{"class":75},[58,153403,1730],{"class":82},[58,153405,25777],{"class":386},[58,153407,153408],{"class":60,"line":33531},[58,153409,153410],{"class":75},"    )\n",[58,153412,153413],{"class":60,"line":33537},[58,153414,3046],{"emptyLinePlaceholder":720},[58,153416,153417],{"class":60,"line":33548},[58,153418,3046],{"emptyLinePlaceholder":720},[58,153420,153421,153423,153426],{"class":60,"line":33554},[58,153422,32591],{"class":92},[58,153424,153425],{"class":379}," show_all_students",[58,153427,152440],{"class":75},[58,153429,153430,153432,153434],{"class":60,"line":33573},[58,153431,3747],{"class":92},[58,153433,39574],{"class":92},[58,153435,152621],{"class":75},[58,153437,153438,153440,153442,153445],{"class":60,"line":33579},[58,153439,33095],{"class":82},[58,153441,793],{"class":75},[58,153443,153444],{"class":386},"\"暂无学生\"",[58,153446,799],{"class":75},[58,153448,153449],{"class":60,"line":33590},[58,153450,152840],{"class":92},[58,153452,153453],{"class":60,"line":33596},[58,153454,3046],{"emptyLinePlaceholder":720},[58,153456,153457,153459,153461,153464,153466,153469,153471,153474,153476,153479],{"class":60,"line":33616},[58,153458,31943],{"class":82},[58,153460,793],{"class":75},[58,153462,153463],{"class":386},"\"学号",[58,153465,1884],{"class":82},[58,153467,153468],{"class":386},"姓名",[58,153470,1884],{"class":82},[58,153472,153473],{"class":386},"年龄",[58,153475,1884],{"class":82},[58,153477,153478],{"class":386},"成绩\"",[58,153480,799],{"class":75},[58,153482,153483,153485,153487,153489],{"class":60,"line":33632},[58,153484,3847],{"class":92},[58,153486,152616],{"class":75},[58,153488,26687],{"class":92},[58,153490,152621],{"class":75},[58,153492,153493],{"class":60,"line":33638},[58,153494,153495],{"class":75},"        print_student(student)\n",[58,153497,153498],{"class":60,"line":33652},[58,153499,3046],{"emptyLinePlaceholder":720},[58,153501,153502],{"class":60,"line":33658},[58,153503,3046],{"emptyLinePlaceholder":720},[58,153505,153506,153508,153510],{"class":60,"line":33664},[58,153507,32591],{"class":92},[58,153509,2619],{"class":379},[58,153511,32597],{"class":75},[58,153513,153514,153517,153519],{"class":60,"line":33675},[58,153515,153516],{"class":75},"    students ",[58,153518,383],{"class":92},[58,153520,153521],{"class":75}," load_students()\n",[58,153523,153524],{"class":60,"line":33681},[58,153525,3046],{"emptyLinePlaceholder":720},[58,153527,153528,153530,153532],{"class":60,"line":33687},[58,153529,2897],{"class":92},[58,153531,95921],{"class":82},[58,153533,4385],{"class":75},[58,153535,153536],{"class":60,"line":33697},[58,153537,153538],{"class":75},"        show_menu()\n",[58,153540,153541,153544,153546,153548,153550,153553],{"class":60,"line":33703},[58,153542,153543],{"class":75},"        choice ",[58,153545,383],{"class":92},[58,153547,61239],{"class":82},[58,153549,793],{"class":75},[58,153551,153552],{"class":386},"\"请输入操作:\"",[58,153554,799],{"class":75},[58,153556,153557],{"class":60,"line":33714},[58,153558,3046],{"emptyLinePlaceholder":720},[58,153560,153561,153563,153566,153568,153571],{"class":60,"line":33720},[58,153562,3143],{"class":92},[58,153564,153565],{"class":75}," choice ",[58,153567,3595],{"class":92},[58,153569,153570],{"class":386}," \"1\"",[58,153572,4385],{"class":75},[58,153574,153575],{"class":60,"line":33730},[58,153576,153577],{"class":75},"            add_student(students)\n",[58,153579,153580,153583,153585,153587,153590],{"class":60,"line":33735},[58,153581,153582],{"class":92},"        elif",[58,153584,153565],{"class":75},[58,153586,3595],{"class":92},[58,153588,153589],{"class":386}," \"2\"",[58,153591,4385],{"class":75},[58,153593,153594],{"class":60,"line":33741},[58,153595,153596],{"class":75},"            delete_student(students)\n",[58,153598,153599,153601,153603,153605,153608],{"class":60,"line":33790},[58,153600,153582],{"class":92},[58,153602,153565],{"class":75},[58,153604,3595],{"class":92},[58,153606,153607],{"class":386}," \"3\"",[58,153609,4385],{"class":75},[58,153611,153612],{"class":60,"line":33837},[58,153613,153614],{"class":75},"            update_student(students)\n",[58,153616,153617,153619,153621,153623,153626],{"class":60,"line":33842},[58,153618,153582],{"class":92},[58,153620,153565],{"class":75},[58,153622,3595],{"class":92},[58,153624,153625],{"class":386}," \"4\"",[58,153627,4385],{"class":75},[58,153629,153630],{"class":60,"line":33848},[58,153631,153632],{"class":75},"            query_student(students)\n",[58,153634,153635,153637,153639,153641,153644],{"class":60,"line":33867},[58,153636,153582],{"class":92},[58,153638,153565],{"class":75},[58,153640,3595],{"class":92},[58,153642,153643],{"class":386}," \"5\"",[58,153645,4385],{"class":75},[58,153647,153648],{"class":60,"line":33873},[58,153649,153650],{"class":75},"            show_all_students(students)\n",[58,153652,153653,153655,153657,153659,153662],{"class":60,"line":33893},[58,153654,153582],{"class":92},[58,153656,153565],{"class":75},[58,153658,3595],{"class":92},[58,153660,153661],{"class":386}," \"0\"",[58,153663,4385],{"class":75},[58,153665,153666,153668,153670,153673],{"class":60,"line":33899},[58,153667,35294],{"class":82},[58,153669,793],{"class":75},[58,153671,153672],{"class":386},"\"退出系统\"",[58,153674,799],{"class":75},[58,153676,153677],{"class":60,"line":33905},[58,153678,115727],{"class":92},[58,153680,153681,153683],{"class":60,"line":33915},[58,153682,3180],{"class":92},[58,153684,4385],{"class":75},[58,153686,153687,153689,153691,153694],{"class":60,"line":33920},[58,153688,35294],{"class":82},[58,153690,793],{"class":75},[58,153692,153693],{"class":386},"\"输入错误\"",[58,153695,799],{"class":75},[58,153697,153698],{"class":60,"line":33926},[58,153699,3046],{"emptyLinePlaceholder":720},[58,153701,153702],{"class":60,"line":33942},[58,153703,3046],{"emptyLinePlaceholder":720},[58,153705,153706,153708,153710,153712,153714],{"class":60,"line":33987},[58,153707,2180],{"class":92},[58,153709,31864],{"class":82},[58,153711,102188],{"class":92},[58,153713,102191],{"class":386},[58,153715,4385],{"class":75},[58,153717,153718],{"class":60,"line":33993},[58,153719,102198],{"class":75},[175,153721,153722],{},"这个项目串联了：",[19,153724,153725,153728,153731,153734,153737,153739],{},[22,153726,153727],{},"菜单循环。",[22,153729,153730],{},"函数封装。",[22,153732,153733],{},"列表字典。",[22,153735,153736],{},"JSON 读写。",[22,153738,152206],{},[22,153740,153741,29029],{},[55,153742,153743],{},"if __name__ == \"__main__\"",[14,153745,153747],{"id":153746},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[175,153749,153750],{},"可以进一步拆成两个类：",[19,153752,153753,153758],{},[22,153754,153755,153757],{},[55,153756,150047],{},"：表示单个学生。",[22,153759,153760,153762],{},[55,153761,152073],{},"：负责学生增删改查和文件保存。",[175,153764,153765],{},"示意代码：",[48,153767,153769],{"className":31022,"code":153768,"language":31024,"meta":53,"style":53},"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",[55,153770,153771,153781,153785,153789,153793,153801,153808,153814,153820,153826,153830,153838,153844,153854,153864,153874,153884,153888,153892,153898,153906,153914,153922,153930,153938,153946],{"__ignoreMap":53},[58,153772,153773,153775,153777,153779],{"class":60,"line":61},[58,153774,31381],{"class":92},[58,153776,151631],{"class":75},[58,153778,31036],{"class":92},[58,153780,151636],{"class":75},[58,153782,153783],{"class":60,"line":68},[58,153784,3046],{"emptyLinePlaceholder":720},[58,153786,153787],{"class":60,"line":79},[58,153788,3046],{"emptyLinePlaceholder":720},[58,153790,153791],{"class":60,"line":105},[58,153792,151649],{"class":379},[58,153794,153795,153797,153799],{"class":60,"line":627},[58,153796,15338],{"class":92},[58,153798,8544],{"class":379},[58,153800,4385],{"class":75},[58,153802,153803,153806],{"class":60,"line":509},[58,153804,153805],{"class":75},"    student_id: ",[58,153807,151665],{"class":82},[58,153809,153810,153812],{"class":60,"line":559},[58,153811,151662],{"class":75},[58,153813,151665],{"class":82},[58,153815,153816,153818],{"class":60,"line":654},[58,153817,151670],{"class":75},[58,153819,151673],{"class":82},[58,153821,153822,153824],{"class":60,"line":671},[58,153823,151678],{"class":75},[58,153825,151681],{"class":82},[58,153827,153828],{"class":60,"line":677},[58,153829,3046],{"emptyLinePlaceholder":720},[58,153831,153832,153834,153836],{"class":60,"line":2260},[58,153833,31445],{"class":92},[58,153835,151829],{"class":379},[58,153837,31451],{"class":75},[58,153839,153840,153842],{"class":60,"line":694},[58,153841,15396],{"class":92},[58,153843,76],{"class":75},[58,153845,153846,153848,153850,153852],{"class":60,"line":2270},[58,153847,151842],{"class":386},[58,153849,86],{"class":75},[58,153851,31467],{"class":82},[58,153853,151849],{"class":75},[58,153855,153856,153858,153860,153862],{"class":60,"line":2275},[58,153857,151854],{"class":386},[58,153859,86],{"class":75},[58,153861,31467],{"class":82},[58,153863,151861],{"class":75},[58,153865,153866,153868,153870,153872],{"class":60,"line":2289},[58,153867,151866],{"class":386},[58,153869,86],{"class":75},[58,153871,31467],{"class":82},[58,153873,151873],{"class":75},[58,153875,153876,153878,153880,153882],{"class":60,"line":2294},[58,153877,151878],{"class":386},[58,153879,86],{"class":75},[58,153881,31467],{"class":82},[58,153883,151885],{"class":75},[58,153885,153886],{"class":60,"line":2300},[58,153887,3175],{"class":75},[58,153889,153890],{"class":60,"line":2321},[58,153891,3046],{"emptyLinePlaceholder":720},[58,153893,153894,153896],{"class":60,"line":2326},[58,153895,151493],{"class":379},[58,153897,151496],{"class":82},[58,153899,153900,153902,153904],{"class":60,"line":2340},[58,153901,31445],{"class":92},[58,153903,151906],{"class":379},[58,153905,151909],{"class":75},[58,153907,153908,153910,153912],{"class":60,"line":2345},[58,153909,15396],{"class":92},[58,153911,151513],{"class":82},[58,153913,151918],{"class":75},[58,153915,153916,153918,153920],{"class":60,"line":2374},[58,153917,151923],{"class":75},[58,153919,151926],{"class":386},[58,153921,88465],{"class":75},[58,153923,153924,153926,153928],{"class":60,"line":2379},[58,153925,151923],{"class":75},[58,153927,63311],{"class":386},[58,153929,88465],{"class":75},[58,153931,153932,153934,153936],{"class":60,"line":2396},[58,153933,151923],{"class":75},[58,153935,69756],{"class":386},[58,153937,88465],{"class":75},[58,153939,153940,153942,153944],{"class":60,"line":2401},[58,153941,151923],{"class":75},[58,153943,151951],{"class":386},[58,153945,88465],{"class":75},[58,153947,153948],{"class":60,"line":2406},[58,153949,38770],{"class":75},[175,153951,153952],{},"管理器示意：",[48,153954,153956],{"className":31022,"code":153955,"language":31024,"meta":53,"style":53},"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",[55,153957,153958,153967,153975,153986,153990,154000,154013,154024,154031,154037,154041,154050,154059,154065,154072],{"__ignoreMap":53},[58,153959,153960,153962,153965],{"class":60,"line":61},[58,153961,15338],{"class":92},[58,153963,153964],{"class":379}," StudentManager",[58,153966,4385],{"class":75},[58,153968,153969,153971,153973],{"class":60,"line":68},[58,153970,31445],{"class":92},[58,153972,31448],{"class":82},[58,153974,31451],{"class":75},[58,153976,153977,153979,153982,153984],{"class":60,"line":79},[58,153978,31489],{"class":82},[58,153980,153981],{"class":75},".students ",[58,153983,383],{"class":92},[58,153985,52476],{"class":75},[58,153987,153988],{"class":60,"line":105},[58,153989,3046],{"emptyLinePlaceholder":720},[58,153991,153992,153994,153997],{"class":60,"line":627},[58,153993,31445],{"class":92},[58,153995,153996],{"class":379}," find_by_id",[58,153998,153999],{"class":75},"(self, student_id):\n",[58,154001,154002,154004,154006,154008,154010],{"class":60,"line":509},[58,154003,4049],{"class":92},[58,154005,152616],{"class":75},[58,154007,26687],{"class":92},[58,154009,39517],{"class":82},[58,154011,154012],{"class":75},".students:\n",[58,154014,154015,154017,154020,154022],{"class":60,"line":559},[58,154016,5288],{"class":92},[58,154018,154019],{"class":75}," student.student_id ",[58,154021,3595],{"class":92},[58,154023,152637],{"class":75},[58,154025,154026,154029],{"class":60,"line":654},[58,154027,154028],{"class":92},"                return",[58,154030,152644],{"class":75},[58,154032,154033,154035],{"class":60,"line":671},[58,154034,15396],{"class":92},[58,154036,152651],{"class":82},[58,154038,154039],{"class":60,"line":677},[58,154040,3046],{"emptyLinePlaceholder":720},[58,154042,154043,154045,154047],{"class":60,"line":2260},[58,154044,31445],{"class":92},[58,154046,5855],{"class":379},[58,154048,154049],{"class":75},"(self, student):\n",[58,154051,154052,154054,154056],{"class":60,"line":694},[58,154053,3143],{"class":92},[58,154055,39517],{"class":82},[58,154057,154058],{"class":75},".find_by_id(student.student_id):\n",[58,154060,154061,154063],{"class":60,"line":2270},[58,154062,16375],{"class":92},[58,154064,126436],{"class":82},[58,154066,154067,154069],{"class":60,"line":2275},[58,154068,31489],{"class":82},[58,154070,154071],{"class":75},".students.append(student)\n",[58,154073,154074,154076],{"class":60,"line":2289},[58,154075,15396],{"class":92},[58,154077,154078],{"class":82}," True\n",[175,154080,154081],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154083,154085],{"id":154084},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[114,154087,154089],{"id":154088},"_1251-数据结构","12.5.1 数据结构",[48,154091,154093],{"className":31022,"code":154092,"language":31024,"meta":53,"style":53},"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",[55,154094,154095,154103,154134,154164,154193,154222],{"__ignoreMap":53},[58,154096,154097,154099,154101],{"class":60,"line":61},[58,154098,148944],{"class":75},[58,154100,383],{"class":92},[58,154102,56081],{"class":75},[58,154104,154105,154107,154109,154111,154113,154115,154118,154120,154123,154125,154127,154129,154132],{"class":60,"line":68},[58,154106,148864],{"class":75},[58,154108,148476],{"class":386},[58,154110,86],{"class":75},[58,154112,149087],{"class":386},[58,154114,469],{"class":75},[58,154116,154117],{"class":386},"\"category\"",[58,154119,86],{"class":75},[58,154121,154122],{"class":386},"\"手机\"",[58,154124,469],{"class":75},[58,154126,84714],{"class":386},[58,154128,86],{"class":75},[58,154130,154131],{"class":82},"12000",[58,154133,5576],{"class":75},[58,154135,154136,154138,154140,154142,154144,154146,154148,154150,154153,154155,154157,154159,154162],{"class":60,"line":79},[58,154137,148864],{"class":75},[58,154139,148476],{"class":386},[58,154141,86],{"class":75},[58,154143,149087],{"class":386},[58,154145,469],{"class":75},[58,154147,154117],{"class":386},[58,154149,86],{"class":75},[58,154151,154152],{"class":386},"\"电脑\"",[58,154154,469],{"class":75},[58,154156,84714],{"class":386},[58,154158,86],{"class":75},[58,154160,154161],{"class":82},"18000",[58,154163,5576],{"class":75},[58,154165,154166,154168,154170,154172,154174,154176,154178,154180,154182,154184,154186,154188,154191],{"class":60,"line":105},[58,154167,148864],{"class":75},[58,154169,148476],{"class":386},[58,154171,86],{"class":75},[58,154173,149108],{"class":386},[58,154175,469],{"class":75},[58,154177,154117],{"class":386},[58,154179,86],{"class":75},[58,154181,154122],{"class":386},[58,154183,469],{"class":75},[58,154185,84714],{"class":386},[58,154187,86],{"class":75},[58,154189,154190],{"class":82},"15000",[58,154192,5576],{"class":75},[58,154194,154195,154197,154199,154201,154203,154205,154207,154209,154211,154213,154215,154217,154220],{"class":60,"line":627},[58,154196,148864],{"class":75},[58,154198,148476],{"class":386},[58,154200,86],{"class":75},[58,154202,149108],{"class":386},[58,154204,469],{"class":75},[58,154206,154117],{"class":386},[58,154208,86],{"class":75},[58,154210,154152],{"class":386},[58,154212,469],{"class":75},[58,154214,84714],{"class":386},[58,154216,86],{"class":75},[58,154218,154219],{"class":82},"16000",[58,154221,5576],{"class":75},[58,154223,154224],{"class":60,"line":509},[58,154225,33890],{"class":75},[114,154227,154229],{"id":154228},"_1252-按日期统计","12.5.2 按日期统计",[48,154231,154233],{"className":31022,"code":154232,"language":31024,"meta":53,"style":53},"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",[55,154234,154235,154244,154248,154259,154273,154286,154305,154309],{"__ignoreMap":53},[58,154236,154237,154240,154242],{"class":60,"line":61},[58,154238,154239],{"class":75},"daily_total ",[58,154241,383],{"class":92},[58,154243,88497],{"class":75},[58,154245,154246],{"class":60,"line":68},[58,154247,3046],{"emptyLinePlaceholder":720},[58,154249,154250,154252,154254,154256],{"class":60,"line":79},[58,154251,3671],{"class":92},[58,154253,148688],{"class":75},[58,154255,26687],{"class":92},[58,154257,154258],{"class":75}," sales:\n",[58,154260,154261,154264,154266,154269,154271],{"class":60,"line":105},[58,154262,154263],{"class":75},"    date ",[58,154265,383],{"class":92},[58,154267,154268],{"class":75}," item[",[58,154270,148476],{"class":386},[58,154272,33890],{"class":75},[58,154274,154275,154278,154280,154282,154284],{"class":60,"line":627},[58,154276,154277],{"class":75},"    amount ",[58,154279,383],{"class":92},[58,154281,154268],{"class":75},[58,154283,84714],{"class":386},[58,154285,33890],{"class":75},[58,154287,154288,154291,154293,154296,154298,154300,154302],{"class":60,"line":509},[58,154289,154290],{"class":75},"    daily_total[date] ",[58,154292,383],{"class":92},[58,154294,154295],{"class":75}," daily_total.get(date, ",[58,154297,979],{"class":82},[58,154299,14358],{"class":75},[58,154301,1267],{"class":92},[58,154303,154304],{"class":75}," amount\n",[58,154306,154307],{"class":60,"line":559},[58,154308,3046],{"emptyLinePlaceholder":720},[58,154310,154311,154313],{"class":60,"line":654},[58,154312,31059],{"class":82},[58,154314,154315],{"class":75},"(daily_total)\n",[114,154317,154319],{"id":154318},"_1253-按类别统计","12.5.3 按类别统计",[48,154321,154323],{"className":31022,"code":154322,"language":31024,"meta":53,"style":53},"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",[55,154324,154325,154334,154338,154348,154361,154373,154391,154395],{"__ignoreMap":53},[58,154326,154327,154330,154332],{"class":60,"line":61},[58,154328,154329],{"class":75},"category_total ",[58,154331,383],{"class":92},[58,154333,88497],{"class":75},[58,154335,154336],{"class":60,"line":68},[58,154337,3046],{"emptyLinePlaceholder":720},[58,154339,154340,154342,154344,154346],{"class":60,"line":79},[58,154341,3671],{"class":92},[58,154343,148688],{"class":75},[58,154345,26687],{"class":92},[58,154347,154258],{"class":75},[58,154349,154350,154353,154355,154357,154359],{"class":60,"line":105},[58,154351,154352],{"class":75},"    category ",[58,154354,383],{"class":92},[58,154356,154268],{"class":75},[58,154358,154117],{"class":386},[58,154360,33890],{"class":75},[58,154362,154363,154365,154367,154369,154371],{"class":60,"line":627},[58,154364,154277],{"class":75},[58,154366,383],{"class":92},[58,154368,154268],{"class":75},[58,154370,84714],{"class":386},[58,154372,33890],{"class":75},[58,154374,154375,154378,154380,154383,154385,154387,154389],{"class":60,"line":509},[58,154376,154377],{"class":75},"    category_total[category] ",[58,154379,383],{"class":92},[58,154381,154382],{"class":75}," category_total.get(category, ",[58,154384,979],{"class":82},[58,154386,14358],{"class":75},[58,154388,1267],{"class":92},[58,154390,154304],{"class":75},[58,154392,154393],{"class":60,"line":559},[58,154394,3046],{"emptyLinePlaceholder":720},[58,154396,154397,154399],{"class":60,"line":654},[58,154398,31059],{"class":82},[58,154400,154401],{"class":75},"(category_total)\n",[114,154403,154405],{"id":154404},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[48,154407,154409],{"className":31022,"code":154408,"language":31024,"meta":53,"style":53},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[55,154410,154411,154436],{"__ignoreMap":53},[58,154412,154413,154416,154418,154420,154423,154426,154429,154432,154434],{"class":60,"line":61},[58,154414,154415],{"class":75},"top_date, top_amount ",[58,154417,383],{"class":92},[58,154419,6597],{"class":82},[58,154421,154422],{"class":75},"(daily_total.items(), ",[58,154424,154425],{"class":5862},"key",[58,154427,154428],{"class":92},"=lambda",[58,154430,154431],{"class":75}," item: item[",[58,154433,89],{"class":82},[58,154435,5303],{"class":75},[58,154437,154438,154440],{"class":60,"line":68},[58,154439,31059],{"class":82},[58,154441,154442],{"class":75},"(top_date, top_amount)\n",[14,154444,154446],{"id":154445},"_126-绘制柱状图","12.6 绘制柱状图",[48,154448,154450],{"className":31022,"code":154449,"language":31024,"meta":53,"style":53},"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",[55,154451,154452,154466,154477,154481,154489,154501,154513,154524,154528,154532,154542,154553,154567,154572,154589,154606,154622,154626],{"__ignoreMap":53},[58,154453,154454,154456,154458,154460,154462,154464],{"class":60,"line":61},[58,154455,31381],{"class":92},[58,154457,147858],{"class":75},[58,154459,31036],{"class":92},[58,154461,147863],{"class":75},[58,154463,32027],{"class":92},[58,154465,147868],{"class":75},[58,154467,154468,154470,154472,154474],{"class":60,"line":68},[58,154469,31381],{"class":92},[58,154471,147717],{"class":75},[58,154473,31036],{"class":92},[58,154475,154476],{"class":75}," Bar\n",[58,154478,154479],{"class":60,"line":79},[58,154480,3046],{"emptyLinePlaceholder":720},[58,154482,154483,154485,154487],{"class":60,"line":105},[58,154484,154329],{"class":75},[58,154486,383],{"class":92},[58,154488,76],{"class":75},[58,154490,154491,154494,154496,154499],{"class":60,"line":627},[58,154492,154493],{"class":386},"    \"手机\"",[58,154495,86],{"class":75},[58,154497,154498],{"class":82},"27000",[58,154500,32110],{"class":75},[58,154502,154503,154506,154508,154511],{"class":60,"line":509},[58,154504,154505],{"class":386},"    \"电脑\"",[58,154507,86],{"class":75},[58,154509,154510],{"class":82},"34000",[58,154512,32110],{"class":75},[58,154514,154515,154518,154520,154522],{"class":60,"line":559},[58,154516,154517],{"class":386},"    \"耳机\"",[58,154519,86],{"class":75},[58,154521,125028],{"class":82},[58,154523,32110],{"class":75},[58,154525,154526],{"class":60,"line":654},[58,154527,108],{"class":75},[58,154529,154530],{"class":60,"line":671},[58,154531,3046],{"emptyLinePlaceholder":720},[58,154533,154534,154537,154539],{"class":60,"line":677},[58,154535,154536],{"class":75},"bar ",[58,154538,383],{"class":92},[58,154540,154541],{"class":75}," Bar()\n",[58,154543,154544,154547,154550],{"class":60,"line":2260},[58,154545,154546],{"class":75},"bar.add_xaxis(",[58,154548,154549],{"class":82},"list",[58,154551,154552],{"class":75},"(category_total.keys()))\n",[58,154554,154555,154558,154560,154562,154564],{"class":60,"line":694},[58,154556,154557],{"class":75},"bar.add_yaxis(",[58,154559,147774],{"class":386},[58,154561,469],{"class":75},[58,154563,154549],{"class":82},[58,154565,154566],{"class":75},"(category_total.values()))\n",[58,154568,154569],{"class":60,"line":2270},[58,154570,154571],{"class":75},"bar.set_global_opts(\n",[58,154573,154574,154576,154578,154580,154582,154584,154587],{"class":60,"line":2275},[58,154575,147952],{"class":5862},[58,154577,383],{"class":92},[58,154579,147957],{"class":75},[58,154581,52049],{"class":5862},[58,154583,383],{"class":92},[58,154585,154586],{"class":386},"\"品类销售额\"",[58,154588,38691],{"class":75},[58,154590,154591,154593,154595,154597,154599,154601,154604],{"class":60,"line":2289},[58,154592,147971],{"class":5862},[58,154594,383],{"class":92},[58,154596,147976],{"class":75},[58,154598,80440],{"class":5862},[58,154600,383],{"class":92},[58,154602,154603],{"class":386},"\"品类\"",[58,154605,38691],{"class":75},[58,154607,154608,154610,154612,154614,154616,154618,154620],{"class":60,"line":2294},[58,154609,147990],{"class":5862},[58,154611,383],{"class":92},[58,154613,147976],{"class":75},[58,154615,80440],{"class":5862},[58,154617,383],{"class":92},[58,154619,147774],{"class":386},[58,154621,38691],{"class":75},[58,154623,154624],{"class":60,"line":2300},[58,154625,799],{"class":75},[58,154627,154628,154631,154634],{"class":60,"line":2321},[58,154629,154630],{"class":75},"bar.render(",[58,154632,154633],{"class":386},"\"category_sales.html\"",[58,154635,799],{"class":75},[14,154637,154639],{"id":154638},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[175,154641,154642],{},"时间线适合展示不同日期、月份、年份的数据变化。",[48,154644,154646],{"className":31022,"code":154645,"language":31024,"meta":53,"style":53},"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",[55,154647,154648,154662,154673,154677,154685,154709,154732,154757,154761,154765,154775,154779,154790,154799,154809,154823,154854,154859,154863],{"__ignoreMap":53},[58,154649,154650,154652,154654,154656,154658,154660],{"class":60,"line":61},[58,154651,31381],{"class":92},[58,154653,147858],{"class":75},[58,154655,31036],{"class":92},[58,154657,147863],{"class":75},[58,154659,32027],{"class":92},[58,154661,147868],{"class":75},[58,154663,154664,154666,154668,154670],{"class":60,"line":68},[58,154665,31381],{"class":92},[58,154667,147717],{"class":75},[58,154669,31036],{"class":92},[58,154671,154672],{"class":75}," Bar, Timeline\n",[58,154674,154675],{"class":60,"line":79},[58,154676,3046],{"emptyLinePlaceholder":720},[58,154678,154679,154681,154683],{"class":60,"line":105},[58,154680,102287],{"class":75},[58,154682,383],{"class":92},[58,154684,76],{"class":75},[58,154686,154687,154690,154693,154695,154697,154699,154701,154703,154705,154707],{"class":60,"line":627},[58,154688,154689],{"class":386},"    \"2024-10-01\"",[58,154691,154692],{"class":75},": {",[58,154694,154122],{"class":386},[58,154696,86],{"class":75},[58,154698,154131],{"class":82},[58,154700,469],{"class":75},[58,154702,154152],{"class":386},[58,154704,86],{"class":75},[58,154706,154161],{"class":82},[58,154708,5576],{"class":75},[58,154710,154711,154714,154716,154718,154720,154722,154724,154726,154728,154730],{"class":60,"line":509},[58,154712,154713],{"class":386},"    \"2024-10-02\"",[58,154715,154692],{"class":75},[58,154717,154122],{"class":386},[58,154719,86],{"class":75},[58,154721,154190],{"class":82},[58,154723,469],{"class":75},[58,154725,154152],{"class":386},[58,154727,86],{"class":75},[58,154729,154219],{"class":82},[58,154731,5576],{"class":75},[58,154733,154734,154737,154739,154741,154743,154746,154748,154750,154752,154755],{"class":60,"line":559},[58,154735,154736],{"class":386},"    \"2024-10-03\"",[58,154738,154692],{"class":75},[58,154740,154122],{"class":386},[58,154742,86],{"class":75},[58,154744,154745],{"class":82},"17000",[58,154747,469],{"class":75},[58,154749,154152],{"class":386},[58,154751,86],{"class":75},[58,154753,154754],{"class":82},"19000",[58,154756,5576],{"class":75},[58,154758,154759],{"class":60,"line":654},[58,154760,108],{"class":75},[58,154762,154763],{"class":60,"line":671},[58,154764,3046],{"emptyLinePlaceholder":720},[58,154766,154767,154770,154772],{"class":60,"line":677},[58,154768,154769],{"class":75},"timeline ",[58,154771,383],{"class":92},[58,154773,154774],{"class":75}," Timeline()\n",[58,154776,154777],{"class":60,"line":2260},[58,154778,3046],{"emptyLinePlaceholder":720},[58,154780,154781,154783,154786,154788],{"class":60,"line":694},[58,154782,3671],{"class":92},[58,154784,154785],{"class":75}," date, category_data ",[58,154787,26687],{"class":92},[58,154789,149627],{"class":75},[58,154791,154792,154795,154797],{"class":60,"line":2270},[58,154793,154794],{"class":75},"    bar ",[58,154796,383],{"class":92},[58,154798,154541],{"class":75},[58,154800,154801,154804,154806],{"class":60,"line":2275},[58,154802,154803],{"class":75},"    bar.add_xaxis(",[58,154805,154549],{"class":82},[58,154807,154808],{"class":75},"(category_data.keys()))\n",[58,154810,154811,154814,154816,154818,154820],{"class":60,"line":2289},[58,154812,154813],{"class":75},"    bar.add_yaxis(",[58,154815,147774],{"class":386},[58,154817,469],{"class":75},[58,154819,154549],{"class":82},[58,154821,154822],{"class":75},"(category_data.values()))\n",[58,154824,154825,154828,154831,154833,154835,154837,154839,154841,154843,154845,154847,154849,154852],{"class":60,"line":2294},[58,154826,154827],{"class":75},"    bar.set_global_opts(",[58,154829,154830],{"class":5862},"title_opts",[58,154832,383],{"class":92},[58,154834,147957],{"class":75},[58,154836,52049],{"class":5862},[58,154838,383],{"class":92},[58,154840,843],{"class":92},[58,154842,1037],{"class":386},[58,154844,1681],{"class":82},[58,154846,74557],{"class":75},[58,154848,1730],{"class":82},[58,154850,154851],{"class":386},"销售额\"",[58,154853,31141],{"class":75},[58,154855,154856],{"class":60,"line":2300},[58,154857,154858],{"class":75},"    timeline.add(bar, date)\n",[58,154860,154861],{"class":60,"line":2321},[58,154862,3046],{"emptyLinePlaceholder":720},[58,154864,154865,154868,154871],{"class":60,"line":2326},[58,154866,154867],{"class":75},"timeline.render(",[58,154869,154870],{"class":386},"\"timeline_sales.html\"",[58,154872,799],{"class":75},[14,154874,154876],{"id":154875},"_128-绘制地图","12.8 绘制地图",[175,154878,154879],{},"地图适合展示地区数据。",[48,154881,154883],{"className":31022,"code":154882,"language":31024,"meta":53,"style":53},"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",[55,154884,154885,154899,154910,154914,154922,154935,154947,154960,154973,154977,154981,154991,155006,155011,155028,155047,155051],{"__ignoreMap":53},[58,154886,154887,154889,154891,154893,154895,154897],{"class":60,"line":61},[58,154888,31381],{"class":92},[58,154890,147858],{"class":75},[58,154892,31036],{"class":92},[58,154894,147863],{"class":75},[58,154896,32027],{"class":92},[58,154898,147868],{"class":75},[58,154900,154901,154903,154905,154907],{"class":60,"line":68},[58,154902,31381],{"class":92},[58,154904,147717],{"class":75},[58,154906,31036],{"class":92},[58,154908,154909],{"class":75}," Map\n",[58,154911,154912],{"class":60,"line":79},[58,154913,3046],{"emptyLinePlaceholder":720},[58,154915,154916,154918,154920],{"class":60,"line":105},[58,154917,102287],{"class":75},[58,154919,383],{"class":92},[58,154921,56081],{"class":75},[58,154923,154924,154927,154929,154931,154933],{"class":60,"line":627},[58,154925,154926],{"class":75},"    (",[58,154928,69901],{"class":386},[58,154930,469],{"class":75},[58,154932,1602],{"class":82},[58,154934,38691],{"class":75},[58,154936,154937,154939,154941,154943,154945],{"class":60,"line":509},[58,154938,154926],{"class":75},[58,154940,69921],{"class":386},[58,154942,469],{"class":75},[58,154944,147791],{"class":82},[58,154946,38691],{"class":75},[58,154948,154949,154951,154954,154956,154958],{"class":60,"line":559},[58,154950,154926],{"class":75},[58,154952,154953],{"class":386},"\"广东\"",[58,154955,469],{"class":75},[58,154957,2369],{"class":82},[58,154959,38691],{"class":75},[58,154961,154962,154964,154967,154969,154971],{"class":60,"line":654},[58,154963,154926],{"class":75},[58,154965,154966],{"class":386},"\"浙江\"",[58,154968,469],{"class":75},[58,154970,147796],{"class":82},[58,154972,38691],{"class":75},[58,154974,154975],{"class":60,"line":671},[58,154976,33890],{"class":75},[58,154978,154979],{"class":60,"line":677},[58,154980,3046],{"emptyLinePlaceholder":720},[58,154982,154983,154986,154988],{"class":60,"line":2260},[58,154984,154985],{"class":75},"map_chart ",[58,154987,383],{"class":92},[58,154989,154990],{"class":75}," Map()\n",[58,154992,154993,154996,154998,155001,155004],{"class":60,"line":694},[58,154994,154995],{"class":75},"map_chart.add(",[58,154997,147774],{"class":386},[58,154999,155000],{"class":75},", data, ",[58,155002,155003],{"class":386},"\"china\"",[58,155005,799],{"class":75},[58,155007,155008],{"class":60,"line":2270},[58,155009,155010],{"class":75},"map_chart.set_global_opts(\n",[58,155012,155013,155015,155017,155019,155021,155023,155026],{"class":60,"line":2275},[58,155014,147952],{"class":5862},[58,155016,383],{"class":92},[58,155018,147957],{"class":75},[58,155020,52049],{"class":5862},[58,155022,383],{"class":92},[58,155024,155025],{"class":386},"\"地区销售额\"",[58,155027,38691],{"class":75},[58,155029,155030,155033,155035,155038,155041,155043,155045],{"class":60,"line":2289},[58,155031,155032],{"class":5862},"    visualmap_opts",[58,155034,383],{"class":92},[58,155036,155037],{"class":75},"opts.VisualMapOpts(",[58,155039,155040],{"class":5862},"max_",[58,155042,383],{"class":92},[58,155044,2369],{"class":82},[58,155046,38691],{"class":75},[58,155048,155049],{"class":60,"line":2294},[58,155050,799],{"class":75},[58,155052,155053,155056,155059],{"class":60,"line":2300},[58,155054,155055],{"class":75},"map_chart.render(",[58,155057,155058],{"class":386},"\"map_sales.html\"",[58,155060,799],{"class":75},[175,155062,155063],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,155065,155067],{"id":155066},"_129-项目拆分建议","12.9 项目拆分建议",[175,155069,155070],{},"当代码超过一个文件时，可以这样组织：",[48,155072,155075],{"className":155073,"code":155074,"language":5833,"meta":53},[5831],"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",[55,155076,155074],{"__ignoreMap":53},[175,155078,155079],{},"职责：",[19,155081,155082,155088,155094,155100],{},[22,155083,155084,155087],{},[55,155085,155086],{},"main.py","：程序入口。",[22,155089,155090,155093],{},[55,155091,155092],{},"file_utils.py","：读写 JSON。",[22,155095,155096,155099],{},[55,155097,155098],{},"sales_service.py","：统计销售数据。",[22,155101,155102,155105],{},[55,155103,155104],{},"chart_builder.py","：生成图表。",[14,155107,155109],{"id":155108},"_1210-python基础复习清单","12.10 Python基础复习清单",[175,155111,155112],{},"语法基础：",[19,155114,155115,155118,155121,155124],{},[22,155116,155117],{},"会写变量、注释、输入输出。",[22,155119,155120],{},"会使用 int、float、str、bool。",[22,155122,155123],{},"会做类型转换。",[22,155125,155126],{},"会使用 f-string 格式化输出。",[175,155128,155129],{},"流程控制：",[19,155131,155132,155138,155144,155152],{},[22,155133,155134,155135,29029],{},"会写 ",[55,155136,155137],{},"if elif else",[22,155139,155134,155140,101647,155142,29029],{},[55,155141,109292],{},[55,155143,3671],{},[22,155145,155146,155147,101647,155149,29029],{},"理解 ",[55,155148,2699],{},[55,155150,155151],{},"continue",[22,155153,155154],{},"能写嵌套循环。",[175,155156,155157],{},"函数：",[19,155159,155160,155163,155166,155169],{},[22,155161,155162],{},"会定义和调用函数。",[22,155164,155165],{},"理解参数和返回值。",[22,155167,155168],{},"知道局部变量和全局变量。",[22,155170,155171],{},"会使用默认参数、关键字参数、不定长参数。",[175,155173,155174],{},"容器：",[19,155176,155177,155180,155183,155186,155189],{},[22,155178,155179],{},"会使用列表增删改查。",[22,155181,155182],{},"会遍历列表、字典。",[22,155184,155185],{},"会使用切片。",[22,155187,155188],{},"会用集合去重。",[22,155190,155191],{},"会处理列表嵌套字典。",[175,155193,155194],{},"文件和模块：",[19,155196,155197,155200,155203,155206,155209],{},[22,155198,155199],{},"会读写文本文件。",[22,155201,155202],{},"会读写 JSON。",[22,155204,155205],{},"会捕获常见异常。",[22,155207,155208],{},"会导入模块和第三方包。",[22,155210,155211],{},"会创建简单包结构。",[175,155213,155214],{},"项目能力：",[19,155216,155217,155220,155223,155226,155229],{},[22,155218,155219],{},"能把代码拆成函数。",[22,155221,155222],{},"能把数据保存到文件。",[22,155224,155225],{},"能处理用户输入错误。",[22,155227,155228],{},"能写一个完整菜单程序。",[22,155230,155231],{},"能用 pyecharts 生成图表。",[14,155233,155235],{"id":155234},"_1211-推荐练习顺序","12.11 推荐练习顺序",[19,155237,155238,155241,155244,155247,155250,155253,155256,155259],{},[22,155239,155240],{},"猜数字游戏。",[22,155242,155243],{},"ATM 菜单程序。",[22,155245,155246],{},"学生成绩统计。",[22,155248,155249],{},"学生管理系统函数版。",[22,155251,155252],{},"学生管理系统文件持久化版。",[22,155254,155255],{},"学生管理系统面向对象版。",[22,155257,155258],{},"销售数据统计。",[22,155260,155261],{},"销售数据可视化。",[14,155263,155265],{"id":155264},"_1212-常见学习误区","12.12 常见学习误区",[19,155267,155268,155271,155274,155277,155280,155283,155286],{},[22,155269,155270],{},"只看视频不敲代码。",[22,155272,155273],{},"一报错就复制错误去搜，不先读报错位置。",[22,155275,155276],{},"变量名随便写，后续自己看不懂。",[22,155278,155279],{},"所有代码都写在一个文件一个函数里。",[22,155281,155282],{},"不保存练习代码，复习时没有材料。",[22,155284,155285],{},"还没掌握列表字典就急着学框架。",[22,155287,155288],{},"不会读官方文档，只依赖教程。",[14,155290,155292],{"id":155291},"_1213-如何读报错","12.13 如何读报错",[175,155294,155295],{},"报错通常从下往上看最后几行。",[175,155297,15779],{},[48,155299,155302],{"className":155300,"code":155301,"language":5833,"meta":53},[5831],"ValueError: invalid literal for int() with base 10: 'abc'\n",[55,155303,155301],{"__ignoreMap":53},[175,155305,25243],{},[19,155307,155308,155314,155324],{},[22,155309,155310,155311,29029],{},"异常类型是 ",[55,155312,155313],{},"ValueError",[22,155315,107974,155316,155319,155320,155323],{},[55,155317,155318],{},"int()"," 无法把 ",[55,155321,155322],{},"'abc'"," 转成整数。",[22,155325,155326],{},"应该检查输入内容或增加异常处理。",[175,155328,155329],{},"再看文件名和行号：",[48,155331,155334],{"className":155332,"code":155333,"language":5833,"meta":53},[5831],"File \"main.py\", line 10, in \u003Cmodule>\n",[55,155335,155333],{"__ignoreMap":53},[175,155337,155338,155339,155341],{},"表示错误发生在 ",[55,155340,155086],{}," 第 10 行。",[14,155343,155345],{"id":155344},"_1214-后续学习方向","12.14 后续学习方向",[175,155347,155348],{},"Python 基础完成后，可以按兴趣选择方向：",[19,155350,155351,155363,155372,155384,155395,155404,155414],{},[22,155352,155353,155354,1000,155357,1000,155360,29029],{},"自动化办公：",[55,155355,155356],{},"openpyxl",[55,155358,155359],{},"python-docx",[55,155361,155362],{},"pdfplumber",[22,155364,155365,155366,1000,155368,1000,155370,29029],{},"数据分析：",[55,155367,101255],{},[55,155369,146664],{},[55,155371,146672],{},[22,155373,155374,155375,1000,155378,1000,155381,29029],{},"Web 后端：",[55,155376,155377],{},"Flask",[55,155379,155380],{},"FastAPI",[55,155382,155383],{},"Django",[22,155385,155386,155387,1000,155389,1000,155392,29029],{},"爬虫：",[55,155388,146649],{},[55,155390,155391],{},"BeautifulSoup",[55,155393,155394],{},"Scrapy",[22,155396,155397,155398,1000,155400,155403],{},"测试开发：",[55,155399,146696],{},[55,155401,155402],{},"selenium","、接口测试。",[22,155405,155406,155407,1000,155409,1000,155411,29029],{},"人工智能：",[55,155408,101255],{},[55,155410,146664],{},[55,155412,155413],{},"pytorch",[22,155415,155416,155417,1000,155419,1000,155422,29029],{},"运维脚本：",[55,155418,146265],{},[55,155420,155421],{},"subprocess",[55,155423,155424],{},"paramiko",[175,155426,155427],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155429,155431],{"id":155430},"_1215-结课练习","12.15 结课练习",[19,155433,155434,155437,155440,155443,155446,155449,155452,155455],{},[22,155435,155436],{},"完成函数版学生管理系统。",[22,155438,155439],{},"给学生管理系统增加 JSON 持久化。",[22,155441,155442],{},"给学生管理系统增加异常处理。",[22,155444,155445],{},"把学生管理系统改成面向对象版。",[22,155447,155448],{},"使用 pyecharts 绘制学生成绩柱状图。",[22,155450,155451],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[22,155453,155454],{},"按品类统计销售额并绘制柱状图。",[22,155456,155457],{},"写一份自己的 Python 学习路线图。",[702,155459,155460],{},"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":53,"searchDepth":68,"depth":68,"links":155462},[155463,155464,155467,155468,155469,155475,155476,155477,155478,155479,155480,155481,155482,155483,155484],{"id":152179,"depth":68,"text":152180},{"id":152229,"depth":68,"text":152230,"children":155465},[155466],{"id":152233,"depth":79,"text":152234},{"id":152272,"depth":68,"text":152273},{"id":153746,"depth":68,"text":153747},{"id":154084,"depth":68,"text":154085,"children":155470},[155471,155472,155473,155474],{"id":154088,"depth":79,"text":154089},{"id":154228,"depth":79,"text":154229},{"id":154318,"depth":79,"text":154319},{"id":154404,"depth":79,"text":154405},{"id":154445,"depth":68,"text":154446},{"id":154638,"depth":68,"text":154639},{"id":154875,"depth":68,"text":154876},{"id":155066,"depth":68,"text":155067},{"id":155108,"depth":68,"text":155109},{"id":155234,"depth":68,"text":155235},{"id":155264,"depth":68,"text":155265},{"id":155291,"depth":68,"text":155292},{"id":155344,"depth":68,"text":155345},{"id":155430,"depth":68,"text":155431},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152171,"description":717},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155491,"title":155492,"body":155493,"description":717,"extension":718,"meta":157962,"navigation":720,"path":157963,"seo":157964,"stem":157965,"__hash__":157966},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155494,"toc":157937},[155495,155498,155502,155505,155508,155528,155531,155554,155557,155560,155582,155585,155607,155611,155614,155654,155657,155778,155782,155785,155825,155828,155852,155855,155859,155862,155876,155909,155912,155947,155950,155973,155976,156009,156012,156014,156020,156095,156098,156104,156121,156161,156165,156168,156214,156216,156254,156257,156292,156295,156330,156333,156365,156368,156387,156391,156395,156508,156510,156585,156589,156635,156638,156664,156673,156677,156680,156743,156751,156779,156783,156823,156888,156892,156895,156934,156937,156982,156985,157046,157050,157077,157080,157108,157111,157115,157119,157184,157187,157225,157228,157260,157264,157363,157367,157370,157443,157446,157494,157498,157504,157544,157547,157594,157597,157646,157650,157652,157666,157668,157849,157853,157880,157900,157907,157911,157928,157934],[10,155496,155492],{"id":155497},"_2-基础语法变量与字符串",[14,155499,155501],{"id":155500},"_21-注释","2.1 注释",[175,155503,155504],{},"注释是给人看的说明文字，不会被 Python 执行。",[175,155506,155507],{},"单行注释：",[48,155509,155511],{"className":31022,"code":155510,"language":31024,"meta":53,"style":53},"# 这是单行注释\nprint(\"hello\")\n",[55,155512,155513,155518],{"__ignoreMap":53},[58,155514,155515],{"class":60,"line":61},[58,155516,155517],{"class":64},"# 这是单行注释\n",[58,155519,155520,155522,155524,155526],{"class":60,"line":68},[58,155521,31059],{"class":82},[58,155523,793],{"class":75},[58,155525,6490],{"class":386},[58,155527,799],{"class":75},[175,155529,155530],{},"多行说明常用三引号：",[48,155532,155534],{"className":31022,"code":155533,"language":31024,"meta":53,"style":53},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[55,155535,155536,155540,155545,155550],{"__ignoreMap":53},[58,155537,155538],{"class":60,"line":61},[58,155539,96327],{"class":386},[58,155541,155542],{"class":60,"line":68},[58,155543,155544],{"class":386},"这是多行说明。\n",[58,155546,155547],{"class":60,"line":79},[58,155548,155549],{"class":386},"常用于文件顶部说明、函数说明等。\n",[58,155551,155552],{"class":60,"line":105},[58,155553,96327],{"class":386},[175,155555,155556],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[175,155558,155559],{},"不好：",[48,155561,155563],{"className":31022,"code":155562,"language":31024,"meta":53,"style":53},"# age 加 1\nage = age + 1\n",[55,155564,155565,155570],{"__ignoreMap":53},[58,155566,155567],{"class":60,"line":61},[58,155568,155569],{"class":64},"# age 加 1\n",[58,155571,155572,155574,155576,155578,155580],{"class":60,"line":68},[58,155573,147025],{"class":75},[58,155575,383],{"class":92},[58,155577,16350],{"class":75},[58,155579,1267],{"class":92},[58,155581,56333],{"class":82},[175,155583,155584],{},"较好：",[48,155586,155588],{"className":31022,"code":155587,"language":31024,"meta":53,"style":53},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[55,155589,155590,155595],{"__ignoreMap":53},[58,155591,155592],{"class":60,"line":61},[58,155593,155594],{"class":64},"# 用户过完生日后，年龄增加一岁\n",[58,155596,155597,155599,155601,155603,155605],{"class":60,"line":68},[58,155598,147025],{"class":75},[58,155600,383],{"class":92},[58,155602,16350],{"class":75},[58,155604,1267],{"class":92},[58,155606,56333],{"class":82},[14,155608,155610],{"id":155609},"_22-字面量","2.2 字面量",[175,155612,155613],{},"字面量就是代码中直接写出来的数据。",[48,155615,155617],{"className":31022,"code":155616,"language":31024,"meta":53,"style":53},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[55,155618,155619,155626,155633,155640,155647],{"__ignoreMap":53},[58,155620,155621,155623],{"class":60,"line":61},[58,155622,1097],{"class":82},[58,155624,155625],{"class":64},"          # 整数\n",[58,155627,155628,155630],{"class":60,"line":68},[58,155629,840],{"class":82},[58,155631,155632],{"class":64},"         # 小数\n",[58,155634,155635,155637],{"class":60,"line":79},[58,155636,6490],{"class":386},[58,155638,155639],{"class":64},"      # 字符串\n",[58,155641,155642,155644],{"class":60,"line":105},[58,155643,32120],{"class":82},[58,155645,155646],{"class":64},"         # 布尔值\n",[58,155648,155649,155651],{"class":60,"line":627},[58,155650,96315],{"class":82},[58,155652,155653],{"class":64},"         # 空值\n",[175,155655,155656],{},"常见字面量类型：",[926,155658,155659,155669],{},[929,155660,155661],{},[932,155662,155663,155665,155667],{},[935,155664,24380],{},[935,155666,28136],{},[935,155668,26513],{},[972,155670,155671,155682,155693,155704,155716,155728,155740,155753,155765],{},[932,155672,155673,155675,155679],{},[977,155674,796],{},[977,155676,155677],{},[55,155678,1097],{},[977,155680,155681],{},"整数",[932,155683,155684,155686,155690],{},[977,155685,832],{},[977,155687,155688],{},[55,155689,840],{},[977,155691,155692],{},"浮点数",[932,155694,155695,155697,155701],{},[977,155696,1952],{},[977,155698,155699],{},[55,155700,6490],{},[977,155702,155703],{},"字符串",[932,155705,155706,155708,155714],{},[977,155707,2004],{},[977,155709,155710,1000,155712],{},[55,155711,32120],{},[55,155713,34631],{},[977,155715,66647],{},[932,155717,155718,155721,155725],{},[977,155719,155720],{},"NoneType",[977,155722,155723],{},[55,155724,96315],{},[977,155726,155727],{},"空值",[932,155729,155730,155732,155737],{},[977,155731,154549],{},[977,155733,155734],{},[55,155735,155736],{},"[1, 2, 3]",[977,155738,155739],{},"列表",[932,155741,155742,155745,155750],{},[977,155743,155744],{},"tuple",[977,155746,155747],{},[55,155748,155749],{},"(1, 2, 3)",[977,155751,155752],{},"元组",[932,155754,155755,155757,155762],{},[977,155756,115175],{},[977,155758,155759],{},[55,155760,155761],{},"{\"name\": \"张三\"}",[977,155763,155764],{},"字典",[932,155766,155767,155770,155775],{},[977,155768,155769],{},"set",[977,155771,155772],{},[55,155773,155774],{},"{1, 2, 3}",[977,155776,155777],{},"集合",[14,155779,155781],{"id":155780},"_23-变量","2.3 变量",[175,155783,155784],{},"变量是保存数据的名字。",[48,155786,155788],{"className":31022,"code":155787,"language":31024,"meta":53,"style":53},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[55,155789,155790,155798,155806,155816],{"__ignoreMap":53},[58,155791,155792,155794,155796],{"class":60,"line":61},[58,155793,147015],{"class":75},[58,155795,383],{"class":92},[58,155797,149832],{"class":386},[58,155799,155800,155802,155804],{"class":60,"line":68},[58,155801,147025],{"class":75},[58,155803,383],{"class":92},[58,155805,147030],{"class":82},[58,155807,155808,155811,155813],{"class":60,"line":79},[58,155809,155810],{"class":75},"height ",[58,155812,383],{"class":92},[58,155814,155815],{"class":82}," 1.75\n",[58,155817,155818,155821,155823],{"class":60,"line":105},[58,155819,155820],{"class":75},"is_student ",[58,155822,383],{"class":92},[58,155824,154078],{"class":82},[175,155826,155827],{},"Python 的变量不需要提前声明类型：",[48,155829,155831],{"className":31022,"code":155830,"language":31024,"meta":53,"style":53},"score = 100\nscore = \"满分\"\n",[55,155832,155833,155843],{"__ignoreMap":53},[58,155834,155835,155838,155840],{"class":60,"line":61},[58,155836,155837],{"class":75},"score ",[58,155839,383],{"class":92},[58,155841,155842],{"class":82}," 100\n",[58,155844,155845,155847,155849],{"class":60,"line":68},[58,155846,155837],{"class":75},[58,155848,383],{"class":92},[58,155850,155851],{"class":386}," \"满分\"\n",[175,155853,155854],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,155856,155858],{"id":155857},"_24-变量命名规则","2.4 变量命名规则",[175,155860,155861],{},"硬性规则：",[19,155863,155864,155867,155870,155873],{},[22,155865,155866],{},"只能由字母、数字、下划线组成。",[22,155868,155869],{},"不能以数字开头。",[22,155871,155872],{},"不能使用 Python 关键字。",[22,155874,155875],{},"区分大小写。",[48,155877,155879],{"className":31022,"code":155878,"language":31024,"meta":53,"style":53},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[55,155880,155881,155890,155899],{"__ignoreMap":53},[58,155882,155883,155886,155888],{"class":60,"line":61},[58,155884,155885],{"class":75},"user_name ",[58,155887,383],{"class":92},[58,155889,147020],{"class":386},[58,155891,155892,155895,155897],{"class":60,"line":68},[58,155893,155894],{"class":75},"age2 ",[58,155896,383],{"class":92},[58,155898,147030],{"class":82},[58,155900,155901,155904,155906],{"class":60,"line":79},[58,155902,155903],{"class":75},"_token ",[58,155905,383],{"class":92},[58,155907,155908],{"class":386}," \"abc\"\n",[175,155910,155911],{},"错误写法：",[48,155913,155915],{"className":31022,"code":155914,"language":31024,"meta":53,"style":53},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[55,155916,155917,155926,155938],{"__ignoreMap":53},[58,155918,155919,155922,155924],{"class":60,"line":61},[58,155920,155921],{"class":78034},"2age",[58,155923,14208],{"class":92},[58,155925,147030],{"class":82},[58,155927,155928,155930,155932,155934,155936],{"class":60,"line":68},[58,155929,159],{"class":75},[58,155931,1318],{"class":92},[58,155933,147015],{"class":75},[58,155935,383],{"class":92},[58,155937,147020],{"class":386},[58,155939,155940,155942,155944],{"class":60,"line":79},[58,155941,15338],{"class":92},[58,155943,14208],{"class":92},[58,155945,155946],{"class":386}," \"一班\"\n",[175,155948,155949],{},"查看关键字：",[48,155951,155953],{"className":31022,"code":155952,"language":31024,"meta":53,"style":53},"import keyword\n\nprint(keyword.kwlist)\n",[55,155954,155955,155962,155966],{"__ignoreMap":53},[58,155956,155957,155959],{"class":60,"line":61},[58,155958,31036],{"class":92},[58,155960,155961],{"class":75}," keyword\n",[58,155963,155964],{"class":60,"line":68},[58,155965,3046],{"emptyLinePlaceholder":720},[58,155967,155968,155970],{"class":60,"line":79},[58,155969,31059],{"class":82},[58,155971,155972],{"class":75},"(keyword.kwlist)\n",[175,155974,155975],{},"推荐命名风格：",[48,155977,155979],{"className":31022,"code":155978,"language":31024,"meta":53,"style":53},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[55,155980,155981,155990,156000],{"__ignoreMap":53},[58,155982,155983,155986,155988],{"class":60,"line":61},[58,155984,155985],{"class":75},"student_name ",[58,155987,383],{"class":92},[58,155989,149832],{"class":386},[58,155991,155992,155995,155997],{"class":60,"line":68},[58,155993,155994],{"class":75},"total_price ",[58,155996,383],{"class":92},[58,155998,155999],{"class":82}," 99.8\n",[58,156001,156002,156005,156007],{"class":60,"line":79},[58,156003,156004],{"class":75},"is_finished ",[58,156006,383],{"class":92},[58,156008,126436],{"class":82},[175,156010,156011],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156013,51376],{"id":51375},[175,156015,104995,156016,156019],{},[55,156017,156018],{},"type()"," 查看数据类型：",[48,156021,156023],{"className":31022,"code":156022,"language":31024,"meta":53,"style":53},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[55,156024,156025,156039,156053,156067,156081],{"__ignoreMap":53},[58,156026,156027,156029,156031,156033,156035,156037],{"class":60,"line":61},[58,156028,31059],{"class":82},[58,156030,793],{"class":75},[58,156032,103736],{"class":82},[58,156034,793],{"class":75},[58,156036,1097],{"class":82},[58,156038,31141],{"class":75},[58,156040,156041,156043,156045,156047,156049,156051],{"class":60,"line":68},[58,156042,31059],{"class":82},[58,156044,793],{"class":75},[58,156046,103736],{"class":82},[58,156048,793],{"class":75},[58,156050,840],{"class":82},[58,156052,31141],{"class":75},[58,156054,156055,156057,156059,156061,156063,156065],{"class":60,"line":79},[58,156056,31059],{"class":82},[58,156058,793],{"class":75},[58,156060,103736],{"class":82},[58,156062,793],{"class":75},[58,156064,6490],{"class":386},[58,156066,31141],{"class":75},[58,156068,156069,156071,156073,156075,156077,156079],{"class":60,"line":105},[58,156070,31059],{"class":82},[58,156072,793],{"class":75},[58,156074,103736],{"class":82},[58,156076,793],{"class":75},[58,156078,32120],{"class":82},[58,156080,31141],{"class":75},[58,156082,156083,156085,156087,156089,156091,156093],{"class":60,"line":627},[58,156084,31059],{"class":82},[58,156086,793],{"class":75},[58,156088,103736],{"class":82},[58,156090,793],{"class":75},[58,156092,96315],{"class":82},[58,156094,31141],{"class":75},[175,156096,156097],{},"输出类似：",[48,156099,156102],{"className":156100,"code":156101,"language":5833,"meta":53},[5831],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[55,156103,156101],{"__ignoreMap":53},[175,156105,195,156106,107912,156108,156110,156111,156113,156114,22143,156116,156113,156118,156120],{},[55,156107,2004],{},[55,156109,796],{}," 的子类，",[55,156112,32120],{}," 可以当作 ",[55,156115,89],{},[55,156117,34631],{},[55,156119,979],{},"，但业务代码中不要滥用。",[48,156122,156124],{"className":31022,"code":156123,"language":31024,"meta":53,"style":53},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[55,156125,156126,156144],{"__ignoreMap":53},[58,156127,156128,156130,156132,156134,156136,156138,156141],{"class":60,"line":61},[58,156129,31059],{"class":82},[58,156131,793],{"class":75},[58,156133,32120],{"class":82},[58,156135,46210],{"class":92},[58,156137,25762],{"class":82},[58,156139,156140],{"class":75},")   ",[58,156142,156143],{"class":64},"# 2\n",[58,156145,156146,156148,156150,156152,156154,156156,156158],{"class":60,"line":68},[58,156147,31059],{"class":82},[58,156149,793],{"class":75},[58,156151,34631],{"class":82},[58,156153,46210],{"class":92},[58,156155,25762],{"class":82},[58,156157,46452],{"class":75},[58,156159,156160],{"class":64},"# 1\n",[14,156162,156164],{"id":156163},"_26-类型转换","2.6 类型转换",[175,156166,156167],{},"常用转换函数：",[48,156169,156171],{"className":31022,"code":156170,"language":31024,"meta":53,"style":53},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[55,156172,156173,156183,156194,156204],{"__ignoreMap":53},[58,156174,156175,156177,156179,156181],{"class":60,"line":61},[58,156176,796],{"class":82},[58,156178,793],{"class":75},[58,156180,54952],{"class":386},[58,156182,799],{"class":75},[58,156184,156185,156187,156189,156192],{"class":60,"line":68},[58,156186,832],{"class":82},[58,156188,793],{"class":75},[58,156190,156191],{"class":386},"\"3.14\"",[58,156193,799],{"class":75},[58,156195,156196,156198,156200,156202],{"class":60,"line":79},[58,156197,1952],{"class":82},[58,156199,793],{"class":75},[58,156201,1097],{"class":82},[58,156203,799],{"class":75},[58,156205,156206,156208,156210,156212],{"class":60,"line":105},[58,156207,2004],{"class":82},[58,156209,793],{"class":75},[58,156211,89],{"class":82},[58,156213,799],{"class":75},[175,156215,15779],{},[48,156217,156219],{"className":31022,"code":156218,"language":31024,"meta":53,"style":53},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[55,156220,156221,156230,156241],{"__ignoreMap":53},[58,156222,156223,156225,156227],{"class":60,"line":61},[58,156224,147025],{"class":75},[58,156226,383],{"class":92},[58,156228,156229],{"class":386}," \"18\"\n",[58,156231,156232,156234,156236,156238],{"class":60,"line":68},[58,156233,147025],{"class":75},[58,156235,383],{"class":92},[58,156237,3028],{"class":82},[58,156239,156240],{"class":75},"(age)\n",[58,156242,156243,156245,156248,156250,156252],{"class":60,"line":79},[58,156244,31059],{"class":82},[58,156246,156247],{"class":75},"(age ",[58,156249,1267],{"class":92},[58,156251,25762],{"class":82},[58,156253,799],{"class":75},[175,156255,156256],{},"输入得到的内容永远是字符串：",[48,156258,156260],{"className":31022,"code":156259,"language":31024,"meta":53,"style":53},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[55,156261,156262,156278],{"__ignoreMap":53},[58,156263,156264,156267,156269,156271,156273,156276],{"class":60,"line":61},[58,156265,156266],{"class":75},"num ",[58,156268,383],{"class":92},[58,156270,61239],{"class":82},[58,156272,793],{"class":75},[58,156274,156275],{"class":386},"\"请输入数字:\"",[58,156277,799],{"class":75},[58,156279,156280,156282,156284,156286,156289],{"class":60,"line":68},[58,156281,31059],{"class":82},[58,156283,793],{"class":75},[58,156285,103736],{"class":82},[58,156287,156288],{"class":75},"(num))  ",[58,156290,156291],{"class":64},"# str\n",[175,156293,156294],{},"如果要做数学运算，必须转换：",[48,156296,156298],{"className":31022,"code":156297,"language":31024,"meta":53,"style":53},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[55,156299,156300,156318],{"__ignoreMap":53},[58,156301,156302,156304,156306,156308,156310,156312,156314,156316],{"class":60,"line":61},[58,156303,156266],{"class":75},[58,156305,383],{"class":92},[58,156307,3028],{"class":82},[58,156309,793],{"class":75},[58,156311,54457],{"class":82},[58,156313,793],{"class":75},[58,156315,156275],{"class":386},[58,156317,31141],{"class":75},[58,156319,156320,156322,156324,156326,156328],{"class":60,"line":68},[58,156321,31059],{"class":82},[58,156323,46263],{"class":75},[58,156325,1267],{"class":92},[58,156327,2684],{"class":82},[58,156329,799],{"class":75},[175,156331,156332],{},"常见错误：",[48,156334,156336],{"className":31022,"code":156335,"language":31024,"meta":53,"style":53},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[55,156337,156338,156351],{"__ignoreMap":53},[58,156339,156340,156342,156344,156346,156348],{"class":60,"line":61},[58,156341,796],{"class":82},[58,156343,793],{"class":75},[58,156345,156191],{"class":386},[58,156347,156140],{"class":75},[58,156349,156350],{"class":64},"# 错误\n",[58,156352,156353,156355,156357,156360,156363],{"class":60,"line":68},[58,156354,796],{"class":82},[58,156356,793],{"class":75},[58,156358,156359],{"class":386},"\"abc\"",[58,156361,156362],{"class":75},")    ",[58,156364,156350],{"class":64},[175,156366,156367],{},"正确写法：",[48,156369,156371],{"className":31022,"code":156370,"language":31024,"meta":53,"style":53},"num = float(\"3.14\")\n",[55,156372,156373],{"__ignoreMap":53},[58,156374,156375,156377,156379,156381,156383,156385],{"class":60,"line":61},[58,156376,156266],{"class":75},[58,156378,383],{"class":92},[58,156380,110426],{"class":82},[58,156382,793],{"class":75},[58,156384,156191],{"class":386},[58,156386,799],{"class":75},[14,156388,156390],{"id":156389},"_27-运算符","2.7 运算符",[114,156392,156394],{"id":156393},"_271-算术运算符","2.7.1 算术运算符",[926,156396,156397,156408],{},[929,156398,156399],{},[932,156400,156401,156404,156406],{},[935,156402,156403],{},"运算符",[935,156405,26513],{},[935,156407,28136],{},[972,156409,156410,156424,156438,156452,156466,156480,156494],{},[932,156411,156412,156416,156419],{},[977,156413,156414],{},[55,156415,1267],{},[977,156417,156418],{},"加法",[977,156420,156421],{},[55,156422,156423],{},"1 + 2",[932,156425,156426,156430,156433],{},[977,156427,156428],{},[55,156429,1318],{},[977,156431,156432],{},"减法",[977,156434,156435],{},[55,156436,156437],{},"5 - 3",[932,156439,156440,156444,156447],{},[977,156441,156442],{},[55,156443,1241],{},[977,156445,156446],{},"乘法",[977,156448,156449],{},[55,156450,156451],{},"2 * 3",[932,156453,156454,156458,156461],{},[977,156455,156456],{},[55,156457,1370],{},[977,156459,156460],{},"除法，结果是浮点数",[977,156462,156463],{},[55,156464,156465],{},"5 \u002F 2",[932,156467,156468,156472,156475],{},[977,156469,156470],{},[55,156471,33973],{},[977,156473,156474],{},"整除",[977,156476,156477],{},[55,156478,156479],{},"5 \u002F\u002F 2",[932,156481,156482,156486,156489],{},[977,156483,156484],{},[55,156485,1114],{},[977,156487,156488],{},"取余",[977,156490,156491],{},[55,156492,156493],{},"5 % 2",[932,156495,156496,156500,156503],{},[977,156497,156498],{},[55,156499,11306],{},[977,156501,156502],{},"幂运算",[977,156504,156505],{},[55,156506,156507],{},"2 ** 3",[175,156509,15779],{},[48,156511,156513],{"className":31022,"code":156512,"language":31024,"meta":53,"style":53},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[55,156514,156515,156533,156550,156567],{"__ignoreMap":53},[58,156516,156517,156519,156521,156523,156526,156528,156530],{"class":60,"line":61},[58,156518,31059],{"class":82},[58,156520,793],{"class":75},[58,156522,1105],{"class":82},[58,156524,156525],{"class":92}," \u002F",[58,156527,15399],{"class":82},[58,156529,156140],{"class":75},[58,156531,156532],{"class":64},"# 2.5\n",[58,156534,156535,156537,156539,156541,156544,156546,156548],{"class":60,"line":68},[58,156536,31059],{"class":82},[58,156538,793],{"class":75},[58,156540,1105],{"class":82},[58,156542,156543],{"class":92}," \u002F\u002F",[58,156545,15399],{"class":82},[58,156547,46452],{"class":75},[58,156549,156143],{"class":64},[58,156551,156552,156554,156556,156558,156561,156563,156565],{"class":60,"line":79},[58,156553,31059],{"class":82},[58,156555,793],{"class":75},[58,156557,1105],{"class":82},[58,156559,156560],{"class":92}," %",[58,156562,15399],{"class":82},[58,156564,156140],{"class":75},[58,156566,156160],{"class":64},[58,156568,156569,156571,156573,156575,156578,156580,156582],{"class":60,"line":105},[58,156570,31059],{"class":82},[58,156572,793],{"class":75},[58,156574,867],{"class":82},[58,156576,156577],{"class":92}," **",[58,156579,78701],{"class":82},[58,156581,46452],{"class":75},[58,156583,156584],{"class":64},"# 8\n",[114,156586,156588],{"id":156587},"_272-赋值运算符","2.7.2 赋值运算符",[48,156590,156592],{"className":31022,"code":156591,"language":31024,"meta":53,"style":53},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[55,156593,156594,156602,156610,156618,156626],{"__ignoreMap":53},[58,156595,156596,156598,156600],{"class":60,"line":61},[58,156597,156266],{"class":75},[58,156599,383],{"class":92},[58,156601,59062],{"class":82},[58,156603,156604,156606,156608],{"class":60,"line":68},[58,156605,156266],{"class":75},[58,156607,10122],{"class":92},[58,156609,55063],{"class":82},[58,156611,156612,156614,156616],{"class":60,"line":79},[58,156613,156266],{"class":75},[58,156615,150731],{"class":92},[58,156617,48367],{"class":82},[58,156619,156620,156622,156624],{"class":60,"line":105},[58,156621,156266],{"class":75},[58,156623,137627],{"class":92},[58,156625,120665],{"class":82},[58,156627,156628,156630,156633],{"class":60,"line":627},[58,156629,156266],{"class":75},[58,156631,156632],{"class":92},"\u002F=",[58,156634,48367],{"class":82},[175,156636,156637],{},"等价关系：",[48,156639,156641],{"className":31022,"code":156640,"language":31024,"meta":53,"style":53},"num += 1\nnum = num + 1\n",[55,156642,156643,156651],{"__ignoreMap":53},[58,156644,156645,156647,156649],{"class":60,"line":61},[58,156646,156266],{"class":75},[58,156648,10122],{"class":92},[58,156650,56333],{"class":82},[58,156652,156653,156655,156657,156660,156662],{"class":60,"line":68},[58,156654,156266],{"class":75},[58,156656,383],{"class":92},[58,156658,156659],{"class":75}," num ",[58,156661,1267],{"class":92},[58,156663,56333],{"class":82},[175,156665,156666,156667,101647,156670,29029],{},"Python 没有 ",[55,156668,156669],{},"num++",[55,156671,156672],{},"num--",[114,156674,156676],{"id":156675},"_273-比较运算符","2.7.3 比较运算符",[175,156678,156679],{},"比较运算结果是布尔值。",[48,156681,156683],{"className":31022,"code":156682,"language":31024,"meta":53,"style":53},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[55,156684,156685,156699,156714,156728],{"__ignoreMap":53},[58,156686,156687,156689,156691,156693,156695,156697],{"class":60,"line":61},[58,156688,31059],{"class":82},[58,156690,793],{"class":75},[58,156692,1232],{"class":82},[58,156694,26866],{"class":92},[58,156696,2794],{"class":82},[58,156698,799],{"class":75},[58,156700,156701,156703,156705,156707,156710,156712],{"class":60,"line":68},[58,156702,31059],{"class":82},[58,156704,793],{"class":75},[58,156706,1232],{"class":82},[58,156708,156709],{"class":92}," >=",[58,156711,2684],{"class":82},[58,156713,799],{"class":75},[58,156715,156716,156718,156720,156722,156724,156726],{"class":60,"line":79},[58,156717,31059],{"class":82},[58,156719,793],{"class":75},[58,156721,1232],{"class":82},[58,156723,102188],{"class":92},[58,156725,2729],{"class":82},[58,156727,799],{"class":75},[58,156729,156730,156732,156734,156736,156739,156741],{"class":60,"line":105},[58,156731,31059],{"class":82},[58,156733,793],{"class":75},[58,156735,1232],{"class":82},[58,156737,156738],{"class":92}," !=",[58,156740,2729],{"class":82},[58,156742,799],{"class":75},[175,156744,156745,156746,156748,156749,29029],{},"注意：判断相等用 ",[55,156747,3595],{},"，赋值用 ",[55,156750,383],{},[48,156752,156754],{"className":31022,"code":156753,"language":31024,"meta":53,"style":53},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[55,156755,156756,156768],{"__ignoreMap":53},[58,156757,156758,156760,156762,156765],{"class":60,"line":61},[58,156759,147025],{"class":75},[58,156761,383],{"class":92},[58,156763,156764],{"class":82}," 18",[58,156766,156767],{"class":64},"       # 赋值\n",[58,156769,156770,156772,156774,156776],{"class":60,"line":68},[58,156771,147025],{"class":75},[58,156773,3595],{"class":92},[58,156775,156764],{"class":82},[58,156777,156778],{"class":64},"      # 判断是否相等\n",[114,156780,156782],{"id":156781},"_274-逻辑运算符","2.7.4 逻辑运算符",[926,156784,156785,156793],{},[929,156786,156787],{},[932,156788,156789,156791],{},[935,156790,156403],{},[935,156792,26513],{},[972,156794,156795,156804,156813],{},[932,156796,156797,156801],{},[977,156798,156799],{},[55,156800,31106],{},[977,156802,156803],{},"并且",[932,156805,156806,156810],{},[977,156807,156808],{},[55,156809,115719],{},[977,156811,156812],{},"或者",[932,156814,156815,156820],{},[977,156816,156817],{},[55,156818,156819],{},"not",[977,156821,156822],{},"取反",[48,156824,156826],{"className":31022,"code":156825,"language":31024,"meta":53,"style":53},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[55,156827,156828,156836,156845,156849,156864,156878],{"__ignoreMap":53},[58,156829,156830,156832,156834],{"class":60,"line":61},[58,156831,147025],{"class":75},[58,156833,383],{"class":92},[58,156835,88694],{"class":82},[58,156837,156838,156841,156843],{"class":60,"line":68},[58,156839,156840],{"class":75},"has_ticket ",[58,156842,383],{"class":92},[58,156844,154078],{"class":82},[58,156846,156847],{"class":60,"line":79},[58,156848,3046],{"emptyLinePlaceholder":720},[58,156850,156851,156853,156855,156857,156859,156861],{"class":60,"line":105},[58,156852,31059],{"class":82},[58,156854,156247],{"class":75},[58,156856,2357],{"class":92},[58,156858,156764],{"class":82},[58,156860,121058],{"class":92},[58,156862,156863],{"class":75}," has_ticket)\n",[58,156865,156866,156868,156870,156872,156874,156876],{"class":60,"line":627},[58,156867,31059],{"class":82},[58,156869,156247],{"class":75},[58,156871,373],{"class":92},[58,156873,156764],{"class":82},[58,156875,114830],{"class":92},[58,156877,156863],{"class":75},[58,156879,156880,156882,156884,156886],{"class":60,"line":509},[58,156881,31059],{"class":82},[58,156883,793],{"class":75},[58,156885,156819],{"class":92},[58,156887,156863],{"class":75},[14,156889,156891],{"id":156890},"_28-字符串定义","2.8 字符串定义",[175,156893,156894],{},"三种常见写法：",[48,156896,156898],{"className":31022,"code":156897,"language":31024,"meta":53,"style":53},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[55,156899,156900,156910,156919,156929],{"__ignoreMap":53},[58,156901,156902,156905,156907],{"class":60,"line":61},[58,156903,156904],{"class":75},"name1 ",[58,156906,383],{"class":92},[58,156908,156909],{"class":386}," '小明'\n",[58,156911,156912,156915,156917],{"class":60,"line":68},[58,156913,156914],{"class":75},"name2 ",[58,156916,383],{"class":92},[58,156918,149832],{"class":386},[58,156920,156921,156924,156926],{"class":60,"line":79},[58,156922,156923],{"class":75},"text ",[58,156925,383],{"class":92},[58,156927,156928],{"class":386}," \"\"\"这是多行字符串\n",[58,156930,156931],{"class":60,"line":105},[58,156932,156933],{"class":386},"可以换行\"\"\"\n",[175,156935,156936],{},"字符串中包含引号：",[48,156938,156940],{"className":31022,"code":156939,"language":31024,"meta":53,"style":53},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[55,156941,156942,156952,156962],{"__ignoreMap":53},[58,156943,156944,156947,156949],{"class":60,"line":61},[58,156945,156946],{"class":75},"msg ",[58,156948,383],{"class":92},[58,156950,156951],{"class":386}," \"他说:'你好'\"\n",[58,156953,156954,156957,156959],{"class":60,"line":68},[58,156955,156956],{"class":75},"msg2 ",[58,156958,383],{"class":92},[58,156960,156961],{"class":386}," '他说:\"你好\"'\n",[58,156963,156964,156967,156969,156972,156975,156978,156980],{"class":60,"line":79},[58,156965,156966],{"class":75},"msg3 ",[58,156968,383],{"class":92},[58,156970,156971],{"class":386}," \"他说:",[58,156973,156974],{"class":82},"\\\"",[58,156976,156977],{"class":386},"你好",[58,156979,156974],{"class":82},[58,156981,25777],{"class":386},[175,156983,156984],{},"常见转义字符：",[926,156986,156987,156996],{},[929,156988,156989],{},[932,156990,156991,156994],{},[935,156992,156993],{},"写法",[935,156995,101329],{},[972,156997,156998,157008,157017,157027,157036],{},[932,156999,157000,157005],{},[977,157001,157002],{},[55,157003,157004],{},"\\n",[977,157006,157007],{},"换行",[932,157009,157010,157014],{},[977,157011,157012],{},[55,157013,1884],{},[977,157015,157016],{},"制表符",[932,157018,157019,157024],{},[977,157020,157021],{},[55,157022,157023],{},"\\\\",[977,157025,157026],{},"反斜杠",[932,157028,157029,157033],{},[977,157030,157031],{},[55,157032,156974],{},[977,157034,157035],{},"双引号",[932,157037,157038,157043],{},[977,157039,157040],{},[55,157041,157042],{},"\\'",[977,157044,157045],{},"单引号",[14,157047,157049],{"id":157048},"_29-字符串拼接","2.9 字符串拼接",[48,157051,157053],{"className":31022,"code":157052,"language":31024,"meta":53,"style":53},"name = \"小明\"\nprint(\"你好，\" + name)\n",[55,157054,157055,157063],{"__ignoreMap":53},[58,157056,157057,157059,157061],{"class":60,"line":61},[58,157058,147015],{"class":75},[58,157060,383],{"class":92},[58,157062,149832],{"class":386},[58,157064,157065,157067,157069,157072,157074],{"class":60,"line":68},[58,157066,31059],{"class":82},[58,157068,793],{"class":75},[58,157070,157071],{"class":386},"\"你好，\"",[58,157073,46210],{"class":92},[58,157075,157076],{"class":75}," name)\n",[175,157078,157079],{},"字符串只能和字符串拼接：",[48,157081,157083],{"className":31022,"code":157082,"language":31024,"meta":53,"style":53},"age = 18\nprint(\"年龄:\" + str(age))\n",[55,157084,157085,157093],{"__ignoreMap":53},[58,157086,157087,157089,157091],{"class":60,"line":61},[58,157088,147025],{"class":75},[58,157090,383],{"class":92},[58,157092,147030],{"class":82},[58,157094,157095,157097,157099,157101,157103,157105],{"class":60,"line":68},[58,157096,31059],{"class":82},[58,157098,793],{"class":75},[58,157100,146996],{"class":386},[58,157102,46210],{"class":92},[58,157104,74550],{"class":82},[58,157106,157107],{"class":75},"(age))\n",[175,157109,157110],{},"更推荐使用格式化字符串。",[14,157112,157114],{"id":157113},"_210-字符串格式化","2.10 字符串格式化",[114,157116,157118],{"id":157117},"_2101-百分号格式化","2.10.1 百分号格式化",[48,157120,157122],{"className":31022,"code":157121,"language":31024,"meta":53,"style":53},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[55,157123,157124,157132,157140,157149,157153],{"__ignoreMap":53},[58,157125,157126,157128,157130],{"class":60,"line":61},[58,157127,147015],{"class":75},[58,157129,383],{"class":92},[58,157131,149832],{"class":386},[58,157133,157134,157136,157138],{"class":60,"line":68},[58,157135,147025],{"class":75},[58,157137,383],{"class":92},[58,157139,147030],{"class":82},[58,157141,157142,157144,157146],{"class":60,"line":79},[58,157143,155837],{"class":75},[58,157145,383],{"class":92},[58,157147,157148],{"class":82}," 95.5\n",[58,157150,157151],{"class":60,"line":105},[58,157152,3046],{"emptyLinePlaceholder":720},[58,157154,157155,157157,157159,157162,157165,157168,157171,157174,157177,157179,157181],{"class":60,"line":627},[58,157156,31059],{"class":82},[58,157158,793],{"class":75},[58,157160,157161],{"class":386},"\"姓名:",[58,157163,157164],{"class":82},"%s",[58,157166,157167],{"class":386}," 年龄:",[58,157169,157170],{"class":82},"%d",[58,157172,157173],{"class":386}," 分数:",[58,157175,157176],{"class":82},"%.1f",[58,157178,1037],{"class":386},[58,157180,156560],{"class":92},[58,157182,157183],{"class":75}," (name, age, score))\n",[175,157185,157186],{},"常用占位符：",[926,157188,157189,157198],{},[929,157190,157191],{},[932,157192,157193,157196],{},[935,157194,157195],{},"占位符",[935,157197,26513],{},[972,157199,157200,157208,157216],{},[932,157201,157202,157206],{},[977,157203,157204],{},[55,157205,157164],{},[977,157207,155703],{},[932,157209,157210,157214],{},[977,157211,157212],{},[55,157213,157170],{},[977,157215,155681],{},[932,157217,157218,157223],{},[977,157219,157220],{},[55,157221,157222],{},"%f",[977,157224,155692],{},[175,157226,157227],{},"精度控制：",[48,157229,157231],{"className":31022,"code":157230,"language":31024,"meta":53,"style":53},"price = 12.3456\nprint(\"%.2f\" % price)\n",[55,157232,157233,157242],{"__ignoreMap":53},[58,157234,157235,157237,157239],{"class":60,"line":61},[58,157236,147160],{"class":75},[58,157238,383],{"class":92},[58,157240,157241],{"class":82}," 12.3456\n",[58,157243,157244,157246,157248,157250,157253,157255,157257],{"class":60,"line":68},[58,157245,31059],{"class":82},[58,157247,793],{"class":75},[58,157249,1037],{"class":386},[58,157251,157252],{"class":82},"%.2f",[58,157254,1037],{"class":386},[58,157256,156560],{"class":92},[58,157258,157259],{"class":75}," price)\n",[114,157261,157263],{"id":157262},"_2102-format方法","2.10.2 format方法",[48,157265,157267],{"className":31022,"code":157266,"language":31024,"meta":53,"style":53},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[55,157268,157269,157277,157285,157289,157308,157328],{"__ignoreMap":53},[58,157270,157271,157273,157275],{"class":60,"line":61},[58,157272,147015],{"class":75},[58,157274,383],{"class":92},[58,157276,149832],{"class":386},[58,157278,157279,157281,157283],{"class":60,"line":68},[58,157280,147025],{"class":75},[58,157282,383],{"class":92},[58,157284,147030],{"class":82},[58,157286,157287],{"class":60,"line":79},[58,157288,3046],{"emptyLinePlaceholder":720},[58,157290,157291,157293,157295,157297,157299,157301,157303,157305],{"class":60,"line":105},[58,157292,31059],{"class":82},[58,157294,793],{"class":75},[58,157296,157161],{"class":386},[58,157298,33103],{"class":82},[58,157300,157167],{"class":386},[58,157302,33103],{"class":82},[58,157304,1037],{"class":386},[58,157306,157307],{"class":75},".format(name, age))\n",[58,157309,157310,157312,157314,157316,157319,157321,157324,157326],{"class":60,"line":627},[58,157311,31059],{"class":82},[58,157313,793],{"class":75},[58,157315,157161],{"class":386},[58,157317,157318],{"class":82},"{0}",[58,157320,157167],{"class":386},[58,157322,157323],{"class":82},"{1}",[58,157325,1037],{"class":386},[58,157327,157307],{"class":75},[58,157329,157330,157332,157334,157336,157339,157341,157344,157346,157349,157351,157353,157356,157358,157360],{"class":60,"line":509},[58,157331,31059],{"class":82},[58,157333,793],{"class":75},[58,157335,157161],{"class":386},[58,157337,157338],{"class":82},"{name}",[58,157340,157167],{"class":386},[58,157342,157343],{"class":82},"{age}",[58,157345,1037],{"class":386},[58,157347,157348],{"class":75},".format(",[58,157350,80440],{"class":5862},[58,157352,383],{"class":92},[58,157354,157355],{"class":75},"name, ",[58,157357,70853],{"class":5862},[58,157359,383],{"class":92},[58,157361,157362],{"class":75},"age))\n",[114,157364,157366],{"id":157365},"_2103-f-string","2.10.3 f-string",[175,157368,157369],{},"推荐写法：",[48,157371,157373],{"className":31022,"code":157372,"language":31024,"meta":53,"style":53},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[55,157374,157375,157383,157391,157399,157403],{"__ignoreMap":53},[58,157376,157377,157379,157381],{"class":60,"line":61},[58,157378,147015],{"class":75},[58,157380,383],{"class":92},[58,157382,149832],{"class":386},[58,157384,157385,157387,157389],{"class":60,"line":68},[58,157386,147025],{"class":75},[58,157388,383],{"class":92},[58,157390,147030],{"class":82},[58,157392,157393,157395,157397],{"class":60,"line":79},[58,157394,155837],{"class":75},[58,157396,383],{"class":92},[58,157398,157148],{"class":82},[58,157400,157401],{"class":60,"line":105},[58,157402,3046],{"emptyLinePlaceholder":720},[58,157404,157405,157407,157409,157411,157413,157415,157417,157419,157421,157423,157425,157427,157429,157431,157434,157437,157439,157441],{"class":60,"line":627},[58,157406,31059],{"class":82},[58,157408,793],{"class":75},[58,157410,843],{"class":92},[58,157412,157161],{"class":386},[58,157414,1681],{"class":82},[58,157416,80440],{"class":75},[58,157418,1730],{"class":82},[58,157420,157167],{"class":386},[58,157422,1681],{"class":82},[58,157424,70853],{"class":75},[58,157426,1730],{"class":82},[58,157428,157173],{"class":386},[58,157430,1681],{"class":82},[58,157432,157433],{"class":75},"score",[58,157435,157436],{"class":92},":.1f",[58,157438,1730],{"class":82},[58,157440,1037],{"class":386},[58,157442,799],{"class":75},[175,157444,157445],{},"表达式也可以放进去：",[48,157447,157449],{"className":31022,"code":157448,"language":31024,"meta":53,"style":53},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[55,157450,157451,157459,157467],{"__ignoreMap":53},[58,157452,157453,157455,157457],{"class":60,"line":61},[58,157454,147160],{"class":75},[58,157456,383],{"class":92},[58,157458,147165],{"class":82},[58,157460,157461,157463,157465],{"class":60,"line":68},[58,157462,147170],{"class":75},[58,157464,383],{"class":92},[58,157466,55063],{"class":82},[58,157468,157469,157471,157473,157475,157478,157480,157482,157484,157487,157489,157492],{"class":60,"line":79},[58,157470,31059],{"class":82},[58,157472,793],{"class":75},[58,157474,843],{"class":92},[58,157476,157477],{"class":386},"\"总价:",[58,157479,1681],{"class":82},[58,157481,147160],{"class":75},[58,157483,1241],{"class":92},[58,157485,157486],{"class":75}," count",[58,157488,1730],{"class":82},[58,157490,157491],{"class":386},"元\"",[58,157493,799],{"class":75},[14,157495,157497],{"id":157496},"_211-input输入","2.11 input输入",[175,157499,157500,157503],{},[55,157501,157502],{},"input()"," 会暂停程序，等待用户输入。",[48,157505,157507],{"className":31022,"code":157506,"language":31024,"meta":53,"style":53},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[55,157508,157509,157523],{"__ignoreMap":53},[58,157510,157511,157513,157515,157517,157519,157521],{"class":60,"line":61},[58,157512,147015],{"class":75},[58,157514,383],{"class":92},[58,157516,61239],{"class":82},[58,157518,793],{"class":75},[58,157520,152858],{"class":386},[58,157522,799],{"class":75},[58,157524,157525,157527,157529,157531,157534,157536,157538,157540,157542],{"class":60,"line":68},[58,157526,31059],{"class":82},[58,157528,793],{"class":75},[58,157530,843],{"class":92},[58,157532,157533],{"class":386},"\"你好，",[58,157535,1681],{"class":82},[58,157537,80440],{"class":75},[58,157539,1730],{"class":82},[58,157541,1037],{"class":386},[58,157543,799],{"class":75},[175,157545,157546],{},"输入整数：",[48,157548,157550],{"className":31022,"code":157549,"language":31024,"meta":53,"style":53},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[55,157551,157552,157570],{"__ignoreMap":53},[58,157553,157554,157556,157558,157560,157562,157564,157566,157568],{"class":60,"line":61},[58,157555,147025],{"class":75},[58,157557,383],{"class":92},[58,157559,3028],{"class":82},[58,157561,793],{"class":75},[58,157563,54457],{"class":82},[58,157565,793],{"class":75},[58,157567,152873],{"class":386},[58,157569,31141],{"class":75},[58,157571,157572,157574,157576,157578,157581,157583,157585,157587,157590,157592],{"class":60,"line":68},[58,157573,31059],{"class":82},[58,157575,793],{"class":75},[58,157577,843],{"class":92},[58,157579,157580],{"class":386},"\"明年你",[58,157582,1681],{"class":82},[58,157584,147025],{"class":75},[58,157586,1267],{"class":92},[58,157588,157589],{"class":82}," 1}",[58,157591,149883],{"class":386},[58,157593,799],{"class":75},[175,157595,157596],{},"输入小数：",[48,157598,157600],{"className":31022,"code":157599,"language":31024,"meta":53,"style":53},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[55,157601,157602,157621],{"__ignoreMap":53},[58,157603,157604,157606,157608,157610,157612,157614,157616,157619],{"class":60,"line":61},[58,157605,155810],{"class":75},[58,157607,383],{"class":92},[58,157609,110426],{"class":82},[58,157611,793],{"class":75},[58,157613,54457],{"class":82},[58,157615,793],{"class":75},[58,157617,157618],{"class":386},"\"请输入身高:\"",[58,157620,31141],{"class":75},[58,157622,157623,157625,157627,157629,157632,157634,157636,157639,157641,157644],{"class":60,"line":68},[58,157624,31059],{"class":82},[58,157626,793],{"class":75},[58,157628,843],{"class":92},[58,157630,157631],{"class":386},"\"身高:",[58,157633,1681],{"class":82},[58,157635,25625],{"class":75},[58,157637,157638],{"class":92},":.2f",[58,157640,1730],{"class":82},[58,157642,157643],{"class":386},"米\"",[58,157645,799],{"class":75},[14,157647,157649],{"id":157648},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[175,157651,123921],{},[19,157653,157654,157657,157660,157663],{},[22,157655,157656],{},"输入商品单价。",[22,157658,157659],{},"输入购买数量。",[22,157661,157662],{},"输入折扣，例如 0.8 表示八折。",[22,157664,157665],{},"输出最终金额，保留两位小数。",[175,157667,10680],{},[48,157669,157671],{"className":31022,"code":157670,"language":31024,"meta":53,"style":53},"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",[55,157672,157673,157692,157711,157731,157735,157755,157759,157782,157803,157825],{"__ignoreMap":53},[58,157674,157675,157677,157679,157681,157683,157685,157687,157690],{"class":60,"line":61},[58,157676,147160],{"class":75},[58,157678,383],{"class":92},[58,157680,110426],{"class":82},[58,157682,793],{"class":75},[58,157684,54457],{"class":82},[58,157686,793],{"class":75},[58,157688,157689],{"class":386},"\"请输入商品单价:\"",[58,157691,31141],{"class":75},[58,157693,157694,157696,157698,157700,157702,157704,157706,157709],{"class":60,"line":68},[58,157695,147170],{"class":75},[58,157697,383],{"class":92},[58,157699,3028],{"class":82},[58,157701,793],{"class":75},[58,157703,54457],{"class":82},[58,157705,793],{"class":75},[58,157707,157708],{"class":386},"\"请输入购买数量:\"",[58,157710,31141],{"class":75},[58,157712,157713,157716,157718,157720,157722,157724,157726,157729],{"class":60,"line":79},[58,157714,157715],{"class":75},"discount ",[58,157717,383],{"class":92},[58,157719,110426],{"class":82},[58,157721,793],{"class":75},[58,157723,54457],{"class":82},[58,157725,793],{"class":75},[58,157727,157728],{"class":386},"\"请输入折扣:\"",[58,157730,31141],{"class":75},[58,157732,157733],{"class":60,"line":105},[58,157734,3046],{"emptyLinePlaceholder":720},[58,157736,157737,157740,157742,157745,157747,157750,157752],{"class":60,"line":627},[58,157738,157739],{"class":75},"total ",[58,157741,383],{"class":92},[58,157743,157744],{"class":75}," price ",[58,157746,1241],{"class":92},[58,157748,157749],{"class":75}," count ",[58,157751,1241],{"class":92},[58,157753,157754],{"class":75}," discount\n",[58,157756,157757],{"class":60,"line":509},[58,157758,3046],{"emptyLinePlaceholder":720},[58,157760,157761,157763,157765,157767,157770,157772,157774,157776,157778,157780],{"class":60,"line":559},[58,157762,31059],{"class":82},[58,157764,793],{"class":75},[58,157766,843],{"class":92},[58,157768,157769],{"class":386},"\"商品单价:",[58,157771,1681],{"class":82},[58,157773,80445],{"class":75},[58,157775,157638],{"class":92},[58,157777,1730],{"class":82},[58,157779,1037],{"class":386},[58,157781,799],{"class":75},[58,157783,157784,157786,157788,157790,157793,157795,157797,157799,157801],{"class":60,"line":654},[58,157785,31059],{"class":82},[58,157787,793],{"class":75},[58,157789,843],{"class":92},[58,157791,157792],{"class":386},"\"购买数量:",[58,157794,1681],{"class":82},[58,157796,85064],{"class":75},[58,157798,1730],{"class":82},[58,157800,1037],{"class":386},[58,157802,799],{"class":75},[58,157804,157805,157807,157809,157811,157814,157816,157819,157821,157823],{"class":60,"line":671},[58,157806,31059],{"class":82},[58,157808,793],{"class":75},[58,157810,843],{"class":92},[58,157812,157813],{"class":386},"\"折扣:",[58,157815,1681],{"class":82},[58,157817,157818],{"class":75},"discount",[58,157820,1730],{"class":82},[58,157822,1037],{"class":386},[58,157824,799],{"class":75},[58,157826,157827,157829,157831,157833,157836,157838,157841,157843,157845,157847],{"class":60,"line":677},[58,157828,31059],{"class":82},[58,157830,793],{"class":75},[58,157832,843],{"class":92},[58,157834,157835],{"class":386},"\"应付金额:",[58,157837,1681],{"class":82},[58,157839,157840],{"class":75},"total",[58,157842,157638],{"class":92},[58,157844,1730],{"class":82},[58,157846,157491],{"class":386},[58,157848,799],{"class":75},[14,157850,157852],{"id":157851},"_213-易错点","2.13 易错点",[19,157854,157855,157860,157866,157874,157877],{},[22,157856,157857,157859],{},[55,157858,157502],{}," 的结果是字符串，做运算前要转换。",[22,157861,157862,157863,29029],{},"字符串拼接时，数字要先 ",[55,157864,157865],{},"str()",[22,157867,157868,157870,157871,157873],{},[55,157869,383],{}," 是赋值，",[55,157872,3595],{}," 是比较。",[22,157875,157876],{},"Python 没有自增自减运算符。",[22,157878,157879],{},"浮点数计算可能有精度误差：",[48,157881,157883],{"className":31022,"code":157882,"language":31024,"meta":53,"style":53},"print(0.1 + 0.2)\n",[55,157884,157885],{"__ignoreMap":53},[58,157886,157887,157889,157891,157893,157895,157898],{"class":60,"line":61},[58,157888,31059],{"class":82},[58,157890,793],{"class":75},[58,157892,86840],{"class":82},[58,157894,46210],{"class":92},[58,157896,157897],{"class":82}," 0.2",[58,157899,799],{"class":75},[175,157901,157902,157903,157906],{},"金额计算如果要求严格，可以后续学习 ",[55,157904,157905],{},"decimal"," 模块。",[14,157908,157910],{"id":157909},"_214-本章练习","2.14 本章练习",[19,157912,157913,157916,157919,157922,157925],{},[22,157914,157915],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[22,157917,157918],{},"输入圆的半径，计算面积，保留两位小数。",[22,157920,157921],{},"输入工资和奖金，计算总收入。",[22,157923,157924],{},"输入摄氏温度，转换为华氏温度。",[22,157926,157927],{},"写一个 BMI 计算程序：",[48,157929,157932],{"className":157930,"code":157931,"language":5833,"meta":53},[5831],"BMI = 体重kg \u002F 身高m ** 2\n",[55,157933,157931],{"__ignoreMap":53},[702,157935,157936],{},"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":53,"searchDepth":68,"depth":68,"links":157938},[157939,157940,157941,157942,157943,157944,157945,157951,157952,157953,157958,157959,157960,157961],{"id":155500,"depth":68,"text":155501},{"id":155609,"depth":68,"text":155610},{"id":155780,"depth":68,"text":155781},{"id":155857,"depth":68,"text":155858},{"id":51375,"depth":68,"text":51376},{"id":156163,"depth":68,"text":156164},{"id":156389,"depth":68,"text":156390,"children":157946},[157947,157948,157949,157950],{"id":156393,"depth":79,"text":156394},{"id":156587,"depth":79,"text":156588},{"id":156675,"depth":79,"text":156676},{"id":156781,"depth":79,"text":156782},{"id":156890,"depth":68,"text":156891},{"id":157048,"depth":68,"text":157049},{"id":157113,"depth":68,"text":157114,"children":157954},[157955,157956,157957],{"id":157117,"depth":79,"text":157118},{"id":157262,"depth":79,"text":157263},{"id":157365,"depth":79,"text":157366},{"id":157496,"depth":68,"text":157497},{"id":157648,"depth":68,"text":157649},{"id":157851,"depth":68,"text":157852},{"id":157909,"depth":68,"text":157910},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155492,"description":717},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157968,"title":157969,"body":157970,"description":717,"extension":718,"meta":159606,"navigation":720,"path":159607,"seo":159608,"stem":159609,"__hash__":159610},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157971,"toc":159587},[157972,157975,157979,157982,157997,158000,158028,158032,158082,158084,158100,158103,158129,158132,158136,158203,158206,158222,158226,158229,158347,158350,158357,158406,158412,158416,158419,158532,158535,158539,158543,158546,158596,158600,158603,158653,158657,158660,158698,158702,158705,158751,158754,158789,158793,158798,158801,158847,158849,158916,158920,158926,159037,159046,159050,159052,159063,159065,159231,159235,159237,159251,159253,159467,159471,159490,159507,159510,159556,159560,159584],[10,157973,157969],{"id":157974},"_3-判断语句",[14,157976,157978],{"id":157977},"_31-布尔值","3.1 布尔值",[175,157980,157981],{},"判断语句依赖布尔值：",[48,157983,157985],{"className":31022,"code":157984,"language":31024,"meta":53,"style":53},"True\nFalse\n",[55,157986,157987,157992],{"__ignoreMap":53},[58,157988,157989],{"class":60,"line":61},[58,157990,157991],{"class":82},"True\n",[58,157993,157994],{"class":60,"line":68},[58,157995,157996],{"class":82},"False\n",[175,157998,157999],{},"比较表达式会产生布尔值：",[48,158001,158003],{"className":31022,"code":158002,"language":31024,"meta":53,"style":53},"age = 18\nprint(age >= 18)  # True\n",[55,158004,158005,158013],{"__ignoreMap":53},[58,158006,158007,158009,158011],{"class":60,"line":61},[58,158008,147025],{"class":75},[58,158010,383],{"class":92},[58,158012,147030],{"class":82},[58,158014,158015,158017,158019,158021,158023,158025],{"class":60,"line":68},[58,158016,31059],{"class":82},[58,158018,156247],{"class":75},[58,158020,2357],{"class":92},[58,158022,156764],{"class":82},[58,158024,46452],{"class":75},[58,158026,158027],{"class":64},"# True\n",[14,158029,158031],{"id":158030},"_32-if基础语法","3.2 if基础语法",[48,158033,158035],{"className":31022,"code":158034,"language":31024,"meta":53,"style":53},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[55,158036,158037,158055,158059,158071],{"__ignoreMap":53},[58,158038,158039,158041,158043,158045,158047,158049,158051,158053],{"class":60,"line":61},[58,158040,147025],{"class":75},[58,158042,383],{"class":92},[58,158044,3028],{"class":82},[58,158046,793],{"class":75},[58,158048,54457],{"class":82},[58,158050,793],{"class":75},[58,158052,152873],{"class":386},[58,158054,31141],{"class":75},[58,158056,158057],{"class":60,"line":68},[58,158058,3046],{"emptyLinePlaceholder":720},[58,158060,158061,158063,158065,158067,158069],{"class":60,"line":79},[58,158062,2180],{"class":92},[58,158064,16350],{"class":75},[58,158066,2357],{"class":92},[58,158068,156764],{"class":82},[58,158070,4385],{"class":75},[58,158072,158073,158075,158077,158080],{"class":60,"line":105},[58,158074,31943],{"class":82},[58,158076,793],{"class":75},[58,158078,158079],{"class":386},"\"可以进入网吧\"",[58,158081,799],{"class":75},[175,158083,195],{},[19,158085,158086,158091,158094,158097],{},[22,158087,158088,158090],{},[55,158089,2180],{}," 后面是条件表达式。",[22,158092,158093],{},"条件后面必须写冒号。",[22,158095,158096],{},"条件成立时执行缩进代码块。",[22,158098,158099],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[175,158101,158102],{},"错误示例：",[48,158104,158106],{"className":31022,"code":158105,"language":31024,"meta":53,"style":53},"if age >= 18\n    print(\"可以进入\")\n",[55,158107,158108,158118],{"__ignoreMap":53},[58,158109,158110,158112,158114,158116],{"class":60,"line":61},[58,158111,2180],{"class":92},[58,158113,16350],{"class":75},[58,158115,2357],{"class":92},[58,158117,147030],{"class":82},[58,158119,158120,158122,158124,158127],{"class":60,"line":68},[58,158121,31943],{"class":82},[58,158123,793],{"class":75},[58,158125,158126],{"class":386},"\"可以进入\"",[58,158128,799],{"class":75},[175,158130,158131],{},"缺少冒号。",[14,158133,158135],{"id":158134},"_33-if-else","3.3 if else",[48,158137,158139],{"className":31022,"code":158138,"language":31024,"meta":53,"style":53},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[55,158140,158141,158159,158163,158175,158186,158192],{"__ignoreMap":53},[58,158142,158143,158145,158147,158149,158151,158153,158155,158157],{"class":60,"line":61},[58,158144,147025],{"class":75},[58,158146,383],{"class":92},[58,158148,3028],{"class":82},[58,158150,793],{"class":75},[58,158152,54457],{"class":82},[58,158154,793],{"class":75},[58,158156,152873],{"class":386},[58,158158,31141],{"class":75},[58,158160,158161],{"class":60,"line":68},[58,158162,3046],{"emptyLinePlaceholder":720},[58,158164,158165,158167,158169,158171,158173],{"class":60,"line":79},[58,158166,2180],{"class":92},[58,158168,16350],{"class":75},[58,158170,2357],{"class":92},[58,158172,156764],{"class":82},[58,158174,4385],{"class":75},[58,158176,158177,158179,158181,158184],{"class":60,"line":105},[58,158178,31943],{"class":82},[58,158180,793],{"class":75},[58,158182,158183],{"class":386},"\"成年人\"",[58,158185,799],{"class":75},[58,158187,158188,158190],{"class":60,"line":627},[58,158189,2348],{"class":92},[58,158191,4385],{"class":75},[58,158193,158194,158196,158198,158201],{"class":60,"line":509},[58,158195,31943],{"class":82},[58,158197,793],{"class":75},[58,158199,158200],{"class":386},"\"未成年人\"",[58,158202,799],{"class":75},[175,158204,158205],{},"执行逻辑：",[19,158207,158208,158214,158219],{},[22,158209,158210,158211,158213],{},"条件成立，执行 ",[55,158212,2180],{}," 代码块。",[22,158215,158216,158217,158213],{},"条件不成立，执行 ",[55,158218,2348],{},[22,158220,158221],{},"两个代码块只会执行其中一个。",[14,158223,158225],{"id":158224},"_34-if-elif-else","3.4 if elif else",[175,158227,158228],{},"多条件判断：",[48,158230,158232],{"className":31022,"code":158231,"language":31024,"meta":53,"style":53},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[55,158233,158234,158252,158256,158270,158281,158295,158306,158319,158330,158336],{"__ignoreMap":53},[58,158235,158236,158238,158240,158242,158244,158246,158248,158250],{"class":60,"line":61},[58,158237,155837],{"class":75},[58,158239,383],{"class":92},[58,158241,3028],{"class":82},[58,158243,793],{"class":75},[58,158245,54457],{"class":82},[58,158247,793],{"class":75},[58,158249,152888],{"class":386},[58,158251,31141],{"class":75},[58,158253,158254],{"class":60,"line":68},[58,158255,3046],{"emptyLinePlaceholder":720},[58,158257,158258,158260,158263,158265,158268],{"class":60,"line":79},[58,158259,2180],{"class":92},[58,158261,158262],{"class":75}," score ",[58,158264,2357],{"class":92},[58,158266,158267],{"class":82}," 90",[58,158269,4385],{"class":75},[58,158271,158272,158274,158276,158279],{"class":60,"line":105},[58,158273,31943],{"class":82},[58,158275,793],{"class":75},[58,158277,158278],{"class":386},"\"优秀\"",[58,158280,799],{"class":75},[58,158282,158283,158286,158288,158290,158293],{"class":60,"line":627},[58,158284,158285],{"class":92},"elif",[58,158287,158262],{"class":75},[58,158289,2357],{"class":92},[58,158291,158292],{"class":82}," 80",[58,158294,4385],{"class":75},[58,158296,158297,158299,158301,158304],{"class":60,"line":509},[58,158298,31943],{"class":82},[58,158300,793],{"class":75},[58,158302,158303],{"class":386},"\"良好\"",[58,158305,799],{"class":75},[58,158307,158308,158310,158312,158314,158317],{"class":60,"line":559},[58,158309,158285],{"class":92},[58,158311,158262],{"class":75},[58,158313,2357],{"class":92},[58,158315,158316],{"class":82}," 60",[58,158318,4385],{"class":75},[58,158320,158321,158323,158325,158328],{"class":60,"line":654},[58,158322,31943],{"class":82},[58,158324,793],{"class":75},[58,158326,158327],{"class":386},"\"及格\"",[58,158329,799],{"class":75},[58,158331,158332,158334],{"class":60,"line":671},[58,158333,2348],{"class":92},[58,158335,4385],{"class":75},[58,158337,158338,158340,158342,158345],{"class":60,"line":677},[58,158339,31943],{"class":82},[58,158341,793],{"class":75},[58,158343,158344],{"class":386},"\"不及格\"",[58,158346,799],{"class":75},[175,158348,158349],{},"注意判断顺序很重要。",[175,158351,158352,158353,158356],{},"如果把 ",[55,158354,158355],{},"score >= 60"," 放在最前面：",[48,158358,158360],{"className":31022,"code":158359,"language":31024,"meta":53,"style":53},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[55,158361,158362,158374,158384,158396],{"__ignoreMap":53},[58,158363,158364,158366,158368,158370,158372],{"class":60,"line":61},[58,158365,2180],{"class":92},[58,158367,158262],{"class":75},[58,158369,2357],{"class":92},[58,158371,158316],{"class":82},[58,158373,4385],{"class":75},[58,158375,158376,158378,158380,158382],{"class":60,"line":68},[58,158377,31943],{"class":82},[58,158379,793],{"class":75},[58,158381,158327],{"class":386},[58,158383,799],{"class":75},[58,158385,158386,158388,158390,158392,158394],{"class":60,"line":79},[58,158387,158285],{"class":92},[58,158389,158262],{"class":75},[58,158391,2357],{"class":92},[58,158393,158267],{"class":82},[58,158395,4385],{"class":75},[58,158397,158398,158400,158402,158404],{"class":60,"line":105},[58,158399,31943],{"class":82},[58,158401,793],{"class":75},[58,158403,158278],{"class":386},[58,158405,799],{"class":75},[175,158407,158408,158409,158411],{},"成绩 95 会先满足 ",[55,158410,158355],{},"，后面的优秀分支就不会执行。",[14,158413,158415],{"id":158414},"_35-判断语句嵌套","3.5 判断语句嵌套",[175,158417,158418],{},"嵌套判断就是在一个判断内部再写判断。",[48,158420,158422],{"className":31022,"code":158421,"language":31024,"meta":53,"style":53},"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",[55,158423,158424,158442,158457,158461,158473,158487,158497,158504,158515,158521],{"__ignoreMap":53},[58,158425,158426,158428,158430,158432,158434,158436,158438,158440],{"class":60,"line":61},[58,158427,147025],{"class":75},[58,158429,383],{"class":92},[58,158431,3028],{"class":82},[58,158433,793],{"class":75},[58,158435,54457],{"class":82},[58,158437,793],{"class":75},[58,158439,152873],{"class":386},[58,158441,31141],{"class":75},[58,158443,158444,158446,158448,158450,158452,158455],{"class":60,"line":68},[58,158445,156840],{"class":75},[58,158447,383],{"class":92},[58,158449,61239],{"class":82},[58,158451,793],{"class":75},[58,158453,158454],{"class":386},"\"是否有票(y\u002Fn):\"",[58,158456,799],{"class":75},[58,158458,158459],{"class":60,"line":79},[58,158460,3046],{"emptyLinePlaceholder":720},[58,158462,158463,158465,158467,158469,158471],{"class":60,"line":105},[58,158464,2180],{"class":92},[58,158466,16350],{"class":75},[58,158468,2357],{"class":92},[58,158470,156764],{"class":82},[58,158472,4385],{"class":75},[58,158474,158475,158477,158480,158482,158485],{"class":60,"line":627},[58,158476,3747],{"class":92},[58,158478,158479],{"class":75}," has_ticket ",[58,158481,3595],{"class":92},[58,158483,158484],{"class":386}," \"y\"",[58,158486,4385],{"class":75},[58,158488,158489,158491,158493,158495],{"class":60,"line":509},[58,158490,33095],{"class":82},[58,158492,793],{"class":75},[58,158494,158126],{"class":386},[58,158496,799],{"class":75},[58,158498,158499,158502],{"class":60,"line":559},[58,158500,158501],{"class":92},"    else",[58,158503,4385],{"class":75},[58,158505,158506,158508,158510,158513],{"class":60,"line":654},[58,158507,33095],{"class":82},[58,158509,793],{"class":75},[58,158511,158512],{"class":386},"\"请先买票\"",[58,158514,799],{"class":75},[58,158516,158517,158519],{"class":60,"line":671},[58,158518,2348],{"class":92},[58,158520,4385],{"class":75},[58,158522,158523,158525,158527,158530],{"class":60,"line":677},[58,158524,31943],{"class":82},[58,158526,793],{"class":75},[58,158528,158529],{"class":386},"\"未成年人禁止进入\"",[58,158531,799],{"class":75},[175,158533,158534],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158536,158538],{"id":158537},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[114,158540,158542],{"id":158541},"_361-and","3.6.1 and",[175,158544,158545],{},"两个条件都成立才成立。",[48,158547,158549],{"className":31022,"code":158548,"language":31024,"meta":53,"style":53},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[55,158550,158551,158559,158567,158571,158586],{"__ignoreMap":53},[58,158552,158553,158555,158557],{"class":60,"line":61},[58,158554,147025],{"class":75},[58,158556,383],{"class":92},[58,158558,88694],{"class":82},[58,158560,158561,158563,158565],{"class":60,"line":68},[58,158562,156840],{"class":75},[58,158564,383],{"class":92},[58,158566,154078],{"class":82},[58,158568,158569],{"class":60,"line":79},[58,158570,3046],{"emptyLinePlaceholder":720},[58,158572,158573,158575,158577,158579,158581,158583],{"class":60,"line":105},[58,158574,2180],{"class":92},[58,158576,16350],{"class":75},[58,158578,2357],{"class":92},[58,158580,156764],{"class":82},[58,158582,121058],{"class":92},[58,158584,158585],{"class":75}," has_ticket:\n",[58,158587,158588,158590,158592,158594],{"class":60,"line":627},[58,158589,31943],{"class":82},[58,158591,793],{"class":75},[58,158593,158126],{"class":386},[58,158595,799],{"class":75},[114,158597,158599],{"id":158598},"_362-or","3.6.2 or",[175,158601,158602],{},"只要一个条件成立就成立。",[48,158604,158606],{"className":31022,"code":158605,"language":31024,"meta":53,"style":53},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[55,158607,158608,158617,158626,158630,158642],{"__ignoreMap":53},[58,158609,158610,158613,158615],{"class":60,"line":61},[58,158611,158612],{"class":75},"is_vip ",[58,158614,383],{"class":92},[58,158616,126436],{"class":82},[58,158618,158619,158622,158624],{"class":60,"line":68},[58,158620,158621],{"class":75},"coupon ",[58,158623,383],{"class":92},[58,158625,154078],{"class":82},[58,158627,158628],{"class":60,"line":79},[58,158629,3046],{"emptyLinePlaceholder":720},[58,158631,158632,158634,158637,158639],{"class":60,"line":105},[58,158633,2180],{"class":92},[58,158635,158636],{"class":75}," is_vip ",[58,158638,115719],{"class":92},[58,158640,158641],{"class":75}," coupon:\n",[58,158643,158644,158646,158648,158651],{"class":60,"line":627},[58,158645,31943],{"class":82},[58,158647,793],{"class":75},[58,158649,158650],{"class":386},"\"可以享受优惠\"",[58,158652,799],{"class":75},[114,158654,158656],{"id":158655},"_363-not","3.6.3 not",[175,158658,158659],{},"取反。",[48,158661,158663],{"className":31022,"code":158662,"language":31024,"meta":53,"style":53},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[55,158664,158665,158674,158678,158687],{"__ignoreMap":53},[58,158666,158667,158670,158672],{"class":60,"line":61},[58,158668,158669],{"class":75},"is_closed ",[58,158671,383],{"class":92},[58,158673,126436],{"class":82},[58,158675,158676],{"class":60,"line":68},[58,158677,3046],{"emptyLinePlaceholder":720},[58,158679,158680,158682,158684],{"class":60,"line":79},[58,158681,2180],{"class":92},[58,158683,39574],{"class":92},[58,158685,158686],{"class":75}," is_closed:\n",[58,158688,158689,158691,158693,158696],{"class":60,"line":105},[58,158690,31943],{"class":82},[58,158692,793],{"class":75},[58,158694,158695],{"class":386},"\"店铺营业中\"",[58,158697,799],{"class":75},[14,158699,158701],{"id":158700},"_37-链式比较","3.7 链式比较",[175,158703,158704],{},"Python 支持链式比较：",[48,158706,158708],{"className":31022,"code":158707,"language":31024,"meta":53,"style":53},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[55,158709,158710,158719,158723,158740],{"__ignoreMap":53},[58,158711,158712,158714,158716],{"class":60,"line":61},[58,158713,155837],{"class":75},[58,158715,383],{"class":92},[58,158717,158718],{"class":82}," 85\n",[58,158720,158721],{"class":60,"line":68},[58,158722,3046],{"emptyLinePlaceholder":720},[58,158724,158725,158727,158729,158732,158734,158736,158738],{"class":60,"line":79},[58,158726,2180],{"class":92},[58,158728,4739],{"class":82},[58,158730,158731],{"class":92}," \u003C=",[58,158733,158262],{"class":75},[58,158735,2236],{"class":92},[58,158737,6400],{"class":82},[58,158739,4385],{"class":75},[58,158741,158742,158744,158746,158749],{"class":60,"line":105},[58,158743,31943],{"class":82},[58,158745,793],{"class":75},[58,158747,158748],{"class":386},"\"成绩合法\"",[58,158750,799],{"class":75},[175,158752,158753],{},"等价于：",[48,158755,158757],{"className":31022,"code":158756,"language":31024,"meta":53,"style":53},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[55,158758,158759,158779],{"__ignoreMap":53},[58,158760,158761,158763,158765,158767,158769,158771,158773,158775,158777],{"class":60,"line":61},[58,158762,2180],{"class":92},[58,158764,158262],{"class":75},[58,158766,2357],{"class":92},[58,158768,4739],{"class":82},[58,158770,121058],{"class":92},[58,158772,158262],{"class":75},[58,158774,2236],{"class":92},[58,158776,6400],{"class":82},[58,158778,4385],{"class":75},[58,158780,158781,158783,158785,158787],{"class":60,"line":68},[58,158782,31943],{"class":82},[58,158784,793],{"class":75},[58,158786,158748],{"class":386},[58,158788,799],{"class":75},[14,158790,158792],{"id":158791},"_38-真值和假值","3.8 真值和假值",[175,158794,117096,158795,158797],{},[55,158796,2180],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[175,158799,158800],{},"假值：",[48,158802,158804],{"className":31022,"code":158803,"language":31024,"meta":53,"style":53},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[55,158805,158806,158810,158815,158819,158823,158828,158832,158836,158841],{"__ignoreMap":53},[58,158807,158808],{"class":60,"line":61},[58,158809,157996],{"class":82},[58,158811,158812],{"class":60,"line":68},[58,158813,158814],{"class":82},"None\n",[58,158816,158817],{"class":60,"line":79},[58,158818,3731],{"class":82},[58,158820,158821],{"class":60,"line":105},[58,158822,32986],{"class":82},[58,158824,158825],{"class":60,"line":627},[58,158826,158827],{"class":386},"\"\"\n",[58,158829,158830],{"class":60,"line":509},[58,158831,33001],{"class":75},[58,158833,158834],{"class":60,"line":559},[58,158835,2622],{"class":75},[58,158837,158838],{"class":60,"line":654},[58,158839,158840],{"class":75},"{}\n",[58,158842,158843,158845],{"class":60,"line":671},[58,158844,155769],{"class":82},[58,158846,2622],{"class":75},[175,158848,15779],{},[48,158850,158852],{"className":31022,"code":158851,"language":31024,"meta":53,"style":53},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[55,158853,158854,158868,158872,158879,158899,158905],{"__ignoreMap":53},[58,158855,158856,158858,158860,158862,158864,158866],{"class":60,"line":61},[58,158857,147015],{"class":75},[58,158859,383],{"class":92},[58,158861,61239],{"class":82},[58,158863,793],{"class":75},[58,158865,152858],{"class":386},[58,158867,799],{"class":75},[58,158869,158870],{"class":60,"line":68},[58,158871,3046],{"emptyLinePlaceholder":720},[58,158873,158874,158876],{"class":60,"line":79},[58,158875,2180],{"class":92},[58,158877,158878],{"class":75}," name:\n",[58,158880,158881,158883,158885,158887,158889,158891,158893,158895,158897],{"class":60,"line":105},[58,158882,31943],{"class":82},[58,158884,793],{"class":75},[58,158886,843],{"class":92},[58,158888,157533],{"class":386},[58,158890,1681],{"class":82},[58,158892,80440],{"class":75},[58,158894,1730],{"class":82},[58,158896,1037],{"class":386},[58,158898,799],{"class":75},[58,158900,158901,158903],{"class":60,"line":627},[58,158902,2348],{"class":92},[58,158904,4385],{"class":75},[58,158906,158907,158909,158911,158914],{"class":60,"line":509},[58,158908,31943],{"class":82},[58,158910,793],{"class":75},[58,158912,158913],{"class":386},"\"姓名不能为空\"",[58,158915,799],{"class":75},[14,158917,158919],{"id":158918},"_39-match语句","3.9 match语句",[175,158921,158922,158923,158925],{},"Python 3.10 开始支持 ",[55,158924,71896],{},"。它适合处理固定选项。",[48,158927,158929],{"className":31022,"code":158928,"language":31024,"meta":53,"style":53},"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",[55,158930,158931,158947,158951,158958,158968,158979,158988,158999,159008,159019,159026],{"__ignoreMap":53},[58,158932,158933,158936,158938,158940,158942,158945],{"class":60,"line":61},[58,158934,158935],{"class":75},"command ",[58,158937,383],{"class":92},[58,158939,61239],{"class":82},[58,158941,793],{"class":75},[58,158943,158944],{"class":386},"\"请输入命令:\"",[58,158946,799],{"class":75},[58,158948,158949],{"class":60,"line":68},[58,158950,3046],{"emptyLinePlaceholder":720},[58,158952,158953,158955],{"class":60,"line":79},[58,158954,71896],{"class":92},[58,158956,158957],{"class":75}," command:\n",[58,158959,158960,158963,158966],{"class":60,"line":105},[58,158961,158962],{"class":92},"    case",[58,158964,158965],{"class":386}," \"start\"",[58,158967,4385],{"class":75},[58,158969,158970,158972,158974,158977],{"class":60,"line":627},[58,158971,33095],{"class":82},[58,158973,793],{"class":75},[58,158975,158976],{"class":386},"\"启动\"",[58,158978,799],{"class":75},[58,158980,158981,158983,158986],{"class":60,"line":509},[58,158982,158962],{"class":92},[58,158984,158985],{"class":386}," \"stop\"",[58,158987,4385],{"class":75},[58,158989,158990,158992,158994,158997],{"class":60,"line":559},[58,158991,33095],{"class":82},[58,158993,793],{"class":75},[58,158995,158996],{"class":386},"\"停止\"",[58,158998,799],{"class":75},[58,159000,159001,159003,159006],{"class":60,"line":654},[58,159002,158962],{"class":92},[58,159004,159005],{"class":386}," \"restart\"",[58,159007,4385],{"class":75},[58,159009,159010,159012,159014,159017],{"class":60,"line":671},[58,159011,33095],{"class":82},[58,159013,793],{"class":75},[58,159015,159016],{"class":386},"\"重启\"",[58,159018,799],{"class":75},[58,159020,159021,159023],{"class":60,"line":677},[58,159022,158962],{"class":92},[58,159024,159025],{"class":75}," _:\n",[58,159027,159028,159030,159032,159035],{"class":60,"line":2260},[58,159029,33095],{"class":82},[58,159031,793],{"class":75},[58,159033,159034],{"class":386},"\"未知命令\"",[58,159036,799],{"class":75},[175,159038,159039,159040,159042,159043,159045],{},"入门阶段掌握 ",[55,159041,155137],{}," 更重要，",[55,159044,71896],{}," 可以作为补充。",[14,159047,159049],{"id":159048},"_310-小案例成绩等级","3.10 小案例：成绩等级",[175,159051,123921],{},[19,159053,159054,159057,159060],{},[22,159055,159056],{},"输入成绩。",[22,159058,159059],{},"判断成绩是否合法。",[22,159061,159062],{},"输出等级。",[175,159064,10680],{},[48,159066,159068],{"className":31022,"code":159067,"language":31024,"meta":53,"style":53},"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",[55,159069,159070,159088,159092,159110,159121,159133,159144,159156,159167,159180,159191,159203,159214,159220],{"__ignoreMap":53},[58,159071,159072,159074,159076,159078,159080,159082,159084,159086],{"class":60,"line":61},[58,159073,155837],{"class":75},[58,159075,383],{"class":92},[58,159077,110426],{"class":82},[58,159079,793],{"class":75},[58,159081,54457],{"class":82},[58,159083,793],{"class":75},[58,159085,152888],{"class":386},[58,159087,31141],{"class":75},[58,159089,159090],{"class":60,"line":68},[58,159091,3046],{"emptyLinePlaceholder":720},[58,159093,159094,159096,159098,159100,159102,159104,159106,159108],{"class":60,"line":79},[58,159095,2180],{"class":92},[58,159097,39574],{"class":92},[58,159099,4739],{"class":82},[58,159101,158731],{"class":92},[58,159103,158262],{"class":75},[58,159105,2236],{"class":92},[58,159107,6400],{"class":82},[58,159109,4385],{"class":75},[58,159111,159112,159114,159116,159119],{"class":60,"line":105},[58,159113,31943],{"class":82},[58,159115,793],{"class":75},[58,159117,159118],{"class":386},"\"成绩不合法\"",[58,159120,799],{"class":75},[58,159122,159123,159125,159127,159129,159131],{"class":60,"line":627},[58,159124,158285],{"class":92},[58,159126,158262],{"class":75},[58,159128,2357],{"class":92},[58,159130,158267],{"class":82},[58,159132,4385],{"class":75},[58,159134,159135,159137,159139,159142],{"class":60,"line":509},[58,159136,31943],{"class":82},[58,159138,793],{"class":75},[58,159140,159141],{"class":386},"\"等级:A\"",[58,159143,799],{"class":75},[58,159145,159146,159148,159150,159152,159154],{"class":60,"line":559},[58,159147,158285],{"class":92},[58,159149,158262],{"class":75},[58,159151,2357],{"class":92},[58,159153,158292],{"class":82},[58,159155,4385],{"class":75},[58,159157,159158,159160,159162,159165],{"class":60,"line":654},[58,159159,31943],{"class":82},[58,159161,793],{"class":75},[58,159163,159164],{"class":386},"\"等级:B\"",[58,159166,799],{"class":75},[58,159168,159169,159171,159173,159175,159178],{"class":60,"line":671},[58,159170,158285],{"class":92},[58,159172,158262],{"class":75},[58,159174,2357],{"class":92},[58,159176,159177],{"class":82}," 70",[58,159179,4385],{"class":75},[58,159181,159182,159184,159186,159189],{"class":60,"line":677},[58,159183,31943],{"class":82},[58,159185,793],{"class":75},[58,159187,159188],{"class":386},"\"等级:C\"",[58,159190,799],{"class":75},[58,159192,159193,159195,159197,159199,159201],{"class":60,"line":2260},[58,159194,158285],{"class":92},[58,159196,158262],{"class":75},[58,159198,2357],{"class":92},[58,159200,158316],{"class":82},[58,159202,4385],{"class":75},[58,159204,159205,159207,159209,159212],{"class":60,"line":694},[58,159206,31943],{"class":82},[58,159208,793],{"class":75},[58,159210,159211],{"class":386},"\"等级:D\"",[58,159213,799],{"class":75},[58,159215,159216,159218],{"class":60,"line":2270},[58,159217,2348],{"class":92},[58,159219,4385],{"class":75},[58,159221,159222,159224,159226,159229],{"class":60,"line":2275},[58,159223,31943],{"class":82},[58,159225,793],{"class":75},[58,159227,159228],{"class":386},"\"等级:E\"",[58,159230,799],{"class":75},[14,159232,159234],{"id":159233},"_311-小案例会员折扣","3.11 小案例：会员折扣",[175,159236,123921],{},[19,159238,159239,159242,159245,159248],{},[22,159240,159241],{},"输入消费金额。",[22,159243,159244],{},"输入会员等级，普通、银卡、金卡。",[22,159246,159247],{},"普通不打折，银卡 9 折，金卡 8 折。",[22,159249,159250],{},"满 500 再减 50。",[175,159252,10680],{},[48,159254,159256],{"className":31022,"code":159255,"language":31024,"meta":53,"style":53},"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",[55,159257,159258,159278,159294,159298,159306,159310,159324,159334,159347,159356,159369,159377,159383,159394,159398,159412,159416,159430,159440,159444],{"__ignoreMap":53},[58,159259,159260,159263,159265,159267,159269,159271,159273,159276],{"class":60,"line":61},[58,159261,159262],{"class":75},"amount ",[58,159264,383],{"class":92},[58,159266,110426],{"class":82},[58,159268,793],{"class":75},[58,159270,54457],{"class":82},[58,159272,793],{"class":75},[58,159274,159275],{"class":386},"\"请输入消费金额:\"",[58,159277,31141],{"class":75},[58,159279,159280,159283,159285,159287,159289,159292],{"class":60,"line":68},[58,159281,159282],{"class":75},"level ",[58,159284,383],{"class":92},[58,159286,61239],{"class":82},[58,159288,793],{"class":75},[58,159290,159291],{"class":386},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[58,159293,799],{"class":75},[58,159295,159296],{"class":60,"line":79},[58,159297,3046],{"emptyLinePlaceholder":720},[58,159299,159300,159302,159304],{"class":60,"line":105},[58,159301,157715],{"class":75},[58,159303,383],{"class":92},[58,159305,56333],{"class":82},[58,159307,159308],{"class":60,"line":627},[58,159309,3046],{"emptyLinePlaceholder":720},[58,159311,159312,159314,159317,159319,159322],{"class":60,"line":509},[58,159313,2180],{"class":92},[58,159315,159316],{"class":75}," level ",[58,159318,3595],{"class":92},[58,159320,159321],{"class":386}," \"银卡\"",[58,159323,4385],{"class":75},[58,159325,159326,159329,159331],{"class":60,"line":559},[58,159327,159328],{"class":75},"    discount ",[58,159330,383],{"class":92},[58,159332,159333],{"class":82}," 0.9\n",[58,159335,159336,159338,159340,159342,159345],{"class":60,"line":654},[58,159337,158285],{"class":92},[58,159339,159316],{"class":75},[58,159341,3595],{"class":92},[58,159343,159344],{"class":386}," \"金卡\"",[58,159346,4385],{"class":75},[58,159348,159349,159351,159353],{"class":60,"line":671},[58,159350,159328],{"class":75},[58,159352,383],{"class":92},[58,159354,159355],{"class":82}," 0.8\n",[58,159357,159358,159360,159362,159364,159367],{"class":60,"line":677},[58,159359,158285],{"class":92},[58,159361,159316],{"class":75},[58,159363,3595],{"class":92},[58,159365,159366],{"class":386}," \"普通\"",[58,159368,4385],{"class":75},[58,159370,159371,159373,159375],{"class":60,"line":2260},[58,159372,159328],{"class":75},[58,159374,383],{"class":92},[58,159376,56333],{"class":82},[58,159378,159379,159381],{"class":60,"line":694},[58,159380,2348],{"class":92},[58,159382,4385],{"class":75},[58,159384,159385,159387,159389,159392],{"class":60,"line":2270},[58,159386,31943],{"class":82},[58,159388,793],{"class":75},[58,159390,159391],{"class":386},"\"会员等级输入错误，按普通会员计算\"",[58,159393,799],{"class":75},[58,159395,159396],{"class":60,"line":2275},[58,159397,3046],{"emptyLinePlaceholder":720},[58,159399,159400,159403,159405,159408,159410],{"class":60,"line":2289},[58,159401,159402],{"class":75},"pay ",[58,159404,383],{"class":92},[58,159406,159407],{"class":75}," amount ",[58,159409,1241],{"class":92},[58,159411,157754],{"class":75},[58,159413,159414],{"class":60,"line":2294},[58,159415,3046],{"emptyLinePlaceholder":720},[58,159417,159418,159420,159423,159425,159428],{"class":60,"line":2300},[58,159419,2180],{"class":92},[58,159421,159422],{"class":75}," pay ",[58,159424,2357],{"class":92},[58,159426,159427],{"class":82}," 500",[58,159429,4385],{"class":75},[58,159431,159432,159435,159437],{"class":60,"line":2321},[58,159433,159434],{"class":75},"    pay ",[58,159436,150731],{"class":92},[58,159438,159439],{"class":82}," 50\n",[58,159441,159442],{"class":60,"line":2326},[58,159443,3046],{"emptyLinePlaceholder":720},[58,159445,159446,159448,159450,159452,159454,159456,159459,159461,159463,159465],{"class":60,"line":2340},[58,159447,31059],{"class":82},[58,159449,793],{"class":75},[58,159451,843],{"class":92},[58,159453,157835],{"class":386},[58,159455,1681],{"class":82},[58,159457,159458],{"class":75},"pay",[58,159460,157638],{"class":92},[58,159462,1730],{"class":82},[58,159464,157491],{"class":386},[58,159466,799],{"class":75},[14,159468,159470],{"id":159469},"_312-易错点","3.12 易错点",[19,159472,159473,159476,159479,159482,159487],{},[22,159474,159475],{},"冒号不能漏。",[22,159477,159478],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[22,159480,159481],{},"多分支判断要注意顺序。",[22,159483,159484,159485,29029],{},"判断相等用 ",[55,159486,3595],{},[22,159488,159489],{},"字符串比较区分大小写：",[48,159491,159493],{"className":31022,"code":159492,"language":31024,"meta":53,"style":53},"\"Y\" == \"y\"  # False\n",[55,159494,159495],{"__ignoreMap":53},[58,159496,159497,159500,159502,159504],{"class":60,"line":61},[58,159498,159499],{"class":386},"\"Y\"",[58,159501,102188],{"class":92},[58,159503,158484],{"class":386},[58,159505,159506],{"class":64},"  # False\n",[175,159508,159509],{},"可转换后再判断：",[48,159511,159513],{"className":31022,"code":159512,"language":31024,"meta":53,"style":53},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[55,159514,159515,159532,159545],{"__ignoreMap":53},[58,159516,159517,159520,159522,159524,159526,159529],{"class":60,"line":61},[58,159518,159519],{"class":75},"answer ",[58,159521,383],{"class":92},[58,159523,61239],{"class":82},[58,159525,793],{"class":75},[58,159527,159528],{"class":386},"\"是否继续(y\u002Fn):\"",[58,159530,159531],{"class":75},").lower()\n",[58,159533,159534,159536,159539,159541,159543],{"class":60,"line":68},[58,159535,2180],{"class":92},[58,159537,159538],{"class":75}," answer ",[58,159540,3595],{"class":92},[58,159542,158484],{"class":386},[58,159544,4385],{"class":75},[58,159546,159547,159549,159551,159554],{"class":60,"line":79},[58,159548,31943],{"class":82},[58,159550,793],{"class":75},[58,159552,159553],{"class":386},"\"继续\"",[58,159555,799],{"class":75},[14,159557,159559],{"id":159558},"_313-本章练习","3.13 本章练习",[19,159561,159562,159565,159568,159571,159581],{},[22,159563,159564],{},"输入年龄，判断是否成年。",[22,159566,159567],{},"输入年份，判断是否为闰年。",[22,159569,159570],{},"输入三个数字，输出最大值。",[22,159572,159573,159574,159577,159578,159580],{},"写登录判断：用户名是 ",[55,159575,159576],{},"admin"," 且密码是 ",[55,159579,15728],{}," 才登录成功。",[22,159582,159583],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[702,159585,159586],{},"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":53,"searchDepth":68,"depth":68,"links":159588},[159589,159590,159591,159592,159593,159594,159599,159600,159601,159602,159603,159604,159605],{"id":157977,"depth":68,"text":157978},{"id":158030,"depth":68,"text":158031},{"id":158134,"depth":68,"text":158135},{"id":158224,"depth":68,"text":158225},{"id":158414,"depth":68,"text":158415},{"id":158537,"depth":68,"text":158538,"children":159595},[159596,159597,159598],{"id":158541,"depth":79,"text":158542},{"id":158598,"depth":79,"text":158599},{"id":158655,"depth":79,"text":158656},{"id":158700,"depth":68,"text":158701},{"id":158791,"depth":68,"text":158792},{"id":158918,"depth":68,"text":158919},{"id":159048,"depth":68,"text":159049},{"id":159233,"depth":68,"text":159234},{"id":159469,"depth":68,"text":159470},{"id":159558,"depth":68,"text":159559},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157969,"description":717},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159612,"title":159613,"body":159614,"description":717,"extension":718,"meta":161383,"navigation":720,"path":161384,"seo":161385,"stem":161386,"__hash__":161387},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159615,"toc":161363},[159616,159619,159623,159629,159632,159649,159653,159655,159672,159674,159719,159721,159738,159742,159745,159811,159814,159832,159836,159997,160006,160010,160014,160019,160066,160068,160074,160078,160083,160130,160132,160138,160142,160147,160183,160186,160233,160237,160243,160301,160306,160337,160342,160346,160401,160404,160476,160479,160538,160542,160545,160620,160623,160627,160733,160736,160762,160766,160778,160847,160850,160942,160946,160948,160959,160961,161091,161095,161297,161305,161309,161339,161343,161360],[10,159617,159613],{"id":159618},"_4-循环语句",[14,159620,159622],{"id":159621},"_41-为什么需要循环","4.1 为什么需要循环",[175,159624,159625,159626,159628],{},"如果要输出 1 到 100，不应该写 100 行 ",[55,159627,146951],{},"，而应该用循环。",[175,159630,159631],{},"循环适合处理重复任务：",[19,159633,159634,159637,159640,159643,159646],{},[22,159635,159636],{},"重复输出。",[22,159638,159639],{},"重复输入。",[22,159641,159642],{},"遍历数据。",[22,159644,159645],{},"持续执行菜单。",[22,159647,159648],{},"批量处理文件或数据。",[14,159650,159652],{"id":159651},"_42-while循环","4.2 while循环",[175,159654,5827],{},[48,159656,159658],{"className":31022,"code":159657,"language":31024,"meta":53,"style":53},"while 条件:\n    循环体\n",[55,159659,159660,159667],{"__ignoreMap":53},[58,159661,159662,159664],{"class":60,"line":61},[58,159663,109292],{"class":92},[58,159665,159666],{"class":75}," 条件:\n",[58,159668,159669],{"class":60,"line":68},[58,159670,159671],{"class":75},"    循环体\n",[175,159673,15779],{},[48,159675,159677],{"className":31022,"code":159676,"language":31024,"meta":53,"style":53},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[55,159678,159679,159687,159691,159703,159710],{"__ignoreMap":53},[58,159680,159681,159683,159685],{"class":60,"line":61},[58,159682,100777],{"class":75},[58,159684,383],{"class":92},[58,159686,56333],{"class":82},[58,159688,159689],{"class":60,"line":68},[58,159690,3046],{"emptyLinePlaceholder":720},[58,159692,159693,159695,159697,159699,159701],{"class":60,"line":79},[58,159694,109292],{"class":92},[58,159696,10083],{"class":75},[58,159698,2236],{"class":92},[58,159700,2794],{"class":82},[58,159702,4385],{"class":75},[58,159704,159705,159707],{"class":60,"line":105},[58,159706,31943],{"class":82},[58,159708,159709],{"class":75},"(i)\n",[58,159711,159712,159715,159717],{"class":60,"line":627},[58,159713,159714],{"class":75},"    i ",[58,159716,10122],{"class":92},[58,159718,56333],{"class":82},[175,159720,81559],{},[19,159722,159723,159729,159732,159735],{},[22,159724,159725,159726,29029],{},"判断条件 ",[55,159727,159728],{},"i \u003C= 5",[22,159730,159731],{},"条件成立，执行循环体。",[22,159733,159734],{},"执行完后回到条件判断。",[22,159736,159737],{},"条件不成立，退出循环。",[14,159739,159741],{"id":159740},"_43-while累加","4.3 while累加",[175,159743,159744],{},"计算 1 到 100 的和：",[48,159746,159748],{"className":31022,"code":159747,"language":31024,"meta":53,"style":53},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[55,159749,159750,159758,159766,159770,159782,159792,159800,159804],{"__ignoreMap":53},[58,159751,159752,159754,159756],{"class":60,"line":61},[58,159753,100777],{"class":75},[58,159755,383],{"class":92},[58,159757,56333],{"class":82},[58,159759,159760,159762,159764],{"class":60,"line":68},[58,159761,157739],{"class":75},[58,159763,383],{"class":92},[58,159765,47977],{"class":82},[58,159767,159768],{"class":60,"line":79},[58,159769,3046],{"emptyLinePlaceholder":720},[58,159771,159772,159774,159776,159778,159780],{"class":60,"line":105},[58,159773,109292],{"class":92},[58,159775,10083],{"class":75},[58,159777,2236],{"class":92},[58,159779,6400],{"class":82},[58,159781,4385],{"class":75},[58,159783,159784,159787,159789],{"class":60,"line":627},[58,159785,159786],{"class":75},"    total ",[58,159788,10122],{"class":92},[58,159790,159791],{"class":75}," i\n",[58,159793,159794,159796,159798],{"class":60,"line":509},[58,159795,159714],{"class":75},[58,159797,10122],{"class":92},[58,159799,56333],{"class":82},[58,159801,159802],{"class":60,"line":559},[58,159803,3046],{"emptyLinePlaceholder":720},[58,159805,159806,159808],{"class":60,"line":654},[58,159807,31059],{"class":82},[58,159809,159810],{"class":75},"(total)\n",[175,159812,159813],{},"核心思想：",[19,159815,159816,159821,159826],{},[22,159817,159818,159820],{},[55,159819,1227],{}," 控制循环次数。",[22,159822,159823,159825],{},[55,159824,157840],{}," 保存累加结果。",[22,159827,159828,159829,159831],{},"每轮循环都要更新 ",[55,159830,1227],{},"，否则可能死循环。",[14,159833,159835],{"id":159834},"_44-while猜数字","4.4 while猜数字",[48,159837,159839],{"className":31022,"code":159838,"language":31024,"meta":53,"style":53},"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",[55,159840,159841,159847,159851,159868,159876,159880,159888,159908,159917,159921,159933,159944,159954,159965,159971,159993],{"__ignoreMap":53},[58,159842,159843,159845],{"class":60,"line":61},[58,159844,31036],{"class":92},[58,159846,45972],{"class":75},[58,159848,159849],{"class":60,"line":68},[58,159850,3046],{"emptyLinePlaceholder":720},[58,159852,159853,159855,159857,159860,159862,159864,159866],{"class":60,"line":79},[58,159854,159519],{"class":75},[58,159856,383],{"class":92},[58,159858,159859],{"class":75}," random.randint(",[58,159861,89],{"class":82},[58,159863,469],{"class":75},[58,159865,1097],{"class":82},[58,159867,799],{"class":75},[58,159869,159870,159872,159874],{"class":60,"line":105},[58,159871,147170],{"class":75},[58,159873,383],{"class":92},[58,159875,47977],{"class":82},[58,159877,159878],{"class":60,"line":627},[58,159879,3046],{"emptyLinePlaceholder":720},[58,159881,159882,159884,159886],{"class":60,"line":509},[58,159883,109292],{"class":92},[58,159885,95921],{"class":82},[58,159887,4385],{"class":75},[58,159889,159890,159893,159895,159897,159899,159901,159903,159906],{"class":60,"line":559},[58,159891,159892],{"class":75},"    guess ",[58,159894,383],{"class":92},[58,159896,3028],{"class":82},[58,159898,793],{"class":75},[58,159900,54457],{"class":82},[58,159902,793],{"class":75},[58,159904,159905],{"class":386},"\"请输入1到100之间的数字:\"",[58,159907,31141],{"class":75},[58,159909,159910,159913,159915],{"class":60,"line":654},[58,159911,159912],{"class":75},"    count ",[58,159914,10122],{"class":92},[58,159916,56333],{"class":82},[58,159918,159919],{"class":60,"line":671},[58,159920,3046],{"emptyLinePlaceholder":720},[58,159922,159923,159925,159928,159930],{"class":60,"line":677},[58,159924,3747],{"class":92},[58,159926,159927],{"class":75}," guess ",[58,159929,1744],{"class":92},[58,159931,159932],{"class":75}," answer:\n",[58,159934,159935,159937,159939,159942],{"class":60,"line":2260},[58,159936,33095],{"class":82},[58,159938,793],{"class":75},[58,159940,159941],{"class":386},"\"猜大了\"",[58,159943,799],{"class":75},[58,159945,159946,159948,159950,159952],{"class":60,"line":694},[58,159947,39937],{"class":92},[58,159949,159927],{"class":75},[58,159951,373],{"class":92},[58,159953,159932],{"class":75},[58,159955,159956,159958,159960,159963],{"class":60,"line":2270},[58,159957,33095],{"class":82},[58,159959,793],{"class":75},[58,159961,159962],{"class":386},"\"猜小了\"",[58,159964,799],{"class":75},[58,159966,159967,159969],{"class":60,"line":2275},[58,159968,158501],{"class":92},[58,159970,4385],{"class":75},[58,159972,159973,159975,159977,159979,159982,159984,159986,159988,159991],{"class":60,"line":2289},[58,159974,33095],{"class":82},[58,159976,793],{"class":75},[58,159978,843],{"class":92},[58,159980,159981],{"class":386},"\"猜对了，一共猜了",[58,159983,1681],{"class":82},[58,159985,85064],{"class":75},[58,159987,1730],{"class":82},[58,159989,159990],{"class":386},"次\"",[58,159992,799],{"class":75},[58,159994,159995],{"class":60,"line":2294},[58,159996,32271],{"class":92},[175,159998,159999,160002,160003,160005],{},[55,160000,160001],{},"while True"," 表示无限循环，通常配合 ",[55,160004,2699],{}," 使用。",[14,160007,160009],{"id":160008},"_45-break和continue","4.5 break和continue",[114,160011,160013],{"id":160012},"_451-break","4.5.1 break",[175,160015,160016,160018],{},[55,160017,2699],{}," 直接结束整个循环。",[48,160020,160022],{"className":31022,"code":160021,"language":31024,"meta":53,"style":53},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[55,160023,160024,160044,160056,160060],{"__ignoreMap":53},[58,160025,160026,160028,160030,160032,160034,160036,160038,160040,160042],{"class":60,"line":61},[58,160027,3671],{"class":92},[58,160029,10083],{"class":75},[58,160031,26687],{"class":92},[58,160033,33087],{"class":82},[58,160035,793],{"class":75},[58,160037,89],{"class":82},[58,160039,469],{"class":75},[58,160041,1130],{"class":82},[58,160043,31430],{"class":75},[58,160045,160046,160048,160050,160052,160054],{"class":60,"line":68},[58,160047,3747],{"class":92},[58,160049,10083],{"class":75},[58,160051,3595],{"class":92},[58,160053,78701],{"class":82},[58,160055,4385],{"class":75},[58,160057,160058],{"class":60,"line":79},[58,160059,32271],{"class":92},[58,160061,160062,160064],{"class":60,"line":105},[58,160063,31943],{"class":82},[58,160065,159709],{"class":75},[175,160067,146936],{},[48,160069,160072],{"className":160070,"code":160071,"language":5833,"meta":53},[5831],"1\n2\n",[55,160073,160071],{"__ignoreMap":53},[114,160075,160077],{"id":160076},"_452-continue","4.5.2 continue",[175,160079,160080,160082],{},[55,160081,155151],{}," 跳过本轮剩余代码，进入下一轮循环。",[48,160084,160086],{"className":31022,"code":160085,"language":31024,"meta":53,"style":53},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[55,160087,160088,160108,160120,160124],{"__ignoreMap":53},[58,160089,160090,160092,160094,160096,160098,160100,160102,160104,160106],{"class":60,"line":61},[58,160091,3671],{"class":92},[58,160093,10083],{"class":75},[58,160095,26687],{"class":92},[58,160097,33087],{"class":82},[58,160099,793],{"class":75},[58,160101,89],{"class":82},[58,160103,469],{"class":75},[58,160105,1130],{"class":82},[58,160107,31430],{"class":75},[58,160109,160110,160112,160114,160116,160118],{"class":60,"line":68},[58,160111,3747],{"class":92},[58,160113,10083],{"class":75},[58,160115,3595],{"class":92},[58,160117,78701],{"class":82},[58,160119,4385],{"class":75},[58,160121,160122],{"class":60,"line":79},[58,160123,148991],{"class":92},[58,160125,160126,160128],{"class":60,"line":105},[58,160127,31943],{"class":82},[58,160129,159709],{"class":75},[175,160131,146936],{},[48,160133,160136],{"className":160134,"code":160135,"language":5833,"meta":53},[5831],"1\n2\n4\n5\n",[55,160137,160135],{"__ignoreMap":53},[14,160139,160141],{"id":160140},"_46-for循环","4.6 for循环",[175,160143,160144,160146],{},[55,160145,3671],{}," 常用于遍历序列。",[48,160148,160150],{"className":31022,"code":160149,"language":31024,"meta":53,"style":53},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[55,160151,160152,160161,160165,160176],{"__ignoreMap":53},[58,160153,160154,160156,160158],{"class":60,"line":61},[58,160155,147015],{"class":75},[58,160157,383],{"class":92},[58,160159,160160],{"class":386}," \"python\"\n",[58,160162,160163],{"class":60,"line":68},[58,160164,3046],{"emptyLinePlaceholder":720},[58,160166,160167,160169,160172,160174],{"class":60,"line":79},[58,160168,3671],{"class":92},[58,160170,160171],{"class":75}," ch ",[58,160173,26687],{"class":92},[58,160175,158878],{"class":75},[58,160177,160178,160180],{"class":60,"line":105},[58,160179,31943],{"class":82},[58,160181,160182],{"class":75},"(ch)\n",[175,160184,160185],{},"遍历列表：",[48,160187,160189],{"className":31022,"code":160188,"language":31024,"meta":53,"style":53},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[55,160190,160191,160213,160217,160227],{"__ignoreMap":53},[58,160192,160193,160196,160198,160200,160202,160204,160206,160208,160211],{"class":60,"line":61},[58,160194,160195],{"class":75},"students ",[58,160197,383],{"class":92},[58,160199,52864],{"class":75},[58,160201,150367],{"class":386},[58,160203,469],{"class":75},[58,160205,151415],{"class":386},[58,160207,469],{"class":75},[58,160209,160210],{"class":386},"\"小刚\"",[58,160212,33890],{"class":75},[58,160214,160215],{"class":60,"line":68},[58,160216,3046],{"emptyLinePlaceholder":720},[58,160218,160219,160221,160223,160225],{"class":60,"line":79},[58,160220,3671],{"class":92},[58,160222,152616],{"class":75},[58,160224,26687],{"class":92},[58,160226,152621],{"class":75},[58,160228,160229,160231],{"class":60,"line":105},[58,160230,31943],{"class":82},[58,160232,150521],{"class":75},[14,160234,160236],{"id":160235},"_47-range函数","4.7 range函数",[175,160238,160239,160242],{},[55,160240,160241],{},"range()"," 用于生成整数序列。",[48,160244,160246],{"className":31022,"code":160245,"language":31024,"meta":53,"style":53},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[55,160247,160248,160262,160280],{"__ignoreMap":53},[58,160249,160250,160252,160254,160256,160259],{"class":60,"line":61},[58,160251,34060],{"class":82},[58,160253,793],{"class":75},[58,160255,1105],{"class":82},[58,160257,160258],{"class":75},")          ",[58,160260,160261],{"class":64},"# 0,1,2,3,4\n",[58,160263,160264,160266,160268,160270,160272,160274,160277],{"class":60,"line":68},[58,160265,34060],{"class":82},[58,160267,793],{"class":75},[58,160269,89],{"class":82},[58,160271,469],{"class":75},[58,160273,1105],{"class":82},[58,160275,160276],{"class":75},")       ",[58,160278,160279],{"class":64},"# 1,2,3,4\n",[58,160281,160282,160284,160286,160288,160290,160292,160294,160296,160298],{"class":60,"line":79},[58,160283,34060],{"class":82},[58,160285,793],{"class":75},[58,160287,89],{"class":82},[58,160289,469],{"class":75},[58,160291,1232],{"class":82},[58,160293,469],{"class":75},[58,160295,867],{"class":82},[58,160297,156140],{"class":75},[58,160299,160300],{"class":64},"# 1,3,5,7,9\n",[175,160302,160303,160304,25262],{},"配合 ",[55,160305,3671],{},[48,160307,160309],{"className":31022,"code":160308,"language":31024,"meta":53,"style":53},"for i in range(1, 6):\n    print(i)\n",[55,160310,160311,160331],{"__ignoreMap":53},[58,160312,160313,160315,160317,160319,160321,160323,160325,160327,160329],{"class":60,"line":61},[58,160314,3671],{"class":92},[58,160316,10083],{"class":75},[58,160318,26687],{"class":92},[58,160320,33087],{"class":82},[58,160322,793],{"class":75},[58,160324,89],{"class":82},[58,160326,469],{"class":75},[58,160328,1130],{"class":82},[58,160330,31430],{"class":75},[58,160332,160333,160335],{"class":60,"line":68},[58,160334,31943],{"class":82},[58,160336,159709],{"class":75},[175,160338,195,160339,160341],{},[55,160340,34060],{}," 的结束值不包含在内。",[14,160343,160345],{"id":160344},"_48-for循环求和","4.8 for循环求和",[48,160347,160349],{"className":31022,"code":160348,"language":31024,"meta":53,"style":53},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[55,160350,160351,160359,160363,160383,160391,160395],{"__ignoreMap":53},[58,160352,160353,160355,160357],{"class":60,"line":61},[58,160354,157739],{"class":75},[58,160356,383],{"class":92},[58,160358,47977],{"class":82},[58,160360,160361],{"class":60,"line":68},[58,160362,3046],{"emptyLinePlaceholder":720},[58,160364,160365,160367,160369,160371,160373,160375,160377,160379,160381],{"class":60,"line":79},[58,160366,3671],{"class":92},[58,160368,10083],{"class":75},[58,160370,26687],{"class":92},[58,160372,33087],{"class":82},[58,160374,793],{"class":75},[58,160376,89],{"class":82},[58,160378,469],{"class":75},[58,160380,1123],{"class":82},[58,160382,31430],{"class":75},[58,160384,160385,160387,160389],{"class":60,"line":105},[58,160386,159786],{"class":75},[58,160388,10122],{"class":92},[58,160390,159791],{"class":75},[58,160392,160393],{"class":60,"line":627},[58,160394,3046],{"emptyLinePlaceholder":720},[58,160396,160397,160399],{"class":60,"line":509},[58,160398,31059],{"class":82},[58,160400,159810],{"class":75},[175,160402,160403],{},"求偶数和：",[48,160405,160407],{"className":31022,"code":160406,"language":31024,"meta":53,"style":53},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[55,160408,160409,160417,160421,160441,160457,160466,160470],{"__ignoreMap":53},[58,160410,160411,160413,160415],{"class":60,"line":61},[58,160412,157739],{"class":75},[58,160414,383],{"class":92},[58,160416,47977],{"class":82},[58,160418,160419],{"class":60,"line":68},[58,160420,3046],{"emptyLinePlaceholder":720},[58,160422,160423,160425,160427,160429,160431,160433,160435,160437,160439],{"class":60,"line":79},[58,160424,3671],{"class":92},[58,160426,10083],{"class":75},[58,160428,26687],{"class":92},[58,160430,33087],{"class":82},[58,160432,793],{"class":75},[58,160434,89],{"class":82},[58,160436,469],{"class":75},[58,160438,1123],{"class":82},[58,160440,31430],{"class":75},[58,160442,160443,160445,160447,160449,160451,160453,160455],{"class":60,"line":105},[58,160444,3747],{"class":92},[58,160446,10083],{"class":75},[58,160448,1114],{"class":92},[58,160450,15399],{"class":82},[58,160452,102188],{"class":92},[58,160454,4739],{"class":82},[58,160456,4385],{"class":75},[58,160458,160459,160462,160464],{"class":60,"line":627},[58,160460,160461],{"class":75},"        total ",[58,160463,10122],{"class":92},[58,160465,159791],{"class":75},[58,160467,160468],{"class":60,"line":509},[58,160469,3046],{"emptyLinePlaceholder":720},[58,160471,160472,160474],{"class":60,"line":559},[58,160473,31059],{"class":82},[58,160475,159810],{"class":75},[175,160477,160478],{},"也可以：",[48,160480,160482],{"className":31022,"code":160481,"language":31024,"meta":53,"style":53},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[55,160483,160484,160492,160496,160520,160528,160532],{"__ignoreMap":53},[58,160485,160486,160488,160490],{"class":60,"line":61},[58,160487,157739],{"class":75},[58,160489,383],{"class":92},[58,160491,47977],{"class":82},[58,160493,160494],{"class":60,"line":68},[58,160495,3046],{"emptyLinePlaceholder":720},[58,160497,160498,160500,160502,160504,160506,160508,160510,160512,160514,160516,160518],{"class":60,"line":79},[58,160499,3671],{"class":92},[58,160501,10083],{"class":75},[58,160503,26687],{"class":92},[58,160505,33087],{"class":82},[58,160507,793],{"class":75},[58,160509,867],{"class":82},[58,160511,469],{"class":75},[58,160513,1123],{"class":82},[58,160515,469],{"class":75},[58,160517,867],{"class":82},[58,160519,31430],{"class":75},[58,160521,160522,160524,160526],{"class":60,"line":105},[58,160523,159786],{"class":75},[58,160525,10122],{"class":92},[58,160527,159791],{"class":75},[58,160529,160530],{"class":60,"line":627},[58,160531,3046],{"emptyLinePlaceholder":720},[58,160533,160534,160536],{"class":60,"line":509},[58,160535,31059],{"class":82},[58,160537,159810],{"class":75},[14,160539,160541],{"id":160540},"_49-循环嵌套","4.9 循环嵌套",[175,160543,160544],{},"嵌套循环就是循环里面再写循环。",[48,160546,160548],{"className":31022,"code":160547,"language":31024,"meta":53,"style":53},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[55,160549,160550,160570,160590],{"__ignoreMap":53},[58,160551,160552,160554,160556,160558,160560,160562,160564,160566,160568],{"class":60,"line":61},[58,160553,3671],{"class":92},[58,160555,10083],{"class":75},[58,160557,26687],{"class":92},[58,160559,33087],{"class":82},[58,160561,793],{"class":75},[58,160563,89],{"class":82},[58,160565,469],{"class":75},[58,160567,1079],{"class":82},[58,160569,31430],{"class":75},[58,160571,160572,160574,160576,160578,160580,160582,160584,160586,160588],{"class":60,"line":68},[58,160573,3847],{"class":92},[58,160575,10145],{"class":75},[58,160577,26687],{"class":92},[58,160579,33087],{"class":82},[58,160581,793],{"class":75},[58,160583,89],{"class":82},[58,160585,469],{"class":75},[58,160587,1079],{"class":82},[58,160589,31430],{"class":75},[58,160591,160592,160594,160596,160598,160601,160603,160605,160607,160610,160612,160614,160616,160618],{"class":60,"line":79},[58,160593,33095],{"class":82},[58,160595,793],{"class":75},[58,160597,843],{"class":92},[58,160599,160600],{"class":386},"\"i=",[58,160602,1681],{"class":82},[58,160604,1227],{"class":75},[58,160606,1730],{"class":82},[58,160608,160609],{"class":386},", j=",[58,160611,1681],{"class":82},[58,160613,1253],{"class":75},[58,160615,1730],{"class":82},[58,160617,1037],{"class":386},[58,160619,799],{"class":75},[175,160621,160622],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160624,160626],{"id":160625},"_410-九九乘法表","4.10 九九乘法表",[48,160628,160630],{"className":31022,"code":160629,"language":31024,"meta":53,"style":53},"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",[55,160631,160632,160652,160675,160727],{"__ignoreMap":53},[58,160633,160634,160636,160638,160640,160642,160644,160646,160648,160650],{"class":60,"line":61},[58,160635,3671],{"class":92},[58,160637,10083],{"class":75},[58,160639,26687],{"class":92},[58,160641,33087],{"class":82},[58,160643,793],{"class":75},[58,160645,89],{"class":82},[58,160647,469],{"class":75},[58,160649,1232],{"class":82},[58,160651,31430],{"class":75},[58,160653,160654,160656,160658,160660,160662,160664,160666,160669,160671,160673],{"class":60,"line":68},[58,160655,3847],{"class":92},[58,160657,10145],{"class":75},[58,160659,26687],{"class":92},[58,160661,33087],{"class":82},[58,160663,793],{"class":75},[58,160665,89],{"class":82},[58,160667,160668],{"class":75},", i ",[58,160670,1267],{"class":92},[58,160672,25762],{"class":82},[58,160674,31430],{"class":75},[58,160676,160677,160679,160681,160683,160685,160687,160689,160691,160693,160695,160697,160699,160701,160703,160705,160707,160709,160711,160713,160715,160717,160719,160721,160723,160725],{"class":60,"line":79},[58,160678,33095],{"class":82},[58,160680,793],{"class":75},[58,160682,843],{"class":92},[58,160684,1037],{"class":386},[58,160686,1681],{"class":82},[58,160688,1253],{"class":75},[58,160690,1730],{"class":82},[58,160692,1241],{"class":386},[58,160694,1681],{"class":82},[58,160696,1227],{"class":75},[58,160698,1730],{"class":82},[58,160700,383],{"class":386},[58,160702,1681],{"class":82},[58,160704,100777],{"class":75},[58,160706,1241],{"class":92},[58,160708,4056],{"class":75},[58,160710,1730],{"class":82},[58,160712,1037],{"class":386},[58,160714,469],{"class":75},[58,160716,46445],{"class":5862},[58,160718,383],{"class":92},[58,160720,1037],{"class":386},[58,160722,1884],{"class":82},[58,160724,1037],{"class":386},[58,160726,799],{"class":75},[58,160728,160729,160731],{"class":60,"line":105},[58,160730,31943],{"class":82},[58,160732,2622],{"class":75},[175,160734,160735],{},"关键点：",[19,160737,160738,160744,160750,160756],{},[22,160739,160740,160741,160743],{},"外层 ",[55,160742,1227],{}," 控制行。",[22,160745,160746,160747,160749],{},"内层 ",[55,160748,1253],{}," 控制列。",[22,160751,160752,160753,160755],{},"每行结束后用 ",[55,160754,146951],{}," 换行。",[22,160757,160758,160761],{},[55,160759,160760],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,160763,160765],{"id":160764},"_411-循环else","4.11 循环else",[175,160767,160768,160769,160771,160772,160774,160775,160777],{},"Python 的循环可以带 ",[55,160770,2348],{},"。当循环正常结束时执行 ",[55,160773,2348],{},"，如果被 ",[55,160776,2699],{}," 打断，则不执行。",[48,160779,160781],{"className":31022,"code":160780,"language":31024,"meta":53,"style":53},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[55,160782,160783,160803,160815,160826,160830,160836],{"__ignoreMap":53},[58,160784,160785,160787,160789,160791,160793,160795,160797,160799,160801],{"class":60,"line":61},[58,160786,3671],{"class":92},[58,160788,10083],{"class":75},[58,160790,26687],{"class":92},[58,160792,33087],{"class":82},[58,160794,793],{"class":75},[58,160796,89],{"class":82},[58,160798,469],{"class":75},[58,160800,1130],{"class":82},[58,160802,31430],{"class":75},[58,160804,160805,160807,160809,160811,160813],{"class":60,"line":68},[58,160806,3747],{"class":92},[58,160808,10083],{"class":75},[58,160810,3595],{"class":92},[58,160812,2684],{"class":82},[58,160814,4385],{"class":75},[58,160816,160817,160819,160821,160824],{"class":60,"line":79},[58,160818,33095],{"class":82},[58,160820,793],{"class":75},[58,160822,160823],{"class":386},"\"找到了\"",[58,160825,799],{"class":75},[58,160827,160828],{"class":60,"line":105},[58,160829,32271],{"class":92},[58,160831,160832,160834],{"class":60,"line":627},[58,160833,2348],{"class":92},[58,160835,4385],{"class":75},[58,160837,160838,160840,160842,160845],{"class":60,"line":509},[58,160839,31943],{"class":82},[58,160841,793],{"class":75},[58,160843,160844],{"class":386},"\"没找到\"",[58,160846,799],{"class":75},[175,160848,160849],{},"常用于搜索。",[48,160851,160853],{"className":31022,"code":160852,"language":31024,"meta":53,"style":53},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[55,160854,160855,160876,160885,160889,160901,160912,160922,160926,160932],{"__ignoreMap":53},[58,160856,160857,160860,160862,160864,160866,160868,160870,160872,160874],{"class":60,"line":61},[58,160858,160859],{"class":75},"names ",[58,160861,383],{"class":92},[58,160863,52864],{"class":75},[58,160865,150367],{"class":386},[58,160867,469],{"class":75},[58,160869,151415],{"class":386},[58,160871,469],{"class":75},[58,160873,160210],{"class":386},[58,160875,33890],{"class":75},[58,160877,160878,160880,160882],{"class":60,"line":68},[58,160879,112207],{"class":75},[58,160881,383],{"class":92},[58,160883,160884],{"class":386}," \"小李\"\n",[58,160886,160887],{"class":60,"line":79},[58,160888,3046],{"emptyLinePlaceholder":720},[58,160890,160891,160893,160896,160898],{"class":60,"line":105},[58,160892,3671],{"class":92},[58,160894,160895],{"class":75}," name ",[58,160897,26687],{"class":92},[58,160899,160900],{"class":75}," names:\n",[58,160902,160903,160905,160907,160909],{"class":60,"line":627},[58,160904,3747],{"class":92},[58,160906,160895],{"class":75},[58,160908,3595],{"class":92},[58,160910,160911],{"class":75}," target:\n",[58,160913,160914,160916,160918,160920],{"class":60,"line":509},[58,160915,33095],{"class":82},[58,160917,793],{"class":75},[58,160919,160823],{"class":386},[58,160921,799],{"class":75},[58,160923,160924],{"class":60,"line":559},[58,160925,32271],{"class":92},[58,160927,160928,160930],{"class":60,"line":654},[58,160929,2348],{"class":92},[58,160931,4385],{"class":75},[58,160933,160934,160936,160938,160940],{"class":60,"line":671},[58,160935,31943],{"class":82},[58,160937,793],{"class":75},[58,160939,160844],{"class":386},[58,160941,799],{"class":75},[14,160943,160945],{"id":160944},"_412-小案例登录重试","4.12 小案例：登录重试",[175,160947,123921],{},[19,160949,160950,160953,160956],{},[22,160951,160952],{},"用户最多输入 3 次密码。",[22,160954,160955],{},"密码正确则登录成功。",[22,160957,160958],{},"3 次都错误则锁定账号。",[175,160960,10680],{},[48,160962,160964],{"className":31022,"code":160963,"language":31024,"meta":53,"style":53},"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",[55,160965,160966,160976,160980,160996,161012,161016,161028,161039,161043,161049,161074,161080],{"__ignoreMap":53},[58,160967,160968,160971,160973],{"class":60,"line":61},[58,160969,160970],{"class":75},"password ",[58,160972,383],{"class":92},[58,160974,160975],{"class":386}," \"123456\"\n",[58,160977,160978],{"class":60,"line":68},[58,160979,3046],{"emptyLinePlaceholder":720},[58,160981,160982,160984,160986,160988,160990,160992,160994],{"class":60,"line":79},[58,160983,3671],{"class":92},[58,160985,10083],{"class":75},[58,160987,26687],{"class":92},[58,160989,33087],{"class":82},[58,160991,793],{"class":75},[58,160993,861],{"class":82},[58,160995,31430],{"class":75},[58,160997,160998,161001,161003,161005,161007,161010],{"class":60,"line":105},[58,160999,161000],{"class":75},"    user_password ",[58,161002,383],{"class":92},[58,161004,61239],{"class":82},[58,161006,793],{"class":75},[58,161008,161009],{"class":386},"\"请输入密码:\"",[58,161011,799],{"class":75},[58,161013,161014],{"class":60,"line":627},[58,161015,3046],{"emptyLinePlaceholder":720},[58,161017,161018,161020,161023,161025],{"class":60,"line":509},[58,161019,3747],{"class":92},[58,161021,161022],{"class":75}," user_password ",[58,161024,3595],{"class":92},[58,161026,161027],{"class":75}," password:\n",[58,161029,161030,161032,161034,161037],{"class":60,"line":559},[58,161031,33095],{"class":82},[58,161033,793],{"class":75},[58,161035,161036],{"class":386},"\"登录成功\"",[58,161038,799],{"class":75},[58,161040,161041],{"class":60,"line":654},[58,161042,32271],{"class":92},[58,161044,161045,161047],{"class":60,"line":671},[58,161046,158501],{"class":92},[58,161048,4385],{"class":75},[58,161050,161051,161053,161055,161057,161060,161063,161065,161067,161069,161072],{"class":60,"line":677},[58,161052,33095],{"class":82},[58,161054,793],{"class":75},[58,161056,843],{"class":92},[58,161058,161059],{"class":386},"\"密码错误，还剩",[58,161061,161062],{"class":82},"{2",[58,161064,52909],{"class":92},[58,161066,3678],{"class":75},[58,161068,1730],{"class":82},[58,161070,161071],{"class":386},"次机会\"",[58,161073,799],{"class":75},[58,161075,161076,161078],{"class":60,"line":2260},[58,161077,2348],{"class":92},[58,161079,4385],{"class":75},[58,161081,161082,161084,161086,161089],{"class":60,"line":694},[58,161083,31943],{"class":82},[58,161085,793],{"class":75},[58,161087,161088],{"class":386},"\"账号已锁定\"",[58,161090,799],{"class":75},[14,161092,161094],{"id":161093},"_413-小案例菜单程序","4.13 小案例：菜单程序",[48,161096,161098],{"className":31022,"code":161097,"language":31024,"meta":53,"style":53},"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",[55,161099,161100,161108,161119,161130,161141,161152,161163,161167,161182,161186,161198,161209,161221,161232,161244,161255,161267,161277,161281,161287],{"__ignoreMap":53},[58,161101,161102,161104,161106],{"class":60,"line":61},[58,161103,109292],{"class":92},[58,161105,95921],{"class":82},[58,161107,4385],{"class":75},[58,161109,161110,161112,161114,161117],{"class":60,"line":68},[58,161111,31943],{"class":82},[58,161113,793],{"class":75},[58,161115,161116],{"class":386},"\"====== 菜单 ======\"",[58,161118,799],{"class":75},[58,161120,161121,161123,161125,161128],{"class":60,"line":79},[58,161122,31943],{"class":82},[58,161124,793],{"class":75},[58,161126,161127],{"class":386},"\"1. 查询余额\"",[58,161129,799],{"class":75},[58,161131,161132,161134,161136,161139],{"class":60,"line":105},[58,161133,31943],{"class":82},[58,161135,793],{"class":75},[58,161137,161138],{"class":386},"\"2. 存款\"",[58,161140,799],{"class":75},[58,161142,161143,161145,161147,161150],{"class":60,"line":627},[58,161144,31943],{"class":82},[58,161146,793],{"class":75},[58,161148,161149],{"class":386},"\"3. 取款\"",[58,161151,799],{"class":75},[58,161153,161154,161156,161158,161161],{"class":60,"line":509},[58,161155,31943],{"class":82},[58,161157,793],{"class":75},[58,161159,161160],{"class":386},"\"0. 退出\"",[58,161162,799],{"class":75},[58,161164,161165],{"class":60,"line":559},[58,161166,3046],{"emptyLinePlaceholder":720},[58,161168,161169,161172,161174,161176,161178,161180],{"class":60,"line":654},[58,161170,161171],{"class":75},"    choice ",[58,161173,383],{"class":92},[58,161175,61239],{"class":82},[58,161177,793],{"class":75},[58,161179,153552],{"class":386},[58,161181,799],{"class":75},[58,161183,161184],{"class":60,"line":671},[58,161185,3046],{"emptyLinePlaceholder":720},[58,161187,161188,161190,161192,161194,161196],{"class":60,"line":677},[58,161189,3747],{"class":92},[58,161191,153565],{"class":75},[58,161193,3595],{"class":92},[58,161195,153570],{"class":386},[58,161197,4385],{"class":75},[58,161199,161200,161202,161204,161207],{"class":60,"line":2260},[58,161201,33095],{"class":82},[58,161203,793],{"class":75},[58,161205,161206],{"class":386},"\"余额为1000元\"",[58,161208,799],{"class":75},[58,161210,161211,161213,161215,161217,161219],{"class":60,"line":694},[58,161212,39937],{"class":92},[58,161214,153565],{"class":75},[58,161216,3595],{"class":92},[58,161218,153589],{"class":386},[58,161220,4385],{"class":75},[58,161222,161223,161225,161227,161230],{"class":60,"line":2270},[58,161224,33095],{"class":82},[58,161226,793],{"class":75},[58,161228,161229],{"class":386},"\"存款功能\"",[58,161231,799],{"class":75},[58,161233,161234,161236,161238,161240,161242],{"class":60,"line":2275},[58,161235,39937],{"class":92},[58,161237,153565],{"class":75},[58,161239,3595],{"class":92},[58,161241,153607],{"class":386},[58,161243,4385],{"class":75},[58,161245,161246,161248,161250,161253],{"class":60,"line":2289},[58,161247,33095],{"class":82},[58,161249,793],{"class":75},[58,161251,161252],{"class":386},"\"取款功能\"",[58,161254,799],{"class":75},[58,161256,161257,161259,161261,161263,161265],{"class":60,"line":2294},[58,161258,39937],{"class":92},[58,161260,153565],{"class":75},[58,161262,3595],{"class":92},[58,161264,153661],{"class":386},[58,161266,4385],{"class":75},[58,161268,161269,161271,161273,161275],{"class":60,"line":2300},[58,161270,33095],{"class":82},[58,161272,793],{"class":75},[58,161274,153672],{"class":386},[58,161276,799],{"class":75},[58,161278,161279],{"class":60,"line":2321},[58,161280,32271],{"class":92},[58,161282,161283,161285],{"class":60,"line":2326},[58,161284,158501],{"class":92},[58,161286,4385],{"class":75},[58,161288,161289,161291,161293,161295],{"class":60,"line":2340},[58,161290,33095],{"class":82},[58,161292,793],{"class":75},[58,161294,153693],{"class":386},[58,161296,799],{"class":75},[175,161298,161299,161300,161302,161303,29029],{},"菜单类程序通常使用 ",[55,161301,160001],{},"，用户选择退出时 ",[55,161304,2699],{},[14,161306,161308],{"id":161307},"_414-易错点","4.14 易错点",[19,161310,161311,161316,161322,161330,161336],{},[22,161312,161313,161315],{},[55,161314,109292],{}," 循环必须更新控制变量。",[22,161317,161318,161321],{},[55,161319,161320],{},"range(1, 10)"," 不包含 10。",[22,161323,161324,161326,161327,161329],{},[55,161325,2699],{}," 结束整个循环，",[55,161328,155151],{}," 只跳过本轮。",[22,161331,161332,161333,161335],{},"嵌套循环中，",[55,161334,2699],{}," 只跳出当前所在的一层循环。",[22,161337,161338],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,161340,161342],{"id":161341},"_415-本章练习","4.15 本章练习",[19,161344,161345,161348,161351,161354,161357],{},[22,161346,161347],{},"输出 1 到 100。",[22,161349,161350],{},"计算 1 到 100 的偶数和。",[22,161352,161353],{},"输出 100 以内能被 3 和 5 同时整除的数。",[22,161355,161356],{},"编写猜数字游戏，限制最多猜 7 次。",[22,161358,161359],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[702,161361,161362],{},"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":53,"searchDepth":68,"depth":68,"links":161364},[161365,161366,161367,161368,161369,161373,161374,161375,161376,161377,161378,161379,161380,161381,161382],{"id":159621,"depth":68,"text":159622},{"id":159651,"depth":68,"text":159652},{"id":159740,"depth":68,"text":159741},{"id":159834,"depth":68,"text":159835},{"id":160008,"depth":68,"text":160009,"children":161370},[161371,161372],{"id":160012,"depth":79,"text":160013},{"id":160076,"depth":79,"text":160077},{"id":160140,"depth":68,"text":160141},{"id":160235,"depth":68,"text":160236},{"id":160344,"depth":68,"text":160345},{"id":160540,"depth":68,"text":160541},{"id":160625,"depth":68,"text":160626},{"id":160764,"depth":68,"text":160765},{"id":160944,"depth":68,"text":160945},{"id":161093,"depth":68,"text":161094},{"id":161307,"depth":68,"text":161308},{"id":161341,"depth":68,"text":161342},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159613,"description":717},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161389,"title":161390,"body":161391,"description":717,"extension":718,"meta":163396,"navigation":720,"path":163397,"seo":163398,"stem":163399,"__hash__":163400},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161392,"toc":163376},[161393,161396,161400,161403,161406,161420,161423,161437,161441,161443,161462,161464,161511,161513,161527,161531,161605,161608,161612,161615,161674,161682,161685,161738,161741,161745,161750,161805,161813,161863,161867,161872,161880,161979,161985,161989,161994,161997,162008,162049,162062,162066,162069,162105,162108,162121,162124,162184,162188,162192,162195,162246,162250,162253,162300,162306,162372,162375,162379,162382,162498,162501,162505,162508,162614,162618,162621,162659,162662,162704,162707,162767,162770,162774,163238,163241,163245,163272,163278,163339,163343,163373],[10,161394,161390],{"id":161395},"_5-函数基础",[14,161397,161399],{"id":161398},"_51-为什么需要函数","5.1 为什么需要函数",[175,161401,161402],{},"函数用于封装一段可以重复使用的代码。",[175,161404,161405],{},"不使用函数的问题：",[19,161407,161408,161411,161414,161417],{},[22,161409,161410],{},"重复代码多。",[22,161412,161413],{},"修改逻辑时容易漏改。",[22,161415,161416],{},"主流程不清晰。",[22,161418,161419],{},"程序越写越长，难以维护。",[175,161421,161422],{},"使用函数后的好处：",[19,161424,161425,161428,161431,161434],{},[22,161426,161427],{},"提高复用性。",[22,161429,161430],{},"提高可读性。",[22,161432,161433],{},"便于调试。",[22,161435,161436],{},"便于分工。",[14,161438,161440],{"id":161439},"_52-函数定义","5.2 函数定义",[175,161442,5827],{},[48,161444,161446],{"className":31022,"code":161445,"language":31024,"meta":53,"style":53},"def 函数名():\n    函数体\n",[55,161447,161448,161457],{"__ignoreMap":53},[58,161449,161450,161452,161455],{"class":60,"line":61},[58,161451,32591],{"class":92},[58,161453,161454],{"class":379}," 函数名",[58,161456,32597],{"class":75},[58,161458,161459],{"class":60,"line":68},[58,161460,161461],{"class":75},"    函数体\n",[175,161463,15779],{},[48,161465,161467],{"className":31022,"code":161466,"language":31024,"meta":53,"style":53},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[55,161468,161469,161478,161488,161498,161502,161506],{"__ignoreMap":53},[58,161470,161471,161473,161476],{"class":60,"line":61},[58,161472,32591],{"class":92},[58,161474,161475],{"class":379}," say_hello",[58,161477,32597],{"class":75},[58,161479,161480,161482,161484,161486],{"class":60,"line":68},[58,161481,31943],{"class":82},[58,161483,793],{"class":75},[58,161485,6490],{"class":386},[58,161487,799],{"class":75},[58,161489,161490,161492,161494,161496],{"class":60,"line":79},[58,161491,31943],{"class":82},[58,161493,793],{"class":75},[58,161495,147118],{"class":386},[58,161497,799],{"class":75},[58,161499,161500],{"class":60,"line":105},[58,161501,3046],{"emptyLinePlaceholder":720},[58,161503,161504],{"class":60,"line":627},[58,161505,3046],{"emptyLinePlaceholder":720},[58,161507,161508],{"class":60,"line":509},[58,161509,161510],{"class":75},"say_hello()\n",[175,161512,195],{},[19,161514,161515,161518,161521,161524],{},[22,161516,161517],{},"函数必须先定义，再调用。",[22,161519,161520],{},"函数名遵循变量命名规则。",[22,161522,161523],{},"函数体需要缩进。",[22,161525,161526],{},"函数不调用就不会执行。",[14,161528,161530],{"id":161529},"_53-函数调用","5.3 函数调用",[48,161532,161534],{"className":31022,"code":161533,"language":31024,"meta":53,"style":53},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[55,161535,161536,161545,161556,161567,161578,161588,161592,161596,161601],{"__ignoreMap":53},[58,161537,161538,161540,161543],{"class":60,"line":61},[58,161539,32591],{"class":92},[58,161541,161542],{"class":379}," print_menu",[58,161544,32597],{"class":75},[58,161546,161547,161549,161551,161554],{"class":60,"line":68},[58,161548,31943],{"class":82},[58,161550,793],{"class":75},[58,161552,161553],{"class":386},"\"1. 查询\"",[58,161555,799],{"class":75},[58,161557,161558,161560,161562,161565],{"class":60,"line":79},[58,161559,31943],{"class":82},[58,161561,793],{"class":75},[58,161563,161564],{"class":386},"\"2. 添加\"",[58,161566,799],{"class":75},[58,161568,161569,161571,161573,161576],{"class":60,"line":105},[58,161570,31943],{"class":82},[58,161572,793],{"class":75},[58,161574,161575],{"class":386},"\"3. 删除\"",[58,161577,799],{"class":75},[58,161579,161580,161582,161584,161586],{"class":60,"line":627},[58,161581,31943],{"class":82},[58,161583,793],{"class":75},[58,161585,161160],{"class":386},[58,161587,799],{"class":75},[58,161589,161590],{"class":60,"line":509},[58,161591,3046],{"emptyLinePlaceholder":720},[58,161593,161594],{"class":60,"line":559},[58,161595,3046],{"emptyLinePlaceholder":720},[58,161597,161598],{"class":60,"line":654},[58,161599,161600],{"class":75},"print_menu()\n",[58,161602,161603],{"class":60,"line":671},[58,161604,161600],{"class":75},[175,161606,161607],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161609,161611],{"id":161610},"_54-参数","5.4 参数",[175,161613,161614],{},"参数用于向函数传递数据。",[48,161616,161618],{"className":31022,"code":161617,"language":31024,"meta":53,"style":53},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[55,161619,161620,161629,161649,161653,161657,161666],{"__ignoreMap":53},[58,161621,161622,161624,161626],{"class":60,"line":61},[58,161623,32591],{"class":92},[58,161625,161475],{"class":379},[58,161627,161628],{"class":75},"(name):\n",[58,161630,161631,161633,161635,161637,161639,161641,161643,161645,161647],{"class":60,"line":68},[58,161632,31943],{"class":82},[58,161634,793],{"class":75},[58,161636,843],{"class":92},[58,161638,157533],{"class":386},[58,161640,1681],{"class":82},[58,161642,80440],{"class":75},[58,161644,1730],{"class":82},[58,161646,1037],{"class":386},[58,161648,799],{"class":75},[58,161650,161651],{"class":60,"line":79},[58,161652,3046],{"emptyLinePlaceholder":720},[58,161654,161655],{"class":60,"line":105},[58,161656,3046],{"emptyLinePlaceholder":720},[58,161658,161659,161662,161664],{"class":60,"line":627},[58,161660,161661],{"class":75},"say_hello(",[58,161663,150367],{"class":386},[58,161665,799],{"class":75},[58,161667,161668,161670,161672],{"class":60,"line":509},[58,161669,161661],{"class":75},[58,161671,151415],{"class":386},[58,161673,799],{"class":75},[175,161675,161676,161678,161679,161681],{},[55,161677,80440],{}," 是形参，",[55,161680,150367],{}," 是实参。",[175,161683,161684],{},"多个参数：",[48,161686,161688],{"className":31022,"code":161687,"language":31024,"meta":53,"style":53},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[55,161689,161690,161698,161711,161717,161721,161725],{"__ignoreMap":53},[58,161691,161692,161694,161696],{"class":60,"line":61},[58,161693,32591],{"class":92},[58,161695,5855],{"class":379},[58,161697,151572],{"class":75},[58,161699,161700,161703,161705,161707,161709],{"class":60,"line":68},[58,161701,161702],{"class":75},"    result ",[58,161704,383],{"class":92},[58,161706,11514],{"class":75},[58,161708,1267],{"class":92},[58,161710,151583],{"class":75},[58,161712,161713,161715],{"class":60,"line":79},[58,161714,31943],{"class":82},[58,161716,77216],{"class":75},[58,161718,161719],{"class":60,"line":105},[58,161720,3046],{"emptyLinePlaceholder":720},[58,161722,161723],{"class":60,"line":627},[58,161724,3046],{"emptyLinePlaceholder":720},[58,161726,161727,161730,161732,161734,161736],{"class":60,"line":509},[58,161728,161729],{"class":75},"add(",[58,161731,1232],{"class":82},[58,161733,469],{"class":75},[58,161735,1486],{"class":82},[58,161737,799],{"class":75},[175,161739,161740],{},"调用时参数数量必须匹配。",[14,161742,161744],{"id":161743},"_55-返回值","5.5 返回值",[175,161746,161747,161749],{},[55,161748,17689],{}," 用于把函数内部的结果返回给调用者。",[48,161751,161753],{"className":31022,"code":161752,"language":31024,"meta":53,"style":53},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[55,161754,161755,161763,161773,161777,161781,161799],{"__ignoreMap":53},[58,161756,161757,161759,161761],{"class":60,"line":61},[58,161758,32591],{"class":92},[58,161760,5855],{"class":379},[58,161762,151572],{"class":75},[58,161764,161765,161767,161769,161771],{"class":60,"line":68},[58,161766,4736],{"class":92},[58,161768,11514],{"class":75},[58,161770,1267],{"class":92},[58,161772,151583],{"class":75},[58,161774,161775],{"class":60,"line":79},[58,161776,3046],{"emptyLinePlaceholder":720},[58,161778,161779],{"class":60,"line":105},[58,161780,3046],{"emptyLinePlaceholder":720},[58,161782,161783,161786,161788,161791,161793,161795,161797],{"class":60,"line":627},[58,161784,161785],{"class":75},"result ",[58,161787,383],{"class":92},[58,161789,161790],{"class":75}," add(",[58,161792,1232],{"class":82},[58,161794,469],{"class":75},[58,161796,1486],{"class":82},[58,161798,799],{"class":75},[58,161800,161801,161803],{"class":60,"line":509},[58,161802,31059],{"class":82},[58,161804,77216],{"class":75},[175,161806,161807,161808,161810,161811,29029],{},"如果函数没有写 ",[55,161809,17689],{},"，默认返回 ",[55,161812,96315],{},[48,161814,161816],{"className":31022,"code":161815,"language":31024,"meta":53,"style":53},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[55,161817,161818,161826,161836,161840,161844,161853],{"__ignoreMap":53},[58,161819,161820,161822,161824],{"class":60,"line":61},[58,161821,32591],{"class":92},[58,161823,161475],{"class":379},[58,161825,32597],{"class":75},[58,161827,161828,161830,161832,161834],{"class":60,"line":68},[58,161829,31943],{"class":82},[58,161831,793],{"class":75},[58,161833,6490],{"class":386},[58,161835,799],{"class":75},[58,161837,161838],{"class":60,"line":79},[58,161839,3046],{"emptyLinePlaceholder":720},[58,161841,161842],{"class":60,"line":105},[58,161843,3046],{"emptyLinePlaceholder":720},[58,161845,161846,161848,161850],{"class":60,"line":627},[58,161847,161785],{"class":75},[58,161849,383],{"class":92},[58,161851,161852],{"class":75}," say_hello()\n",[58,161854,161855,161857,161860],{"class":60,"line":509},[58,161856,31059],{"class":82},[58,161858,161859],{"class":75},"(result)  ",[58,161861,161862],{"class":64},"# None\n",[14,161864,161866],{"id":161865},"_56-return的作用","5.6 return的作用",[175,161868,161869,161871],{},[55,161870,17689],{}," 有两个作用：",[19,161873,161874,161877],{},[22,161875,161876],{},"返回结果。",[22,161878,161879],{},"结束函数。",[48,161881,161883],{"className":31022,"code":161882,"language":31024,"meta":53,"style":53},"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",[55,161884,161885,161895,161907,161914,161918,161930,161937,161941,161948,161952,161956,161967],{"__ignoreMap":53},[58,161886,161887,161889,161892],{"class":60,"line":61},[58,161888,32591],{"class":92},[58,161890,161891],{"class":379}," check_age",[58,161893,161894],{"class":75},"(age):\n",[58,161896,161897,161899,161901,161903,161905],{"class":60,"line":68},[58,161898,3747],{"class":92},[58,161900,16350],{"class":75},[58,161902,373],{"class":92},[58,161904,4739],{"class":82},[58,161906,4385],{"class":75},[58,161908,161909,161911],{"class":60,"line":79},[58,161910,15396],{"class":92},[58,161912,161913],{"class":386}," \"年龄不合法\"\n",[58,161915,161916],{"class":60,"line":105},[58,161917,3046],{"emptyLinePlaceholder":720},[58,161919,161920,161922,161924,161926,161928],{"class":60,"line":627},[58,161921,3747],{"class":92},[58,161923,16350],{"class":75},[58,161925,2357],{"class":92},[58,161927,156764],{"class":82},[58,161929,4385],{"class":75},[58,161931,161932,161934],{"class":60,"line":509},[58,161933,15396],{"class":92},[58,161935,161936],{"class":386}," \"成年人\"\n",[58,161938,161939],{"class":60,"line":559},[58,161940,3046],{"emptyLinePlaceholder":720},[58,161942,161943,161945],{"class":60,"line":654},[58,161944,4736],{"class":92},[58,161946,161947],{"class":386}," \"未成年人\"\n",[58,161949,161950],{"class":60,"line":671},[58,161951,3046],{"emptyLinePlaceholder":720},[58,161953,161954],{"class":60,"line":677},[58,161955,3046],{"emptyLinePlaceholder":720},[58,161957,161958,161960,161963,161965],{"class":60,"line":2260},[58,161959,31059],{"class":82},[58,161961,161962],{"class":75},"(check_age(",[58,161964,1486],{"class":82},[58,161966,31141],{"class":75},[58,161968,161969,161971,161973,161975,161977],{"class":60,"line":694},[58,161970,31059],{"class":82},[58,161972,161962],{"class":75},[58,161974,1318],{"class":92},[58,161976,89],{"class":82},[58,161978,31141],{"class":75},[175,161980,161981,161982,161984],{},"函数执行到 ",[55,161983,17689],{}," 后，后面的代码不会继续执行。",[14,161986,161988],{"id":161987},"_57-none","5.7 None",[175,161990,161991,161993],{},[55,161992,96315],{}," 表示空值或没有结果。",[175,161995,161996],{},"常见使用场景：",[19,161998,161999,162002,162005],{},[22,162000,162001],{},"函数没有返回值。",[22,162003,162004],{},"变量暂时没有具体值。",[22,162006,162007],{},"表示查询不到结果。",[48,162009,162011],{"className":31022,"code":162010,"language":31024,"meta":53,"style":53},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[55,162012,162013,162021,162025,162038],{"__ignoreMap":53},[58,162014,162015,162017,162019],{"class":60,"line":61},[58,162016,161785],{"class":75},[58,162018,383],{"class":92},[58,162020,152651],{"class":82},[58,162022,162023],{"class":60,"line":68},[58,162024,3046],{"emptyLinePlaceholder":720},[58,162026,162027,162029,162032,162034,162036],{"class":60,"line":79},[58,162028,2180],{"class":92},[58,162030,162031],{"class":75}," result ",[58,162033,39571],{"class":92},[58,162035,39577],{"class":82},[58,162037,4385],{"class":75},[58,162039,162040,162042,162044,162047],{"class":60,"line":105},[58,162041,31943],{"class":82},[58,162043,793],{"class":75},[58,162045,162046],{"class":386},"\"没有数据\"",[58,162048,799],{"class":75},[175,162050,162051,162052,162054,162055,162058,162059,29029],{},"判断 ",[55,162053,96315],{}," 推荐使用 ",[55,162056,162057],{},"is None","，不要写成 ",[55,162060,162061],{},"== None",[14,162063,162065],{"id":162064},"_58-函数文档字符串","5.8 函数文档字符串",[175,162067,162068],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[48,162070,162072],{"className":31022,"code":162071,"language":31024,"meta":53,"style":53},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[55,162073,162074,162084,162089],{"__ignoreMap":53},[58,162075,162076,162078,162081],{"class":60,"line":61},[58,162077,32591],{"class":92},[58,162079,162080],{"class":379}," calculate_bmi",[58,162082,162083],{"class":75},"(weight, height):\n",[58,162085,162086],{"class":60,"line":68},[58,162087,162088],{"class":386},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[58,162090,162091,162093,162096,162098,162101,162103],{"class":60,"line":79},[58,162092,4736],{"class":92},[58,162094,162095],{"class":75}," weight ",[58,162097,1370],{"class":92},[58,162099,162100],{"class":75}," height ",[58,162102,11306],{"class":92},[58,162104,48367],{"class":82},[175,162106,162107],{},"查看说明：",[48,162109,162111],{"className":31022,"code":162110,"language":31024,"meta":53,"style":53},"help(calculate_bmi)\n",[55,162112,162113],{"__ignoreMap":53},[58,162114,162115,162118],{"class":60,"line":61},[58,162116,162117],{"class":82},"help",[58,162119,162120],{"class":75},"(calculate_bmi)\n",[175,162122,162123],{},"较完整的写法：",[48,162125,162127],{"className":31022,"code":162126,"language":31024,"meta":53,"style":53},"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",[55,162128,162129,162137,162142,162147,162151,162156,162161,162166,162170],{"__ignoreMap":53},[58,162130,162131,162133,162135],{"class":60,"line":61},[58,162132,32591],{"class":92},[58,162134,162080],{"class":379},[58,162136,162083],{"class":75},[58,162138,162139],{"class":60,"line":68},[58,162140,162141],{"class":386},"    \"\"\"\n",[58,162143,162144],{"class":60,"line":79},[58,162145,162146],{"class":386},"    计算BMI。\n",[58,162148,162149],{"class":60,"line":105},[58,162150,3046],{"emptyLinePlaceholder":720},[58,162152,162153],{"class":60,"line":627},[58,162154,162155],{"class":386},"    :param weight: 体重，单位kg\n",[58,162157,162158],{"class":60,"line":509},[58,162159,162160],{"class":386},"    :param height: 身高，单位m\n",[58,162162,162163],{"class":60,"line":559},[58,162164,162165],{"class":386},"    :return: BMI数值\n",[58,162167,162168],{"class":60,"line":654},[58,162169,162141],{"class":386},[58,162171,162172,162174,162176,162178,162180,162182],{"class":60,"line":671},[58,162173,4736],{"class":92},[58,162175,162095],{"class":75},[58,162177,1370],{"class":92},[58,162179,162100],{"class":75},[58,162181,11306],{"class":92},[58,162183,48367],{"class":82},[14,162185,162187],{"id":162186},"_59-变量作用域","5.9 变量作用域",[114,162189,162191],{"id":162190},"_591-局部变量","5.9.1 局部变量",[175,162193,162194],{},"在函数内部定义的变量，只能在函数内部使用。",[48,162196,162198],{"className":31022,"code":162197,"language":31024,"meta":53,"style":53},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[55,162199,162200,162209,162217,162223,162227,162231,162236],{"__ignoreMap":53},[58,162201,162202,162204,162207],{"class":60,"line":61},[58,162203,32591],{"class":92},[58,162205,162206],{"class":379}," test",[58,162208,32597],{"class":75},[58,162210,162211,162213,162215],{"class":60,"line":68},[58,162212,46237],{"class":75},[58,162214,383],{"class":92},[58,162216,59062],{"class":82},[58,162218,162219,162221],{"class":60,"line":79},[58,162220,31943],{"class":82},[58,162222,806],{"class":75},[58,162224,162225],{"class":60,"line":105},[58,162226,3046],{"emptyLinePlaceholder":720},[58,162228,162229],{"class":60,"line":627},[58,162230,3046],{"emptyLinePlaceholder":720},[58,162232,162233],{"class":60,"line":509},[58,162234,162235],{"class":75},"test()\n",[58,162237,162238,162240,162243],{"class":60,"line":559},[58,162239,31059],{"class":82},[58,162241,162242],{"class":75},"(num)  ",[58,162244,162245],{"class":64},"# 报错\n",[114,162247,162249],{"id":162248},"_592-全局变量","5.9.2 全局变量",[175,162251,162252],{},"在函数外部定义的变量，可以在函数内部读取。",[48,162254,162256],{"className":31022,"code":162255,"language":31024,"meta":53,"style":53},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[55,162257,162258,162266,162270,162274,162282,162288,162292,162296],{"__ignoreMap":53},[58,162259,162260,162262,162264],{"class":60,"line":61},[58,162261,147015],{"class":75},[58,162263,383],{"class":92},[58,162265,149832],{"class":386},[58,162267,162268],{"class":60,"line":68},[58,162269,3046],{"emptyLinePlaceholder":720},[58,162271,162272],{"class":60,"line":79},[58,162273,3046],{"emptyLinePlaceholder":720},[58,162275,162276,162278,162280],{"class":60,"line":105},[58,162277,32591],{"class":92},[58,162279,161475],{"class":379},[58,162281,32597],{"class":75},[58,162283,162284,162286],{"class":60,"line":627},[58,162285,31943],{"class":82},[58,162287,151139],{"class":75},[58,162289,162290],{"class":60,"line":509},[58,162291,3046],{"emptyLinePlaceholder":720},[58,162293,162294],{"class":60,"line":559},[58,162295,3046],{"emptyLinePlaceholder":720},[58,162297,162298],{"class":60,"line":654},[58,162299,161510],{"class":75},[175,162301,162302,162303,29029],{},"如果要在函数内部修改全局变量，需要 ",[55,162304,162305],{},"global",[48,162307,162309],{"className":31022,"code":162308,"language":31024,"meta":53,"style":53},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[55,162310,162311,162319,162323,162327,162336,162344,162352,162356,162360,162365],{"__ignoreMap":53},[58,162312,162313,162315,162317],{"class":60,"line":61},[58,162314,147170],{"class":75},[58,162316,383],{"class":92},[58,162318,47977],{"class":82},[58,162320,162321],{"class":60,"line":68},[58,162322,3046],{"emptyLinePlaceholder":720},[58,162324,162325],{"class":60,"line":79},[58,162326,3046],{"emptyLinePlaceholder":720},[58,162328,162329,162331,162334],{"class":60,"line":105},[58,162330,32591],{"class":92},[58,162332,162333],{"class":379}," add_count",[58,162335,32597],{"class":75},[58,162337,162338,162341],{"class":60,"line":627},[58,162339,162340],{"class":92},"    global",[58,162342,162343],{"class":75}," count\n",[58,162345,162346,162348,162350],{"class":60,"line":509},[58,162347,159912],{"class":75},[58,162349,10122],{"class":92},[58,162351,56333],{"class":82},[58,162353,162354],{"class":60,"line":559},[58,162355,3046],{"emptyLinePlaceholder":720},[58,162357,162358],{"class":60,"line":654},[58,162359,3046],{"emptyLinePlaceholder":720},[58,162361,162362],{"class":60,"line":671},[58,162363,162364],{"class":75},"add_count()\n",[58,162366,162367,162369],{"class":60,"line":677},[58,162368,31059],{"class":82},[58,162370,162371],{"class":75},"(count)\n",[175,162373,162374],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162376,162378],{"id":162377},"_510-函数嵌套调用","5.10 函数嵌套调用",[175,162380,162381],{},"一个函数中可以调用另一个函数。",[48,162383,162385],{"className":31022,"code":162384,"language":31024,"meta":53,"style":53},"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",[55,162386,162387,162396,162410,162414,162418,162427,162432,162452,162473,162477,162481,162485],{"__ignoreMap":53},[58,162388,162389,162391,162394],{"class":60,"line":61},[58,162390,32591],{"class":92},[58,162392,162393],{"class":379}," print_line",[58,162395,32597],{"class":75},[58,162397,162398,162400,162402,162404,162406,162408],{"class":60,"line":68},[58,162399,31943],{"class":82},[58,162401,793],{"class":75},[58,162403,33127],{"class":386},[58,162405,7164],{"class":92},[58,162407,79296],{"class":82},[58,162409,799],{"class":75},[58,162411,162412],{"class":60,"line":79},[58,162413,3046],{"emptyLinePlaceholder":720},[58,162415,162416],{"class":60,"line":105},[58,162417,3046],{"emptyLinePlaceholder":720},[58,162419,162420,162422,162425],{"class":60,"line":627},[58,162421,32591],{"class":92},[58,162423,162424],{"class":379}," print_info",[58,162426,149854],{"class":75},[58,162428,162429],{"class":60,"line":509},[58,162430,162431],{"class":75},"    print_line()\n",[58,162433,162434,162436,162438,162440,162442,162444,162446,162448,162450],{"class":60,"line":559},[58,162435,31943],{"class":82},[58,162437,793],{"class":75},[58,162439,843],{"class":92},[58,162441,157161],{"class":386},[58,162443,1681],{"class":82},[58,162445,80440],{"class":75},[58,162447,1730],{"class":82},[58,162449,1037],{"class":386},[58,162451,799],{"class":75},[58,162453,162454,162456,162458,162460,162463,162465,162467,162469,162471],{"class":60,"line":654},[58,162455,31943],{"class":82},[58,162457,793],{"class":75},[58,162459,843],{"class":92},[58,162461,162462],{"class":386},"\"年龄:",[58,162464,1681],{"class":82},[58,162466,70853],{"class":75},[58,162468,1730],{"class":82},[58,162470,1037],{"class":386},[58,162472,799],{"class":75},[58,162474,162475],{"class":60,"line":671},[58,162476,162431],{"class":75},[58,162478,162479],{"class":60,"line":677},[58,162480,3046],{"emptyLinePlaceholder":720},[58,162482,162483],{"class":60,"line":2260},[58,162484,3046],{"emptyLinePlaceholder":720},[58,162486,162487,162490,162492,162494,162496],{"class":60,"line":694},[58,162488,162489],{"class":75},"print_info(",[58,162491,150367],{"class":386},[58,162493,469],{"class":75},[58,162495,1436],{"class":82},[58,162497,799],{"class":75},[175,162499,162500],{},"这种方式可以把小功能组合成大功能。",[14,162502,162504],{"id":162503},"_511-参数检查","5.11 参数检查",[175,162506,162507],{},"函数内部可以检查参数是否合法。",[48,162509,162511],{"className":31022,"code":162510,"language":31024,"meta":53,"style":53},"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",[55,162512,162513,162522,162534,162540,162550,162554,162558,162575,162579,162591,162602,162608],{"__ignoreMap":53},[58,162514,162515,162517,162520],{"class":60,"line":61},[58,162516,32591],{"class":92},[58,162518,162519],{"class":379}," divide",[58,162521,151572],{"class":75},[58,162523,162524,162526,162528,162530,162532],{"class":60,"line":68},[58,162525,3747],{"class":92},[58,162527,11527],{"class":75},[58,162529,3595],{"class":92},[58,162531,4739],{"class":82},[58,162533,4385],{"class":75},[58,162535,162536,162538],{"class":60,"line":79},[58,162537,15396],{"class":92},[58,162539,152651],{"class":82},[58,162541,162542,162544,162546,162548],{"class":60,"line":105},[58,162543,4736],{"class":92},[58,162545,11514],{"class":75},[58,162547,1370],{"class":92},[58,162549,151583],{"class":75},[58,162551,162552],{"class":60,"line":627},[58,162553,3046],{"emptyLinePlaceholder":720},[58,162555,162556],{"class":60,"line":509},[58,162557,3046],{"emptyLinePlaceholder":720},[58,162559,162560,162562,162564,162567,162569,162571,162573],{"class":60,"line":559},[58,162561,161785],{"class":75},[58,162563,383],{"class":92},[58,162565,162566],{"class":75}," divide(",[58,162568,1232],{"class":82},[58,162570,469],{"class":75},[58,162572,979],{"class":82},[58,162574,799],{"class":75},[58,162576,162577],{"class":60,"line":654},[58,162578,3046],{"emptyLinePlaceholder":720},[58,162580,162581,162583,162585,162587,162589],{"class":60,"line":671},[58,162582,2180],{"class":92},[58,162584,162031],{"class":75},[58,162586,39571],{"class":92},[58,162588,39577],{"class":82},[58,162590,4385],{"class":75},[58,162592,162593,162595,162597,162600],{"class":60,"line":677},[58,162594,31943],{"class":82},[58,162596,793],{"class":75},[58,162598,162599],{"class":386},"\"除数不能为0\"",[58,162601,799],{"class":75},[58,162603,162604,162606],{"class":60,"line":2260},[58,162605,2348],{"class":92},[58,162607,4385],{"class":75},[58,162609,162610,162612],{"class":60,"line":694},[58,162611,31943],{"class":82},[58,162613,77216],{"class":75},[14,162615,162617],{"id":162616},"_512-类型提示","5.12 类型提示",[175,162619,162620],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[48,162622,162624],{"className":31022,"code":162623,"language":31024,"meta":53,"style":53},"def add(a: int, b: int) -> int:\n    return a + b\n",[55,162625,162626,162649],{"__ignoreMap":53},[58,162627,162628,162630,162632,162635,162637,162640,162642,162645,162647],{"class":60,"line":61},[58,162629,32591],{"class":92},[58,162631,5855],{"class":379},[58,162633,162634],{"class":75},"(a: ",[58,162636,796],{"class":82},[58,162638,162639],{"class":75},", b: ",[58,162641,796],{"class":82},[58,162643,162644],{"class":75},") -> ",[58,162646,796],{"class":82},[58,162648,4385],{"class":75},[58,162650,162651,162653,162655,162657],{"class":60,"line":68},[58,162652,4736],{"class":92},[58,162654,11514],{"class":75},[58,162656,1267],{"class":92},[58,162658,151583],{"class":75},[175,162660,162661],{},"字符串参数：",[48,162663,162665],{"className":31022,"code":162664,"language":31024,"meta":53,"style":53},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[55,162666,162667,162684],{"__ignoreMap":53},[58,162668,162669,162671,162673,162676,162678,162680,162682],{"class":60,"line":61},[58,162670,32591],{"class":92},[58,162672,161475],{"class":379},[58,162674,162675],{"class":75},"(name: ",[58,162677,1952],{"class":82},[58,162679,162644],{"class":75},[58,162681,96315],{"class":82},[58,162683,4385],{"class":75},[58,162685,162686,162688,162690,162692,162694,162696,162698,162700,162702],{"class":60,"line":68},[58,162687,31943],{"class":82},[58,162689,793],{"class":75},[58,162691,843],{"class":92},[58,162693,157533],{"class":386},[58,162695,1681],{"class":82},[58,162697,80440],{"class":75},[58,162699,1730],{"class":82},[58,162701,1037],{"class":386},[58,162703,799],{"class":75},[175,162705,162706],{},"列表参数：",[48,162708,162710],{"className":31022,"code":162709,"language":31024,"meta":53,"style":53},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[55,162711,162712,162731,162739,162751,162760],{"__ignoreMap":53},[58,162713,162714,162716,162719,162722,162724,162727,162729],{"class":60,"line":61},[58,162715,32591],{"class":92},[58,162717,162718],{"class":379}," get_total",[58,162720,162721],{"class":75},"(numbers: list[",[58,162723,796],{"class":82},[58,162725,162726],{"class":75},"]) -> ",[58,162728,796],{"class":82},[58,162730,4385],{"class":75},[58,162732,162733,162735,162737],{"class":60,"line":68},[58,162734,159786],{"class":75},[58,162736,383],{"class":92},[58,162738,47977],{"class":82},[58,162740,162741,162743,162746,162748],{"class":60,"line":79},[58,162742,3847],{"class":92},[58,162744,162745],{"class":75}," number ",[58,162747,26687],{"class":92},[58,162749,162750],{"class":75}," numbers:\n",[58,162752,162753,162755,162757],{"class":60,"line":105},[58,162754,160461],{"class":75},[58,162756,10122],{"class":92},[58,162758,162759],{"class":75}," number\n",[58,162761,162762,162764],{"class":60,"line":627},[58,162763,4736],{"class":92},[58,162765,162766],{"class":75}," total\n",[175,162768,162769],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,162771,162773],{"id":162772},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[48,162775,162777],{"className":31022,"code":162776,"language":31024,"meta":53,"style":53},"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",[55,162778,162779,162789,162793,162797,162805,162816,162826,162836,162846,162856,162860,162864,162873,162895,162899,162903,162912,162918,162938,162950,162961,162965,162974,162985,162990,162994,162998,163007,163013,163032,163044,163054,163058,163069,163079,163083,163091,163102,163106,163110,163114,163122,163127,163141,163145,163157,163162,163174,163179,163191,163196,163208,163218,163222,163228],{"__ignoreMap":53},[58,162780,162781,162784,162786],{"class":60,"line":61},[58,162782,162783],{"class":75},"balance ",[58,162785,383],{"class":92},[58,162787,162788],{"class":82}," 1000\n",[58,162790,162791],{"class":60,"line":68},[58,162792,3046],{"emptyLinePlaceholder":720},[58,162794,162795],{"class":60,"line":79},[58,162796,3046],{"emptyLinePlaceholder":720},[58,162798,162799,162801,162803],{"class":60,"line":105},[58,162800,32591],{"class":92},[58,162802,152512],{"class":379},[58,162804,32597],{"class":75},[58,162806,162807,162809,162811,162814],{"class":60,"line":627},[58,162808,31943],{"class":82},[58,162810,793],{"class":75},[58,162812,162813],{"class":386},"\"====== ATM ======\"",[58,162815,799],{"class":75},[58,162817,162818,162820,162822,162824],{"class":60,"line":509},[58,162819,31943],{"class":82},[58,162821,793],{"class":75},[58,162823,161127],{"class":386},[58,162825,799],{"class":75},[58,162827,162828,162830,162832,162834],{"class":60,"line":559},[58,162829,31943],{"class":82},[58,162831,793],{"class":75},[58,162833,161138],{"class":386},[58,162835,799],{"class":75},[58,162837,162838,162840,162842,162844],{"class":60,"line":654},[58,162839,31943],{"class":82},[58,162841,793],{"class":75},[58,162843,161149],{"class":386},[58,162845,799],{"class":75},[58,162847,162848,162850,162852,162854],{"class":60,"line":671},[58,162849,31943],{"class":82},[58,162851,793],{"class":75},[58,162853,161160],{"class":386},[58,162855,799],{"class":75},[58,162857,162858],{"class":60,"line":677},[58,162859,3046],{"emptyLinePlaceholder":720},[58,162861,162862],{"class":60,"line":2260},[58,162863,3046],{"emptyLinePlaceholder":720},[58,162865,162866,162868,162871],{"class":60,"line":694},[58,162867,32591],{"class":92},[58,162869,162870],{"class":379}," show_balance",[58,162872,32597],{"class":75},[58,162874,162875,162877,162879,162881,162884,162886,162889,162891,162893],{"class":60,"line":2270},[58,162876,31943],{"class":82},[58,162878,793],{"class":75},[58,162880,843],{"class":92},[58,162882,162883],{"class":386},"\"当前余额:",[58,162885,1681],{"class":82},[58,162887,162888],{"class":75},"balance",[58,162890,1730],{"class":82},[58,162892,157491],{"class":386},[58,162894,799],{"class":75},[58,162896,162897],{"class":60,"line":2275},[58,162898,3046],{"emptyLinePlaceholder":720},[58,162900,162901],{"class":60,"line":2289},[58,162902,3046],{"emptyLinePlaceholder":720},[58,162904,162905,162907,162910],{"class":60,"line":2294},[58,162906,32591],{"class":92},[58,162908,162909],{"class":379}," save_money",[58,162911,32597],{"class":75},[58,162913,162914,162916],{"class":60,"line":2300},[58,162915,162340],{"class":92},[58,162917,150578],{"class":75},[58,162919,162920,162923,162925,162927,162929,162931,162933,162936],{"class":60,"line":2321},[58,162921,162922],{"class":75},"    money ",[58,162924,383],{"class":92},[58,162926,110426],{"class":82},[58,162928,793],{"class":75},[58,162930,54457],{"class":82},[58,162932,793],{"class":75},[58,162934,162935],{"class":386},"\"请输入存款金额:\"",[58,162937,31141],{"class":75},[58,162939,162940,162942,162944,162946,162948],{"class":60,"line":2326},[58,162941,3747],{"class":92},[58,162943,150621],{"class":75},[58,162945,2236],{"class":92},[58,162947,4739],{"class":82},[58,162949,4385],{"class":75},[58,162951,162952,162954,162956,162959],{"class":60,"line":2340},[58,162953,33095],{"class":82},[58,162955,793],{"class":75},[58,162957,162958],{"class":386},"\"金额必须大于0\"",[58,162960,799],{"class":75},[58,162962,162963],{"class":60,"line":2345},[58,162964,152840],{"class":92},[58,162966,162967,162970,162972],{"class":60,"line":2374},[58,162968,162969],{"class":75},"    balance ",[58,162971,10122],{"class":92},[58,162973,150654],{"class":75},[58,162975,162976,162978,162980,162983],{"class":60,"line":2379},[58,162977,31943],{"class":82},[58,162979,793],{"class":75},[58,162981,162982],{"class":386},"\"存款成功\"",[58,162984,799],{"class":75},[58,162986,162987],{"class":60,"line":2396},[58,162988,162989],{"class":75},"    show_balance()\n",[58,162991,162992],{"class":60,"line":2401},[58,162993,3046],{"emptyLinePlaceholder":720},[58,162995,162996],{"class":60,"line":2406},[58,162997,3046],{"emptyLinePlaceholder":720},[58,162999,163000,163002,163005],{"class":60,"line":2411},[58,163001,32591],{"class":92},[58,163003,163004],{"class":379}," withdraw_money",[58,163006,32597],{"class":75},[58,163008,163009,163011],{"class":60,"line":2425},[58,163010,162340],{"class":92},[58,163012,150578],{"class":75},[58,163014,163015,163017,163019,163021,163023,163025,163027,163030],{"class":60,"line":2430},[58,163016,162922],{"class":75},[58,163018,383],{"class":92},[58,163020,110426],{"class":82},[58,163022,793],{"class":75},[58,163024,54457],{"class":82},[58,163026,793],{"class":75},[58,163028,163029],{"class":386},"\"请输入取款金额:\"",[58,163031,31141],{"class":75},[58,163033,163034,163036,163038,163040,163042],{"class":60,"line":3223},[58,163035,3747],{"class":92},[58,163037,150621],{"class":75},[58,163039,2236],{"class":92},[58,163041,4739],{"class":82},[58,163043,4385],{"class":75},[58,163045,163046,163048,163050,163052],{"class":60,"line":3237},[58,163047,33095],{"class":82},[58,163049,793],{"class":75},[58,163051,162958],{"class":386},[58,163053,799],{"class":75},[58,163055,163056],{"class":60,"line":3245},[58,163057,152840],{"class":92},[58,163059,163060,163062,163064,163066],{"class":60,"line":3250},[58,163061,3747],{"class":92},[58,163063,150621],{"class":75},[58,163065,1744],{"class":92},[58,163067,163068],{"class":75}," balance:\n",[58,163070,163071,163073,163075,163077],{"class":60,"line":3256},[58,163072,33095],{"class":82},[58,163074,793],{"class":75},[58,163076,150716],{"class":386},[58,163078,799],{"class":75},[58,163080,163081],{"class":60,"line":3262},[58,163082,152840],{"class":92},[58,163084,163085,163087,163089],{"class":60,"line":3267},[58,163086,162969],{"class":75},[58,163088,150731],{"class":92},[58,163090,150654],{"class":75},[58,163092,163093,163095,163097,163100],{"class":60,"line":8594},[58,163094,31943],{"class":82},[58,163096,793],{"class":75},[58,163098,163099],{"class":386},"\"取款成功\"",[58,163101,799],{"class":75},[58,163103,163104],{"class":60,"line":8618},[58,163105,162989],{"class":75},[58,163107,163108],{"class":60,"line":8623},[58,163109,3046],{"emptyLinePlaceholder":720},[58,163111,163112],{"class":60,"line":8629},[58,163113,3046],{"emptyLinePlaceholder":720},[58,163115,163116,163118,163120],{"class":60,"line":8656},[58,163117,109292],{"class":92},[58,163119,95921],{"class":82},[58,163121,4385],{"class":75},[58,163123,163124],{"class":60,"line":8661},[58,163125,163126],{"class":75},"    show_menu()\n",[58,163128,163129,163131,163133,163135,163137,163139],{"class":60,"line":8667},[58,163130,161171],{"class":75},[58,163132,383],{"class":92},[58,163134,61239],{"class":82},[58,163136,793],{"class":75},[58,163138,153552],{"class":386},[58,163140,799],{"class":75},[58,163142,163143],{"class":60,"line":8679},[58,163144,3046],{"emptyLinePlaceholder":720},[58,163146,163147,163149,163151,163153,163155],{"class":60,"line":8691},[58,163148,3747],{"class":92},[58,163150,153565],{"class":75},[58,163152,3595],{"class":92},[58,163154,153570],{"class":386},[58,163156,4385],{"class":75},[58,163158,163159],{"class":60,"line":8703},[58,163160,163161],{"class":75},"        show_balance()\n",[58,163163,163164,163166,163168,163170,163172],{"class":60,"line":10361},[58,163165,39937],{"class":92},[58,163167,153565],{"class":75},[58,163169,3595],{"class":92},[58,163171,153589],{"class":386},[58,163173,4385],{"class":75},[58,163175,163176],{"class":60,"line":10386},[58,163177,163178],{"class":75},"        save_money()\n",[58,163180,163181,163183,163185,163187,163189],{"class":60,"line":10409},[58,163182,39937],{"class":92},[58,163184,153565],{"class":75},[58,163186,3595],{"class":92},[58,163188,153607],{"class":386},[58,163190,4385],{"class":75},[58,163192,163193],{"class":60,"line":10433},[58,163194,163195],{"class":75},"        withdraw_money()\n",[58,163197,163198,163200,163202,163204,163206],{"class":60,"line":10438},[58,163199,39937],{"class":92},[58,163201,153565],{"class":75},[58,163203,3595],{"class":92},[58,163205,153661],{"class":386},[58,163207,4385],{"class":75},[58,163209,163210,163212,163214,163216],{"class":60,"line":10443},[58,163211,33095],{"class":82},[58,163213,793],{"class":75},[58,163215,153672],{"class":386},[58,163217,799],{"class":75},[58,163219,163220],{"class":60,"line":10448},[58,163221,32271],{"class":92},[58,163223,163224,163226],{"class":60,"line":10457},[58,163225,158501],{"class":92},[58,163227,4385],{"class":75},[58,163229,163230,163232,163234,163236],{"class":60,"line":10462},[58,163231,33095],{"class":82},[58,163233,793],{"class":75},[58,163235,153693],{"class":386},[58,163237,799],{"class":75},[175,163239,163240],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,163242,163244],{"id":163243},"_514-易错点","5.14 易错点",[19,163246,163247,163250,163253,163258,163263,163266],{},[22,163248,163249],{},"函数定义后必须调用才会执行。",[22,163251,163252],{},"函数名后面有括号才是调用。",[22,163254,163255,163257],{},[55,163256,17689],{}," 后面的代码不会执行。",[22,163259,163260,163261,29029],{},"没有返回值的函数默认返回 ",[55,163262,96315],{},[22,163264,163265],{},"局部变量不能在函数外部访问。",[22,163267,163268,163269,163271],{},"不要滥用 ",[55,163270,162305],{},"，更好的方式是让函数返回新值。",[175,163273,163274,163275,163277],{},"例如不用 ",[55,163276,162305],{}," 改写存款：",[48,163279,163281],{"className":31022,"code":163280,"language":31024,"meta":53,"style":53},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[55,163282,163283,163292,163303,163307,163311,163319,163332],{"__ignoreMap":53},[58,163284,163285,163287,163289],{"class":60,"line":61},[58,163286,32591],{"class":92},[58,163288,162909],{"class":379},[58,163290,163291],{"class":75},"(balance, money):\n",[58,163293,163294,163296,163299,163301],{"class":60,"line":68},[58,163295,4736],{"class":92},[58,163297,163298],{"class":75}," balance ",[58,163300,1267],{"class":92},[58,163302,150654],{"class":75},[58,163304,163305],{"class":60,"line":79},[58,163306,3046],{"emptyLinePlaceholder":720},[58,163308,163309],{"class":60,"line":105},[58,163310,3046],{"emptyLinePlaceholder":720},[58,163312,163313,163315,163317],{"class":60,"line":627},[58,163314,162783],{"class":75},[58,163316,383],{"class":92},[58,163318,162788],{"class":82},[58,163320,163321,163323,163325,163328,163330],{"class":60,"line":509},[58,163322,162783],{"class":75},[58,163324,383],{"class":92},[58,163326,163327],{"class":75}," save_money(balance, ",[58,163329,2369],{"class":82},[58,163331,799],{"class":75},[58,163333,163334,163336],{"class":60,"line":559},[58,163335,31059],{"class":82},[58,163337,163338],{"class":75},"(balance)\n",[14,163340,163342],{"id":163341},"_515-本章练习","5.15 本章练习",[19,163344,163345,163352,163358,163364,163370],{},[22,163346,163347,163348,163351],{},"定义函数 ",[55,163349,163350],{},"print_student(name, age)","，输出学生信息。",[22,163353,163347,163354,163357],{},[55,163355,163356],{},"get_max(a, b, c)","，返回三个数中的最大值。",[22,163359,163347,163360,163363],{},[55,163361,163362],{},"is_even(num)","，判断一个数是否为偶数。",[22,163365,163347,163366,163369],{},[55,163367,163368],{},"calculate_bmi(weight, height)","，返回 BMI。",[22,163371,163372],{},"把第 4 章的菜单程序拆分成多个函数。",[702,163374,163375],{},"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":53,"searchDepth":68,"depth":68,"links":163377},[163378,163379,163380,163381,163382,163383,163384,163385,163386,163390,163391,163392,163393,163394,163395],{"id":161398,"depth":68,"text":161399},{"id":161439,"depth":68,"text":161440},{"id":161529,"depth":68,"text":161530},{"id":161610,"depth":68,"text":161611},{"id":161743,"depth":68,"text":161744},{"id":161865,"depth":68,"text":161866},{"id":161987,"depth":68,"text":161988},{"id":162064,"depth":68,"text":162065},{"id":162186,"depth":68,"text":162187,"children":163387},[163388,163389],{"id":162190,"depth":79,"text":162191},{"id":162248,"depth":79,"text":162249},{"id":162377,"depth":68,"text":162378},{"id":162503,"depth":68,"text":162504},{"id":162616,"depth":68,"text":162617},{"id":162772,"depth":68,"text":162773},{"id":163243,"depth":68,"text":163244},{"id":163341,"depth":68,"text":163342},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161390,"description":717},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163402,"title":163403,"body":163404,"description":717,"extension":718,"meta":166448,"navigation":720,"path":166449,"seo":166450,"stem":166451,"__hash__":166452},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163405,"toc":166429},[163406,163409,163413,163416,163419,163523,163526,163530,163533,163613,163616,163620,163623,163683,163686,163722,163725,163740,163744,163817,163820,163875,163878,163948,163951,164035,164045,164103,164107,164152,164155,164181,164184,164290,164294,164297,164339,164342,164406,164409,164413,164416,164477,164480,164510,164513,164551,164555,164558,164567,164570,164694,164697,164738,164742,164745,164756,164796,164799,164814,164819,164822,164889,164892,164982,164986,164989,165037,165040,165067,165069,165099,165102,165122,165125,165156,165159,165192,165196,165199,165223,165226,165250,165253,165277,165281,165284,165414,165417,165497,165500,165575,165579,165582,165632,165635,165677,165680,165704,165706,165730,165733,165788,165791,165857,165861,165864,165867,165905,165908,165961,165964,166010,166013,166046,166049,166053,166372,166376,166405,166409,166426],[10,163407,163403],{"id":163408},"_6-数据容器",[14,163410,163412],{"id":163411},"_61-什么是数据容器","6.1 什么是数据容器",[175,163414,163415],{},"数据容器用于一次保存多个数据。",[175,163417,163418],{},"常见容器：",[926,163420,163421,163438],{},[929,163422,163423],{},[932,163424,163425,163427,163430,163433,163436],{},[935,163426,26415],{},[935,163428,163429],{},"是否有序",[935,163431,163432],{},"是否可变",[935,163434,163435],{},"是否允许重复",[935,163437,28136],{},[972,163439,163440,163458,163474,163489,163506],{},[932,163441,163442,163445,163448,163451,163454],{},[977,163443,163444],{},"list列表",[977,163446,163447],{},"有序",[977,163449,163450],{},"可变",[977,163452,163453],{},"允许",[977,163455,163456],{},[55,163457,155736],{},[932,163459,163460,163463,163465,163468,163470],{},[977,163461,163462],{},"tuple元组",[977,163464,163447],{},[977,163466,163467],{},"不可变",[977,163469,163453],{},[977,163471,163472],{},[55,163473,155749],{},[932,163475,163476,163479,163481,163483,163485],{},[977,163477,163478],{},"str字符串",[977,163480,163447],{},[977,163482,163467],{},[977,163484,163453],{},[977,163486,163487],{},[55,163488,156359],{},[932,163490,163491,163494,163497,163499,163502],{},[977,163492,163493],{},"set集合",[977,163495,163496],{},"无序",[977,163498,163450],{},[977,163500,163501],{},"不允许",[977,163503,163504],{},[55,163505,155774],{},[932,163507,163508,163511,163513,163515,163518],{},[977,163509,163510],{},"dict字典",[977,163512,163447],{},[977,163514,163450],{},[977,163516,163517],{},"key不允许重复",[977,163519,163520],{},[55,163521,163522],{},"{\"name\": \"小明\"}",[175,163524,163525],{},"Python 3.7 之后，字典保持插入顺序。",[14,163527,163529],{"id":163528},"_62-列表list","6.2 列表list",[175,163531,163532],{},"列表用于保存一组有顺序的数据。",[48,163534,163536],{"className":31022,"code":163535,"language":31024,"meta":53,"style":53},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[55,163537,163538,163558,163583,163604],{"__ignoreMap":53},[58,163539,163540,163542,163544,163546,163548,163550,163552,163554,163556],{"class":60,"line":61},[58,163541,160859],{"class":75},[58,163543,383],{"class":92},[58,163545,52864],{"class":75},[58,163547,150367],{"class":386},[58,163549,469],{"class":75},[58,163551,151415],{"class":386},[58,163553,469],{"class":75},[58,163555,160210],{"class":386},[58,163557,33890],{"class":75},[58,163559,163560,163563,163565,163567,163569,163571,163573,163575,163577,163579,163581],{"class":60,"line":68},[58,163561,163562],{"class":75},"numbers ",[58,163564,383],{"class":92},[58,163566,52864],{"class":75},[58,163568,89],{"class":82},[58,163570,469],{"class":75},[58,163572,867],{"class":82},[58,163574,469],{"class":75},[58,163576,861],{"class":82},[58,163578,469],{"class":75},[58,163580,1079],{"class":82},[58,163582,33890],{"class":75},[58,163584,163585,163588,163590,163592,163594,163596,163598,163600,163602],{"class":60,"line":79},[58,163586,163587],{"class":75},"mixed ",[58,163589,383],{"class":92},[58,163591,52864],{"class":75},[58,163593,150367],{"class":386},[58,163595,469],{"class":75},[58,163597,1436],{"class":82},[58,163599,469],{"class":75},[58,163601,32120],{"class":82},[58,163603,33890],{"class":75},[58,163605,163606,163609,163611],{"class":60,"line":105},[58,163607,163608],{"class":75},"empty ",[58,163610,383],{"class":92},[58,163612,52476],{"class":75},[175,163614,163615],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163617,163619],{"id":163618},"_63-列表索引","6.3 列表索引",[175,163621,163622],{},"正向索引从 0 开始：",[48,163624,163626],{"className":31022,"code":163625,"language":31024,"meta":53,"style":53},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[55,163627,163628,163648,163652,163663,163673],{"__ignoreMap":53},[58,163629,163630,163632,163634,163636,163638,163640,163642,163644,163646],{"class":60,"line":61},[58,163631,160859],{"class":75},[58,163633,383],{"class":92},[58,163635,52864],{"class":75},[58,163637,150367],{"class":386},[58,163639,469],{"class":75},[58,163641,151415],{"class":386},[58,163643,469],{"class":75},[58,163645,160210],{"class":386},[58,163647,33890],{"class":75},[58,163649,163650],{"class":60,"line":68},[58,163651,3046],{"emptyLinePlaceholder":720},[58,163653,163654,163656,163659,163661],{"class":60,"line":79},[58,163655,31059],{"class":82},[58,163657,163658],{"class":75},"(names[",[58,163660,979],{"class":82},[58,163662,5303],{"class":75},[58,163664,163665,163667,163669,163671],{"class":60,"line":105},[58,163666,31059],{"class":82},[58,163668,163658],{"class":75},[58,163670,89],{"class":82},[58,163672,5303],{"class":75},[58,163674,163675,163677,163679,163681],{"class":60,"line":627},[58,163676,31059],{"class":82},[58,163678,163658],{"class":75},[58,163680,867],{"class":82},[58,163682,5303],{"class":75},[175,163684,163685],{},"反向索引从 -1 开始：",[48,163687,163689],{"className":31022,"code":163688,"language":31024,"meta":53,"style":53},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[55,163690,163691,163707],{"__ignoreMap":53},[58,163692,163693,163695,163697,163699,163701,163704],{"class":60,"line":61},[58,163694,31059],{"class":82},[58,163696,163658],{"class":75},[58,163698,1318],{"class":92},[58,163700,89],{"class":82},[58,163702,163703],{"class":75},"])  ",[58,163705,163706],{"class":64},"# 小刚\n",[58,163708,163709,163711,163713,163715,163717,163719],{"class":60,"line":68},[58,163710,31059],{"class":82},[58,163712,163658],{"class":75},[58,163714,1318],{"class":92},[58,163716,867],{"class":82},[58,163718,163703],{"class":75},[58,163720,163721],{"class":64},"# 小红\n",[175,163723,163724],{},"索引越界会报错：",[48,163726,163728],{"className":31022,"code":163727,"language":31024,"meta":53,"style":53},"print(names[3])\n",[55,163729,163730],{"__ignoreMap":53},[58,163731,163732,163734,163736,163738],{"class":60,"line":61},[58,163733,31059],{"class":82},[58,163735,163658],{"class":75},[58,163737,861],{"class":82},[58,163739,5303],{"class":75},[14,163741,163743],{"id":163742},"_64-列表常用方法","6.4 列表常用方法",[48,163745,163747],{"className":31022,"code":163746,"language":31024,"meta":53,"style":53},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[55,163748,163749,163765,163769,163778,163792,163806,163810],{"__ignoreMap":53},[58,163750,163751,163753,163755,163757,163759,163761,163763],{"class":60,"line":61},[58,163752,160859],{"class":75},[58,163754,383],{"class":92},[58,163756,52864],{"class":75},[58,163758,150367],{"class":386},[58,163760,469],{"class":75},[58,163762,151415],{"class":386},[58,163764,33890],{"class":75},[58,163766,163767],{"class":60,"line":68},[58,163768,3046],{"emptyLinePlaceholder":720},[58,163770,163771,163774,163776],{"class":60,"line":79},[58,163772,163773],{"class":75},"names.append(",[58,163775,160210],{"class":386},[58,163777,799],{"class":75},[58,163779,163780,163783,163785,163787,163790],{"class":60,"line":105},[58,163781,163782],{"class":75},"names.insert(",[58,163784,89],{"class":82},[58,163786,469],{"class":75},[58,163788,163789],{"class":386},"\"小李\"",[58,163791,799],{"class":75},[58,163793,163794,163797,163799,163801,163804],{"class":60,"line":627},[58,163795,163796],{"class":75},"names.extend([",[58,163798,9329],{"class":386},[58,163800,469],{"class":75},[58,163802,163803],{"class":386},"\"小赵\"",[58,163805,5303],{"class":75},[58,163807,163808],{"class":60,"line":509},[58,163809,3046],{"emptyLinePlaceholder":720},[58,163811,163812,163814],{"class":60,"line":559},[58,163813,31059],{"class":82},[58,163815,163816],{"class":75},"(names)\n",[175,163818,163819],{},"删除元素：",[48,163821,163823],{"className":31022,"code":163822,"language":31024,"meta":53,"style":53},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[55,163824,163825,163834,163844,163858,163870],{"__ignoreMap":53},[58,163826,163827,163830,163832],{"class":60,"line":61},[58,163828,163829],{"class":75},"names.remove(",[58,163831,151415],{"class":386},[58,163833,799],{"class":75},[58,163835,163836,163839,163841],{"class":60,"line":68},[58,163837,163838],{"class":75},"last ",[58,163840,383],{"class":92},[58,163842,163843],{"class":75}," names.pop()\n",[58,163845,163846,163849,163851,163854,163856],{"class":60,"line":79},[58,163847,163848],{"class":75},"first ",[58,163850,383],{"class":92},[58,163852,163853],{"class":75}," names.pop(",[58,163855,979],{"class":82},[58,163857,799],{"class":75},[58,163859,163860,163863,163866,163868],{"class":60,"line":105},[58,163861,163862],{"class":92},"del",[58,163864,163865],{"class":75}," names[",[58,163867,979],{"class":82},[58,163869,33890],{"class":75},[58,163871,163872],{"class":60,"line":627},[58,163873,163874],{"class":75},"names.clear()\n",[175,163876,163877],{},"查询和统计：",[48,163879,163881],{"className":31022,"code":163880,"language":31024,"meta":53,"style":53},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[55,163882,163883,163911,163915,163926,163937],{"__ignoreMap":53},[58,163884,163885,163887,163889,163891,163893,163895,163897,163899,163901,163903,163905,163907,163909],{"class":60,"line":61},[58,163886,163562],{"class":75},[58,163888,383],{"class":92},[58,163890,52864],{"class":75},[58,163892,89],{"class":82},[58,163894,469],{"class":75},[58,163896,867],{"class":82},[58,163898,469],{"class":75},[58,163900,861],{"class":82},[58,163902,469],{"class":75},[58,163904,867],{"class":82},[58,163906,469],{"class":75},[58,163908,1079],{"class":82},[58,163910,33890],{"class":75},[58,163912,163913],{"class":60,"line":68},[58,163914,3046],{"emptyLinePlaceholder":720},[58,163916,163917,163919,163922,163924],{"class":60,"line":79},[58,163918,31059],{"class":82},[58,163920,163921],{"class":75},"(numbers.index(",[58,163923,861],{"class":82},[58,163925,31141],{"class":75},[58,163927,163928,163930,163933,163935],{"class":60,"line":105},[58,163929,31059],{"class":82},[58,163931,163932],{"class":75},"(numbers.count(",[58,163934,867],{"class":82},[58,163936,31141],{"class":75},[58,163938,163939,163941,163943,163945],{"class":60,"line":627},[58,163940,31059],{"class":82},[58,163942,793],{"class":75},[58,163944,8004],{"class":82},[58,163946,163947],{"class":75},"(numbers))\n",[175,163949,163950],{},"排序：",[48,163952,163954],{"className":31022,"code":163953,"language":31024,"meta":53,"style":53},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[55,163955,163956,163980,163984,163989,163996,164000,164014,164020,164024,164029],{"__ignoreMap":53},[58,163957,163958,163960,163962,163964,163966,163968,163970,163972,163974,163976,163978],{"class":60,"line":61},[58,163959,163562],{"class":75},[58,163961,383],{"class":92},[58,163963,52864],{"class":75},[58,163965,861],{"class":82},[58,163967,469],{"class":75},[58,163969,89],{"class":82},[58,163971,469],{"class":75},[58,163973,1105],{"class":82},[58,163975,469],{"class":75},[58,163977,867],{"class":82},[58,163979,33890],{"class":75},[58,163981,163982],{"class":60,"line":68},[58,163983,3046],{"emptyLinePlaceholder":720},[58,163985,163986],{"class":60,"line":79},[58,163987,163988],{"class":75},"numbers.sort()\n",[58,163990,163991,163993],{"class":60,"line":105},[58,163992,31059],{"class":82},[58,163994,163995],{"class":75},"(numbers)\n",[58,163997,163998],{"class":60,"line":627},[58,163999,3046],{"emptyLinePlaceholder":720},[58,164001,164002,164005,164008,164010,164012],{"class":60,"line":509},[58,164003,164004],{"class":75},"numbers.sort(",[58,164006,164007],{"class":5862},"reverse",[58,164009,383],{"class":92},[58,164011,32120],{"class":82},[58,164013,799],{"class":75},[58,164015,164016,164018],{"class":60,"line":559},[58,164017,31059],{"class":82},[58,164019,163995],{"class":75},[58,164021,164022],{"class":60,"line":654},[58,164023,3046],{"emptyLinePlaceholder":720},[58,164025,164026],{"class":60,"line":671},[58,164027,164028],{"class":75},"numbers.reverse()\n",[58,164030,164031,164033],{"class":60,"line":677},[58,164032,31059],{"class":82},[58,164034,163995],{"class":75},[175,164036,164037,164040,164041,164044],{},[55,164038,164039],{},"sort()"," 会修改原列表，",[55,164042,164043],{},"sorted()"," 返回新列表。",[48,164046,164048],{"className":31022,"code":164047,"language":31024,"meta":53,"style":53},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[55,164049,164050,164074,164086,164090,164096],{"__ignoreMap":53},[58,164051,164052,164054,164056,164058,164060,164062,164064,164066,164068,164070,164072],{"class":60,"line":61},[58,164053,163562],{"class":75},[58,164055,383],{"class":92},[58,164057,52864],{"class":75},[58,164059,861],{"class":82},[58,164061,469],{"class":75},[58,164063,89],{"class":82},[58,164065,469],{"class":75},[58,164067,1105],{"class":82},[58,164069,469],{"class":75},[58,164071,867],{"class":82},[58,164073,33890],{"class":75},[58,164075,164076,164079,164081,164084],{"class":60,"line":68},[58,164077,164078],{"class":75},"new_numbers ",[58,164080,383],{"class":92},[58,164082,164083],{"class":82}," sorted",[58,164085,163995],{"class":75},[58,164087,164088],{"class":60,"line":79},[58,164089,3046],{"emptyLinePlaceholder":720},[58,164091,164092,164094],{"class":60,"line":105},[58,164093,31059],{"class":82},[58,164095,163995],{"class":75},[58,164097,164098,164100],{"class":60,"line":627},[58,164099,31059],{"class":82},[58,164101,164102],{"class":75},"(new_numbers)\n",[14,164104,164106],{"id":164105},"_65-列表遍历","6.5 列表遍历",[48,164108,164110],{"className":31022,"code":164109,"language":31024,"meta":53,"style":53},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[55,164111,164112,164132,164136,164146],{"__ignoreMap":53},[58,164113,164114,164116,164118,164120,164122,164124,164126,164128,164130],{"class":60,"line":61},[58,164115,160859],{"class":75},[58,164117,383],{"class":92},[58,164119,52864],{"class":75},[58,164121,150367],{"class":386},[58,164123,469],{"class":75},[58,164125,151415],{"class":386},[58,164127,469],{"class":75},[58,164129,160210],{"class":386},[58,164131,33890],{"class":75},[58,164133,164134],{"class":60,"line":68},[58,164135,3046],{"emptyLinePlaceholder":720},[58,164137,164138,164140,164142,164144],{"class":60,"line":79},[58,164139,3671],{"class":92},[58,164141,160895],{"class":75},[58,164143,26687],{"class":92},[58,164145,160900],{"class":75},[58,164147,164148,164150],{"class":60,"line":105},[58,164149,31943],{"class":82},[58,164151,151139],{"class":75},[175,164153,164154],{},"需要索引时：",[48,164156,164158],{"className":31022,"code":164157,"language":31024,"meta":53,"style":53},"for index, name in enumerate(names):\n    print(index, name)\n",[55,164159,164160,164174],{"__ignoreMap":53},[58,164161,164162,164164,164167,164169,164171],{"class":60,"line":61},[58,164163,3671],{"class":92},[58,164165,164166],{"class":75}," index, name ",[58,164168,26687],{"class":92},[58,164170,32250],{"class":82},[58,164172,164173],{"class":75},"(names):\n",[58,164175,164176,164178],{"class":60,"line":68},[58,164177,31943],{"class":82},[58,164179,164180],{"class":75},"(index, name)\n",[175,164182,164183],{},"统计总分：",[48,164185,164187],{"className":31022,"code":164186,"language":31024,"meta":53,"style":53},"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",[55,164188,164189,164214,164222,164226,164237,164245,164249,164266],{"__ignoreMap":53},[58,164190,164191,164194,164196,164198,164200,164202,164204,164206,164208,164210,164212],{"class":60,"line":61},[58,164192,164193],{"class":75},"scores ",[58,164195,383],{"class":92},[58,164197,52864],{"class":75},[58,164199,1647],{"class":82},[58,164201,469],{"class":75},[58,164203,1522],{"class":82},[58,164205,469],{"class":75},[58,164207,1040],{"class":82},[58,164209,469],{"class":75},[58,164211,1347],{"class":82},[58,164213,33890],{"class":75},[58,164215,164216,164218,164220],{"class":60,"line":68},[58,164217,157739],{"class":75},[58,164219,383],{"class":92},[58,164221,47977],{"class":82},[58,164223,164224],{"class":60,"line":79},[58,164225,3046],{"emptyLinePlaceholder":720},[58,164227,164228,164230,164232,164234],{"class":60,"line":105},[58,164229,3671],{"class":92},[58,164231,158262],{"class":75},[58,164233,26687],{"class":92},[58,164235,164236],{"class":75}," scores:\n",[58,164238,164239,164241,164243],{"class":60,"line":627},[58,164240,159786],{"class":75},[58,164242,10122],{"class":92},[58,164244,2227],{"class":75},[58,164246,164247],{"class":60,"line":509},[58,164248,3046],{"emptyLinePlaceholder":720},[58,164250,164251,164254,164256,164259,164261,164263],{"class":60,"line":559},[58,164252,164253],{"class":75},"avg ",[58,164255,383],{"class":92},[58,164257,164258],{"class":75}," total ",[58,164260,1370],{"class":92},[58,164262,7977],{"class":82},[58,164264,164265],{"class":75},"(scores)\n",[58,164267,164268,164270,164272,164274,164277,164279,164282,164284,164286,164288],{"class":60,"line":654},[58,164269,31059],{"class":82},[58,164271,793],{"class":75},[58,164273,843],{"class":92},[58,164275,164276],{"class":386},"\"平均分:",[58,164278,1681],{"class":82},[58,164280,164281],{"class":75},"avg",[58,164283,157638],{"class":92},[58,164285,1730],{"class":82},[58,164287,1037],{"class":386},[58,164289,799],{"class":75},[14,164291,164293],{"id":164292},"_66-元组tuple","6.6 元组tuple",[175,164295,164296],{},"元组和列表类似，但不可修改。",[48,164298,164300],{"className":31022,"code":164299,"language":31024,"meta":53,"style":53},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[55,164301,164302,164319],{"__ignoreMap":53},[58,164303,164304,164307,164309,164311,164313,164315,164317],{"class":60,"line":61},[58,164305,164306],{"class":75},"point ",[58,164308,383],{"class":92},[58,164310,2305],{"class":75},[58,164312,1232],{"class":82},[58,164314,469],{"class":75},[58,164316,1486],{"class":82},[58,164318,799],{"class":75},[58,164320,164321,164323,164325,164327,164329,164331,164333,164335,164337],{"class":60,"line":68},[58,164322,116943],{"class":75},[58,164324,383],{"class":92},[58,164326,2305],{"class":75},[58,164328,150367],{"class":386},[58,164330,469],{"class":75},[58,164332,1436],{"class":82},[58,164334,469],{"class":75},[58,164336,69901],{"class":386},[58,164338,799],{"class":75},[175,164340,164341],{},"单元素元组必须加逗号：",[48,164343,164345],{"className":31022,"code":164344,"language":31024,"meta":53,"style":53},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[55,164346,164347,164361,164374,164378,164392],{"__ignoreMap":53},[58,164348,164349,164352,164354,164356,164358],{"class":60,"line":61},[58,164350,164351],{"class":75},"t1 ",[58,164353,383],{"class":92},[58,164355,2305],{"class":75},[58,164357,1232],{"class":82},[58,164359,164360],{"class":75},",)\n",[58,164362,164363,164366,164368,164370,164372],{"class":60,"line":68},[58,164364,164365],{"class":75},"t2 ",[58,164367,383],{"class":92},[58,164369,2305],{"class":75},[58,164371,1232],{"class":82},[58,164373,799],{"class":75},[58,164375,164376],{"class":60,"line":79},[58,164377,3046],{"emptyLinePlaceholder":720},[58,164379,164380,164382,164384,164386,164389],{"class":60,"line":105},[58,164381,31059],{"class":82},[58,164383,793],{"class":75},[58,164385,103736],{"class":82},[58,164387,164388],{"class":75},"(t1))  ",[58,164390,164391],{"class":64},"# tuple\n",[58,164393,164394,164396,164398,164400,164403],{"class":60,"line":627},[58,164395,31059],{"class":82},[58,164397,793],{"class":75},[58,164399,103736],{"class":82},[58,164401,164402],{"class":75},"(t2))  ",[58,164404,164405],{"class":64},"# int\n",[175,164407,164408],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164410,164412],{"id":164411},"_67-字符串str","6.7 字符串str",[175,164414,164415],{},"字符串也是序列，可以索引、切片和遍历。",[48,164417,164419],{"className":31022,"code":164418,"language":31024,"meta":53,"style":53},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[55,164420,164421,164429,164433,164444,164456,164460,164471],{"__ignoreMap":53},[58,164422,164423,164425,164427],{"class":60,"line":61},[58,164424,156923],{"class":75},[58,164426,383],{"class":92},[58,164428,160160],{"class":386},[58,164430,164431],{"class":60,"line":68},[58,164432,3046],{"emptyLinePlaceholder":720},[58,164434,164435,164437,164440,164442],{"class":60,"line":79},[58,164436,31059],{"class":82},[58,164438,164439],{"class":75},"(text[",[58,164441,979],{"class":82},[58,164443,5303],{"class":75},[58,164445,164446,164448,164450,164452,164454],{"class":60,"line":105},[58,164447,31059],{"class":82},[58,164449,164439],{"class":75},[58,164451,1318],{"class":92},[58,164453,89],{"class":82},[58,164455,5303],{"class":75},[58,164457,164458],{"class":60,"line":627},[58,164459,3046],{"emptyLinePlaceholder":720},[58,164461,164462,164464,164466,164468],{"class":60,"line":509},[58,164463,3671],{"class":92},[58,164465,160171],{"class":75},[58,164467,26687],{"class":92},[58,164469,164470],{"class":75}," text:\n",[58,164472,164473,164475],{"class":60,"line":559},[58,164474,31943],{"class":82},[58,164476,160182],{"class":75},[175,164478,164479],{},"字符串不可变：",[48,164481,164483],{"className":31022,"code":164482,"language":31024,"meta":53,"style":53},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[55,164484,164485,164493],{"__ignoreMap":53},[58,164486,164487,164489,164491],{"class":60,"line":61},[58,164488,156923],{"class":75},[58,164490,383],{"class":92},[58,164492,160160],{"class":386},[58,164494,164495,164498,164500,164502,164504,164507],{"class":60,"line":68},[58,164496,164497],{"class":75},"text[",[58,164499,979],{"class":82},[58,164501,5089],{"class":75},[58,164503,383],{"class":92},[58,164505,164506],{"class":386}," \"P\"",[58,164508,164509],{"class":64},"  # 报错\n",[175,164511,164512],{},"如果要得到新字符串：",[48,164514,164516],{"className":31022,"code":164515,"language":31024,"meta":53,"style":53},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[55,164517,164518,164526,164544],{"__ignoreMap":53},[58,164519,164520,164522,164524],{"class":60,"line":61},[58,164521,156923],{"class":75},[58,164523,383],{"class":92},[58,164525,160160],{"class":386},[58,164527,164528,164530,164532,164534,164536,164539,164541],{"class":60,"line":68},[58,164529,156923],{"class":75},[58,164531,383],{"class":92},[58,164533,164506],{"class":386},[58,164535,46210],{"class":92},[58,164537,164538],{"class":75}," text[",[58,164540,89],{"class":82},[58,164542,164543],{"class":75},":]\n",[58,164545,164546,164548],{"class":60,"line":79},[58,164547,31059],{"class":82},[58,164549,164550],{"class":75},"(text)\n",[14,164552,164554],{"id":164553},"_68-切片","6.8 切片",[175,164556,164557],{},"切片用于从序列中取一部分。",[48,164559,164561],{"className":31022,"code":164560,"language":31024,"meta":53,"style":53},"序列[开始:结束:步长]\n",[55,164562,164563],{"__ignoreMap":53},[58,164564,164565],{"class":60,"line":61},[58,164566,164560],{"class":75},[175,164568,164569],{},"结束位置不包含。",[48,164571,164573],{"className":31022,"code":164572,"language":31024,"meta":53,"style":53},"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",[55,164574,164575,164612,164616,164635,164650,164664,164678],{"__ignoreMap":53},[58,164576,164577,164580,164582,164584,164586,164588,164590,164592,164594,164596,164598,164600,164602,164604,164606,164608,164610],{"class":60,"line":61},[58,164578,164579],{"class":75},"nums ",[58,164581,383],{"class":92},[58,164583,52864],{"class":75},[58,164585,979],{"class":82},[58,164587,469],{"class":75},[58,164589,89],{"class":82},[58,164591,469],{"class":75},[58,164593,867],{"class":82},[58,164595,469],{"class":75},[58,164597,861],{"class":82},[58,164599,469],{"class":75},[58,164601,1079],{"class":82},[58,164603,469],{"class":75},[58,164605,1105],{"class":82},[58,164607,469],{"class":75},[58,164609,1130],{"class":82},[58,164611,33890],{"class":75},[58,164613,164614],{"class":60,"line":68},[58,164615,3046],{"emptyLinePlaceholder":720},[58,164617,164618,164620,164623,164625,164627,164629,164632],{"class":60,"line":79},[58,164619,31059],{"class":82},[58,164621,164622],{"class":75},"(nums[",[58,164624,89],{"class":82},[58,164626,1644],{"class":75},[58,164628,1079],{"class":82},[58,164630,164631],{"class":75},"])    ",[58,164633,164634],{"class":64},"# [1, 2, 3]\n",[58,164636,164637,164639,164642,164644,164647],{"class":60,"line":105},[58,164638,31059],{"class":82},[58,164640,164641],{"class":75},"(nums[:",[58,164643,861],{"class":82},[58,164645,164646],{"class":75},"])     ",[58,164648,164649],{"class":64},"# [0, 1, 2]\n",[58,164651,164652,164654,164656,164658,164661],{"class":60,"line":627},[58,164653,31059],{"class":82},[58,164655,164622],{"class":75},[58,164657,861],{"class":82},[58,164659,164660],{"class":75},":])     ",[58,164662,164663],{"class":64},"# [3, 4, 5, 6]\n",[58,164665,164666,164668,164671,164673,164675],{"class":60,"line":509},[58,164667,31059],{"class":82},[58,164669,164670],{"class":75},"(nums[::",[58,164672,867],{"class":82},[58,164674,164631],{"class":75},[58,164676,164677],{"class":64},"# [0, 2, 4, 6]\n",[58,164679,164680,164682,164684,164686,164688,164691],{"class":60,"line":559},[58,164681,31059],{"class":82},[58,164683,164670],{"class":75},[58,164685,1318],{"class":92},[58,164687,89],{"class":82},[58,164689,164690],{"class":75},"])   ",[58,164692,164693],{"class":64},"# 反转\n",[175,164695,164696],{},"字符串切片：",[48,164698,164700],{"className":31022,"code":164699,"language":31024,"meta":53,"style":53},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[55,164701,164702,164711,164725],{"__ignoreMap":53},[58,164703,164704,164706,164708],{"class":60,"line":61},[58,164705,156923],{"class":75},[58,164707,383],{"class":92},[58,164709,164710],{"class":386}," \"abcdef\"\n",[58,164712,164713,164715,164717,164719,164721,164723],{"class":60,"line":68},[58,164714,31059],{"class":82},[58,164716,164439],{"class":75},[58,164718,89],{"class":82},[58,164720,1644],{"class":75},[58,164722,1079],{"class":82},[58,164724,5303],{"class":75},[58,164726,164727,164729,164732,164734,164736],{"class":60,"line":79},[58,164728,31059],{"class":82},[58,164730,164731],{"class":75},"(text[::",[58,164733,1318],{"class":92},[58,164735,89],{"class":82},[58,164737,5303],{"class":75},[14,164739,164741],{"id":164740},"_69-集合set","6.9 集合set",[175,164743,164744],{},"集合特点：",[19,164746,164747,164750,164753],{},[22,164748,164749],{},"无序。",[22,164751,164752],{},"元素不重复。",[22,164754,164755],{},"可以做交集、并集、差集。",[48,164757,164759],{"className":31022,"code":164758,"language":31024,"meta":53,"style":53},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[55,164760,164761,164789],{"__ignoreMap":53},[58,164762,164763,164765,164767,164769,164771,164773,164775,164777,164779,164781,164783,164785,164787],{"class":60,"line":61},[58,164764,164579],{"class":75},[58,164766,383],{"class":92},[58,164768,5094],{"class":75},[58,164770,89],{"class":82},[58,164772,469],{"class":75},[58,164774,867],{"class":82},[58,164776,469],{"class":75},[58,164778,861],{"class":82},[58,164780,469],{"class":75},[58,164782,861],{"class":82},[58,164784,469],{"class":75},[58,164786,1079],{"class":82},[58,164788,108],{"class":75},[58,164790,164791,164793],{"class":60,"line":68},[58,164792,31059],{"class":82},[58,164794,164795],{"class":75},"(nums)\n",[175,164797,164798],{},"创建空集合：",[48,164800,164802],{"className":31022,"code":164801,"language":31024,"meta":53,"style":53},"s = set()\n",[55,164803,164804],{"__ignoreMap":53},[58,164805,164806,164808,164810,164812],{"class":60,"line":61},[58,164807,11224],{"class":75},[58,164809,383],{"class":92},[58,164811,120351],{"class":82},[58,164813,2622],{"class":75},[175,164815,195,164816,164818],{},[55,164817,33103],{}," 是空字典，不是空集合。",[175,164820,164821],{},"集合常用操作：",[48,164823,164825],{"className":31022,"code":164824,"language":31024,"meta":53,"style":53},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[55,164826,164827,164847,164851,164860,164869,164878],{"__ignoreMap":53},[58,164828,164829,164831,164833,164835,164837,164839,164841,164843,164845],{"class":60,"line":61},[58,164830,11224],{"class":75},[58,164832,383],{"class":92},[58,164834,5094],{"class":75},[58,164836,89],{"class":82},[58,164838,469],{"class":75},[58,164840,867],{"class":82},[58,164842,469],{"class":75},[58,164844,861],{"class":82},[58,164846,108],{"class":75},[58,164848,164849],{"class":60,"line":68},[58,164850,3046],{"emptyLinePlaceholder":720},[58,164852,164853,164856,164858],{"class":60,"line":79},[58,164854,164855],{"class":75},"s.add(",[58,164857,1079],{"class":82},[58,164859,799],{"class":75},[58,164861,164862,164865,164867],{"class":60,"line":105},[58,164863,164864],{"class":75},"s.remove(",[58,164866,867],{"class":82},[58,164868,799],{"class":75},[58,164870,164871,164874,164876],{"class":60,"line":627},[58,164872,164873],{"class":75},"s.discard(",[58,164875,1232],{"class":82},[58,164877,799],{"class":75},[58,164879,164880,164882,164884,164886],{"class":60,"line":509},[58,164881,31059],{"class":82},[58,164883,793],{"class":75},[58,164885,8004],{"class":82},[58,164887,164888],{"class":75},"(s))\n",[175,164890,164891],{},"交并差：",[48,164893,164895],{"className":31022,"code":164894,"language":31024,"meta":53,"style":53},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[55,164896,164897,164917,164937,164941,164956,164969],{"__ignoreMap":53},[58,164898,164899,164901,164903,164905,164907,164909,164911,164913,164915],{"class":60,"line":61},[58,164900,11564],{"class":75},[58,164902,383],{"class":92},[58,164904,5094],{"class":75},[58,164906,89],{"class":82},[58,164908,469],{"class":75},[58,164910,867],{"class":82},[58,164912,469],{"class":75},[58,164914,861],{"class":82},[58,164916,108],{"class":75},[58,164918,164919,164921,164923,164925,164927,164929,164931,164933,164935],{"class":60,"line":68},[58,164920,11590],{"class":75},[58,164922,383],{"class":92},[58,164924,5094],{"class":75},[58,164926,861],{"class":82},[58,164928,469],{"class":75},[58,164930,1079],{"class":82},[58,164932,469],{"class":75},[58,164934,1105],{"class":82},[58,164936,108],{"class":75},[58,164938,164939],{"class":60,"line":79},[58,164940,3046],{"emptyLinePlaceholder":720},[58,164942,164943,164945,164948,164950,164953],{"class":60,"line":105},[58,164944,31059],{"class":82},[58,164946,164947],{"class":75},"(a ",[58,164949,1139],{"class":92},[58,164951,164952],{"class":75}," b)  ",[58,164954,164955],{"class":64},"# 交集\n",[58,164957,164958,164960,164962,164964,164966],{"class":60,"line":627},[58,164959,31059],{"class":82},[58,164961,164947],{"class":75},[58,164963,1705],{"class":92},[58,164965,164952],{"class":75},[58,164967,164968],{"class":64},"# 并集\n",[58,164970,164971,164973,164975,164977,164979],{"class":60,"line":509},[58,164972,31059],{"class":82},[58,164974,164947],{"class":75},[58,164976,1318],{"class":92},[58,164978,164952],{"class":75},[58,164980,164981],{"class":64},"# 差集\n",[14,164983,164985],{"id":164984},"_610-字典dict","6.10 字典dict",[175,164987,164988],{},"字典通过 key-value 保存数据。",[48,164990,164992],{"className":31022,"code":164991,"language":31024,"meta":53,"style":53},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[55,164993,164994,165002,165012,165023,165033],{"__ignoreMap":53},[58,164995,164996,164998,165000],{"class":60,"line":61},[58,164997,149960],{"class":75},[58,164999,383],{"class":92},[58,165001,76],{"class":75},[58,165003,165004,165006,165008,165010],{"class":60,"line":68},[58,165005,147499],{"class":386},[58,165007,86],{"class":75},[58,165009,150367],{"class":386},[58,165011,32110],{"class":75},[58,165013,165014,165017,165019,165021],{"class":60,"line":79},[58,165015,165016],{"class":386},"    \"age\"",[58,165018,86],{"class":75},[58,165020,1436],{"class":82},[58,165022,32110],{"class":75},[58,165024,165025,165028,165030],{"class":60,"line":105},[58,165026,165027],{"class":386},"    \"score\"",[58,165029,86],{"class":75},[58,165031,165032],{"class":82},"95\n",[58,165034,165035],{"class":60,"line":627},[58,165036,108],{"class":75},[175,165038,165039],{},"获取值：",[48,165041,165043],{"className":31022,"code":165042,"language":31024,"meta":53,"style":53},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[55,165044,165045,165056],{"__ignoreMap":53},[58,165046,165047,165049,165052,165054],{"class":60,"line":61},[58,165048,31059],{"class":82},[58,165050,165051],{"class":75},"(student[",[58,165053,63311],{"class":386},[58,165055,5303],{"class":75},[58,165057,165058,165060,165063,165065],{"class":60,"line":68},[58,165059,31059],{"class":82},[58,165061,165062],{"class":75},"(student.get(",[58,165064,63311],{"class":386},[58,165066,31141],{"class":75},[175,165068,16032],{},[48,165070,165072],{"className":31022,"code":165071,"language":31024,"meta":53,"style":53},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[55,165073,165074,165087],{"__ignoreMap":53},[58,165075,165076,165078,165081,165084],{"class":60,"line":61},[58,165077,153338],{"class":75},[58,165079,165080],{"class":386},"\"address\"",[58,165082,165083],{"class":75},"]     ",[58,165085,165086],{"class":64},"# key不存在会报错\n",[58,165088,165089,165092,165094,165096],{"class":60,"line":68},[58,165090,165091],{"class":75},"student.get(",[58,165093,165080],{"class":386},[58,165095,14358],{"class":75},[58,165097,165098],{"class":64},"# key不存在返回None\n",[175,165100,165101],{},"设置默认值：",[48,165103,165105],{"className":31022,"code":165104,"language":31024,"meta":53,"style":53},"print(student.get(\"address\", \"未知\"))\n",[55,165106,165107],{"__ignoreMap":53},[58,165108,165109,165111,165113,165115,165117,165120],{"class":60,"line":61},[58,165110,31059],{"class":82},[58,165112,165062],{"class":75},[58,165114,165080],{"class":386},[58,165116,469],{"class":75},[58,165118,165119],{"class":386},"\"未知\"",[58,165121,31141],{"class":75},[175,165123,165124],{},"新增和修改：",[48,165126,165128],{"className":31022,"code":165127,"language":31024,"meta":53,"style":53},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[55,165129,165130,165143],{"__ignoreMap":53},[58,165131,165132,165134,165136,165138,165140],{"class":60,"line":61},[58,165133,153338],{"class":75},[58,165135,69756],{"class":386},[58,165137,5089],{"class":75},[58,165139,383],{"class":92},[58,165141,165142],{"class":82}," 19\n",[58,165144,165145,165147,165149,165151,165153],{"class":60,"line":68},[58,165146,153338],{"class":75},[58,165148,165080],{"class":386},[58,165150,5089],{"class":75},[58,165152,383],{"class":92},[58,165154,165155],{"class":386}," \"北京\"\n",[175,165157,165158],{},"删除：",[48,165160,165162],{"className":31022,"code":165161,"language":31024,"meta":53,"style":53},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[55,165163,165164,165177,165187],{"__ignoreMap":53},[58,165165,165166,165168,165170,165173,165175],{"class":60,"line":61},[58,165167,155837],{"class":75},[58,165169,383],{"class":92},[58,165171,165172],{"class":75}," student.pop(",[58,165174,151951],{"class":386},[58,165176,799],{"class":75},[58,165178,165179,165181,165183,165185],{"class":60,"line":68},[58,165180,163862],{"class":92},[58,165182,152628],{"class":75},[58,165184,69756],{"class":386},[58,165186,33890],{"class":75},[58,165188,165189],{"class":60,"line":79},[58,165190,165191],{"class":75},"student.clear()\n",[14,165193,165195],{"id":165194},"_611-字典遍历","6.11 字典遍历",[175,165197,165198],{},"遍历 key：",[48,165200,165202],{"className":31022,"code":165201,"language":31024,"meta":53,"style":53},"for key in student:\n    print(key, student[key])\n",[55,165203,165204,165216],{"__ignoreMap":53},[58,165205,165206,165208,165211,165213],{"class":60,"line":61},[58,165207,3671],{"class":92},[58,165209,165210],{"class":75}," key ",[58,165212,26687],{"class":92},[58,165214,165215],{"class":75}," student:\n",[58,165217,165218,165220],{"class":60,"line":68},[58,165219,31943],{"class":82},[58,165221,165222],{"class":75},"(key, student[key])\n",[175,165224,165225],{},"遍历 value：",[48,165227,165229],{"className":31022,"code":165228,"language":31024,"meta":53,"style":53},"for value in student.values():\n    print(value)\n",[55,165230,165231,165243],{"__ignoreMap":53},[58,165232,165233,165235,165238,165240],{"class":60,"line":61},[58,165234,3671],{"class":92},[58,165236,165237],{"class":75}," value ",[58,165239,26687],{"class":92},[58,165241,165242],{"class":75}," student.values():\n",[58,165244,165245,165247],{"class":60,"line":68},[58,165246,31943],{"class":82},[58,165248,165249],{"class":75},"(value)\n",[175,165251,165252],{},"遍历 key 和 value：",[48,165254,165256],{"className":31022,"code":165255,"language":31024,"meta":53,"style":53},"for key, value in student.items():\n    print(key, value)\n",[55,165257,165258,165270],{"__ignoreMap":53},[58,165259,165260,165262,165265,165267],{"class":60,"line":61},[58,165261,3671],{"class":92},[58,165263,165264],{"class":75}," key, value ",[58,165266,26687],{"class":92},[58,165268,165269],{"class":75}," student.items():\n",[58,165271,165272,165274],{"class":60,"line":68},[58,165273,31943],{"class":82},[58,165275,165276],{"class":75},"(key, value)\n",[14,165278,165280],{"id":165279},"_612-嵌套容器","6.12 嵌套容器",[175,165282,165283],{},"列表中保存字典，是项目中最常见的结构之一。",[48,165285,165287],{"className":31022,"code":165286,"language":31024,"meta":53,"style":53},"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",[55,165288,165289,165297,165325,165353,165381,165385,165389,165399],{"__ignoreMap":53},[58,165290,165291,165293,165295],{"class":60,"line":61},[58,165292,160195],{"class":75},[58,165294,383],{"class":92},[58,165296,56081],{"class":75},[58,165298,165299,165301,165303,165305,165307,165309,165311,165313,165315,165317,165319,165321,165323],{"class":60,"line":68},[58,165300,148864],{"class":75},[58,165302,63311],{"class":386},[58,165304,86],{"class":75},[58,165306,150367],{"class":386},[58,165308,469],{"class":75},[58,165310,69756],{"class":386},[58,165312,86],{"class":75},[58,165314,1436],{"class":82},[58,165316,469],{"class":75},[58,165318,151951],{"class":386},[58,165320,86],{"class":75},[58,165322,1773],{"class":82},[58,165324,5576],{"class":75},[58,165326,165327,165329,165331,165333,165335,165337,165339,165341,165343,165345,165347,165349,165351],{"class":60,"line":79},[58,165328,148864],{"class":75},[58,165330,63311],{"class":386},[58,165332,86],{"class":75},[58,165334,151415],{"class":386},[58,165336,469],{"class":75},[58,165338,69756],{"class":386},[58,165340,86],{"class":75},[58,165342,1411],{"class":82},[58,165344,469],{"class":75},[58,165346,151951],{"class":386},[58,165348,86],{"class":75},[58,165350,1596],{"class":82},[58,165352,5576],{"class":75},[58,165354,165355,165357,165359,165361,165363,165365,165367,165369,165371,165373,165375,165377,165379],{"class":60,"line":105},[58,165356,148864],{"class":75},[58,165358,63311],{"class":386},[58,165360,86],{"class":75},[58,165362,160210],{"class":386},[58,165364,469],{"class":75},[58,165366,69756],{"class":386},[58,165368,86],{"class":75},[58,165370,1461],{"class":82},[58,165372,469],{"class":75},[58,165374,151951],{"class":386},[58,165376,86],{"class":75},[58,165378,1192],{"class":82},[58,165380,5576],{"class":75},[58,165382,165383],{"class":60,"line":627},[58,165384,33890],{"class":75},[58,165386,165387],{"class":60,"line":509},[58,165388,3046],{"emptyLinePlaceholder":720},[58,165390,165391,165393,165395,165397],{"class":60,"line":559},[58,165392,3671],{"class":92},[58,165394,152616],{"class":75},[58,165396,26687],{"class":92},[58,165398,152621],{"class":75},[58,165400,165401,165403,165405,165407,165410,165412],{"class":60,"line":654},[58,165402,31943],{"class":82},[58,165404,165051],{"class":75},[58,165406,63311],{"class":386},[58,165408,165409],{"class":75},"], student[",[58,165411,151951],{"class":386},[58,165413,5303],{"class":75},[175,165415,165416],{},"统计平均分：",[48,165418,165420],{"className":31022,"code":165419,"language":31024,"meta":53,"style":53},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[55,165421,165422,165430,165434,165444,165456,165460,165475],{"__ignoreMap":53},[58,165423,165424,165426,165428],{"class":60,"line":61},[58,165425,157739],{"class":75},[58,165427,383],{"class":92},[58,165429,47977],{"class":82},[58,165431,165432],{"class":60,"line":68},[58,165433,3046],{"emptyLinePlaceholder":720},[58,165435,165436,165438,165440,165442],{"class":60,"line":79},[58,165437,3671],{"class":92},[58,165439,152616],{"class":75},[58,165441,26687],{"class":92},[58,165443,152621],{"class":75},[58,165445,165446,165448,165450,165452,165454],{"class":60,"line":105},[58,165447,159786],{"class":75},[58,165449,10122],{"class":92},[58,165451,152628],{"class":75},[58,165453,151951],{"class":386},[58,165455,33890],{"class":75},[58,165457,165458],{"class":60,"line":627},[58,165459,3046],{"emptyLinePlaceholder":720},[58,165461,165462,165464,165466,165468,165470,165472],{"class":60,"line":509},[58,165463,164253],{"class":75},[58,165465,383],{"class":92},[58,165467,164258],{"class":75},[58,165469,1370],{"class":92},[58,165471,7977],{"class":82},[58,165473,165474],{"class":75},"(students)\n",[58,165476,165477,165479,165481,165483,165485,165487,165489,165491,165493,165495],{"class":60,"line":559},[58,165478,31059],{"class":82},[58,165480,793],{"class":75},[58,165482,843],{"class":92},[58,165484,164276],{"class":386},[58,165486,1681],{"class":82},[58,165488,164281],{"class":75},[58,165490,157638],{"class":92},[58,165492,1730],{"class":82},[58,165494,1037],{"class":386},[58,165496,799],{"class":75},[175,165498,165499],{},"查找学生：",[48,165501,165503],{"className":31022,"code":165502,"language":31024,"meta":53,"style":53},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[55,165504,165505,165520,165524,165534,165548,165554,165558,165564],{"__ignoreMap":53},[58,165506,165507,165509,165511,165513,165515,165518],{"class":60,"line":61},[58,165508,112207],{"class":75},[58,165510,383],{"class":92},[58,165512,61239],{"class":82},[58,165514,793],{"class":75},[58,165516,165517],{"class":386},"\"请输入学生姓名:\"",[58,165519,799],{"class":75},[58,165521,165522],{"class":60,"line":68},[58,165523,3046],{"emptyLinePlaceholder":720},[58,165525,165526,165528,165530,165532],{"class":60,"line":79},[58,165527,3671],{"class":92},[58,165529,152616],{"class":75},[58,165531,26687],{"class":92},[58,165533,152621],{"class":75},[58,165535,165536,165538,165540,165542,165544,165546],{"class":60,"line":105},[58,165537,3747],{"class":92},[58,165539,152628],{"class":75},[58,165541,63311],{"class":386},[58,165543,5089],{"class":75},[58,165545,3595],{"class":92},[58,165547,160911],{"class":75},[58,165549,165550,165552],{"class":60,"line":627},[58,165551,33095],{"class":82},[58,165553,150521],{"class":75},[58,165555,165556],{"class":60,"line":509},[58,165557,32271],{"class":92},[58,165559,165560,165562],{"class":60,"line":559},[58,165561,2348],{"class":92},[58,165563,4385],{"class":75},[58,165565,165566,165568,165570,165573],{"class":60,"line":654},[58,165567,31943],{"class":82},[58,165569,793],{"class":75},[58,165571,165572],{"class":386},"\"没有找到\"",[58,165574,799],{"class":75},[14,165576,165578],{"id":165577},"_613-容器通用操作","6.13 容器通用操作",[175,165580,165581],{},"长度：",[48,165583,165585],{"className":31022,"code":165584,"language":31024,"meta":53,"style":53},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[55,165586,165587,165606,165616],{"__ignoreMap":53},[58,165588,165589,165591,165594,165596,165598,165600,165602,165604],{"class":60,"line":61},[58,165590,8004],{"class":82},[58,165592,165593],{"class":75},"([",[58,165595,89],{"class":82},[58,165597,469],{"class":75},[58,165599,867],{"class":82},[58,165601,469],{"class":75},[58,165603,861],{"class":82},[58,165605,5303],{"class":75},[58,165607,165608,165610,165612,165614],{"class":60,"line":68},[58,165609,8004],{"class":82},[58,165611,793],{"class":75},[58,165613,156359],{"class":386},[58,165615,799],{"class":75},[58,165617,165618,165620,165623,165625,165627,165629],{"class":60,"line":79},[58,165619,8004],{"class":82},[58,165621,165622],{"class":75},"({",[58,165624,63311],{"class":386},[58,165626,86],{"class":75},[58,165628,150367],{"class":386},[58,165630,165631],{"class":75},"})\n",[175,165633,165634],{},"最大最小：",[48,165636,165638],{"className":31022,"code":165637,"language":31024,"meta":53,"style":53},"max([1, 2, 3])\nmin([1, 2, 3])\n",[55,165639,165640,165658],{"__ignoreMap":53},[58,165641,165642,165644,165646,165648,165650,165652,165654,165656],{"class":60,"line":61},[58,165643,6661],{"class":82},[58,165645,165593],{"class":75},[58,165647,89],{"class":82},[58,165649,469],{"class":75},[58,165651,867],{"class":82},[58,165653,469],{"class":75},[58,165655,861],{"class":82},[58,165657,5303],{"class":75},[58,165659,165660,165663,165665,165667,165669,165671,165673,165675],{"class":60,"line":68},[58,165661,165662],{"class":82},"min",[58,165664,165593],{"class":75},[58,165666,89],{"class":82},[58,165668,469],{"class":75},[58,165670,867],{"class":82},[58,165672,469],{"class":75},[58,165674,861],{"class":82},[58,165676,5303],{"class":75},[175,165678,165679],{},"求和：",[48,165681,165683],{"className":31022,"code":165682,"language":31024,"meta":53,"style":53},"sum([1, 2, 3])\n",[55,165684,165685],{"__ignoreMap":53},[58,165686,165687,165690,165692,165694,165696,165698,165700,165702],{"class":60,"line":61},[58,165688,165689],{"class":82},"sum",[58,165691,165593],{"class":75},[58,165693,89],{"class":82},[58,165695,469],{"class":75},[58,165697,867],{"class":82},[58,165699,469],{"class":75},[58,165701,861],{"class":82},[58,165703,5303],{"class":75},[175,165705,163950],{},[48,165707,165709],{"className":31022,"code":165708,"language":31024,"meta":53,"style":53},"sorted([3, 1, 2])\n",[55,165710,165711],{"__ignoreMap":53},[58,165712,165713,165716,165718,165720,165722,165724,165726,165728],{"class":60,"line":61},[58,165714,165715],{"class":82},"sorted",[58,165717,165593],{"class":75},[58,165719,861],{"class":82},[58,165721,469],{"class":75},[58,165723,89],{"class":82},[58,165725,469],{"class":75},[58,165727,867],{"class":82},[58,165729,5303],{"class":75},[175,165731,165732],{},"类型转换：",[48,165734,165736],{"className":31022,"code":165735,"language":31024,"meta":53,"style":53},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[55,165737,165738,165748,165766],{"__ignoreMap":53},[58,165739,165740,165742,165744,165746],{"class":60,"line":61},[58,165741,154549],{"class":82},[58,165743,793],{"class":75},[58,165745,156359],{"class":386},[58,165747,799],{"class":75},[58,165749,165750,165752,165754,165756,165758,165760,165762,165764],{"class":60,"line":68},[58,165751,155744],{"class":82},[58,165753,165593],{"class":75},[58,165755,89],{"class":82},[58,165757,469],{"class":75},[58,165759,867],{"class":82},[58,165761,469],{"class":75},[58,165763,861],{"class":82},[58,165765,5303],{"class":75},[58,165767,165768,165770,165772,165774,165776,165778,165780,165782,165784,165786],{"class":60,"line":79},[58,165769,155769],{"class":82},[58,165771,165593],{"class":75},[58,165773,89],{"class":82},[58,165775,469],{"class":75},[58,165777,89],{"class":82},[58,165779,469],{"class":75},[58,165781,867],{"class":82},[58,165783,469],{"class":75},[58,165785,861],{"class":82},[58,165787,5303],{"class":75},[175,165789,165790],{},"成员判断：",[48,165792,165794],{"className":31022,"code":165793,"language":31024,"meta":53,"style":53},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[55,165795,165796,165813,165837],{"__ignoreMap":53},[58,165797,165798,165800,165802,165805,165808,165811],{"class":60,"line":61},[58,165799,31059],{"class":82},[58,165801,793],{"class":75},[58,165803,165804],{"class":386},"\"a\"",[58,165806,165807],{"class":92}," in",[58,165809,165810],{"class":386}," \"abc\"",[58,165812,799],{"class":75},[58,165814,165815,165817,165819,165821,165823,165825,165827,165829,165831,165833,165835],{"class":60,"line":68},[58,165816,31059],{"class":82},[58,165818,793],{"class":75},[58,165820,89],{"class":82},[58,165822,165807],{"class":92},[58,165824,52864],{"class":75},[58,165826,89],{"class":82},[58,165828,469],{"class":75},[58,165830,867],{"class":82},[58,165832,469],{"class":75},[58,165834,861],{"class":82},[58,165836,5303],{"class":75},[58,165838,165839,165841,165843,165845,165847,165849,165851,165853,165855],{"class":60,"line":79},[58,165840,31059],{"class":82},[58,165842,793],{"class":75},[58,165844,63311],{"class":386},[58,165846,165807],{"class":92},[58,165848,5094],{"class":75},[58,165850,63311],{"class":386},[58,165852,86],{"class":75},[58,165854,150367],{"class":386},[58,165856,165631],{"class":75},[14,165858,165860],{"id":165859},"_614-推导式","6.14 推导式",[175,165862,165863],{},"推导式用于快速生成容器。",[175,165865,165866],{},"列表推导式：",[48,165868,165870],{"className":31022,"code":165869,"language":31024,"meta":53,"style":53},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[55,165871,165872,165899],{"__ignoreMap":53},[58,165873,165874,165876,165878,165881,165883,165885,165887,165889,165891,165893,165895,165897],{"class":60,"line":61},[58,165875,164579],{"class":75},[58,165877,383],{"class":92},[58,165879,165880],{"class":75}," [i ",[58,165882,3671],{"class":92},[58,165884,10083],{"class":75},[58,165886,26687],{"class":92},[58,165888,33087],{"class":82},[58,165890,793],{"class":75},[58,165892,89],{"class":82},[58,165894,469],{"class":75},[58,165896,1130],{"class":82},[58,165898,97929],{"class":75},[58,165900,165901,165903],{"class":60,"line":68},[58,165902,31059],{"class":82},[58,165904,164795],{"class":75},[175,165906,165907],{},"带条件：",[48,165909,165911],{"className":31022,"code":165910,"language":31024,"meta":53,"style":53},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[55,165912,165913,165954],{"__ignoreMap":53},[58,165914,165915,165918,165920,165922,165924,165926,165928,165930,165932,165934,165936,165938,165940,165942,165944,165946,165948,165950,165952],{"class":60,"line":61},[58,165916,165917],{"class":75},"even_nums ",[58,165919,383],{"class":92},[58,165921,165880],{"class":75},[58,165923,3671],{"class":92},[58,165925,10083],{"class":75},[58,165927,26687],{"class":92},[58,165929,33087],{"class":82},[58,165931,793],{"class":75},[58,165933,89],{"class":82},[58,165935,469],{"class":75},[58,165937,1123],{"class":82},[58,165939,14358],{"class":75},[58,165941,2180],{"class":92},[58,165943,10083],{"class":75},[58,165945,1114],{"class":92},[58,165947,15399],{"class":82},[58,165949,102188],{"class":92},[58,165951,4739],{"class":82},[58,165953,33890],{"class":75},[58,165955,165956,165958],{"class":60,"line":68},[58,165957,31059],{"class":82},[58,165959,165960],{"class":75},"(even_nums)\n",[175,165962,165963],{},"字典推导式：",[48,165965,165967],{"className":31022,"code":165966,"language":31024,"meta":53,"style":53},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[55,165968,165969,166003],{"__ignoreMap":53},[58,165970,165971,165974,165976,165979,165981,165983,165986,165988,165990,165992,165994,165996,165998,166000],{"class":60,"line":61},[58,165972,165973],{"class":75},"squares ",[58,165975,383],{"class":92},[58,165977,165978],{"class":75}," {i: i ",[58,165980,11306],{"class":92},[58,165982,15399],{"class":82},[58,165984,165985],{"class":92}," for",[58,165987,10083],{"class":75},[58,165989,26687],{"class":92},[58,165991,33087],{"class":82},[58,165993,793],{"class":75},[58,165995,89],{"class":82},[58,165997,469],{"class":75},[58,165999,1130],{"class":82},[58,166001,166002],{"class":75},")}\n",[58,166004,166005,166007],{"class":60,"line":68},[58,166006,31059],{"class":82},[58,166008,166009],{"class":75},"(squares)\n",[175,166011,166012],{},"集合推导式：",[48,166014,166016],{"className":31022,"code":166015,"language":31024,"meta":53,"style":53},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[55,166017,166018,166039],{"__ignoreMap":53},[58,166019,166020,166023,166025,166028,166030,166032,166034,166037],{"class":60,"line":61},[58,166021,166022],{"class":75},"chars ",[58,166024,383],{"class":92},[58,166026,166027],{"class":75}," {ch ",[58,166029,3671],{"class":92},[58,166031,160171],{"class":75},[58,166033,26687],{"class":92},[58,166035,166036],{"class":386}," \"hello\"",[58,166038,108],{"class":75},[58,166040,166041,166043],{"class":60,"line":68},[58,166042,31059],{"class":82},[58,166044,166045],{"class":75},"(chars)\n",[175,166047,166048],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166050,166052],{"id":166051},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[48,166054,166056],{"className":31022,"code":166055,"language":31024,"meta":53,"style":53},"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",[55,166057,166058,166066,166086,166106,166126,166146,166150,166154,166162,166176,166185,166189,166199,166211,166215,166235,166244,166248,166264,166269,166273,166287,166291,166313,166349],{"__ignoreMap":53},[58,166059,166060,166062,166064],{"class":60,"line":61},[58,166061,160195],{"class":75},[58,166063,383],{"class":92},[58,166065,56081],{"class":75},[58,166067,166068,166070,166072,166074,166076,166078,166080,166082,166084],{"class":60,"line":68},[58,166069,148864],{"class":75},[58,166071,63311],{"class":386},[58,166073,86],{"class":75},[58,166075,150367],{"class":386},[58,166077,469],{"class":75},[58,166079,151951],{"class":386},[58,166081,86],{"class":75},[58,166083,1773],{"class":82},[58,166085,5576],{"class":75},[58,166087,166088,166090,166092,166094,166096,166098,166100,166102,166104],{"class":60,"line":79},[58,166089,148864],{"class":75},[58,166091,63311],{"class":386},[58,166093,86],{"class":75},[58,166095,151415],{"class":386},[58,166097,469],{"class":75},[58,166099,151951],{"class":386},[58,166101,86],{"class":75},[58,166103,1596],{"class":82},[58,166105,5576],{"class":75},[58,166107,166108,166110,166112,166114,166116,166118,166120,166122,166124],{"class":60,"line":105},[58,166109,148864],{"class":75},[58,166111,63311],{"class":386},[58,166113,86],{"class":75},[58,166115,160210],{"class":386},[58,166117,469],{"class":75},[58,166119,151951],{"class":386},[58,166121,86],{"class":75},[58,166123,1192],{"class":82},[58,166125,5576],{"class":75},[58,166127,166128,166130,166132,166134,166136,166138,166140,166142,166144],{"class":60,"line":627},[58,166129,148864],{"class":75},[58,166131,63311],{"class":386},[58,166133,86],{"class":75},[58,166135,163789],{"class":386},[58,166137,469],{"class":75},[58,166139,151951],{"class":386},[58,166141,86],{"class":75},[58,166143,1667],{"class":82},[58,166145,5576],{"class":75},[58,166147,166148],{"class":60,"line":509},[58,166149,33890],{"class":75},[58,166151,166152],{"class":60,"line":559},[58,166153,3046],{"emptyLinePlaceholder":720},[58,166155,166156,166158,166160],{"class":60,"line":654},[58,166157,157739],{"class":75},[58,166159,383],{"class":92},[58,166161,47977],{"class":82},[58,166163,166164,166167,166169,166172,166174],{"class":60,"line":671},[58,166165,166166],{"class":75},"max_student ",[58,166168,383],{"class":92},[58,166170,166171],{"class":75}," students[",[58,166173,979],{"class":82},[58,166175,33890],{"class":75},[58,166177,166178,166181,166183],{"class":60,"line":677},[58,166179,166180],{"class":75},"passed ",[58,166182,383],{"class":92},[58,166184,52476],{"class":75},[58,166186,166187],{"class":60,"line":2260},[58,166188,3046],{"emptyLinePlaceholder":720},[58,166190,166191,166193,166195,166197],{"class":60,"line":694},[58,166192,3671],{"class":92},[58,166194,152616],{"class":75},[58,166196,26687],{"class":92},[58,166198,152621],{"class":75},[58,166200,166201,166203,166205,166207,166209],{"class":60,"line":2270},[58,166202,159786],{"class":75},[58,166204,10122],{"class":92},[58,166206,152628],{"class":75},[58,166208,151951],{"class":386},[58,166210,33890],{"class":75},[58,166212,166213],{"class":60,"line":2275},[58,166214,3046],{"emptyLinePlaceholder":720},[58,166216,166217,166219,166221,166223,166225,166227,166230,166232],{"class":60,"line":2289},[58,166218,3747],{"class":92},[58,166220,152628],{"class":75},[58,166222,151951],{"class":386},[58,166224,5089],{"class":75},[58,166226,1744],{"class":92},[58,166228,166229],{"class":75}," max_student[",[58,166231,151951],{"class":386},[58,166233,166234],{"class":75},"]:\n",[58,166236,166237,166240,166242],{"class":60,"line":2294},[58,166238,166239],{"class":75},"        max_student ",[58,166241,383],{"class":92},[58,166243,152644],{"class":75},[58,166245,166246],{"class":60,"line":2300},[58,166247,3046],{"emptyLinePlaceholder":720},[58,166249,166250,166252,166254,166256,166258,166260,166262],{"class":60,"line":2321},[58,166251,3747],{"class":92},[58,166253,152628],{"class":75},[58,166255,151951],{"class":386},[58,166257,5089],{"class":75},[58,166259,2357],{"class":92},[58,166261,158316],{"class":82},[58,166263,4385],{"class":75},[58,166265,166266],{"class":60,"line":2326},[58,166267,166268],{"class":75},"        passed.append(student)\n",[58,166270,166271],{"class":60,"line":2340},[58,166272,3046],{"emptyLinePlaceholder":720},[58,166274,166275,166277,166279,166281,166283,166285],{"class":60,"line":2345},[58,166276,164253],{"class":75},[58,166278,383],{"class":92},[58,166280,164258],{"class":75},[58,166282,1370],{"class":92},[58,166284,7977],{"class":82},[58,166286,165474],{"class":75},[58,166288,166289],{"class":60,"line":2374},[58,166290,3046],{"emptyLinePlaceholder":720},[58,166292,166293,166295,166297,166299,166301,166303,166305,166307,166309,166311],{"class":60,"line":2379},[58,166294,31059],{"class":82},[58,166296,793],{"class":75},[58,166298,843],{"class":92},[58,166300,164276],{"class":386},[58,166302,1681],{"class":82},[58,166304,164281],{"class":75},[58,166306,157638],{"class":92},[58,166308,1730],{"class":82},[58,166310,1037],{"class":386},[58,166312,799],{"class":75},[58,166314,166315,166317,166319,166321,166324,166326,166329,166331,166333,166335,166337,166339,166341,166343,166345,166347],{"class":60,"line":2396},[58,166316,31059],{"class":82},[58,166318,793],{"class":75},[58,166320,843],{"class":92},[58,166322,166323],{"class":386},"\"最高分学生:",[58,166325,1681],{"class":82},[58,166327,166328],{"class":75},"max_student[",[58,166330,153361],{"class":386},[58,166332,1724],{"class":75},[58,166334,1730],{"class":82},[58,166336,5094],{"class":82},[58,166338,166328],{"class":75},[58,166340,153399],{"class":386},[58,166342,1724],{"class":75},[58,166344,1730],{"class":82},[58,166346,1037],{"class":386},[58,166348,799],{"class":75},[58,166350,166351,166353,166355,166357,166360,166363,166366,166368,166370],{"class":60,"line":2401},[58,166352,31059],{"class":82},[58,166354,793],{"class":75},[58,166356,843],{"class":92},[58,166358,166359],{"class":386},"\"及格人数:",[58,166361,166362],{"class":82},"{len",[58,166364,166365],{"class":75},"(passed)",[58,166367,1730],{"class":82},[58,166369,1037],{"class":386},[58,166371,799],{"class":75},[14,166373,166375],{"id":166374},"_616-易错点","6.16 易错点",[19,166377,166378,166381,166384,166387,166393,166402],{},[22,166379,166380],{},"列表可变，元组和字符串不可变。",[22,166382,166383],{},"切片结束位置不包含。",[22,166385,166386],{},"字典通过 key 取值，不是通过索引。",[22,166388,166389,166390,29029],{},"空集合要用 ",[55,166391,166392],{},"set()",[22,166394,104995,166395,166398,166399,29029],{},[55,166396,166397],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[55,166400,166401],{},"get()",[22,166403,166404],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166406,166408],{"id":166407},"_617-本章练习","6.17 本章练习",[19,166410,166411,166414,166417,166420,166423],{},[22,166412,166413],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[22,166415,166416],{},"输入一句话，统计每个字符出现次数。",[22,166418,166419],{},"使用集合去除列表中的重复元素。",[22,166421,166422],{},"使用字典保存一个学生的信息，并实现修改成绩。",[22,166424,166425],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[702,166427,166428],{},"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":53,"searchDepth":68,"depth":68,"links":166430},[166431,166432,166433,166434,166435,166436,166437,166438,166439,166440,166441,166442,166443,166444,166445,166446,166447],{"id":163411,"depth":68,"text":163412},{"id":163528,"depth":68,"text":163529},{"id":163618,"depth":68,"text":163619},{"id":163742,"depth":68,"text":163743},{"id":164105,"depth":68,"text":164106},{"id":164292,"depth":68,"text":164293},{"id":164411,"depth":68,"text":164412},{"id":164553,"depth":68,"text":164554},{"id":164740,"depth":68,"text":164741},{"id":164984,"depth":68,"text":164985},{"id":165194,"depth":68,"text":165195},{"id":165279,"depth":68,"text":165280},{"id":165577,"depth":68,"text":165578},{"id":165859,"depth":68,"text":165860},{"id":166051,"depth":68,"text":166052},{"id":166374,"depth":68,"text":166375},{"id":166407,"depth":68,"text":166408},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163403,"description":717},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166454,"title":166455,"body":166456,"description":717,"extension":718,"meta":168628,"navigation":720,"path":168629,"seo":168630,"stem":168631,"__hash__":168632},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166457,"toc":168603},[166458,166461,166465,166468,166548,166551,166572,166575,166579,166582,166644,166647,166664,166668,166671,166716,166718,166726,166730,166733,166815,166818,166821,166846,166849,166872,166876,166879,166881,166943,166946,166948,166999,167003,167007,167013,167118,167122,167128,167199,167203,167206,167274,167277,167357,167361,167367,167403,167406,167409,167519,167525,167529,167532,167604,167607,167611,167615,167620,167682,167686,167691,167759,167763,167768,167884,167888,167891,167971,167974,167978,167981,168085,168087,168102,168105,168109,168247,168255,168259,168261,168272,168274,168532,168536,168568,168572,168600],[10,166459,166455],{"id":166460},"_7-函数进阶",[14,166462,166464],{"id":166463},"_71-多返回值","7.1 多返回值",[175,166466,166467],{},"Python 函数可以返回多个值，本质上返回的是元组。",[48,166469,166471],{"className":31022,"code":166470,"language":31024,"meta":53,"style":53},"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",[55,166472,166473,166482,166490,166498,166507,166514,166518,166522,166531,166537],{"__ignoreMap":53},[58,166474,166475,166477,166480],{"class":60,"line":61},[58,166476,32591],{"class":92},[58,166478,166479],{"class":379}," get_info",[58,166481,32597],{"class":75},[58,166483,166484,166486,166488],{"class":60,"line":68},[58,166485,152849],{"class":75},[58,166487,383],{"class":92},[58,166489,149832],{"class":386},[58,166491,166492,166494,166496],{"class":60,"line":79},[58,166493,152865],{"class":75},[58,166495,383],{"class":92},[58,166497,147030],{"class":82},[58,166499,166500,166502,166504],{"class":60,"line":105},[58,166501,152880],{"class":75},[58,166503,383],{"class":92},[58,166505,166506],{"class":82}," 95\n",[58,166508,166509,166511],{"class":60,"line":627},[58,166510,4736],{"class":92},[58,166512,166513],{"class":75}," name, age, score\n",[58,166515,166516],{"class":60,"line":509},[58,166517,3046],{"emptyLinePlaceholder":720},[58,166519,166520],{"class":60,"line":559},[58,166521,3046],{"emptyLinePlaceholder":720},[58,166523,166524,166526,166528],{"class":60,"line":654},[58,166525,161785],{"class":75},[58,166527,383],{"class":92},[58,166529,166530],{"class":75}," get_info()\n",[58,166532,166533,166535],{"class":60,"line":671},[58,166534,31059],{"class":82},[58,166536,77216],{"class":75},[58,166538,166539,166541,166543,166545],{"class":60,"line":677},[58,166540,31059],{"class":82},[58,166542,793],{"class":75},[58,166544,103736],{"class":82},[58,166546,166547],{"class":75},"(result))\n",[175,166549,166550],{},"可以直接解包：",[48,166552,166554],{"className":31022,"code":166553,"language":31024,"meta":53,"style":53},"name, age, score = get_info()\nprint(name, age, score)\n",[55,166555,166556,166565],{"__ignoreMap":53},[58,166557,166558,166561,166563],{"class":60,"line":61},[58,166559,166560],{"class":75},"name, age, score ",[58,166562,383],{"class":92},[58,166564,166530],{"class":75},[58,166566,166567,166569],{"class":60,"line":68},[58,166568,31059],{"class":82},[58,166570,166571],{"class":75},"(name, age, score)\n",[175,166573,166574],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166576,166578],{"id":166577},"_72-位置参数","7.2 位置参数",[175,166580,166581],{},"位置参数按顺序传递。",[48,166583,166585],{"className":31022,"code":166584,"language":31024,"meta":53,"style":53},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[55,166586,166587,166595,166623,166627,166631],{"__ignoreMap":53},[58,166588,166589,166591,166593],{"class":60,"line":61},[58,166590,32591],{"class":92},[58,166592,149851],{"class":379},[58,166594,149854],{"class":75},[58,166596,166597,166599,166601,166603,166605,166607,166609,166611,166613,166615,166617,166619,166621],{"class":60,"line":68},[58,166598,31943],{"class":82},[58,166600,793],{"class":75},[58,166602,843],{"class":92},[58,166604,149865],{"class":386},[58,166606,1681],{"class":82},[58,166608,80440],{"class":75},[58,166610,1730],{"class":82},[58,166612,149874],{"class":386},[58,166614,1681],{"class":82},[58,166616,70853],{"class":75},[58,166618,1730],{"class":82},[58,166620,149883],{"class":386},[58,166622,799],{"class":75},[58,166624,166625],{"class":60,"line":79},[58,166626,3046],{"emptyLinePlaceholder":720},[58,166628,166629],{"class":60,"line":105},[58,166630,3046],{"emptyLinePlaceholder":720},[58,166632,166633,166636,166638,166640,166642],{"class":60,"line":627},[58,166634,166635],{"class":75},"introduce(",[58,166637,150367],{"class":386},[58,166639,469],{"class":75},[58,166641,1436],{"class":82},[58,166643,799],{"class":75},[175,166645,166646],{},"顺序错了就会得到错误含义：",[48,166648,166650],{"className":31022,"code":166649,"language":31024,"meta":53,"style":53},"introduce(18, \"小明\")\n",[55,166651,166652],{"__ignoreMap":53},[58,166653,166654,166656,166658,166660,166662],{"class":60,"line":61},[58,166655,166635],{"class":75},[58,166657,1436],{"class":82},[58,166659,469],{"class":75},[58,166661,150367],{"class":386},[58,166663,799],{"class":75},[14,166665,166667],{"id":166666},"_73-关键字参数","7.3 关键字参数",[175,166669,166670],{},"关键字参数按参数名传递。",[48,166672,166674],{"className":31022,"code":166673,"language":31024,"meta":53,"style":53},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[55,166675,166676,166696],{"__ignoreMap":53},[58,166677,166678,166680,166682,166684,166686,166688,166690,166692,166694],{"class":60,"line":61},[58,166679,166635],{"class":75},[58,166681,80440],{"class":5862},[58,166683,383],{"class":92},[58,166685,150367],{"class":386},[58,166687,469],{"class":75},[58,166689,70853],{"class":5862},[58,166691,383],{"class":92},[58,166693,1436],{"class":82},[58,166695,799],{"class":75},[58,166697,166698,166700,166702,166704,166706,166708,166710,166712,166714],{"class":60,"line":68},[58,166699,166635],{"class":75},[58,166701,70853],{"class":5862},[58,166703,383],{"class":92},[58,166705,1436],{"class":82},[58,166707,469],{"class":75},[58,166709,80440],{"class":5862},[58,166711,383],{"class":92},[58,166713,150367],{"class":386},[58,166715,799],{"class":75},[175,166717,118563],{},[19,166719,166720,166723],{},[22,166721,166722],{},"顺序不容易错。",[22,166724,166725],{},"调用时可读性更强。",[14,166727,166729],{"id":166728},"_74-默认参数","7.4 默认参数",[175,166731,166732],{},"默认参数给参数设置默认值。",[48,166734,166736],{"className":31022,"code":166735,"language":31024,"meta":53,"style":53},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[55,166737,166738,166754,166784,166788,166792,166802],{"__ignoreMap":53},[58,166739,166740,166742,166744,166747,166749,166752],{"class":60,"line":61},[58,166741,32591],{"class":92},[58,166743,122722],{"class":379},[58,166745,166746],{"class":75},"(host, port",[58,166748,383],{"class":92},[58,166750,166751],{"class":82},"3306",[58,166753,31430],{"class":75},[58,166755,166756,166758,166760,166762,166765,166767,166769,166771,166773,166775,166778,166780,166782],{"class":60,"line":68},[58,166757,31943],{"class":82},[58,166759,793],{"class":75},[58,166761,843],{"class":92},[58,166763,166764],{"class":386},"\"连接",[58,166766,1681],{"class":82},[58,166768,28039],{"class":75},[58,166770,1730],{"class":82},[58,166772,1644],{"class":386},[58,166774,1681],{"class":82},[58,166776,166777],{"class":75},"port",[58,166779,1730],{"class":82},[58,166781,1037],{"class":386},[58,166783,799],{"class":75},[58,166785,166786],{"class":60,"line":79},[58,166787,3046],{"emptyLinePlaceholder":720},[58,166789,166790],{"class":60,"line":105},[58,166791,3046],{"emptyLinePlaceholder":720},[58,166793,166794,166797,166800],{"class":60,"line":627},[58,166795,166796],{"class":75},"connect(",[58,166798,166799],{"class":386},"\"localhost\"",[58,166801,799],{"class":75},[58,166803,166804,166806,166808,166810,166813],{"class":60,"line":509},[58,166805,166796],{"class":75},[58,166807,166799],{"class":386},[58,166809,469],{"class":75},[58,166811,166812],{"class":82},"6379",[58,166814,799],{"class":75},[175,166816,166817],{},"注意：默认参数必须放在非默认参数后面。",[175,166819,166820],{},"错误：",[48,166822,166824],{"className":31022,"code":166823,"language":31024,"meta":53,"style":53},"def connect(port=3306, host):\n    pass\n",[55,166825,166826,166842],{"__ignoreMap":53},[58,166827,166828,166830,166832,166835,166837,166839],{"class":60,"line":61},[58,166829,32591],{"class":92},[58,166831,122722],{"class":379},[58,166833,166834],{"class":75},"(port",[58,166836,383],{"class":92},[58,166838,166751],{"class":82},[58,166840,166841],{"class":75},", host):\n",[58,166843,166844],{"class":60,"line":68},[58,166845,150016],{"class":92},[175,166847,166848],{},"正确：",[48,166850,166852],{"className":31022,"code":166851,"language":31024,"meta":53,"style":53},"def connect(host, port=3306):\n    pass\n",[55,166853,166854,166868],{"__ignoreMap":53},[58,166855,166856,166858,166860,166862,166864,166866],{"class":60,"line":61},[58,166857,32591],{"class":92},[58,166859,122722],{"class":379},[58,166861,166746],{"class":75},[58,166863,383],{"class":92},[58,166865,166751],{"class":82},[58,166867,31430],{"class":75},[58,166869,166870],{"class":60,"line":68},[58,166871,150016],{"class":92},[14,166873,166875],{"id":166874},"_75-默认参数的坑","7.5 默认参数的坑",[175,166877,166878],{},"不要使用可变对象作为默认参数。",[175,166880,158102],{},[48,166882,166884],{"className":31022,"code":166883,"language":31024,"meta":53,"style":53},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[55,166885,166886,166901,166906,166913,166917,166921,166932],{"__ignoreMap":53},[58,166887,166888,166890,166893,166896,166898],{"class":60,"line":61},[58,166889,32591],{"class":92},[58,166891,166892],{"class":379}," add_item",[58,166894,166895],{"class":75},"(item, items",[58,166897,383],{"class":92},[58,166899,166900],{"class":75},"[]):\n",[58,166902,166903],{"class":60,"line":68},[58,166904,166905],{"class":75},"    items.append(item)\n",[58,166907,166908,166910],{"class":60,"line":79},[58,166909,4736],{"class":92},[58,166911,166912],{"class":75}," items\n",[58,166914,166915],{"class":60,"line":105},[58,166916,3046],{"emptyLinePlaceholder":720},[58,166918,166919],{"class":60,"line":627},[58,166920,3046],{"emptyLinePlaceholder":720},[58,166922,166923,166925,166928,166930],{"class":60,"line":509},[58,166924,31059],{"class":82},[58,166926,166927],{"class":75},"(add_item(",[58,166929,165804],{"class":386},[58,166931,31141],{"class":75},[58,166933,166934,166936,166938,166941],{"class":60,"line":559},[58,166935,31059],{"class":82},[58,166937,166927],{"class":75},[58,166939,166940],{"class":386},"\"b\"",[58,166942,31141],{"class":75},[175,166944,166945],{},"第二次调用会复用第一次的列表。",[175,166947,156367],{},[48,166949,166951],{"className":31022,"code":166950,"language":31024,"meta":53,"style":53},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[55,166952,166953,166967,166980,166989,166993],{"__ignoreMap":53},[58,166954,166955,166957,166959,166961,166963,166965],{"class":60,"line":61},[58,166956,32591],{"class":92},[58,166958,166892],{"class":379},[58,166960,166895],{"class":75},[58,166962,383],{"class":92},[58,166964,96315],{"class":82},[58,166966,31430],{"class":75},[58,166968,166969,166971,166974,166976,166978],{"class":60,"line":68},[58,166970,3747],{"class":92},[58,166972,166973],{"class":75}," items ",[58,166975,39571],{"class":92},[58,166977,39577],{"class":82},[58,166979,4385],{"class":75},[58,166981,166982,166985,166987],{"class":60,"line":79},[58,166983,166984],{"class":75},"        items ",[58,166986,383],{"class":92},[58,166988,52476],{"class":75},[58,166990,166991],{"class":60,"line":105},[58,166992,166905],{"class":75},[58,166994,166995,166997],{"class":60,"line":627},[58,166996,4736],{"class":92},[58,166998,166912],{"class":75},[14,167000,167002],{"id":167001},"_76-不定长参数","7.6 不定长参数",[114,167004,167006],{"id":167005},"_761-args","7.6.1 *args",[175,167008,167009,167012],{},[55,167010,167011],{},"*args"," 接收任意数量的位置参数，得到元组。",[48,167014,167016],{"className":31022,"code":167015,"language":31024,"meta":53,"style":53},"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",[55,167017,167018,167031,167039,167050,167059,167065,167069,167073,167092],{"__ignoreMap":53},[58,167019,167020,167022,167024,167026,167028],{"class":60,"line":61},[58,167021,32591],{"class":92},[58,167023,5855],{"class":379},[58,167025,793],{"class":75},[58,167027,1241],{"class":92},[58,167029,167030],{"class":75},"args):\n",[58,167032,167033,167035,167037],{"class":60,"line":68},[58,167034,159786],{"class":75},[58,167036,383],{"class":92},[58,167038,47977],{"class":82},[58,167040,167041,167043,167045,167047],{"class":60,"line":79},[58,167042,3847],{"class":92},[58,167044,156659],{"class":75},[58,167046,26687],{"class":92},[58,167048,167049],{"class":75}," args:\n",[58,167051,167052,167054,167056],{"class":60,"line":105},[58,167053,160461],{"class":75},[58,167055,10122],{"class":92},[58,167057,167058],{"class":75}," num\n",[58,167060,167061,167063],{"class":60,"line":627},[58,167062,4736],{"class":92},[58,167064,162766],{"class":75},[58,167066,167067],{"class":60,"line":509},[58,167068,3046],{"emptyLinePlaceholder":720},[58,167070,167071],{"class":60,"line":559},[58,167072,3046],{"emptyLinePlaceholder":720},[58,167074,167075,167077,167080,167082,167084,167086,167088,167090],{"class":60,"line":654},[58,167076,31059],{"class":82},[58,167078,167079],{"class":75},"(add(",[58,167081,89],{"class":82},[58,167083,469],{"class":75},[58,167085,867],{"class":82},[58,167087,469],{"class":75},[58,167089,861],{"class":82},[58,167091,31141],{"class":75},[58,167093,167094,167096,167098,167100,167102,167104,167106,167108,167110,167112,167114,167116],{"class":60,"line":671},[58,167095,31059],{"class":82},[58,167097,167079],{"class":75},[58,167099,89],{"class":82},[58,167101,469],{"class":75},[58,167103,867],{"class":82},[58,167105,469],{"class":75},[58,167107,861],{"class":82},[58,167109,469],{"class":75},[58,167111,1079],{"class":82},[58,167113,469],{"class":75},[58,167115,1105],{"class":82},[58,167117,31141],{"class":75},[114,167119,167121],{"id":167120},"_762-kwargs","7.6.2 **kwargs",[175,167123,167124,167127],{},[55,167125,167126],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[48,167129,167131],{"className":31022,"code":167130,"language":31024,"meta":53,"style":53},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[55,167132,167133,167146,167157,167163,167167,167171],{"__ignoreMap":53},[58,167134,167135,167137,167139,167141,167143],{"class":60,"line":61},[58,167136,32591],{"class":92},[58,167138,162424],{"class":379},[58,167140,793],{"class":75},[58,167142,11306],{"class":92},[58,167144,167145],{"class":75},"kwargs):\n",[58,167147,167148,167150,167152,167154],{"class":60,"line":68},[58,167149,3847],{"class":92},[58,167151,165264],{"class":75},[58,167153,26687],{"class":92},[58,167155,167156],{"class":75}," kwargs.items():\n",[58,167158,167159,167161],{"class":60,"line":79},[58,167160,33095],{"class":82},[58,167162,165276],{"class":75},[58,167164,167165],{"class":60,"line":105},[58,167166,3046],{"emptyLinePlaceholder":720},[58,167168,167169],{"class":60,"line":627},[58,167170,3046],{"emptyLinePlaceholder":720},[58,167172,167173,167175,167177,167179,167181,167183,167185,167187,167189,167191,167193,167195,167197],{"class":60,"line":509},[58,167174,162489],{"class":75},[58,167176,80440],{"class":5862},[58,167178,383],{"class":92},[58,167180,150367],{"class":386},[58,167182,469],{"class":75},[58,167184,70853],{"class":5862},[58,167186,383],{"class":92},[58,167188,1436],{"class":82},[58,167190,469],{"class":75},[58,167192,70904],{"class":5862},[58,167194,383],{"class":92},[58,167196,69901],{"class":386},[58,167198,799],{"class":75},[14,167200,167202],{"id":167201},"_77-参数解包","7.7 参数解包",[175,167204,167205],{},"列表或元组解包为位置参数：",[48,167207,167209],{"className":31022,"code":167208,"language":31024,"meta":53,"style":53},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[55,167210,167211,167220,167235,167239,167243,167263],{"__ignoreMap":53},[58,167212,167213,167215,167217],{"class":60,"line":61},[58,167214,32591],{"class":92},[58,167216,5855],{"class":379},[58,167218,167219],{"class":75},"(a, b, c):\n",[58,167221,167222,167224,167226,167228,167230,167232],{"class":60,"line":68},[58,167223,4736],{"class":92},[58,167225,11514],{"class":75},[58,167227,1267],{"class":92},[58,167229,11527],{"class":75},[58,167231,1267],{"class":92},[58,167233,167234],{"class":75}," c\n",[58,167236,167237],{"class":60,"line":79},[58,167238,3046],{"emptyLinePlaceholder":720},[58,167240,167241],{"class":60,"line":105},[58,167242,3046],{"emptyLinePlaceholder":720},[58,167244,167245,167247,167249,167251,167253,167255,167257,167259,167261],{"class":60,"line":627},[58,167246,164579],{"class":75},[58,167248,383],{"class":92},[58,167250,52864],{"class":75},[58,167252,89],{"class":82},[58,167254,469],{"class":75},[58,167256,867],{"class":82},[58,167258,469],{"class":75},[58,167260,861],{"class":82},[58,167262,33890],{"class":75},[58,167264,167265,167267,167269,167271],{"class":60,"line":509},[58,167266,31059],{"class":82},[58,167268,167079],{"class":75},[58,167270,1241],{"class":92},[58,167272,167273],{"class":75},"nums))\n",[175,167275,167276],{},"字典解包为关键字参数：",[48,167278,167280],{"className":31022,"code":167279,"language":31024,"meta":53,"style":53},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[55,167281,167282,167290,167316,167320,167324,167348],{"__ignoreMap":53},[58,167283,167284,167286,167288],{"class":60,"line":61},[58,167285,32591],{"class":92},[58,167287,149851],{"class":379},[58,167289,149854],{"class":75},[58,167291,167292,167294,167296,167298,167300,167302,167304,167306,167308,167310,167312,167314],{"class":60,"line":68},[58,167293,31943],{"class":82},[58,167295,793],{"class":75},[58,167297,843],{"class":92},[58,167299,1037],{"class":386},[58,167301,1681],{"class":82},[58,167303,80440],{"class":75},[58,167305,1730],{"class":82},[58,167307,5094],{"class":82},[58,167309,70853],{"class":75},[58,167311,1730],{"class":82},[58,167313,1037],{"class":386},[58,167315,799],{"class":75},[58,167317,167318],{"class":60,"line":79},[58,167319,3046],{"emptyLinePlaceholder":720},[58,167321,167322],{"class":60,"line":105},[58,167323,3046],{"emptyLinePlaceholder":720},[58,167325,167326,167328,167330,167332,167334,167336,167338,167340,167342,167344,167346],{"class":60,"line":627},[58,167327,116943],{"class":75},[58,167329,383],{"class":92},[58,167331,5094],{"class":75},[58,167333,63311],{"class":386},[58,167335,86],{"class":75},[58,167337,150367],{"class":386},[58,167339,469],{"class":75},[58,167341,69756],{"class":386},[58,167343,86],{"class":75},[58,167345,1436],{"class":82},[58,167347,108],{"class":75},[58,167349,167350,167352,167354],{"class":60,"line":509},[58,167351,166635],{"class":75},[58,167353,11306],{"class":92},[58,167355,167356],{"class":75},"info)\n",[14,167358,167360],{"id":167359},"_78-匿名函数lambda","7.8 匿名函数lambda",[175,167362,167363,167366],{},[55,167364,167365],{},"lambda"," 用于定义简单匿名函数。",[48,167368,167370],{"className":31022,"code":167369,"language":31024,"meta":53,"style":53},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[55,167371,167372,167389],{"__ignoreMap":53},[58,167373,167374,167377,167379,167382,167385,167387],{"class":60,"line":61},[58,167375,167376],{"class":75},"add ",[58,167378,383],{"class":92},[58,167380,167381],{"class":92}," lambda",[58,167383,167384],{"class":75}," a, b: a ",[58,167386,1267],{"class":92},[58,167388,151583],{"class":75},[58,167390,167391,167393,167395,167397,167399,167401],{"class":60,"line":68},[58,167392,31059],{"class":82},[58,167394,167079],{"class":75},[58,167396,89],{"class":82},[58,167398,469],{"class":75},[58,167400,867],{"class":82},[58,167402,31141],{"class":75},[175,167404,167405],{},"常和排序、过滤等函数一起使用。",[175,167407,167408],{},"按分数排序：",[48,167410,167412],{"className":31022,"code":167411,"language":31024,"meta":53,"style":53},"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",[55,167413,167414,167422,167442,167462,167482,167486,167490,167513],{"__ignoreMap":53},[58,167415,167416,167418,167420],{"class":60,"line":61},[58,167417,160195],{"class":75},[58,167419,383],{"class":92},[58,167421,56081],{"class":75},[58,167423,167424,167426,167428,167430,167432,167434,167436,167438,167440],{"class":60,"line":68},[58,167425,148864],{"class":75},[58,167427,63311],{"class":386},[58,167429,86],{"class":75},[58,167431,150367],{"class":386},[58,167433,469],{"class":75},[58,167435,151951],{"class":386},[58,167437,86],{"class":75},[58,167439,1773],{"class":82},[58,167441,5576],{"class":75},[58,167443,167444,167446,167448,167450,167452,167454,167456,167458,167460],{"class":60,"line":79},[58,167445,148864],{"class":75},[58,167447,63311],{"class":386},[58,167449,86],{"class":75},[58,167451,151415],{"class":386},[58,167453,469],{"class":75},[58,167455,151951],{"class":386},[58,167457,86],{"class":75},[58,167459,1596],{"class":82},[58,167461,5576],{"class":75},[58,167463,167464,167466,167468,167470,167472,167474,167476,167478,167480],{"class":60,"line":105},[58,167465,148864],{"class":75},[58,167467,63311],{"class":386},[58,167469,86],{"class":75},[58,167471,160210],{"class":386},[58,167473,469],{"class":75},[58,167475,151951],{"class":386},[58,167477,86],{"class":75},[58,167479,1192],{"class":82},[58,167481,5576],{"class":75},[58,167483,167484],{"class":60,"line":627},[58,167485,33890],{"class":75},[58,167487,167488],{"class":60,"line":509},[58,167489,3046],{"emptyLinePlaceholder":720},[58,167491,167492,167495,167497,167499,167501,167503,167505,167507,167509,167511],{"class":60,"line":559},[58,167493,167494],{"class":75},"students.sort(",[58,167496,154425],{"class":5862},[58,167498,154428],{"class":92},[58,167500,154431],{"class":75},[58,167502,151951],{"class":386},[58,167504,112831],{"class":75},[58,167506,164007],{"class":5862},[58,167508,383],{"class":92},[58,167510,32120],{"class":82},[58,167512,799],{"class":75},[58,167514,167515,167517],{"class":60,"line":654},[58,167516,31059],{"class":82},[58,167518,165474],{"class":75},[175,167520,167521,167522,167524],{},"如果逻辑复杂，不要硬写 ",[55,167523,167365],{},"，定义普通函数更清晰。",[14,167526,167528],{"id":167527},"_79-函数作为参数","7.9 函数作为参数",[175,167530,167531],{},"函数可以作为参数传给另一个函数。",[48,167533,167535],{"className":31022,"code":167534,"language":31024,"meta":53,"style":53},"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",[55,167536,167537,167545,167555,167559,167563,167573,167580,167584,167588],{"__ignoreMap":53},[58,167538,167539,167541,167543],{"class":60,"line":61},[58,167540,32591],{"class":92},[58,167542,5855],{"class":379},[58,167544,151572],{"class":75},[58,167546,167547,167549,167551,167553],{"class":60,"line":68},[58,167548,4736],{"class":92},[58,167550,11514],{"class":75},[58,167552,1267],{"class":92},[58,167554,151583],{"class":75},[58,167556,167557],{"class":60,"line":79},[58,167558,3046],{"emptyLinePlaceholder":720},[58,167560,167561],{"class":60,"line":105},[58,167562,3046],{"emptyLinePlaceholder":720},[58,167564,167565,167567,167570],{"class":60,"line":627},[58,167566,32591],{"class":92},[58,167568,167569],{"class":379}," calculate",[58,167571,167572],{"class":75},"(a, b, func):\n",[58,167574,167575,167577],{"class":60,"line":509},[58,167576,4736],{"class":92},[58,167578,167579],{"class":75}," func(a, b)\n",[58,167581,167582],{"class":60,"line":559},[58,167583,3046],{"emptyLinePlaceholder":720},[58,167585,167586],{"class":60,"line":654},[58,167587,3046],{"emptyLinePlaceholder":720},[58,167589,167590,167592,167595,167597,167599,167601],{"class":60,"line":671},[58,167591,31059],{"class":82},[58,167593,167594],{"class":75},"(calculate(",[58,167596,1232],{"class":82},[58,167598,469],{"class":75},[58,167600,1486],{"class":82},[58,167602,167603],{"class":75},", add))\n",[175,167605,167606],{},"这种思想在排序、回调、框架中经常出现。",[14,167608,167610],{"id":167609},"_710-mapfiltersorted","7.10 map、filter、sorted",[114,167612,167614],{"id":167613},"_7101-map","7.10.1 map",[175,167616,167617,167619],{},[55,167618,74675],{}," 对每个元素执行函数。",[48,167621,167623],{"className":31022,"code":167622,"language":31024,"meta":53,"style":53},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[55,167624,167625,167649,167672],{"__ignoreMap":53},[58,167626,167627,167629,167631,167633,167635,167637,167639,167641,167643,167645,167647],{"class":60,"line":61},[58,167628,164579],{"class":75},[58,167630,383],{"class":92},[58,167632,52864],{"class":75},[58,167634,89],{"class":82},[58,167636,469],{"class":75},[58,167638,867],{"class":82},[58,167640,469],{"class":75},[58,167642,861],{"class":82},[58,167644,469],{"class":75},[58,167646,1079],{"class":82},[58,167648,33890],{"class":75},[58,167650,167651,167653,167655,167658,167660,167662,167665,167667,167669],{"class":60,"line":68},[58,167652,161785],{"class":75},[58,167654,383],{"class":92},[58,167656,167657],{"class":82}," map",[58,167659,793],{"class":75},[58,167661,167365],{"class":92},[58,167663,167664],{"class":75}," x: x ",[58,167666,1241],{"class":92},[58,167668,15399],{"class":82},[58,167670,167671],{"class":75},", nums)\n",[58,167673,167674,167676,167678,167680],{"class":60,"line":79},[58,167675,31059],{"class":82},[58,167677,793],{"class":75},[58,167679,154549],{"class":82},[58,167681,166547],{"class":75},[114,167683,167685],{"id":167684},"_7102-filter","7.10.2 filter",[175,167687,167688,167690],{},[55,167689,80681],{}," 保留满足条件的元素。",[48,167692,167694],{"className":31022,"code":167693,"language":31024,"meta":53,"style":53},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[55,167695,167696,167724,167749],{"__ignoreMap":53},[58,167697,167698,167700,167702,167704,167706,167708,167710,167712,167714,167716,167718,167720,167722],{"class":60,"line":61},[58,167699,164579],{"class":75},[58,167701,383],{"class":92},[58,167703,52864],{"class":75},[58,167705,89],{"class":82},[58,167707,469],{"class":75},[58,167709,867],{"class":82},[58,167711,469],{"class":75},[58,167713,861],{"class":82},[58,167715,469],{"class":75},[58,167717,1079],{"class":82},[58,167719,469],{"class":75},[58,167721,1105],{"class":82},[58,167723,33890],{"class":75},[58,167725,167726,167728,167730,167733,167735,167737,167739,167741,167743,167745,167747],{"class":60,"line":68},[58,167727,161785],{"class":75},[58,167729,383],{"class":92},[58,167731,167732],{"class":82}," filter",[58,167734,793],{"class":75},[58,167736,167365],{"class":92},[58,167738,167664],{"class":75},[58,167740,1114],{"class":92},[58,167742,15399],{"class":82},[58,167744,102188],{"class":92},[58,167746,4739],{"class":82},[58,167748,167671],{"class":75},[58,167750,167751,167753,167755,167757],{"class":60,"line":79},[58,167752,31059],{"class":82},[58,167754,793],{"class":75},[58,167756,154549],{"class":82},[58,167758,166547],{"class":75},[114,167760,167762],{"id":167761},"_7103-sorted","7.10.3 sorted",[175,167764,167765,167767],{},[55,167766,165715],{}," 返回排序后的新列表。",[48,167769,167771],{"className":31022,"code":167770,"language":31024,"meta":53,"style":53},"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",[55,167772,167773,167781,167801,167821,167841,167845,167849,167878],{"__ignoreMap":53},[58,167774,167775,167777,167779],{"class":60,"line":61},[58,167776,160195],{"class":75},[58,167778,383],{"class":92},[58,167780,56081],{"class":75},[58,167782,167783,167785,167787,167789,167791,167793,167795,167797,167799],{"class":60,"line":68},[58,167784,148864],{"class":75},[58,167786,63311],{"class":386},[58,167788,86],{"class":75},[58,167790,150367],{"class":386},[58,167792,469],{"class":75},[58,167794,151951],{"class":386},[58,167796,86],{"class":75},[58,167798,1773],{"class":82},[58,167800,5576],{"class":75},[58,167802,167803,167805,167807,167809,167811,167813,167815,167817,167819],{"class":60,"line":79},[58,167804,148864],{"class":75},[58,167806,63311],{"class":386},[58,167808,86],{"class":75},[58,167810,151415],{"class":386},[58,167812,469],{"class":75},[58,167814,151951],{"class":386},[58,167816,86],{"class":75},[58,167818,1596],{"class":82},[58,167820,5576],{"class":75},[58,167822,167823,167825,167827,167829,167831,167833,167835,167837,167839],{"class":60,"line":105},[58,167824,148864],{"class":75},[58,167826,63311],{"class":386},[58,167828,86],{"class":75},[58,167830,160210],{"class":386},[58,167832,469],{"class":75},[58,167834,151951],{"class":386},[58,167836,86],{"class":75},[58,167838,1192],{"class":82},[58,167840,5576],{"class":75},[58,167842,167843],{"class":60,"line":627},[58,167844,33890],{"class":75},[58,167846,167847],{"class":60,"line":509},[58,167848,3046],{"emptyLinePlaceholder":720},[58,167850,167851,167853,167855,167857,167860,167862,167864,167866,167868,167870,167872,167874,167876],{"class":60,"line":559},[58,167852,161785],{"class":75},[58,167854,383],{"class":92},[58,167856,164083],{"class":82},[58,167858,167859],{"class":75},"(students, ",[58,167861,154425],{"class":5862},[58,167863,154428],{"class":92},[58,167865,154431],{"class":75},[58,167867,151951],{"class":386},[58,167869,112831],{"class":75},[58,167871,164007],{"class":5862},[58,167873,383],{"class":92},[58,167875,32120],{"class":82},[58,167877,799],{"class":75},[58,167879,167880,167882],{"class":60,"line":654},[58,167881,31059],{"class":82},[58,167883,77216],{"class":75},[14,167885,167887],{"id":167886},"_711-闭包入门","7.11 闭包入门",[175,167889,167890],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[48,167892,167894],{"className":31022,"code":167893,"language":31024,"meta":53,"style":53},"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",[55,167895,167896,167906,167916,167927,167931,167938,167942,167946,167960],{"__ignoreMap":53},[58,167897,167898,167900,167903],{"class":60,"line":61},[58,167899,32591],{"class":92},[58,167901,167902],{"class":379}," outer",[58,167904,167905],{"class":75},"(base):\n",[58,167907,167908,167910,167913],{"class":60,"line":68},[58,167909,31445],{"class":92},[58,167911,167912],{"class":379}," inner",[58,167914,167915],{"class":75},"(num):\n",[58,167917,167918,167920,167923,167925],{"class":60,"line":79},[58,167919,15396],{"class":92},[58,167921,167922],{"class":75}," base ",[58,167924,1267],{"class":92},[58,167926,167058],{"class":75},[58,167928,167929],{"class":60,"line":105},[58,167930,3046],{"emptyLinePlaceholder":720},[58,167932,167933,167935],{"class":60,"line":627},[58,167934,4736],{"class":92},[58,167936,167937],{"class":75}," inner\n",[58,167939,167940],{"class":60,"line":509},[58,167941,3046],{"emptyLinePlaceholder":720},[58,167943,167944],{"class":60,"line":559},[58,167945,3046],{"emptyLinePlaceholder":720},[58,167947,167948,167951,167953,167956,167958],{"class":60,"line":654},[58,167949,167950],{"class":75},"add_10 ",[58,167952,383],{"class":92},[58,167954,167955],{"class":75}," outer(",[58,167957,1232],{"class":82},[58,167959,799],{"class":75},[58,167961,167962,167964,167967,167969],{"class":60,"line":671},[58,167963,31059],{"class":82},[58,167965,167966],{"class":75},"(add_10(",[58,167968,1105],{"class":82},[58,167970,31141],{"class":75},[175,167972,167973],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,167975,167977],{"id":167976},"_712-装饰器入门","7.12 装饰器入门",[175,167979,167980],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[48,167982,167984],{"className":31022,"code":167983,"language":31024,"meta":53,"style":53},"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",[55,167985,167986,167995,168004,168015,168020,168031,168035,168042,168046,168050,168055,168063,168073,168077,168081],{"__ignoreMap":53},[58,167987,167988,167990,167992],{"class":60,"line":61},[58,167989,32591],{"class":92},[58,167991,87820],{"class":379},[58,167993,167994],{"class":75},"(func):\n",[58,167996,167997,167999,168002],{"class":60,"line":68},[58,167998,31445],{"class":92},[58,168000,168001],{"class":379}," wrapper",[58,168003,32597],{"class":75},[58,168005,168006,168008,168010,168013],{"class":60,"line":79},[58,168007,33095],{"class":82},[58,168009,793],{"class":75},[58,168011,168012],{"class":386},"\"函数开始执行\"",[58,168014,799],{"class":75},[58,168016,168017],{"class":60,"line":105},[58,168018,168019],{"class":75},"        func()\n",[58,168021,168022,168024,168026,168029],{"class":60,"line":627},[58,168023,33095],{"class":82},[58,168025,793],{"class":75},[58,168027,168028],{"class":386},"\"函数执行结束\"",[58,168030,799],{"class":75},[58,168032,168033],{"class":60,"line":509},[58,168034,3046],{"emptyLinePlaceholder":720},[58,168036,168037,168039],{"class":60,"line":559},[58,168038,4736],{"class":92},[58,168040,168041],{"class":75}," wrapper\n",[58,168043,168044],{"class":60,"line":654},[58,168045,3046],{"emptyLinePlaceholder":720},[58,168047,168048],{"class":60,"line":671},[58,168049,3046],{"emptyLinePlaceholder":720},[58,168051,168052],{"class":60,"line":677},[58,168053,168054],{"class":379},"@log\n",[58,168056,168057,168059,168061],{"class":60,"line":2260},[58,168058,32591],{"class":92},[58,168060,161475],{"class":379},[58,168062,32597],{"class":75},[58,168064,168065,168067,168069,168071],{"class":60,"line":694},[58,168066,31943],{"class":82},[58,168068,793],{"class":75},[58,168070,6490],{"class":386},[58,168072,799],{"class":75},[58,168074,168075],{"class":60,"line":2270},[58,168076,3046],{"emptyLinePlaceholder":720},[58,168078,168079],{"class":60,"line":2275},[58,168080,3046],{"emptyLinePlaceholder":720},[58,168082,168083],{"class":60,"line":2289},[58,168084,161510],{"class":75},[175,168086,158753],{},[48,168088,168090],{"className":31022,"code":168089,"language":31024,"meta":53,"style":53},"say_hello = log(say_hello)\n",[55,168091,168092],{"__ignoreMap":53},[58,168093,168094,168097,168099],{"class":60,"line":61},[58,168095,168096],{"class":75},"say_hello ",[58,168098,383],{"class":92},[58,168100,168101],{"class":75}," log(say_hello)\n",[175,168103,168104],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168106,168108],{"id":168107},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[48,168110,168112],{"className":31022,"code":168111,"language":31024,"meta":53,"style":53},"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",[55,168113,168114,168122,168139,168149,168168,168178,168185,168189,168195,168199,168203,168207,168215,168225,168229,168233],{"__ignoreMap":53},[58,168115,168116,168118,168120],{"class":60,"line":61},[58,168117,32591],{"class":92},[58,168119,87820],{"class":379},[58,168121,167994],{"class":75},[58,168123,168124,168126,168128,168130,168132,168135,168137],{"class":60,"line":68},[58,168125,31445],{"class":92},[58,168127,168001],{"class":379},[58,168129,793],{"class":75},[58,168131,1241],{"class":92},[58,168133,168134],{"class":75},"args, ",[58,168136,11306],{"class":92},[58,168138,167145],{"class":75},[58,168140,168141,168143,168145,168147],{"class":60,"line":79},[58,168142,33095],{"class":82},[58,168144,793],{"class":75},[58,168146,168012],{"class":386},[58,168148,799],{"class":75},[58,168150,168151,168154,168156,168159,168161,168163,168165],{"class":60,"line":105},[58,168152,168153],{"class":75},"        result ",[58,168155,383],{"class":92},[58,168157,168158],{"class":75}," func(",[58,168160,1241],{"class":92},[58,168162,168134],{"class":75},[58,168164,11306],{"class":92},[58,168166,168167],{"class":75},"kwargs)\n",[58,168169,168170,168172,168174,168176],{"class":60,"line":627},[58,168171,33095],{"class":82},[58,168173,793],{"class":75},[58,168175,168028],{"class":386},[58,168177,799],{"class":75},[58,168179,168180,168182],{"class":60,"line":509},[58,168181,15396],{"class":92},[58,168183,168184],{"class":75}," result\n",[58,168186,168187],{"class":60,"line":559},[58,168188,3046],{"emptyLinePlaceholder":720},[58,168190,168191,168193],{"class":60,"line":654},[58,168192,4736],{"class":92},[58,168194,168041],{"class":75},[58,168196,168197],{"class":60,"line":671},[58,168198,3046],{"emptyLinePlaceholder":720},[58,168200,168201],{"class":60,"line":677},[58,168202,3046],{"emptyLinePlaceholder":720},[58,168204,168205],{"class":60,"line":2260},[58,168206,168054],{"class":379},[58,168208,168209,168211,168213],{"class":60,"line":694},[58,168210,32591],{"class":92},[58,168212,5855],{"class":379},[58,168214,151572],{"class":75},[58,168216,168217,168219,168221,168223],{"class":60,"line":2270},[58,168218,4736],{"class":92},[58,168220,11514],{"class":75},[58,168222,1267],{"class":92},[58,168224,151583],{"class":75},[58,168226,168227],{"class":60,"line":2275},[58,168228,3046],{"emptyLinePlaceholder":720},[58,168230,168231],{"class":60,"line":2289},[58,168232,3046],{"emptyLinePlaceholder":720},[58,168234,168235,168237,168239,168241,168243,168245],{"class":60,"line":2294},[58,168236,31059],{"class":82},[58,168238,167079],{"class":75},[58,168240,1232],{"class":82},[58,168242,469],{"class":75},[58,168244,1486],{"class":82},[58,168246,31141],{"class":75},[175,168248,168249,168250,101647,168252,168254],{},"这个写法使用 ",[55,168251,167011],{},[55,168253,167126],{}," 接收原函数的所有参数。",[14,168256,168258],{"id":168257},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[175,168260,123921],{},[19,168262,168263,168266,168269],{},[22,168264,168265],{},"给定一组学生数据。",[22,168267,168268],{},"封装函数，根据传入规则筛选学生。",[22,168270,168271],{},"筛选及格、优秀、未成年学生。",[175,168273,10680],{},[48,168275,168277],{"className":31022,"code":168276,"language":31024,"meta":53,"style":53},"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",[55,168278,168279,168287,168315,168343,168371,168375,168379,168383,168393,168401,168411,168418,168423,168429,168433,168437,168461,168484,168507,168511,168518,168525],{"__ignoreMap":53},[58,168280,168281,168283,168285],{"class":60,"line":61},[58,168282,160195],{"class":75},[58,168284,383],{"class":92},[58,168286,56081],{"class":75},[58,168288,168289,168291,168293,168295,168297,168299,168301,168303,168305,168307,168309,168311,168313],{"class":60,"line":68},[58,168290,148864],{"class":75},[58,168292,63311],{"class":386},[58,168294,86],{"class":75},[58,168296,150367],{"class":386},[58,168298,469],{"class":75},[58,168300,69756],{"class":386},[58,168302,86],{"class":75},[58,168304,1436],{"class":82},[58,168306,469],{"class":75},[58,168308,151951],{"class":386},[58,168310,86],{"class":75},[58,168312,1773],{"class":82},[58,168314,5576],{"class":75},[58,168316,168317,168319,168321,168323,168325,168327,168329,168331,168333,168335,168337,168339,168341],{"class":60,"line":79},[58,168318,148864],{"class":75},[58,168320,63311],{"class":386},[58,168322,86],{"class":75},[58,168324,151415],{"class":386},[58,168326,469],{"class":75},[58,168328,69756],{"class":386},[58,168330,86],{"class":75},[58,168332,1411],{"class":82},[58,168334,469],{"class":75},[58,168336,151951],{"class":386},[58,168338,86],{"class":75},[58,168340,1596],{"class":82},[58,168342,5576],{"class":75},[58,168344,168345,168347,168349,168351,168353,168355,168357,168359,168361,168363,168365,168367,168369],{"class":60,"line":105},[58,168346,148864],{"class":75},[58,168348,63311],{"class":386},[58,168350,86],{"class":75},[58,168352,160210],{"class":386},[58,168354,469],{"class":75},[58,168356,69756],{"class":386},[58,168358,86],{"class":75},[58,168360,1461],{"class":82},[58,168362,469],{"class":75},[58,168364,151951],{"class":386},[58,168366,86],{"class":75},[58,168368,1667],{"class":82},[58,168370,5576],{"class":75},[58,168372,168373],{"class":60,"line":627},[58,168374,33890],{"class":75},[58,168376,168377],{"class":60,"line":509},[58,168378,3046],{"emptyLinePlaceholder":720},[58,168380,168381],{"class":60,"line":559},[58,168382,3046],{"emptyLinePlaceholder":720},[58,168384,168385,168387,168390],{"class":60,"line":654},[58,168386,32591],{"class":92},[58,168388,168389],{"class":379}," filter_students",[58,168391,168392],{"class":75},"(students, condition):\n",[58,168394,168395,168397,168399],{"class":60,"line":671},[58,168396,161702],{"class":75},[58,168398,383],{"class":92},[58,168400,52476],{"class":75},[58,168402,168403,168405,168407,168409],{"class":60,"line":677},[58,168404,3847],{"class":92},[58,168406,152616],{"class":75},[58,168408,26687],{"class":92},[58,168410,152621],{"class":75},[58,168412,168413,168415],{"class":60,"line":2260},[58,168414,3143],{"class":92},[58,168416,168417],{"class":75}," condition(student):\n",[58,168419,168420],{"class":60,"line":694},[58,168421,168422],{"class":75},"            result.append(student)\n",[58,168424,168425,168427],{"class":60,"line":2270},[58,168426,4736],{"class":92},[58,168428,168184],{"class":75},[58,168430,168431],{"class":60,"line":2275},[58,168432,3046],{"emptyLinePlaceholder":720},[58,168434,168435],{"class":60,"line":2289},[58,168436,3046],{"emptyLinePlaceholder":720},[58,168438,168439,168441,168443,168446,168448,168451,168453,168455,168457,168459],{"class":60,"line":2294},[58,168440,166180],{"class":75},[58,168442,383],{"class":92},[58,168444,168445],{"class":75}," filter_students(students, ",[58,168447,167365],{"class":92},[58,168449,168450],{"class":75}," s: s[",[58,168452,151951],{"class":386},[58,168454,5089],{"class":75},[58,168456,2357],{"class":92},[58,168458,158316],{"class":82},[58,168460,799],{"class":75},[58,168462,168463,168466,168468,168470,168472,168474,168476,168478,168480,168482],{"class":60,"line":2300},[58,168464,168465],{"class":75},"excellent ",[58,168467,383],{"class":92},[58,168469,168445],{"class":75},[58,168471,167365],{"class":92},[58,168473,168450],{"class":75},[58,168475,151951],{"class":386},[58,168477,5089],{"class":75},[58,168479,2357],{"class":92},[58,168481,158267],{"class":82},[58,168483,799],{"class":75},[58,168485,168486,168489,168491,168493,168495,168497,168499,168501,168503,168505],{"class":60,"line":2321},[58,168487,168488],{"class":75},"under_age ",[58,168490,383],{"class":92},[58,168492,168445],{"class":75},[58,168494,167365],{"class":92},[58,168496,168450],{"class":75},[58,168498,69756],{"class":386},[58,168500,5089],{"class":75},[58,168502,373],{"class":92},[58,168504,156764],{"class":82},[58,168506,799],{"class":75},[58,168508,168509],{"class":60,"line":2326},[58,168510,3046],{"emptyLinePlaceholder":720},[58,168512,168513,168515],{"class":60,"line":2340},[58,168514,31059],{"class":82},[58,168516,168517],{"class":75},"(passed)\n",[58,168519,168520,168522],{"class":60,"line":2345},[58,168521,31059],{"class":82},[58,168523,168524],{"class":75},"(excellent)\n",[58,168526,168527,168529],{"class":60,"line":2374},[58,168528,31059],{"class":82},[58,168530,168531],{"class":75},"(under_age)\n",[14,168533,168535],{"id":168534},"_715-易错点","7.15 易错点",[19,168537,168538,168541,168549,168554,168565],{},[22,168539,168540],{},"默认参数不要写可变对象。",[22,168542,168543,168545,168546,168548],{},[55,168544,167011],{}," 是元组，",[55,168547,167126],{}," 是字典。",[22,168550,168551,168553],{},[55,168552,167365],{}," 只适合简单表达式。",[22,168555,168556,101647,168558,168560,168561,168564],{},[55,168557,74675],{},[55,168559,80681],{}," 的结果是迭代器，常用 ",[55,168562,168563],{},"list()"," 转换查看。",[22,168566,168567],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168569,168571],{"id":168570},"_716-本章练习","7.16 本章练习",[19,168573,168574,168581,168587,168592,168597],{},[22,168575,168576,168577,168580],{},"写函数 ",[55,168578,168579],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[22,168582,168576,168583,168586],{},[55,168584,168585],{},"print_user(**kwargs)","，输出用户所有字段。",[22,168588,104995,168589,168591],{},[55,168590,167365],{}," 对学生列表按年龄排序。",[22,168593,104995,168594,168596],{},[55,168595,80681],{}," 找出成绩不及格的学生。",[22,168598,168599],{},"写一个装饰器，统计函数执行前后的提示信息。",[702,168601,168602],{},"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":53,"searchDepth":68,"depth":68,"links":168604},[168605,168606,168607,168608,168609,168610,168614,168615,168616,168617,168622,168623,168624,168625,168626,168627],{"id":166463,"depth":68,"text":166464},{"id":166577,"depth":68,"text":166578},{"id":166666,"depth":68,"text":166667},{"id":166728,"depth":68,"text":166729},{"id":166874,"depth":68,"text":166875},{"id":167001,"depth":68,"text":167002,"children":168611},[168612,168613],{"id":167005,"depth":79,"text":167006},{"id":167120,"depth":79,"text":167121},{"id":167201,"depth":68,"text":167202},{"id":167359,"depth":68,"text":167360},{"id":167527,"depth":68,"text":167528},{"id":167609,"depth":68,"text":167610,"children":168618},[168619,168620,168621],{"id":167613,"depth":79,"text":167614},{"id":167684,"depth":79,"text":167685},{"id":167761,"depth":79,"text":167762},{"id":167886,"depth":68,"text":167887},{"id":167976,"depth":68,"text":167977},{"id":168107,"depth":68,"text":168108},{"id":168257,"depth":68,"text":168258},{"id":168534,"depth":68,"text":168535},{"id":168570,"depth":68,"text":168571},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166455,"description":717},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168634,"title":168635,"body":168636,"description":717,"extension":718,"meta":171155,"navigation":720,"path":171156,"seo":171157,"stem":171158,"__hash__":171159},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168637,"toc":171130},[168638,168641,168645,168648,168651,168682,168686,168690,168693,168720,168724,168727,168778,168781,168796,168799,168834,168838,168840,168864,168867,168927,168931,168935,168938,168995,168998,169018,169022,169025,169088,169092,169095,169151,169158,169182,169186,169189,169252,169256,169261,169312,169315,169319,169324,169391,169394,169476,169480,169485,169536,169539,169543,169546,169549,169557,169560,169606,169609,169655,169659,169665,169709,169712,169758,169761,169801,169804,169865,169869,169872,169962,169965,170107,170110,170177,170181,170184,170187,170328,170331,170409,170412,170588,170592,170594,170605,170607,170806,170810,171054,171058,171092,171096,171127],[10,168639,168635],{"id":168640},"_8-文件操作",[14,168642,168644],{"id":168643},"_81-文件操作的意义","8.1 文件操作的意义",[175,168646,168647],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[175,168649,168650],{},"常见文件类型：",[19,168652,168653,168659,168665,168671,168677],{},[22,168654,168655,168658],{},[55,168656,168657],{},".txt","：普通文本。",[22,168660,168661,168664],{},[55,168662,168663],{},".csv","：表格文本。",[22,168666,168667,168670],{},[55,168668,168669],{},".json","：结构化数据。",[22,168672,168673,168676],{},[55,168674,168675],{},".log","：日志文件。",[22,168678,168679,168681],{},[55,168680,146831],{},"：Python 源代码。",[14,168683,168685],{"id":168684},"_82-路径","8.2 路径",[114,168687,168689],{"id":168688},"_821-相对路径","8.2.1 相对路径",[175,168691,168692],{},"相对当前运行目录：",[48,168694,168696],{"className":31022,"code":168695,"language":31024,"meta":53,"style":53},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[55,168697,168698],{"__ignoreMap":53},[58,168699,168700,168702,168704,168706,168708,168710,168712,168714,168716,168718],{"class":60,"line":61},[58,168701,87544],{"class":82},[58,168703,793],{"class":75},[58,168705,147275],{"class":386},[58,168707,469],{"class":75},[58,168709,147280],{"class":386},[58,168711,469],{"class":75},[58,168713,147285],{"class":5862},[58,168715,383],{"class":92},[58,168717,147290],{"class":386},[58,168719,799],{"class":75},[114,168721,168723],{"id":168722},"_822-绝对路径","8.2.2 绝对路径",[175,168725,168726],{},"从根目录或盘符开始：",[48,168728,168730],{"className":31022,"code":168729,"language":31024,"meta":53,"style":53},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[55,168731,168732,168755],{"__ignoreMap":53},[58,168733,168734,168736,168738,168741,168743,168745,168747,168749,168751,168753],{"class":60,"line":61},[58,168735,87544],{"class":82},[58,168737,793],{"class":75},[58,168739,168740],{"class":386},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[58,168742,469],{"class":75},[58,168744,147280],{"class":386},[58,168746,469],{"class":75},[58,168748,147285],{"class":5862},[58,168750,383],{"class":92},[58,168752,147290],{"class":386},[58,168754,799],{"class":75},[58,168756,168757,168759,168761,168764,168766,168768,168770,168772,168774,168776],{"class":60,"line":68},[58,168758,87544],{"class":82},[58,168760,793],{"class":75},[58,168762,168763],{"class":386},"\"D:\u002Fdata\u002Fdata.txt\"",[58,168765,469],{"class":75},[58,168767,147280],{"class":386},[58,168769,469],{"class":75},[58,168771,147285],{"class":5862},[58,168773,383],{"class":92},[58,168775,147290],{"class":386},[58,168777,799],{"class":75},[175,168779,168780],{},"Windows 路径建议写成：",[48,168782,168784],{"className":31022,"code":168783,"language":31024,"meta":53,"style":53},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[55,168785,168786],{"__ignoreMap":53},[58,168787,168788,168791,168793],{"class":60,"line":61},[58,168789,168790],{"class":75},"path ",[58,168792,383],{"class":92},[58,168794,168795],{"class":386}," \"D:\u002Fdata\u002Fdata.txt\"\n",[175,168797,168798],{},"或原始字符串：",[48,168800,168802],{"className":31022,"code":168801,"language":31024,"meta":53,"style":53},"path = r\"D:\\data\\data.txt\"\n",[55,168803,168804],{"__ignoreMap":53},[58,168805,168806,168808,168810,168812,168814,168817,168820,168823,168825,168827,168829,168832],{"class":60,"line":61},[58,168807,168790],{"class":75},[58,168809,383],{"class":92},[58,168811,17764],{"class":92},[58,168813,1037],{"class":386},[58,168815,168816],{"class":48621},"D:",[58,168818,168819],{"class":82},"\\d",[58,168821,168822],{"class":48621},"ata",[58,168824,168819],{"class":82},[58,168826,168822],{"class":48621},[58,168828,1344],{"class":82},[58,168830,168831],{"class":48621},"txt",[58,168833,25777],{"class":386},[14,168835,168837],{"id":168836},"_83-open函数","8.3 open函数",[175,168839,5827],{},[48,168841,168843],{"className":31022,"code":168842,"language":31024,"meta":53,"style":53},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[55,168844,168845],{"__ignoreMap":53},[58,168846,168847,168849,168851,168853,168856,168858,168860,168862],{"class":60,"line":61},[58,168848,45998],{"class":5862},[58,168850,14208],{"class":92},[58,168852,147270],{"class":82},[58,168854,168855],{"class":75},"(文件路径, 打开模式, ",[58,168857,147285],{"class":5862},[58,168859,383],{"class":92},[58,168861,147290],{"class":386},[58,168863,799],{"class":75},[175,168865,168866],{},"常见模式：",[926,168868,168869,168878],{},[929,168870,168871],{},[932,168872,168873,168876],{},[935,168874,168875],{},"模式",[935,168877,26513],{},[972,168879,168880,168889,168898,168907,168917],{},[932,168881,168882,168886],{},[977,168883,168884],{},[55,168885,1456],{},[977,168887,168888],{},"只读，文件不存在会报错",[932,168890,168891,168895],{},[977,168892,168893],{},[55,168894,247],{},[977,168896,168897],{},"只写，文件不存在会创建，存在会清空",[932,168899,168900,168904],{},[977,168901,168902],{},[55,168903,376],{},[977,168905,168906],{},"追加，文件不存在会创建",[932,168908,168909,168914],{},[977,168910,168911],{},[55,168912,168913],{},"rb",[977,168915,168916],{},"二进制只读",[932,168918,168919,168924],{},[977,168920,168921],{},[55,168922,168923],{},"wb",[977,168925,168926],{},"二进制只写",[14,168928,168930],{"id":168929},"_84-读取文件","8.4 读取文件",[114,168932,168934],{"id":168933},"_841-read","8.4.1 read",[175,168936,168937],{},"一次读取全部内容：",[48,168939,168941],{"className":31022,"code":168940,"language":31024,"meta":53,"style":53},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[55,168942,168943,168969,168981,168988],{"__ignoreMap":53},[58,168944,168945,168947,168949,168951,168953,168955,168957,168959,168961,168963,168965,168967],{"class":60,"line":61},[58,168946,45998],{"class":5862},[58,168948,14208],{"class":92},[58,168950,147270],{"class":82},[58,168952,793],{"class":75},[58,168954,147275],{"class":386},[58,168956,469],{"class":75},[58,168958,147280],{"class":386},[58,168960,469],{"class":75},[58,168962,147285],{"class":5862},[58,168964,383],{"class":92},[58,168966,147290],{"class":386},[58,168968,799],{"class":75},[58,168970,168971,168974,168976,168978],{"class":60,"line":68},[58,168972,168973],{"class":75},"content ",[58,168975,383],{"class":92},[58,168977,148632],{"class":5862},[58,168979,168980],{"class":75},".read()\n",[58,168982,168983,168985],{"class":60,"line":79},[58,168984,31059],{"class":82},[58,168986,168987],{"class":75},"(content)\n",[58,168989,168990,168992],{"class":60,"line":105},[58,168991,45998],{"class":5862},[58,168993,168994],{"class":75},".close()\n",[175,168996,168997],{},"可以指定读取字符数：",[48,168999,169001],{"className":31022,"code":169000,"language":31024,"meta":53,"style":53},"content = file.read(10)\n",[55,169002,169003],{"__ignoreMap":53},[58,169004,169005,169007,169009,169011,169014,169016],{"class":60,"line":61},[58,169006,168973],{"class":75},[58,169008,383],{"class":92},[58,169010,148632],{"class":5862},[58,169012,169013],{"class":75},".read(",[58,169015,1232],{"class":82},[58,169017,799],{"class":75},[114,169019,169021],{"id":169020},"_842-readline","8.4.2 readline",[175,169023,169024],{},"一次读取一行：",[48,169026,169028],{"className":31022,"code":169027,"language":31024,"meta":53,"style":53},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[55,169029,169030,169056,169060,169071,169078,169082],{"__ignoreMap":53},[58,169031,169032,169034,169036,169038,169040,169042,169044,169046,169048,169050,169052,169054],{"class":60,"line":61},[58,169033,45998],{"class":5862},[58,169035,14208],{"class":92},[58,169037,147270],{"class":82},[58,169039,793],{"class":75},[58,169041,147275],{"class":386},[58,169043,469],{"class":75},[58,169045,147280],{"class":386},[58,169047,469],{"class":75},[58,169049,147285],{"class":5862},[58,169051,383],{"class":92},[58,169053,147290],{"class":386},[58,169055,799],{"class":75},[58,169057,169058],{"class":60,"line":68},[58,169059,3046],{"emptyLinePlaceholder":720},[58,169061,169062,169064,169066,169068],{"class":60,"line":79},[58,169063,147731],{"class":75},[58,169065,383],{"class":92},[58,169067,148632],{"class":5862},[58,169069,169070],{"class":75},".readline()\n",[58,169072,169073,169075],{"class":60,"line":105},[58,169074,31059],{"class":82},[58,169076,169077],{"class":75},"(line)\n",[58,169079,169080],{"class":60,"line":627},[58,169081,3046],{"emptyLinePlaceholder":720},[58,169083,169084,169086],{"class":60,"line":509},[58,169085,45998],{"class":5862},[58,169087,168994],{"class":75},[114,169089,169091],{"id":169090},"_843-readlines","8.4.3 readlines",[175,169093,169094],{},"读取所有行，返回列表：",[48,169096,169098],{"className":31022,"code":169097,"language":31024,"meta":53,"style":53},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[55,169099,169100,169126,169138,169145],{"__ignoreMap":53},[58,169101,169102,169104,169106,169108,169110,169112,169114,169116,169118,169120,169122,169124],{"class":60,"line":61},[58,169103,45998],{"class":5862},[58,169105,14208],{"class":92},[58,169107,147270],{"class":82},[58,169109,793],{"class":75},[58,169111,147275],{"class":386},[58,169113,469],{"class":75},[58,169115,147280],{"class":386},[58,169117,469],{"class":75},[58,169119,147285],{"class":5862},[58,169121,383],{"class":92},[58,169123,147290],{"class":386},[58,169125,799],{"class":75},[58,169127,169128,169131,169133,169135],{"class":60,"line":68},[58,169129,169130],{"class":75},"lines ",[58,169132,383],{"class":92},[58,169134,148632],{"class":5862},[58,169136,169137],{"class":75},".readlines()\n",[58,169139,169140,169142],{"class":60,"line":79},[58,169141,31059],{"class":82},[58,169143,169144],{"class":75},"(lines)\n",[58,169146,169147,169149],{"class":60,"line":105},[58,169148,45998],{"class":5862},[58,169150,168994],{"class":75},[175,169152,169153,169154,169157],{},"每一行通常带有换行符，可以用 ",[55,169155,169156],{},"strip()"," 去掉：",[48,169159,169161],{"className":31022,"code":169160,"language":31024,"meta":53,"style":53},"for line in lines:\n    print(line.strip())\n",[55,169162,169163,169175],{"__ignoreMap":53},[58,169164,169165,169167,169170,169172],{"class":60,"line":61},[58,169166,3671],{"class":92},[58,169168,169169],{"class":75}," line ",[58,169171,26687],{"class":92},[58,169173,169174],{"class":75}," lines:\n",[58,169176,169177,169179],{"class":60,"line":68},[58,169178,31943],{"class":82},[58,169180,169181],{"class":75},"(line.strip())\n",[114,169183,169185],{"id":169184},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[175,169187,169188],{},"推荐读取大文件时使用：",[48,169190,169192],{"className":31022,"code":169191,"language":31024,"meta":53,"style":53},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[55,169193,169194,169220,169224,169236,169242,169246],{"__ignoreMap":53},[58,169195,169196,169198,169200,169202,169204,169206,169208,169210,169212,169214,169216,169218],{"class":60,"line":61},[58,169197,45998],{"class":5862},[58,169199,14208],{"class":92},[58,169201,147270],{"class":82},[58,169203,793],{"class":75},[58,169205,147275],{"class":386},[58,169207,469],{"class":75},[58,169209,147280],{"class":386},[58,169211,469],{"class":75},[58,169213,147285],{"class":5862},[58,169215,383],{"class":92},[58,169217,147290],{"class":386},[58,169219,799],{"class":75},[58,169221,169222],{"class":60,"line":68},[58,169223,3046],{"emptyLinePlaceholder":720},[58,169225,169226,169228,169230,169232,169234],{"class":60,"line":79},[58,169227,3671],{"class":92},[58,169229,169169],{"class":75},[58,169231,26687],{"class":92},[58,169233,148632],{"class":5862},[58,169235,4385],{"class":75},[58,169237,169238,169240],{"class":60,"line":105},[58,169239,31943],{"class":82},[58,169241,169181],{"class":75},[58,169243,169244],{"class":60,"line":627},[58,169245,3046],{"emptyLinePlaceholder":720},[58,169247,169248,169250],{"class":60,"line":509},[58,169249,45998],{"class":5862},[58,169251,168994],{"class":75},[14,169253,169255],{"id":169254},"_85-with语句","8.5 with语句",[175,169257,169258,169260],{},[55,169259,108462],{}," 会自动关闭文件，推荐使用。",[48,169262,169264],{"className":31022,"code":169263,"language":31024,"meta":53,"style":53},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[55,169265,169266,169296,169306],{"__ignoreMap":53},[58,169267,169268,169270,169272,169274,169276,169278,169280,169282,169284,169286,169288,169290,169292,169294],{"class":60,"line":61},[58,169269,108462],{"class":92},[58,169271,147270],{"class":82},[58,169273,793],{"class":75},[58,169275,147275],{"class":386},[58,169277,469],{"class":75},[58,169279,147280],{"class":386},[58,169281,469],{"class":75},[58,169283,147285],{"class":5862},[58,169285,383],{"class":92},[58,169287,147290],{"class":386},[58,169289,14358],{"class":75},[58,169291,32027],{"class":92},[58,169293,148632],{"class":5862},[58,169295,4385],{"class":75},[58,169297,169298,169300,169302,169304],{"class":60,"line":68},[58,169299,147302],{"class":75},[58,169301,383],{"class":92},[58,169303,148632],{"class":5862},[58,169305,168980],{"class":75},[58,169307,169308,169310],{"class":60,"line":79},[58,169309,31943],{"class":82},[58,169311,168987],{"class":75},[175,169313,169314],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,169316,169318],{"id":169317},"_86-写入文件","8.6 写入文件",[175,169320,169321,169323],{},[55,169322,247],{}," 模式会清空原文件。",[48,169325,169327],{"className":31022,"code":169326,"language":31024,"meta":53,"style":53},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[55,169328,169329,169359,169376],{"__ignoreMap":53},[58,169330,169331,169333,169335,169337,169339,169341,169343,169345,169347,169349,169351,169353,169355,169357],{"class":60,"line":61},[58,169332,108462],{"class":92},[58,169334,147270],{"class":82},[58,169336,793],{"class":75},[58,169338,147275],{"class":386},[58,169340,469],{"class":75},[58,169342,152455],{"class":386},[58,169344,469],{"class":75},[58,169346,147285],{"class":5862},[58,169348,383],{"class":92},[58,169350,147290],{"class":386},[58,169352,14358],{"class":75},[58,169354,32027],{"class":92},[58,169356,148632],{"class":5862},[58,169358,4385],{"class":75},[58,169360,169361,169364,169367,169370,169372,169374],{"class":60,"line":68},[58,169362,169363],{"class":5862},"    file",[58,169365,169366],{"class":75},".write(",[58,169368,169369],{"class":386},"\"hello",[58,169371,157004],{"class":82},[58,169373,1037],{"class":386},[58,169375,799],{"class":75},[58,169377,169378,169380,169382,169385,169387,169389],{"class":60,"line":79},[58,169379,169363],{"class":5862},[58,169381,169366],{"class":75},[58,169383,169384],{"class":386},"\"python",[58,169386,157004],{"class":82},[58,169388,1037],{"class":386},[58,169390,799],{"class":75},[175,169392,169393],{},"写入多行：",[48,169395,169397],{"className":31022,"code":169396,"language":31024,"meta":53,"style":53},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[55,169398,169399,169434,169438,169469],{"__ignoreMap":53},[58,169400,169401,169403,169405,169407,169410,169412,169414,169416,169419,169421,169423,169425,169428,169430,169432],{"class":60,"line":61},[58,169402,169130],{"class":75},[58,169404,383],{"class":92},[58,169406,52864],{"class":75},[58,169408,169409],{"class":386},"\"小明,18",[58,169411,157004],{"class":82},[58,169413,1037],{"class":386},[58,169415,469],{"class":75},[58,169417,169418],{"class":386},"\"小红,17",[58,169420,157004],{"class":82},[58,169422,1037],{"class":386},[58,169424,469],{"class":75},[58,169426,169427],{"class":386},"\"小刚,19",[58,169429,157004],{"class":82},[58,169431,1037],{"class":386},[58,169433,33890],{"class":75},[58,169435,169436],{"class":60,"line":68},[58,169437,3046],{"emptyLinePlaceholder":720},[58,169439,169440,169442,169444,169446,169449,169451,169453,169455,169457,169459,169461,169463,169465,169467],{"class":60,"line":79},[58,169441,108462],{"class":92},[58,169443,147270],{"class":82},[58,169445,793],{"class":75},[58,169447,169448],{"class":386},"\"students.txt\"",[58,169450,469],{"class":75},[58,169452,152455],{"class":386},[58,169454,469],{"class":75},[58,169456,147285],{"class":5862},[58,169458,383],{"class":92},[58,169460,147290],{"class":386},[58,169462,14358],{"class":75},[58,169464,32027],{"class":92},[58,169466,148632],{"class":5862},[58,169468,4385],{"class":75},[58,169470,169471,169473],{"class":60,"line":105},[58,169472,169363],{"class":5862},[58,169474,169475],{"class":75},".writelines(lines)\n",[14,169477,169479],{"id":169478},"_87-追加文件","8.7 追加文件",[175,169481,169482,169484],{},[55,169483,376],{}," 模式不会清空原内容，而是在末尾追加。",[48,169486,169488],{"className":31022,"code":169487,"language":31024,"meta":53,"style":53},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[55,169489,169490,169521],{"__ignoreMap":53},[58,169491,169492,169494,169496,169498,169501,169503,169505,169507,169509,169511,169513,169515,169517,169519],{"class":60,"line":61},[58,169493,108462],{"class":92},[58,169495,147270],{"class":82},[58,169497,793],{"class":75},[58,169499,169500],{"class":386},"\"log.txt\"",[58,169502,469],{"class":75},[58,169504,165804],{"class":386},[58,169506,469],{"class":75},[58,169508,147285],{"class":5862},[58,169510,383],{"class":92},[58,169512,147290],{"class":386},[58,169514,14358],{"class":75},[58,169516,32027],{"class":92},[58,169518,148632],{"class":5862},[58,169520,4385],{"class":75},[58,169522,169523,169525,169527,169530,169532,169534],{"class":60,"line":68},[58,169524,169363],{"class":5862},[58,169526,169366],{"class":75},[58,169528,169529],{"class":386},"\"程序启动",[58,169531,157004],{"class":82},[58,169533,1037],{"class":386},[58,169535,799],{"class":75},[175,169537,169538],{},"日志类文件常用追加模式。",[14,169540,169542],{"id":169541},"_88-文件编码","8.8 文件编码",[175,169544,169545],{},"编码决定文字如何保存为字节。",[175,169547,169548],{},"常见编码：",[19,169550,169551,169554],{},[22,169552,169553],{},"UTF-8：推荐。",[22,169555,169556],{},"GBK：部分 Windows 中文文件常见。",[175,169558,169559],{},"读取文件乱码时，可以尝试：",[48,169561,169563],{"className":31022,"code":169562,"language":31024,"meta":53,"style":53},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[55,169564,169565,169596],{"__ignoreMap":53},[58,169566,169567,169569,169571,169573,169575,169577,169579,169581,169583,169585,169588,169590,169592,169594],{"class":60,"line":61},[58,169568,108462],{"class":92},[58,169570,147270],{"class":82},[58,169572,793],{"class":75},[58,169574,147275],{"class":386},[58,169576,469],{"class":75},[58,169578,147280],{"class":386},[58,169580,469],{"class":75},[58,169582,147285],{"class":5862},[58,169584,383],{"class":92},[58,169586,169587],{"class":386},"\"gbk\"",[58,169589,14358],{"class":75},[58,169591,32027],{"class":92},[58,169593,148632],{"class":5862},[58,169595,4385],{"class":75},[58,169597,169598,169600,169602,169604],{"class":60,"line":68},[58,169599,147302],{"class":75},[58,169601,383],{"class":92},[58,169603,148632],{"class":5862},[58,169605,168980],{"class":75},[175,169607,169608],{},"写文件时建议统一 UTF-8：",[48,169610,169612],{"className":31022,"code":169611,"language":31024,"meta":53,"style":53},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[55,169613,169614,169644],{"__ignoreMap":53},[58,169615,169616,169618,169620,169622,169624,169626,169628,169630,169632,169634,169636,169638,169640,169642],{"class":60,"line":61},[58,169617,108462],{"class":92},[58,169619,147270],{"class":82},[58,169621,793],{"class":75},[58,169623,147275],{"class":386},[58,169625,469],{"class":75},[58,169627,152455],{"class":386},[58,169629,469],{"class":75},[58,169631,147285],{"class":5862},[58,169633,383],{"class":92},[58,169635,147290],{"class":386},[58,169637,14358],{"class":75},[58,169639,32027],{"class":92},[58,169641,148632],{"class":5862},[58,169643,4385],{"class":75},[58,169645,169646,169648,169650,169653],{"class":60,"line":68},[58,169647,169363],{"class":5862},[58,169649,169366],{"class":75},[58,169651,169652],{"class":386},"\"中文内容\"",[58,169654,799],{"class":75},[14,169656,169658],{"id":169657},"_89-pathlib","8.9 pathlib",[175,169660,169661,169664],{},[55,169662,169663],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[48,169666,169668],{"className":31022,"code":169667,"language":31024,"meta":53,"style":53},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[55,169669,169670,169680,169684,169702],{"__ignoreMap":53},[58,169671,169672,169674,169676,169678],{"class":60,"line":61},[58,169673,31381],{"class":92},[58,169675,108940],{"class":75},[58,169677,31036],{"class":92},[58,169679,108945],{"class":75},[58,169681,169682],{"class":60,"line":68},[58,169683,3046],{"emptyLinePlaceholder":720},[58,169685,169686,169688,169690,169692,169695,169697,169699],{"class":60,"line":79},[58,169687,168790],{"class":75},[58,169689,383],{"class":92},[58,169691,109174],{"class":75},[58,169693,169694],{"class":386},"\"data\"",[58,169696,14358],{"class":75},[58,169698,1370],{"class":92},[58,169700,169701],{"class":386}," \"students.txt\"\n",[58,169703,169704,169706],{"class":60,"line":105},[58,169705,31059],{"class":82},[58,169707,169708],{"class":75},"(path)\n",[175,169710,169711],{},"创建目录：",[48,169713,169715],{"className":31022,"code":169714,"language":31024,"meta":53,"style":53},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[55,169716,169717,169727,169731,169744],{"__ignoreMap":53},[58,169718,169719,169721,169723,169725],{"class":60,"line":61},[58,169720,31381],{"class":92},[58,169722,108940],{"class":75},[58,169724,31036],{"class":92},[58,169726,108945],{"class":75},[58,169728,169729],{"class":60,"line":68},[58,169730,3046],{"emptyLinePlaceholder":720},[58,169732,169733,169736,169738,169740,169742],{"class":60,"line":79},[58,169734,169735],{"class":75},"data_dir ",[58,169737,383],{"class":92},[58,169739,109174],{"class":75},[58,169741,169694],{"class":386},[58,169743,799],{"class":75},[58,169745,169746,169749,169752,169754,169756],{"class":60,"line":105},[58,169747,169748],{"class":75},"data_dir.mkdir(",[58,169750,169751],{"class":5862},"exist_ok",[58,169753,383],{"class":92},[58,169755,32120],{"class":82},[58,169757,799],{"class":75},[175,169759,169760],{},"判断文件是否存在：",[48,169762,169764],{"className":31022,"code":169763,"language":31024,"meta":53,"style":53},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[55,169765,169766,169779,169783,169790],{"__ignoreMap":53},[58,169767,169768,169770,169772,169774,169777],{"class":60,"line":61},[58,169769,168790],{"class":75},[58,169771,383],{"class":92},[58,169773,109174],{"class":75},[58,169775,169776],{"class":386},"\"data\u002Fstudents.txt\"",[58,169778,799],{"class":75},[58,169780,169781],{"class":60,"line":68},[58,169782,3046],{"emptyLinePlaceholder":720},[58,169784,169785,169787],{"class":60,"line":79},[58,169786,2180],{"class":92},[58,169788,169789],{"class":75}," path.exists():\n",[58,169791,169792,169794,169796,169799],{"class":60,"line":105},[58,169793,31943],{"class":82},[58,169795,793],{"class":75},[58,169797,169798],{"class":386},"\"文件存在\"",[58,169800,799],{"class":75},[175,169802,169803],{},"读写文本：",[48,169805,169807],{"className":31022,"code":169806,"language":31024,"meta":53,"style":53},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[55,169808,169809,169821,169825,169842,169859],{"__ignoreMap":53},[58,169810,169811,169813,169815,169817,169819],{"class":60,"line":61},[58,169812,168790],{"class":75},[58,169814,383],{"class":92},[58,169816,109174],{"class":75},[58,169818,147275],{"class":386},[58,169820,799],{"class":75},[58,169822,169823],{"class":60,"line":68},[58,169824,3046],{"emptyLinePlaceholder":720},[58,169826,169827,169830,169832,169834,169836,169838,169840],{"class":60,"line":79},[58,169828,169829],{"class":75},"path.write_text(",[58,169831,146355],{"class":386},[58,169833,469],{"class":75},[58,169835,147285],{"class":5862},[58,169837,383],{"class":92},[58,169839,147290],{"class":386},[58,169841,799],{"class":75},[58,169843,169844,169846,169848,169851,169853,169855,169857],{"class":60,"line":105},[58,169845,168973],{"class":75},[58,169847,383],{"class":92},[58,169849,169850],{"class":75}," path.read_text(",[58,169852,147285],{"class":5862},[58,169854,383],{"class":92},[58,169856,147290],{"class":386},[58,169858,799],{"class":75},[58,169860,169861,169863],{"class":60,"line":627},[58,169862,31059],{"class":82},[58,169864,168987],{"class":75},[14,169866,169868],{"id":169867},"_810-json文件","8.10 JSON文件",[175,169870,169871],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[48,169873,169875],{"className":31022,"code":169874,"language":31024,"meta":53,"style":53},"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",[55,169876,169877,169883,169887,169895,169905,169915,169923,169927,169931,169956],{"__ignoreMap":53},[58,169878,169879,169881],{"class":60,"line":61},[58,169880,31036],{"class":92},[58,169882,147570],{"class":75},[58,169884,169885],{"class":60,"line":68},[58,169886,3046],{"emptyLinePlaceholder":720},[58,169888,169889,169891,169893],{"class":60,"line":79},[58,169890,149960],{"class":75},[58,169892,383],{"class":92},[58,169894,76],{"class":75},[58,169896,169897,169899,169901,169903],{"class":60,"line":105},[58,169898,147499],{"class":386},[58,169900,86],{"class":75},[58,169902,150367],{"class":386},[58,169904,32110],{"class":75},[58,169906,169907,169909,169911,169913],{"class":60,"line":627},[58,169908,165016],{"class":386},[58,169910,86],{"class":75},[58,169912,1436],{"class":82},[58,169914,32110],{"class":75},[58,169916,169917,169919,169921],{"class":60,"line":509},[58,169918,165027],{"class":386},[58,169920,86],{"class":75},[58,169922,165032],{"class":82},[58,169924,169925],{"class":60,"line":559},[58,169926,108],{"class":75},[58,169928,169929],{"class":60,"line":654},[58,169930,3046],{"emptyLinePlaceholder":720},[58,169932,169933,169935,169937,169940,169942,169944,169946,169948,169950,169952,169954],{"class":60,"line":671},[58,169934,156923],{"class":75},[58,169936,383],{"class":92},[58,169938,169939],{"class":75}," json.dumps(student, ",[58,169941,147616],{"class":5862},[58,169943,383],{"class":92},[58,169945,34631],{"class":82},[58,169947,469],{"class":75},[58,169949,152491],{"class":5862},[58,169951,383],{"class":92},[58,169953,867],{"class":82},[58,169955,799],{"class":75},[58,169957,169958,169960],{"class":60,"line":677},[58,169959,31059],{"class":82},[58,169961,164550],{"class":75},[175,169963,169964],{},"写入 JSON 文件：",[48,169966,169968],{"className":31022,"code":169967,"language":31024,"meta":53,"style":53},"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",[55,169969,169970,169976,169980,169988,170016,170044,170048,170052,170082],{"__ignoreMap":53},[58,169971,169972,169974],{"class":60,"line":61},[58,169973,31036],{"class":92},[58,169975,147570],{"class":75},[58,169977,169978],{"class":60,"line":68},[58,169979,3046],{"emptyLinePlaceholder":720},[58,169981,169982,169984,169986],{"class":60,"line":79},[58,169983,160195],{"class":75},[58,169985,383],{"class":92},[58,169987,56081],{"class":75},[58,169989,169990,169992,169994,169996,169998,170000,170002,170004,170006,170008,170010,170012,170014],{"class":60,"line":105},[58,169991,148864],{"class":75},[58,169993,63311],{"class":386},[58,169995,86],{"class":75},[58,169997,150367],{"class":386},[58,169999,469],{"class":75},[58,170001,69756],{"class":386},[58,170003,86],{"class":75},[58,170005,1436],{"class":82},[58,170007,469],{"class":75},[58,170009,151951],{"class":386},[58,170011,86],{"class":75},[58,170013,1773],{"class":82},[58,170015,5576],{"class":75},[58,170017,170018,170020,170022,170024,170026,170028,170030,170032,170034,170036,170038,170040,170042],{"class":60,"line":627},[58,170019,148864],{"class":75},[58,170021,63311],{"class":386},[58,170023,86],{"class":75},[58,170025,151415],{"class":386},[58,170027,469],{"class":75},[58,170029,69756],{"class":386},[58,170031,86],{"class":75},[58,170033,1411],{"class":82},[58,170035,469],{"class":75},[58,170037,151951],{"class":386},[58,170039,86],{"class":75},[58,170041,1596],{"class":82},[58,170043,5576],{"class":75},[58,170045,170046],{"class":60,"line":509},[58,170047,33890],{"class":75},[58,170049,170050],{"class":60,"line":559},[58,170051,3046],{"emptyLinePlaceholder":720},[58,170053,170054,170056,170058,170060,170062,170064,170066,170068,170070,170072,170074,170076,170078,170080],{"class":60,"line":654},[58,170055,108462],{"class":92},[58,170057,147270],{"class":82},[58,170059,793],{"class":75},[58,170061,152310],{"class":386},[58,170063,469],{"class":75},[58,170065,152455],{"class":386},[58,170067,469],{"class":75},[58,170069,147285],{"class":5862},[58,170071,383],{"class":92},[58,170073,147290],{"class":386},[58,170075,14358],{"class":75},[58,170077,32027],{"class":92},[58,170079,148632],{"class":5862},[58,170081,4385],{"class":75},[58,170083,170084,170087,170089,170091,170093,170095,170097,170099,170101,170103,170105],{"class":60,"line":671},[58,170085,170086],{"class":75},"    json.dump(students, ",[58,170088,45998],{"class":5862},[58,170090,469],{"class":75},[58,170092,147616],{"class":5862},[58,170094,383],{"class":92},[58,170096,34631],{"class":82},[58,170098,469],{"class":75},[58,170100,152491],{"class":5862},[58,170102,383],{"class":92},[58,170104,867],{"class":82},[58,170106,799],{"class":75},[175,170108,170109],{},"读取 JSON 文件：",[48,170111,170113],{"className":31022,"code":170112,"language":31024,"meta":53,"style":53},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[55,170114,170115,170121,170125,170155,170167,170171],{"__ignoreMap":53},[58,170116,170117,170119],{"class":60,"line":61},[58,170118,31036],{"class":92},[58,170120,147570],{"class":75},[58,170122,170123],{"class":60,"line":68},[58,170124,3046],{"emptyLinePlaceholder":720},[58,170126,170127,170129,170131,170133,170135,170137,170139,170141,170143,170145,170147,170149,170151,170153],{"class":60,"line":79},[58,170128,108462],{"class":92},[58,170130,147270],{"class":82},[58,170132,793],{"class":75},[58,170134,152310],{"class":386},[58,170136,469],{"class":75},[58,170138,147280],{"class":386},[58,170140,469],{"class":75},[58,170142,147285],{"class":5862},[58,170144,383],{"class":92},[58,170146,147290],{"class":386},[58,170148,14358],{"class":75},[58,170150,32027],{"class":92},[58,170152,148632],{"class":5862},[58,170154,4385],{"class":75},[58,170156,170157,170159,170161,170163,170165],{"class":60,"line":105},[58,170158,153516],{"class":75},[58,170160,383],{"class":92},[58,170162,148643],{"class":75},[58,170164,45998],{"class":5862},[58,170166,799],{"class":75},[58,170168,170169],{"class":60,"line":627},[58,170170,3046],{"emptyLinePlaceholder":720},[58,170172,170173,170175],{"class":60,"line":509},[58,170174,31059],{"class":82},[58,170176,165474],{"class":75},[14,170178,170180],{"id":170179},"_811-csv文件","8.11 CSV文件",[175,170182,170183],{},"CSV 是逗号分隔值，常用于表格数据。",[175,170185,170186],{},"写入 CSV：",[48,170188,170190],{"className":31022,"code":170189,"language":31024,"meta":53,"style":53},"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",[55,170191,170192,170199,170203,170211,170229,170245,170261,170265,170269,170309,170323],{"__ignoreMap":53},[58,170193,170194,170196],{"class":60,"line":61},[58,170195,31036],{"class":92},[58,170197,170198],{"class":75}," csv\n",[58,170200,170201],{"class":60,"line":68},[58,170202,3046],{"emptyLinePlaceholder":720},[58,170204,170205,170207,170209],{"class":60,"line":79},[58,170206,160195],{"class":75},[58,170208,383],{"class":92},[58,170210,56081],{"class":75},[58,170212,170213,170216,170218,170220,170222,170224,170227],{"class":60,"line":105},[58,170214,170215],{"class":75},"    [",[58,170217,73730],{"class":386},[58,170219,469],{"class":75},[58,170221,73763],{"class":386},[58,170223,469],{"class":75},[58,170225,170226],{"class":386},"\"成绩\"",[58,170228,88465],{"class":75},[58,170230,170231,170233,170235,170237,170239,170241,170243],{"class":60,"line":627},[58,170232,170215],{"class":75},[58,170234,150367],{"class":386},[58,170236,469],{"class":75},[58,170238,1436],{"class":82},[58,170240,469],{"class":75},[58,170242,1773],{"class":82},[58,170244,88465],{"class":75},[58,170246,170247,170249,170251,170253,170255,170257,170259],{"class":60,"line":509},[58,170248,170215],{"class":75},[58,170250,151415],{"class":386},[58,170252,469],{"class":75},[58,170254,1411],{"class":82},[58,170256,469],{"class":75},[58,170258,1596],{"class":82},[58,170260,88465],{"class":75},[58,170262,170263],{"class":60,"line":559},[58,170264,33890],{"class":75},[58,170266,170267],{"class":60,"line":654},[58,170268,3046],{"emptyLinePlaceholder":720},[58,170270,170271,170273,170275,170277,170280,170282,170284,170286,170288,170290,170292,170294,170297,170299,170301,170303,170305,170307],{"class":60,"line":671},[58,170272,108462],{"class":92},[58,170274,147270],{"class":82},[58,170276,793],{"class":75},[58,170278,170279],{"class":386},"\"students.csv\"",[58,170281,469],{"class":75},[58,170283,152455],{"class":386},[58,170285,469],{"class":75},[58,170287,147285],{"class":5862},[58,170289,383],{"class":92},[58,170291,147290],{"class":386},[58,170293,469],{"class":75},[58,170295,170296],{"class":5862},"newline",[58,170298,383],{"class":92},[58,170300,8298],{"class":386},[58,170302,14358],{"class":75},[58,170304,32027],{"class":92},[58,170306,148632],{"class":5862},[58,170308,4385],{"class":75},[58,170310,170311,170314,170316,170319,170321],{"class":60,"line":677},[58,170312,170313],{"class":75},"    writer ",[58,170315,383],{"class":92},[58,170317,170318],{"class":75}," csv.writer(",[58,170320,45998],{"class":5862},[58,170322,799],{"class":75},[58,170324,170325],{"class":60,"line":2260},[58,170326,170327],{"class":75},"    writer.writerows(students)\n",[175,170329,170330],{},"读取 CSV：",[48,170332,170334],{"className":31022,"code":170333,"language":31024,"meta":53,"style":53},"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",[55,170335,170336,170342,170346,170376,170390,170402],{"__ignoreMap":53},[58,170337,170338,170340],{"class":60,"line":61},[58,170339,31036],{"class":92},[58,170341,170198],{"class":75},[58,170343,170344],{"class":60,"line":68},[58,170345,3046],{"emptyLinePlaceholder":720},[58,170347,170348,170350,170352,170354,170356,170358,170360,170362,170364,170366,170368,170370,170372,170374],{"class":60,"line":79},[58,170349,108462],{"class":92},[58,170351,147270],{"class":82},[58,170353,793],{"class":75},[58,170355,170279],{"class":386},[58,170357,469],{"class":75},[58,170359,147280],{"class":386},[58,170361,469],{"class":75},[58,170363,147285],{"class":5862},[58,170365,383],{"class":92},[58,170367,147290],{"class":386},[58,170369,14358],{"class":75},[58,170371,32027],{"class":92},[58,170373,148632],{"class":5862},[58,170375,4385],{"class":75},[58,170377,170378,170381,170383,170386,170388],{"class":60,"line":105},[58,170379,170380],{"class":75},"    reader ",[58,170382,383],{"class":92},[58,170384,170385],{"class":75}," csv.reader(",[58,170387,45998],{"class":5862},[58,170389,799],{"class":75},[58,170391,170392,170394,170397,170399],{"class":60,"line":627},[58,170393,3847],{"class":92},[58,170395,170396],{"class":75}," row ",[58,170398,26687],{"class":92},[58,170400,170401],{"class":75}," reader:\n",[58,170403,170404,170406],{"class":60,"line":509},[58,170405,33095],{"class":82},[58,170407,170408],{"class":75},"(row)\n",[175,170410,170411],{},"使用字典写入：",[48,170413,170415],{"className":31022,"code":170414,"language":31024,"meta":53,"style":53},"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",[55,170416,170417,170423,170427,170435,170463,170491,170495,170499,170537,170558,170579,170584],{"__ignoreMap":53},[58,170418,170419,170421],{"class":60,"line":61},[58,170420,31036],{"class":92},[58,170422,170198],{"class":75},[58,170424,170425],{"class":60,"line":68},[58,170426,3046],{"emptyLinePlaceholder":720},[58,170428,170429,170431,170433],{"class":60,"line":79},[58,170430,160195],{"class":75},[58,170432,383],{"class":92},[58,170434,56081],{"class":75},[58,170436,170437,170439,170441,170443,170445,170447,170449,170451,170453,170455,170457,170459,170461],{"class":60,"line":105},[58,170438,148864],{"class":75},[58,170440,63311],{"class":386},[58,170442,86],{"class":75},[58,170444,150367],{"class":386},[58,170446,469],{"class":75},[58,170448,69756],{"class":386},[58,170450,86],{"class":75},[58,170452,1436],{"class":82},[58,170454,469],{"class":75},[58,170456,151951],{"class":386},[58,170458,86],{"class":75},[58,170460,1773],{"class":82},[58,170462,5576],{"class":75},[58,170464,170465,170467,170469,170471,170473,170475,170477,170479,170481,170483,170485,170487,170489],{"class":60,"line":627},[58,170466,148864],{"class":75},[58,170468,63311],{"class":386},[58,170470,86],{"class":75},[58,170472,151415],{"class":386},[58,170474,469],{"class":75},[58,170476,69756],{"class":386},[58,170478,86],{"class":75},[58,170480,1411],{"class":82},[58,170482,469],{"class":75},[58,170484,151951],{"class":386},[58,170486,86],{"class":75},[58,170488,1596],{"class":82},[58,170490,5576],{"class":75},[58,170492,170493],{"class":60,"line":509},[58,170494,33890],{"class":75},[58,170496,170497],{"class":60,"line":559},[58,170498,3046],{"emptyLinePlaceholder":720},[58,170500,170501,170503,170505,170507,170509,170511,170513,170515,170517,170519,170521,170523,170525,170527,170529,170531,170533,170535],{"class":60,"line":654},[58,170502,108462],{"class":92},[58,170504,147270],{"class":82},[58,170506,793],{"class":75},[58,170508,170279],{"class":386},[58,170510,469],{"class":75},[58,170512,152455],{"class":386},[58,170514,469],{"class":75},[58,170516,147285],{"class":5862},[58,170518,383],{"class":92},[58,170520,147290],{"class":386},[58,170522,469],{"class":75},[58,170524,170296],{"class":5862},[58,170526,383],{"class":92},[58,170528,8298],{"class":386},[58,170530,14358],{"class":75},[58,170532,32027],{"class":92},[58,170534,148632],{"class":5862},[58,170536,4385],{"class":75},[58,170538,170539,170542,170544,170546,170548,170550,170552,170554,170556],{"class":60,"line":671},[58,170540,170541],{"class":75},"    fieldnames ",[58,170543,383],{"class":92},[58,170545,52864],{"class":75},[58,170547,63311],{"class":386},[58,170549,469],{"class":75},[58,170551,69756],{"class":386},[58,170553,469],{"class":75},[58,170555,151951],{"class":386},[58,170557,33890],{"class":75},[58,170559,170560,170562,170564,170567,170569,170571,170574,170576],{"class":60,"line":677},[58,170561,170313],{"class":75},[58,170563,383],{"class":92},[58,170565,170566],{"class":75}," csv.DictWriter(",[58,170568,45998],{"class":5862},[58,170570,469],{"class":75},[58,170572,170573],{"class":5862},"fieldnames",[58,170575,383],{"class":92},[58,170577,170578],{"class":75},"fieldnames)\n",[58,170580,170581],{"class":60,"line":2260},[58,170582,170583],{"class":75},"    writer.writeheader()\n",[58,170585,170586],{"class":60,"line":694},[58,170587,170327],{"class":75},[14,170589,170591],{"id":170590},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[175,170593,123921],{},[19,170595,170596,170599,170602],{},[22,170597,170598],{},"读取文本文件。",[22,170600,170601],{},"统计每个单词出现次数。",[22,170603,170604],{},"输出出现次数最多的前 10 个单词。",[175,170606,10680],{},[48,170608,170610],{"className":31022,"code":170609,"language":31024,"meta":53,"style":53},"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",[55,170611,170612,170622,170626,170639,170655,170659,170669,170678,170682,170694,170714,170723,170727,170745,170749,170779,170783,170799],{"__ignoreMap":53},[58,170613,170614,170616,170618,170620],{"class":60,"line":61},[58,170615,31381],{"class":92},[58,170617,108940],{"class":75},[58,170619,31036],{"class":92},[58,170621,108945],{"class":75},[58,170623,170624],{"class":60,"line":68},[58,170625,3046],{"emptyLinePlaceholder":720},[58,170627,170628,170630,170632,170634,170637],{"class":60,"line":79},[58,170629,168790],{"class":75},[58,170631,383],{"class":92},[58,170633,109174],{"class":75},[58,170635,170636],{"class":386},"\"article.txt\"",[58,170638,799],{"class":75},[58,170640,170641,170643,170645,170647,170649,170651,170653],{"class":60,"line":105},[58,170642,168973],{"class":75},[58,170644,383],{"class":92},[58,170646,169850],{"class":75},[58,170648,147285],{"class":5862},[58,170650,383],{"class":92},[58,170652,147290],{"class":386},[58,170654,799],{"class":75},[58,170656,170657],{"class":60,"line":627},[58,170658,3046],{"emptyLinePlaceholder":720},[58,170660,170661,170664,170666],{"class":60,"line":509},[58,170662,170663],{"class":75},"words ",[58,170665,383],{"class":92},[58,170667,170668],{"class":75}," content.lower().split()\n",[58,170670,170671,170674,170676],{"class":60,"line":559},[58,170672,170673],{"class":75},"counter ",[58,170675,383],{"class":92},[58,170677,88497],{"class":75},[58,170679,170680],{"class":60,"line":654},[58,170681,3046],{"emptyLinePlaceholder":720},[58,170683,170684,170686,170689,170691],{"class":60,"line":671},[58,170685,3671],{"class":92},[58,170687,170688],{"class":75}," word ",[58,170690,26687],{"class":92},[58,170692,170693],{"class":75}," words:\n",[58,170695,170696,170699,170701,170704,170707,170709,170712],{"class":60,"line":677},[58,170697,170698],{"class":75},"    word ",[58,170700,383],{"class":92},[58,170702,170703],{"class":75}," word.strip(",[58,170705,170706],{"class":386},"\".,!?;:",[58,170708,156974],{"class":82},[58,170710,170711],{"class":386},"'()[]\"",[58,170713,799],{"class":75},[58,170715,170716,170718,170720],{"class":60,"line":2260},[58,170717,3747],{"class":92},[58,170719,39574],{"class":92},[58,170721,170722],{"class":75}," word:\n",[58,170724,170725],{"class":60,"line":694},[58,170726,148991],{"class":92},[58,170728,170729,170732,170734,170737,170739,170741,170743],{"class":60,"line":2270},[58,170730,170731],{"class":75},"    counter[word] ",[58,170733,383],{"class":92},[58,170735,170736],{"class":75}," counter.get(word, ",[58,170738,979],{"class":82},[58,170740,14358],{"class":75},[58,170742,1267],{"class":92},[58,170744,56333],{"class":82},[58,170746,170747],{"class":60,"line":2275},[58,170748,3046],{"emptyLinePlaceholder":720},[58,170750,170751,170754,170756,170758,170761,170763,170765,170767,170769,170771,170773,170775,170777],{"class":60,"line":2289},[58,170752,170753],{"class":75},"items ",[58,170755,383],{"class":92},[58,170757,164083],{"class":82},[58,170759,170760],{"class":75},"(counter.items(), ",[58,170762,154425],{"class":5862},[58,170764,154428],{"class":92},[58,170766,154431],{"class":75},[58,170768,89],{"class":82},[58,170770,112831],{"class":75},[58,170772,164007],{"class":5862},[58,170774,383],{"class":92},[58,170776,32120],{"class":82},[58,170778,799],{"class":75},[58,170780,170781],{"class":60,"line":2294},[58,170782,3046],{"emptyLinePlaceholder":720},[58,170784,170785,170787,170790,170792,170795,170797],{"class":60,"line":2300},[58,170786,3671],{"class":92},[58,170788,170789],{"class":75}," word, count ",[58,170791,26687],{"class":92},[58,170793,170794],{"class":75}," items[:",[58,170796,1232],{"class":82},[58,170798,166234],{"class":75},[58,170800,170801,170803],{"class":60,"line":2321},[58,170802,31943],{"class":82},[58,170804,170805],{"class":75},"(word, count)\n",[14,170807,170809],{"id":170808},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[48,170811,170813],{"className":31022,"code":170812,"language":31024,"meta":53,"style":53},"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",[55,170814,170815,170821,170831,170835,170847,170851,170855,170863,170873,170879,170883,170913,170923,170927,170931,170939,170969,170993,170997,171001,171009,171038,171043],{"__ignoreMap":53},[58,170816,170817,170819],{"class":60,"line":61},[58,170818,31036],{"class":92},[58,170820,147570],{"class":75},[58,170822,170823,170825,170827,170829],{"class":60,"line":68},[58,170824,31381],{"class":92},[58,170826,108940],{"class":75},[58,170828,31036],{"class":92},[58,170830,108945],{"class":75},[58,170832,170833],{"class":60,"line":79},[58,170834,3046],{"emptyLinePlaceholder":720},[58,170836,170837,170839,170841,170843,170845],{"class":60,"line":105},[58,170838,152303],{"class":82},[58,170840,14208],{"class":92},[58,170842,109174],{"class":75},[58,170844,152310],{"class":386},[58,170846,799],{"class":75},[58,170848,170849],{"class":60,"line":627},[58,170850,3046],{"emptyLinePlaceholder":720},[58,170852,170853],{"class":60,"line":509},[58,170854,3046],{"emptyLinePlaceholder":720},[58,170856,170857,170859,170861],{"class":60,"line":559},[58,170858,32591],{"class":92},[58,170860,152327],{"class":379},[58,170862,32597],{"class":75},[58,170864,170865,170867,170869,170871],{"class":60,"line":654},[58,170866,3747],{"class":92},[58,170868,39574],{"class":92},[58,170870,152338],{"class":82},[58,170872,152341],{"class":75},[58,170874,170875,170877],{"class":60,"line":671},[58,170876,15396],{"class":92},[58,170878,52476],{"class":75},[58,170880,170881],{"class":60,"line":677},[58,170882,3046],{"emptyLinePlaceholder":720},[58,170884,170885,170887,170889,170891,170893,170895,170897,170899,170901,170903,170905,170907,170909,170911],{"class":60,"line":2260},[58,170886,34822],{"class":92},[58,170888,147270],{"class":82},[58,170890,793],{"class":75},[58,170892,152303],{"class":82},[58,170894,469],{"class":75},[58,170896,147280],{"class":386},[58,170898,469],{"class":75},[58,170900,147285],{"class":5862},[58,170902,383],{"class":92},[58,170904,147290],{"class":386},[58,170906,14358],{"class":75},[58,170908,32027],{"class":92},[58,170910,148632],{"class":5862},[58,170912,4385],{"class":75},[58,170914,170915,170917,170919,170921],{"class":60,"line":694},[58,170916,15396],{"class":92},[58,170918,148643],{"class":75},[58,170920,45998],{"class":5862},[58,170922,799],{"class":75},[58,170924,170925],{"class":60,"line":2270},[58,170926,3046],{"emptyLinePlaceholder":720},[58,170928,170929],{"class":60,"line":2275},[58,170930,3046],{"emptyLinePlaceholder":720},[58,170932,170933,170935,170937],{"class":60,"line":2289},[58,170934,32591],{"class":92},[58,170936,152437],{"class":379},[58,170938,152440],{"class":75},[58,170940,170941,170943,170945,170947,170949,170951,170953,170955,170957,170959,170961,170963,170965,170967],{"class":60,"line":2294},[58,170942,34822],{"class":92},[58,170944,147270],{"class":82},[58,170946,793],{"class":75},[58,170948,152303],{"class":82},[58,170950,469],{"class":75},[58,170952,152455],{"class":386},[58,170954,469],{"class":75},[58,170956,147285],{"class":5862},[58,170958,383],{"class":92},[58,170960,147290],{"class":386},[58,170962,14358],{"class":75},[58,170964,32027],{"class":92},[58,170966,148632],{"class":5862},[58,170968,4385],{"class":75},[58,170970,170971,170973,170975,170977,170979,170981,170983,170985,170987,170989,170991],{"class":60,"line":2300},[58,170972,152476],{"class":75},[58,170974,45998],{"class":5862},[58,170976,469],{"class":75},[58,170978,147616],{"class":5862},[58,170980,383],{"class":92},[58,170982,34631],{"class":82},[58,170984,469],{"class":75},[58,170986,152491],{"class":5862},[58,170988,383],{"class":92},[58,170990,867],{"class":82},[58,170992,799],{"class":75},[58,170994,170995],{"class":60,"line":2321},[58,170996,3046],{"emptyLinePlaceholder":720},[58,170998,170999],{"class":60,"line":2326},[58,171000,3046],{"emptyLinePlaceholder":720},[58,171002,171003,171005,171007],{"class":60,"line":2340},[58,171004,160195],{"class":75},[58,171006,383],{"class":92},[58,171008,153521],{"class":75},[58,171010,171011,171014,171016,171018,171020,171022,171024,171026,171028,171030,171032,171034,171036],{"class":60,"line":2345},[58,171012,171013],{"class":75},"students.append({",[58,171015,63311],{"class":386},[58,171017,86],{"class":75},[58,171019,150367],{"class":386},[58,171021,469],{"class":75},[58,171023,69756],{"class":386},[58,171025,86],{"class":75},[58,171027,1436],{"class":82},[58,171029,469],{"class":75},[58,171031,151951],{"class":386},[58,171033,86],{"class":75},[58,171035,1773],{"class":82},[58,171037,165631],{"class":75},[58,171039,171040],{"class":60,"line":2374},[58,171041,171042],{"class":75},"save_students(students)\n",[58,171044,171045,171047,171049,171052],{"class":60,"line":2379},[58,171046,31059],{"class":82},[58,171048,793],{"class":75},[58,171050,171051],{"class":386},"\"保存成功\"",[58,171053,799],{"class":75},[14,171055,171057],{"id":171056},"_814-易错点","8.14 易错点",[19,171059,171060,171064,171070,171075,171082,171089],{},[22,171061,171062,169323],{},[55,171063,247],{},[22,171065,171066,171067,29029],{},"读写中文要指定 ",[55,171068,171069],{},"encoding=\"utf-8\"",[22,171071,171072,171073,29029],{},"打开文件后要关闭，推荐使用 ",[55,171074,108462],{},[22,171076,171077,171078,171081],{},"读取大文件不要直接 ",[55,171079,171080],{},"read()"," 全部内容。",[22,171083,171084,171085,171088],{},"Windows 写 CSV 时建议加 ",[55,171086,171087],{},"newline=\"\"","，避免空行。",[22,171090,171091],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171093,171095],{"id":171094},"_815-本章练习","8.15 本章练习",[19,171097,171098,171105,171110,171113,171116],{},[22,171099,171100,171101,171104],{},"写入一个 ",[55,171102,171103],{},"students.txt","，每行保存一个学生姓名。",[22,171106,104984,171107,171109],{},[55,171108,171103],{}," 并输出所有学生。",[22,171111,171112],{},"把学生列表保存为 JSON 文件。",[22,171114,171115],{},"从 JSON 文件读取学生数据，计算平均分。",[22,171117,171118,171119,171122,171123,171126],{},"写一个日志函数 ",[55,171120,171121],{},"write_log(message)","，每次调用向 ",[55,171124,171125],{},"app.log"," 追加一行。",[702,171128,171129],{},"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":53,"searchDepth":68,"depth":68,"links":171131},[171132,171133,171137,171138,171144,171145,171146,171147,171148,171149,171150,171151,171152,171153,171154],{"id":168643,"depth":68,"text":168644},{"id":168684,"depth":68,"text":168685,"children":171134},[171135,171136],{"id":168688,"depth":79,"text":168689},{"id":168722,"depth":79,"text":168723},{"id":168836,"depth":68,"text":168837},{"id":168929,"depth":68,"text":168930,"children":171139},[171140,171141,171142,171143],{"id":168933,"depth":79,"text":168934},{"id":169020,"depth":79,"text":169021},{"id":169090,"depth":79,"text":169091},{"id":169184,"depth":79,"text":169185},{"id":169254,"depth":68,"text":169255},{"id":169317,"depth":68,"text":169318},{"id":169478,"depth":68,"text":169479},{"id":169541,"depth":68,"text":169542},{"id":169657,"depth":68,"text":169658},{"id":169867,"depth":68,"text":169868},{"id":170179,"depth":68,"text":170180},{"id":170590,"depth":68,"text":170591},{"id":170808,"depth":68,"text":170809},{"id":171056,"depth":68,"text":171057},{"id":171094,"depth":68,"text":171095},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168635,"description":717},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171161,"title":171162,"body":171163,"description":717,"extension":718,"meta":173349,"navigation":720,"path":173350,"seo":173351,"stem":173352,"__hash__":173353},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171164,"toc":173316},[171165,171168,171172,171175,171178,171270,171272,171291,171296,171300,171303,171306,171335,171342,171345,171349,171352,171381,171383,171435,171441,171494,171498,171596,171599,171666,171670,171727,171729,171735,171739,171744,171750,171841,171846,171850,171853,171931,171934,171972,171976,172094,172097,172101,172104,172149,172152,172156,172161,172167,172217,172220,172251,172255,172259,172289,172293,172328,172332,172367,172407,172411,172427,172430,172434,172438,172517,172521,172562,172566,172621,172625,172659,172663,172693,172702,172709,172715,172772,172775,172783,172786,172790,172797,172800,172806,172809,172826,172831,172835,172841,172854,172857,172894,172897,172908,172911,172925,172928,172942,172946,172953,172986,172989,172991,172997,173000,173004,173006,173012,173017,173190,173194,173257,173261,173285,173289,173313],[10,171166,171162],{"id":171167},"_9-异常模块与包",[14,171169,171171],{"id":171170},"_91-什么是异常","9.1 什么是异常",[175,171173,171174],{},"异常是程序运行过程中出现的错误。",[175,171176,171177],{},"常见异常：",[926,171179,171180,171189],{},[929,171181,171182],{},[932,171183,171184,171187],{},[935,171185,171186],{},"异常",[935,171188,26513],{},[972,171190,171191,171201,171211,171220,171230,171240,171250,171260],{},[932,171192,171193,171198],{},[977,171194,171195],{},[55,171196,171197],{},"NameError",[977,171199,171200],{},"使用了未定义变量",[932,171202,171203,171208],{},[977,171204,171205],{},[55,171206,171207],{},"TypeError",[977,171209,171210],{},"类型不匹配",[932,171212,171213,171217],{},[977,171214,171215],{},[55,171216,155313],{},[977,171218,171219],{},"值不合法",[932,171221,171222,171227],{},[977,171223,171224],{},[55,171225,171226],{},"IndexError",[977,171228,171229],{},"列表索引越界",[932,171231,171232,171237],{},[977,171233,171234],{},[55,171235,171236],{},"KeyError",[977,171238,171239],{},"字典 key 不存在",[932,171241,171242,171247],{},[977,171243,171244],{},[55,171245,171246],{},"FileNotFoundError",[977,171248,171249],{},"文件不存在",[932,171251,171252,171257],{},[977,171253,171254],{},[55,171255,171256],{},"ZeroDivisionError",[977,171258,171259],{},"除数为 0",[932,171261,171262,171267],{},[977,171263,171264],{},[55,171265,171266],{},"ImportError",[977,171268,171269],{},"导入失败",[175,171271,15779],{},[48,171273,171275],{"className":31022,"code":171274,"language":31024,"meta":53,"style":53},"num = int(\"abc\")\n",[55,171276,171277],{"__ignoreMap":53},[58,171278,171279,171281,171283,171285,171287,171289],{"class":60,"line":61},[58,171280,156266],{"class":75},[58,171282,383],{"class":92},[58,171284,3028],{"class":82},[58,171286,793],{"class":75},[58,171288,156359],{"class":386},[58,171290,799],{"class":75},[175,171292,171293,171294,29029],{},"会触发 ",[55,171295,155313],{},[14,171297,171299],{"id":171298},"_92-为什么要处理异常","9.2 为什么要处理异常",[175,171301,171302],{},"如果不处理异常，程序会直接终止。",[175,171304,171305],{},"例如用户输入年龄：",[48,171307,171309],{"className":31022,"code":171308,"language":31024,"meta":53,"style":53},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[55,171310,171311,171329],{"__ignoreMap":53},[58,171312,171313,171315,171317,171319,171321,171323,171325,171327],{"class":60,"line":61},[58,171314,147025],{"class":75},[58,171316,383],{"class":92},[58,171318,3028],{"class":82},[58,171320,793],{"class":75},[58,171322,54457],{"class":82},[58,171324,793],{"class":75},[58,171326,152873],{"class":386},[58,171328,31141],{"class":75},[58,171330,171331,171333],{"class":60,"line":68},[58,171332,31059],{"class":82},[58,171334,156240],{"class":75},[175,171336,171337,171338,171341],{},"用户输入 ",[55,171339,171340],{},"abc","，程序就会报错退出。",[175,171343,171344],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,171346,171348],{"id":171347},"_93-try-except","9.3 try except",[175,171350,171351],{},"基础语法：",[48,171353,171355],{"className":31022,"code":171354,"language":31024,"meta":53,"style":53},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[55,171356,171357,171364,171369,171376],{"__ignoreMap":53},[58,171358,171359,171362],{"class":60,"line":61},[58,171360,171361],{"class":92},"try",[58,171363,4385],{"class":75},[58,171365,171366],{"class":60,"line":68},[58,171367,171368],{"class":75},"    可能出错的代码\n",[58,171370,171371,171374],{"class":60,"line":79},[58,171372,171373],{"class":92},"except",[58,171375,4385],{"class":75},[58,171377,171378],{"class":60,"line":105},[58,171379,171380],{"class":75},"    出错后的处理代码\n",[175,171382,15779],{},[48,171384,171386],{"className":31022,"code":171385,"language":31024,"meta":53,"style":53},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[55,171387,171388,171394,171412,171418,171424],{"__ignoreMap":53},[58,171389,171390,171392],{"class":60,"line":61},[58,171391,171361],{"class":92},[58,171393,4385],{"class":75},[58,171395,171396,171398,171400,171402,171404,171406,171408,171410],{"class":60,"line":68},[58,171397,152865],{"class":75},[58,171399,383],{"class":92},[58,171401,3028],{"class":82},[58,171403,793],{"class":75},[58,171405,54457],{"class":82},[58,171407,793],{"class":75},[58,171409,152873],{"class":386},[58,171411,31141],{"class":75},[58,171413,171414,171416],{"class":60,"line":79},[58,171415,31943],{"class":82},[58,171417,156240],{"class":75},[58,171419,171420,171422],{"class":60,"line":105},[58,171421,171373],{"class":92},[58,171423,4385],{"class":75},[58,171425,171426,171428,171430,171433],{"class":60,"line":627},[58,171427,31943],{"class":82},[58,171429,793],{"class":75},[58,171431,171432],{"class":386},"\"年龄必须是数字\"",[58,171434,799],{"class":75},[175,171436,171437,171438,171440],{},"不建议裸写 ",[55,171439,171373],{},"，最好指定异常类型。",[48,171442,171444],{"className":31022,"code":171443,"language":31024,"meta":53,"style":53},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[55,171445,171446,171452,171470,171476,171484],{"__ignoreMap":53},[58,171447,171448,171450],{"class":60,"line":61},[58,171449,171361],{"class":92},[58,171451,4385],{"class":75},[58,171453,171454,171456,171458,171460,171462,171464,171466,171468],{"class":60,"line":68},[58,171455,152865],{"class":75},[58,171457,383],{"class":92},[58,171459,3028],{"class":82},[58,171461,793],{"class":75},[58,171463,54457],{"class":82},[58,171465,793],{"class":75},[58,171467,152873],{"class":386},[58,171469,31141],{"class":75},[58,171471,171472,171474],{"class":60,"line":79},[58,171473,31943],{"class":82},[58,171475,156240],{"class":75},[58,171477,171478,171480,171482],{"class":60,"line":105},[58,171479,171373],{"class":92},[58,171481,152705],{"class":82},[58,171483,4385],{"class":75},[58,171485,171486,171488,171490,171492],{"class":60,"line":627},[58,171487,31943],{"class":82},[58,171489,793],{"class":75},[58,171491,171432],{"class":386},[58,171493,799],{"class":75},[14,171495,171497],{"id":171496},"_94-捕获多个异常","9.4 捕获多个异常",[48,171499,171501],{"className":31022,"code":171500,"language":31024,"meta":53,"style":53},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[55,171502,171503,171509,171530,171550,171557,171565,171576,171585],{"__ignoreMap":53},[58,171504,171505,171507],{"class":60,"line":61},[58,171506,171361],{"class":92},[58,171508,4385],{"class":75},[58,171510,171511,171514,171516,171518,171520,171522,171524,171526,171528],{"class":60,"line":68},[58,171512,171513],{"class":75},"    nums ",[58,171515,383],{"class":92},[58,171517,52864],{"class":75},[58,171519,89],{"class":82},[58,171521,469],{"class":75},[58,171523,867],{"class":82},[58,171525,469],{"class":75},[58,171527,861],{"class":82},[58,171529,33890],{"class":75},[58,171531,171532,171535,171537,171539,171541,171543,171545,171548],{"class":60,"line":79},[58,171533,171534],{"class":75},"    index ",[58,171536,383],{"class":92},[58,171538,3028],{"class":82},[58,171540,793],{"class":75},[58,171542,54457],{"class":82},[58,171544,793],{"class":75},[58,171546,171547],{"class":386},"\"请输入索引:\"",[58,171549,31141],{"class":75},[58,171551,171552,171554],{"class":60,"line":105},[58,171553,31943],{"class":82},[58,171555,171556],{"class":75},"(nums[index])\n",[58,171558,171559,171561,171563],{"class":60,"line":627},[58,171560,171373],{"class":92},[58,171562,152705],{"class":82},[58,171564,4385],{"class":75},[58,171566,171567,171569,171571,171574],{"class":60,"line":509},[58,171568,31943],{"class":82},[58,171570,793],{"class":75},[58,171572,171573],{"class":386},"\"索引必须是整数\"",[58,171575,799],{"class":75},[58,171577,171578,171580,171583],{"class":60,"line":559},[58,171579,171373],{"class":92},[58,171581,171582],{"class":82}," IndexError",[58,171584,4385],{"class":75},[58,171586,171587,171589,171591,171594],{"class":60,"line":654},[58,171588,31943],{"class":82},[58,171590,793],{"class":75},[58,171592,171593],{"class":386},"\"索引越界\"",[58,171595,799],{"class":75},[175,171597,171598],{},"多个异常使用相同处理逻辑：",[48,171600,171602],{"className":31022,"code":171601,"language":31024,"meta":53,"style":53},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[55,171603,171604,171610,171628,171641,171655],{"__ignoreMap":53},[58,171605,171606,171608],{"class":60,"line":61},[58,171607,171361],{"class":92},[58,171609,4385],{"class":75},[58,171611,171612,171614,171616,171618,171620,171622,171624,171626],{"class":60,"line":68},[58,171613,46237],{"class":75},[58,171615,383],{"class":92},[58,171617,3028],{"class":82},[58,171619,793],{"class":75},[58,171621,54457],{"class":82},[58,171623,793],{"class":75},[58,171625,156275],{"class":386},[58,171627,31141],{"class":75},[58,171629,171630,171632,171634,171636,171638],{"class":60,"line":79},[58,171631,31943],{"class":82},[58,171633,793],{"class":75},[58,171635,1232],{"class":82},[58,171637,156525],{"class":92},[58,171639,171640],{"class":75}," num)\n",[58,171642,171643,171645,171647,171649,171651,171653],{"class":60,"line":105},[58,171644,171373],{"class":92},[58,171646,2305],{"class":75},[58,171648,155313],{"class":82},[58,171650,469],{"class":75},[58,171652,171256],{"class":82},[58,171654,31430],{"class":75},[58,171656,171657,171659,171661,171664],{"class":60,"line":627},[58,171658,31943],{"class":82},[58,171660,793],{"class":75},[58,171662,171663],{"class":386},"\"输入不合法\"",[58,171665,799],{"class":75},[14,171667,171669],{"id":171668},"_95-获取异常信息","9.5 获取异常信息",[48,171671,171673],{"className":31022,"code":171672,"language":31024,"meta":53,"style":53},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[55,171674,171675,171681,171695,171706],{"__ignoreMap":53},[58,171676,171677,171679],{"class":60,"line":61},[58,171678,171361],{"class":92},[58,171680,4385],{"class":75},[58,171682,171683,171685,171687,171689,171691,171693],{"class":60,"line":68},[58,171684,46237],{"class":75},[58,171686,383],{"class":92},[58,171688,3028],{"class":82},[58,171690,793],{"class":75},[58,171692,156359],{"class":386},[58,171694,799],{"class":75},[58,171696,171697,171699,171701,171703],{"class":60,"line":79},[58,171698,171373],{"class":92},[58,171700,152705],{"class":82},[58,171702,65236],{"class":92},[58,171704,171705],{"class":75}," e:\n",[58,171707,171708,171710,171712,171714,171717,171719,171721,171723,171725],{"class":60,"line":105},[58,171709,31943],{"class":82},[58,171711,793],{"class":75},[58,171713,843],{"class":92},[58,171715,171716],{"class":386},"\"出错了:",[58,171718,1681],{"class":82},[58,171720,864],{"class":75},[58,171722,1730],{"class":82},[58,171724,1037],{"class":386},[58,171726,799],{"class":75},[175,171728,146936],{},[48,171730,171733],{"className":171731,"code":171732,"language":5833,"meta":53},[5831],"出错了:invalid literal for int() with base 10: 'abc'\n",[55,171734,171732],{"__ignoreMap":53},[14,171736,171738],{"id":171737},"_96-else和finally","9.6 else和finally",[175,171740,171741,171743],{},[55,171742,2348],{},"：没有异常时执行。",[175,171745,171746,171749],{},[55,171747,171748],{},"finally","：无论是否异常都会执行。",[48,171751,171753],{"className":31022,"code":171752,"language":31024,"meta":53,"style":53},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[55,171754,171755,171761,171779,171787,171797,171803,171824,171830],{"__ignoreMap":53},[58,171756,171757,171759],{"class":60,"line":61},[58,171758,171361],{"class":92},[58,171760,4385],{"class":75},[58,171762,171763,171765,171767,171769,171771,171773,171775,171777],{"class":60,"line":68},[58,171764,46237],{"class":75},[58,171766,383],{"class":92},[58,171768,3028],{"class":82},[58,171770,793],{"class":75},[58,171772,54457],{"class":82},[58,171774,793],{"class":75},[58,171776,156275],{"class":386},[58,171778,31141],{"class":75},[58,171780,171781,171783,171785],{"class":60,"line":79},[58,171782,171373],{"class":92},[58,171784,152705],{"class":82},[58,171786,4385],{"class":75},[58,171788,171789,171791,171793,171795],{"class":60,"line":105},[58,171790,31943],{"class":82},[58,171792,793],{"class":75},[58,171794,153693],{"class":386},[58,171796,799],{"class":75},[58,171798,171799,171801],{"class":60,"line":627},[58,171800,2348],{"class":92},[58,171802,4385],{"class":75},[58,171804,171805,171807,171809,171811,171814,171816,171818,171820,171822],{"class":60,"line":509},[58,171806,31943],{"class":82},[58,171808,793],{"class":75},[58,171810,843],{"class":92},[58,171812,171813],{"class":386},"\"输入正确:",[58,171815,1681],{"class":82},[58,171817,2312],{"class":75},[58,171819,1730],{"class":82},[58,171821,1037],{"class":386},[58,171823,799],{"class":75},[58,171825,171826,171828],{"class":60,"line":559},[58,171827,171748],{"class":92},[58,171829,4385],{"class":75},[58,171831,171832,171834,171836,171839],{"class":60,"line":654},[58,171833,31943],{"class":82},[58,171835,793],{"class":75},[58,171837,171838],{"class":386},"\"程序结束\"",[58,171840,799],{"class":75},[175,171842,171843,171845],{},[55,171844,171748],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,171847,171849],{"id":171848},"_97-抛出异常","9.7 抛出异常",[175,171851,171852],{},"程序可以主动抛出异常。",[48,171854,171856],{"className":31022,"code":171855,"language":31024,"meta":53,"style":53},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[55,171857,171858,171867,171879,171892,171912,171916,171920],{"__ignoreMap":53},[58,171859,171860,171862,171865],{"class":60,"line":61},[58,171861,32591],{"class":92},[58,171863,171864],{"class":379}," set_age",[58,171866,161894],{"class":75},[58,171868,171869,171871,171873,171875,171877],{"class":60,"line":68},[58,171870,3747],{"class":92},[58,171872,16350],{"class":75},[58,171874,373],{"class":92},[58,171876,4739],{"class":82},[58,171878,4385],{"class":75},[58,171880,171881,171883,171885,171887,171890],{"class":60,"line":79},[58,171882,104061],{"class":92},[58,171884,152705],{"class":82},[58,171886,793],{"class":75},[58,171888,171889],{"class":386},"\"年龄不能为负数\"",[58,171891,799],{"class":75},[58,171893,171894,171896,171898,171900,171902,171904,171906,171908,171910],{"class":60,"line":105},[58,171895,31943],{"class":82},[58,171897,793],{"class":75},[58,171899,843],{"class":92},[58,171901,162462],{"class":386},[58,171903,1681],{"class":82},[58,171905,70853],{"class":75},[58,171907,1730],{"class":82},[58,171909,1037],{"class":386},[58,171911,799],{"class":75},[58,171913,171914],{"class":60,"line":627},[58,171915,3046],{"emptyLinePlaceholder":720},[58,171917,171918],{"class":60,"line":509},[58,171919,3046],{"emptyLinePlaceholder":720},[58,171921,171922,171925,171927,171929],{"class":60,"line":559},[58,171923,171924],{"class":75},"set_age(",[58,171926,1318],{"class":92},[58,171928,89],{"class":82},[58,171930,799],{"class":75},[175,171932,171933],{},"调用者可以捕获：",[48,171935,171937],{"className":31022,"code":171936,"language":31024,"meta":53,"style":53},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[55,171938,171939,171945,171956,171966],{"__ignoreMap":53},[58,171940,171941,171943],{"class":60,"line":61},[58,171942,171361],{"class":92},[58,171944,4385],{"class":75},[58,171946,171947,171950,171952,171954],{"class":60,"line":68},[58,171948,171949],{"class":75},"    set_age(",[58,171951,1318],{"class":92},[58,171953,89],{"class":82},[58,171955,799],{"class":75},[58,171957,171958,171960,171962,171964],{"class":60,"line":79},[58,171959,171373],{"class":92},[58,171961,152705],{"class":82},[58,171963,65236],{"class":92},[58,171965,171705],{"class":75},[58,171967,171968,171970],{"class":60,"line":105},[58,171969,31943],{"class":82},[58,171971,67631],{"class":75},[14,171973,171975],{"id":171974},"_98-自定义异常","9.8 自定义异常",[48,171977,171979],{"className":31022,"code":171978,"language":31024,"meta":53,"style":53},"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",[55,171980,171981,171995,171999,172003,172007,172015,172025,172036,172046,172050,172054,172060,172077,172088],{"__ignoreMap":53},[58,171982,171983,171985,171988,171990,171993],{"class":60,"line":61},[58,171984,15338],{"class":92},[58,171986,171987],{"class":379}," BalanceNotEnoughError",[58,171989,793],{"class":75},[58,171991,171992],{"class":82},"Exception",[58,171994,31430],{"class":75},[58,171996,171997],{"class":60,"line":68},[58,171998,150016],{"class":92},[58,172000,172001],{"class":60,"line":79},[58,172002,3046],{"emptyLinePlaceholder":720},[58,172004,172005],{"class":60,"line":105},[58,172006,3046],{"emptyLinePlaceholder":720},[58,172008,172009,172011,172013],{"class":60,"line":627},[58,172010,32591],{"class":92},[58,172012,150665],{"class":379},[58,172014,163291],{"class":75},[58,172016,172017,172019,172021,172023],{"class":60,"line":509},[58,172018,3747],{"class":92},[58,172020,150621],{"class":75},[58,172022,1744],{"class":92},[58,172024,163068],{"class":75},[58,172026,172027,172029,172032,172034],{"class":60,"line":559},[58,172028,104061],{"class":92},[58,172030,172031],{"class":75}," BalanceNotEnoughError(",[58,172033,150716],{"class":386},[58,172035,799],{"class":75},[58,172037,172038,172040,172042,172044],{"class":60,"line":654},[58,172039,4736],{"class":92},[58,172041,163298],{"class":75},[58,172043,1318],{"class":92},[58,172045,150654],{"class":75},[58,172047,172048],{"class":60,"line":671},[58,172049,3046],{"emptyLinePlaceholder":720},[58,172051,172052],{"class":60,"line":677},[58,172053,3046],{"emptyLinePlaceholder":720},[58,172055,172056,172058],{"class":60,"line":2260},[58,172057,171361],{"class":92},[58,172059,4385],{"class":75},[58,172061,172062,172064,172066,172069,172071,172073,172075],{"class":60,"line":694},[58,172063,162969],{"class":75},[58,172065,383],{"class":92},[58,172067,172068],{"class":75}," withdraw(",[58,172070,1097],{"class":82},[58,172072,469],{"class":75},[58,172074,2369],{"class":82},[58,172076,799],{"class":75},[58,172078,172079,172081,172084,172086],{"class":60,"line":2270},[58,172080,171373],{"class":92},[58,172082,172083],{"class":75}," BalanceNotEnoughError ",[58,172085,32027],{"class":92},[58,172087,171705],{"class":75},[58,172089,172090,172092],{"class":60,"line":2275},[58,172091,31943],{"class":82},[58,172093,67631],{"class":75},[175,172095,172096],{},"入门阶段大多数情况使用内置异常即可。",[14,172098,172100],{"id":172099},"_99-traceback","9.9 traceback",[175,172102,172103],{},"调试时可以输出完整异常堆栈。",[48,172105,172107],{"className":31022,"code":172106,"language":31024,"meta":53,"style":53},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[55,172108,172109,172116,172120,172126,172136,172144],{"__ignoreMap":53},[58,172110,172111,172113],{"class":60,"line":61},[58,172112,31036],{"class":92},[58,172114,172115],{"class":75}," traceback\n",[58,172117,172118],{"class":60,"line":68},[58,172119,3046],{"emptyLinePlaceholder":720},[58,172121,172122,172124],{"class":60,"line":79},[58,172123,171361],{"class":92},[58,172125,4385],{"class":75},[58,172127,172128,172130,172132,172134],{"class":60,"line":105},[58,172129,2631],{"class":82},[58,172131,793],{"class":75},[58,172133,156359],{"class":386},[58,172135,799],{"class":75},[58,172137,172138,172140,172142],{"class":60,"line":627},[58,172139,171373],{"class":92},[58,172141,152705],{"class":82},[58,172143,4385],{"class":75},[58,172145,172146],{"class":60,"line":509},[58,172147,172148],{"class":75},"    traceback.print_exc()\n",[175,172150,172151],{},"日志系统中常把异常堆栈记录到文件。",[14,172153,172155],{"id":172154},"_910-什么是模块","9.10 什么是模块",[175,172157,172158,172159,126612],{},"模块就是一个 ",[55,172160,146831],{},[175,172162,172163,172164,25262],{},"例如创建 ",[55,172165,172166],{},"my_math.py",[48,172168,172170],{"className":31022,"code":172169,"language":31024,"meta":53,"style":53},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[55,172171,172172,172180,172190,172194,172198,172207],{"__ignoreMap":53},[58,172173,172174,172176,172178],{"class":60,"line":61},[58,172175,32591],{"class":92},[58,172177,5855],{"class":379},[58,172179,151572],{"class":75},[58,172181,172182,172184,172186,172188],{"class":60,"line":68},[58,172183,4736],{"class":92},[58,172185,11514],{"class":75},[58,172187,1267],{"class":92},[58,172189,151583],{"class":75},[58,172191,172192],{"class":60,"line":79},[58,172193,3046],{"emptyLinePlaceholder":720},[58,172195,172196],{"class":60,"line":105},[58,172197,3046],{"emptyLinePlaceholder":720},[58,172199,172200,172202,172205],{"class":60,"line":627},[58,172201,32591],{"class":92},[58,172203,172204],{"class":379}," sub",[58,172206,151572],{"class":75},[58,172208,172209,172211,172213,172215],{"class":60,"line":509},[58,172210,4736],{"class":92},[58,172212,11514],{"class":75},[58,172214,1318],{"class":92},[58,172216,151583],{"class":75},[175,172218,172219],{},"在另一个文件中导入：",[48,172221,172223],{"className":31022,"code":172222,"language":31024,"meta":53,"style":53},"import my_math\n\nprint(my_math.add(1, 2))\n",[55,172224,172225,172232,172236],{"__ignoreMap":53},[58,172226,172227,172229],{"class":60,"line":61},[58,172228,31036],{"class":92},[58,172230,172231],{"class":75}," my_math\n",[58,172233,172234],{"class":60,"line":68},[58,172235,3046],{"emptyLinePlaceholder":720},[58,172237,172238,172240,172243,172245,172247,172249],{"class":60,"line":79},[58,172239,31059],{"class":82},[58,172241,172242],{"class":75},"(my_math.add(",[58,172244,89],{"class":82},[58,172246,469],{"class":75},[58,172248,867],{"class":82},[58,172250,31141],{"class":75},[14,172252,172254],{"id":172253},"_911-import导入","9.11 import导入",[114,172256,172258],{"id":172257},"_9111-导入模块","9.11.1 导入模块",[48,172260,172262],{"className":31022,"code":172261,"language":31024,"meta":53,"style":53},"import random\n\nprint(random.randint(1, 10))\n",[55,172263,172264,172270,172274],{"__ignoreMap":53},[58,172265,172266,172268],{"class":60,"line":61},[58,172267,31036],{"class":92},[58,172269,45972],{"class":75},[58,172271,172272],{"class":60,"line":68},[58,172273,3046],{"emptyLinePlaceholder":720},[58,172275,172276,172278,172281,172283,172285,172287],{"class":60,"line":79},[58,172277,31059],{"class":82},[58,172279,172280],{"class":75},"(random.randint(",[58,172282,89],{"class":82},[58,172284,469],{"class":75},[58,172286,1232],{"class":82},[58,172288,31141],{"class":75},[114,172290,172292],{"id":172291},"_9112-导入指定内容","9.11.2 导入指定内容",[48,172294,172296],{"className":31022,"code":172295,"language":31024,"meta":53,"style":53},"from random import randint\n\nprint(randint(1, 10))\n",[55,172297,172298,172309,172313],{"__ignoreMap":53},[58,172299,172300,172302,172304,172306],{"class":60,"line":61},[58,172301,31381],{"class":92},[58,172303,58430],{"class":75},[58,172305,31036],{"class":92},[58,172307,172308],{"class":75}," randint\n",[58,172310,172311],{"class":60,"line":68},[58,172312,3046],{"emptyLinePlaceholder":720},[58,172314,172315,172317,172320,172322,172324,172326],{"class":60,"line":79},[58,172316,31059],{"class":82},[58,172318,172319],{"class":75},"(randint(",[58,172321,89],{"class":82},[58,172323,469],{"class":75},[58,172325,1232],{"class":82},[58,172327,31141],{"class":75},[114,172329,172331],{"id":172330},"_9113-起别名","9.11.3 起别名",[48,172333,172335],{"className":31022,"code":172334,"language":31024,"meta":53,"style":53},"import random as rd\n\nprint(rd.randint(1, 10))\n",[55,172336,172337,172348,172352],{"__ignoreMap":53},[58,172338,172339,172341,172343,172345],{"class":60,"line":61},[58,172340,31036],{"class":92},[58,172342,58430],{"class":75},[58,172344,32027],{"class":92},[58,172346,172347],{"class":75}," rd\n",[58,172349,172350],{"class":60,"line":68},[58,172351,3046],{"emptyLinePlaceholder":720},[58,172353,172354,172356,172359,172361,172363,172365],{"class":60,"line":79},[58,172355,31059],{"class":82},[58,172357,172358],{"class":75},"(rd.randint(",[58,172360,89],{"class":82},[58,172362,469],{"class":75},[58,172364,1232],{"class":82},[58,172366,31141],{"class":75},[48,172368,172370],{"className":31022,"code":172369,"language":31024,"meta":53,"style":53},"from random import randint as rint\n\nprint(rint(1, 10))\n",[55,172371,172372,172388,172392],{"__ignoreMap":53},[58,172373,172374,172376,172378,172380,172383,172385],{"class":60,"line":61},[58,172375,31381],{"class":92},[58,172377,58430],{"class":75},[58,172379,31036],{"class":92},[58,172381,172382],{"class":75}," randint ",[58,172384,32027],{"class":92},[58,172386,172387],{"class":75}," rint\n",[58,172389,172390],{"class":60,"line":68},[58,172391,3046],{"emptyLinePlaceholder":720},[58,172393,172394,172396,172399,172401,172403,172405],{"class":60,"line":79},[58,172395,31059],{"class":82},[58,172397,172398],{"class":75},"(rint(",[58,172400,89],{"class":82},[58,172402,469],{"class":75},[58,172404,1232],{"class":82},[58,172406,31141],{"class":75},[114,172408,172410],{"id":172409},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[48,172412,172414],{"className":31022,"code":172413,"language":31024,"meta":53,"style":53},"from random import *\n",[55,172415,172416],{"__ignoreMap":53},[58,172417,172418,172420,172422,172424],{"class":60,"line":61},[58,172419,31381],{"class":92},[58,172421,58430],{"class":75},[58,172423,31036],{"class":92},[58,172425,172426],{"class":92}," *\n",[175,172428,172429],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172431,172433],{"id":172432},"_912-常用内置模块","9.12 常用内置模块",[114,172435,172437],{"id":172436},"_9121-random","9.12.1 random",[48,172439,172441],{"className":31022,"code":172440,"language":31024,"meta":53,"style":53},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[55,172442,172443,172449,172453,172467,172486],{"__ignoreMap":53},[58,172444,172445,172447],{"class":60,"line":61},[58,172446,31036],{"class":92},[58,172448,45972],{"class":75},[58,172450,172451],{"class":60,"line":68},[58,172452,3046],{"emptyLinePlaceholder":720},[58,172454,172455,172457,172459,172461,172463,172465],{"class":60,"line":79},[58,172456,31059],{"class":82},[58,172458,172280],{"class":75},[58,172460,89],{"class":82},[58,172462,469],{"class":75},[58,172464,1232],{"class":82},[58,172466,31141],{"class":75},[58,172468,172469,172471,172474,172476,172478,172480,172482,172484],{"class":60,"line":105},[58,172470,31059],{"class":82},[58,172472,172473],{"class":75},"(random.choice([",[58,172475,150367],{"class":386},[58,172477,469],{"class":75},[58,172479,151415],{"class":386},[58,172481,469],{"class":75},[58,172483,160210],{"class":386},[58,172485,33787],{"class":75},[58,172487,172488,172490,172493,172495,172497,172499,172501,172503,172505,172507,172509,172511,172513,172515],{"class":60,"line":627},[58,172489,31059],{"class":82},[58,172491,172492],{"class":75},"(random.sample([",[58,172494,89],{"class":82},[58,172496,469],{"class":75},[58,172498,867],{"class":82},[58,172500,469],{"class":75},[58,172502,861],{"class":82},[58,172504,469],{"class":75},[58,172506,1079],{"class":82},[58,172508,469],{"class":75},[58,172510,1105],{"class":82},[58,172512,112831],{"class":75},[58,172514,867],{"class":82},[58,172516,31141],{"class":75},[114,172518,172520],{"id":172519},"_9122-time","9.12.2 time",[48,172522,172524],{"className":31022,"code":172523,"language":31024,"meta":53,"style":53},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[55,172525,172526,172532,172536,172543,172551],{"__ignoreMap":53},[58,172527,172528,172530],{"class":60,"line":61},[58,172529,31036],{"class":92},[58,172531,32473],{"class":75},[58,172533,172534],{"class":60,"line":68},[58,172535,3046],{"emptyLinePlaceholder":720},[58,172537,172538,172540],{"class":60,"line":79},[58,172539,31059],{"class":82},[58,172541,172542],{"class":75},"(time.time())\n",[58,172544,172545,172547,172549],{"class":60,"line":105},[58,172546,95700],{"class":75},[58,172548,89],{"class":82},[58,172550,799],{"class":75},[58,172552,172553,172555,172557,172560],{"class":60,"line":627},[58,172554,31059],{"class":82},[58,172556,793],{"class":75},[58,172558,172559],{"class":386},"\"1秒后执行\"",[58,172561,799],{"class":75},[114,172563,172565],{"id":172564},"_9123-datetime","9.12.3 datetime",[48,172567,172569],{"className":31022,"code":172568,"language":31024,"meta":53,"style":53},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[55,172570,172571,172583,172587,172597,172604],{"__ignoreMap":53},[58,172572,172573,172575,172578,172580],{"class":60,"line":61},[58,172574,31381],{"class":92},[58,172576,172577],{"class":75}," datetime ",[58,172579,31036],{"class":92},[58,172581,172582],{"class":75}," datetime\n",[58,172584,172585],{"class":60,"line":68},[58,172586,3046],{"emptyLinePlaceholder":720},[58,172588,172589,172592,172594],{"class":60,"line":79},[58,172590,172591],{"class":75},"now ",[58,172593,383],{"class":92},[58,172595,172596],{"class":75}," datetime.now()\n",[58,172598,172599,172601],{"class":60,"line":105},[58,172600,31059],{"class":82},[58,172602,172603],{"class":75},"(now)\n",[58,172605,172606,172608,172611,172614,172616,172619],{"class":60,"line":627},[58,172607,31059],{"class":82},[58,172609,172610],{"class":75},"(now.strftime(",[58,172612,172613],{"class":386},"\"%Y-%m-",[58,172615,157170],{"class":82},[58,172617,172618],{"class":386}," %H:%M:%S\"",[58,172620,31141],{"class":75},[114,172622,172624],{"id":172623},"_9124-os","9.12.4 os",[48,172626,172628],{"className":31022,"code":172627,"language":31024,"meta":53,"style":53},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[55,172629,172630,172636,172640,172647],{"__ignoreMap":53},[58,172631,172632,172634],{"class":60,"line":61},[58,172633,31036],{"class":92},[58,172635,45949],{"class":75},[58,172637,172638],{"class":60,"line":68},[58,172639,3046],{"emptyLinePlaceholder":720},[58,172641,172642,172644],{"class":60,"line":79},[58,172643,31059],{"class":82},[58,172645,172646],{"class":75},"(os.getcwd())\n",[58,172648,172649,172651,172654,172657],{"class":60,"line":105},[58,172650,31059],{"class":82},[58,172652,172653],{"class":75},"(os.listdir(",[58,172655,172656],{"class":386},"\".\"",[58,172658,31141],{"class":75},[114,172660,172662],{"id":172661},"_9125-sys","9.12.5 sys",[48,172664,172666],{"className":31022,"code":172665,"language":31024,"meta":53,"style":53},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[55,172667,172668,172675,172679,172686],{"__ignoreMap":53},[58,172669,172670,172672],{"class":60,"line":61},[58,172671,31036],{"class":92},[58,172673,172674],{"class":75}," sys\n",[58,172676,172677],{"class":60,"line":68},[58,172678,3046],{"emptyLinePlaceholder":720},[58,172680,172681,172683],{"class":60,"line":79},[58,172682,31059],{"class":82},[58,172684,172685],{"class":75},"(sys.version)\n",[58,172687,172688,172690],{"class":60,"line":105},[58,172689,31059],{"class":82},[58,172691,172692],{"class":75},"(sys.path)\n",[14,172694,172696,172697,172699,172700,1037],{"id":172695},"_913-if-name-main","9.13 if ",[25,172698,80440],{}," == \"",[25,172701,102687],{},[175,172703,172704,172705,172708],{},"模块被直接运行和被导入时，",[55,172706,172707],{},"__name__"," 的值不同。",[175,172710,172711,172712,25262],{},"创建 ",[55,172713,172714],{},"my_module.py",[48,172716,172718],{"className":31022,"code":172717,"language":31024,"meta":53,"style":53},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[55,172719,172720,172728,172738,172742,172746,172758],{"__ignoreMap":53},[58,172721,172722,172724,172726],{"class":60,"line":61},[58,172723,32591],{"class":92},[58,172725,5855],{"class":379},[58,172727,151572],{"class":75},[58,172729,172730,172732,172734,172736],{"class":60,"line":68},[58,172731,4736],{"class":92},[58,172733,11514],{"class":75},[58,172735,1267],{"class":92},[58,172737,151583],{"class":75},[58,172739,172740],{"class":60,"line":79},[58,172741,3046],{"emptyLinePlaceholder":720},[58,172743,172744],{"class":60,"line":105},[58,172745,3046],{"emptyLinePlaceholder":720},[58,172747,172748,172750,172752,172754,172756],{"class":60,"line":627},[58,172749,2180],{"class":92},[58,172751,31864],{"class":82},[58,172753,102188],{"class":92},[58,172755,102191],{"class":386},[58,172757,4385],{"class":75},[58,172759,172760,172762,172764,172766,172768,172770],{"class":60,"line":509},[58,172761,31943],{"class":82},[58,172763,167079],{"class":75},[58,172765,89],{"class":82},[58,172767,469],{"class":75},[58,172769,867],{"class":82},[58,172771,31141],{"class":75},[175,172773,172774],{},"作用：",[19,172776,172777,172780],{},[22,172778,172779],{},"直接运行该文件时，执行测试代码。",[22,172781,172782],{},"被其他文件导入时，不执行测试代码。",[175,172784,172785],{},"这是写模块时很常用的习惯。",[14,172787,172789],{"id":172788},"_914-包","9.14 包",[175,172791,172792,172793,172796],{},"包是包含 ",[55,172794,172795],{},"__init__.py"," 的目录，用于组织多个模块。",[175,172798,172799],{},"目录结构：",[48,172801,172804],{"className":172802,"code":172803,"language":5833,"meta":53},[5831],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[55,172805,172803],{"__ignoreMap":53},[175,172807,172808],{},"导入：",[48,172810,172812],{"className":31022,"code":172811,"language":31024,"meta":53,"style":53},"from utils.file_utils import read_file\n",[55,172813,172814],{"__ignoreMap":53},[58,172815,172816,172818,172821,172823],{"class":60,"line":61},[58,172817,31381],{"class":92},[58,172819,172820],{"class":75}," utils.file_utils ",[58,172822,31036],{"class":92},[58,172824,172825],{"class":75}," read_file\n",[175,172827,172828,172830],{},[55,172829,172795],{}," 可以为空，也可以写包初始化逻辑。",[14,172832,172834],{"id":172833},"_915-第三方包","9.15 第三方包",[175,172836,172837,172838,172840],{},"第三方包通过 ",[55,172839,24474],{}," 安装。",[48,172842,172844],{"className":24465,"code":172843,"language":24467,"meta":53,"style":53},"pip install requests\n",[55,172845,172846],{"__ignoreMap":53},[58,172847,172848,172850,172852],{"class":60,"line":61},[58,172849,24474],{"class":379},[58,172851,24477],{"class":386},[58,172853,146577],{"class":386},[175,172855,172856],{},"使用：",[48,172858,172860],{"className":31022,"code":172859,"language":31024,"meta":53,"style":53},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[55,172861,172862,172868,172872,172887],{"__ignoreMap":53},[58,172863,172864,172866],{"class":60,"line":61},[58,172865,31036],{"class":92},[58,172867,146577],{"class":75},[58,172869,172870],{"class":60,"line":68},[58,172871,3046],{"emptyLinePlaceholder":720},[58,172873,172874,172877,172879,172882,172885],{"class":60,"line":79},[58,172875,172876],{"class":75},"response ",[58,172878,383],{"class":92},[58,172880,172881],{"class":75}," requests.get(",[58,172883,172884],{"class":386},"\"https:\u002F\u002Fwww.example.com\"",[58,172886,799],{"class":75},[58,172888,172889,172891],{"class":60,"line":105},[58,172890,31059],{"class":82},[58,172892,172893],{"class":75},"(response.status_code)\n",[175,172895,172896],{},"查看已安装包：",[48,172898,172900],{"className":24465,"code":172899,"language":24467,"meta":53,"style":53},"pip list\n",[55,172901,172902],{"__ignoreMap":53},[58,172903,172904,172906],{"class":60,"line":61},[58,172905,24474],{"class":379},[58,172907,119584],{"class":386},[175,172909,172910],{},"导出项目依赖：",[48,172912,172913],{"className":24465,"code":146772,"language":24467,"meta":53,"style":53},[55,172914,172915],{"__ignoreMap":53},[58,172916,172917,172919,172921,172923],{"class":60,"line":61},[58,172918,24474],{"class":379},[58,172920,146781],{"class":386},[58,172922,26866],{"class":92},[58,172924,146786],{"class":386},[175,172926,172927],{},"安装项目依赖：",[48,172929,172930],{"className":24465,"code":146792,"language":24467,"meta":53,"style":53},[55,172931,172932],{"__ignoreMap":53},[58,172933,172934,172936,172938,172940],{"class":60,"line":61},[58,172935,24474],{"class":379},[58,172937,24477],{"class":386},[58,172939,120268],{"class":82},[58,172941,146786],{"class":386},[14,172943,172945],{"id":172944},"_916-模块搜索路径","9.16 模块搜索路径",[175,172947,172948,172949,172952],{},"Python 导入模块时会在 ",[55,172950,172951],{},"sys.path"," 中查找。",[48,172954,172956],{"className":31022,"code":172955,"language":31024,"meta":53,"style":53},"import sys\n\nfor path in sys.path:\n    print(path)\n",[55,172957,172958,172964,172968,172980],{"__ignoreMap":53},[58,172959,172960,172962],{"class":60,"line":61},[58,172961,31036],{"class":92},[58,172963,172674],{"class":75},[58,172965,172966],{"class":60,"line":68},[58,172967,3046],{"emptyLinePlaceholder":720},[58,172969,172970,172972,172975,172977],{"class":60,"line":79},[58,172971,3671],{"class":92},[58,172973,172974],{"class":75}," path ",[58,172976,26687],{"class":92},[58,172978,172979],{"class":75}," sys.path:\n",[58,172981,172982,172984],{"class":60,"line":105},[58,172983,31943],{"class":82},[58,172985,169708],{"class":75},[175,172987,172988],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[175,172990,158102],{},[48,172992,172995],{"className":172993,"code":172994,"language":5833,"meta":53},[5831],"random.py\njson.py\ntime.py\n",[55,172996,172994],{"__ignoreMap":53},[175,172998,172999],{},"这些文件名可能导致导入异常。",[14,173001,173003],{"id":173002},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[175,173005,172799],{},[48,173007,173010],{"className":173008,"code":173009,"language":5833,"meta":53},[5831],"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",[55,173011,173009],{"__ignoreMap":53},[175,173013,173014,25262],{},[55,173015,173016],{},"utils\u002Ffile_utils.py",[48,173018,173020],{"className":31022,"code":173019,"language":31024,"meta":53,"style":53},"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",[55,173021,173022,173028,173038,173042,173046,173056,173066,173074,173080,173084,173111,173121,173125,173129,173139,173165],{"__ignoreMap":53},[58,173023,173024,173026],{"class":60,"line":61},[58,173025,31036],{"class":92},[58,173027,147570],{"class":75},[58,173029,173030,173032,173034,173036],{"class":60,"line":68},[58,173031,31381],{"class":92},[58,173033,108940],{"class":75},[58,173035,31036],{"class":92},[58,173037,108945],{"class":75},[58,173039,173040],{"class":60,"line":79},[58,173041,3046],{"emptyLinePlaceholder":720},[58,173043,173044],{"class":60,"line":105},[58,173045,3046],{"emptyLinePlaceholder":720},[58,173047,173048,173050,173053],{"class":60,"line":627},[58,173049,32591],{"class":92},[58,173051,173052],{"class":379}," read_json",[58,173054,173055],{"class":75},"(path):\n",[58,173057,173058,173061,173063],{"class":60,"line":509},[58,173059,173060],{"class":75},"    path ",[58,173062,383],{"class":92},[58,173064,173065],{"class":75}," Path(path)\n",[58,173067,173068,173070,173072],{"class":60,"line":559},[58,173069,3747],{"class":92},[58,173071,39574],{"class":92},[58,173073,169789],{"class":75},[58,173075,173076,173078],{"class":60,"line":654},[58,173077,15396],{"class":92},[58,173079,52476],{"class":75},[58,173081,173082],{"class":60,"line":671},[58,173083,3046],{"emptyLinePlaceholder":720},[58,173085,173086,173088,173090,173093,173095,173097,173099,173101,173103,173105,173107,173109],{"class":60,"line":677},[58,173087,34822],{"class":92},[58,173089,147270],{"class":82},[58,173091,173092],{"class":75},"(path, ",[58,173094,147280],{"class":386},[58,173096,469],{"class":75},[58,173098,147285],{"class":5862},[58,173100,383],{"class":92},[58,173102,147290],{"class":386},[58,173104,14358],{"class":75},[58,173106,32027],{"class":92},[58,173108,148632],{"class":5862},[58,173110,4385],{"class":75},[58,173112,173113,173115,173117,173119],{"class":60,"line":2260},[58,173114,15396],{"class":92},[58,173116,148643],{"class":75},[58,173118,45998],{"class":5862},[58,173120,799],{"class":75},[58,173122,173123],{"class":60,"line":694},[58,173124,3046],{"emptyLinePlaceholder":720},[58,173126,173127],{"class":60,"line":2270},[58,173128,3046],{"emptyLinePlaceholder":720},[58,173130,173131,173133,173136],{"class":60,"line":2275},[58,173132,32591],{"class":92},[58,173134,173135],{"class":379}," write_json",[58,173137,173138],{"class":75},"(path, data):\n",[58,173140,173141,173143,173145,173147,173149,173151,173153,173155,173157,173159,173161,173163],{"class":60,"line":2289},[58,173142,34822],{"class":92},[58,173144,147270],{"class":82},[58,173146,173092],{"class":75},[58,173148,152455],{"class":386},[58,173150,469],{"class":75},[58,173152,147285],{"class":5862},[58,173154,383],{"class":92},[58,173156,147290],{"class":386},[58,173158,14358],{"class":75},[58,173160,32027],{"class":92},[58,173162,148632],{"class":5862},[58,173164,4385],{"class":75},[58,173166,173167,173170,173172,173174,173176,173178,173180,173182,173184,173186,173188],{"class":60,"line":2294},[58,173168,173169],{"class":75},"        json.dump(data, ",[58,173171,45998],{"class":5862},[58,173173,469],{"class":75},[58,173175,147616],{"class":5862},[58,173177,383],{"class":92},[58,173179,34631],{"class":82},[58,173181,469],{"class":75},[58,173183,152491],{"class":5862},[58,173185,383],{"class":92},[58,173187,867],{"class":82},[58,173189,799],{"class":75},[175,173191,173192,25262],{},[55,173193,155086],{},[48,173195,173197],{"className":31022,"code":173196,"language":31024,"meta":53,"style":53},"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",[55,173198,173199,173210,173214,173227,173247],{"__ignoreMap":53},[58,173200,173201,173203,173205,173207],{"class":60,"line":61},[58,173202,31381],{"class":92},[58,173204,172820],{"class":75},[58,173206,31036],{"class":92},[58,173208,173209],{"class":75}," read_json, write_json\n",[58,173211,173212],{"class":60,"line":68},[58,173213,3046],{"emptyLinePlaceholder":720},[58,173215,173216,173218,173220,173223,173225],{"class":60,"line":79},[58,173217,160195],{"class":75},[58,173219,383],{"class":92},[58,173221,173222],{"class":75}," read_json(",[58,173224,152310],{"class":386},[58,173226,799],{"class":75},[58,173228,173229,173231,173233,173235,173237,173239,173241,173243,173245],{"class":60,"line":105},[58,173230,171013],{"class":75},[58,173232,63311],{"class":386},[58,173234,86],{"class":75},[58,173236,150367],{"class":386},[58,173238,469],{"class":75},[58,173240,151951],{"class":386},[58,173242,86],{"class":75},[58,173244,1773],{"class":82},[58,173246,165631],{"class":75},[58,173248,173249,173252,173254],{"class":60,"line":627},[58,173250,173251],{"class":75},"write_json(",[58,173253,152310],{"class":386},[58,173255,173256],{"class":75},", students)\n",[14,173258,173260],{"id":173259},"_918-易错点","9.18 易错点",[19,173262,173263,173266,173271,173276,173279,173282],{},[22,173264,173265],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[22,173267,173268,173269,29029],{},"能指定异常类型就不要裸写 ",[55,173270,171373],{},[22,173272,173273,173275],{},[55,173274,171748],{}," 无论是否出错都会执行。",[22,173277,173278],{},"模块文件名不要和标准库重名。",[22,173280,173281],{},"导入自己写的模块时，要注意运行目录。",[22,173283,173284],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,173286,173288],{"id":173287},"_919-本章练习","9.19 本章练习",[19,173290,173291,173294,173297,173303,173310],{},[22,173292,173293],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[22,173295,173296],{},"写函数读取文件，如果文件不存在则返回空字符串。",[22,173298,172711,173299,173302],{},[55,173300,173301],{},"math_utils.py","，实现加减乘除函数并导入使用。",[22,173304,173305,173306,173309],{},"创建一个 ",[55,173307,173308],{},"utils"," 包，把 JSON 读写函数放进去。",[22,173311,173312],{},"写一个程序，捕获除零异常和输入格式异常。",[702,173314,173315],{},"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":53,"searchDepth":68,"depth":68,"links":173317},[173318,173319,173320,173321,173322,173323,173324,173325,173326,173327,173328,173334,173341,173343,173344,173345,173346,173347,173348],{"id":171170,"depth":68,"text":171171},{"id":171298,"depth":68,"text":171299},{"id":171347,"depth":68,"text":171348},{"id":171496,"depth":68,"text":171497},{"id":171668,"depth":68,"text":171669},{"id":171737,"depth":68,"text":171738},{"id":171848,"depth":68,"text":171849},{"id":171974,"depth":68,"text":171975},{"id":172099,"depth":68,"text":172100},{"id":172154,"depth":68,"text":172155},{"id":172253,"depth":68,"text":172254,"children":173329},[173330,173331,173332,173333],{"id":172257,"depth":79,"text":172258},{"id":172291,"depth":79,"text":172292},{"id":172330,"depth":79,"text":172331},{"id":172409,"depth":79,"text":172410},{"id":172432,"depth":68,"text":172433,"children":173335},[173336,173337,173338,173339,173340],{"id":172436,"depth":79,"text":172437},{"id":172519,"depth":79,"text":172520},{"id":172564,"depth":79,"text":172565},{"id":172623,"depth":79,"text":172624},{"id":172661,"depth":79,"text":172662},{"id":172695,"depth":68,"text":173342},"9.13 if name == \"main\"",{"id":172788,"depth":68,"text":172789},{"id":172833,"depth":68,"text":172834},{"id":172944,"depth":68,"text":172945},{"id":173002,"depth":68,"text":173003},{"id":173259,"depth":68,"text":173260},{"id":173287,"depth":68,"text":173288},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171162,"description":717},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173355,"title":173356,"body":173357,"description":173520,"extension":718,"meta":173521,"navigation":720,"path":173522,"seo":173523,"stem":173524,"__hash__":173525},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173358,"toc":173515},[173359,173362,173365,173368,173379,173381,173455,173458,173461,173464,173467,173470,173473,173476,173479,173482,173485],[10,173360,173356],{"id":173361},"python教程",[175,173363,173364],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[175,173366,173367],{},"建议学习环境：",[19,173369,173370,173373,173376],{},[22,173371,173372],{},"Python 版本：Python 3.10 及以上。",[22,173374,173375],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[22,173377,173378],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173380,117707],{"id":117707},[19,173382,173383,173389,173395,173401,173407,173413,173419,173425,173431,173437,173443,173449],{},[22,173384,173385],{},[376,173386,173388],{"href":173387},".\u002Fch1-Python","Python环境与第一个程序",[22,173390,173391],{},[376,173392,173394],{"href":173393},".\u002Fch2","基础语法、变量与字符串",[22,173396,173397],{},[376,173398,173400],{"href":173399},".\u002Fch3","判断语句",[22,173402,173403],{},[376,173404,173406],{"href":173405},".\u002Fch4","循环语句",[22,173408,173409],{},[376,173410,173412],{"href":173411},".\u002Fch5","函数基础",[22,173414,173415],{},[376,173416,173418],{"href":173417},".\u002Fch6","数据容器",[22,173420,173421],{},[376,173422,173424],{"href":173423},".\u002Fch7","函数进阶",[22,173426,173427],{},[376,173428,173430],{"href":173429},".\u002Fch8","文件操作",[22,173432,173433],{},[376,173434,173436],{"href":173435},".\u002Fch9","异常、模块与包",[22,173438,173439],{},[376,173440,173442],{"href":173441},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[22,173444,173445],{},[376,173446,173448],{"href":173447},".\u002Fch11","面向对象基础",[22,173450,173451],{},[376,173452,173454],{"href":173453},".\u002Fch12","综合案例与复习路线",[14,173456,173457],{"id":173457},"学习路线",[175,173459,173460],{},"第一阶段：能运行程序。",[175,173462,173463],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[175,173465,173466],{},"第二阶段：能组织数据。",[175,173468,173469],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[175,173471,173472],{},"第三阶段：能封装逻辑。",[175,173474,173475],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[175,173477,173478],{},"第四阶段：能做小项目。",[175,173480,173481],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173483,173484],{"id":173484},"参考资料",[19,173486,173487,173494,173501,173508],{},[22,173488,173489,173490],{},"黑马程序员 Python 入门教程推荐：",[376,173491,173492],{"href":173492,"rel":173493},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24508],[22,173495,173496,173497],{},"Python 官方中文教程：",[376,173498,173499],{"href":173499,"rel":173500},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24508],[22,173502,173503,173504],{},"Python 标准库文档：",[376,173505,173506],{"href":173506,"rel":173507},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24508],[22,173509,173510,173511],{},"pyecharts 文档：",[376,173512,173513],{"href":173513,"rel":173514},"https:\u002F\u002Fpyecharts.org\u002F",[24508],{"title":53,"searchDepth":68,"depth":68,"links":173516},[173517,173518,173519],{"id":117707,"depth":68,"text":117707},{"id":173457,"depth":68,"text":173457},{"id":173484,"depth":68,"text":173484},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24021},"\u002Fwiki\u002F2024-10-10-python",{"title":173356,"description":173520},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331427078]