[{"data":1,"prerenderedAt":174502},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch15-pin-you-gou-xiang-mu-shang-pian-da-jian-yu-gong-gong-mo-kuai":3,"wiki-doc-nav":1886},{"id":4,"title":5,"body":6,"description":1878,"extension":1879,"meta":1880,"navigation":1881,"path":1882,"seo":1883,"stem":1884,"__hash__":1885},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":8,"toc":1859},"minimark",[9,13,18,23,31,37,41,43,46,49,52,55,58,61,64,68,73,76,79,82,86,89,92,97,100,103,106,110,113,123,126,129,133,136,139,146,153,169,178,185,190,193,196,199,206,210,216,222,225,228,233,239,242,251,256,259,265,267,272,278,281,283,288,291,296,302,358,362,366,369,373,376,464,467,516,519,555,559,564,578,633,635,669,671,699,706,720,722,769,771,815,818,825,836,838,868,870,896,903,920,922,1041,1043,1137,1145,1148,1153,1159,1236,1239,1241,1277,1279,1315,1318,1325,1345,1348,1351,1353,1381,1383,1407,1410,1413,1450,1454,1457,1523,1525,1603,1605,1669,1672,1704,1706,1732,1734,1760,1763,1796,1798,1824,1826,1852,1855],[10,11,5],"h1",{"id":12},"_15-品优购项目上篇-搭建与公共模块",[14,15,17],"h2",{"id":16},"_151-项目规划","15.1 项目规划",[19,20],"img",{"style":21,"src":22},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[24,25,26,30],"p",{},[27,28,29],"strong",{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[24,32,33,36],{},[27,34,35],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,38,40],{"id":39},"_152-项目介绍","15.2 项目介绍",[24,42,29],{},[19,44],{"style":21,"src":45},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[24,47,48],{},"主页：",[19,50],{"style":21,"src":51},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[24,53,54],{},"列表页：",[19,56],{"style":21,"src":57},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[24,59,60],{},"注册页：",[19,62],{"style":21,"src":63},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,65,67],{"id":66},"_153-项目搭建工作","15.3 项目搭建工作",[69,70,72],"h3",{"id":71},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[19,74],{"style":21,"src":75},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[24,77,78],{},"经常更换的图片要放到upload文件夹中",[24,80,81],{},"不经常换的放到images文件夹中",[69,83,85],{"id":84},"_1532-创建文件如下","15.3.2 创建文件如下",[19,87],{"style":21,"src":88},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[19,90],{"style":21,"src":91},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[24,93,94],{},[27,95,96],{},"初始化样式：",[24,98,99],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[24,101,102],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[24,104,105],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[69,107,109],{"id":108},"_1533-项目模块化开发","15.3.3 项目模块化开发",[24,111,112],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[24,114,115,116,122],{},"这里最典型的应用就是 ",[27,117,118],{},[119,120,121],"code",{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[19,124],{"style":21,"src":125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[24,127,128],{},"通过link方法来引入",[69,130,132],{"id":131},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[19,134],{"style":21,"src":135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[24,137,138],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[140,141,142],"ol",{},[143,144,145],"li",{},"制作favicon图标",[24,147,148,149,152],{},"①把品优购图标切成 ",[119,150,151],{},"png"," 图片",[24,154,155,156,158,159,162,163],{},"②把 ",[119,157,151],{}," 图片转换为 ",[119,160,161],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[164,165,166],"a",{"href":166,"rel":167},"http:\u002F\u002Fwww.bitbug.net\u002F",[168],"nofollow",[140,170,172,175],{"start":171},2,[143,173,174],{},"favicon图标放到网站根目录下",[143,176,177],{},"HTML页面引入favicon",[24,179,180,181,184],{},"在html 页面里面的 ",[119,182,183],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[24,186,187],{},[119,188,189],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[24,191,192],{},"复制这行代码或者在生成这个的网站进行复制",[19,194],{"style":21,"src":195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[24,197,198],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[24,200,201,202],{},"例如:",[164,203,204],{"href":204,"rel":205},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[168],[69,207,209],{"id":208},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[24,211,212,215],{},[27,213,214],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[24,217,218,221],{},[27,219,220],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[24,223,224],{},"页面必须有三个标签用来符合 SEO 优化",[19,226],{"style":21,"src":227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[140,229,230],{},[143,231,232],{},"title网站标题",[24,234,235,238],{},[27,236,237],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[24,240,241],{},"例：",[243,244,245,248],"ul",{},[143,246,247],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[143,249,250],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[140,252,253],{"start":171},[143,254,255],{},"description网站描述",[24,257,258],{},"简要说明我们网站主要是做什么的",[24,260,261,264],{},[27,262,263],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[24,266,241],{},[24,268,269],{},[119,270,271],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[140,273,275],{"start":274},3,[143,276,277],{},"keywords关键词",[24,279,280],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[24,282,241],{},[24,284,285],{},[119,286,287],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[24,289,290],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[24,292,293],{},[27,294,295],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[140,297,299],{"start":298},4,[143,300,301],{},"代码总结",[303,304,309],"pre",{"className":305,"code":306,"language":307,"meta":308,"style":308},"language-Html shiki shiki-themes github-light github-dark","\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n","Html","",[119,310,311,320,344,349],{"__ignoreMap":308},[312,313,316],"span",{"class":314,"line":315},"line",1,[312,317,319],{"class":318},"sJ8bj","\u003C!-- HTML 代码示例 -->\n",[312,321,322,326,330,334,337,341],{"class":314,"line":171},[312,323,325],{"class":324},"sVt8B","\u003C",[312,327,329],{"class":328},"s9eBZ","div",[312,331,333],{"class":332},"sScJk"," class",[312,335,336],{"class":324},"=",[312,338,340],{"class":339},"sZZnC","\"example\"",[312,342,343],{"class":324},">\n",[312,345,346],{"class":314,"line":274},[312,347,348],{"class":324},"  示例内容\n",[312,350,351,354,356],{"class":314,"line":298},[312,352,353],{"class":324},"\u003C\u002F",[312,355,329],{"class":328},[312,357,343],{"class":324},[14,359,361],{"id":360},"_154-项目公共部分制作","15.4 项目公共部分制作",[69,363,365],{"id":364},"_1541-常用模块类命名","15.4.1 常用模块类命名",[19,367],{"style":21,"src":368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[69,370,372],{"id":371},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[24,374,375],{},"布局思路：",[243,377,378,381,384,407,441],{},[143,379,380],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[143,382,383],{},"里面包含版心的盒子",[143,385,386,387],{},"版心盒子里面包含 1 号左侧盒子左浮动",[243,388,389,398,404],{},[143,390,391,392,394,395,397],{},"1 号盒子 里面包含一个",[119,393,243],{},"，",[119,396,243],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[143,399,400,401,403],{},"里面的内容是水平排列，所以需要给",[119,402,143],{},"设置浮动",[143,405,406],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[143,408,409,410],{},"版心盒子里面包含 2 号右侧盒子右浮动",[243,411,412,427,432],{},[143,413,414,415,394,417,419,420,422,423,426],{},"2 号盒子 里面包含一个",[119,416,243],{},[119,418,243],{},"包裹",[119,421,143],{},"，中间的",[119,424,425],{},"|","可以用样式去设置，也可以用字符 |",[143,428,429,430,403],{},"里面内容水平排列，给",[119,431,143],{},[143,433,434,435,437,438,440],{},"找到里面所有偶数的 ",[119,436,143],{}," 设置样式（偶数的 ",[119,439,143],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[143,442,443,444],{},"需要用到字体图标",[243,445,446,452,455,458,461],{},[143,447,448,449],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[119,450,451],{},"arrow-icon",[143,453,454],{},"先要引入字体图片的资源",[143,456,457],{},"在样式里面利用 font-face 来进行声明",[143,459,460],{},"在伪元素的 content属性设置 图标的编码",[143,462,463],{},"给伪元素设置font-family属性",[24,465,466],{},"结构实例代码：",[303,468,472],{"className":469,"code":470,"language":471,"meta":308,"style":308},"language-Css shiki shiki-themes github-light github-dark","div::before {\n  content: \"\";\n  display: block;\n}\n","Css",[119,473,474,484,499,511],{"__ignoreMap":308},[312,475,476,478,481],{"class":314,"line":315},[312,477,329],{"class":328},[312,479,480],{"class":332},"::before",[312,482,483],{"class":324}," {\n",[312,485,486,490,493,496],{"class":314,"line":171},[312,487,489],{"class":488},"sj4cs","  content",[312,491,492],{"class":324},": ",[312,494,495],{"class":339},"\"\"",[312,497,498],{"class":324},";\n",[312,500,501,504,506,509],{"class":314,"line":274},[312,502,503],{"class":488},"  display",[312,505,492],{"class":324},[312,507,508],{"class":488},"block",[312,510,498],{"class":324},[312,512,513],{"class":314,"line":298},[312,514,515],{"class":324},"}\n",[24,517,518],{},"样式实例代码：",[303,520,521],{"className":469,"code":470,"language":471,"meta":308,"style":308},[119,522,523,531,541,551],{"__ignoreMap":308},[312,524,525,527,529],{"class":314,"line":315},[312,526,329],{"class":328},[312,528,480],{"class":332},[312,530,483],{"class":324},[312,532,533,535,537,539],{"class":314,"line":171},[312,534,489],{"class":488},[312,536,492],{"class":324},[312,538,495],{"class":339},[312,540,498],{"class":324},[312,542,543,545,547,549],{"class":314,"line":274},[312,544,503],{"class":488},[312,546,492],{"class":324},[312,548,508],{"class":488},[312,550,498],{"class":324},[312,552,553],{"class":314,"line":298},[312,554,515],{"class":324},[69,556,558],{"id":557},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[243,560,561],{},[143,562,563],{},"header 盒子必须要有高度",[24,565,566,567,570,571],{},"1 号盒子是 ",[119,568,569],{},"logo"," 标志定位，在正常开发过程中， ",[27,572,573,574,577],{},"logo的布局其实是有讲究的，需要进行 ",[119,575,576],{},"logoSEO","的优化 （★★★）",[243,579,580,588,596,623],{},[143,581,582,584,585,587],{},[119,583,569],{}," 里面首先放一个 ",[119,586,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[143,589,590,592,593,595],{},[119,591,10],{}," 里面再放一个链接，可以返回首页的，把 ",[119,594,569],{}," 的背景图片给链接即可",[143,597,598,599],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[243,600,601,616],{},[143,602,603,604,607,608,611,612,615],{},"方法1：",[119,605,606],{},"text-indent"," 移到盒子外面（",[119,609,610],{},"text-indent: -9999px",") ，然后 ",[119,613,614],{},"overflow:hidden"," ，淘宝的做法",[143,617,618,619,622],{},"方法2：直接给 ",[119,620,621],{},"font-size: 0;"," 就看不到文字了，京东的做法",[143,624,625,626,629,630,632],{},"最后给链接一个 ",[119,627,628],{},"title"," 属性，这样鼠标放到 ",[119,631,569],{}," 上就可以看到提示文字了",[24,634,466],{},[303,636,638],{"className":305,"code":637,"language":307,"meta":308,"style":308},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[119,639,640],{"__ignoreMap":308},[312,641,642,644,646,649,651,654,657,659,662,665,667],{"class":314,"line":315},[312,643,325],{"class":324},[312,645,164],{"class":328},[312,647,648],{"class":332}," href",[312,650,336],{"class":324},[312,652,653],{"class":339},"\"https:\u002F\u002Fexample.com\"",[312,655,656],{"class":332}," target",[312,658,336],{"class":324},[312,660,661],{"class":339},"\"_blank\"",[312,663,664],{"class":324},">链接文字\u003C\u002F",[312,666,164],{"class":328},[312,668,343],{"class":324},[24,670,518],{},[303,672,673],{"className":305,"code":637,"language":307,"meta":308,"style":308},[119,674,675],{"__ignoreMap":308},[312,676,677,679,681,683,685,687,689,691,693,695,697],{"class":314,"line":315},[312,678,325],{"class":324},[312,680,164],{"class":328},[312,682,648],{"class":332},[312,684,336],{"class":324},[312,686,653],{"class":339},[312,688,656],{"class":332},[312,690,336],{"class":324},[312,692,661],{"class":339},[312,694,664],{"class":324},[312,696,164],{"class":328},[312,698,343],{"class":324},[24,700,701,702,705],{},"2 号盒子是 ",[119,703,704],{},"search"," 搜索模块定位",[243,707,708,711,714,717],{},[143,709,710],{},"search盒子利用定位的方式放在对应的位置",[143,712,713],{},"search盒子设置绝对定位，header盒子设置相对定位",[143,715,716],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[143,718,719],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[24,721,466],{},[303,723,725],{"className":469,"code":724,"language":471,"meta":308,"style":308},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[119,726,727,750,755,765],{"__ignoreMap":308},[312,728,729,731,734,736,738,740,742,744,746,748],{"class":314,"line":315},[312,730,329],{"class":328},[312,732,733],{"class":324},", ",[312,735,24],{"class":328},[312,737,733],{"class":324},[312,739,10],{"class":328},[312,741,733],{"class":324},[312,743,243],{"class":328},[312,745,733],{"class":324},[312,747,143],{"class":328},[312,749,483],{"class":324},[312,751,752],{"class":314,"line":171},[312,753,754],{"class":318},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[312,756,757,759,761,763],{"class":314,"line":274},[312,758,503],{"class":488},[312,760,492],{"class":324},[312,762,508],{"class":488},[312,764,498],{"class":324},[312,766,767],{"class":314,"line":298},[312,768,515],{"class":324},[24,770,518],{},[303,772,773],{"className":469,"code":724,"language":471,"meta":308,"style":308},[119,774,775,797,801,811],{"__ignoreMap":308},[312,776,777,779,781,783,785,787,789,791,793,795],{"class":314,"line":315},[312,778,329],{"class":328},[312,780,733],{"class":324},[312,782,24],{"class":328},[312,784,733],{"class":324},[312,786,10],{"class":328},[312,788,733],{"class":324},[312,790,243],{"class":328},[312,792,733],{"class":324},[312,794,143],{"class":328},[312,796,483],{"class":324},[312,798,799],{"class":314,"line":171},[312,800,754],{"class":318},[312,802,803,805,807,809],{"class":314,"line":274},[312,804,503],{"class":488},[312,806,492],{"class":324},[312,808,508],{"class":488},[312,810,498],{"class":324},[312,812,813],{"class":314,"line":298},[312,814,515],{"class":324},[24,816,817],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[24,819,820,821,824],{},"3 号盒子是 ",[119,822,823],{},"hotwords"," 热词模块定位",[243,826,827,830,833],{},[143,828,829],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[143,831,832],{},"给里面所有的a标签设置 左右10px的外边距",[143,834,835],{},"给第一个a标签设置文字变红色（#c81623）",[24,837,466],{},[303,839,841],{"className":469,"code":840,"language":471,"meta":308,"style":308},"div {\n  margin: 0 auto;\n}\n",[119,842,843,849,864],{"__ignoreMap":308},[312,844,845,847],{"class":314,"line":315},[312,846,329],{"class":328},[312,848,483],{"class":324},[312,850,851,854,856,859,862],{"class":314,"line":171},[312,852,853],{"class":488},"  margin",[312,855,492],{"class":324},[312,857,858],{"class":488},"0",[312,860,861],{"class":488}," auto",[312,863,498],{"class":324},[312,865,866],{"class":314,"line":274},[312,867,515],{"class":324},[24,869,518],{},[303,871,872],{"className":469,"code":840,"language":471,"meta":308,"style":308},[119,873,874,880,892],{"__ignoreMap":308},[312,875,876,878],{"class":314,"line":315},[312,877,329],{"class":328},[312,879,483],{"class":324},[312,881,882,884,886,888,890],{"class":314,"line":171},[312,883,853],{"class":488},[312,885,492],{"class":324},[312,887,858],{"class":488},[312,889,861],{"class":488},[312,891,498],{"class":324},[312,893,894],{"class":314,"line":274},[312,895,515],{"class":324},[24,897,898,899,902],{},"4 号盒子是 ",[119,900,901],{},"shopcar"," 购物车模块",[243,904,905,911,914,917],{},[143,906,907,908,910],{},"在",[119,909,901],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[143,912,913],{},"count 统计部分用绝对定位做",[143,915,916],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[143,918,919],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[24,921,466],{},[303,923,925],{"className":469,"code":924,"language":471,"meta":308,"style":308},"\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",[119,926,927,932,951,956,972,978,995,1001,1018,1024],{"__ignoreMap":308},[312,928,929],{"class":314,"line":315},[312,930,931],{"class":318},"\u002F* 静态定位（默认） *\u002F\n",[312,933,934,937,940,943,945,948],{"class":314,"line":171},[312,935,936],{"class":332},".static",[312,938,939],{"class":324}," { ",[312,941,942],{"class":488},"position",[312,944,492],{"class":324},[312,946,947],{"class":488},"static",[312,949,950],{"class":324},"; }\n",[312,952,953],{"class":314,"line":274},[312,954,955],{"class":318},"\u002F* 相对定位 *\u002F\n",[312,957,958,961,963,965,967,970],{"class":314,"line":298},[312,959,960],{"class":332},".relative",[312,962,939],{"class":324},[312,964,942],{"class":488},[312,966,492],{"class":324},[312,968,969],{"class":488},"relative",[312,971,950],{"class":324},[312,973,975],{"class":314,"line":974},5,[312,976,977],{"class":318},"\u002F* 绝对定位 *\u002F\n",[312,979,981,984,986,988,990,993],{"class":314,"line":980},6,[312,982,983],{"class":332},".absolute",[312,985,939],{"class":324},[312,987,942],{"class":488},[312,989,492],{"class":324},[312,991,992],{"class":488},"absolute",[312,994,950],{"class":324},[312,996,998],{"class":314,"line":997},7,[312,999,1000],{"class":318},"\u002F* 固定定位 *\u002F\n",[312,1002,1004,1007,1009,1011,1013,1016],{"class":314,"line":1003},8,[312,1005,1006],{"class":332},".fixed",[312,1008,939],{"class":324},[312,1010,942],{"class":488},[312,1012,492],{"class":324},[312,1014,1015],{"class":488},"fixed",[312,1017,950],{"class":324},[312,1019,1021],{"class":314,"line":1020},9,[312,1022,1023],{"class":318},"\u002F* 粘性定位 *\u002F\n",[312,1025,1027,1030,1032,1034,1036,1039],{"class":314,"line":1026},10,[312,1028,1029],{"class":332},".sticky",[312,1031,939],{"class":324},[312,1033,942],{"class":488},[312,1035,492],{"class":324},[312,1037,1038],{"class":488},"sticky",[312,1040,950],{"class":324},[24,1042,518],{},[303,1044,1045],{"className":469,"code":924,"language":471,"meta":308,"style":308},[119,1046,1047,1051,1065,1069,1083,1087,1101,1105,1119,1123],{"__ignoreMap":308},[312,1048,1049],{"class":314,"line":315},[312,1050,931],{"class":318},[312,1052,1053,1055,1057,1059,1061,1063],{"class":314,"line":171},[312,1054,936],{"class":332},[312,1056,939],{"class":324},[312,1058,942],{"class":488},[312,1060,492],{"class":324},[312,1062,947],{"class":488},[312,1064,950],{"class":324},[312,1066,1067],{"class":314,"line":274},[312,1068,955],{"class":318},[312,1070,1071,1073,1075,1077,1079,1081],{"class":314,"line":298},[312,1072,960],{"class":332},[312,1074,939],{"class":324},[312,1076,942],{"class":488},[312,1078,492],{"class":324},[312,1080,969],{"class":488},[312,1082,950],{"class":324},[312,1084,1085],{"class":314,"line":974},[312,1086,977],{"class":318},[312,1088,1089,1091,1093,1095,1097,1099],{"class":314,"line":980},[312,1090,983],{"class":332},[312,1092,939],{"class":324},[312,1094,942],{"class":488},[312,1096,492],{"class":324},[312,1098,992],{"class":488},[312,1100,950],{"class":324},[312,1102,1103],{"class":314,"line":997},[312,1104,1000],{"class":318},[312,1106,1107,1109,1111,1113,1115,1117],{"class":314,"line":1003},[312,1108,1006],{"class":332},[312,1110,939],{"class":324},[312,1112,942],{"class":488},[312,1114,492],{"class":324},[312,1116,1015],{"class":488},[312,1118,950],{"class":324},[312,1120,1121],{"class":314,"line":1020},[312,1122,1023],{"class":318},[312,1124,1125,1127,1129,1131,1133,1135],{"class":314,"line":1026},[312,1126,1029],{"class":332},[312,1128,939],{"class":324},[312,1130,942],{"class":488},[312,1132,492],{"class":324},[312,1134,1038],{"class":488},[312,1136,950],{"class":324},[69,1138,1140,1141,1144],{"id":1139},"_1544-nav导航模块制作","15.4.4 ",[119,1142,1143],{},"nav","导航模块制作",[19,1146],{"style":21,"src":1147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[24,1149,1150,1152],{},[119,1151,1143],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[24,1154,1155,1156],{},"1 号盒子左侧浮动，",[119,1157,1158],{},"dropdown",[243,1160,1161,1172,1180,1186,1195,1205,1213,1225],{},[143,1162,1163,1164,1167,1168,1171],{},"1号盒子有讲究，根据相关性 里面包含 ",[119,1165,1166],{},".dt"," 和 ",[119,1169,1170],{},".dd"," 两个盒子",[143,1173,1174,1176,1177,1179],{},[119,1175,1166],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[119,1178,1170],{}," 挤到下面去了",[143,1181,1182,1183,1185],{},"给 ",[119,1184,1170],{}," 盒子设置宽度 和 高度，以及背景颜色",[143,1187,1182,1188,1190,1191,1194],{},[119,1189,1170],{}," 盒子里面定义 无序列表 （",[119,1192,1193],{},"ul > li > a","）",[143,1196,1197,1198,1200,1201,1204],{},"每个 ",[119,1199,143],{}," 都有一个高度（",[119,1202,1203],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[143,1206,1182,1207,1209,1210,1194],{},[119,1208,143],{}," 里面的a设置文字大小（",[119,1211,1212],{},"14px",[143,1214,1182,1215,1217,1218,1221,1222,1224],{},[119,1216,143],{}," 设置 ",[119,1219,1220],{},"hover","，当鼠标移入的时候，让",[119,1223,143],{},"的背景变成白色，让里面的文字变成红色",[143,1226,1227,1229,1230,1232,1233,1235],{},[119,1228,143],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[119,1231,143],{},"的右侧，那么给",[119,1234,143],{},"设置相对定位",[24,1237,1238],{},"一定要注意相关性",[24,1240,466],{},[303,1242,1243],{"className":469,"code":470,"language":471,"meta":308,"style":308},[119,1244,1245,1253,1263,1273],{"__ignoreMap":308},[312,1246,1247,1249,1251],{"class":314,"line":315},[312,1248,329],{"class":328},[312,1250,480],{"class":332},[312,1252,483],{"class":324},[312,1254,1255,1257,1259,1261],{"class":314,"line":171},[312,1256,489],{"class":488},[312,1258,492],{"class":324},[312,1260,495],{"class":339},[312,1262,498],{"class":324},[312,1264,1265,1267,1269,1271],{"class":314,"line":274},[312,1266,503],{"class":488},[312,1268,492],{"class":324},[312,1270,508],{"class":488},[312,1272,498],{"class":324},[312,1274,1275],{"class":314,"line":298},[312,1276,515],{"class":324},[24,1278,518],{},[303,1280,1281],{"className":469,"code":470,"language":471,"meta":308,"style":308},[119,1282,1283,1291,1301,1311],{"__ignoreMap":308},[312,1284,1285,1287,1289],{"class":314,"line":315},[312,1286,329],{"class":328},[312,1288,480],{"class":332},[312,1290,483],{"class":324},[312,1292,1293,1295,1297,1299],{"class":314,"line":171},[312,1294,489],{"class":488},[312,1296,492],{"class":324},[312,1298,495],{"class":339},[312,1300,498],{"class":324},[312,1302,1303,1305,1307,1309],{"class":314,"line":274},[312,1304,503],{"class":488},[312,1306,492],{"class":324},[312,1308,508],{"class":488},[312,1310,498],{"class":324},[312,1312,1313],{"class":314,"line":298},[312,1314,515],{"class":324},[24,1316,1317],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[24,1319,1320,1321,1324],{},"2 号盒子左侧浮动，",[119,1322,1323],{},"navitems"," 导航栏组",[243,1326,1327,1332,1342],{},[143,1328,1329,1330],{},"里面结构是 ",[119,1331,1193],{},[143,1333,1334,1335,1337,1338,1341],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[119,1336,164],{},"左右的",[119,1339,1340],{},"padding","把两侧撑开",[143,1343,1344],{},"让文字垂直居中（行高等于高度）",[19,1346],{"style":21,"src":1347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[24,1349,1350],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[24,1352,466],{},[303,1354,1356],{"className":469,"code":1355,"language":471,"meta":308,"style":308},".box {\n  float: left;\n}\n",[119,1357,1358,1365,1377],{"__ignoreMap":308},[312,1359,1360,1363],{"class":314,"line":315},[312,1361,1362],{"class":332},".box",[312,1364,483],{"class":324},[312,1366,1367,1370,1372,1375],{"class":314,"line":171},[312,1368,1369],{"class":488},"  float",[312,1371,492],{"class":324},[312,1373,1374],{"class":488},"left",[312,1376,498],{"class":324},[312,1378,1379],{"class":314,"line":274},[312,1380,515],{"class":324},[24,1382,518],{},[303,1384,1385],{"className":469,"code":1355,"language":471,"meta":308,"style":308},[119,1386,1387,1393,1403],{"__ignoreMap":308},[312,1388,1389,1391],{"class":314,"line":315},[312,1390,1362],{"class":332},[312,1392,483],{"class":324},[312,1394,1395,1397,1399,1401],{"class":314,"line":171},[312,1396,1369],{"class":488},[312,1398,492],{"class":324},[312,1400,1374],{"class":488},[312,1402,498],{"class":324},[312,1404,1405],{"class":314,"line":274},[312,1406,515],{"class":324},[24,1408,1409],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[19,1411],{"style":21,"src":1412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[303,1414,1416],{"className":469,"code":1415,"language":471,"meta":308,"style":308},"div {\n  border: 1px solid #ccc;\n}\n",[119,1417,1418,1424,1446],{"__ignoreMap":308},[312,1419,1420,1422],{"class":314,"line":315},[312,1421,329],{"class":328},[312,1423,483],{"class":324},[312,1425,1426,1429,1431,1434,1438,1441,1444],{"class":314,"line":171},[312,1427,1428],{"class":488},"  border",[312,1430,492],{"class":324},[312,1432,1433],{"class":488},"1",[312,1435,1437],{"class":1436},"szBVR","px",[312,1439,1440],{"class":488}," solid",[312,1442,1443],{"class":488}," #ccc",[312,1445,498],{"class":324},[312,1447,1448],{"class":314,"line":274},[312,1449,515],{"class":324},[69,1451,1453],{"id":1452},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[19,1455],{"style":21,"src":1456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[243,1458,1459,1465,1470],{},[143,1460,1461,1464],{},[119,1462,1463],{},"footer"," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[143,1466,1467,1469],{},[119,1468,1463],{}," 里面有一个大的版心",[143,1471,1472,1473,1476,1477],{},"版心里面包含 1 号盒子，",[119,1474,1475],{},"mod_service"," 是服务模块，mod 是模块的意思",[243,1478,1479,1484,1497,1515,1520],{},[143,1480,1182,1481,1483],{},[119,1482,1475],{}," 设置高度（80px）和下边框",[143,1485,1486,1487,1490,1491,1493,1494,1496],{},"在里面定义 ",[119,1488,1489],{},"ul > li"," ,每个",[119,1492,143],{}," 宽度是300px 高度是 50px，给每个",[119,1495,143],{},"设置35px的左内边距",[143,1498,1499,1500,1502,1503,1506,1507,1509,1510,1512,1513,1194],{},"在每个",[119,1501,143],{},"里面，放一个 ",[119,1504,1505],{},"h5","（里面放图标），一个",[119,1508,329],{},"（里面放",[119,1511,329],{},"和",[119,1514,24],{},[143,1516,1182,1517,1519],{},[119,1518,1505],{},"设置浮动，让h5与这个div左右排列",[143,1521,1522],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[24,1524,466],{},[303,1526,1528],{"className":469,"code":1527,"language":471,"meta":308,"style":308},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[119,1529,1530,1537,1551,1564,1599],{"__ignoreMap":308},[312,1531,1532,1535],{"class":314,"line":315},[312,1533,1534],{"class":332},".icon",[312,1536,483],{"class":324},[312,1538,1539,1542,1544,1547,1549],{"class":314,"line":171},[312,1540,1541],{"class":488},"  width",[312,1543,492],{"class":324},[312,1545,1546],{"class":488},"20",[312,1548,1437],{"class":1436},[312,1550,498],{"class":324},[312,1552,1553,1556,1558,1560,1562],{"class":314,"line":274},[312,1554,1555],{"class":488},"  height",[312,1557,492],{"class":324},[312,1559,1546],{"class":488},[312,1561,1437],{"class":1436},[312,1563,498],{"class":324},[312,1565,1566,1569,1571,1574,1577,1581,1584,1587,1590,1592,1595,1597],{"class":314,"line":298},[312,1567,1568],{"class":488},"  background",[312,1570,492],{"class":324},[312,1572,1573],{"class":488},"url",[312,1575,1576],{"class":324},"(",[312,1578,1580],{"class":1579},"s4XuR","sprites.png",[312,1582,1583],{"class":324},") ",[312,1585,1586],{"class":488},"no-repeat",[312,1588,1589],{"class":488}," -10",[312,1591,1437],{"class":1436},[312,1593,1594],{"class":488}," -20",[312,1596,1437],{"class":1436},[312,1598,498],{"class":324},[312,1600,1601],{"class":314,"line":974},[312,1602,515],{"class":324},[24,1604,518],{},[303,1606,1607],{"className":469,"code":1527,"language":471,"meta":308,"style":308},[119,1608,1609,1615,1627,1639,1665],{"__ignoreMap":308},[312,1610,1611,1613],{"class":314,"line":315},[312,1612,1534],{"class":332},[312,1614,483],{"class":324},[312,1616,1617,1619,1621,1623,1625],{"class":314,"line":171},[312,1618,1541],{"class":488},[312,1620,492],{"class":324},[312,1622,1546],{"class":488},[312,1624,1437],{"class":1436},[312,1626,498],{"class":324},[312,1628,1629,1631,1633,1635,1637],{"class":314,"line":274},[312,1630,1555],{"class":488},[312,1632,492],{"class":324},[312,1634,1546],{"class":488},[312,1636,1437],{"class":1436},[312,1638,498],{"class":324},[312,1640,1641,1643,1645,1647,1649,1651,1653,1655,1657,1659,1661,1663],{"class":314,"line":298},[312,1642,1568],{"class":488},[312,1644,492],{"class":324},[312,1646,1573],{"class":488},[312,1648,1576],{"class":324},[312,1650,1580],{"class":1579},[312,1652,1583],{"class":324},[312,1654,1586],{"class":488},[312,1656,1589],{"class":488},[312,1658,1437],{"class":1436},[312,1660,1594],{"class":488},[312,1662,1437],{"class":1436},[312,1664,498],{"class":324},[312,1666,1667],{"class":314,"line":974},[312,1668,515],{"class":324},[24,1670,1671],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[243,1673,1674,1677,1683,1689,1701],{},[143,1675,1676],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[143,1678,1679,1680,1194],{},"里面的布局利用 自定义列表来实现（",[119,1681,1682],{},"dl > dt + dd",[143,1684,1182,1685,1688],{},[119,1686,1687],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[143,1690,1182,1691,1694,1695,1512,1697,1700],{},[119,1692,1693],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[119,1696,1693],{},[119,1698,1699],{},"dd","之间有些距离",[143,1702,1703],{},"最后一个 dl 结构和样式不一样，需要单独设置",[24,1705,466],{},[303,1707,1708],{"className":469,"code":840,"language":471,"meta":308,"style":308},[119,1709,1710,1716,1728],{"__ignoreMap":308},[312,1711,1712,1714],{"class":314,"line":315},[312,1713,329],{"class":328},[312,1715,483],{"class":324},[312,1717,1718,1720,1722,1724,1726],{"class":314,"line":171},[312,1719,853],{"class":488},[312,1721,492],{"class":324},[312,1723,858],{"class":488},[312,1725,861],{"class":488},[312,1727,498],{"class":324},[312,1729,1730],{"class":314,"line":274},[312,1731,515],{"class":324},[24,1733,518],{},[303,1735,1736],{"className":469,"code":840,"language":471,"meta":308,"style":308},[119,1737,1738,1744,1756],{"__ignoreMap":308},[312,1739,1740,1742],{"class":314,"line":315},[312,1741,329],{"class":328},[312,1743,483],{"class":324},[312,1745,1746,1748,1750,1752,1754],{"class":314,"line":171},[312,1747,853],{"class":488},[312,1749,492],{"class":324},[312,1751,858],{"class":488},[312,1753,861],{"class":488},[312,1755,498],{"class":324},[312,1757,1758],{"class":314,"line":274},[312,1759,515],{"class":324},[24,1761,1762],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[243,1764,1765,1776,1779,1790],{},[143,1766,1767,1768,1771,1772,1775],{},"分为上下两块，上面是 ",[119,1769,1770],{},"links"," 友情链接，下面是 ",[119,1773,1774],{},"copyright","，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[143,1777,1778],{},"把内容分别复制到相应模块中",[143,1780,1182,1781,1783,1784,1786,1787,1789],{},[119,1782,1770],{}," 设置 15px 的下外边距，给",[119,1785,1770],{}," 里面 的 ",[119,1788,164],{}," 标签设置 左右 3px 的外边距",[143,1791,1792,1793,1795],{},"给",[119,1794,1774],{}," 设置 20px 的行高",[24,1797,466],{},[303,1799,1800],{"className":469,"code":840,"language":471,"meta":308,"style":308},[119,1801,1802,1808,1820],{"__ignoreMap":308},[312,1803,1804,1806],{"class":314,"line":315},[312,1805,329],{"class":328},[312,1807,483],{"class":324},[312,1809,1810,1812,1814,1816,1818],{"class":314,"line":171},[312,1811,853],{"class":488},[312,1813,492],{"class":324},[312,1815,858],{"class":488},[312,1817,861],{"class":488},[312,1819,498],{"class":324},[312,1821,1822],{"class":314,"line":274},[312,1823,515],{"class":324},[24,1825,518],{},[303,1827,1828],{"className":469,"code":840,"language":471,"meta":308,"style":308},[119,1829,1830,1836,1848],{"__ignoreMap":308},[312,1831,1832,1834],{"class":314,"line":315},[312,1833,329],{"class":328},[312,1835,483],{"class":324},[312,1837,1838,1840,1842,1844,1846],{"class":314,"line":171},[312,1839,853],{"class":488},[312,1841,492],{"class":324},[312,1843,858],{"class":488},[312,1845,861],{"class":488},[312,1847,498],{"class":324},[312,1849,1850],{"class":314,"line":274},[312,1851,515],{"class":324},[24,1853,1854],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1856,1857,1858],"style",{},"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":308,"searchDepth":171,"depth":171,"links":1860},[1861,1862,1863,1870],{"id":16,"depth":171,"text":17},{"id":39,"depth":171,"text":40},{"id":66,"depth":171,"text":67,"children":1864},[1865,1866,1867,1868,1869],{"id":71,"depth":274,"text":72},{"id":84,"depth":274,"text":85},{"id":108,"depth":274,"text":109},{"id":131,"depth":274,"text":132},{"id":208,"depth":274,"text":209},{"id":360,"depth":171,"text":361,"children":1871},[1872,1873,1874,1875,1877],{"id":364,"depth":274,"text":365},{"id":371,"depth":274,"text":372},{"id":557,"depth":274,"text":558},{"id":1139,"depth":274,"text":1876},"15.4.4 nav导航模块制作",{"id":1452,"depth":274,"text":1453},null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":5,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",[1887,6967,8074,9493,12482,13833,15321,16409,25168,25180,25777,25803,25927,26168,26233,26251,26264,26311,26435,26604,26803,26983,27188,27324,27419,27456,27469,27779,28520,29228,29249,30269,31900,32051,32064,32076,32377,52188,52203,52220,52253,55116,78450,94593,94614,94727,94848,95618,96281,96642,96680,96786,96886,96929,96955,97016,98670,98771,98796,99287,99787,100867,101150,101892,102394,102406,104421,106085,107588,109286,111203,113122,115144,118614,119046,119509,120258,123201,123549,123571,123927,127233,127245,127648,127671,127818,127985,128189,128488,129045,129699,131627,133217,133841,135335,136763,137998,139690,141177,143587,143703,144638,144849,145734,146969,147197,147210,148365,150777,153145,156466,158943,160587,162364,164377,167429,169609,172136,174330],{"id":1888,"title":1889,"body":1890,"description":308,"extension":1879,"meta":6962,"navigation":1881,"path":6963,"seo":6964,"stem":6965,"__hash__":6966},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1891,"toc":6934},[1892,1895,1899,1902,1906,1917,1921,1925,1928,1931,1934,1937,1940,1967,1971,1974,1977,1980,1983,2033,2037,2055,2057,2071,2074,2082,2085,2941,2948,2964,2968,3054,3058,3064,3149,3153,3191,3195,3259,3263,3267,3273,3284,3288,3293,3297,3302,3306,3311,3315,3319,3324,3593,3598,3736,3741,3997,4000,4008,4012,4017,4120,4123,4429,4438,4539,4542,4545,4548,4551,4811,4816,4956,4959,5138,5141,5269,5272,5424,5428,5433,5436,5447,5455,5458,5565,5569,5573,5578,5628,5633,5638,5662,5667,5720,5723,5728,5905,5910,6195,6200,6597,6601,6606,6663,6668,6676,6679,6819,6822,6931],[10,1893,1889],{"id":1894},"_1基础入门",[14,1896,1898],{"id":1897},"_11注释","1.1注释",[24,1900,1901],{},"\u002F\u002F或者\u002F* *\u002F",[14,1903,1905],{"id":1904},"_12命名","1.2命名",[140,1907,1908,1911,1914],{},[143,1909,1910],{},"字母数字下划线",[143,1912,1913],{},"开头必须是字母或_",[143,1915,1916],{},"不能使用关键词",[14,1918,1920],{"id":1919},"_13数据类型","1.3数据类型",[69,1922,1924],{"id":1923},"_131整形","1.3.1整形",[24,1926,1927],{},"short 短整形 2",[24,1929,1930],{},"int 整形 4",[24,1932,1933],{},"long 长整形 win4 linux32位4 linux64位8",[24,1935,1936],{},"long long 长长整形 8",[24,1938,1939],{},"利用sizeof可以求数据类型占用的内存空间大小",[303,1941,1945],{"className":1942,"code":1943,"language":1944,"meta":308,"style":308},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[119,1946,1947,1960],{"__ignoreMap":308},[312,1948,1949,1952,1954,1957],{"class":314,"line":315},[312,1950,1951],{"class":1436},"sizeof",[312,1953,1576],{"class":324},[312,1955,1956],{"class":1436},"int",[312,1958,1959],{"class":324},")\n",[312,1961,1962,1964],{"class":314,"line":171},[312,1963,1951],{"class":1436},[312,1965,1966],{"class":324},"(num)\n",[69,1968,1970],{"id":1969},"_132浮点型","1.3.2浮点型",[24,1972,1973],{},"float 单精度 4节 7位有效数字",[24,1975,1976],{},"double 双精度 8节 15-16有效数字",[24,1978,1979],{},"默认情况下，输出一个小数，会显示6位有效数字",[24,1981,1982],{},"注意点：",[303,1984,1986],{"className":1942,"code":1985,"language":1944,"meta":308,"style":308},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[119,1987,1988,2010],{"__ignoreMap":308},[312,1989,1990,1993,1996,1998,2001,2004,2007],{"class":314,"line":315},[312,1991,1992],{"class":1436},"float",[312,1994,1995],{"class":324}," f1",[312,1997,336],{"class":1436},[312,1999,2000],{"class":488},"3.14",[312,2002,2003],{"class":1436},"f",[312,2005,2006],{"class":324},";",[312,2008,2009],{"class":318}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[312,2011,2012,2014,2017,2019,2022,2025,2028,2030],{"class":314,"line":171},[312,2013,1992],{"class":1436},[312,2015,2016],{"class":324}," f2",[312,2018,336],{"class":1436},[312,2020,2021],{"class":488},"3",[312,2023,2024],{"class":1436},"e",[312,2026,2027],{"class":488},"2",[312,2029,2006],{"class":324},[312,2031,2032],{"class":318}," \u002F\u002F科学记数法\n",[69,2034,2036],{"id":2035},"_133字符型","1.3.3字符型",[303,2038,2040],{"className":1942,"code":2039,"language":1944,"meta":308,"style":308},"char ch='a'\n",[119,2041,2042],{"__ignoreMap":308},[312,2043,2044,2047,2050,2052],{"class":314,"line":315},[312,2045,2046],{"class":1436},"char",[312,2048,2049],{"class":324}," ch",[312,2051,336],{"class":1436},[312,2053,2054],{"class":339},"'a'\n",[24,2056,1982],{},[140,2058,2059,2062,2065,2068],{},[143,2060,2061],{},"在显示字符型变量时，只能单引号，双引号x",[143,2063,2064],{},"单引号内只能一个字符，不能字符串",[143,2066,2067],{},"c和c++字符型变量只占用一个字符",[143,2069,2070],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[24,2072,2073],{},"ASCII码大致由以下两部分组成：",[140,2075,2076,2079],{},[143,2077,2078],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[143,2080,2081],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[24,2083,2084],{},"ASCII码表格：",[2086,2087,2088,2131],"table",{},[2089,2090,2091],"thead",{},[2092,2093,2094,2101,2106,2110,2115,2119,2123,2127],"tr",{},[2095,2096,2097,2100],"th",{},[27,2098,2099],{},"ASCII","值",[2095,2102,2103],{},[27,2104,2105],{},"控制字符",[2095,2107,2108,2100],{},[27,2109,2099],{},[2095,2111,2112],{},[27,2113,2114],{},"字符",[2095,2116,2117,2100],{},[27,2118,2099],{},[2095,2120,2121],{},[27,2122,2114],{},[2095,2124,2125,2100],{},[27,2126,2099],{},[2095,2128,2129],{},[27,2130,2114],{},[2132,2133,2134,2160,2184,2209,2234,2260,2285,2310,2336,2361,2387,2413,2439,2464,2490,2516,2542,2566,2591,2616,2641,2665,2690,2715,2740,2765,2790,2816,2841,2864,2889,2915],"tbody",{},[2092,2135,2136,2139,2142,2145,2148,2151,2154,2157],{},[2137,2138,858],"td",{},[2137,2140,2141],{},"NUT",[2137,2143,2144],{},"32",[2137,2146,2147],{},"(space)",[2137,2149,2150],{},"64",[2137,2152,2153],{},"@",[2137,2155,2156],{},"96",[2137,2158,2159],{},"、",[2092,2161,2162,2164,2167,2170,2173,2176,2179,2182],{},[2137,2163,1433],{},[2137,2165,2166],{},"SOH",[2137,2168,2169],{},"33",[2137,2171,2172],{},"!",[2137,2174,2175],{},"65",[2137,2177,2178],{},"A",[2137,2180,2181],{},"97",[2137,2183,164],{},[2092,2185,2186,2188,2191,2194,2197,2200,2203,2206],{},[2137,2187,2027],{},[2137,2189,2190],{},"STX",[2137,2192,2193],{},"34",[2137,2195,2196],{},"\"",[2137,2198,2199],{},"66",[2137,2201,2202],{},"B",[2137,2204,2205],{},"98",[2137,2207,2208],{},"b",[2092,2210,2211,2213,2216,2219,2222,2225,2228,2231],{},[2137,2212,2021],{},[2137,2214,2215],{},"ETX",[2137,2217,2218],{},"35",[2137,2220,2221],{},"#",[2137,2223,2224],{},"67",[2137,2226,2227],{},"C",[2137,2229,2230],{},"99",[2137,2232,2233],{},"c",[2092,2235,2236,2239,2242,2245,2248,2251,2254,2257],{},[2137,2237,2238],{},"4",[2137,2240,2241],{},"EOT",[2137,2243,2244],{},"36",[2137,2246,2247],{},"$",[2137,2249,2250],{},"68",[2137,2252,2253],{},"D",[2137,2255,2256],{},"100",[2137,2258,2259],{},"d",[2092,2261,2262,2265,2268,2271,2274,2277,2280,2283],{},[2137,2263,2264],{},"5",[2137,2266,2267],{},"ENQ",[2137,2269,2270],{},"37",[2137,2272,2273],{},"%",[2137,2275,2276],{},"69",[2137,2278,2279],{},"E",[2137,2281,2282],{},"101",[2137,2284,2024],{},[2092,2286,2287,2290,2293,2296,2299,2302,2305,2308],{},[2137,2288,2289],{},"6",[2137,2291,2292],{},"ACK",[2137,2294,2295],{},"38",[2137,2297,2298],{},"&",[2137,2300,2301],{},"70",[2137,2303,2304],{},"F",[2137,2306,2307],{},"102",[2137,2309,2003],{},[2092,2311,2312,2315,2318,2321,2324,2327,2330,2333],{},[2137,2313,2314],{},"7",[2137,2316,2317],{},"BEL",[2137,2319,2320],{},"39",[2137,2322,2323],{},",",[2137,2325,2326],{},"71",[2137,2328,2329],{},"G",[2137,2331,2332],{},"103",[2137,2334,2335],{},"g",[2092,2337,2338,2341,2344,2347,2349,2352,2355,2358],{},[2137,2339,2340],{},"8",[2137,2342,2343],{},"BS",[2137,2345,2346],{},"40",[2137,2348,1576],{},[2137,2350,2351],{},"72",[2137,2353,2354],{},"H",[2137,2356,2357],{},"104",[2137,2359,2360],{},"h",[2092,2362,2363,2366,2369,2372,2375,2378,2381,2384],{},[2137,2364,2365],{},"9",[2137,2367,2368],{},"HT",[2137,2370,2371],{},"41",[2137,2373,2374],{},")",[2137,2376,2377],{},"73",[2137,2379,2380],{},"I",[2137,2382,2383],{},"105",[2137,2385,2386],{},"i",[2092,2388,2389,2392,2395,2398,2401,2404,2407,2410],{},[2137,2390,2391],{},"10",[2137,2393,2394],{},"LF",[2137,2396,2397],{},"42",[2137,2399,2400],{},"*",[2137,2402,2403],{},"74",[2137,2405,2406],{},"J",[2137,2408,2409],{},"106",[2137,2411,2412],{},"j",[2092,2414,2415,2418,2421,2424,2427,2430,2433,2436],{},[2137,2416,2417],{},"11",[2137,2419,2420],{},"VT",[2137,2422,2423],{},"43",[2137,2425,2426],{},"+",[2137,2428,2429],{},"75",[2137,2431,2432],{},"K",[2137,2434,2435],{},"107",[2137,2437,2438],{},"k",[2092,2440,2441,2444,2447,2450,2452,2455,2458,2461],{},[2137,2442,2443],{},"12",[2137,2445,2446],{},"FF",[2137,2448,2449],{},"44",[2137,2451,2323],{},[2137,2453,2454],{},"76",[2137,2456,2457],{},"L",[2137,2459,2460],{},"108",[2137,2462,2463],{},"l",[2092,2465,2466,2469,2472,2475,2478,2481,2484,2487],{},[2137,2467,2468],{},"13",[2137,2470,2471],{},"CR",[2137,2473,2474],{},"45",[2137,2476,2477],{},"-",[2137,2479,2480],{},"77",[2137,2482,2483],{},"M",[2137,2485,2486],{},"109",[2137,2488,2489],{},"m",[2092,2491,2492,2495,2498,2501,2504,2507,2510,2513],{},[2137,2493,2494],{},"14",[2137,2496,2497],{},"SO",[2137,2499,2500],{},"46",[2137,2502,2503],{},".",[2137,2505,2506],{},"78",[2137,2508,2509],{},"N",[2137,2511,2512],{},"110",[2137,2514,2515],{},"n",[2092,2517,2518,2521,2524,2527,2530,2533,2536,2539],{},[2137,2519,2520],{},"15",[2137,2522,2523],{},"SI",[2137,2525,2526],{},"47",[2137,2528,2529],{},"\u002F",[2137,2531,2532],{},"79",[2137,2534,2535],{},"O",[2137,2537,2538],{},"111",[2137,2540,2541],{},"o",[2092,2543,2544,2547,2550,2553,2555,2558,2561,2564],{},[2137,2545,2546],{},"16",[2137,2548,2549],{},"DLE",[2137,2551,2552],{},"48",[2137,2554,858],{},[2137,2556,2557],{},"80",[2137,2559,2560],{},"P",[2137,2562,2563],{},"112",[2137,2565,24],{},[2092,2567,2568,2571,2574,2577,2579,2582,2585,2588],{},[2137,2569,2570],{},"17",[2137,2572,2573],{},"DCI",[2137,2575,2576],{},"49",[2137,2578,1433],{},[2137,2580,2581],{},"81",[2137,2583,2584],{},"Q",[2137,2586,2587],{},"113",[2137,2589,2590],{},"q",[2092,2592,2593,2596,2599,2602,2604,2607,2610,2613],{},[2137,2594,2595],{},"18",[2137,2597,2598],{},"DC2",[2137,2600,2601],{},"50",[2137,2603,2027],{},[2137,2605,2606],{},"82",[2137,2608,2609],{},"R",[2137,2611,2612],{},"114",[2137,2614,2615],{},"r",[2092,2617,2618,2621,2624,2627,2629,2632,2635,2638],{},[2137,2619,2620],{},"19",[2137,2622,2623],{},"DC3",[2137,2625,2626],{},"51",[2137,2628,2021],{},[2137,2630,2631],{},"83",[2137,2633,2634],{},"S",[2137,2636,2637],{},"115",[2137,2639,2640],{},"s",[2092,2642,2643,2645,2648,2651,2653,2656,2659,2662],{},[2137,2644,1546],{},[2137,2646,2647],{},"DC4",[2137,2649,2650],{},"52",[2137,2652,2238],{},[2137,2654,2655],{},"84",[2137,2657,2658],{},"T",[2137,2660,2661],{},"116",[2137,2663,2664],{},"t",[2092,2666,2667,2670,2673,2676,2678,2681,2684,2687],{},[2137,2668,2669],{},"21",[2137,2671,2672],{},"NAK",[2137,2674,2675],{},"53",[2137,2677,2264],{},[2137,2679,2680],{},"85",[2137,2682,2683],{},"U",[2137,2685,2686],{},"117",[2137,2688,2689],{},"u",[2092,2691,2692,2695,2698,2701,2703,2706,2709,2712],{},[2137,2693,2694],{},"22",[2137,2696,2697],{},"SYN",[2137,2699,2700],{},"54",[2137,2702,2289],{},[2137,2704,2705],{},"86",[2137,2707,2708],{},"V",[2137,2710,2711],{},"118",[2137,2713,2714],{},"v",[2092,2716,2717,2720,2723,2726,2728,2731,2734,2737],{},[2137,2718,2719],{},"23",[2137,2721,2722],{},"TB",[2137,2724,2725],{},"55",[2137,2727,2314],{},[2137,2729,2730],{},"87",[2137,2732,2733],{},"W",[2137,2735,2736],{},"119",[2137,2738,2739],{},"w",[2092,2741,2742,2745,2748,2751,2753,2756,2759,2762],{},[2137,2743,2744],{},"24",[2137,2746,2747],{},"CAN",[2137,2749,2750],{},"56",[2137,2752,2340],{},[2137,2754,2755],{},"88",[2137,2757,2758],{},"X",[2137,2760,2761],{},"120",[2137,2763,2764],{},"x",[2092,2766,2767,2770,2773,2776,2778,2781,2784,2787],{},[2137,2768,2769],{},"25",[2137,2771,2772],{},"EM",[2137,2774,2775],{},"57",[2137,2777,2365],{},[2137,2779,2780],{},"89",[2137,2782,2783],{},"Y",[2137,2785,2786],{},"121",[2137,2788,2789],{},"y",[2092,2791,2792,2795,2798,2801,2804,2807,2810,2813],{},[2137,2793,2794],{},"26",[2137,2796,2797],{},"SUB",[2137,2799,2800],{},"58",[2137,2802,2803],{},":",[2137,2805,2806],{},"90",[2137,2808,2809],{},"Z",[2137,2811,2812],{},"122",[2137,2814,2815],{},"z",[2092,2817,2818,2821,2824,2827,2829,2832,2835,2838],{},[2137,2819,2820],{},"27",[2137,2822,2823],{},"ESC",[2137,2825,2826],{},"59",[2137,2828,2006],{},[2137,2830,2831],{},"91",[2137,2833,2834],{},"[",[2137,2836,2837],{},"123",[2137,2839,2840],{},"{",[2092,2842,2843,2846,2849,2852,2854,2857,2859,2862],{},[2137,2844,2845],{},"28",[2137,2847,2848],{},"FS",[2137,2850,2851],{},"60",[2137,2853,325],{},[2137,2855,2856],{},"92",[2137,2858,2529],{},[2137,2860,2861],{},"124",[2137,2863,425],{},[2092,2865,2866,2869,2872,2875,2877,2880,2883,2886],{},[2137,2867,2868],{},"29",[2137,2870,2871],{},"GS",[2137,2873,2874],{},"61",[2137,2876,336],{},[2137,2878,2879],{},"93",[2137,2881,2882],{},"]",[2137,2884,2885],{},"125",[2137,2887,2888],{},"}",[2092,2890,2891,2894,2897,2900,2903,2906,2909,2912],{},[2137,2892,2893],{},"30",[2137,2895,2896],{},"RS",[2137,2898,2899],{},"62",[2137,2901,2902],{},">",[2137,2904,2905],{},"94",[2137,2907,2908],{},"^",[2137,2910,2911],{},"126",[2137,2913,2914],{},"`",[2092,2916,2917,2920,2923,2926,2929,2932,2935,2938],{},[2137,2918,2919],{},"31",[2137,2921,2922],{},"US",[2137,2924,2925],{},"63",[2137,2927,2928],{},"?",[2137,2930,2931],{},"95",[2137,2933,2934],{},"_",[2137,2936,2937],{},"127",[2137,2939,2940],{},"DEL",[24,2942,2943,2944,2947],{},"ASCII 码大致由以下",[27,2945,2946],{},"两部分组","成：",[243,2949,2950,2957],{},[143,2951,2952,2953,2956],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[27,2954,2955],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[143,2958,2959,2960,2963],{},"ASCII 打印字符：数字 ",[27,2961,2962],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[69,2965,2967],{"id":2966},"_134转义字符","1.3.4转义字符",[303,2969,2971],{"className":1942,"code":2970,"language":1944,"meta":308,"style":308},"\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",[119,2972,2973,2978,2994,3008,3013,3026,3031],{"__ignoreMap":308},[312,2974,2975],{"class":314,"line":315},[312,2976,2977],{"class":318},"\u002F\u002F换行符\n",[312,2979,2980,2983,2986,2989,2991],{"class":314,"line":171},[312,2981,2982],{"class":324},"cout ",[312,2984,2985],{"class":1436},"\u003C\u003C",[312,2987,2988],{"class":339},"\"hello world\u002Fn\"",[312,2990,2006],{"class":324},[312,2992,2993],{"class":318}," \u002F\u002F就等同于如下：\n",[312,2995,2996,2998,3000,3003,3005],{"class":314,"line":274},[312,2997,2982],{"class":324},[312,2999,2985],{"class":1436},[312,3001,3002],{"class":339},"\"hello world\"",[312,3004,2985],{"class":1436},[312,3006,3007],{"class":324},"endl;\n",[312,3009,3010],{"class":314,"line":298},[312,3011,3012],{"class":318},"\u002F\u002F反斜杠\n",[312,3014,3015,3017,3019,3022,3024],{"class":314,"line":974},[312,3016,2982],{"class":324},[312,3018,2985],{"class":1436},[312,3020,3021],{"class":339},"\"\u002F\u002F\"",[312,3023,2985],{"class":1436},[312,3025,3007],{"class":324},[312,3027,3028],{"class":314,"line":980},[312,3029,3030],{"class":318},"\u002F\u002F水平制表符\n",[312,3032,3033,3035,3037,3040,3043,3046,3048,3051],{"class":314,"line":997},[312,3034,2982],{"class":324},[312,3036,2985],{"class":1436},[312,3038,3039],{"class":339},"\"aaaa",[312,3041,3042],{"class":488},"\\t",[312,3044,3045],{"class":339},"helloworld\"",[312,3047,2985],{"class":1436},[312,3049,3050],{"class":324},"endl;",[312,3052,3053],{"class":318}," \u002F\u002F输出窗口时有对齐效果\n",[69,3055,3057],{"id":3056},"_135字符串型","1.3.5字符串型",[24,3059,3060,3061,3063],{},"char 变量名",[312,3062],{},"=\"字符串值\"",[303,3065,3067],{"className":1942,"code":3066,"language":1944,"meta":308,"style":308},"\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",[119,3068,3069,3074,3079,3084,3089,3102,3115,3120,3125,3136],{"__ignoreMap":308},[312,3070,3071],{"class":314,"line":315},[312,3072,3073],{"class":318},"\u002F\u002Fc风格字符串\n",[312,3075,3076],{"class":314,"line":171},[312,3077,3078],{"class":318},"\u002F\u002F注意事项：\n",[312,3080,3081],{"class":314,"line":274},[312,3082,3083],{"class":318},"\u002F\u002F1.char字符串名[]\n",[312,3085,3086],{"class":314,"line":298},[312,3087,3088],{"class":318},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[312,3090,3091,3093,3096,3098,3100],{"class":314,"line":974},[312,3092,2046],{"class":1436},[312,3094,3095],{"class":324}," str[]",[312,3097,336],{"class":1436},[312,3099,3002],{"class":339},[312,3101,498],{"class":324},[312,3103,3104,3106,3108,3111,3113],{"class":314,"line":980},[312,3105,2982],{"class":324},[312,3107,2985],{"class":1436},[312,3109,3110],{"class":324},"str",[312,3112,2985],{"class":1436},[312,3114,3007],{"class":324},[312,3116,3117],{"class":314,"line":997},[312,3118,3119],{"class":318},"\u002F\u002Fc++风格字符串\n",[312,3121,3122],{"class":314,"line":1003},[312,3123,3124],{"class":318},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[312,3126,3127,3130,3132,3134],{"class":314,"line":1020},[312,3128,3129],{"class":324},"string str2",[312,3131,336],{"class":1436},[312,3133,3002],{"class":339},[312,3135,498],{"class":324},[312,3137,3138,3140,3142,3145,3147],{"class":314,"line":1026},[312,3139,2982],{"class":324},[312,3141,2985],{"class":1436},[312,3143,3144],{"class":324},"str2",[312,3146,2985],{"class":1436},[312,3148,3007],{"class":324},[69,3150,3152],{"id":3151},"_136布尔类型bool","1.3.6布尔类型bool",[303,3154,3156],{"className":1942,"code":3155,"language":1944,"meta":308,"style":308},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[119,3157,3158,3173],{"__ignoreMap":308},[312,3159,3160,3163,3166,3168,3171],{"class":314,"line":315},[312,3161,3162],{"class":1436},"bool",[312,3164,3165],{"class":324}," flag",[312,3167,336],{"class":1436},[312,3169,3170],{"class":488},"true",[312,3172,498],{"class":324},[312,3174,3175,3178,3181,3184,3186,3188],{"class":314,"line":171},[312,3176,3177],{"class":324},"cout",[312,3179,3180],{"class":1436},"\u003C\u003Csizeof",[312,3182,3183],{"class":324},"(flag)",[312,3185,2985],{"class":1436},[312,3187,3050],{"class":324},[312,3189,3190],{"class":318}," \u002F\u002F查看布尔占内存空间\n",[14,3192,3194],{"id":3193},"_14键盘输入cin","1.4键盘输入cin",[303,3196,3198],{"className":1942,"code":3197,"language":1944,"meta":308,"style":308},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[119,3199,3200,3213,3230,3241],{"__ignoreMap":308},[312,3201,3202,3204,3207,3209,3211],{"class":314,"line":315},[312,3203,1956],{"class":1436},[312,3205,3206],{"class":324}," a",[312,3208,336],{"class":1436},[312,3210,858],{"class":488},[312,3212,498],{"class":324},[312,3214,3215,3217,3219,3222,3224,3226,3228],{"class":314,"line":171},[312,3216,3177],{"class":324},[312,3218,2985],{"class":1436},[312,3220,3221],{"class":339},"\"请给整型变量a赋值\"",[312,3223,2985],{"class":1436},[312,3225,164],{"class":324},[312,3227,2985],{"class":1436},[312,3229,3007],{"class":324},[312,3231,3232,3235,3238],{"class":314,"line":274},[312,3233,3234],{"class":324},"cin ",[312,3236,3237],{"class":1436},">>",[312,3239,3240],{"class":324}," a;\n",[312,3242,3243,3245,3247,3250,3253,3255,3257],{"class":314,"line":298},[312,3244,2982],{"class":324},[312,3246,2985],{"class":1436},[312,3248,3249],{"class":339}," \"整型变量a=\"",[312,3251,3252],{"class":1436}," \u003C\u003C",[312,3254,164],{"class":324},[312,3256,2985],{"class":1436},[312,3258,3007],{"class":324},[14,3260,3262],{"id":3261},"_15运算符","1.5运算符",[69,3264,3266],{"id":3265},"_151算术运算符","1.5.1算术运算符",[24,3268,3269,3272],{},[19,3270],{"alt":308,"src":3271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[140,3274,3275,3278,3281],{},[143,3276,3277],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[143,3279,3280],{},"两个小数不可以做取模运算",[143,3282,3283],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[69,3285,3287],{"id":3286},"_152赋值运算符","1.5.2赋值运算符",[24,3289,3290],{},[19,3291],{"alt":308,"src":3292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[69,3294,3296],{"id":3295},"_153比较运算符","1.5.3比较运算符",[24,3298,3299],{},[19,3300],{"alt":308,"src":3301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[69,3303,3305],{"id":3304},"_154逻辑运算符","1.5.4逻辑运算符",[24,3307,3308],{},[19,3309],{"alt":308,"src":3310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3312,3314],{"id":3313},"_16程序流程结构","1.6程序流程结构",[69,3316,3318],{"id":3317},"_161选择结构","1.6.1选择结构",[140,3320,3321],{},[143,3322,3323],{},"if语句\n单行、多行、多条件if语句",[303,3325,3327],{"className":1942,"code":3326,"language":1944,"meta":308,"style":308},"\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",[119,3328,3329,3334,3349,3354,3368,3372,3377,3386,3399,3403,3416,3421,3427,3432,3446,3451,3457,3478,3483,3497,3502,3531,3536,3553,3558,3563,3568,3582,3587],{"__ignoreMap":308},[312,3330,3331],{"class":314,"line":315},[312,3332,3333],{"class":318},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[312,3335,3336,3339,3342,3344,3347],{"class":314,"line":171},[312,3337,3338],{"class":1436},"if",[312,3340,3341],{"class":324},"(score",[312,3343,2902],{"class":1436},[312,3345,3346],{"class":488},"600",[312,3348,1959],{"class":324},[312,3350,3351],{"class":314,"line":274},[312,3352,3353],{"class":324},"{\n",[312,3355,3356,3359,3361,3364,3366],{"class":314,"line":298},[312,3357,3358],{"class":324},"    cout",[312,3360,2985],{"class":1436},[312,3362,3363],{"class":339},"'这是单行if语句'",[312,3365,2985],{"class":1436},[312,3367,3007],{"class":324},[312,3369,3370],{"class":314,"line":974},[312,3371,515],{"class":324},[312,3373,3374],{"class":314,"line":980},[312,3375,3376],{"class":318},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[312,3378,3379,3381,3383],{"class":314,"line":997},[312,3380,3234],{"class":324},[312,3382,3237],{"class":1436},[312,3384,3385],{"class":324}," score\n",[312,3387,3388,3390,3392,3395,3397],{"class":314,"line":1003},[312,3389,3338],{"class":1436},[312,3391,3341],{"class":324},[312,3393,3394],{"class":1436},"\u003C=",[312,3396,3346],{"class":488},[312,3398,1959],{"class":324},[312,3400,3401],{"class":314,"line":1020},[312,3402,3353],{"class":324},[312,3404,3405,3407,3409,3412,3414],{"class":314,"line":1026},[312,3406,3358],{"class":324},[312,3408,3237],{"class":1436},[312,3410,3411],{"class":339},"\"小于等于600\"",[312,3413,2985],{"class":1436},[312,3415,3007],{"class":324},[312,3417,3419],{"class":314,"line":3418},11,[312,3420,515],{"class":324},[312,3422,3424],{"class":314,"line":3423},12,[312,3425,3426],{"class":1436},"else\n",[312,3428,3430],{"class":314,"line":3429},13,[312,3431,3353],{"class":324},[312,3433,3435,3437,3439,3442,3444],{"class":314,"line":3434},14,[312,3436,3358],{"class":324},[312,3438,3237],{"class":1436},[312,3440,3441],{"class":339},"\"大于600\"",[312,3443,3237],{"class":1436},[312,3445,3007],{"class":324},[312,3447,3449],{"class":314,"line":3448},15,[312,3450,515],{"class":324},[312,3452,3454],{"class":314,"line":3453},16,[312,3455,3456],{"class":318},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[312,3458,3460,3462,3465,3467,3469,3472,3474,3476],{"class":314,"line":3459},17,[312,3461,3338],{"class":1436},[312,3463,3464],{"class":324}," (",[312,3466,858],{"class":488},[312,3468,325],{"class":1436},[312,3470,3471],{"class":324},"num",[312,3473,325],{"class":1436},[312,3475,2256],{"class":488},[312,3477,1959],{"class":324},[312,3479,3481],{"class":314,"line":3480},18,[312,3482,3353],{"class":324},[312,3484,3486,3488,3490,3493,3495],{"class":314,"line":3485},19,[312,3487,3358],{"class":324},[312,3489,2985],{"class":1436},[312,3491,3492],{"class":339},"\"小于100\"",[312,3494,2985],{"class":1436},[312,3496,3007],{"class":324},[312,3498,3500],{"class":314,"line":3499},20,[312,3501,515],{"class":324},[312,3503,3505,3508,3511,3514,3517,3519,3522,3524,3526,3529],{"class":314,"line":3504},21,[312,3506,3507],{"class":1436},"else",[312,3509,3510],{"class":1436}," if",[312,3512,3513],{"class":324}," (nmu",[312,3515,3516],{"class":1436},">=",[312,3518,2256],{"class":488},[312,3520,3521],{"class":1436},"&&",[312,3523,3471],{"class":324},[312,3525,325],{"class":1436},[312,3527,3528],{"class":488},"200",[312,3530,1959],{"class":324},[312,3532,3534],{"class":314,"line":3533},22,[312,3535,3353],{"class":324},[312,3537,3539,3541,3543,3546,3548,3550],{"class":314,"line":3538},23,[312,3540,3358],{"class":324},[312,3542,2985],{"class":1436},[312,3544,3545],{"class":339},"\"不小于100且小于200\"",[312,3547,2985],{"class":1436},[312,3549,3050],{"class":324},[312,3551,3552],{"class":318}," \u002F\u002F可以无限else if,python中是elif：\n",[312,3554,3556],{"class":314,"line":3555},24,[312,3557,515],{"class":324},[312,3559,3561],{"class":314,"line":3560},25,[312,3562,3426],{"class":1436},[312,3564,3566],{"class":314,"line":3565},26,[312,3567,3353],{"class":324},[312,3569,3571,3573,3575,3578,3580],{"class":314,"line":3570},27,[312,3572,3358],{"class":324},[312,3574,2985],{"class":1436},[312,3576,3577],{"class":339},"\"不小于200\"",[312,3579,2985],{"class":1436},[312,3581,3007],{"class":324},[312,3583,3585],{"class":314,"line":3584},28,[312,3586,515],{"class":324},[312,3588,3590],{"class":314,"line":3589},29,[312,3591,3592],{"class":318},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[140,3594,3595],{"start":171},[143,3596,3597],{},"三目运算符",[303,3599,3601],{"className":1942,"code":3600,"language":1944,"meta":308,"style":308},"\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",[119,3602,3603,3608,3613,3639,3661,3678,3683,3706,3721],{"__ignoreMap":308},[312,3604,3605],{"class":314,"line":315},[312,3606,3607],{"class":318},"\u002F\u002F创建三个变量a,b,c\n",[312,3609,3610],{"class":314,"line":171},[312,3611,3612],{"class":318},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[312,3614,3615,3617,3619,3621,3623,3626,3628,3630,3633,3635,3637],{"class":314,"line":274},[312,3616,1956],{"class":1436},[312,3618,3206],{"class":324},[312,3620,336],{"class":1436},[312,3622,1546],{"class":488},[312,3624,3625],{"class":324},",b",[312,3627,336],{"class":1436},[312,3629,2391],{"class":488},[312,3631,3632],{"class":324},",c",[312,3634,336],{"class":1436},[312,3636,858],{"class":488},[312,3638,498],{"class":324},[312,3640,3641,3643,3645,3648,3650,3652,3654,3656,3658],{"class":314,"line":298},[312,3642,2233],{"class":324},[312,3644,336],{"class":1436},[312,3646,3647],{"class":324},"(a",[312,3649,2902],{"class":1436},[312,3651,2208],{"class":324},[312,3653,2928],{"class":1436},[312,3655,164],{"class":324},[312,3657,2803],{"class":1436},[312,3659,3660],{"class":324},"b)\n",[312,3662,3663,3665,3667,3670,3672,3674,3676],{"class":314,"line":974},[312,3664,3177],{"class":324},[312,3666,2985],{"class":1436},[312,3668,3669],{"class":339},"\"c=\"",[312,3671,2985],{"class":1436},[312,3673,2233],{"class":324},[312,3675,2985],{"class":1436},[312,3677,3007],{"class":324},[312,3679,3680],{"class":314,"line":980},[312,3681,3682],{"class":318},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[312,3684,3685,3687,3689,3691,3693,3695,3697,3700,3702,3704],{"class":314,"line":997},[312,3686,3647],{"class":324},[312,3688,2902],{"class":1436},[312,3690,2208],{"class":324},[312,3692,2928],{"class":1436},[312,3694,164],{"class":324},[312,3696,2803],{"class":1436},[312,3698,3699],{"class":324},"b)",[312,3701,336],{"class":1436},[312,3703,2256],{"class":488},[312,3705,498],{"class":324},[312,3707,3708,3710,3712,3714,3716,3718],{"class":314,"line":1003},[312,3709,3177],{"class":324},[312,3711,2985],{"class":1436},[312,3713,164],{"class":324},[312,3715,2985],{"class":1436},[312,3717,3050],{"class":324},[312,3719,3720],{"class":318}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[312,3722,3723,3725,3727,3729,3731,3733],{"class":314,"line":1020},[312,3724,3177],{"class":324},[312,3726,2985],{"class":1436},[312,3728,2208],{"class":324},[312,3730,2985],{"class":1436},[312,3732,3050],{"class":324},[312,3734,3735],{"class":318}," \u002F\u002F10   a>b,b还是原值\n",[140,3737,3738],{"start":274},[143,3739,3740],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[303,3742,3744],{"className":1942,"code":3743,"language":1944,"meta":308,"style":308},"\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",[119,3745,3746,3751,3759,3772,3782,3786,3800,3813,3823,3831,3836,3861,3882,3904,3925,3947,3968,3988,3993],{"__ignoreMap":308},[312,3747,3748],{"class":314,"line":315},[312,3749,3750],{"class":318},"\u002F\u002F案例-电影打分\n",[312,3752,3753,3756],{"class":314,"line":171},[312,3754,3755],{"class":1436},"#include",[312,3757,3758],{"class":339},"\u003Ciostream>\n",[312,3760,3761,3764,3767,3770],{"class":314,"line":274},[312,3762,3763],{"class":1436},"using",[312,3765,3766],{"class":1436}," namespace",[312,3768,3769],{"class":332}," std",[312,3771,498],{"class":324},[312,3773,3774,3776,3779],{"class":314,"line":298},[312,3775,1956],{"class":1436},[312,3777,3778],{"class":332}," main",[312,3780,3781],{"class":324},"()\n",[312,3783,3784],{"class":314,"line":974},[312,3785,3353],{"class":324},[312,3787,3788,3791,3794,3796,3798],{"class":314,"line":980},[312,3789,3790],{"class":1436},"    int",[312,3792,3793],{"class":324}," score",[312,3795,336],{"class":1436},[312,3797,858],{"class":488},[312,3799,498],{"class":324},[312,3801,3802,3804,3806,3809,3811],{"class":314,"line":997},[312,3803,3358],{"class":324},[312,3805,2985],{"class":1436},[312,3807,3808],{"class":339},"\"电影打分：\"",[312,3810,2985],{"class":1436},[312,3812,3007],{"class":324},[312,3814,3815,3818,3820],{"class":314,"line":1003},[312,3816,3817],{"class":324},"    cin",[312,3819,3237],{"class":1436},[312,3821,3822],{"class":324},"score;\n",[312,3824,3825,3828],{"class":314,"line":1020},[312,3826,3827],{"class":1436},"    switch",[312,3829,3830],{"class":324},"(score)\n",[312,3832,3833],{"class":314,"line":1026},[312,3834,3835],{"class":324},"    {\n",[312,3837,3838,3841,3844,3847,3849,3852,3854,3856,3859],{"class":314,"line":3418},[312,3839,3840],{"class":1436},"        case",[312,3842,3843],{"class":488}," 10",[312,3845,3846],{"class":324},":cout",[312,3848,2985],{"class":1436},[312,3850,3851],{"class":339},"\"经典\"",[312,3853,2985],{"class":1436},[312,3855,3050],{"class":324},[312,3857,3858],{"class":1436},"break",[312,3860,498],{"class":324},[312,3862,3863,3865,3868,3870,3872,3874,3876,3878,3880],{"class":314,"line":3423},[312,3864,3840],{"class":1436},[312,3866,3867],{"class":488}," 9",[312,3869,3846],{"class":324},[312,3871,2985],{"class":1436},[312,3873,3851],{"class":339},[312,3875,2985],{"class":1436},[312,3877,3050],{"class":324},[312,3879,3858],{"class":1436},[312,3881,498],{"class":324},[312,3883,3884,3886,3889,3891,3893,3896,3898,3900,3902],{"class":314,"line":3429},[312,3885,3840],{"class":1436},[312,3887,3888],{"class":488}," 8",[312,3890,3846],{"class":324},[312,3892,2985],{"class":1436},[312,3894,3895],{"class":339},"\"非常好\"",[312,3897,2985],{"class":1436},[312,3899,3050],{"class":324},[312,3901,3858],{"class":1436},[312,3903,498],{"class":324},[312,3905,3906,3908,3911,3913,3915,3917,3919,3921,3923],{"class":314,"line":3434},[312,3907,3840],{"class":1436},[312,3909,3910],{"class":488}," 7",[312,3912,3846],{"class":324},[312,3914,2985],{"class":1436},[312,3916,3895],{"class":339},[312,3918,2985],{"class":1436},[312,3920,3050],{"class":324},[312,3922,3858],{"class":1436},[312,3924,498],{"class":324},[312,3926,3927,3929,3932,3934,3936,3939,3941,3943,3945],{"class":314,"line":3448},[312,3928,3840],{"class":1436},[312,3930,3931],{"class":488}," 6",[312,3933,3846],{"class":324},[312,3935,2985],{"class":1436},[312,3937,3938],{"class":339},"\"一般\"",[312,3940,2985],{"class":1436},[312,3942,3050],{"class":324},[312,3944,3858],{"class":1436},[312,3946,498],{"class":324},[312,3948,3949,3951,3954,3956,3958,3960,3962,3964,3966],{"class":314,"line":3453},[312,3950,3840],{"class":1436},[312,3952,3953],{"class":488}," 5",[312,3955,3846],{"class":324},[312,3957,2985],{"class":1436},[312,3959,3938],{"class":339},[312,3961,2985],{"class":1436},[312,3963,3050],{"class":324},[312,3965,3858],{"class":1436},[312,3967,498],{"class":324},[312,3969,3970,3973,3975,3977,3980,3982,3984,3986],{"class":314,"line":3459},[312,3971,3972],{"class":1436},"        default",[312,3974,3846],{"class":324},[312,3976,2985],{"class":1436},[312,3978,3979],{"class":339},"\"烂片\"",[312,3981,2985],{"class":1436},[312,3983,3050],{"class":324},[312,3985,3858],{"class":1436},[312,3987,498],{"class":324},[312,3989,3990],{"class":314,"line":3480},[312,3991,3992],{"class":324},"    }\n",[312,3994,3995],{"class":314,"line":3485},[312,3996,515],{"class":324},[24,3998,3999],{},"if和switch区别：",[243,4001,4002,4005],{},[143,4003,4004],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[143,4006,4007],{},"switch优点：结构清晰，执行效率高",[69,4009,4011],{"id":4010},"_162循环结构","1.6.2循环结构",[140,4013,4014],{},[143,4015,4016],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[303,4018,4020],{"className":1942,"code":4019,"language":1944,"meta":308,"style":308},"\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",[119,4021,4022,4027,4035,4039,4052,4066,4070,4090,4100,4104,4116],{"__ignoreMap":308},[312,4023,4024],{"class":314,"line":315},[312,4025,4026],{"class":318},"\u002F\u002F打印0-9数字\n",[312,4028,4029,4031,4033],{"class":314,"line":171},[312,4030,1956],{"class":1436},[312,4032,3778],{"class":332},[312,4034,3781],{"class":324},[312,4036,4037],{"class":314,"line":274},[312,4038,3353],{"class":324},[312,4040,4041,4043,4046,4048,4050],{"class":314,"line":298},[312,4042,3790],{"class":1436},[312,4044,4045],{"class":324}," num",[312,4047,336],{"class":1436},[312,4049,858],{"class":488},[312,4051,498],{"class":324},[312,4053,4054,4057,4060,4062,4064],{"class":314,"line":974},[312,4055,4056],{"class":1436},"    while",[312,4058,4059],{"class":324},"(num",[312,4061,325],{"class":1436},[312,4063,2391],{"class":488},[312,4065,1959],{"class":324},[312,4067,4068],{"class":314,"line":980},[312,4069,3835],{"class":324},[312,4071,4072,4075,4078,4080,4082,4084,4087],{"class":314,"line":997},[312,4073,4074],{"class":332},"       std",[312,4076,4077],{"class":324},"::cout",[312,4079,2985],{"class":1436},[312,4081,3471],{"class":324},[312,4083,2985],{"class":1436},[312,4085,4086],{"class":332},"std",[312,4088,4089],{"class":324},"::endl;\n",[312,4091,4092,4095,4098],{"class":314,"line":1003},[312,4093,4094],{"class":324},"        num",[312,4096,4097],{"class":1436},"++",[312,4099,498],{"class":324},[312,4101,4102],{"class":314,"line":1020},[312,4103,3992],{"class":324},[312,4105,4106,4109,4111,4114],{"class":314,"line":1026},[312,4107,4108],{"class":332},"    system",[312,4110,1576],{"class":324},[312,4112,4113],{"class":339},"\"pause\"",[312,4115,1959],{"class":324},[312,4117,4118],{"class":314,"line":3418},[312,4119,515],{"class":324},[24,4121,4122],{},"注意：写好循环条件，避免死循环情况",[303,4124,4126],{"className":1942,"code":4125,"language":1944,"meta":308,"style":308},"\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",[119,4127,4128,4133,4140,4147,4157,4165,4169,4174,4201,4206,4211,4219,4246,4251,4256,4269,4279,4283,4293,4298,4311,4316,4330,4335,4350,4354,4367,4371,4376,4380,4394,4402,4407,4413,4419,4424],{"__ignoreMap":308},[312,4129,4130],{"class":314,"line":315},[312,4131,4132],{"class":318},"\u002F\u002F循环结构-猜数字\n",[312,4134,4135,4137],{"class":314,"line":171},[312,4136,3755],{"class":1436},[312,4138,4139],{"class":339}," \u003Ciostream>\n",[312,4141,4142,4144],{"class":314,"line":274},[312,4143,3755],{"class":1436},[312,4145,4146],{"class":339}," \u003Cctime>\n",[312,4148,4149,4151,4153,4155],{"class":314,"line":298},[312,4150,3763],{"class":1436},[312,4152,3766],{"class":1436},[312,4154,3769],{"class":332},[312,4156,498],{"class":324},[312,4158,4159,4161,4163],{"class":314,"line":974},[312,4160,1956],{"class":1436},[312,4162,3778],{"class":332},[312,4164,3781],{"class":324},[312,4166,4167],{"class":314,"line":980},[312,4168,3353],{"class":324},[312,4170,4171],{"class":314,"line":997},[312,4172,4173],{"class":318},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[312,4175,4176,4179,4182,4185,4188,4190,4193,4195,4198],{"class":314,"line":1003},[312,4177,4178],{"class":332},"    srand",[312,4180,4181],{"class":324},"((",[312,4183,4184],{"class":1436},"unsigned",[312,4186,4187],{"class":1436}," int",[312,4189,2374],{"class":324},[312,4191,4192],{"class":332},"time",[312,4194,1576],{"class":324},[312,4196,4197],{"class":488},"NULL",[312,4199,4200],{"class":324},"));\n",[312,4202,4203],{"class":314,"line":1020},[312,4204,4205],{"emptyLinePlaceholder":1881},"\n",[312,4207,4208],{"class":314,"line":1026},[312,4209,4210],{"class":318},"    \u002F\u002F1.系统生成随机数\n",[312,4212,4213,4216],{"class":314,"line":3418},[312,4214,4215],{"class":318},"    \u002F\u002Frand()%100",[312,4217,4218],{"class":318}," \u002F\u002F生成0-99的随机数\n",[312,4220,4221,4223,4225,4227,4230,4233,4235,4237,4239,4241,4243],{"class":314,"line":3423},[312,4222,3790],{"class":1436},[312,4224,4045],{"class":324},[312,4226,336],{"class":1436},[312,4228,4229],{"class":332},"rand",[312,4231,4232],{"class":324},"()",[312,4234,2273],{"class":1436},[312,4236,2256],{"class":488},[312,4238,2426],{"class":1436},[312,4240,1433],{"class":488},[312,4242,2006],{"class":324},[312,4244,4245],{"class":318}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[312,4247,4248],{"class":314,"line":3429},[312,4249,4250],{"class":318},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[312,4252,4253],{"class":314,"line":3434},[312,4254,4255],{"class":318},"    \u002F\u002F2.玩家猜测\n",[312,4257,4258,4260,4263,4265,4267],{"class":314,"line":3448},[312,4259,3790],{"class":1436},[312,4261,4262],{"class":324}," val",[312,4264,336],{"class":1436},[312,4266,858],{"class":488},[312,4268,498],{"class":324},[312,4270,4271,4273,4275,4277],{"class":314,"line":3453},[312,4272,4056],{"class":1436},[312,4274,3464],{"class":324},[312,4276,1433],{"class":488},[312,4278,1959],{"class":324},[312,4280,4281],{"class":314,"line":3459},[312,4282,3835],{"class":324},[312,4284,4285,4288,4290],{"class":314,"line":3480},[312,4286,4287],{"class":324},"        cin",[312,4289,3237],{"class":1436},[312,4291,4292],{"class":324},"val;\n",[312,4294,4295],{"class":314,"line":3485},[312,4296,4297],{"class":318},"        \u002F\u002F3.判断玩家猜测\n",[312,4299,4300,4303,4306,4308],{"class":314,"line":3499},[312,4301,4302],{"class":1436},"        if",[312,4304,4305],{"class":324},"(val",[312,4307,325],{"class":1436},[312,4309,4310],{"class":324},"num) \n",[312,4312,4313],{"class":314,"line":3504},[312,4314,4315],{"class":324},"        {\n",[312,4317,4318,4321,4323,4326,4328],{"class":314,"line":3533},[312,4319,4320],{"class":324},"            cout",[312,4322,2985],{"class":1436},[312,4324,4325],{"class":339},"\"猜小了！\"",[312,4327,2985],{"class":1436},[312,4329,3007],{"class":324},[312,4331,4332],{"class":314,"line":3538},[312,4333,4334],{"class":324},"        }\n",[312,4336,4337,4340,4342,4345,4347],{"class":314,"line":3555},[312,4338,4339],{"class":1436},"        else",[312,4341,3510],{"class":1436},[312,4343,4344],{"class":324}," (val",[312,4346,2902],{"class":1436},[312,4348,4349],{"class":324},"num)\n",[312,4351,4352],{"class":314,"line":3560},[312,4353,4315],{"class":324},[312,4355,4356,4358,4360,4363,4365],{"class":314,"line":3565},[312,4357,4320],{"class":324},[312,4359,2985],{"class":1436},[312,4361,4362],{"class":339},"\"猜大了！\"",[312,4364,2985],{"class":1436},[312,4366,3007],{"class":324},[312,4368,4369],{"class":314,"line":3570},[312,4370,4334],{"class":324},[312,4372,4373],{"class":314,"line":3584},[312,4374,4375],{"class":1436},"        else\n",[312,4377,4378],{"class":314,"line":3589},[312,4379,4315],{"class":324},[312,4381,4383,4385,4387,4390,4392],{"class":314,"line":4382},30,[312,4384,4320],{"class":324},[312,4386,2985],{"class":1436},[312,4388,4389],{"class":339},"\"猜对了！\"",[312,4391,2985],{"class":1436},[312,4393,3007],{"class":324},[312,4395,4397,4400],{"class":314,"line":4396},31,[312,4398,4399],{"class":1436},"            break",[312,4401,498],{"class":324},[312,4403,4405],{"class":314,"line":4404},32,[312,4406,4334],{"class":324},[312,4408,4410],{"class":314,"line":4409},33,[312,4411,4412],{"class":318},"        \u002F\u002F猜对 退出游戏\n",[312,4414,4416],{"class":314,"line":4415},34,[312,4417,4418],{"class":318},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[312,4420,4422],{"class":314,"line":4421},35,[312,4423,3992],{"class":324},[312,4425,4427],{"class":314,"line":4426},36,[312,4428,515],{"class":324},[140,4430,4431],{"start":171},[143,4432,4433,4434,4437],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[27,4435,4436],{},"do...while会先执行一次循环语句","，在判断循环语句",[303,4439,4441],{"className":1942,"code":4440,"language":1944,"meta":308,"style":308},"\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",[119,4442,4443,4448,4456,4460,4472,4480,4484,4501,4508,4512,4525,4535],{"__ignoreMap":308},[312,4444,4445],{"class":314,"line":315},[312,4446,4447],{"class":318},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[312,4449,4450,4452,4454],{"class":314,"line":171},[312,4451,1956],{"class":1436},[312,4453,3778],{"class":332},[312,4455,3781],{"class":324},[312,4457,4458],{"class":314,"line":274},[312,4459,3353],{"class":324},[312,4461,4462,4464,4466,4468,4470],{"class":314,"line":298},[312,4463,3790],{"class":1436},[312,4465,4045],{"class":324},[312,4467,336],{"class":1436},[312,4469,858],{"class":488},[312,4471,498],{"class":324},[312,4473,4474,4477],{"class":314,"line":974},[312,4475,4476],{"class":1436},"    do",[312,4478,4479],{"class":324}," \n",[312,4481,4482],{"class":314,"line":980},[312,4483,3835],{"class":324},[312,4485,4486,4489,4491,4493,4495,4497,4499],{"class":314,"line":997},[312,4487,4488],{"class":332},"        std",[312,4490,4077],{"class":324},[312,4492,2985],{"class":1436},[312,4494,3471],{"class":324},[312,4496,2985],{"class":1436},[312,4498,4086],{"class":332},[312,4500,4089],{"class":324},[312,4502,4503,4505],{"class":314,"line":1003},[312,4504,4094],{"class":324},[312,4506,4507],{"class":1436},"++\n",[312,4509,4510],{"class":314,"line":1020},[312,4511,3992],{"class":324},[312,4513,4514,4516,4518,4520,4522],{"class":314,"line":1026},[312,4515,4056],{"class":1436},[312,4517,4059],{"class":324},[312,4519,325],{"class":1436},[312,4521,2391],{"class":488},[312,4523,4524],{"class":324},");\n",[312,4526,4527,4529,4531,4533],{"class":314,"line":3418},[312,4528,4108],{"class":332},[312,4530,1576],{"class":324},[312,4532,4113],{"class":339},[312,4534,4524],{"class":324},[312,4536,4537],{"class":314,"line":3423},[312,4538,515],{"class":324},[24,4540,4541],{},"案例-水仙花数",[24,4543,4544],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[24,4546,4547],{},"例如：1^3+5^3+3^3=153",[24,4549,4550],{},"请用do...while语句，求出所有3位数的水仙花数",[303,4552,4554],{"className":1942,"code":4553,"language":1944,"meta":308,"style":308},"#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",[119,4555,4556,4562,4572,4580,4584,4589,4601,4607,4611,4616,4632,4648,4664,4679,4698,4713,4761,4765,4777,4781,4789,4793,4807],{"__ignoreMap":308},[312,4557,4558,4560],{"class":314,"line":315},[312,4559,3755],{"class":1436},[312,4561,4139],{"class":339},[312,4563,4564,4566,4568,4570],{"class":314,"line":171},[312,4565,3763],{"class":1436},[312,4567,3766],{"class":1436},[312,4569,3769],{"class":332},[312,4571,498],{"class":324},[312,4573,4574,4576,4578],{"class":314,"line":274},[312,4575,1956],{"class":1436},[312,4577,3778],{"class":332},[312,4579,3781],{"class":324},[312,4581,4582],{"class":314,"line":298},[312,4583,3353],{"class":324},[312,4585,4586],{"class":314,"line":974},[312,4587,4588],{"class":318},"    \u002F\u002F1.先打印所有三位数字\n",[312,4590,4591,4593,4595,4597,4599],{"class":314,"line":980},[312,4592,3790],{"class":1436},[312,4594,4045],{"class":324},[312,4596,336],{"class":1436},[312,4598,2256],{"class":488},[312,4600,498],{"class":324},[312,4602,4603,4605],{"class":314,"line":997},[312,4604,4476],{"class":1436},[312,4606,4479],{"class":324},[312,4608,4609],{"class":314,"line":1003},[312,4610,3835],{"class":324},[312,4612,4613],{"class":314,"line":1020},[312,4614,4615],{"class":318},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[312,4617,4618,4621,4623,4625,4627,4629],{"class":314,"line":1026},[312,4619,4620],{"class":1436},"        int",[312,4622,3206],{"class":324},[312,4624,336],{"class":1436},[312,4626,858],{"class":488},[312,4628,2006],{"class":324},[312,4630,4631],{"class":318}," \u002F\u002F个位\n",[312,4633,4634,4636,4639,4641,4643,4645],{"class":314,"line":3418},[312,4635,4620],{"class":1436},[312,4637,4638],{"class":324}," b",[312,4640,336],{"class":1436},[312,4642,858],{"class":488},[312,4644,2006],{"class":324},[312,4646,4647],{"class":318}," \u002F\u002F十位\n",[312,4649,4650,4652,4655,4657,4659,4661],{"class":314,"line":3423},[312,4651,4620],{"class":1436},[312,4653,4654],{"class":324}," c",[312,4656,336],{"class":1436},[312,4658,858],{"class":488},[312,4660,2006],{"class":324},[312,4662,4663],{"class":318}," \u002F\u002F百位\n",[312,4665,4666,4669,4671,4673,4675,4677],{"class":314,"line":3429},[312,4667,4668],{"class":324},"        a",[312,4670,336],{"class":1436},[312,4672,3471],{"class":324},[312,4674,2273],{"class":1436},[312,4676,2391],{"class":488},[312,4678,498],{"class":324},[312,4680,4681,4684,4686,4688,4690,4692,4694,4696],{"class":314,"line":3434},[312,4682,4683],{"class":324},"        b",[312,4685,336],{"class":1436},[312,4687,3471],{"class":324},[312,4689,2529],{"class":1436},[312,4691,2391],{"class":488},[312,4693,2273],{"class":1436},[312,4695,2391],{"class":488},[312,4697,498],{"class":324},[312,4699,4700,4703,4705,4707,4709,4711],{"class":314,"line":3448},[312,4701,4702],{"class":324},"        c",[312,4704,336],{"class":1436},[312,4706,3471],{"class":324},[312,4708,2529],{"class":1436},[312,4710,2256],{"class":488},[312,4712,498],{"class":324},[312,4714,4715,4717,4719,4721,4723,4725,4727,4729,4731,4733,4735,4737,4739,4741,4743,4745,4747,4749,4752,4755,4758],{"class":314,"line":3453},[312,4716,4302],{"class":1436},[312,4718,3647],{"class":324},[312,4720,2400],{"class":1436},[312,4722,164],{"class":324},[312,4724,2400],{"class":1436},[312,4726,164],{"class":324},[312,4728,2426],{"class":1436},[312,4730,2208],{"class":324},[312,4732,2400],{"class":1436},[312,4734,2208],{"class":324},[312,4736,2400],{"class":1436},[312,4738,2208],{"class":324},[312,4740,2426],{"class":1436},[312,4742,2233],{"class":324},[312,4744,2400],{"class":1436},[312,4746,2233],{"class":324},[312,4748,2400],{"class":1436},[312,4750,4751],{"class":324},"c ",[312,4753,4754],{"class":1436},"==",[312,4756,4757],{"class":324}," num)",[312,4759,4760],{"class":318}," \u002F\u002F如果是水仙花数，才打印\n",[312,4762,4763],{"class":314,"line":3459},[312,4764,4315],{"class":324},[312,4766,4767,4769,4771,4773,4775],{"class":314,"line":3480},[312,4768,4320],{"class":324},[312,4770,2985],{"class":1436},[312,4772,3471],{"class":324},[312,4774,2985],{"class":1436},[312,4776,3007],{"class":324},[312,4778,4779],{"class":314,"line":3485},[312,4780,4334],{"class":324},[312,4782,4783,4785,4787],{"class":314,"line":3499},[312,4784,4094],{"class":324},[312,4786,4097],{"class":1436},[312,4788,498],{"class":324},[312,4790,4791],{"class":314,"line":3504},[312,4792,3992],{"class":324},[312,4794,4795,4797,4800,4802,4805],{"class":314,"line":3533},[312,4796,4056],{"class":1436},[312,4798,4799],{"class":324}," (num ",[312,4801,325],{"class":1436},[312,4803,4804],{"class":488}," 1000",[312,4806,4524],{"class":324},[312,4808,4809],{"class":314,"line":3538},[312,4810,515],{"class":324},[140,4812,4813],{"start":274},[143,4814,4815],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[303,4817,4819],{"className":1942,"code":4818,"language":1944,"meta":308,"style":308},"\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",[119,4820,4821,4826,4855,4859,4871,4875,4880,4891,4898,4902,4916,4920,4927,4931,4943,4952],{"__ignoreMap":308},[312,4822,4823],{"class":314,"line":315},[312,4824,4825],{"class":318},"\u002F\u002F从数字0-9打印\n",[312,4827,4828,4831,4833,4835,4838,4840,4842,4845,4847,4849,4851,4853],{"class":314,"line":171},[312,4829,4830],{"class":1436},"for",[312,4832,1576],{"class":324},[312,4834,1956],{"class":1436},[312,4836,4837],{"class":324}," i",[312,4839,336],{"class":1436},[312,4841,858],{"class":488},[312,4843,4844],{"class":324},";i",[312,4846,325],{"class":1436},[312,4848,2391],{"class":488},[312,4850,4844],{"class":324},[312,4852,4097],{"class":1436},[312,4854,1959],{"class":324},[312,4856,4857],{"class":314,"line":274},[312,4858,3353],{"class":324},[312,4860,4861,4863,4865,4867,4869],{"class":314,"line":298},[312,4862,3358],{"class":324},[312,4864,2985],{"class":1436},[312,4866,2386],{"class":324},[312,4868,2985],{"class":1436},[312,4870,3007],{"class":324},[312,4872,4873],{"class":314,"line":974},[312,4874,515],{"class":324},[312,4876,4877],{"class":314,"line":980},[312,4878,4879],{"class":318},"\u002F\u002F上式可以进行拆分\n",[312,4881,4882,4884,4886,4888],{"class":314,"line":997},[312,4883,1956],{"class":1436},[312,4885,4837],{"class":324},[312,4887,336],{"class":1436},[312,4889,4890],{"class":488},"0\n",[312,4892,4893,4895],{"class":314,"line":1003},[312,4894,4830],{"class":1436},[312,4896,4897],{"class":324},"(;;;)\n",[312,4899,4900],{"class":314,"line":1020},[312,4901,3353],{"class":324},[312,4903,4904,4907,4910,4912,4914],{"class":314,"line":1026},[312,4905,4906],{"class":1436},"    if",[312,4908,4909],{"class":324},"(i",[312,4911,3516],{"class":1436},[312,4913,2391],{"class":488},[312,4915,1959],{"class":324},[312,4917,4918],{"class":314,"line":3418},[312,4919,3835],{"class":324},[312,4921,4922,4925],{"class":314,"line":3423},[312,4923,4924],{"class":1436},"        break",[312,4926,498],{"class":324},[312,4928,4929],{"class":314,"line":3429},[312,4930,3992],{"class":324},[312,4932,4933,4935,4937,4939,4941],{"class":314,"line":3434},[312,4934,3358],{"class":324},[312,4936,2985],{"class":1436},[312,4938,2386],{"class":324},[312,4940,2985],{"class":1436},[312,4942,3007],{"class":324},[312,4944,4945,4948,4950],{"class":314,"line":3448},[312,4946,4947],{"class":324},"    i",[312,4949,4097],{"class":1436},[312,4951,498],{"class":324},[312,4953,4954],{"class":314,"line":3453},[312,4955,515],{"class":324},[24,4957,4958],{},"小练习",[303,4960,4962],{"className":1942,"code":4961,"language":1944,"meta":308,"style":308},"#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",[119,4963,4964,4970,4980,4988,4992,4997,5002,5030,5034,5039,5044,5085,5089,5102,5106,5110,5114,5126,5130,5134],{"__ignoreMap":308},[312,4965,4966,4968],{"class":314,"line":315},[312,4967,3755],{"class":1436},[312,4969,3758],{"class":339},[312,4971,4972,4974,4976,4978],{"class":314,"line":171},[312,4973,3763],{"class":1436},[312,4975,3766],{"class":1436},[312,4977,3769],{"class":332},[312,4979,498],{"class":324},[312,4981,4982,4984,4986],{"class":314,"line":274},[312,4983,1956],{"class":1436},[312,4985,3778],{"class":332},[312,4987,3781],{"class":324},[312,4989,4990],{"class":314,"line":298},[312,4991,3353],{"class":324},[312,4993,4994],{"class":314,"line":974},[312,4995,4996],{"class":318},"    \u002F\u002F敲桌子案例\n",[312,4998,4999],{"class":314,"line":980},[312,5000,5001],{"class":318},"    \u002F\u002F1.先输出1-100的数字\n",[312,5003,5004,5007,5009,5011,5013,5015,5017,5020,5022,5024,5026,5028],{"class":314,"line":997},[312,5005,5006],{"class":1436},"    for",[312,5008,1576],{"class":324},[312,5010,1956],{"class":1436},[312,5012,4837],{"class":324},[312,5014,336],{"class":1436},[312,5016,1433],{"class":488},[312,5018,5019],{"class":324},"; i",[312,5021,3394],{"class":1436},[312,5023,2256],{"class":488},[312,5025,5019],{"class":324},[312,5027,4097],{"class":1436},[312,5029,1959],{"class":324},[312,5031,5032],{"class":314,"line":1003},[312,5033,3835],{"class":324},[312,5035,5036],{"class":314,"line":1020},[312,5037,5038],{"class":318},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[312,5040,5041],{"class":314,"line":1026},[312,5042,5043],{"class":318},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[312,5045,5046,5048,5050,5052,5054,5056,5058,5061,5063,5065,5067,5069,5071,5073,5075,5077,5079,5081,5083],{"class":314,"line":3418},[312,5047,4302],{"class":1436},[312,5049,4909],{"class":324},[312,5051,2273],{"class":1436},[312,5053,2314],{"class":488},[312,5055,4754],{"class":1436},[312,5057,858],{"class":488},[312,5059,5060],{"class":1436}," ||",[312,5062,4837],{"class":324},[312,5064,2273],{"class":1436},[312,5066,2391],{"class":488},[312,5068,4754],{"class":1436},[312,5070,2314],{"class":488},[312,5072,5060],{"class":1436},[312,5074,4837],{"class":324},[312,5076,2529],{"class":1436},[312,5078,2391],{"class":488},[312,5080,4754],{"class":1436},[312,5082,2314],{"class":488},[312,5084,1959],{"class":324},[312,5086,5087],{"class":314,"line":3423},[312,5088,4315],{"class":324},[312,5090,5091,5093,5095,5098,5100],{"class":314,"line":3429},[312,5092,4320],{"class":324},[312,5094,2985],{"class":1436},[312,5096,5097],{"class":339},"\"敲桌子\"",[312,5099,2985],{"class":1436},[312,5101,3007],{"class":324},[312,5103,5104],{"class":314,"line":3434},[312,5105,4334],{"class":324},[312,5107,5108],{"class":314,"line":3448},[312,5109,4375],{"class":1436},[312,5111,5112],{"class":314,"line":3453},[312,5113,4315],{"class":324},[312,5115,5116,5118,5120,5122,5124],{"class":314,"line":3459},[312,5117,4320],{"class":324},[312,5119,2985],{"class":1436},[312,5121,2386],{"class":324},[312,5123,2985],{"class":1436},[312,5125,3007],{"class":324},[312,5127,5128],{"class":314,"line":3480},[312,5129,4334],{"class":324},[312,5131,5132],{"class":314,"line":3485},[312,5133,3992],{"class":324},[312,5135,5136],{"class":314,"line":3499},[312,5137,515],{"class":324},[24,5139,5140],{},"嵌套实现星图",[303,5142,5144],{"className":1942,"code":5143,"language":1944,"meta":308,"style":308},"#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",[119,5145,5146,5152,5162,5170,5174,5200,5204,5233,5237,5248,5252,5261,5265],{"__ignoreMap":308},[312,5147,5148,5150],{"class":314,"line":315},[312,5149,3755],{"class":1436},[312,5151,3758],{"class":339},[312,5153,5154,5156,5158,5160],{"class":314,"line":171},[312,5155,3763],{"class":1436},[312,5157,3766],{"class":1436},[312,5159,3769],{"class":332},[312,5161,498],{"class":324},[312,5163,5164,5166,5168],{"class":314,"line":274},[312,5165,1956],{"class":1436},[312,5167,3778],{"class":332},[312,5169,3781],{"class":324},[312,5171,5172],{"class":314,"line":298},[312,5173,3353],{"class":324},[312,5175,5176,5178,5180,5182,5184,5186,5188,5190,5192,5194,5196,5198],{"class":314,"line":974},[312,5177,5006],{"class":1436},[312,5179,3464],{"class":324},[312,5181,1956],{"class":1436},[312,5183,4837],{"class":324},[312,5185,336],{"class":1436},[312,5187,858],{"class":488},[312,5189,4844],{"class":324},[312,5191,325],{"class":1436},[312,5193,2391],{"class":488},[312,5195,4844],{"class":324},[312,5197,4097],{"class":1436},[312,5199,1959],{"class":324},[312,5201,5202],{"class":314,"line":980},[312,5203,3835],{"class":324},[312,5205,5206,5209,5211,5213,5216,5218,5220,5223,5225,5227,5229,5231],{"class":314,"line":997},[312,5207,5208],{"class":1436},"        for",[312,5210,3464],{"class":324},[312,5212,1956],{"class":1436},[312,5214,5215],{"class":324}," j",[312,5217,336],{"class":1436},[312,5219,858],{"class":488},[312,5221,5222],{"class":324},";j",[312,5224,325],{"class":1436},[312,5226,2391],{"class":488},[312,5228,5222],{"class":324},[312,5230,4097],{"class":1436},[312,5232,1959],{"class":324},[312,5234,5235],{"class":314,"line":1003},[312,5236,4315],{"class":324},[312,5238,5239,5241,5243,5246],{"class":314,"line":1020},[312,5240,4320],{"class":324},[312,5242,2985],{"class":1436},[312,5244,5245],{"class":339},"\"*\"",[312,5247,498],{"class":324},[312,5249,5250],{"class":314,"line":1026},[312,5251,4334],{"class":324},[312,5253,5254,5257,5259],{"class":314,"line":3418},[312,5255,5256],{"class":324},"        cout",[312,5258,2985],{"class":1436},[312,5260,3007],{"class":324},[312,5262,5263],{"class":314,"line":3423},[312,5264,3992],{"class":324},[312,5266,5267],{"class":314,"line":3429},[312,5268,515],{"class":324},[24,5270,5271],{},"乘法口诀表",[303,5273,5275],{"className":1942,"code":5274,"language":1944,"meta":308,"style":308},"#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",[119,5276,5277,5283,5293,5301,5305,5331,5335,5360,5364,5404,5408,5416,5420],{"__ignoreMap":308},[312,5278,5279,5281],{"class":314,"line":315},[312,5280,3755],{"class":1436},[312,5282,4139],{"class":339},[312,5284,5285,5287,5289,5291],{"class":314,"line":171},[312,5286,3763],{"class":1436},[312,5288,3766],{"class":1436},[312,5290,3769],{"class":332},[312,5292,498],{"class":324},[312,5294,5295,5297,5299],{"class":314,"line":274},[312,5296,1956],{"class":1436},[312,5298,3778],{"class":332},[312,5300,3781],{"class":324},[312,5302,5303],{"class":314,"line":298},[312,5304,3353],{"class":324},[312,5306,5307,5309,5311,5313,5315,5317,5319,5321,5323,5325,5327,5329],{"class":314,"line":974},[312,5308,5006],{"class":1436},[312,5310,1576],{"class":324},[312,5312,1956],{"class":1436},[312,5314,4837],{"class":324},[312,5316,336],{"class":1436},[312,5318,1433],{"class":488},[312,5320,4844],{"class":324},[312,5322,325],{"class":1436},[312,5324,2391],{"class":488},[312,5326,4844],{"class":324},[312,5328,4097],{"class":1436},[312,5330,1959],{"class":324},[312,5332,5333],{"class":314,"line":980},[312,5334,3835],{"class":324},[312,5336,5337,5339,5341,5343,5345,5347,5349,5351,5353,5356,5358],{"class":314,"line":997},[312,5338,5208],{"class":1436},[312,5340,1576],{"class":324},[312,5342,1956],{"class":1436},[312,5344,5215],{"class":324},[312,5346,336],{"class":1436},[312,5348,1433],{"class":488},[312,5350,5222],{"class":324},[312,5352,3394],{"class":1436},[312,5354,5355],{"class":324},"i;j",[312,5357,4097],{"class":1436},[312,5359,1959],{"class":324},[312,5361,5362],{"class":314,"line":1003},[312,5363,4315],{"class":324},[312,5365,5366,5368,5370,5372,5374,5376,5378,5380,5382,5385,5387,5389,5391,5393,5395,5398,5400,5402],{"class":314,"line":1020},[312,5367,4320],{"class":324},[312,5369,2985],{"class":1436},[312,5371,2412],{"class":324},[312,5373,2985],{"class":1436},[312,5375,5245],{"class":339},[312,5377,2985],{"class":1436},[312,5379,2386],{"class":324},[312,5381,2985],{"class":1436},[312,5383,5384],{"class":339},"\"=\"",[312,5386,2985],{"class":1436},[312,5388,2386],{"class":324},[312,5390,2400],{"class":1436},[312,5392,2412],{"class":324},[312,5394,2985],{"class":1436},[312,5396,5397],{"class":339},"'",[312,5399,3042],{"class":488},[312,5401,5397],{"class":339},[312,5403,498],{"class":324},[312,5405,5406],{"class":314,"line":1026},[312,5407,4334],{"class":324},[312,5409,5410,5412,5414],{"class":314,"line":3418},[312,5411,5256],{"class":324},[312,5413,2985],{"class":1436},[312,5415,3007],{"class":324},[312,5417,5418],{"class":314,"line":3423},[312,5419,3992],{"class":324},[312,5421,5422],{"class":314,"line":3429},[312,5423,515],{"class":324},[69,5425,5427],{"id":5426},"_163跳出语句","1.6.3跳出语句",[140,5429,5430],{},[143,5431,5432],{},"break语句\n作用：用于跳出选择结构或者循环结构",[24,5434,5435],{},"break使用时机：",[243,5437,5438,5441,5444],{},[143,5439,5440],{},"出现在switch条件语句中，作用是终止case并跳出switch",[143,5442,5443],{},"出现在循环结构中，作用是跳出当前的循环结构",[143,5445,5446],{},"出现在嵌套循环中，跳出最近的内层循环语句",[140,5448,5449,5452],{"start":171},[143,5450,5451],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[143,5453,5454],{},"goto语句\n语法：goto 标记;",[24,5456,5457],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[303,5459,5461],{"className":1942,"code":5460,"language":1944,"meta":308,"style":308},"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",[119,5462,5463,5471,5475,5488,5498,5511,5524,5537,5545,5561],{"__ignoreMap":308},[312,5464,5465,5467,5469],{"class":314,"line":315},[312,5466,1956],{"class":1436},[312,5468,3778],{"class":332},[312,5470,3781],{"class":324},[312,5472,5473],{"class":314,"line":171},[312,5474,3353],{"class":324},[312,5476,5477,5479,5481,5484,5486],{"class":314,"line":274},[312,5478,3358],{"class":324},[312,5480,2985],{"class":1436},[312,5482,5483],{"class":339},"\"1\"",[312,5485,2985],{"class":1436},[312,5487,3007],{"class":324},[312,5489,5490,5493,5496],{"class":314,"line":298},[312,5491,5492],{"class":1436},"    goto",[312,5494,5495],{"class":332}," FLAG",[312,5497,498],{"class":324},[312,5499,5500,5502,5504,5507,5509],{"class":314,"line":974},[312,5501,3358],{"class":324},[312,5503,2985],{"class":1436},[312,5505,5506],{"class":339},"\"2\"",[312,5508,2985],{"class":1436},[312,5510,3007],{"class":324},[312,5512,5513,5515,5517,5520,5522],{"class":314,"line":980},[312,5514,3358],{"class":324},[312,5516,2985],{"class":1436},[312,5518,5519],{"class":339},"\"3\"",[312,5521,2985],{"class":1436},[312,5523,3007],{"class":324},[312,5525,5526,5528,5530,5533,5535],{"class":314,"line":997},[312,5527,3358],{"class":324},[312,5529,2985],{"class":1436},[312,5531,5532],{"class":339},"\"4\"",[312,5534,2985],{"class":1436},[312,5536,3007],{"class":324},[312,5538,5539,5542],{"class":314,"line":1003},[312,5540,5541],{"class":332},"    FLAG",[312,5543,5544],{"class":324},":\n",[312,5546,5547,5549,5551,5554,5556,5558],{"class":314,"line":1020},[312,5548,3358],{"class":324},[312,5550,2985],{"class":1436},[312,5552,5553],{"class":339},"\"5\"",[312,5555,2985],{"class":1436},[312,5557,3050],{"class":324},[312,5559,5560],{"class":318},"\u002F\u002F跳过了2,3,4,直接到5\n",[312,5562,5563],{"class":314,"line":1026},[312,5564,515],{"class":324},[14,5566,5568],{"id":5567},"_17数组","1.7数组",[69,5570,5572],{"id":5571},"_171一维数组","1.7.1一维数组",[140,5574,5575],{},[143,5576,5577],{},"一维数组定义方式",[2086,5579,5580,5590],{},[2089,5581,5582],{},[2092,5583,5584,5587],{},[2095,5585,5586],{},"方式",[2095,5588,5589],{},"注意事项",[2132,5591,5592,5606,5616],{},[2092,5593,5594,5600],{},[2137,5595,5596,5597,2006],{},"数据类型 数组名",[312,5598,5599],{},"数组长度",[2137,5601,5602,5603,5605],{},"这种方式是先定义再arr",[312,5604,2386],{},"赋值",[2092,5607,5608,5613],{},[2137,5609,5596,5610,5612],{},[312,5611,5599],{},"={值1,值2....};",[2137,5614,5615],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[2092,5617,5618,5622],{},[2137,5619,5596,5620,5612],{},[312,5621],{},[2137,5623,5624,5625,5627],{},"int arr",[312,5626],{},";这是不正确的，按照这样的方式定义必须有初始长度",[140,5629,5630],{"start":171},[143,5631,5632],{},"一维数组数组名\n用途：",[243,5634,5635],{},[143,5636,5637],{},"1.可以统计整个数组在内存中的长度：",[303,5639,5641],{"className":1942,"code":5640,"language":1944,"meta":308,"style":308},"sizeof(arr);\nsizeof(arr[0]);\n",[119,5642,5643,5650],{"__ignoreMap":308},[312,5644,5645,5647],{"class":314,"line":315},[312,5646,1951],{"class":1436},[312,5648,5649],{"class":324},"(arr);\n",[312,5651,5652,5654,5657,5659],{"class":314,"line":171},[312,5653,1951],{"class":1436},[312,5655,5656],{"class":324},"(arr[",[312,5658,858],{"class":488},[312,5660,5661],{"class":324},"]);\n",[243,5663,5664],{},[143,5665,5666],{},"2.可以获取数组在内存中的首地址:",[303,5668,5670],{"className":1942,"code":5669,"language":1944,"meta":308,"style":308},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[119,5671,5672,5677,5690,5695],{"__ignoreMap":308},[312,5673,5674],{"class":314,"line":315},[312,5675,5676],{"class":318},"\u002F\u002F查看16进制的首地址\n",[312,5678,5679,5681,5683,5686,5688],{"class":314,"line":171},[312,5680,3177],{"class":324},[312,5682,2985],{"class":1436},[312,5684,5685],{"class":324},"arr",[312,5687,2985],{"class":1436},[312,5689,3007],{"class":324},[312,5691,5692],{"class":314,"line":274},[312,5693,5694],{"class":318},"\u002F\u002F看10进制数\n",[312,5696,5697,5699,5701,5703,5705,5707,5709,5712,5714,5716,5718],{"class":314,"line":298},[312,5698,3177],{"class":324},[312,5700,2985],{"class":1436},[312,5702,1576],{"class":324},[312,5704,1956],{"class":1436},[312,5706,2374],{"class":324},[312,5708,2298],{"class":1436},[312,5710,5711],{"class":324},"arr[",[312,5713,858],{"class":488},[312,5715,2882],{"class":324},[312,5717,2985],{"class":1436},[312,5719,3007],{"class":324},[24,5721,5722],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[243,5724,5725],{},[143,5726,5727],{},"1️⃣五只小猪称体重",[303,5729,5731],{"className":1942,"code":5730,"language":1944,"meta":308,"style":308},"#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",[119,5732,5733,5739,5749,5757,5761,5801,5814,5840,5844,5856,5860,5870,5874,5878,5891,5901],{"__ignoreMap":308},[312,5734,5735,5737],{"class":314,"line":315},[312,5736,3755],{"class":1436},[312,5738,3758],{"class":339},[312,5740,5741,5743,5745,5747],{"class":314,"line":171},[312,5742,3763],{"class":1436},[312,5744,3766],{"class":1436},[312,5746,3769],{"class":332},[312,5748,498],{"class":324},[312,5750,5751,5753,5755],{"class":314,"line":274},[312,5752,1956],{"class":1436},[312,5754,3778],{"class":332},[312,5756,3781],{"class":324},[312,5758,5759],{"class":314,"line":298},[312,5760,3353],{"class":324},[312,5762,5763,5765,5768,5770,5772,5774,5776,5779,5781,5784,5786,5788,5790,5793,5795,5798],{"class":314,"line":974},[312,5764,3790],{"class":1436},[312,5766,5767],{"class":324}," arr[",[312,5769,2264],{"class":488},[312,5771,2882],{"class":324},[312,5773,336],{"class":1436},[312,5775,2840],{"class":324},[312,5777,5778],{"class":488},"300",[312,5780,2323],{"class":324},[312,5782,5783],{"class":488},"350",[312,5785,2323],{"class":324},[312,5787,3528],{"class":488},[312,5789,2323],{"class":324},[312,5791,5792],{"class":488},"400",[312,5794,2323],{"class":324},[312,5796,5797],{"class":488},"250",[312,5799,5800],{"class":324},"};\n",[312,5802,5803,5805,5808,5810,5812],{"class":314,"line":980},[312,5804,3790],{"class":1436},[312,5806,5807],{"class":324}," tmp",[312,5809,336],{"class":1436},[312,5811,858],{"class":488},[312,5813,498],{"class":324},[312,5815,5816,5818,5820,5822,5824,5826,5828,5830,5832,5834,5836,5838],{"class":314,"line":997},[312,5817,5006],{"class":1436},[312,5819,3464],{"class":324},[312,5821,1956],{"class":1436},[312,5823,4837],{"class":324},[312,5825,336],{"class":1436},[312,5827,858],{"class":488},[312,5829,4844],{"class":324},[312,5831,325],{"class":1436},[312,5833,2264],{"class":488},[312,5835,4844],{"class":324},[312,5837,4097],{"class":1436},[312,5839,1959],{"class":324},[312,5841,5842],{"class":314,"line":1003},[312,5843,3835],{"class":324},[312,5845,5846,5848,5851,5853],{"class":314,"line":1020},[312,5847,4302],{"class":1436},[312,5849,5850],{"class":324},"(tmp",[312,5852,325],{"class":1436},[312,5854,5855],{"class":324},"arr[i])\n",[312,5857,5858],{"class":314,"line":1026},[312,5859,4315],{"class":324},[312,5861,5862,5865,5867],{"class":314,"line":3418},[312,5863,5864],{"class":324},"            tmp",[312,5866,336],{"class":1436},[312,5868,5869],{"class":324},"arr[i];\n",[312,5871,5872],{"class":314,"line":3423},[312,5873,4334],{"class":324},[312,5875,5876],{"class":314,"line":3429},[312,5877,3992],{"class":324},[312,5879,5880,5882,5884,5887,5889],{"class":314,"line":3434},[312,5881,3358],{"class":324},[312,5883,2985],{"class":1436},[312,5885,5886],{"class":324},"tmp",[312,5888,2985],{"class":1436},[312,5890,3007],{"class":324},[312,5892,5893,5896,5899],{"class":314,"line":3448},[312,5894,5895],{"class":1436},"    return",[312,5897,5898],{"class":488}," 0",[312,5900,498],{"class":324},[312,5902,5903],{"class":314,"line":3453},[312,5904,515],{"class":324},[243,5906,5907],{},[143,5908,5909],{},"2️⃣数组元素逆置",[303,5911,5913],{"className":1942,"code":5912,"language":1944,"meta":308,"style":308},"\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",[119,5914,5915,5920,5926,5936,5944,5948,5983,5999,6031,6044,6049,6054,6066,6076,6086,6091,6100,6110,6115,6120,6147,6151,6167,6171,6182,6191],{"__ignoreMap":308},[312,5916,5917],{"class":314,"line":315},[312,5918,5919],{"class":318},"\u002F\u002F元素逆置\n",[312,5921,5922,5924],{"class":314,"line":171},[312,5923,3755],{"class":1436},[312,5925,3758],{"class":339},[312,5927,5928,5930,5932,5934],{"class":314,"line":274},[312,5929,3763],{"class":1436},[312,5931,3766],{"class":1436},[312,5933,3769],{"class":332},[312,5935,498],{"class":324},[312,5937,5938,5940,5942],{"class":314,"line":298},[312,5939,1956],{"class":1436},[312,5941,3778],{"class":332},[312,5943,3781],{"class":324},[312,5945,5946],{"class":314,"line":974},[312,5947,3353],{"class":324},[312,5949,5950,5953,5955,5957,5959,5961,5963,5965,5967,5969,5971,5973,5975,5977,5979,5981],{"class":314,"line":980},[312,5951,5952],{"class":1436},"   int",[312,5954,5767],{"class":324},[312,5956,2264],{"class":488},[312,5958,2882],{"class":324},[312,5960,336],{"class":1436},[312,5962,2840],{"class":324},[312,5964,1433],{"class":488},[312,5966,2323],{"class":324},[312,5968,2027],{"class":488},[312,5970,2323],{"class":324},[312,5972,2021],{"class":488},[312,5974,2323],{"class":324},[312,5976,2238],{"class":488},[312,5978,2323],{"class":324},[312,5980,2264],{"class":488},[312,5982,5800],{"class":324},[312,5984,5985,5987,5990,5992,5994,5996],{"class":314,"line":997},[312,5986,5952],{"class":1436},[312,5988,5989],{"class":324}," start",[312,5991,336],{"class":1436},[312,5993,858],{"class":488},[312,5995,2006],{"class":324},[312,5997,5998],{"class":318},"\u002F\u002F起始下标\n",[312,6000,6001,6003,6006,6009,6012,6015,6017,6019,6022,6024,6026,6028],{"class":314,"line":1003},[312,6002,5952],{"class":1436},[312,6004,6005],{"class":324}," end",[312,6007,6008],{"class":1436},"=sizeof",[312,6010,6011],{"class":324},"(arr)",[312,6013,6014],{"class":1436},"\u002Fsizeof",[312,6016,5656],{"class":324},[312,6018,858],{"class":488},[312,6020,6021],{"class":324},"])",[312,6023,2477],{"class":1436},[312,6025,1433],{"class":488},[312,6027,2006],{"class":324},[312,6029,6030],{"class":318},"\u002F\u002F结束下标\n",[312,6032,6033,6036,6039,6041],{"class":314,"line":1020},[312,6034,6035],{"class":1436},"   while",[312,6037,6038],{"class":324}," (start",[312,6040,325],{"class":1436},[312,6042,6043],{"class":324},"end)\n",[312,6045,6046],{"class":314,"line":1026},[312,6047,6048],{"class":324},"   {\n",[312,6050,6051],{"class":314,"line":3418},[312,6052,6053],{"class":318},"    \u002F\u002F实现元素互换代码\n",[312,6055,6056,6058,6061,6063],{"class":314,"line":3423},[312,6057,3790],{"class":1436},[312,6059,6060],{"class":324}," temp",[312,6062,336],{"class":1436},[312,6064,6065],{"class":324},"arr[start];\n",[312,6067,6068,6071,6073],{"class":314,"line":3429},[312,6069,6070],{"class":324},"    arr[start]",[312,6072,336],{"class":1436},[312,6074,6075],{"class":324},"arr[end];\n",[312,6077,6078,6081,6083],{"class":314,"line":3434},[312,6079,6080],{"class":324},"    arr[end]",[312,6082,336],{"class":1436},[312,6084,6085],{"class":324},"temp;\n",[312,6087,6088],{"class":314,"line":3448},[312,6089,6090],{"class":318},"    \u002F\u002F下标更新\n",[312,6092,6093,6096,6098],{"class":314,"line":3453},[312,6094,6095],{"class":324},"    start",[312,6097,4097],{"class":1436},[312,6099,498],{"class":324},[312,6101,6102,6105,6108],{"class":314,"line":3459},[312,6103,6104],{"class":324},"    end",[312,6106,6107],{"class":1436},"--",[312,6109,498],{"class":324},[312,6111,6112],{"class":314,"line":3480},[312,6113,6114],{"class":324},"   }\n",[312,6116,6117],{"class":314,"line":3485},[312,6118,6119],{"class":318},"   \u002F\u002F输出逆置后的数组\n",[312,6121,6122,6125,6127,6129,6131,6133,6135,6137,6139,6141,6143,6145],{"class":314,"line":3499},[312,6123,6124],{"class":1436},"   for",[312,6126,3464],{"class":324},[312,6128,1956],{"class":1436},[312,6130,4837],{"class":324},[312,6132,336],{"class":1436},[312,6134,858],{"class":488},[312,6136,4844],{"class":324},[312,6138,325],{"class":1436},[312,6140,2264],{"class":488},[312,6142,4844],{"class":324},[312,6144,4097],{"class":1436},[312,6146,1959],{"class":324},[312,6148,6149],{"class":314,"line":3504},[312,6150,6048],{"class":324},[312,6152,6153,6155,6157,6160,6162,6165],{"class":314,"line":3533},[312,6154,3358],{"class":324},[312,6156,2985],{"class":1436},[312,6158,6159],{"class":324},"arr[i]",[312,6161,2985],{"class":1436},[312,6163,6164],{"class":339},"\" \"",[312,6166,498],{"class":324},[312,6168,6169],{"class":314,"line":3538},[312,6170,6114],{"class":324},[312,6172,6173,6176,6178,6180],{"class":314,"line":3555},[312,6174,6175],{"class":332},"   system",[312,6177,1576],{"class":324},[312,6179,4113],{"class":339},[312,6181,4524],{"class":324},[312,6183,6184,6187,6189],{"class":314,"line":3560},[312,6185,6186],{"class":1436},"   return",[312,6188,5898],{"class":488},[312,6190,498],{"class":324},[312,6192,6193],{"class":314,"line":3565},[312,6194,515],{"class":324},[243,6196,6197],{},[143,6198,6199],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[303,6201,6203],{"className":1942,"code":6202,"language":1944,"meta":308,"style":308},"\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",[119,6204,6205,6210,6216,6226,6234,6238,6290,6303,6329,6333,6347,6351,6356,6361,6391,6395,6400,6434,6438,6443,6463,6468,6480,6496,6511,6516,6520,6524,6537,6563,6567,6581,6585,6593],{"__ignoreMap":308},[312,6206,6207],{"class":314,"line":315},[312,6208,6209],{"class":318},"\u002F\u002F冒泡排序,升序\n",[312,6211,6212,6214],{"class":314,"line":171},[312,6213,3755],{"class":1436},[312,6215,3758],{"class":339},[312,6217,6218,6220,6222,6224],{"class":314,"line":274},[312,6219,3763],{"class":1436},[312,6221,3766],{"class":1436},[312,6223,3769],{"class":332},[312,6225,498],{"class":324},[312,6227,6228,6230,6232],{"class":314,"line":298},[312,6229,1956],{"class":1436},[312,6231,3778],{"class":332},[312,6233,3781],{"class":324},[312,6235,6236],{"class":314,"line":974},[312,6237,3353],{"class":324},[312,6239,6240,6242,6244,6246,6249,6251,6254,6256,6258,6260,6262,6264,6266,6268,6270,6272,6274,6276,6278,6280,6282,6284,6286,6288],{"class":314,"line":980},[312,6241,3790],{"class":1436},[312,6243,5767],{"class":324},[312,6245,2365],{"class":488},[312,6247,6248],{"class":324},"] ",[312,6250,336],{"class":1436},[312,6252,6253],{"class":324}," {",[312,6255,2238],{"class":488},[312,6257,2323],{"class":324},[312,6259,2027],{"class":488},[312,6261,2323],{"class":324},[312,6263,2340],{"class":488},[312,6265,2323],{"class":324},[312,6267,858],{"class":488},[312,6269,2323],{"class":324},[312,6271,2264],{"class":488},[312,6273,2323],{"class":324},[312,6275,2314],{"class":488},[312,6277,2323],{"class":324},[312,6279,1433],{"class":488},[312,6281,2323],{"class":324},[312,6283,2021],{"class":488},[312,6285,2323],{"class":324},[312,6287,2365],{"class":488},[312,6289,5800],{"class":324},[312,6291,6292,6294,6296,6299,6301],{"class":314,"line":997},[312,6293,3358],{"class":324},[312,6295,2985],{"class":1436},[312,6297,6298],{"class":339},"\"排序前：\"",[312,6300,2985],{"class":1436},[312,6302,3007],{"class":324},[312,6304,6305,6307,6309,6311,6313,6315,6317,6319,6321,6323,6325,6327],{"class":314,"line":1003},[312,6306,5006],{"class":1436},[312,6308,3464],{"class":324},[312,6310,1956],{"class":1436},[312,6312,4837],{"class":324},[312,6314,336],{"class":1436},[312,6316,858],{"class":488},[312,6318,4844],{"class":324},[312,6320,325],{"class":1436},[312,6322,2365],{"class":488},[312,6324,4844],{"class":324},[312,6326,4097],{"class":1436},[312,6328,1959],{"class":324},[312,6330,6331],{"class":314,"line":1020},[312,6332,3835],{"class":324},[312,6334,6335,6337,6339,6341,6343,6345],{"class":314,"line":1026},[312,6336,5256],{"class":324},[312,6338,2985],{"class":1436},[312,6340,6159],{"class":324},[312,6342,2985],{"class":1436},[312,6344,6164],{"class":339},[312,6346,498],{"class":324},[312,6348,6349],{"class":314,"line":3418},[312,6350,3992],{"class":324},[312,6352,6353],{"class":314,"line":3423},[312,6354,6355],{"class":318},"    \u002F\u002F开始冒泡排序\n",[312,6357,6358],{"class":314,"line":3429},[312,6359,6360],{"class":318},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[312,6362,6363,6365,6367,6369,6371,6373,6375,6377,6379,6381,6383,6385,6387,6389],{"class":314,"line":3434},[312,6364,5006],{"class":1436},[312,6366,3464],{"class":324},[312,6368,1956],{"class":1436},[312,6370,4837],{"class":324},[312,6372,336],{"class":1436},[312,6374,858],{"class":488},[312,6376,4844],{"class":324},[312,6378,325],{"class":1436},[312,6380,2365],{"class":488},[312,6382,2477],{"class":1436},[312,6384,1433],{"class":488},[312,6386,4844],{"class":324},[312,6388,4097],{"class":1436},[312,6390,1959],{"class":324},[312,6392,6393],{"class":314,"line":3448},[312,6394,3835],{"class":324},[312,6396,6397],{"class":314,"line":3453},[312,6398,6399],{"class":318},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[312,6401,6402,6404,6406,6408,6410,6412,6414,6416,6418,6420,6422,6424,6426,6428,6430,6432],{"class":314,"line":3459},[312,6403,5208],{"class":1436},[312,6405,3464],{"class":324},[312,6407,1956],{"class":1436},[312,6409,5215],{"class":324},[312,6411,336],{"class":1436},[312,6413,858],{"class":488},[312,6415,5222],{"class":324},[312,6417,325],{"class":1436},[312,6419,2365],{"class":488},[312,6421,2477],{"class":1436},[312,6423,2386],{"class":324},[312,6425,2477],{"class":1436},[312,6427,1433],{"class":488},[312,6429,5222],{"class":324},[312,6431,4097],{"class":1436},[312,6433,1959],{"class":324},[312,6435,6436],{"class":314,"line":3480},[312,6437,4315],{"class":324},[312,6439,6440],{"class":314,"line":3485},[312,6441,6442],{"class":318},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[312,6444,6445,6448,6451,6453,6456,6458,6460],{"class":314,"line":3499},[312,6446,6447],{"class":1436},"            if",[312,6449,6450],{"class":324},"(arr[j]",[312,6452,2902],{"class":1436},[312,6454,6455],{"class":324},"arr[j",[312,6457,2426],{"class":1436},[312,6459,1433],{"class":488},[312,6461,6462],{"class":324},"])\n",[312,6464,6465],{"class":314,"line":3504},[312,6466,6467],{"class":324},"            {\n",[312,6469,6470,6473,6475,6477],{"class":314,"line":3533},[312,6471,6472],{"class":1436},"                int",[312,6474,6060],{"class":324},[312,6476,336],{"class":1436},[312,6478,6479],{"class":324},"arr[j];\n",[312,6481,6482,6485,6487,6489,6491,6493],{"class":314,"line":3538},[312,6483,6484],{"class":324},"                arr[j]",[312,6486,336],{"class":1436},[312,6488,6455],{"class":324},[312,6490,2426],{"class":1436},[312,6492,1433],{"class":488},[312,6494,6495],{"class":324},"];\n",[312,6497,6498,6501,6503,6505,6507,6509],{"class":314,"line":3555},[312,6499,6500],{"class":324},"                arr[j",[312,6502,2426],{"class":1436},[312,6504,1433],{"class":488},[312,6506,2882],{"class":324},[312,6508,336],{"class":1436},[312,6510,6085],{"class":324},[312,6512,6513],{"class":314,"line":3560},[312,6514,6515],{"class":324},"            }\n",[312,6517,6518],{"class":314,"line":3565},[312,6519,4334],{"class":324},[312,6521,6522],{"class":314,"line":3570},[312,6523,3992],{"class":324},[312,6525,6526,6528,6530,6533,6535],{"class":314,"line":3584},[312,6527,3358],{"class":324},[312,6529,2985],{"class":1436},[312,6531,6532],{"class":339},"\"排序后：\"",[312,6534,2985],{"class":1436},[312,6536,3007],{"class":324},[312,6538,6539,6541,6543,6545,6547,6549,6551,6553,6555,6557,6559,6561],{"class":314,"line":3589},[312,6540,5006],{"class":1436},[312,6542,3464],{"class":324},[312,6544,1956],{"class":1436},[312,6546,4837],{"class":324},[312,6548,336],{"class":1436},[312,6550,858],{"class":488},[312,6552,4844],{"class":324},[312,6554,325],{"class":1436},[312,6556,2365],{"class":488},[312,6558,4844],{"class":324},[312,6560,4097],{"class":1436},[312,6562,1959],{"class":324},[312,6564,6565],{"class":314,"line":4382},[312,6566,3835],{"class":324},[312,6568,6569,6571,6573,6575,6577,6579],{"class":314,"line":4396},[312,6570,5256],{"class":324},[312,6572,2985],{"class":1436},[312,6574,6159],{"class":324},[312,6576,2985],{"class":1436},[312,6578,6164],{"class":339},[312,6580,498],{"class":324},[312,6582,6583],{"class":314,"line":4404},[312,6584,3992],{"class":324},[312,6586,6587,6589,6591],{"class":314,"line":4409},[312,6588,5895],{"class":1436},[312,6590,5898],{"class":488},[312,6592,498],{"class":324},[312,6594,6595],{"class":314,"line":4415},[312,6596,515],{"class":324},[69,6598,6600],{"id":6599},"_172二维数组","1.7.2二维数组",[140,6602,6603],{},[143,6604,6605],{},"二维数组的四种定义方式",[2086,6607,6608,6617],{},[2089,6609,6610],{},[2092,6611,6612,6615],{},[2095,6613,6614],{},"序号",[2095,6616,5586],{},[2132,6618,6619,6629,6638,6647,6656],{},[2092,6620,6621,6623],{},[2137,6622,1433],{},[2137,6624,6625,6626,2006],{},"数据类型 数组名[行数]",[312,6627,6628],{},"列数",[2092,6630,6631,6633],{},[2137,6632,2027],{},[2137,6634,6625,6635,6637],{},[312,6636,6628],{},"={ {数据1,数据2}，{数据3，数据4}... }",[2092,6639,6640,6642],{},[2137,6641,2021],{},[2137,6643,6625,6644,6646],{},[312,6645,6628],{},"={数据1,数据2,数据3...}",[2092,6648,6649,6651],{},[2137,6650,2238],{},[2137,6652,6653,6654,6646],{},"数据类型 数组名[]",[312,6655,6628],{},[2092,6657,6658,6661],{},[2137,6659,6660],{},"注意：不能只省略列数",[2137,6662],{},[140,6664,6665],{"start":171},[143,6666,6667],{},"二维数组数组名",[243,6669,6670,6673],{},[143,6671,6672],{},"1.查看二维数组所占内存空间",[143,6674,6675],{},"2.获取二维数组首地址",[24,6677,6678],{},"已知二维数组，求二维数组的行数与列数",[303,6680,6682],{"className":1942,"code":6681,"language":1944,"meta":308,"style":308},"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",[119,6683,6684,6692,6696,6714,6718,6736,6752,6757,6782,6815],{"__ignoreMap":308},[312,6685,6686,6688,6690],{"class":314,"line":315},[312,6687,1956],{"class":1436},[312,6689,3778],{"class":332},[312,6691,3781],{"class":324},[312,6693,6694],{"class":314,"line":171},[312,6695,3353],{"class":324},[312,6697,6698,6700,6702,6704,6707,6709,6711],{"class":314,"line":274},[312,6699,3790],{"class":1436},[312,6701,5767],{"class":324},[312,6703,2027],{"class":488},[312,6705,6706],{"class":324},"][",[312,6708,2021],{"class":488},[312,6710,2882],{"class":324},[312,6712,6713],{"class":1436},"=\n",[312,6715,6716],{"class":314,"line":298},[312,6717,3835],{"class":324},[312,6719,6720,6723,6725,6727,6729,6731,6733],{"class":314,"line":974},[312,6721,6722],{"class":324},"        {",[312,6724,1433],{"class":488},[312,6726,2323],{"class":324},[312,6728,2027],{"class":488},[312,6730,2323],{"class":324},[312,6732,2021],{"class":488},[312,6734,6735],{"class":324},"},\n",[312,6737,6738,6740,6742,6744,6746,6748,6750],{"class":314,"line":980},[312,6739,6722],{"class":324},[312,6741,2238],{"class":488},[312,6743,2323],{"class":324},[312,6745,2264],{"class":488},[312,6747,2323],{"class":324},[312,6749,2289],{"class":488},[312,6751,515],{"class":324},[312,6753,6754],{"class":314,"line":997},[312,6755,6756],{"class":324},"    };\n",[312,6758,6759,6761,6763,6766,6768,6770,6772,6774,6776,6778,6780],{"class":314,"line":1003},[312,6760,3358],{"class":324},[312,6762,2985],{"class":1436},[312,6764,6765],{"class":339},"\"二维数组的行数\"",[312,6767,3180],{"class":1436},[312,6769,6011],{"class":324},[312,6771,6014],{"class":1436},[312,6773,5656],{"class":324},[312,6775,858],{"class":488},[312,6777,6021],{"class":324},[312,6779,2985],{"class":1436},[312,6781,3007],{"class":324},[312,6783,6784,6786,6788,6791,6793,6795,6797,6799,6801,6803,6805,6807,6809,6811,6813],{"class":314,"line":1020},[312,6785,3358],{"class":324},[312,6787,2985],{"class":1436},[312,6789,6790],{"class":339},"\"二维数组的列数\"",[312,6792,3180],{"class":1436},[312,6794,5656],{"class":324},[312,6796,858],{"class":488},[312,6798,6021],{"class":324},[312,6800,6014],{"class":1436},[312,6802,5656],{"class":324},[312,6804,858],{"class":488},[312,6806,6706],{"class":324},[312,6808,858],{"class":488},[312,6810,6021],{"class":324},[312,6812,2985],{"class":1436},[312,6814,3007],{"class":324},[312,6816,6817],{"class":314,"line":1026},[312,6818,515],{"class":324},[24,6820,6821],{},"查看二维数组首地址",[303,6823,6825],{"className":1942,"code":6824,"language":1944,"meta":308,"style":308},"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",[119,6826,6827,6844,6870,6895],{"__ignoreMap":308},[312,6828,6829,6831,6833,6836,6838,6840,6842],{"class":314,"line":315},[312,6830,3177],{"class":324},[312,6832,2985],{"class":1436},[312,6834,6835],{"class":339},"\"二维数组首地址：\"",[312,6837,2985],{"class":1436},[312,6839,5685],{"class":324},[312,6841,2985],{"class":1436},[312,6843,3007],{"class":324},[312,6845,6846,6848,6850,6853,6855,6857,6859,6862,6864,6866,6868],{"class":314,"line":171},[312,6847,3177],{"class":324},[312,6849,2985],{"class":1436},[312,6851,6852],{"class":339},"\"二维数组第一行的首地址：\"",[312,6854,2985],{"class":1436},[312,6856,1576],{"class":324},[312,6858,1956],{"class":1436},[312,6860,6861],{"class":324},")arr[",[312,6863,858],{"class":488},[312,6865,2882],{"class":324},[312,6867,2985],{"class":1436},[312,6869,3007],{"class":324},[312,6871,6872,6874,6876,6879,6881,6883,6885,6887,6889,6891,6893],{"class":314,"line":274},[312,6873,3177],{"class":324},[312,6875,2985],{"class":1436},[312,6877,6878],{"class":339},"\"二维数组第二行的首地址：\"",[312,6880,2985],{"class":1436},[312,6882,1576],{"class":324},[312,6884,1956],{"class":1436},[312,6886,6861],{"class":324},[312,6888,1433],{"class":488},[312,6890,2882],{"class":324},[312,6892,2985],{"class":1436},[312,6894,3007],{"class":324},[312,6896,6897,6899,6901,6904,6906,6908,6910,6912,6914,6916,6918,6920,6922,6924,6926,6928],{"class":314,"line":298},[312,6898,3177],{"class":324},[312,6900,2985],{"class":1436},[312,6902,6903],{"class":339},"\"二维数组第一个元素的首地址:\"",[312,6905,2985],{"class":1436},[312,6907,1576],{"class":324},[312,6909,1956],{"class":1436},[312,6911,2374],{"class":324},[312,6913,2298],{"class":1436},[312,6915,5711],{"class":324},[312,6917,858],{"class":488},[312,6919,6706],{"class":324},[312,6921,858],{"class":488},[312,6923,2882],{"class":324},[312,6925,2985],{"class":1436},[312,6927,3050],{"class":324},[312,6929,6930],{"class":318},"\u002F\u002F对于数，要加取址符\n",[1856,6932,6933],{},"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":308,"searchDepth":171,"depth":171,"links":6935},[6936,6937,6938,6946,6947,6953,6958],{"id":1897,"depth":171,"text":1898},{"id":1904,"depth":171,"text":1905},{"id":1919,"depth":171,"text":1920,"children":6939},[6940,6941,6942,6943,6944,6945],{"id":1923,"depth":274,"text":1924},{"id":1969,"depth":274,"text":1970},{"id":2035,"depth":274,"text":2036},{"id":2966,"depth":274,"text":2967},{"id":3056,"depth":274,"text":3057},{"id":3151,"depth":274,"text":3152},{"id":3193,"depth":171,"text":3194},{"id":3261,"depth":171,"text":3262,"children":6948},[6949,6950,6951,6952],{"id":3265,"depth":274,"text":3266},{"id":3286,"depth":274,"text":3287},{"id":3295,"depth":274,"text":3296},{"id":3304,"depth":274,"text":3305},{"id":3313,"depth":171,"text":3314,"children":6954},[6955,6956,6957],{"id":3317,"depth":274,"text":3318},{"id":4010,"depth":274,"text":4011},{"id":5426,"depth":274,"text":5427},{"id":5567,"depth":171,"text":5568,"children":6959},[6960,6961],{"id":5571,"depth":274,"text":5572},{"id":6599,"depth":274,"text":6600},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1889,"description":308},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6968,"title":6969,"body":6970,"description":308,"extension":1879,"meta":8069,"navigation":1881,"path":8070,"seo":8071,"stem":8072,"__hash__":8073},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6971,"toc":8061},[6972,6975,6979,6987,6995,6998,7063,7067,7070,7146,7150,7153,7156,7159,7372,7376,7381,7445,7450,7517,7522,7613,7616,7721,7725,7728,7734,7878,7882,7885,7899,7902,7947,7950,8058],[10,6973,6969],{"id":6974},"_2函数",[14,6976,6978],{"id":6977},"_21函数概述","2.1函数概述",[140,6980,6981,6984],{},[143,6982,6983],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[143,6985,6986],{},"语法：",[303,6988,6993],{"className":6989,"code":6991,"language":6992,"meta":308},[6990],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[119,6994,6991],{"__ignoreMap":308},[24,6996,6997],{},"小案例",[303,6999,7001],{"className":1942,"code":7000,"language":1944,"meta":308,"style":308},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[119,7002,7003,7008,7031,7035,7052,7059],{"__ignoreMap":308},[312,7004,7005],{"class":314,"line":315},[312,7006,7007],{"class":318},"\u002F\u002Fnum1,num2形参\n",[312,7009,7010,7012,7015,7017,7019,7022,7024,7026,7029],{"class":314,"line":171},[312,7011,1956],{"class":1436},[312,7013,7014],{"class":332}," add",[312,7016,1576],{"class":324},[312,7018,1956],{"class":1436},[312,7020,7021],{"class":1579}," num1",[312,7023,2323],{"class":324},[312,7025,1956],{"class":1436},[312,7027,7028],{"class":1579}," num2",[312,7030,1959],{"class":324},[312,7032,7033],{"class":314,"line":274},[312,7034,3353],{"class":324},[312,7036,7037,7039,7042,7044,7047,7049],{"class":314,"line":298},[312,7038,3790],{"class":1436},[312,7040,7041],{"class":324}," sum",[312,7043,336],{"class":1436},[312,7045,7046],{"class":324},"num1",[312,7048,2426],{"class":1436},[312,7050,7051],{"class":324},"num2;\n",[312,7053,7054,7056],{"class":314,"line":974},[312,7055,5895],{"class":1436},[312,7057,7058],{"class":324}," sum;\n",[312,7060,7061],{"class":314,"line":980},[312,7062,515],{"class":324},[14,7064,7066],{"id":7065},"_22函数调用","2.2函数调用",[24,7068,7069],{},"调用刚刚写的求和函数",[303,7071,7073],{"className":1942,"code":7072,"language":1944,"meta":308,"style":308},"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",[119,7074,7075,7083,7087,7092,7104,7116,7125,7130,7142],{"__ignoreMap":308},[312,7076,7077,7079,7081],{"class":314,"line":315},[312,7078,1956],{"class":1436},[312,7080,3778],{"class":332},[312,7082,3781],{"class":324},[312,7084,7085],{"class":314,"line":171},[312,7086,3353],{"class":324},[312,7088,7089],{"class":314,"line":274},[312,7090,7091],{"class":318},"    \u002F\u002Fa,b实参\n",[312,7093,7094,7096,7098,7100,7102],{"class":314,"line":298},[312,7095,3790],{"class":1436},[312,7097,3206],{"class":324},[312,7099,336],{"class":1436},[312,7101,858],{"class":488},[312,7103,498],{"class":324},[312,7105,7106,7108,7110,7112,7114],{"class":314,"line":974},[312,7107,3790],{"class":1436},[312,7109,4638],{"class":324},[312,7111,336],{"class":1436},[312,7113,858],{"class":488},[312,7115,498],{"class":324},[312,7117,7118,7120,7122],{"class":314,"line":980},[312,7119,3817],{"class":324},[312,7121,3237],{"class":1436},[312,7123,7124],{"class":324},"a,b;\n",[312,7126,7127],{"class":314,"line":997},[312,7128,7129],{"class":318},"    \u002F\u002F调用函数时，实参值传给了形参\n",[312,7131,7132,7134,7136,7139],{"class":314,"line":1003},[312,7133,3358],{"class":324},[312,7135,2985],{"class":1436},[312,7137,7138],{"class":332},"add",[312,7140,7141],{"class":324},"(a,b);\n",[312,7143,7144],{"class":314,"line":1020},[312,7145,515],{"class":324},[14,7147,7149],{"id":7148},"_23值传递","2.3值传递",[24,7151,7152],{},"值传递就是函数调用时实参将数值传给形参",[24,7154,7155],{},"值传递时，如果形参发生任何改变，不会影响实参",[24,7157,7158],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[303,7160,7162],{"className":1942,"code":7161,"language":1944,"meta":308,"style":308},"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",[119,7163,7164,7186,7190,7203,7220,7238,7249,7258,7267,7280,7296,7312,7321,7325,7333,7337,7349,7361,7368],{"__ignoreMap":308},[312,7165,7166,7169,7172,7174,7176,7178,7180,7182,7184],{"class":314,"line":315},[312,7167,7168],{"class":1436},"void",[312,7170,7171],{"class":332}," swap",[312,7173,1576],{"class":324},[312,7175,1956],{"class":1436},[312,7177,7021],{"class":1579},[312,7179,2323],{"class":324},[312,7181,1956],{"class":1436},[312,7183,7028],{"class":1579},[312,7185,1959],{"class":324},[312,7187,7188],{"class":314,"line":171},[312,7189,3353],{"class":324},[312,7191,7192,7194,7196,7199,7201],{"class":314,"line":274},[312,7193,3358],{"class":324},[312,7195,2985],{"class":1436},[312,7197,7198],{"class":339},"\"交换前：\"",[312,7200,2985],{"class":1436},[312,7202,3007],{"class":324},[312,7204,7205,7207,7209,7212,7214,7216,7218],{"class":314,"line":298},[312,7206,3358],{"class":324},[312,7208,2985],{"class":1436},[312,7210,7211],{"class":339},"\"num1=\"",[312,7213,2985],{"class":1436},[312,7215,7046],{"class":324},[312,7217,2985],{"class":1436},[312,7219,3007],{"class":324},[312,7221,7222,7224,7226,7229,7231,7234,7236],{"class":314,"line":974},[312,7223,3358],{"class":324},[312,7225,2985],{"class":1436},[312,7227,7228],{"class":339},"\"num2=\"",[312,7230,2985],{"class":1436},[312,7232,7233],{"class":324},"num2",[312,7235,2985],{"class":1436},[312,7237,3007],{"class":324},[312,7239,7240,7242,7244,7246],{"class":314,"line":980},[312,7241,3790],{"class":1436},[312,7243,6060],{"class":324},[312,7245,336],{"class":1436},[312,7247,7248],{"class":324},"num1;\n",[312,7250,7251,7254,7256],{"class":314,"line":997},[312,7252,7253],{"class":324},"    num1",[312,7255,336],{"class":1436},[312,7257,7051],{"class":324},[312,7259,7260,7263,7265],{"class":314,"line":1003},[312,7261,7262],{"class":324},"    num2",[312,7264,336],{"class":1436},[312,7266,6085],{"class":324},[312,7268,7269,7271,7273,7276,7278],{"class":314,"line":1020},[312,7270,3358],{"class":324},[312,7272,2985],{"class":1436},[312,7274,7275],{"class":339},"\"交换后：\"",[312,7277,2985],{"class":1436},[312,7279,3007],{"class":324},[312,7281,7282,7284,7286,7288,7290,7292,7294],{"class":314,"line":1026},[312,7283,3358],{"class":324},[312,7285,2985],{"class":1436},[312,7287,7211],{"class":339},[312,7289,2985],{"class":1436},[312,7291,7046],{"class":324},[312,7293,2985],{"class":1436},[312,7295,3007],{"class":324},[312,7297,7298,7300,7302,7304,7306,7308,7310],{"class":314,"line":3418},[312,7299,3358],{"class":324},[312,7301,2985],{"class":1436},[312,7303,7228],{"class":339},[312,7305,2985],{"class":1436},[312,7307,7233],{"class":324},[312,7309,2985],{"class":1436},[312,7311,3007],{"class":324},[312,7313,7314,7316,7318],{"class":314,"line":3423},[312,7315,5895],{"class":1436},[312,7317,2006],{"class":324},[312,7319,7320],{"class":318},"\u002F\u002F或者不写\n",[312,7322,7323],{"class":314,"line":3429},[312,7324,515],{"class":324},[312,7326,7327,7329,7331],{"class":314,"line":3434},[312,7328,1956],{"class":1436},[312,7330,3778],{"class":332},[312,7332,3781],{"class":324},[312,7334,7335],{"class":314,"line":3448},[312,7336,3353],{"class":324},[312,7338,7339,7341,7343,7345,7347],{"class":314,"line":3453},[312,7340,3790],{"class":1436},[312,7342,3206],{"class":324},[312,7344,336],{"class":1436},[312,7346,2391],{"class":488},[312,7348,498],{"class":324},[312,7350,7351,7353,7355,7357,7359],{"class":314,"line":3459},[312,7352,3790],{"class":1436},[312,7354,4638],{"class":324},[312,7356,336],{"class":1436},[312,7358,1546],{"class":488},[312,7360,498],{"class":324},[312,7362,7363,7366],{"class":314,"line":3480},[312,7364,7365],{"class":332},"    swap",[312,7367,7141],{"class":324},[312,7369,7370],{"class":314,"line":3485},[312,7371,515],{"class":324},[14,7373,7375],{"id":7374},"_24函数的常见形式","2.4函数的常见形式",[140,7377,7378],{},[143,7379,7380],{},"无参无返",[303,7382,7384],{"className":1942,"code":7383,"language":1944,"meta":308,"style":308},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[119,7385,7386,7395,7399,7412,7416,7424,7428,7433,7441],{"__ignoreMap":308},[312,7387,7388,7390,7393],{"class":314,"line":315},[312,7389,7168],{"class":1436},[312,7391,7392],{"class":332}," test01",[312,7394,3781],{"class":324},[312,7396,7397],{"class":314,"line":171},[312,7398,3353],{"class":324},[312,7400,7401,7403,7405,7408,7410],{"class":314,"line":274},[312,7402,3358],{"class":324},[312,7404,2985],{"class":1436},[312,7406,7407],{"class":339},"\"你好\"",[312,7409,2985],{"class":1436},[312,7411,3007],{"class":324},[312,7413,7414],{"class":314,"line":298},[312,7415,515],{"class":324},[312,7417,7418,7420,7422],{"class":314,"line":974},[312,7419,1956],{"class":1436},[312,7421,3778],{"class":332},[312,7423,3781],{"class":324},[312,7425,7426],{"class":314,"line":980},[312,7427,3353],{"class":324},[312,7429,7430],{"class":314,"line":997},[312,7431,7432],{"class":318},"    \u002F\u002F函数调用\n",[312,7434,7435,7438],{"class":314,"line":1003},[312,7436,7437],{"class":332},"    test01",[312,7439,7440],{"class":324},"();\n",[312,7442,7443],{"class":314,"line":1020},[312,7444,515],{"class":324},[140,7446,7447],{"start":171},[143,7448,7449],{},"有参无返",[303,7451,7453],{"className":1942,"code":7452,"language":1944,"meta":308,"style":308},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[119,7454,7455,7470,7474,7486,7490,7498,7502,7513],{"__ignoreMap":308},[312,7456,7457,7459,7462,7464,7466,7468],{"class":314,"line":315},[312,7458,7168],{"class":1436},[312,7460,7461],{"class":332}," test02",[312,7463,1576],{"class":324},[312,7465,1956],{"class":1436},[312,7467,3206],{"class":1579},[312,7469,1959],{"class":324},[312,7471,7472],{"class":314,"line":171},[312,7473,3353],{"class":324},[312,7475,7476,7478,7480,7482,7484],{"class":314,"line":274},[312,7477,3358],{"class":324},[312,7479,2985],{"class":1436},[312,7481,7407],{"class":339},[312,7483,2985],{"class":1436},[312,7485,3007],{"class":324},[312,7487,7488],{"class":314,"line":298},[312,7489,515],{"class":324},[312,7491,7492,7494,7496],{"class":314,"line":974},[312,7493,1956],{"class":1436},[312,7495,3778],{"class":332},[312,7497,3781],{"class":324},[312,7499,7500],{"class":314,"line":980},[312,7501,3353],{"class":324},[312,7503,7504,7507,7509,7511],{"class":314,"line":997},[312,7505,7506],{"class":332},"    test02",[312,7508,1576],{"class":324},[312,7510,2256],{"class":488},[312,7512,4524],{"class":324},[312,7514,7515],{"class":314,"line":1003},[312,7516,515],{"class":324},[140,7518,7519],{"start":274},[143,7520,7521],{},"无参有返",[303,7523,7525],{"className":1942,"code":7524,"language":1944,"meta":308,"style":308},"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",[119,7526,7527,7536,7540,7552,7561,7565,7573,7577,7590,7609],{"__ignoreMap":308},[312,7528,7529,7531,7534],{"class":314,"line":315},[312,7530,1956],{"class":1436},[312,7532,7533],{"class":332}," test03",[312,7535,3781],{"class":324},[312,7537,7538],{"class":314,"line":171},[312,7539,3353],{"class":324},[312,7541,7542,7544,7546,7548,7550],{"class":314,"line":274},[312,7543,3358],{"class":324},[312,7545,2985],{"class":1436},[312,7547,7407],{"class":339},[312,7549,2985],{"class":1436},[312,7551,3007],{"class":324},[312,7553,7554,7556,7559],{"class":314,"line":298},[312,7555,5895],{"class":1436},[312,7557,7558],{"class":488}," 100",[312,7560,498],{"class":324},[312,7562,7563],{"class":314,"line":974},[312,7564,515],{"class":324},[312,7566,7567,7569,7571],{"class":314,"line":980},[312,7568,1956],{"class":1436},[312,7570,3778],{"class":332},[312,7572,3781],{"class":324},[312,7574,7575],{"class":314,"line":997},[312,7576,3353],{"class":324},[312,7578,7579,7581,7583,7585,7588],{"class":314,"line":1003},[312,7580,3790],{"class":1436},[312,7582,7021],{"class":324},[312,7584,336],{"class":1436},[312,7586,7587],{"class":332},"test03",[312,7589,7440],{"class":324},[312,7591,7592,7594,7596,7598,7600,7602,7604,7606],{"class":314,"line":1020},[312,7593,3358],{"class":324},[312,7595,2985],{"class":1436},[312,7597,7211],{"class":339},[312,7599,2985],{"class":1436},[312,7601,7046],{"class":324},[312,7603,2985],{"class":1436},[312,7605,3050],{"class":324},[312,7607,7608],{"class":318}," \u002F\u002F100\n",[312,7610,7611],{"class":314,"line":1026},[312,7612,515],{"class":324},[24,7614,7615],{},"4.有参有返",[303,7617,7619],{"className":1942,"code":7618,"language":1944,"meta":308,"style":308},"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",[119,7620,7621,7636,7640,7653,7659,7663,7672,7676,7688,7702,7717],{"__ignoreMap":308},[312,7622,7623,7625,7628,7630,7632,7634],{"class":314,"line":315},[312,7624,1956],{"class":1436},[312,7626,7627],{"class":332}," test04",[312,7629,1576],{"class":324},[312,7631,1956],{"class":1436},[312,7633,3206],{"class":1579},[312,7635,1959],{"class":324},[312,7637,7638],{"class":314,"line":171},[312,7639,3353],{"class":324},[312,7641,7642,7644,7646,7649,7651],{"class":314,"line":274},[312,7643,3358],{"class":324},[312,7645,2985],{"class":1436},[312,7647,7648],{"class":339},"\"hello\"",[312,7650,2985],{"class":1436},[312,7652,3007],{"class":324},[312,7654,7655,7657],{"class":314,"line":298},[312,7656,5895],{"class":1436},[312,7658,3240],{"class":324},[312,7660,7661],{"class":314,"line":974},[312,7662,515],{"class":324},[312,7664,7665,7667,7670],{"class":314,"line":980},[312,7666,1956],{"class":1436},[312,7668,7669],{"class":332}," mian",[312,7671,3781],{"class":324},[312,7673,7674],{"class":314,"line":997},[312,7675,3353],{"class":324},[312,7677,7678,7680,7682,7684,7686],{"class":314,"line":1003},[312,7679,3790],{"class":1436},[312,7681,4638],{"class":324},[312,7683,336],{"class":1436},[312,7685,1433],{"class":488},[312,7687,498],{"class":324},[312,7689,7690,7692,7694,7696,7699],{"class":314,"line":1020},[312,7691,3790],{"class":1436},[312,7693,4654],{"class":324},[312,7695,336],{"class":1436},[312,7697,7698],{"class":332},"test04",[312,7700,7701],{"class":324},"(b);\n",[312,7703,7704,7706,7708,7710,7712,7714],{"class":314,"line":1026},[312,7705,3358],{"class":324},[312,7707,2985],{"class":1436},[312,7709,2233],{"class":324},[312,7711,2985],{"class":1436},[312,7713,3050],{"class":324},[312,7715,7716],{"class":318}," \u002F\u002F1\n",[312,7718,7719],{"class":314,"line":3418},[312,7720,515],{"class":324},[14,7722,7724],{"id":7723},"_25函数的声明","2.5函数的声明",[24,7726,7727],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[24,7729,7730,7731],{},"函数的",[27,7732,7733],{},"声明可以多次，但是函数的定义只能有一次",[303,7735,7737],{"className":1942,"code":7736,"language":1944,"meta":308,"style":308},"\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",[119,7738,7739,7744,7749,7774,7783,7787,7799,7811,7827,7831,7851,7855,7874],{"__ignoreMap":308},[312,7740,7741],{"class":314,"line":315},[312,7742,7743],{"class":318},"\u002F\u002F函数声明\n",[312,7745,7746],{"class":314,"line":171},[312,7747,7748],{"class":318},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[312,7750,7751,7753,7756,7758,7760,7762,7764,7766,7768,7771],{"class":314,"line":274},[312,7752,1956],{"class":1436},[312,7754,7755],{"class":332}," max",[312,7757,1576],{"class":324},[312,7759,1956],{"class":1436},[312,7761,3206],{"class":1579},[312,7763,2323],{"class":324},[312,7765,1956],{"class":1436},[312,7767,4638],{"class":1579},[312,7769,7770],{"class":324},");",[312,7772,7773],{"class":318},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[312,7775,7776,7778,7780],{"class":314,"line":298},[312,7777,1956],{"class":1436},[312,7779,3778],{"class":332},[312,7781,7782],{"class":324},"() \n",[312,7784,7785],{"class":314,"line":974},[312,7786,3353],{"class":324},[312,7788,7789,7791,7793,7795,7797],{"class":314,"line":980},[312,7790,3790],{"class":1436},[312,7792,3206],{"class":324},[312,7794,336],{"class":1436},[312,7796,2391],{"class":488},[312,7798,498],{"class":324},[312,7800,7801,7803,7805,7807,7809],{"class":314,"line":997},[312,7802,3790],{"class":1436},[312,7804,4638],{"class":324},[312,7806,336],{"class":1436},[312,7808,1546],{"class":488},[312,7810,498],{"class":324},[312,7812,7813,7815,7817,7820,7823,7825],{"class":314,"line":1003},[312,7814,3358],{"class":324},[312,7816,2985],{"class":1436},[312,7818,7819],{"class":332},"max",[312,7821,7822],{"class":324},"(a,b)",[312,7824,2985],{"class":1436},[312,7826,3007],{"class":324},[312,7828,7829],{"class":314,"line":1020},[312,7830,515],{"class":324},[312,7832,7833,7835,7837,7839,7841,7843,7845,7847,7849],{"class":314,"line":1026},[312,7834,1956],{"class":1436},[312,7836,7755],{"class":332},[312,7838,1576],{"class":324},[312,7840,1956],{"class":1436},[312,7842,3206],{"class":1579},[312,7844,2323],{"class":324},[312,7846,1956],{"class":1436},[312,7848,4638],{"class":1579},[312,7850,1959],{"class":324},[312,7852,7853],{"class":314,"line":3418},[312,7854,3353],{"class":324},[312,7856,7857,7859,7861,7863,7865,7867,7869,7871],{"class":314,"line":3423},[312,7858,5895],{"class":1436},[312,7860,3206],{"class":324},[312,7862,2902],{"class":1436},[312,7864,2208],{"class":324},[312,7866,2928],{"class":1436},[312,7868,164],{"class":324},[312,7870,2803],{"class":1436},[312,7872,7873],{"class":324},"b;\n",[312,7875,7876],{"class":314,"line":3429},[312,7877,515],{"class":324},[14,7879,7881],{"id":7880},"_26函数的分文件编写","2.6函数的分文件编写",[24,7883,7884],{},"4个步骤：",[243,7886,7887,7890,7893,7896],{},[143,7888,7889],{},"1.创建后缀名为.h的头文件",[143,7891,7892],{},"2.创建后缀名为.cpp的源文件",[143,7894,7895],{},"3.在头文件中写函数的定义",[143,7897,7898],{},"4.在源文件中写函数的定义\n示例：",[24,7900,7901],{},"头文件：swap.h",[303,7903,7905],{"className":1942,"code":7904,"language":1944,"meta":308,"style":308},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[119,7906,7907,7913,7923,7927],{"__ignoreMap":308},[312,7908,7909,7911],{"class":314,"line":315},[312,7910,3755],{"class":1436},[312,7912,3758],{"class":339},[312,7914,7915,7917,7919,7921],{"class":314,"line":171},[312,7916,3763],{"class":1436},[312,7918,3766],{"class":1436},[312,7920,3769],{"class":332},[312,7922,498],{"class":324},[312,7924,7925],{"class":314,"line":274},[312,7926,7743],{"class":318},[312,7928,7929,7931,7933,7935,7937,7939,7941,7943,7945],{"class":314,"line":298},[312,7930,7168],{"class":1436},[312,7932,7171],{"class":332},[312,7934,1576],{"class":324},[312,7936,1956],{"class":1436},[312,7938,3206],{"class":1579},[312,7940,2323],{"class":324},[312,7942,1956],{"class":1436},[312,7944,4638],{"class":1579},[312,7946,4524],{"class":324},[24,7948,7949],{},"源文件：swap.cpp",[303,7951,7953],{"className":1942,"code":7952,"language":1944,"meta":308,"style":308},"#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",[119,7954,7955,7962,7967,7987,7991,8002,8011,8020,8037,8054],{"__ignoreMap":308},[312,7956,7957,7959],{"class":314,"line":315},[312,7958,3755],{"class":1436},[312,7960,7961],{"class":339}," \"swap.h\"\n",[312,7963,7964],{"class":314,"line":171},[312,7965,7966],{"class":318},"\u002F\u002F函数的定义\n",[312,7968,7969,7971,7973,7975,7977,7979,7981,7983,7985],{"class":314,"line":274},[312,7970,7168],{"class":1436},[312,7972,7171],{"class":332},[312,7974,1576],{"class":324},[312,7976,1956],{"class":1436},[312,7978,3206],{"class":1579},[312,7980,2323],{"class":324},[312,7982,1956],{"class":1436},[312,7984,4638],{"class":1579},[312,7986,1959],{"class":324},[312,7988,7989],{"class":314,"line":298},[312,7990,3353],{"class":324},[312,7992,7993,7995,7997,7999],{"class":314,"line":974},[312,7994,3790],{"class":1436},[312,7996,6060],{"class":324},[312,7998,336],{"class":1436},[312,8000,8001],{"class":324},"a;\n",[312,8003,8004,8007,8009],{"class":314,"line":980},[312,8005,8006],{"class":324},"    a",[312,8008,336],{"class":1436},[312,8010,7873],{"class":324},[312,8012,8013,8016,8018],{"class":314,"line":997},[312,8014,8015],{"class":324},"    b",[312,8017,336],{"class":1436},[312,8019,6085],{"class":324},[312,8021,8022,8024,8026,8029,8031,8033,8035],{"class":314,"line":1003},[312,8023,3358],{"class":324},[312,8025,2985],{"class":1436},[312,8027,8028],{"class":339},"\"a=\"",[312,8030,2985],{"class":1436},[312,8032,164],{"class":324},[312,8034,2985],{"class":1436},[312,8036,3007],{"class":324},[312,8038,8039,8041,8043,8046,8048,8050,8052],{"class":314,"line":1020},[312,8040,3358],{"class":324},[312,8042,2985],{"class":1436},[312,8044,8045],{"class":339},"\"b=\"",[312,8047,2985],{"class":1436},[312,8049,2208],{"class":324},[312,8051,2985],{"class":1436},[312,8053,3007],{"class":324},[312,8055,8056],{"class":314,"line":1026},[312,8057,515],{"class":324},[1856,8059,8060],{},"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":308,"searchDepth":171,"depth":171,"links":8062},[8063,8064,8065,8066,8067,8068],{"id":6977,"depth":171,"text":6978},{"id":7065,"depth":171,"text":7066},{"id":7148,"depth":171,"text":7149},{"id":7374,"depth":171,"text":7375},{"id":7723,"depth":171,"text":7724},{"id":7880,"depth":171,"text":7881},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6969,"description":308},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":8075,"title":8076,"body":8077,"description":8084,"extension":1879,"meta":9488,"navigation":1881,"path":9489,"seo":9490,"stem":9491,"__hash__":9492},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":8078,"toc":9478},[8079,8082,8085,8089,8251,8255,8258,8261,8264,8267,8407,8411,8414,8417,8420,8485,8489,8494,8561,8564,8568,8571,8582,8587,8607,8610,8615,8634,8637,8641,8660,8663,8667,8902,8906,8909,8912,8915,9077,9080,9084,9087,9093,9475],[10,8080,8076],{"id":8081},"_3指针",[24,8083,8084],{},"通过指针保存一个地址，指针就是个地址",[14,8086,8088],{"id":8087},"_31定义指针","3.1定义指针",[303,8090,8092],{"className":1942,"code":8091,"language":1944,"meta":308,"style":308},"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",[119,8093,8094,8102,8106,8111,8123,8128,8136,8146,8164,8184,8188,8193,8198,8203,8217,8233,8247],{"__ignoreMap":308},[312,8095,8096,8098,8100],{"class":314,"line":315},[312,8097,1956],{"class":1436},[312,8099,3778],{"class":332},[312,8101,3781],{"class":324},[312,8103,8104],{"class":314,"line":171},[312,8105,3353],{"class":324},[312,8107,8108],{"class":314,"line":274},[312,8109,8110],{"class":318},"    \u002F\u002F1.定义指针\n",[312,8112,8113,8115,8117,8119,8121],{"class":314,"line":298},[312,8114,3790],{"class":1436},[312,8116,3206],{"class":324},[312,8118,336],{"class":1436},[312,8120,2391],{"class":488},[312,8122,498],{"class":324},[312,8124,8125],{"class":314,"line":974},[312,8126,8127],{"class":318},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[312,8129,8130,8133],{"class":314,"line":980},[312,8131,8132],{"class":1436},"    int*",[312,8134,8135],{"class":324},"p;\n",[312,8137,8138,8141,8144],{"class":314,"line":997},[312,8139,8140],{"class":324},"    p",[312,8142,8143],{"class":1436},"=&",[312,8145,8001],{"class":324},[312,8147,8148,8150,8152,8155,8158,8160,8162],{"class":314,"line":1003},[312,8149,3358],{"class":324},[312,8151,2985],{"class":1436},[312,8153,8154],{"class":339},"\"a的地址为：\"",[312,8156,8157],{"class":1436},"\u003C\u003C&",[312,8159,164],{"class":324},[312,8161,2985],{"class":1436},[312,8163,3007],{"class":324},[312,8165,8166,8168,8170,8173,8175,8177,8179,8181],{"class":314,"line":1020},[312,8167,3358],{"class":324},[312,8169,2985],{"class":1436},[312,8171,8172],{"class":339},"\"指针p为：\"",[312,8174,2985],{"class":1436},[312,8176,24],{"class":324},[312,8178,2985],{"class":1436},[312,8180,3050],{"class":324},[312,8182,8183],{"class":318},"\u002F\u002F指针p表示的就是a的地址\n",[312,8185,8186],{"class":314,"line":1026},[312,8187,4205],{"emptyLinePlaceholder":1881},[312,8189,8190],{"class":314,"line":3418},[312,8191,8192],{"class":318},"    \u002F\u002F2.使用指针\n",[312,8194,8195],{"class":314,"line":3423},[312,8196,8197],{"class":318},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[312,8199,8200],{"class":314,"line":3429},[312,8201,8202],{"class":318},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[312,8204,8205,8208,8210,8212,8215],{"class":314,"line":3434},[312,8206,8207],{"class":1436},"    *",[312,8209,24],{"class":324},[312,8211,336],{"class":1436},[312,8213,8214],{"class":488},"1000",[312,8216,498],{"class":324},[312,8218,8219,8221,8224,8226,8228,8230],{"class":314,"line":3448},[312,8220,3358],{"class":324},[312,8222,8223],{"class":1436},"\u003C\u003C*",[312,8225,24],{"class":324},[312,8227,2985],{"class":1436},[312,8229,3050],{"class":324},[312,8231,8232],{"class":318},"\u002F\u002F1000\n",[312,8234,8235,8237,8239,8241,8243,8245],{"class":314,"line":3453},[312,8236,3358],{"class":324},[312,8238,2985],{"class":1436},[312,8240,164],{"class":324},[312,8242,2985],{"class":1436},[312,8244,3050],{"class":324},[312,8246,8232],{"class":318},[312,8248,8249],{"class":314,"line":3459},[312,8250,515],{"class":324},[14,8252,8254],{"id":8253},"_32指针所占的内存空间","3.2指针所占的内存空间",[24,8256,8257],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[24,8259,8260],{},"在32位操作系统下：占用4个字节空间",[24,8262,8263],{},"在64位操作系统下：占用8个字节空间",[24,8265,8266],{},"上方是不管啥数据类型的",[303,8268,8270],{"className":1942,"code":8269,"language":1944,"meta":308,"style":308},"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",[119,8271,8272,8280,8284,8289,8301,8306,8311,8316,8329,8351,8377,8403],{"__ignoreMap":308},[312,8273,8274,8276,8278],{"class":314,"line":315},[312,8275,1956],{"class":1436},[312,8277,3778],{"class":332},[312,8279,3781],{"class":324},[312,8281,8282],{"class":314,"line":171},[312,8283,3353],{"class":324},[312,8285,8286],{"class":314,"line":274},[312,8287,8288],{"class":318},"    \u002F\u002F指针所占内存空间\n",[312,8290,8291,8293,8295,8297,8299],{"class":314,"line":298},[312,8292,3790],{"class":1436},[312,8294,3206],{"class":324},[312,8296,336],{"class":1436},[312,8298,2391],{"class":488},[312,8300,498],{"class":324},[312,8302,8303],{"class":314,"line":974},[312,8304,8305],{"class":318},"    \u002F\u002Fint *p;\n",[312,8307,8308],{"class":314,"line":980},[312,8309,8310],{"class":318},"    \u002F\u002Fp=&a;\n",[312,8312,8313],{"class":314,"line":997},[312,8314,8315],{"class":318},"    \u002F\u002F上述可以写为以下：\n",[312,8317,8318,8320,8323,8325,8327],{"class":314,"line":1003},[312,8319,3790],{"class":1436},[312,8321,8322],{"class":1436}," *",[312,8324,24],{"class":324},[312,8326,8143],{"class":1436},[312,8328,8001],{"class":324},[312,8330,8331,8334,8336,8339,8341,8344,8346,8348],{"class":314,"line":1020},[312,8332,8333],{"class":324},"    cout ",[312,8335,2985],{"class":1436},[312,8337,8338],{"class":339},"\"sizeof(int *)\"",[312,8340,3180],{"class":1436},[312,8342,8343],{"class":324},"(p)",[312,8345,2985],{"class":1436},[312,8347,3050],{"class":324},[312,8349,8350],{"class":318},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[312,8352,8353,8355,8357,8359,8361,8363,8365,8367,8369,8371,8374],{"class":314,"line":1026},[312,8354,8333],{"class":324},[312,8356,2985],{"class":1436},[312,8358,8338],{"class":339},[312,8360,3180],{"class":1436},[312,8362,1576],{"class":324},[312,8364,1956],{"class":1436},[312,8366,8322],{"class":1436},[312,8368,2374],{"class":324},[312,8370,2985],{"class":1436},[312,8372,8373],{"class":324},"endl",[312,8375,8376],{"class":318},"  \u002F\u002F4字节(32位的话)\n",[312,8378,8379,8381,8383,8386,8388,8390,8392,8394,8396,8398,8400],{"class":314,"line":3418},[312,8380,8333],{"class":324},[312,8382,2985],{"class":1436},[312,8384,8385],{"class":339},"\"sizeof(char *)\"",[312,8387,3180],{"class":1436},[312,8389,1576],{"class":324},[312,8391,2046],{"class":1436},[312,8393,8322],{"class":1436},[312,8395,2374],{"class":324},[312,8397,2985],{"class":1436},[312,8399,3050],{"class":324},[312,8401,8402],{"class":318}," \u002F\u002F4字节(32位的话)\n",[312,8404,8405],{"class":314,"line":3423},[312,8406,515],{"class":324},[14,8408,8410],{"id":8409},"_33空指针","3.3空指针",[24,8412,8413],{},"空指针：指针变量指向内存中编号为0的空间",[24,8415,8416],{},"用途：初始化指针变量",[24,8418,8419],{},"注意：空指针指向的内存是不可以访问的",[303,8421,8423],{"className":1942,"code":8422,"language":1944,"meta":308,"style":308},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[119,8424,8425,8433,8437,8442,8456,8461,8476,8481],{"__ignoreMap":308},[312,8426,8427,8429,8431],{"class":314,"line":315},[312,8428,1956],{"class":1436},[312,8430,3778],{"class":332},[312,8432,3781],{"class":324},[312,8434,8435],{"class":314,"line":171},[312,8436,3353],{"class":324},[312,8438,8439],{"class":314,"line":274},[312,8440,8441],{"class":318},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[312,8443,8444,8446,8448,8450,8452,8454],{"class":314,"line":298},[312,8445,3790],{"class":1436},[312,8447,8322],{"class":1436},[312,8449,24],{"class":324},[312,8451,336],{"class":1436},[312,8453,4197],{"class":488},[312,8455,498],{"class":324},[312,8457,8458],{"class":314,"line":974},[312,8459,8460],{"class":318},"    \u002F\u002F2.空指针不能进行访问\n",[312,8462,8463,8465,8467,8469,8471,8473],{"class":314,"line":980},[312,8464,8207],{"class":1436},[312,8466,24],{"class":324},[312,8468,336],{"class":1436},[312,8470,2256],{"class":488},[312,8472,2006],{"class":324},[312,8474,8475],{"class":318},"\u002F\u002F直接报错，压根不能访问\n",[312,8477,8478],{"class":314,"line":997},[312,8479,8480],{"class":318},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[312,8482,8483],{"class":314,"line":1003},[312,8484,515],{"class":324},[14,8486,8488],{"id":8487},"_34野指针","3.4野指针",[24,8490,8491],{},[27,8492,8493],{},"指针变量指向非法的内存空间",[303,8495,8497],{"className":1942,"code":8496,"language":1944,"meta":308,"style":308},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[119,8498,8499,8507,8511,8540,8545,8557],{"__ignoreMap":308},[312,8500,8501,8503,8505],{"class":314,"line":315},[312,8502,1956],{"class":1436},[312,8504,3778],{"class":332},[312,8506,3781],{"class":324},[312,8508,8509],{"class":314,"line":171},[312,8510,3353],{"class":324},[312,8512,8513,8515,8517,8519,8521,8523,8525,8527,8529,8532,8535,8537],{"class":314,"line":274},[312,8514,3790],{"class":1436},[312,8516,8322],{"class":1436},[312,8518,24],{"class":324},[312,8520,336],{"class":1436},[312,8522,1576],{"class":324},[312,8524,1956],{"class":1436},[312,8526,8322],{"class":1436},[312,8528,2374],{"class":324},[312,8530,8531],{"class":1436},"0x",[312,8533,8534],{"class":488},"1100",[312,8536,2006],{"class":324},[312,8538,8539],{"class":318}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[312,8541,8542],{"class":314,"line":298},[312,8543,8544],{"class":318},"    \u002F\u002F访问野指针报错\n",[312,8546,8547,8549,8551,8553,8555],{"class":314,"line":974},[312,8548,3358],{"class":324},[312,8550,8223],{"class":1436},[312,8552,24],{"class":324},[312,8554,2985],{"class":1436},[312,8556,3007],{"class":324},[312,8558,8559],{"class":314,"line":980},[312,8560,515],{"class":324},[24,8562,8563],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8565,8567],{"id":8566},"_35const修饰指针","3.5const修饰指针",[24,8569,8570],{},"三种情况：",[243,8572,8573,8576,8579],{},[143,8574,8575],{},"const修饰指针 常量指针",[143,8577,8578],{},"const修饰常量 指针常量",[143,8580,8581],{},"const即修饰指针，又修饰常量",[140,8583,8584],{},[143,8585,8586],{},"常量指针",[303,8588,8590],{"className":1942,"code":8589,"language":1944,"meta":308,"style":308},"const int *p=&a;\n",[119,8591,8592],{"__ignoreMap":308},[312,8593,8594,8597,8599,8601,8603,8605],{"class":314,"line":315},[312,8595,8596],{"class":1436},"const",[312,8598,4187],{"class":1436},[312,8600,8322],{"class":1436},[312,8602,24],{"class":324},[312,8604,8143],{"class":1436},[312,8606,8001],{"class":324},[24,8608,8609],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[140,8611,8612],{"start":171},[143,8613,8614],{},"指针常量",[303,8616,8618],{"className":1942,"code":8617,"language":1944,"meta":308,"style":308},"int *const p=&a;\n",[119,8619,8620],{"__ignoreMap":308},[312,8621,8622,8624,8627,8630,8632],{"class":314,"line":315},[312,8623,1956],{"class":1436},[312,8625,8626],{"class":1436}," *const",[312,8628,8629],{"class":324}," p",[312,8631,8143],{"class":1436},[312,8633,8001],{"class":324},[24,8635,8636],{},"指针的指向不可以改，指针指向的值可以改",[140,8638,8639],{"start":274},[143,8640,8581],{},[303,8642,8644],{"className":1942,"code":8643,"language":1944,"meta":308,"style":308},"const int *const p=&a;\n",[119,8645,8646],{"__ignoreMap":308},[312,8647,8648,8650,8652,8654,8656,8658],{"class":314,"line":315},[312,8649,8596],{"class":1436},[312,8651,4187],{"class":1436},[312,8653,8626],{"class":1436},[312,8655,8629],{"class":324},[312,8657,8143],{"class":1436},[312,8659,8001],{"class":324},[24,8661,8662],{},"指针的指向和指针指向的值都不可以改变",[14,8664,8666],{"id":8665},"_36指针和数组","3.6指针和数组",[303,8668,8670],{"className":1942,"code":8669,"language":1944,"meta":308,"style":308},"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",[119,8671,8672,8680,8684,8689,8743,8764,8780,8796,8807,8824,8829,8843,8869,8873,8885,8894,8898],{"__ignoreMap":308},[312,8673,8674,8676,8678],{"class":314,"line":315},[312,8675,1956],{"class":1436},[312,8677,3778],{"class":332},[312,8679,3781],{"class":324},[312,8681,8682],{"class":314,"line":171},[312,8683,3353],{"class":324},[312,8685,8686],{"class":314,"line":274},[312,8687,8688],{"class":318},"    \u002F\u002F利用指针访问数组中的元素\n",[312,8690,8691,8693,8695,8697,8699,8701,8703,8705,8707,8709,8711,8713,8715,8717,8719,8721,8723,8725,8727,8729,8731,8733,8735,8737,8739,8741],{"class":314,"line":298},[312,8692,3790],{"class":1436},[312,8694,5767],{"class":324},[312,8696,2391],{"class":488},[312,8698,2882],{"class":324},[312,8700,336],{"class":1436},[312,8702,2840],{"class":324},[312,8704,1433],{"class":488},[312,8706,2323],{"class":324},[312,8708,2027],{"class":488},[312,8710,2323],{"class":324},[312,8712,2021],{"class":488},[312,8714,2323],{"class":324},[312,8716,2238],{"class":488},[312,8718,2323],{"class":324},[312,8720,2264],{"class":488},[312,8722,2323],{"class":324},[312,8724,2289],{"class":488},[312,8726,2323],{"class":324},[312,8728,2314],{"class":488},[312,8730,2323],{"class":324},[312,8732,2340],{"class":488},[312,8734,2323],{"class":324},[312,8736,2365],{"class":488},[312,8738,2323],{"class":324},[312,8740,2391],{"class":488},[312,8742,5800],{"class":324},[312,8744,8745,8747,8749,8752,8754,8756,8758,8760,8762],{"class":314,"line":974},[312,8746,3358],{"class":324},[312,8748,2985],{"class":1436},[312,8750,8751],{"class":339},"\"数组的第一个元素为：\"",[312,8753,2985],{"class":1436},[312,8755,5711],{"class":324},[312,8757,858],{"class":488},[312,8759,2882],{"class":324},[312,8761,2985],{"class":1436},[312,8763,3007],{"class":324},[312,8765,8766,8768,8770,8772,8774,8777],{"class":314,"line":980},[312,8767,3790],{"class":1436},[312,8769,8322],{"class":1436},[312,8771,24],{"class":324},[312,8773,336],{"class":1436},[312,8775,8776],{"class":324},"arr;",[312,8778,8779],{"class":318},"\u002F\u002F注意数才要加取地址符号&\n",[312,8781,8782,8784,8786,8788,8790,8792,8794],{"class":314,"line":997},[312,8783,3358],{"class":324},[312,8785,2985],{"class":1436},[312,8787,8751],{"class":339},[312,8789,8223],{"class":1436},[312,8791,24],{"class":324},[312,8793,2985],{"class":1436},[312,8795,3007],{"class":324},[312,8797,8798,8800,8802,8804],{"class":314,"line":1003},[312,8799,8140],{"class":324},[312,8801,4097],{"class":1436},[312,8803,2006],{"class":324},[312,8805,8806],{"class":318}," \u002F\u002F让指针向后偏移4个字节\n",[312,8808,8809,8811,8813,8816,8818,8820,8822],{"class":314,"line":1020},[312,8810,3358],{"class":324},[312,8812,2985],{"class":1436},[312,8814,8815],{"class":339},"\"数组的第二个元素为：\"",[312,8817,8223],{"class":1436},[312,8819,24],{"class":324},[312,8821,2985],{"class":1436},[312,8823,3007],{"class":324},[312,8825,8826],{"class":314,"line":1026},[312,8827,8828],{"class":318},"    \u002F\u002F利用指针遍历数组\n",[312,8830,8831,8833,8835,8838,8840],{"class":314,"line":3418},[312,8832,3790],{"class":1436},[312,8834,8322],{"class":1436},[312,8836,8837],{"class":324},"p2",[312,8839,336],{"class":1436},[312,8841,8842],{"class":324},"arr;\n",[312,8844,8845,8847,8849,8851,8853,8855,8857,8859,8861,8863,8865,8867],{"class":314,"line":3423},[312,8846,5006],{"class":1436},[312,8848,3464],{"class":324},[312,8850,1956],{"class":1436},[312,8852,4837],{"class":324},[312,8854,336],{"class":1436},[312,8856,858],{"class":488},[312,8858,4844],{"class":324},[312,8860,325],{"class":1436},[312,8862,2391],{"class":488},[312,8864,4844],{"class":324},[312,8866,4097],{"class":1436},[312,8868,1959],{"class":324},[312,8870,8871],{"class":314,"line":3429},[312,8872,3835],{"class":324},[312,8874,8875,8877,8879,8881,8883],{"class":314,"line":3434},[312,8876,5256],{"class":324},[312,8878,8223],{"class":1436},[312,8880,8837],{"class":324},[312,8882,2985],{"class":1436},[312,8884,3007],{"class":324},[312,8886,8887,8890,8892],{"class":314,"line":3448},[312,8888,8889],{"class":324},"        p2",[312,8891,4097],{"class":1436},[312,8893,498],{"class":324},[312,8895,8896],{"class":314,"line":3453},[312,8897,3992],{"class":324},[312,8899,8900],{"class":314,"line":3459},[312,8901,515],{"class":324},[14,8903,8905],{"id":8904},"_37指针和函数","3.7指针和函数",[24,8907,8908],{},"利用指针做函数参数，可以修改实参的值",[24,8910,8911],{},"值传递：只改变形参，不改变实参",[24,8913,8914],{},"地址传递：",[303,8916,8918],{"className":1942,"code":8917,"language":1944,"meta":308,"style":308},"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",[119,8919,8920,8945,8949,8961,8972,8982,8986,8994,8998,9010,9022,9027,9043,9058,9073],{"__ignoreMap":308},[312,8921,8922,8924,8926,8928,8930,8932,8935,8937,8939,8941,8943],{"class":314,"line":315},[312,8923,7168],{"class":1436},[312,8925,7171],{"class":332},[312,8927,1576],{"class":324},[312,8929,1956],{"class":1436},[312,8931,8322],{"class":1436},[312,8933,8934],{"class":1579},"p1",[312,8936,2323],{"class":324},[312,8938,1956],{"class":1436},[312,8940,8322],{"class":1436},[312,8942,8837],{"class":1579},[312,8944,1959],{"class":324},[312,8946,8947],{"class":314,"line":171},[312,8948,3353],{"class":324},[312,8950,8951,8953,8955,8958],{"class":314,"line":274},[312,8952,3790],{"class":1436},[312,8954,6060],{"class":324},[312,8956,8957],{"class":1436},"=*",[312,8959,8960],{"class":324},"p1;\n",[312,8962,8963,8965,8967,8969],{"class":314,"line":298},[312,8964,8207],{"class":1436},[312,8966,8934],{"class":324},[312,8968,8957],{"class":1436},[312,8970,8971],{"class":324},"p2;\n",[312,8973,8974,8976,8978,8980],{"class":314,"line":974},[312,8975,8207],{"class":1436},[312,8977,8837],{"class":324},[312,8979,336],{"class":1436},[312,8981,6085],{"class":324},[312,8983,8984],{"class":314,"line":980},[312,8985,515],{"class":324},[312,8987,8988,8990,8992],{"class":314,"line":997},[312,8989,1956],{"class":1436},[312,8991,3778],{"class":332},[312,8993,3781],{"class":324},[312,8995,8996],{"class":314,"line":1003},[312,8997,3353],{"class":324},[312,8999,9000,9002,9004,9006,9008],{"class":314,"line":1020},[312,9001,3790],{"class":1436},[312,9003,3206],{"class":324},[312,9005,336],{"class":1436},[312,9007,2391],{"class":488},[312,9009,498],{"class":324},[312,9011,9012,9014,9016,9018,9020],{"class":314,"line":1026},[312,9013,3790],{"class":1436},[312,9015,4638],{"class":324},[312,9017,336],{"class":1436},[312,9019,1546],{"class":488},[312,9021,498],{"class":324},[312,9023,9024],{"class":314,"line":3418},[312,9025,9026],{"class":318},"    \u002F\u002F地址传递\n",[312,9028,9029,9031,9033,9035,9038,9040],{"class":314,"line":3423},[312,9030,7365],{"class":332},[312,9032,1576],{"class":324},[312,9034,2298],{"class":1436},[312,9036,9037],{"class":324},"a,",[312,9039,2298],{"class":1436},[312,9041,9042],{"class":324},"b);\n",[312,9044,9045,9047,9049,9051,9053,9055],{"class":314,"line":3429},[312,9046,3358],{"class":324},[312,9048,2985],{"class":1436},[312,9050,164],{"class":324},[312,9052,2985],{"class":1436},[312,9054,3050],{"class":324},[312,9056,9057],{"class":318},"\u002F\u002F20\n",[312,9059,9060,9062,9064,9066,9068,9070],{"class":314,"line":3434},[312,9061,3358],{"class":324},[312,9063,2985],{"class":1436},[312,9065,2208],{"class":324},[312,9067,2985],{"class":1436},[312,9069,3050],{"class":324},[312,9071,9072],{"class":318},"\u002F\u002F10\n",[312,9074,9075],{"class":314,"line":3448},[312,9076,515],{"class":324},[24,9078,9079],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,9081,9083],{"id":9082},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[24,9085,9086],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[24,9088,9089,9090,9092],{},"例如数组：int arr",[312,9091,2391],{},"={4,3,6,9,1,2,10,8,7,5}",[303,9094,9096],{"className":1942,"code":9095,"language":1944,"meta":308,"style":308},"#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",[119,9097,9098,9104,9114,9138,9142,9173,9177,9211,9215,9233,9237,9248,9263,9278,9282,9286,9290,9294,9298,9306,9310,9315,9369,9381,9393,9398,9406,9410,9415,9440,9444,9458,9467,9471],{"__ignoreMap":308},[312,9099,9100,9102],{"class":314,"line":315},[312,9101,3755],{"class":1436},[312,9103,3758],{"class":339},[312,9105,9106,9108,9110,9112],{"class":314,"line":171},[312,9107,3763],{"class":1436},[312,9109,3766],{"class":1436},[312,9111,3769],{"class":332},[312,9113,498],{"class":324},[312,9115,9116,9118,9121,9123,9125,9127,9129,9131,9133,9136],{"class":314,"line":274},[312,9117,7168],{"class":1436},[312,9119,9120],{"class":332}," bubbleSort",[312,9122,1576],{"class":324},[312,9124,1956],{"class":1436},[312,9126,8322],{"class":1436},[312,9128,24],{"class":1579},[312,9130,2323],{"class":324},[312,9132,1956],{"class":1436},[312,9134,9135],{"class":1579}," len",[312,9137,1959],{"class":324},[312,9139,9140],{"class":314,"line":298},[312,9141,3353],{"class":324},[312,9143,9144,9146,9148,9150,9152,9154,9156,9158,9160,9163,9165,9167,9169,9171],{"class":314,"line":974},[312,9145,5006],{"class":1436},[312,9147,1576],{"class":324},[312,9149,1956],{"class":1436},[312,9151,4837],{"class":324},[312,9153,336],{"class":1436},[312,9155,858],{"class":488},[312,9157,4844],{"class":324},[312,9159,325],{"class":1436},[312,9161,9162],{"class":324},"len",[312,9164,2477],{"class":1436},[312,9166,1433],{"class":488},[312,9168,4844],{"class":324},[312,9170,4097],{"class":1436},[312,9172,1959],{"class":324},[312,9174,9175],{"class":314,"line":980},[312,9176,3835],{"class":324},[312,9178,9179,9181,9183,9185,9187,9189,9191,9193,9195,9197,9199,9201,9203,9205,9207,9209],{"class":314,"line":997},[312,9180,5208],{"class":1436},[312,9182,1576],{"class":324},[312,9184,1956],{"class":1436},[312,9186,5215],{"class":324},[312,9188,336],{"class":1436},[312,9190,858],{"class":488},[312,9192,5222],{"class":324},[312,9194,325],{"class":1436},[312,9196,9162],{"class":324},[312,9198,2477],{"class":1436},[312,9200,2386],{"class":324},[312,9202,2477],{"class":1436},[312,9204,1433],{"class":488},[312,9206,5222],{"class":324},[312,9208,4097],{"class":1436},[312,9210,1959],{"class":324},[312,9212,9213],{"class":314,"line":1003},[312,9214,4315],{"class":324},[312,9216,9217,9219,9222,9224,9227,9229,9231],{"class":314,"line":1020},[312,9218,6447],{"class":1436},[312,9220,9221],{"class":324},"(p[j]",[312,9223,2902],{"class":1436},[312,9225,9226],{"class":324},"p[j",[312,9228,2426],{"class":1436},[312,9230,1433],{"class":488},[312,9232,6462],{"class":324},[312,9234,9235],{"class":314,"line":1026},[312,9236,6467],{"class":324},[312,9238,9239,9241,9243,9245],{"class":314,"line":3418},[312,9240,6472],{"class":1436},[312,9242,6060],{"class":324},[312,9244,336],{"class":1436},[312,9246,9247],{"class":324},"p[j];\n",[312,9249,9250,9253,9255,9257,9259,9261],{"class":314,"line":3423},[312,9251,9252],{"class":324},"                p[j]",[312,9254,336],{"class":1436},[312,9256,9226],{"class":324},[312,9258,2426],{"class":1436},[312,9260,1433],{"class":488},[312,9262,6495],{"class":324},[312,9264,9265,9268,9270,9272,9274,9276],{"class":314,"line":3429},[312,9266,9267],{"class":324},"                p[j",[312,9269,2426],{"class":1436},[312,9271,1433],{"class":488},[312,9273,2882],{"class":324},[312,9275,336],{"class":1436},[312,9277,6085],{"class":324},[312,9279,9280],{"class":314,"line":3434},[312,9281,6515],{"class":324},[312,9283,9284],{"class":314,"line":3448},[312,9285,4334],{"class":324},[312,9287,9288],{"class":314,"line":3453},[312,9289,3992],{"class":324},[312,9291,9292],{"class":314,"line":3459},[312,9293,515],{"class":324},[312,9295,9296],{"class":314,"line":3480},[312,9297,4205],{"emptyLinePlaceholder":1881},[312,9299,9300,9302,9304],{"class":314,"line":3485},[312,9301,1956],{"class":1436},[312,9303,3778],{"class":332},[312,9305,3781],{"class":324},[312,9307,9308],{"class":314,"line":3499},[312,9309,3353],{"class":324},[312,9311,9312],{"class":314,"line":3504},[312,9313,9314],{"class":318},"    \u002F\u002F 1.创建数组\n",[312,9316,9317,9319,9321,9323,9325,9327,9329,9331,9333,9335,9337,9339,9341,9343,9345,9347,9349,9351,9353,9355,9357,9359,9361,9363,9365,9367],{"class":314,"line":3533},[312,9318,3790],{"class":1436},[312,9320,5767],{"class":324},[312,9322,2391],{"class":488},[312,9324,2882],{"class":324},[312,9326,336],{"class":1436},[312,9328,2840],{"class":324},[312,9330,2238],{"class":488},[312,9332,2323],{"class":324},[312,9334,2021],{"class":488},[312,9336,2323],{"class":324},[312,9338,2289],{"class":488},[312,9340,2323],{"class":324},[312,9342,2365],{"class":488},[312,9344,2323],{"class":324},[312,9346,1433],{"class":488},[312,9348,2323],{"class":324},[312,9350,2027],{"class":488},[312,9352,2323],{"class":324},[312,9354,2391],{"class":488},[312,9356,2323],{"class":324},[312,9358,2340],{"class":488},[312,9360,2323],{"class":324},[312,9362,2314],{"class":488},[312,9364,2323],{"class":324},[312,9366,2264],{"class":488},[312,9368,5800],{"class":324},[312,9370,9371,9373,9375,9377,9379],{"class":314,"line":3538},[312,9372,3790],{"class":1436},[312,9374,9135],{"class":324},[312,9376,336],{"class":1436},[312,9378,2391],{"class":488},[312,9380,498],{"class":324},[312,9382,9383,9385,9387,9389,9391],{"class":314,"line":3555},[312,9384,3790],{"class":1436},[312,9386,8322],{"class":1436},[312,9388,24],{"class":324},[312,9390,336],{"class":1436},[312,9392,8842],{"class":324},[312,9394,9395],{"class":314,"line":3560},[312,9396,9397],{"class":318},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[312,9399,9400,9403],{"class":314,"line":3565},[312,9401,9402],{"class":332},"    bubbleSort",[312,9404,9405],{"class":324},"(p,len);\n",[312,9407,9408],{"class":314,"line":3570},[312,9409,4205],{"emptyLinePlaceholder":1881},[312,9411,9412],{"class":314,"line":3584},[312,9413,9414],{"class":318},"    \u002F\u002F 3.打印排序后的数组\n",[312,9416,9417,9419,9421,9423,9425,9427,9429,9431,9433,9436,9438],{"class":314,"line":3589},[312,9418,5006],{"class":1436},[312,9420,3464],{"class":324},[312,9422,1956],{"class":1436},[312,9424,4837],{"class":324},[312,9426,336],{"class":1436},[312,9428,858],{"class":488},[312,9430,5019],{"class":324},[312,9432,325],{"class":1436},[312,9434,9435],{"class":324},"len; i",[312,9437,4097],{"class":1436},[312,9439,1959],{"class":324},[312,9441,9442],{"class":314,"line":4382},[312,9443,3835],{"class":324},[312,9445,9446,9448,9450,9452,9454,9456],{"class":314,"line":4396},[312,9447,5256],{"class":324},[312,9449,8223],{"class":1436},[312,9451,24],{"class":324},[312,9453,2985],{"class":1436},[312,9455,495],{"class":339},[312,9457,498],{"class":324},[312,9459,9460,9463,9465],{"class":314,"line":4404},[312,9461,9462],{"class":324},"        p",[312,9464,4097],{"class":1436},[312,9466,498],{"class":324},[312,9468,9469],{"class":314,"line":4409},[312,9470,3992],{"class":324},[312,9472,9473],{"class":314,"line":4415},[312,9474,515],{"class":324},[1856,9476,9477],{},"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":308,"searchDepth":171,"depth":171,"links":9479},[9480,9481,9482,9483,9484,9485,9486,9487],{"id":8087,"depth":171,"text":8088},{"id":8253,"depth":171,"text":8254},{"id":8409,"depth":171,"text":8410},{"id":8487,"depth":171,"text":8488},{"id":8566,"depth":171,"text":8567},{"id":8665,"depth":171,"text":8666},{"id":8904,"depth":171,"text":8905},{"id":9082,"depth":171,"text":9083},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":8076,"description":8084},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9494,"title":9495,"body":9496,"description":9503,"extension":1879,"meta":12477,"navigation":1881,"path":12478,"seo":12479,"stem":12480,"__hash__":12481},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9497,"toc":12468},[9498,9501,9504,9508,9511,9514,9525,9863,9866,9870,9873,9880,10135,10139,10142,10145,10300,10304,10307,10310,10516,10520,10523,10826,10829,10837,10841,10844,10995,10997,11008,11065,11069,11074,11731,11739,11742,11836,11839,12459,12465],[10,9499,9495],{"id":9500},"_4结构体",[24,9502,9503],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9505,9507],{"id":9506},"_41结构体定义与使用","4.1结构体定义与使用",[24,9509,9510],{},"语法：struct 结构体名 {结构体成员列表}；",[24,9512,9513],{},"通过结构体创建变量的方式：",[243,9515,9516,9519,9522],{},[143,9517,9518],{},"struct 结构体名 变量名",[143,9520,9521],{},"struct 结构体名 变量名={成员1值，成员2值...}",[143,9523,9524],{},"定义结构体时顺便创建变量",[303,9526,9528],{"className":1942,"code":9527,"language":1944,"meta":308,"style":308},"#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",[119,9529,9530,9536,9546,9553,9558,9566,9570,9575,9579,9584,9589,9594,9601,9606,9613,9617,9624,9628,9632,9636,9640,9644,9648,9654,9658,9664,9672,9680,9684,9689,9694,9705,9710,9722,9733,9744,9749,9773,9778,9784,9811,9816,9822,9834,9846,9858],{"__ignoreMap":308},[312,9531,9532,9534],{"class":314,"line":315},[312,9533,3755],{"class":1436},[312,9535,3758],{"class":339},[312,9537,9538,9540,9542,9544],{"class":314,"line":171},[312,9539,3763],{"class":1436},[312,9541,3766],{"class":1436},[312,9543,3769],{"class":332},[312,9545,498],{"class":324},[312,9547,9548,9550],{"class":314,"line":274},[312,9549,3755],{"class":1436},[312,9551,9552],{"class":339},"\u003Cstring>\n",[312,9554,9555],{"class":314,"line":298},[312,9556,9557],{"class":318},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[312,9559,9560,9563],{"class":314,"line":974},[312,9561,9562],{"class":1436},"struct",[312,9564,9565],{"class":332}," Student\n",[312,9567,9568],{"class":314,"line":980},[312,9569,3353],{"class":324},[312,9571,9572],{"class":314,"line":997},[312,9573,9574],{"class":318},"    \u002F\u002F成员列表\n",[312,9576,9577],{"class":314,"line":1003},[312,9578,4205],{"emptyLinePlaceholder":1881},[312,9580,9581],{"class":314,"line":1020},[312,9582,9583],{"class":318},"    \u002F\u002F姓名\n",[312,9585,9586],{"class":314,"line":1026},[312,9587,9588],{"class":324},"    string name;\n",[312,9590,9591],{"class":314,"line":3418},[312,9592,9593],{"class":318},"    \u002F\u002F年龄\n",[312,9595,9596,9598],{"class":314,"line":3423},[312,9597,3790],{"class":1436},[312,9599,9600],{"class":324}," age;\n",[312,9602,9603],{"class":314,"line":3429},[312,9604,9605],{"class":318},"    \u002F\u002F分数\n",[312,9607,9608,9610],{"class":314,"line":3434},[312,9609,3790],{"class":1436},[312,9611,9612],{"class":324}," score;\n",[312,9614,9615],{"class":314,"line":3448},[312,9616,5800],{"class":324},[312,9618,9619,9621],{"class":314,"line":3453},[312,9620,9562],{"class":1436},[312,9622,9623],{"class":332}," School\n",[312,9625,9626],{"class":314,"line":3459},[312,9627,3353],{"class":324},[312,9629,9630],{"class":314,"line":3480},[312,9631,9574],{"class":318},[312,9633,9634],{"class":314,"line":3485},[312,9635,4205],{"emptyLinePlaceholder":1881},[312,9637,9638],{"class":314,"line":3499},[312,9639,9583],{"class":318},[312,9641,9642],{"class":314,"line":3504},[312,9643,9588],{"class":324},[312,9645,9646],{"class":314,"line":3533},[312,9647,9593],{"class":318},[312,9649,9650,9652],{"class":314,"line":3538},[312,9651,3790],{"class":1436},[312,9653,9600],{"class":324},[312,9655,9656],{"class":314,"line":3555},[312,9657,9605],{"class":318},[312,9659,9660,9662],{"class":314,"line":3560},[312,9661,3790],{"class":1436},[312,9663,9612],{"class":324},[312,9665,9666,9669],{"class":314,"line":3565},[312,9667,9668],{"class":324},"} s3;",[312,9670,9671],{"class":318}," \u002F\u002F创建结构体时就创建了变量\n",[312,9673,9674,9676,9678],{"class":314,"line":3570},[312,9675,1956],{"class":1436},[312,9677,3778],{"class":332},[312,9679,3781],{"class":324},[312,9681,9682],{"class":314,"line":3584},[312,9683,3353],{"class":324},[312,9685,9686],{"class":314,"line":3589},[312,9687,9688],{"class":318},"    \u002F\u002F2.通过学生类型创建具体学生\n",[312,9690,9691],{"class":314,"line":4382},[312,9692,9693],{"class":318},"    \u002F\u002F2.1 struct Student s1;\n",[312,9695,9696,9699,9702],{"class":314,"line":4396},[312,9697,9698],{"class":1436},"    struct",[312,9700,9701],{"class":332}," Student",[312,9703,9704],{"class":324}," s1;\n",[312,9706,9707],{"class":314,"line":4404},[312,9708,9709],{"class":318},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[312,9711,9712,9715,9717,9720],{"class":314,"line":4409},[312,9713,9714],{"class":324},"    s1.name",[312,9716,336],{"class":1436},[312,9718,9719],{"class":339},"\"张三\"",[312,9721,498],{"class":324},[312,9723,9724,9727,9729,9731],{"class":314,"line":4415},[312,9725,9726],{"class":324},"    s1.age",[312,9728,336],{"class":1436},[312,9730,2595],{"class":488},[312,9732,498],{"class":324},[312,9734,9735,9738,9740,9742],{"class":314,"line":4421},[312,9736,9737],{"class":324},"    s1.score",[312,9739,336],{"class":1436},[312,9741,2199],{"class":488},[312,9743,498],{"class":324},[312,9745,9746],{"class":314,"line":4426},[312,9747,9748],{"class":318},"    \u002F\u002F输出结果\n",[312,9750,9752,9754,9756,9759,9761,9764,9766,9769,9771],{"class":314,"line":9751},37,[312,9753,3358],{"class":324},[312,9755,2985],{"class":1436},[312,9757,9758],{"class":324},"s1.name",[312,9760,2985],{"class":1436},[312,9762,9763],{"class":324},"s1.age",[312,9765,2985],{"class":1436},[312,9767,9768],{"class":324},"s1.score",[312,9770,2985],{"class":1436},[312,9772,3007],{"class":324},[312,9774,9776],{"class":314,"line":9775},38,[312,9777,4205],{"emptyLinePlaceholder":1881},[312,9779,9781],{"class":314,"line":9780},39,[312,9782,9783],{"class":318},"    \u002F\u002F2.2 struct Student s2={...}\n",[312,9785,9787,9789,9791,9794,9796,9798,9801,9803,9805,9807,9809],{"class":314,"line":9786},40,[312,9788,9698],{"class":1436},[312,9790,9701],{"class":332},[312,9792,9793],{"class":324}," s2",[312,9795,336],{"class":1436},[312,9797,2840],{"class":324},[312,9799,9800],{"class":339},"\"王五\"",[312,9802,2323],{"class":324},[312,9804,2595],{"class":488},[312,9806,2323],{"class":324},[312,9808,2199],{"class":488},[312,9810,5800],{"class":324},[312,9812,9814],{"class":314,"line":9813},41,[312,9815,4205],{"emptyLinePlaceholder":1881},[312,9817,9819],{"class":314,"line":9818},42,[312,9820,9821],{"class":318},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[312,9823,9825,9828,9830,9832],{"class":314,"line":9824},43,[312,9826,9827],{"class":324},"    s3.name",[312,9829,336],{"class":1436},[312,9831,5483],{"class":339},[312,9833,498],{"class":324},[312,9835,9837,9840,9842,9844],{"class":314,"line":9836},44,[312,9838,9839],{"class":324},"    s3.age",[312,9841,336],{"class":1436},[312,9843,2595],{"class":488},[312,9845,498],{"class":324},[312,9847,9849,9852,9854,9856],{"class":314,"line":9848},45,[312,9850,9851],{"class":324},"    s3.score",[312,9853,336],{"class":1436},[312,9855,1546],{"class":488},[312,9857,498],{"class":324},[312,9859,9861],{"class":314,"line":9860},46,[312,9862,515],{"class":324},[24,9864,9865],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,9867,9869],{"id":9868},"_42结构体数组","4.2结构体数组",[24,9871,9872],{},"将自定义的结构体放入到数组中方便维护",[24,9874,9875,9876,9879],{},"语法：struct 结构体名 数组名",[312,9877,9878],{},"元素个数","={ {}，{},...{} };",[303,9881,9883],{"className":1942,"code":9882,"language":1944,"meta":308,"style":308},"#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",[119,9884,9885,9891,9901,9907,9912,9918,9922,9926,9932,9938,9942,9946,9954,9958,9963,9978,9982,9998,10014,10018,10023,10039,10054,10069,10074,10100,10104,10127,10131],{"__ignoreMap":308},[312,9886,9887,9889],{"class":314,"line":315},[312,9888,3755],{"class":1436},[312,9890,3758],{"class":339},[312,9892,9893,9895,9897,9899],{"class":314,"line":171},[312,9894,3763],{"class":1436},[312,9896,3766],{"class":1436},[312,9898,3769],{"class":332},[312,9900,498],{"class":324},[312,9902,9903,9905],{"class":314,"line":274},[312,9904,3755],{"class":1436},[312,9906,9552],{"class":339},[312,9908,9909],{"class":314,"line":298},[312,9910,9911],{"class":318},"\u002F\u002F1.定义结构体\n",[312,9913,9914,9916],{"class":314,"line":974},[312,9915,9562],{"class":1436},[312,9917,9565],{"class":332},[312,9919,9920],{"class":314,"line":980},[312,9921,3353],{"class":324},[312,9923,9924],{"class":314,"line":997},[312,9925,9588],{"class":324},[312,9927,9928,9930],{"class":314,"line":1003},[312,9929,3790],{"class":1436},[312,9931,9600],{"class":324},[312,9933,9934,9936],{"class":314,"line":1020},[312,9935,3790],{"class":1436},[312,9937,9612],{"class":324},[312,9939,9940],{"class":314,"line":1026},[312,9941,4205],{"emptyLinePlaceholder":1881},[312,9943,9944],{"class":314,"line":3418},[312,9945,5800],{"class":324},[312,9947,9948,9950,9952],{"class":314,"line":3423},[312,9949,1956],{"class":1436},[312,9951,3778],{"class":332},[312,9953,3781],{"class":324},[312,9955,9956],{"class":314,"line":3429},[312,9957,3353],{"class":324},[312,9959,9960],{"class":314,"line":3434},[312,9961,9962],{"class":318},"    \u002F\u002F2.创建结构体数组\n",[312,9964,9965,9967,9969,9972,9974,9976],{"class":314,"line":3448},[312,9966,9698],{"class":1436},[312,9968,9701],{"class":332},[312,9970,9971],{"class":324}," stuArray[",[312,9973,2027],{"class":488},[312,9975,2882],{"class":324},[312,9977,6713],{"class":1436},[312,9979,9980],{"class":314,"line":3453},[312,9981,3835],{"class":324},[312,9983,9984,9986,9988,9990,9992,9994,9996],{"class":314,"line":3459},[312,9985,6722],{"class":324},[312,9987,9719],{"class":339},[312,9989,2323],{"class":324},[312,9991,2595],{"class":488},[312,9993,2323],{"class":324},[312,9995,2256],{"class":488},[312,9997,6735],{"class":324},[312,9999,10000,10002,10004,10006,10008,10010,10012],{"class":314,"line":3480},[312,10001,6722],{"class":324},[312,10003,5483],{"class":339},[312,10005,2323],{"class":324},[312,10007,2520],{"class":488},[312,10009,2323],{"class":324},[312,10011,2520],{"class":488},[312,10013,515],{"class":324},[312,10015,10016],{"class":314,"line":3485},[312,10017,3992],{"class":324},[312,10019,10020],{"class":314,"line":3499},[312,10021,10022],{"class":318},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[312,10024,10025,10028,10030,10033,10035,10037],{"class":314,"line":3504},[312,10026,10027],{"class":324},"    stuArray[",[312,10029,1433],{"class":488},[312,10031,10032],{"class":324},"].name",[312,10034,336],{"class":1436},[312,10036,5506],{"class":339},[312,10038,498],{"class":324},[312,10040,10041,10043,10045,10048,10050,10052],{"class":314,"line":3533},[312,10042,10027],{"class":324},[312,10044,1433],{"class":488},[312,10046,10047],{"class":324},"].age",[312,10049,336],{"class":1436},[312,10051,2027],{"class":488},[312,10053,498],{"class":324},[312,10055,10056,10058,10060,10063,10065,10067],{"class":314,"line":3538},[312,10057,10027],{"class":324},[312,10059,1433],{"class":488},[312,10061,10062],{"class":324},"].score",[312,10064,336],{"class":1436},[312,10066,2027],{"class":488},[312,10068,498],{"class":324},[312,10070,10071],{"class":314,"line":3555},[312,10072,10073],{"class":318},"    \u002F\u002F4.遍历结构体数组\n",[312,10075,10076,10078,10080,10082,10084,10086,10088,10090,10092,10094,10096,10098],{"class":314,"line":3560},[312,10077,5006],{"class":1436},[312,10079,3464],{"class":324},[312,10081,1956],{"class":1436},[312,10083,4837],{"class":324},[312,10085,336],{"class":1436},[312,10087,858],{"class":488},[312,10089,4844],{"class":324},[312,10091,325],{"class":1436},[312,10093,2027],{"class":488},[312,10095,4844],{"class":324},[312,10097,4097],{"class":1436},[312,10099,1959],{"class":324},[312,10101,10102],{"class":314,"line":3565},[312,10103,3835],{"class":324},[312,10105,10106,10108,10110,10113,10115,10118,10120,10123,10125],{"class":314,"line":3570},[312,10107,5256],{"class":324},[312,10109,2985],{"class":1436},[312,10111,10112],{"class":324},"stuArray[i].name",[312,10114,2985],{"class":1436},[312,10116,10117],{"class":324},"stuArray[i].age",[312,10119,2985],{"class":1436},[312,10121,10122],{"class":324},"stuArray[i].score",[312,10124,2985],{"class":1436},[312,10126,3007],{"class":324},[312,10128,10129],{"class":314,"line":3584},[312,10130,3992],{"class":324},[312,10132,10133],{"class":314,"line":3589},[312,10134,515],{"class":324},[14,10136,10138],{"id":10137},"_43结构体指针","4.3结构体指针",[24,10140,10141],{},"作用：通过指针访问结构体中的成员",[24,10143,10144],{},"利用操作符->可以通过结构体指针访问结构体属性",[303,10146,10148],{"className":1942,"code":10147,"language":1944,"meta":308,"style":308},"#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",[119,10149,10150,10156,10166,10172,10176,10182,10186,10190,10196,10202,10206,10214,10218,10223,10248,10253,10268,10273,10296],{"__ignoreMap":308},[312,10151,10152,10154],{"class":314,"line":315},[312,10153,3755],{"class":1436},[312,10155,3758],{"class":339},[312,10157,10158,10160,10162,10164],{"class":314,"line":171},[312,10159,3763],{"class":1436},[312,10161,3766],{"class":1436},[312,10163,3769],{"class":332},[312,10165,498],{"class":324},[312,10167,10168,10170],{"class":314,"line":274},[312,10169,3755],{"class":1436},[312,10171,9552],{"class":339},[312,10173,10174],{"class":314,"line":298},[312,10175,9911],{"class":318},[312,10177,10178,10180],{"class":314,"line":974},[312,10179,9562],{"class":1436},[312,10181,9565],{"class":332},[312,10183,10184],{"class":314,"line":980},[312,10185,3353],{"class":324},[312,10187,10188],{"class":314,"line":997},[312,10189,9588],{"class":324},[312,10191,10192,10194],{"class":314,"line":1003},[312,10193,3790],{"class":1436},[312,10195,9600],{"class":324},[312,10197,10198,10200],{"class":314,"line":1020},[312,10199,3790],{"class":1436},[312,10201,9612],{"class":324},[312,10203,10204],{"class":314,"line":1026},[312,10205,5800],{"class":324},[312,10207,10208,10210,10212],{"class":314,"line":3418},[312,10209,1956],{"class":1436},[312,10211,3778],{"class":332},[312,10213,3781],{"class":324},[312,10215,10216],{"class":314,"line":3423},[312,10217,3353],{"class":324},[312,10219,10220],{"class":314,"line":3429},[312,10221,10222],{"class":318},"    \u002F\u002F创建学生结构体变量\n",[312,10224,10225,10227,10229,10232,10234,10236,10238,10240,10242,10244,10246],{"class":314,"line":3434},[312,10226,9698],{"class":1436},[312,10228,9701],{"class":332},[312,10230,10231],{"class":324}," s",[312,10233,336],{"class":1436},[312,10235,2840],{"class":324},[312,10237,9719],{"class":339},[312,10239,2323],{"class":324},[312,10241,2595],{"class":488},[312,10243,2323],{"class":324},[312,10245,3528],{"class":488},[312,10247,5800],{"class":324},[312,10249,10250],{"class":314,"line":3448},[312,10251,10252],{"class":318},"    \u002F\u002F通过指针指向结构体变量\n",[312,10254,10255,10257,10259,10261,10263,10265],{"class":314,"line":3453},[312,10256,9698],{"class":1436},[312,10258,9701],{"class":332},[312,10260,8322],{"class":1436},[312,10262,24],{"class":324},[312,10264,8143],{"class":1436},[312,10266,10267],{"class":324},"s\n",[312,10269,10270],{"class":314,"line":3459},[312,10271,10272],{"class":318},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[312,10274,10275,10277,10279,10282,10284,10287,10289,10292,10294],{"class":314,"line":3480},[312,10276,3358],{"class":324},[312,10278,2985],{"class":1436},[312,10280,10281],{"class":324},"p->name",[312,10283,2985],{"class":1436},[312,10285,10286],{"class":324},"p->age",[312,10288,2985],{"class":1436},[312,10290,10291],{"class":324},"p->score",[312,10293,2985],{"class":1436},[312,10295,3007],{"class":324},[312,10297,10298],{"class":314,"line":3485},[312,10299,515],{"class":324},[14,10301,10303],{"id":10302},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[24,10305,10306],{},"作用：结构体中的成员可以是另一个结构体",[24,10308,10309],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[303,10311,10313],{"className":1942,"code":10312,"language":1944,"meta":308,"style":308},"#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",[119,10314,10315,10321,10331,10337,10342,10350,10354,10358,10364,10370,10374,10379,10386,10390,10397,10401,10407,10412,10416,10424,10428,10433,10438,10443,10454,10466,10477,10490,10501,10512],{"__ignoreMap":308},[312,10316,10317,10319],{"class":314,"line":315},[312,10318,3755],{"class":1436},[312,10320,3758],{"class":339},[312,10322,10323,10325,10327,10329],{"class":314,"line":171},[312,10324,3763],{"class":1436},[312,10326,3766],{"class":1436},[312,10328,3769],{"class":332},[312,10330,498],{"class":324},[312,10332,10333,10335],{"class":314,"line":274},[312,10334,3755],{"class":1436},[312,10336,9552],{"class":339},[312,10338,10339],{"class":314,"line":298},[312,10340,10341],{"class":318},"\u002F\u002F定义学生结构体\n",[312,10343,10344,10346,10348],{"class":314,"line":974},[312,10345,9562],{"class":1436},[312,10347,9701],{"class":332},[312,10349,4479],{"class":324},[312,10351,10352],{"class":314,"line":980},[312,10353,3353],{"class":324},[312,10355,10356],{"class":314,"line":997},[312,10357,9588],{"class":324},[312,10359,10360,10362],{"class":314,"line":1003},[312,10361,3790],{"class":1436},[312,10363,9600],{"class":324},[312,10365,10366,10368],{"class":314,"line":1020},[312,10367,3790],{"class":1436},[312,10369,9612],{"class":324},[312,10371,10372],{"class":314,"line":1026},[312,10373,515],{"class":324},[312,10375,10376],{"class":314,"line":3418},[312,10377,10378],{"class":318},"\u002F\u002F定义老师结构体\n",[312,10380,10381,10383],{"class":314,"line":3423},[312,10382,9562],{"class":1436},[312,10384,10385],{"class":332}," Teacher\n",[312,10387,10388],{"class":314,"line":3429},[312,10389,3353],{"class":324},[312,10391,10392,10394],{"class":314,"line":3434},[312,10393,3790],{"class":1436},[312,10395,10396],{"class":324}," id;\n",[312,10398,10399],{"class":314,"line":3448},[312,10400,9588],{"class":324},[312,10402,10403,10405],{"class":314,"line":3453},[312,10404,3790],{"class":1436},[312,10406,9600],{"class":324},[312,10408,10409],{"class":314,"line":3459},[312,10410,10411],{"class":324},"    Student stu;\n",[312,10413,10414],{"class":314,"line":3480},[312,10415,515],{"class":324},[312,10417,10418,10420,10422],{"class":314,"line":3485},[312,10419,1956],{"class":1436},[312,10421,3778],{"class":332},[312,10423,7782],{"class":324},[312,10425,10426],{"class":314,"line":3499},[312,10427,3353],{"class":324},[312,10429,10430],{"class":314,"line":3504},[312,10431,10432],{"class":318},"    \u002F\u002F结构体嵌套结构体\n",[312,10434,10435],{"class":314,"line":3533},[312,10436,10437],{"class":318},"    \u002F\u002F创建老师\n",[312,10439,10440],{"class":314,"line":3538},[312,10441,10442],{"class":324},"    Teacher t;\n",[312,10444,10445,10448,10450,10452],{"class":314,"line":3555},[312,10446,10447],{"class":324},"    t.id",[312,10449,336],{"class":1436},[312,10451,2256],{"class":488},[312,10453,498],{"class":324},[312,10455,10456,10459,10461,10464],{"class":314,"line":3560},[312,10457,10458],{"class":324},"    t.name",[312,10460,336],{"class":1436},[312,10462,10463],{"class":339},"\"老王\"",[312,10465,498],{"class":324},[312,10467,10468,10471,10473,10475],{"class":314,"line":3565},[312,10469,10470],{"class":324},"    t.age",[312,10472,336],{"class":1436},[312,10474,2595],{"class":488},[312,10476,498],{"class":324},[312,10478,10479,10482,10484,10487],{"class":314,"line":3570},[312,10480,10481],{"class":324},"    t.stu.name",[312,10483,336],{"class":1436},[312,10485,10486],{"class":339},"\"小王\"",[312,10488,10489],{"class":324},"；\n",[312,10491,10492,10495,10497,10499],{"class":314,"line":3584},[312,10493,10494],{"class":324},"    t.stu.age",[312,10496,336],{"class":1436},[312,10498,1546],{"class":488},[312,10500,498],{"class":324},[312,10502,10503,10506,10508,10510],{"class":314,"line":3589},[312,10504,10505],{"class":324},"    t.stu.score",[312,10507,336],{"class":1436},[312,10509,2289],{"class":488},[312,10511,498],{"class":324},[312,10513,10514],{"class":314,"line":4382},[312,10515,515],{"class":324},[14,10517,10519],{"id":10518},"_45结构体做函数参数","4.5结构体做函数参数",[24,10521,10522],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[303,10524,10526],{"className":1942,"code":10525,"language":1944,"meta":308,"style":308},"#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",[119,10527,10528,10534,10544,10550,10556,10560,10564,10570,10576,10580,10585,10590,10607,10611,10644,10648,10653,10672,10676,10707,10711,10719,10723,10732,10744,10756,10768,10781,10789,10802,10814,10822],{"__ignoreMap":308},[312,10529,10530,10532],{"class":314,"line":315},[312,10531,3755],{"class":1436},[312,10533,3758],{"class":339},[312,10535,10536,10538,10540,10542],{"class":314,"line":171},[312,10537,3763],{"class":1436},[312,10539,3766],{"class":1436},[312,10541,3769],{"class":332},[312,10543,498],{"class":324},[312,10545,10546,10548],{"class":314,"line":274},[312,10547,3755],{"class":1436},[312,10549,9552],{"class":339},[312,10551,10552,10554],{"class":314,"line":298},[312,10553,9562],{"class":1436},[312,10555,9565],{"class":332},[312,10557,10558],{"class":314,"line":974},[312,10559,3353],{"class":324},[312,10561,10562],{"class":314,"line":980},[312,10563,9588],{"class":324},[312,10565,10566,10568],{"class":314,"line":997},[312,10567,3790],{"class":1436},[312,10569,9600],{"class":324},[312,10571,10572,10574],{"class":314,"line":1003},[312,10573,3790],{"class":1436},[312,10575,9612],{"class":324},[312,10577,10578],{"class":314,"line":1020},[312,10579,5800],{"class":324},[312,10581,10582],{"class":314,"line":1026},[312,10583,10584],{"class":318},"\u002F\u002F打印学生信息的函数\n",[312,10586,10587],{"class":314,"line":3418},[312,10588,10589],{"class":318},"\u002F\u002F值传递\n",[312,10591,10592,10594,10597,10599,10601,10603,10605],{"class":314,"line":3423},[312,10593,7168],{"class":1436},[312,10595,10596],{"class":332}," printStudent1",[312,10598,1576],{"class":324},[312,10600,9562],{"class":1436},[312,10602,9701],{"class":332},[312,10604,10231],{"class":1579},[312,10606,1959],{"class":324},[312,10608,10609],{"class":314,"line":3429},[312,10610,3353],{"class":324},[312,10612,10613,10615,10617,10620,10622,10625,10627,10630,10632,10634,10636,10639,10641],{"class":314,"line":3434},[312,10614,8333],{"class":324},[312,10616,2985],{"class":1436},[312,10618,10619],{"class":324}," s.name ",[312,10621,2985],{"class":1436},[312,10623,10624],{"class":339}," \" \"",[312,10626,3252],{"class":1436},[312,10628,10629],{"class":324}," s.age ",[312,10631,2985],{"class":1436},[312,10633,10624],{"class":339},[312,10635,3252],{"class":1436},[312,10637,10638],{"class":324}," s.score ",[312,10640,2985],{"class":1436},[312,10642,10643],{"class":324}," endl;\n",[312,10645,10646],{"class":314,"line":3448},[312,10647,515],{"class":324},[312,10649,10650],{"class":314,"line":3453},[312,10651,10652],{"class":318},"\u002F\u002F地址传递\n",[312,10654,10655,10657,10660,10662,10664,10666,10668,10670],{"class":314,"line":3459},[312,10656,7168],{"class":1436},[312,10658,10659],{"class":332}," printStudent2",[312,10661,1576],{"class":324},[312,10663,9562],{"class":1436},[312,10665,9701],{"class":332},[312,10667,8322],{"class":1436},[312,10669,2640],{"class":1579},[312,10671,1959],{"class":324},[312,10673,10674],{"class":314,"line":3480},[312,10675,3353],{"class":324},[312,10677,10678,10680,10682,10685,10687,10689,10691,10694,10696,10698,10700,10703,10705],{"class":314,"line":3485},[312,10679,8333],{"class":324},[312,10681,2985],{"class":1436},[312,10683,10684],{"class":324}," s->name ",[312,10686,2985],{"class":1436},[312,10688,10624],{"class":339},[312,10690,3252],{"class":1436},[312,10692,10693],{"class":324}," s->age ",[312,10695,2985],{"class":1436},[312,10697,10624],{"class":339},[312,10699,3252],{"class":1436},[312,10701,10702],{"class":324}," s->score ",[312,10704,2985],{"class":1436},[312,10706,10643],{"class":324},[312,10708,10709],{"class":314,"line":3499},[312,10710,515],{"class":324},[312,10712,10713,10715,10717],{"class":314,"line":3504},[312,10714,1956],{"class":1436},[312,10716,3778],{"class":332},[312,10718,3781],{"class":324},[312,10720,10721],{"class":314,"line":3533},[312,10722,3353],{"class":324},[312,10724,10725,10727,10729],{"class":314,"line":3538},[312,10726,9698],{"class":1436},[312,10728,9701],{"class":332},[312,10730,10731],{"class":324}," s;\n",[312,10733,10734,10737,10739,10742],{"class":314,"line":3555},[312,10735,10736],{"class":324},"    s.name ",[312,10738,336],{"class":1436},[312,10740,10741],{"class":339}," \"张三\"",[312,10743,498],{"class":324},[312,10745,10746,10749,10751,10754],{"class":314,"line":3560},[312,10747,10748],{"class":324},"    s.age ",[312,10750,336],{"class":1436},[312,10752,10753],{"class":488}," 20",[312,10755,498],{"class":324},[312,10757,10758,10761,10763,10766],{"class":314,"line":3565},[312,10759,10760],{"class":324},"    s.score ",[312,10762,336],{"class":1436},[312,10764,10765],{"class":488}," 85",[312,10767,498],{"class":324},[312,10769,10770,10772,10774,10777,10779],{"class":314,"line":3570},[312,10771,3358],{"class":324},[312,10773,2985],{"class":1436},[312,10775,10776],{"class":339},"\"值传递:\"",[312,10778,2985],{"class":1436},[312,10780,3007],{"class":324},[312,10782,10783,10786],{"class":314,"line":3584},[312,10784,10785],{"class":332},"    printStudent1",[312,10787,10788],{"class":324},"(s);\n",[312,10790,10791,10793,10795,10798,10800],{"class":314,"line":3589},[312,10792,3358],{"class":324},[312,10794,2985],{"class":1436},[312,10796,10797],{"class":339},"\"地址传递:\"",[312,10799,2985],{"class":1436},[312,10801,3007],{"class":324},[312,10803,10804,10807,10809,10811],{"class":314,"line":4382},[312,10805,10806],{"class":332},"    printStudent2",[312,10808,1576],{"class":324},[312,10810,2298],{"class":1436},[312,10812,10813],{"class":324},"s); \n",[312,10815,10816,10818,10820],{"class":314,"line":4396},[312,10817,5895],{"class":1436},[312,10819,5898],{"class":488},[312,10821,498],{"class":324},[312,10823,10824],{"class":314,"line":4404},[312,10825,515],{"class":324},[24,10827,10828],{},"注意：",[243,10830,10831,10834],{},[143,10832,10833],{},"1.先定义结构体，不要在函数中写结构体的定义",[143,10835,10836],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,10838,10840],{"id":10839},"_46结构体中const使用场景","4.6结构体中const使用场景",[24,10842,10843],{},"用const防止误操作",[303,10845,10847],{"className":1942,"code":10846,"language":1944,"meta":308,"style":308},"#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",[119,10848,10849,10855,10865,10871,10876,10880,10884,10890,10896,10900,10916,10920,10943,10947,10955,10959,10980,10987,10991],{"__ignoreMap":308},[312,10850,10851,10853],{"class":314,"line":315},[312,10852,3755],{"class":1436},[312,10854,3758],{"class":339},[312,10856,10857,10859,10861,10863],{"class":314,"line":171},[312,10858,3763],{"class":1436},[312,10860,3766],{"class":1436},[312,10862,3769],{"class":332},[312,10864,498],{"class":324},[312,10866,10867,10869],{"class":314,"line":274},[312,10868,3755],{"class":1436},[312,10870,9552],{"class":339},[312,10872,10873],{"class":314,"line":298},[312,10874,10875],{"class":324},"sctuct Student\n",[312,10877,10878],{"class":314,"line":974},[312,10879,3353],{"class":324},[312,10881,10882],{"class":314,"line":980},[312,10883,9588],{"class":324},[312,10885,10886,10888],{"class":314,"line":997},[312,10887,3790],{"class":1436},[312,10889,9600],{"class":324},[312,10891,10892,10894],{"class":314,"line":1003},[312,10893,3790],{"class":1436},[312,10895,9612],{"class":324},[312,10897,10898],{"class":314,"line":1020},[312,10899,5800],{"class":324},[312,10901,10902,10904,10907,10909,10912,10914],{"class":314,"line":1026},[312,10903,7168],{"class":1436},[312,10905,10906],{"class":332}," printStudents",[312,10908,1576],{"class":324},[312,10910,10911],{"class":332},"student",[312,10913,10231],{"class":1579},[312,10915,1959],{"class":324},[312,10917,10918],{"class":314,"line":3418},[312,10919,3353],{"class":324},[312,10921,10922,10924,10926,10929,10931,10934,10936,10939,10941],{"class":314,"line":3423},[312,10923,3358],{"class":324},[312,10925,2985],{"class":1436},[312,10927,10928],{"class":324},"s.name",[312,10930,2985],{"class":1436},[312,10932,10933],{"class":324},"s.age",[312,10935,2985],{"class":1436},[312,10937,10938],{"class":324},"s.score",[312,10940,2985],{"class":1436},[312,10942,3007],{"class":324},[312,10944,10945],{"class":314,"line":3429},[312,10946,515],{"class":324},[312,10948,10949,10951,10953],{"class":314,"line":3434},[312,10950,1956],{"class":1436},[312,10952,3778],{"class":332},[312,10954,7782],{"class":324},[312,10956,10957],{"class":314,"line":3448},[312,10958,3353],{"class":324},[312,10960,10961,10964,10966,10968,10970,10972,10974,10976,10978],{"class":314,"line":3453},[312,10962,10963],{"class":324},"    Student s",[312,10965,336],{"class":1436},[312,10967,2840],{"class":324},[312,10969,9719],{"class":339},[312,10971,2323],{"class":324},[312,10973,2595],{"class":488},[312,10975,2323],{"class":324},[312,10977,2595],{"class":488},[312,10979,5800],{"class":324},[312,10981,10982,10985],{"class":314,"line":3459},[312,10983,10984],{"class":332},"    printStudent",[312,10986,10788],{"class":324},[312,10988,10989],{"class":314,"line":3480},[312,10990,4205],{"emptyLinePlaceholder":1881},[312,10992,10993],{"class":314,"line":3485},[312,10994,515],{"class":324},[24,10996,10828],{},[243,10998,10999,11002,11005],{},[143,11000,11001],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[143,11003,11004],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[143,11006,11007],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[303,11009,11011],{"className":1942,"code":11010,"language":1944,"meta":308,"style":308},"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",[119,11012,11013,11032,11036,11041,11061],{"__ignoreMap":308},[312,11014,11015,11017,11019,11021,11023,11026,11028,11030],{"class":314,"line":315},[312,11016,7168],{"class":1436},[312,11018,10906],{"class":332},[312,11020,1576],{"class":324},[312,11022,8596],{"class":1436},[312,11024,11025],{"class":332}," student",[312,11027,8322],{"class":1436},[312,11029,2640],{"class":1579},[312,11031,1959],{"class":324},[312,11033,11034],{"class":314,"line":171},[312,11035,3353],{"class":324},[312,11037,11038],{"class":314,"line":274},[312,11039,11040],{"class":318},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[312,11042,11043,11045,11047,11049,11051,11053,11055,11057,11059],{"class":314,"line":298},[312,11044,3358],{"class":324},[312,11046,2985],{"class":1436},[312,11048,10928],{"class":324},[312,11050,2985],{"class":1436},[312,11052,10933],{"class":324},[312,11054,2985],{"class":1436},[312,11056,10938],{"class":324},[312,11058,2985],{"class":1436},[312,11060,3007],{"class":324},[312,11062,11063],{"class":314,"line":974},[312,11064,515],{"class":324},[14,11066,11068],{"id":11067},"_47案例","4.7案例",[140,11070,11071],{},[143,11072,11073],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[303,11075,11077],{"className":1942,"code":11076,"language":1944,"meta":308,"style":308},"#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",[119,11078,11079,11085,11095,11101,11108,11112,11118,11122,11127,11133,11139,11143,11147,11153,11157,11162,11167,11180,11184,11189,11215,11219,11231,11258,11262,11274,11284,11288,11293,11322,11326,11338,11347,11374,11385,11395,11399,11403,11407,11412,11436,11440,11464,11468,11487,11513,11517,11542,11565,11589,11594,11599,11604,11613,11618,11624,11645,11651,11665,11671,11698,11707,11713,11721,11726],{"__ignoreMap":308},[312,11080,11081,11083],{"class":314,"line":315},[312,11082,3755],{"class":1436},[312,11084,3758],{"class":339},[312,11086,11087,11089,11091,11093],{"class":314,"line":171},[312,11088,3763],{"class":1436},[312,11090,3766],{"class":1436},[312,11092,3769],{"class":332},[312,11094,498],{"class":324},[312,11096,11097,11099],{"class":314,"line":274},[312,11098,3755],{"class":1436},[312,11100,9552],{"class":339},[312,11102,11103,11105],{"class":314,"line":298},[312,11104,3755],{"class":1436},[312,11106,11107],{"class":339},"\u003Cctime>\n",[312,11109,11110],{"class":314,"line":974},[312,11111,10341],{"class":318},[312,11113,11114,11116],{"class":314,"line":980},[312,11115,9562],{"class":1436},[312,11117,9565],{"class":332},[312,11119,11120],{"class":314,"line":997},[312,11121,3353],{"class":324},[312,11123,11124],{"class":314,"line":1003},[312,11125,11126],{"class":324},"    string sName;\n",[312,11128,11129,11131],{"class":314,"line":1020},[312,11130,3790],{"class":1436},[312,11132,9600],{"class":324},[312,11134,11135,11137],{"class":314,"line":1026},[312,11136,3790],{"class":1436},[312,11138,9612],{"class":324},[312,11140,11141],{"class":314,"line":3418},[312,11142,5800],{"class":324},[312,11144,11145],{"class":314,"line":3423},[312,11146,10378],{"class":318},[312,11148,11149,11151],{"class":314,"line":3429},[312,11150,9562],{"class":1436},[312,11152,10385],{"class":332},[312,11154,11155],{"class":314,"line":3434},[312,11156,3353],{"class":324},[312,11158,11159],{"class":314,"line":3448},[312,11160,11161],{"class":324},"    string tName;\n",[312,11163,11164],{"class":314,"line":3453},[312,11165,11166],{"class":318},"    \u002F\u002F学生数组\n",[312,11168,11169,11171,11173,11176,11178],{"class":314,"line":3459},[312,11170,9698],{"class":1436},[312,11172,9701],{"class":332},[312,11174,11175],{"class":324}," sArray[",[312,11177,2264],{"class":488},[312,11179,6495],{"class":324},[312,11181,11182],{"class":314,"line":3480},[312,11183,5800],{"class":324},[312,11185,11186],{"class":314,"line":3485},[312,11187,11188],{"class":318},"\u002F\u002F给老师和学生赋值的函数\n",[312,11190,11191,11193,11196,11198,11200,11203,11206,11209,11211,11213],{"class":314,"line":3499},[312,11192,7168],{"class":1436},[312,11194,11195],{"class":332}," allocateSpace",[312,11197,1576],{"class":324},[312,11199,9562],{"class":1436},[312,11201,11202],{"class":332}," Teacher",[312,11204,11205],{"class":1579}," tArray",[312,11207,11208],{"class":324},"[],",[312,11210,1956],{"class":1436},[312,11212,9135],{"class":1579},[312,11214,1959],{"class":324},[312,11216,11217],{"class":314,"line":3504},[312,11218,3353],{"class":324},[312,11220,11221,11224,11226,11229],{"class":314,"line":3533},[312,11222,11223],{"class":324},"    string nameSeed",[312,11225,336],{"class":1436},[312,11227,11228],{"class":339},"\"ABCDE\"",[312,11230,498],{"class":324},[312,11232,11233,11235,11237,11239,11242,11244,11246,11249,11251,11254,11256],{"class":314,"line":3538},[312,11234,5006],{"class":1436},[312,11236,3464],{"class":324},[312,11238,1956],{"class":1436},[312,11240,11241],{"class":324}," i ",[312,11243,336],{"class":1436},[312,11245,5898],{"class":488},[312,11247,11248],{"class":324},"; i ",[312,11250,325],{"class":1436},[312,11252,11253],{"class":324}," len; i",[312,11255,4097],{"class":1436},[312,11257,1959],{"class":324},[312,11259,11260],{"class":314,"line":3555},[312,11261,3835],{"class":324},[312,11263,11264,11267,11269,11272],{"class":314,"line":3560},[312,11265,11266],{"class":324},"        tArray[i].tName ",[312,11268,336],{"class":1436},[312,11270,11271],{"class":339}," \"Teacher_\"",[312,11273,498],{"class":324},[312,11275,11276,11278,11281],{"class":314,"line":3565},[312,11277,11266],{"class":324},[312,11279,11280],{"class":1436},"+=",[312,11282,11283],{"class":324},"nameSeed[i];\n",[312,11285,11286],{"class":314,"line":3570},[312,11287,4205],{"emptyLinePlaceholder":1881},[312,11289,11290],{"class":314,"line":3584},[312,11291,11292],{"class":318},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[312,11294,11295,11297,11299,11301,11304,11306,11308,11311,11313,11315,11318,11320],{"class":314,"line":3589},[312,11296,5208],{"class":1436},[312,11298,3464],{"class":324},[312,11300,1956],{"class":1436},[312,11302,11303],{"class":324}," j ",[312,11305,336],{"class":1436},[312,11307,5898],{"class":488},[312,11309,11310],{"class":324},"; j ",[312,11312,325],{"class":1436},[312,11314,3953],{"class":488},[312,11316,11317],{"class":324},"; j",[312,11319,4097],{"class":1436},[312,11321,1959],{"class":324},[312,11323,11324],{"class":314,"line":4382},[312,11325,4315],{"class":324},[312,11327,11328,11331,11333,11336],{"class":314,"line":4396},[312,11329,11330],{"class":324},"            tArray[i].sArray[j].sName ",[312,11332,336],{"class":1436},[312,11334,11335],{"class":339}," \"Student_\"",[312,11337,498],{"class":324},[312,11339,11340,11342,11344],{"class":314,"line":4404},[312,11341,11330],{"class":324},[312,11343,11280],{"class":1436},[312,11345,11346],{"class":324}," nameSeed[j];\n",[312,11348,11349,11352,11355,11357,11359,11361,11363,11365,11367,11369,11371],{"class":314,"line":4409},[312,11350,11351],{"class":1436},"            int",[312,11353,11354],{"class":324}," random",[312,11356,336],{"class":1436},[312,11358,4229],{"class":332},[312,11360,4232],{"class":324},[312,11362,2273],{"class":1436},[312,11364,2851],{"class":488},[312,11366,2426],{"class":1436},[312,11368,2346],{"class":488},[312,11370,2006],{"class":324},[312,11372,11373],{"class":318},"\u002F\u002F40~99\n",[312,11375,11376,11379,11381,11383],{"class":314,"line":4415},[312,11377,11378],{"class":324},"            tArray[i].sArray[j].age ",[312,11380,336],{"class":1436},[312,11382,10753],{"class":488},[312,11384,498],{"class":324},[312,11386,11387,11390,11392],{"class":314,"line":4421},[312,11388,11389],{"class":324},"            tArray[i].sArray[j].score ",[312,11391,336],{"class":1436},[312,11393,11394],{"class":324}," random;\n",[312,11396,11397],{"class":314,"line":4426},[312,11398,4334],{"class":324},[312,11400,11401],{"class":314,"line":9751},[312,11402,3992],{"class":324},[312,11404,11405],{"class":314,"line":9775},[312,11406,515],{"class":324},[312,11408,11409],{"class":314,"line":9780},[312,11410,11411],{"class":318},"\u002F\u002F打印所有信息的函数\n",[312,11413,11414,11416,11419,11421,11423,11425,11427,11430,11432,11434],{"class":314,"line":9786},[312,11415,7168],{"class":1436},[312,11417,11418],{"class":332}," printInfo",[312,11420,1576],{"class":324},[312,11422,9562],{"class":1436},[312,11424,11202],{"class":332},[312,11426,11205],{"class":1579},[312,11428,11429],{"class":324},"[], ",[312,11431,1956],{"class":1436},[312,11433,9135],{"class":1579},[312,11435,1959],{"class":324},[312,11437,11438],{"class":314,"line":9813},[312,11439,3353],{"class":324},[312,11441,11442,11444,11446,11448,11450,11452,11454,11456,11458,11460,11462],{"class":314,"line":9818},[312,11443,5006],{"class":1436},[312,11445,3464],{"class":324},[312,11447,1956],{"class":1436},[312,11449,11241],{"class":324},[312,11451,336],{"class":1436},[312,11453,5898],{"class":488},[312,11455,11248],{"class":324},[312,11457,325],{"class":1436},[312,11459,11253],{"class":324},[312,11461,4097],{"class":1436},[312,11463,1959],{"class":324},[312,11465,11466],{"class":314,"line":9824},[312,11467,3835],{"class":324},[312,11469,11470,11473,11475,11478,11480,11483,11485],{"class":314,"line":9836},[312,11471,11472],{"class":324},"        cout ",[312,11474,2985],{"class":1436},[312,11476,11477],{"class":339}," \"Teacher: \"",[312,11479,3252],{"class":1436},[312,11481,11482],{"class":324}," tArray[i].tName ",[312,11484,2985],{"class":1436},[312,11486,10643],{"class":324},[312,11488,11489,11491,11493,11495,11497,11499,11501,11503,11505,11507,11509,11511],{"class":314,"line":9848},[312,11490,5208],{"class":1436},[312,11492,3464],{"class":324},[312,11494,1956],{"class":1436},[312,11496,11303],{"class":324},[312,11498,336],{"class":1436},[312,11500,5898],{"class":488},[312,11502,11310],{"class":324},[312,11504,325],{"class":1436},[312,11506,3953],{"class":488},[312,11508,11317],{"class":324},[312,11510,4097],{"class":1436},[312,11512,1959],{"class":324},[312,11514,11515],{"class":314,"line":9860},[312,11516,4315],{"class":324},[312,11518,11520,11523,11525,11528,11530,11533,11535,11538,11540],{"class":314,"line":11519},47,[312,11521,11522],{"class":324},"            cout ",[312,11524,2985],{"class":1436},[312,11526,11527],{"class":339}," \"",[312,11529,3042],{"class":488},[312,11531,11532],{"class":339},"Student: \"",[312,11534,3252],{"class":1436},[312,11536,11537],{"class":324}," tArray[i].sArray[j].sName",[312,11539,2985],{"class":1436},[312,11541,3007],{"class":324},[312,11543,11545,11547,11549,11551,11553,11556,11558,11561,11563],{"class":314,"line":11544},48,[312,11546,11522],{"class":324},[312,11548,2985],{"class":1436},[312,11550,11527],{"class":339},[312,11552,3042],{"class":488},[312,11554,11555],{"class":339},"Age: \"",[312,11557,3252],{"class":1436},[312,11559,11560],{"class":324}," tArray[i].sArray[j].age ",[312,11562,2985],{"class":1436},[312,11564,10643],{"class":324},[312,11566,11568,11570,11572,11574,11576,11579,11581,11584,11586],{"class":314,"line":11567},49,[312,11569,11522],{"class":324},[312,11571,2985],{"class":1436},[312,11573,11527],{"class":339},[312,11575,3042],{"class":488},[312,11577,11578],{"class":339},"Score: \"",[312,11580,3252],{"class":1436},[312,11582,11583],{"class":324}," tArray[i].sArray[j].score ",[312,11585,2985],{"class":1436},[312,11587,11588],{"class":324}," endl;   \n",[312,11590,11592],{"class":314,"line":11591},50,[312,11593,4334],{"class":324},[312,11595,11597],{"class":314,"line":11596},51,[312,11598,3992],{"class":324},[312,11600,11602],{"class":314,"line":11601},52,[312,11603,515],{"class":324},[312,11605,11607,11609,11611],{"class":314,"line":11606},53,[312,11608,1956],{"class":1436},[312,11610,3778],{"class":332},[312,11612,3781],{"class":324},[312,11614,11616],{"class":314,"line":11615},54,[312,11617,3353],{"class":324},[312,11619,11621],{"class":314,"line":11620},55,[312,11622,11623],{"class":318},"    \u002F\u002F随机数种子\n",[312,11625,11627,11629,11631,11633,11635,11637,11639,11641,11643],{"class":314,"line":11626},56,[312,11628,4178],{"class":332},[312,11630,4181],{"class":324},[312,11632,4184],{"class":1436},[312,11634,4187],{"class":1436},[312,11636,2374],{"class":324},[312,11638,4192],{"class":332},[312,11640,1576],{"class":324},[312,11642,4197],{"class":488},[312,11644,4200],{"class":324},[312,11646,11648],{"class":314,"line":11647},57,[312,11649,11650],{"class":318},"    \u002F\u002F1.创建3名老师的数组\n",[312,11652,11654,11656,11658,11661,11663],{"class":314,"line":11653},58,[312,11655,9698],{"class":1436},[312,11657,11202],{"class":332},[312,11659,11660],{"class":324}," tArray[",[312,11662,2021],{"class":488},[312,11664,6495],{"class":324},[312,11666,11668],{"class":314,"line":11667},59,[312,11669,11670],{"class":318},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[312,11672,11674,11676,11679,11681,11684,11687,11689,11691,11694,11696],{"class":314,"line":11673},60,[312,11675,3790],{"class":1436},[312,11677,11678],{"class":324}," len ",[312,11680,336],{"class":1436},[312,11682,11683],{"class":1436}," sizeof",[312,11685,11686],{"class":324},"(tArray) ",[312,11688,2529],{"class":1436},[312,11690,11683],{"class":1436},[312,11692,11693],{"class":324},"(tArray[",[312,11695,858],{"class":488},[312,11697,5661],{"class":324},[312,11699,11701,11704],{"class":314,"line":11700},61,[312,11702,11703],{"class":332},"    allocateSpace",[312,11705,11706],{"class":324},"(tArray, len);\n",[312,11708,11710],{"class":314,"line":11709},62,[312,11711,11712],{"class":318},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[312,11714,11716,11719],{"class":314,"line":11715},63,[312,11717,11718],{"class":332},"    printInfo",[312,11720,11706],{"class":324},[312,11722,11724],{"class":314,"line":11723},64,[312,11725,4205],{"emptyLinePlaceholder":1881},[312,11727,11729],{"class":314,"line":11728},65,[312,11730,515],{"class":324},[140,11732,11733],{"start":171},[143,11734,11735,11738],{},[27,11736,11737],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[24,11740,11741],{},"五名英雄信息如下：",[303,11743,11747],{"className":11744,"code":11745,"language":11746,"meta":308,"style":308},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[119,11748,11749,11767,11784,11801,11818],{"__ignoreMap":308},[312,11750,11751,11753,11756,11758,11760,11762,11765],{"class":314,"line":315},[312,11752,6722],{"class":324},[312,11754,11755],{"class":339},"\"刘备\"",[312,11757,2323],{"class":324},[312,11759,2719],{"class":488},[312,11761,2323],{"class":324},[312,11763,11764],{"class":339},"\"男\"",[312,11766,6735],{"class":324},[312,11768,11769,11771,11774,11776,11778,11780,11782],{"class":314,"line":171},[312,11770,6722],{"class":324},[312,11772,11773],{"class":339},"\"关羽\"",[312,11775,2323],{"class":324},[312,11777,2694],{"class":488},[312,11779,2323],{"class":324},[312,11781,11764],{"class":339},[312,11783,6735],{"class":324},[312,11785,11786,11788,11791,11793,11795,11797,11799],{"class":314,"line":274},[312,11787,6722],{"class":324},[312,11789,11790],{"class":339},"\"张飞\"",[312,11792,2323],{"class":324},[312,11794,1546],{"class":488},[312,11796,2323],{"class":324},[312,11798,11764],{"class":339},[312,11800,6735],{"class":324},[312,11802,11803,11805,11808,11810,11812,11814,11816],{"class":314,"line":298},[312,11804,6722],{"class":324},[312,11806,11807],{"class":339},"\"赵云\"",[312,11809,2323],{"class":324},[312,11811,2669],{"class":488},[312,11813,2323],{"class":324},[312,11815,11764],{"class":339},[312,11817,6735],{"class":324},[312,11819,11820,11822,11825,11827,11829,11831,11834],{"class":314,"line":974},[312,11821,6722],{"class":324},[312,11823,11824],{"class":339},"\"貂蝉\"",[312,11826,2323],{"class":324},[312,11828,2620],{"class":488},[312,11830,2323],{"class":324},[312,11832,11833],{"class":339},"\"女\"",[312,11835,6735],{"class":324},[24,11837,11838],{},"代码：",[303,11840,11842],{"className":1942,"code":11841,"language":1944,"meta":308,"style":308},"#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",[119,11843,11844,11850,11860,11866,11873,11877,11881,11887,11892,11896,11901,11924,11928,11953,11957,11990,11995,12024,12029,12044,12070,12090,12095,12100,12104,12108,12113,12135,12139,12163,12167,12229,12233,12237,12245,12249,12254,12265,12269,12285,12301,12317,12333,12349,12353,12373,12395,12400,12413,12420,12425,12431,12436,12449,12455],{"__ignoreMap":308},[312,11845,11846,11848],{"class":314,"line":315},[312,11847,3755],{"class":1436},[312,11849,3758],{"class":339},[312,11851,11852,11854,11856,11858],{"class":314,"line":171},[312,11853,3763],{"class":1436},[312,11855,3766],{"class":1436},[312,11857,3769],{"class":332},[312,11859,498],{"class":324},[312,11861,11862,11864],{"class":314,"line":274},[312,11863,3755],{"class":1436},[312,11865,9552],{"class":339},[312,11867,11868,11870],{"class":314,"line":298},[312,11869,9562],{"class":1436},[312,11871,11872],{"class":332}," Sanguo\n",[312,11874,11875],{"class":314,"line":974},[312,11876,3353],{"class":324},[312,11878,11879],{"class":314,"line":980},[312,11880,9588],{"class":324},[312,11882,11883,11885],{"class":314,"line":997},[312,11884,3790],{"class":1436},[312,11886,9600],{"class":324},[312,11888,11889],{"class":314,"line":1003},[312,11890,11891],{"class":324},"    string gender;\n",[312,11893,11894],{"class":314,"line":1020},[312,11895,5800],{"class":324},[312,11897,11898],{"class":314,"line":1026},[312,11899,11900],{"class":318},"\u002F\u002F定义排序函数\n",[312,11902,11903,11905,11907,11909,11912,11914,11916,11918,11920,11922],{"class":314,"line":3418},[312,11904,7168],{"class":1436},[312,11906,9120],{"class":332},[312,11908,1576],{"class":324},[312,11910,11911],{"class":332},"Sanguo",[312,11913,8322],{"class":1436},[312,11915,2640],{"class":1579},[312,11917,2323],{"class":324},[312,11919,1956],{"class":1436},[312,11921,9135],{"class":1579},[312,11923,1959],{"class":324},[312,11925,11926],{"class":314,"line":3423},[312,11927,3353],{"class":324},[312,11929,11930,11932,11934,11936,11938,11940,11942,11944,11946,11949,11951],{"class":314,"line":3429},[312,11931,5006],{"class":1436},[312,11933,1576],{"class":324},[312,11935,1956],{"class":1436},[312,11937,4837],{"class":324},[312,11939,336],{"class":1436},[312,11941,858],{"class":488},[312,11943,4844],{"class":324},[312,11945,325],{"class":1436},[312,11947,11948],{"class":324},"len;i",[312,11950,4097],{"class":1436},[312,11952,1959],{"class":324},[312,11954,11955],{"class":314,"line":3434},[312,11956,3835],{"class":324},[312,11958,11959,11962,11964,11966,11968,11970,11972,11974,11976,11978,11980,11982,11984,11986,11988],{"class":314,"line":3448},[312,11960,11961],{"class":1436},"     for",[312,11963,3464],{"class":324},[312,11965,1956],{"class":1436},[312,11967,5215],{"class":324},[312,11969,336],{"class":1436},[312,11971,858],{"class":488},[312,11973,5222],{"class":324},[312,11975,325],{"class":1436},[312,11977,9162],{"class":324},[312,11979,2477],{"class":1436},[312,11981,1433],{"class":488},[312,11983,2477],{"class":1436},[312,11985,5355],{"class":324},[312,11987,4097],{"class":1436},[312,11989,1959],{"class":324},[312,11991,11992],{"class":314,"line":3453},[312,11993,11994],{"class":324},"     {\n",[312,11996,11997,12000,12003,12005,12008,12010,12013,12015,12017,12019,12021],{"class":314,"line":3459},[312,11998,11999],{"class":1436},"         if",[312,12001,12002],{"class":324}," ((s",[312,12004,2426],{"class":1436},[312,12006,12007],{"class":324},"j)->age ",[312,12009,2902],{"class":1436},[312,12011,12012],{"class":324}," (s",[312,12014,2426],{"class":1436},[312,12016,2412],{"class":324},[312,12018,2426],{"class":1436},[312,12020,1433],{"class":488},[312,12022,12023],{"class":324},")->age)\n",[312,12025,12026],{"class":314,"line":3480},[312,12027,12028],{"class":324},"         {\n",[312,12030,12031,12034,12036,12039,12041],{"class":314,"line":3485},[312,12032,12033],{"class":324},"             Sanguo temp",[312,12035,8957],{"class":1436},[312,12037,12038],{"class":324},"(s",[312,12040,2426],{"class":1436},[312,12042,12043],{"class":324},"j);\n",[312,12045,12046,12049,12051,12053,12056,12058,12060,12062,12064,12066,12068],{"class":314,"line":3499},[312,12047,12048],{"class":1436},"             *",[312,12050,12038],{"class":324},[312,12052,2426],{"class":1436},[312,12054,12055],{"class":324},"j)",[312,12057,8957],{"class":1436},[312,12059,12038],{"class":324},[312,12061,2426],{"class":1436},[312,12063,2412],{"class":324},[312,12065,2426],{"class":1436},[312,12067,1433],{"class":488},[312,12069,4524],{"class":324},[312,12071,12072,12074,12076,12078,12080,12082,12084,12086,12088],{"class":314,"line":3504},[312,12073,12048],{"class":1436},[312,12075,12038],{"class":324},[312,12077,2426],{"class":1436},[312,12079,2412],{"class":324},[312,12081,2426],{"class":1436},[312,12083,1433],{"class":488},[312,12085,2374],{"class":324},[312,12087,336],{"class":1436},[312,12089,6085],{"class":324},[312,12091,12092],{"class":314,"line":3533},[312,12093,12094],{"class":324},"         }\n",[312,12096,12097],{"class":314,"line":3538},[312,12098,12099],{"class":324},"     }\n",[312,12101,12102],{"class":314,"line":3555},[312,12103,3992],{"class":324},[312,12105,12106],{"class":314,"line":3560},[312,12107,515],{"class":324},[312,12109,12110],{"class":314,"line":3565},[312,12111,12112],{"class":318},"\u002F\u002F定义打印函数\n",[312,12114,12115,12117,12119,12121,12123,12125,12127,12129,12131,12133],{"class":314,"line":3570},[312,12116,7168],{"class":1436},[312,12118,11418],{"class":332},[312,12120,1576],{"class":324},[312,12122,11911],{"class":332},[312,12124,8322],{"class":1436},[312,12126,2640],{"class":1579},[312,12128,2323],{"class":324},[312,12130,1956],{"class":1436},[312,12132,9135],{"class":1579},[312,12134,1959],{"class":324},[312,12136,12137],{"class":314,"line":3584},[312,12138,3353],{"class":324},[312,12140,12141,12143,12145,12147,12149,12151,12153,12155,12157,12159,12161],{"class":314,"line":3589},[312,12142,5006],{"class":1436},[312,12144,3464],{"class":324},[312,12146,1956],{"class":1436},[312,12148,4837],{"class":324},[312,12150,336],{"class":1436},[312,12152,858],{"class":488},[312,12154,4844],{"class":324},[312,12156,325],{"class":1436},[312,12158,11948],{"class":324},[312,12160,4097],{"class":1436},[312,12162,1959],{"class":324},[312,12164,12165],{"class":314,"line":4382},[312,12166,3835],{"class":324},[312,12168,12169,12171,12173,12175,12177,12180,12182,12184,12186,12189,12191,12193,12195,12198,12200,12202,12204,12207,12209,12211,12213,12216,12218,12220,12222,12225,12227],{"class":314,"line":4396},[312,12170,5256],{"class":324},[312,12172,2985],{"class":1436},[312,12174,2196],{"class":339},[312,12176,3042],{"class":488},[312,12178,12179],{"class":339},"姓名：\"",[312,12181,2985],{"class":1436},[312,12183,12038],{"class":324},[312,12185,2426],{"class":1436},[312,12187,12188],{"class":324},"i)->name",[312,12190,2985],{"class":1436},[312,12192,2196],{"class":339},[312,12194,3042],{"class":488},[312,12196,12197],{"class":339},"年龄：\"",[312,12199,2985],{"class":1436},[312,12201,12038],{"class":324},[312,12203,2426],{"class":1436},[312,12205,12206],{"class":324},"i)->age",[312,12208,2985],{"class":1436},[312,12210,2196],{"class":339},[312,12212,3042],{"class":488},[312,12214,12215],{"class":339},"性别：\"",[312,12217,2985],{"class":1436},[312,12219,12038],{"class":324},[312,12221,2426],{"class":1436},[312,12223,12224],{"class":324},"i)->gender",[312,12226,2985],{"class":1436},[312,12228,3007],{"class":324},[312,12230,12231],{"class":314,"line":4404},[312,12232,3992],{"class":324},[312,12234,12235],{"class":314,"line":4409},[312,12236,515],{"class":324},[312,12238,12239,12241,12243],{"class":314,"line":4415},[312,12240,1956],{"class":1436},[312,12242,3778],{"class":332},[312,12244,3781],{"class":324},[312,12246,12247],{"class":314,"line":4421},[312,12248,3353],{"class":324},[312,12250,12251],{"class":314,"line":4426},[312,12252,12253],{"class":318},"    \u002F\u002F定义结构体变量\n",[312,12255,12256,12259,12261,12263],{"class":314,"line":9751},[312,12257,12258],{"class":324},"    Sanguo s1[",[312,12260,2264],{"class":488},[312,12262,2882],{"class":324},[312,12264,6713],{"class":1436},[312,12266,12267],{"class":314,"line":9775},[312,12268,3835],{"class":324},[312,12270,12271,12273,12275,12277,12279,12281,12283],{"class":314,"line":9780},[312,12272,6722],{"class":324},[312,12274,11755],{"class":339},[312,12276,2323],{"class":324},[312,12278,2719],{"class":488},[312,12280,2323],{"class":324},[312,12282,11764],{"class":339},[312,12284,6735],{"class":324},[312,12286,12287,12289,12291,12293,12295,12297,12299],{"class":314,"line":9786},[312,12288,6722],{"class":324},[312,12290,11773],{"class":339},[312,12292,2323],{"class":324},[312,12294,2694],{"class":488},[312,12296,2323],{"class":324},[312,12298,11764],{"class":339},[312,12300,6735],{"class":324},[312,12302,12303,12305,12307,12309,12311,12313,12315],{"class":314,"line":9813},[312,12304,6722],{"class":324},[312,12306,11790],{"class":339},[312,12308,2323],{"class":324},[312,12310,1546],{"class":488},[312,12312,2323],{"class":324},[312,12314,11764],{"class":339},[312,12316,6735],{"class":324},[312,12318,12319,12321,12323,12325,12327,12329,12331],{"class":314,"line":9818},[312,12320,6722],{"class":324},[312,12322,11807],{"class":339},[312,12324,2323],{"class":324},[312,12326,2669],{"class":488},[312,12328,2323],{"class":324},[312,12330,11764],{"class":339},[312,12332,6735],{"class":324},[312,12334,12335,12337,12339,12341,12343,12345,12347],{"class":314,"line":9824},[312,12336,6722],{"class":324},[312,12338,11824],{"class":339},[312,12340,2323],{"class":324},[312,12342,2620],{"class":488},[312,12344,2323],{"class":324},[312,12346,11833],{"class":339},[312,12348,6735],{"class":324},[312,12350,12351],{"class":314,"line":9836},[312,12352,6756],{"class":324},[312,12354,12355,12357,12359,12361,12364,12366,12369,12371],{"class":314,"line":9848},[312,12356,3790],{"class":1436},[312,12358,9135],{"class":324},[312,12360,6008],{"class":1436},[312,12362,12363],{"class":324},"(s1)",[312,12365,6014],{"class":1436},[312,12367,12368],{"class":324},"(s1[",[312,12370,858],{"class":488},[312,12372,5661],{"class":324},[312,12374,12375,12378,12380,12383,12385,12388,12391,12393],{"class":314,"line":9860},[312,12376,12377],{"class":324},"    Sanguo ",[312,12379,2400],{"class":1436},[312,12381,12382],{"class":324},"s ",[312,12384,336],{"class":1436},[312,12386,12387],{"class":1436}," &",[312,12389,12390],{"class":324},"s1[",[312,12392,858],{"class":488},[312,12394,6495],{"class":324},[312,12396,12397],{"class":314,"line":11519},[312,12398,12399],{"class":318},"    \u002F\u002F排序前：\n",[312,12401,12402,12404,12406,12409,12411],{"class":314,"line":11544},[312,12403,8333],{"class":324},[312,12405,2985],{"class":1436},[312,12407,12408],{"class":339}," \"排序前：\"",[312,12410,3252],{"class":1436},[312,12412,10643],{"class":324},[312,12414,12415,12417],{"class":314,"line":11567},[312,12416,11718],{"class":332},[312,12418,12419],{"class":324},"(s,len);\n",[312,12421,12422],{"class":314,"line":11591},[312,12423,12424],{"class":318},"    \u002F\u002F调用排序函数\n",[312,12426,12427,12429],{"class":314,"line":11596},[312,12428,9402],{"class":332},[312,12430,12419],{"class":324},[312,12432,12433],{"class":314,"line":11601},[312,12434,12435],{"class":318},"    \u002F\u002F排序后\n",[312,12437,12438,12440,12442,12445,12447],{"class":314,"line":11606},[312,12439,8333],{"class":324},[312,12441,2985],{"class":1436},[312,12443,12444],{"class":339}," \"排序后：\"",[312,12446,3252],{"class":1436},[312,12448,10643],{"class":324},[312,12450,12451,12453],{"class":314,"line":11615},[312,12452,11718],{"class":332},[312,12454,12419],{"class":324},[312,12456,12457],{"class":314,"line":11620},[312,12458,515],{"class":324},[24,12460,12461,12462,12464],{},"注意：使用指针时直接用传首地址**&s",[312,12463,858],{},"**",[1856,12466,12467],{},"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":308,"searchDepth":171,"depth":171,"links":12469},[12470,12471,12472,12473,12474,12475,12476],{"id":9506,"depth":171,"text":9507},{"id":9868,"depth":171,"text":9869},{"id":10137,"depth":171,"text":10138},{"id":10302,"depth":171,"text":10303},{"id":10518,"depth":171,"text":10519},{"id":10839,"depth":171,"text":10840},{"id":11067,"depth":171,"text":11068},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9495,"description":9503},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12483,"title":12484,"body":12485,"description":308,"extension":1879,"meta":13828,"navigation":1881,"path":13829,"seo":13830,"stem":13831,"__hash__":13832},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12486,"toc":13822},[12487,12490,12494,12500,12514,12519,12522,12526,12533,12539,12542,12549,12555,12560,12563,12566,12569,13133,13136,13150,13154,13159,13175,13315,13318,13324,13327,13332,13340,13448,13451,13456,13459,13464,13467,13473,13476,13819],[10,12488,12484],{"id":12489},"_5程序内存模型",[14,12491,12493],{"id":12492},"_51内存分区模型","5.1内存分区模型",[24,12495,12496,12497],{},"C++程序在执行时，将内存大方向划分为",[27,12498,12499],{},"4个区域",[243,12501,12502,12505,12508,12511],{},[143,12503,12504],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[143,12506,12507],{},"全局区：存放全局变量和静态变量以及常量",[143,12509,12510],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[143,12512,12513],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[24,12515,12516],{},[27,12517,12518],{},"内存四区意义：",[24,12520,12521],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[69,12523,12525],{"id":12524},"_511程序运行前","5.1.1程序运行前",[24,12527,12528,12529,12532],{},"​\t在程序编译后，生成了exe可执行程序，",[27,12530,12531],{},"未执行该程序前","分为两个区域",[24,12534,12535,12536],{},"​\t",[27,12537,12538],{},"代码区：",[24,12540,12541],{},"​\t\t存放 CPU 执行的机器指令",[24,12543,12544,12545,12548],{},"​\t\t代码区是",[27,12546,12547],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[24,12550,12544,12551,12554],{},[27,12552,12553],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[24,12556,12535,12557],{},[27,12558,12559],{},"全局区：",[24,12561,12562],{},"​\t\t全局变量和静态变量存放在此.",[24,12564,12565],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[24,12567,12568],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[303,12570,12572],{"className":1942,"code":12571,"language":1944,"meta":308,"style":308},"\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",[119,12573,12574,12579,12592,12605,12609,12614,12629,12644,12648,12657,12661,12666,12679,12692,12696,12701,12727,12753,12757,12784,12810,12814,12819,12835,12850,12854,12880,12906,12910,12935,12960,12964,12990,13016,13020,13036,13051,13077,13103,13107,13117,13121,13129],{"__ignoreMap":308},[312,12575,12576],{"class":314,"line":315},[312,12577,12578],{"class":318},"\u002F\u002F全局变量\n",[312,12580,12581,12583,12586,12588,12590],{"class":314,"line":171},[312,12582,1956],{"class":1436},[312,12584,12585],{"class":324}," g_a ",[312,12587,336],{"class":1436},[312,12589,3843],{"class":488},[312,12591,498],{"class":324},[312,12593,12594,12596,12599,12601,12603],{"class":314,"line":274},[312,12595,1956],{"class":1436},[312,12597,12598],{"class":324}," g_b ",[312,12600,336],{"class":1436},[312,12602,3843],{"class":488},[312,12604,498],{"class":324},[312,12606,12607],{"class":314,"line":298},[312,12608,4205],{"emptyLinePlaceholder":1881},[312,12610,12611],{"class":314,"line":974},[312,12612,12613],{"class":318},"\u002F\u002F全局常量\n",[312,12615,12616,12618,12620,12623,12625,12627],{"class":314,"line":980},[312,12617,8596],{"class":1436},[312,12619,4187],{"class":1436},[312,12621,12622],{"class":324}," c_g_a ",[312,12624,336],{"class":1436},[312,12626,3843],{"class":488},[312,12628,498],{"class":324},[312,12630,12631,12633,12635,12638,12640,12642],{"class":314,"line":997},[312,12632,8596],{"class":1436},[312,12634,4187],{"class":1436},[312,12636,12637],{"class":324}," c_g_b ",[312,12639,336],{"class":1436},[312,12641,3843],{"class":488},[312,12643,498],{"class":324},[312,12645,12646],{"class":314,"line":1003},[312,12647,4205],{"emptyLinePlaceholder":1881},[312,12649,12650,12652,12654],{"class":314,"line":1020},[312,12651,1956],{"class":1436},[312,12653,3778],{"class":332},[312,12655,12656],{"class":324},"() {\n",[312,12658,12659],{"class":314,"line":1026},[312,12660,4205],{"emptyLinePlaceholder":1881},[312,12662,12663],{"class":314,"line":3418},[312,12664,12665],{"class":318},"    \u002F\u002F局部变量\n",[312,12667,12668,12670,12673,12675,12677],{"class":314,"line":3423},[312,12669,3790],{"class":1436},[312,12671,12672],{"class":324}," a ",[312,12674,336],{"class":1436},[312,12676,3843],{"class":488},[312,12678,498],{"class":324},[312,12680,12681,12683,12686,12688,12690],{"class":314,"line":3429},[312,12682,3790],{"class":1436},[312,12684,12685],{"class":324}," b ",[312,12687,336],{"class":1436},[312,12689,3843],{"class":488},[312,12691,498],{"class":324},[312,12693,12694],{"class":314,"line":3434},[312,12695,4205],{"emptyLinePlaceholder":1881},[312,12697,12698],{"class":314,"line":3448},[312,12699,12700],{"class":318},"    \u002F\u002F打印地址\n",[312,12702,12703,12705,12707,12710,12712,12714,12716,12718,12720,12723,12725],{"class":314,"line":3453},[312,12704,8333],{"class":324},[312,12706,2985],{"class":1436},[312,12708,12709],{"class":339}," \"局部变量a地址为： \"",[312,12711,3252],{"class":1436},[312,12713,3464],{"class":324},[312,12715,1956],{"class":1436},[312,12717,2374],{"class":324},[312,12719,2298],{"class":1436},[312,12721,12722],{"class":324},"a ",[312,12724,2985],{"class":1436},[312,12726,10643],{"class":324},[312,12728,12729,12731,12733,12736,12738,12740,12742,12744,12746,12749,12751],{"class":314,"line":3459},[312,12730,8333],{"class":324},[312,12732,2985],{"class":1436},[312,12734,12735],{"class":339}," \"局部变量b地址为： \"",[312,12737,3252],{"class":1436},[312,12739,3464],{"class":324},[312,12741,1956],{"class":1436},[312,12743,2374],{"class":324},[312,12745,2298],{"class":1436},[312,12747,12748],{"class":324},"b ",[312,12750,2985],{"class":1436},[312,12752,10643],{"class":324},[312,12754,12755],{"class":314,"line":3480},[312,12756,4205],{"emptyLinePlaceholder":1881},[312,12758,12759,12761,12763,12766,12768,12771,12773,12775,12777,12780,12782],{"class":314,"line":3485},[312,12760,8333],{"class":324},[312,12762,2985],{"class":1436},[312,12764,12765],{"class":339}," \"全局变量g_a地址为： \"",[312,12767,3252],{"class":1436},[312,12769,12770],{"class":324},"  (",[312,12772,1956],{"class":1436},[312,12774,2374],{"class":324},[312,12776,2298],{"class":1436},[312,12778,12779],{"class":324},"g_a ",[312,12781,2985],{"class":1436},[312,12783,10643],{"class":324},[312,12785,12786,12788,12790,12793,12795,12797,12799,12801,12803,12806,12808],{"class":314,"line":3499},[312,12787,8333],{"class":324},[312,12789,2985],{"class":1436},[312,12791,12792],{"class":339}," \"全局变量g_b地址为： \"",[312,12794,3252],{"class":1436},[312,12796,12770],{"class":324},[312,12798,1956],{"class":1436},[312,12800,2374],{"class":324},[312,12802,2298],{"class":1436},[312,12804,12805],{"class":324},"g_b ",[312,12807,2985],{"class":1436},[312,12809,10643],{"class":324},[312,12811,12812],{"class":314,"line":3504},[312,12813,4205],{"emptyLinePlaceholder":1881},[312,12815,12816],{"class":314,"line":3533},[312,12817,12818],{"class":318},"    \u002F\u002F静态变量\n",[312,12820,12821,12824,12826,12829,12831,12833],{"class":314,"line":3538},[312,12822,12823],{"class":1436},"    static",[312,12825,4187],{"class":1436},[312,12827,12828],{"class":324}," s_a ",[312,12830,336],{"class":1436},[312,12832,3843],{"class":488},[312,12834,498],{"class":324},[312,12836,12837,12839,12841,12844,12846,12848],{"class":314,"line":3555},[312,12838,12823],{"class":1436},[312,12840,4187],{"class":1436},[312,12842,12843],{"class":324}," s_b ",[312,12845,336],{"class":1436},[312,12847,3843],{"class":488},[312,12849,498],{"class":324},[312,12851,12852],{"class":314,"line":3560},[312,12853,4205],{"emptyLinePlaceholder":1881},[312,12855,12856,12858,12860,12863,12865,12867,12869,12871,12873,12876,12878],{"class":314,"line":3565},[312,12857,8333],{"class":324},[312,12859,2985],{"class":1436},[312,12861,12862],{"class":339}," \"静态变量s_a地址为： \"",[312,12864,3252],{"class":1436},[312,12866,3464],{"class":324},[312,12868,1956],{"class":1436},[312,12870,2374],{"class":324},[312,12872,2298],{"class":1436},[312,12874,12875],{"class":324},"s_a ",[312,12877,2985],{"class":1436},[312,12879,10643],{"class":324},[312,12881,12882,12884,12886,12889,12891,12893,12895,12897,12899,12902,12904],{"class":314,"line":3570},[312,12883,8333],{"class":324},[312,12885,2985],{"class":1436},[312,12887,12888],{"class":339}," \"静态变量s_b地址为： \"",[312,12890,3252],{"class":1436},[312,12892,3464],{"class":324},[312,12894,1956],{"class":1436},[312,12896,2374],{"class":324},[312,12898,2298],{"class":1436},[312,12900,12901],{"class":324},"s_b ",[312,12903,2985],{"class":1436},[312,12905,10643],{"class":324},[312,12907,12908],{"class":314,"line":3584},[312,12909,4205],{"emptyLinePlaceholder":1881},[312,12911,12912,12914,12916,12919,12921,12923,12925,12927,12929,12931,12933],{"class":314,"line":3589},[312,12913,8333],{"class":324},[312,12915,2985],{"class":1436},[312,12917,12918],{"class":339}," \"字符串常量地址为： \"",[312,12920,3252],{"class":1436},[312,12922,3464],{"class":324},[312,12924,1956],{"class":1436},[312,12926,2374],{"class":324},[312,12928,2298],{"class":1436},[312,12930,3002],{"class":339},[312,12932,3252],{"class":1436},[312,12934,10643],{"class":324},[312,12936,12937,12939,12941,12943,12945,12947,12949,12951,12953,12956,12958],{"class":314,"line":4382},[312,12938,8333],{"class":324},[312,12940,2985],{"class":1436},[312,12942,12918],{"class":339},[312,12944,3252],{"class":1436},[312,12946,3464],{"class":324},[312,12948,1956],{"class":1436},[312,12950,2374],{"class":324},[312,12952,2298],{"class":1436},[312,12954,12955],{"class":339},"\"hello world1\"",[312,12957,3252],{"class":1436},[312,12959,10643],{"class":324},[312,12961,12962],{"class":314,"line":4396},[312,12963,4205],{"emptyLinePlaceholder":1881},[312,12965,12966,12968,12970,12973,12975,12977,12979,12981,12983,12986,12988],{"class":314,"line":4404},[312,12967,8333],{"class":324},[312,12969,2985],{"class":1436},[312,12971,12972],{"class":339}," \"全局常量c_g_a地址为： \"",[312,12974,3252],{"class":1436},[312,12976,3464],{"class":324},[312,12978,1956],{"class":1436},[312,12980,2374],{"class":324},[312,12982,2298],{"class":1436},[312,12984,12985],{"class":324},"c_g_a ",[312,12987,2985],{"class":1436},[312,12989,10643],{"class":324},[312,12991,12992,12994,12996,12999,13001,13003,13005,13007,13009,13012,13014],{"class":314,"line":4409},[312,12993,8333],{"class":324},[312,12995,2985],{"class":1436},[312,12997,12998],{"class":339}," \"全局常量c_g_b地址为： \"",[312,13000,3252],{"class":1436},[312,13002,3464],{"class":324},[312,13004,1956],{"class":1436},[312,13006,2374],{"class":324},[312,13008,2298],{"class":1436},[312,13010,13011],{"class":324},"c_g_b ",[312,13013,2985],{"class":1436},[312,13015,10643],{"class":324},[312,13017,13018],{"class":314,"line":4415},[312,13019,4205],{"emptyLinePlaceholder":1881},[312,13021,13022,13025,13027,13030,13032,13034],{"class":314,"line":4421},[312,13023,13024],{"class":1436},"    const",[312,13026,4187],{"class":1436},[312,13028,13029],{"class":324}," c_l_a ",[312,13031,336],{"class":1436},[312,13033,3843],{"class":488},[312,13035,498],{"class":324},[312,13037,13038,13040,13042,13045,13047,13049],{"class":314,"line":4426},[312,13039,13024],{"class":1436},[312,13041,4187],{"class":1436},[312,13043,13044],{"class":324}," c_l_b ",[312,13046,336],{"class":1436},[312,13048,3843],{"class":488},[312,13050,498],{"class":324},[312,13052,13053,13055,13057,13060,13062,13064,13066,13068,13070,13073,13075],{"class":314,"line":9751},[312,13054,8333],{"class":324},[312,13056,2985],{"class":1436},[312,13058,13059],{"class":339}," \"局部常量c_l_a地址为： \"",[312,13061,3252],{"class":1436},[312,13063,3464],{"class":324},[312,13065,1956],{"class":1436},[312,13067,2374],{"class":324},[312,13069,2298],{"class":1436},[312,13071,13072],{"class":324},"c_l_a ",[312,13074,2985],{"class":1436},[312,13076,10643],{"class":324},[312,13078,13079,13081,13083,13086,13088,13090,13092,13094,13096,13099,13101],{"class":314,"line":9775},[312,13080,8333],{"class":324},[312,13082,2985],{"class":1436},[312,13084,13085],{"class":339}," \"局部常量c_l_b地址为： \"",[312,13087,3252],{"class":1436},[312,13089,3464],{"class":324},[312,13091,1956],{"class":1436},[312,13093,2374],{"class":324},[312,13095,2298],{"class":1436},[312,13097,13098],{"class":324},"c_l_b ",[312,13100,2985],{"class":1436},[312,13102,10643],{"class":324},[312,13104,13105],{"class":314,"line":9780},[312,13106,4205],{"emptyLinePlaceholder":1881},[312,13108,13109,13111,13113,13115],{"class":314,"line":9786},[312,13110,4108],{"class":332},[312,13112,1576],{"class":324},[312,13114,4113],{"class":339},[312,13116,4524],{"class":324},[312,13118,13119],{"class":314,"line":9813},[312,13120,4205],{"emptyLinePlaceholder":1881},[312,13122,13123,13125,13127],{"class":314,"line":9818},[312,13124,5895],{"class":1436},[312,13126,5898],{"class":488},[312,13128,498],{"class":324},[312,13130,13131],{"class":314,"line":9824},[312,13132,515],{"class":324},[24,13134,13135],{},"总结：",[243,13137,13138,13141,13144,13147],{},[143,13139,13140],{},"c++中程序运行前分为全局区和代码区",[143,13142,13143],{},"代码区特点是共享和只读",[143,13145,13146],{},"全局区中存放全局变量、静态变量、常量",[143,13148,13149],{},"常量区中存放const修饰的全局常量和字符串常量",[69,13151,13153],{"id":13152},"_512程序运行后","5.1.2程序运行后",[140,13155,13156],{},[143,13157,13158],{},"栈区：",[243,13160,13161,13168],{},[143,13162,13163,13164,13167],{},"由编译器自动分配释放, 存放",[27,13165,13166],{},"函数的参数值,局部变量","等",[143,13169,13170,13171,13174],{},"注意事项：",[27,13172,13173],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[303,13176,13178],{"className":1942,"code":13177,"language":1944,"meta":308,"style":308},"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",[119,13179,13180,13191,13195,13210,13222,13226,13230,13238,13243,13258,13276,13293,13303,13311],{"__ignoreMap":308},[312,13181,13182,13184,13186,13189],{"class":314,"line":315},[312,13183,1956],{"class":1436},[312,13185,8322],{"class":1436},[312,13187,13188],{"class":332}," func",[312,13190,3781],{"class":324},[312,13192,13193],{"class":314,"line":171},[312,13194,3353],{"class":324},[312,13196,13197,13199,13201,13203,13205,13207],{"class":314,"line":274},[312,13198,3790],{"class":1436},[312,13200,12672],{"class":324},[312,13202,336],{"class":1436},[312,13204,3843],{"class":488},[312,13206,2006],{"class":324},[312,13208,13209],{"class":318}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[312,13211,13212,13214,13216,13219],{"class":314,"line":298},[312,13213,5895],{"class":1436},[312,13215,12387],{"class":1436},[312,13217,13218],{"class":324},"a;",[312,13220,13221],{"class":318}," \u002F\u002F放回局部变量的地址\n",[312,13223,13224],{"class":314,"line":974},[312,13225,515],{"class":324},[312,13227,13228],{"class":314,"line":980},[312,13229,4205],{"emptyLinePlaceholder":1881},[312,13231,13232,13234,13236],{"class":314,"line":997},[312,13233,1956],{"class":1436},[312,13235,3778],{"class":332},[312,13237,12656],{"class":324},[312,13239,13240],{"class":314,"line":1003},[312,13241,13242],{"class":318},"    \u002F\u002F接受func的返回值\n",[312,13244,13245,13247,13249,13252,13254,13256],{"class":314,"line":1020},[312,13246,3790],{"class":1436},[312,13248,8322],{"class":1436},[312,13250,13251],{"class":324},"p ",[312,13253,336],{"class":1436},[312,13255,13188],{"class":332},[312,13257,7440],{"class":324},[312,13259,13260,13262,13264,13266,13268,13270,13273],{"class":314,"line":1026},[312,13261,8333],{"class":324},[312,13263,2985],{"class":1436},[312,13265,8322],{"class":1436},[312,13267,13251],{"class":324},[312,13269,2985],{"class":1436},[312,13271,13272],{"class":324}," endl;",[312,13274,13275],{"class":318}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[312,13277,13278,13280,13282,13284,13286,13288,13290],{"class":314,"line":3418},[312,13279,8333],{"class":324},[312,13281,2985],{"class":1436},[312,13283,8322],{"class":1436},[312,13285,13251],{"class":324},[312,13287,2985],{"class":1436},[312,13289,13272],{"class":324},[312,13291,13292],{"class":318}," \u002F\u002F第二次这个数据不再保留\n",[312,13294,13295,13297,13299,13301],{"class":314,"line":3423},[312,13296,4108],{"class":332},[312,13298,1576],{"class":324},[312,13300,4113],{"class":339},[312,13302,4524],{"class":324},[312,13304,13305,13307,13309],{"class":314,"line":3429},[312,13306,5895],{"class":1436},[312,13308,5898],{"class":488},[312,13310,498],{"class":324},[312,13312,13313],{"class":314,"line":3434},[312,13314,515],{"class":324},[24,13316,13317],{},"输出结果：",[24,13319,13320],{},[19,13321],{"alt":13322,"src":13323},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[24,13325,13326],{},"总结：不要返回局部变量的地址",[140,13328,13329],{"start":171},[143,13330,13331],{},"堆区",[243,13333,13334,13337],{},[143,13335,13336],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[143,13338,13339],{},"在c++中主要利用new在堆区开辟内存",[303,13341,13343],{"className":1942,"code":13342,"language":1944,"meta":308,"style":308},"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",[119,13344,13345,13360,13364,13369,13390,13397,13401,13409,13413,13418,13432,13444],{"__ignoreMap":308},[312,13346,13347,13349,13352,13355,13357],{"class":314,"line":315},[312,13348,1956],{"class":1436},[312,13350,13351],{"class":1436},"  *",[312,13353,13354],{"class":332},"func",[312,13356,4232],{"class":324},[312,13358,13359],{"class":318},"  \u002F\u002F函数返回指针\n",[312,13361,13362],{"class":314,"line":171},[312,13363,3353],{"class":324},[312,13365,13366],{"class":314,"line":274},[312,13367,13368],{"class":318},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[312,13370,13371,13373,13375,13377,13379,13382,13384,13386,13388],{"class":314,"line":298},[312,13372,5952],{"class":1436},[312,13374,8322],{"class":1436},[312,13376,24],{"class":324},[312,13378,336],{"class":1436},[312,13380,13381],{"class":1436}," new",[312,13383,4187],{"class":1436},[312,13385,1576],{"class":324},[312,13387,2391],{"class":488},[312,13389,4524],{"class":324},[312,13391,13392,13394],{"class":314,"line":974},[312,13393,6186],{"class":1436},[312,13395,13396],{"class":324}," p;\n",[312,13398,13399],{"class":314,"line":980},[312,13400,515],{"class":324},[312,13402,13403,13405,13407],{"class":314,"line":997},[312,13404,1956],{"class":1436},[312,13406,3778],{"class":332},[312,13408,3781],{"class":324},[312,13410,13411],{"class":314,"line":1003},[312,13412,3353],{"class":324},[312,13414,13415],{"class":314,"line":1020},[312,13416,13417],{"class":318},"    \u002F\u002F在堆区开辟数据\n",[312,13419,13420,13422,13424,13426,13428,13430],{"class":314,"line":1026},[312,13421,3790],{"class":1436},[312,13423,8322],{"class":1436},[312,13425,24],{"class":324},[312,13427,336],{"class":1436},[312,13429,13354],{"class":332},[312,13431,7440],{"class":324},[312,13433,13434,13436,13438,13440,13442],{"class":314,"line":3418},[312,13435,3358],{"class":324},[312,13437,8223],{"class":1436},[312,13439,24],{"class":324},[312,13441,2985],{"class":1436},[312,13443,3007],{"class":324},[312,13445,13446],{"class":314,"line":3423},[312,13447,515],{"class":324},[24,13449,13450],{},"图片展示：",[24,13452,13453],{},[19,13454],{"alt":13322,"src":13455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[24,13457,13458],{},"堆区内存由程序员管生死！！！",[140,13460,13461],{"start":274},[143,13462,13463],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[24,13465,13466],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[24,13468,13469,13470],{},"​语法：",[119,13471,13472],{}," new 数据类型",[24,13474,13475],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[303,13477,13479],{"className":1942,"code":13478,"language":1944,"meta":308,"style":308},"\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",[119,13480,13481,13486,13496,13500,13505,13510,13532,13536,13544,13548,13562,13574,13586,13598,13603,13608,13619,13623,13628,13636,13640,13645,13667,13693,13697,13715,13719,13745,13749,13761,13765,13770,13775,13783,13787,13791,13799,13803,13809,13815],{"__ignoreMap":308},[312,13482,13483],{"class":314,"line":315},[312,13484,13485],{"class":318},"\u002F\u002F1.new的基本语法\n",[312,13487,13488,13490,13492,13494],{"class":314,"line":171},[312,13489,1956],{"class":1436},[312,13491,8322],{"class":1436},[312,13493,13354],{"class":332},[312,13495,3781],{"class":324},[312,13497,13498],{"class":314,"line":274},[312,13499,3353],{"class":324},[312,13501,13502],{"class":314,"line":298},[312,13503,13504],{"class":318},"    \u002F\u002F在堆区创建整型数据\n",[312,13506,13507],{"class":314,"line":974},[312,13508,13509],{"class":318},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[312,13511,13512,13514,13516,13518,13521,13523,13525,13527,13529],{"class":314,"line":980},[312,13513,3790],{"class":1436},[312,13515,8322],{"class":1436},[312,13517,24],{"class":324},[312,13519,13520],{"class":1436},"=new",[312,13522,4187],{"class":1436},[312,13524,1576],{"class":324},[312,13526,2391],{"class":488},[312,13528,7770],{"class":324},[312,13530,13531],{"class":318},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[312,13533,13534],{"class":314,"line":997},[312,13535,515],{"class":324},[312,13537,13538,13540,13542],{"class":314,"line":1003},[312,13539,7168],{"class":1436},[312,13541,7392],{"class":332},[312,13543,3781],{"class":324},[312,13545,13546],{"class":314,"line":1020},[312,13547,3353],{"class":324},[312,13549,13550,13552,13554,13556,13558,13560],{"class":314,"line":1026},[312,13551,3790],{"class":1436},[312,13553,8322],{"class":1436},[312,13555,24],{"class":324},[312,13557,336],{"class":1436},[312,13559,13354],{"class":332},[312,13561,7440],{"class":324},[312,13563,13564,13566,13568,13570,13572],{"class":314,"line":3418},[312,13565,3358],{"class":324},[312,13567,8223],{"class":1436},[312,13569,24],{"class":324},[312,13571,2985],{"class":1436},[312,13573,3007],{"class":324},[312,13575,13576,13578,13580,13582,13584],{"class":314,"line":3423},[312,13577,3358],{"class":324},[312,13579,8223],{"class":1436},[312,13581,24],{"class":324},[312,13583,2985],{"class":1436},[312,13585,3007],{"class":324},[312,13587,13588,13590,13592,13594,13596],{"class":314,"line":3429},[312,13589,3358],{"class":324},[312,13591,8223],{"class":1436},[312,13593,24],{"class":324},[312,13595,2985],{"class":1436},[312,13597,3007],{"class":324},[312,13599,13600],{"class":314,"line":3434},[312,13601,13602],{"class":318},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[312,13604,13605],{"class":314,"line":3448},[312,13606,13607],{"class":318},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[312,13609,13610,13613,13616],{"class":314,"line":3453},[312,13611,13612],{"class":1436},"    delete",[312,13614,13615],{"class":324}," p;",[312,13617,13618],{"class":318},"\u002F\u002F删除这块地址\n",[312,13620,13621],{"class":314,"line":3459},[312,13622,515],{"class":324},[312,13624,13625],{"class":314,"line":3480},[312,13626,13627],{"class":318},"\u002F\u002F2.在堆区利用new开辟数组\n",[312,13629,13630,13632,13634],{"class":314,"line":3485},[312,13631,7168],{"class":1436},[312,13633,7461],{"class":332},[312,13635,3781],{"class":324},[312,13637,13638],{"class":314,"line":3499},[312,13639,3353],{"class":324},[312,13641,13642],{"class":314,"line":3504},[312,13643,13644],{"class":318},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[312,13646,13647,13649,13651,13653,13655,13657,13659,13661,13664],{"class":314,"line":3533},[312,13648,3790],{"class":1436},[312,13650,8322],{"class":1436},[312,13652,5685],{"class":324},[312,13654,13520],{"class":1436},[312,13656,4187],{"class":1436},[312,13658,2834],{"class":324},[312,13660,2391],{"class":488},[312,13662,13663],{"class":324},"];",[312,13665,13666],{"class":318},"\u002F\u002F10代表数组有10个元素\n",[312,13668,13669,13671,13673,13675,13677,13679,13681,13683,13685,13687,13689,13691],{"class":314,"line":3538},[312,13670,5006],{"class":1436},[312,13672,3464],{"class":324},[312,13674,1956],{"class":1436},[312,13676,4837],{"class":324},[312,13678,336],{"class":1436},[312,13680,858],{"class":488},[312,13682,4844],{"class":324},[312,13684,325],{"class":1436},[312,13686,2391],{"class":488},[312,13688,4844],{"class":324},[312,13690,4097],{"class":1436},[312,13692,1959],{"class":324},[312,13694,13695],{"class":314,"line":3555},[312,13696,3835],{"class":324},[312,13698,13699,13702,13704,13706,13708,13710,13712],{"class":314,"line":3560},[312,13700,13701],{"class":324},"        arr[i]",[312,13703,336],{"class":1436},[312,13705,2386],{"class":324},[312,13707,2426],{"class":1436},[312,13709,2256],{"class":488},[312,13711,2006],{"class":324},[312,13713,13714],{"class":318},"\u002F\u002F给10个元素赋值100～109\n",[312,13716,13717],{"class":314,"line":3565},[312,13718,3992],{"class":324},[312,13720,13721,13723,13725,13727,13729,13731,13733,13735,13737,13739,13741,13743],{"class":314,"line":3570},[312,13722,5006],{"class":1436},[312,13724,3464],{"class":324},[312,13726,1956],{"class":1436},[312,13728,4837],{"class":324},[312,13730,336],{"class":1436},[312,13732,858],{"class":488},[312,13734,4844],{"class":324},[312,13736,325],{"class":1436},[312,13738,2391],{"class":488},[312,13740,4844],{"class":324},[312,13742,4097],{"class":1436},[312,13744,1959],{"class":324},[312,13746,13747],{"class":314,"line":3584},[312,13748,3835],{"class":324},[312,13750,13751,13753,13755,13757,13759],{"class":314,"line":3589},[312,13752,5256],{"class":324},[312,13754,2985],{"class":1436},[312,13756,6159],{"class":324},[312,13758,2985],{"class":1436},[312,13760,3007],{"class":324},[312,13762,13763],{"class":314,"line":4382},[312,13764,3992],{"class":324},[312,13766,13767],{"class":314,"line":4396},[312,13768,13769],{"class":318},"    \u002F\u002F释放堆区数组\n",[312,13771,13772],{"class":314,"line":4404},[312,13773,13774],{"class":318},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[312,13776,13777,13780],{"class":314,"line":4409},[312,13778,13779],{"class":1436},"    delete[]",[312,13781,13782],{"class":324}," arr;\n",[312,13784,13785],{"class":314,"line":4415},[312,13786,515],{"class":324},[312,13788,13789],{"class":314,"line":4421},[312,13790,4205],{"emptyLinePlaceholder":1881},[312,13792,13793,13795,13797],{"class":314,"line":4426},[312,13794,1956],{"class":1436},[312,13796,3778],{"class":332},[312,13798,3781],{"class":324},[312,13800,13801],{"class":314,"line":9751},[312,13802,3353],{"class":324},[312,13804,13805,13807],{"class":314,"line":9775},[312,13806,7437],{"class":332},[312,13808,7440],{"class":324},[312,13810,13811,13813],{"class":314,"line":9780},[312,13812,7506],{"class":332},[312,13814,7440],{"class":324},[312,13816,13817],{"class":314,"line":9786},[312,13818,515],{"class":324},[1856,13820,13821],{},"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":308,"searchDepth":171,"depth":171,"links":13823},[13824],{"id":12492,"depth":171,"text":12493,"children":13825},[13826,13827],{"id":12524,"depth":274,"text":12525},{"id":13152,"depth":274,"text":13153},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12484,"description":308},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":13834,"title":13835,"body":13836,"description":308,"extension":1879,"meta":15316,"navigation":1881,"path":15317,"seo":15318,"stem":15319,"__hash__":15320},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13837,"toc":15308},[13838,13841,13845,13848,13851,14020,14024,14029,14046,14051,14203,14207,14210,14213,14606,14610,14613,14618,14621,14933,14937,14943,15103,15105,15113,15117,15120,15127,15305],[10,13839,13835],{"id":13840},"_6引用",[14,13842,13844],{"id":13843},"_61引用基本用法","6.1引用基本用法",[24,13846,13847],{},"引用的本质：给变量起别名",[24,13849,13850],{},"语法：数据类型 &别名=原名",[303,13852,13854],{"className":1942,"code":13853,"language":1944,"meta":308,"style":308},"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",[119,13855,13856,13864,13868,13880,13892,13896,13915,13934,13938,13949,13953,13972,13990,13994,14004,14008,14016],{"__ignoreMap":308},[312,13857,13858,13860,13862],{"class":314,"line":315},[312,13859,1956],{"class":1436},[312,13861,3778],{"class":332},[312,13863,12656],{"class":324},[312,13865,13866],{"class":314,"line":171},[312,13867,4205],{"emptyLinePlaceholder":1881},[312,13869,13870,13872,13874,13876,13878],{"class":314,"line":274},[312,13871,3790],{"class":1436},[312,13873,12672],{"class":324},[312,13875,336],{"class":1436},[312,13877,3843],{"class":488},[312,13879,498],{"class":324},[312,13881,13882,13884,13886,13888,13890],{"class":314,"line":298},[312,13883,3790],{"class":1436},[312,13885,12387],{"class":1436},[312,13887,12748],{"class":324},[312,13889,336],{"class":1436},[312,13891,3240],{"class":324},[312,13893,13894],{"class":314,"line":974},[312,13895,4205],{"emptyLinePlaceholder":1881},[312,13897,13898,13900,13902,13905,13907,13909,13911,13913],{"class":314,"line":980},[312,13899,8333],{"class":324},[312,13901,2985],{"class":1436},[312,13903,13904],{"class":339}," \"a = \"",[312,13906,3252],{"class":1436},[312,13908,12672],{"class":324},[312,13910,2985],{"class":1436},[312,13912,13272],{"class":324},[312,13914,9072],{"class":318},[312,13916,13917,13919,13921,13924,13926,13928,13930,13932],{"class":314,"line":997},[312,13918,8333],{"class":324},[312,13920,2985],{"class":1436},[312,13922,13923],{"class":339}," \"b = \"",[312,13925,3252],{"class":1436},[312,13927,12685],{"class":324},[312,13929,2985],{"class":1436},[312,13931,13272],{"class":324},[312,13933,9072],{"class":318},[312,13935,13936],{"class":314,"line":1003},[312,13937,4205],{"emptyLinePlaceholder":1881},[312,13939,13940,13943,13945,13947],{"class":314,"line":1020},[312,13941,13942],{"class":324},"    b ",[312,13944,336],{"class":1436},[312,13946,7558],{"class":488},[312,13948,498],{"class":324},[312,13950,13951],{"class":314,"line":1026},[312,13952,4205],{"emptyLinePlaceholder":1881},[312,13954,13955,13957,13959,13961,13963,13965,13967,13969],{"class":314,"line":3418},[312,13956,8333],{"class":324},[312,13958,2985],{"class":1436},[312,13960,13904],{"class":339},[312,13962,3252],{"class":1436},[312,13964,12672],{"class":324},[312,13966,2985],{"class":1436},[312,13968,13272],{"class":324},[312,13970,13971],{"class":318},"\u002F\u002F100\n",[312,13973,13974,13976,13978,13980,13982,13984,13986,13988],{"class":314,"line":3423},[312,13975,8333],{"class":324},[312,13977,2985],{"class":1436},[312,13979,13923],{"class":339},[312,13981,3252],{"class":1436},[312,13983,12685],{"class":324},[312,13985,2985],{"class":1436},[312,13987,13272],{"class":324},[312,13989,13971],{"class":318},[312,13991,13992],{"class":314,"line":3429},[312,13993,4205],{"emptyLinePlaceholder":1881},[312,13995,13996,13998,14000,14002],{"class":314,"line":3434},[312,13997,4108],{"class":332},[312,13999,1576],{"class":324},[312,14001,4113],{"class":339},[312,14003,4524],{"class":324},[312,14005,14006],{"class":314,"line":3448},[312,14007,4205],{"emptyLinePlaceholder":1881},[312,14009,14010,14012,14014],{"class":314,"line":3453},[312,14011,5895],{"class":1436},[312,14013,5898],{"class":488},[312,14015,498],{"class":324},[312,14017,14018],{"class":314,"line":3459},[312,14019,515],{"class":324},[14,14021,14023],{"id":14022},"_62引用的注意事项","6.2引用的注意事项",[140,14025,14026],{},[143,14027,14028],{},"引用必须要初始化",[303,14030,14032],{"className":1942,"code":14031,"language":1944,"meta":308,"style":308},"int &b;\u002F\u002F非常错误！\n",[119,14033,14034],{"__ignoreMap":308},[312,14035,14036,14038,14040,14043],{"class":314,"line":315},[312,14037,1956],{"class":1436},[312,14039,12387],{"class":1436},[312,14041,14042],{"class":324},"b;",[312,14044,14045],{"class":318},"\u002F\u002F非常错误！\n",[140,14047,14048],{"start":171},[143,14049,14050],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[303,14052,14054],{"className":1942,"code":14053,"language":1944,"meta":308,"style":308},"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",[119,14055,14056,14064,14076,14088,14096,14112,14125,14143,14161,14181,14191,14199],{"__ignoreMap":308},[312,14057,14058,14060,14062],{"class":314,"line":315},[312,14059,1956],{"class":1436},[312,14061,3778],{"class":332},[312,14063,12656],{"class":324},[312,14065,14066,14068,14070,14072,14074],{"class":314,"line":171},[312,14067,3790],{"class":1436},[312,14069,12672],{"class":324},[312,14071,336],{"class":1436},[312,14073,3843],{"class":488},[312,14075,498],{"class":324},[312,14077,14078,14080,14082,14084,14086],{"class":314,"line":274},[312,14079,3790],{"class":1436},[312,14081,12685],{"class":324},[312,14083,336],{"class":1436},[312,14085,10753],{"class":488},[312,14087,498],{"class":324},[312,14089,14090,14093],{"class":314,"line":298},[312,14091,14092],{"class":318},"    \u002F\u002Fint &c;",[312,14094,14095],{"class":318}," \u002F\u002F错误，引用必须初始化\n",[312,14097,14098,14100,14102,14104,14106,14109],{"class":314,"line":974},[312,14099,3790],{"class":1436},[312,14101,12387],{"class":1436},[312,14103,4751],{"class":324},[312,14105,336],{"class":1436},[312,14107,14108],{"class":324}," a;",[312,14110,14111],{"class":318}," \u002F\u002F一旦初始化后，就不可以更改\n",[312,14113,14114,14117,14119,14122],{"class":314,"line":980},[312,14115,14116],{"class":324},"    c ",[312,14118,336],{"class":1436},[312,14120,14121],{"class":324}," b;",[312,14123,14124],{"class":318}," \u002F\u002F这是赋值操作，不是更改引用\n",[312,14126,14127,14129,14131,14133,14135,14137,14139,14141],{"class":314,"line":997},[312,14128,8333],{"class":324},[312,14130,2985],{"class":1436},[312,14132,13904],{"class":339},[312,14134,3252],{"class":1436},[312,14136,12672],{"class":324},[312,14138,2985],{"class":1436},[312,14140,13272],{"class":324},[312,14142,9057],{"class":318},[312,14144,14145,14147,14149,14151,14153,14155,14157,14159],{"class":314,"line":1003},[312,14146,8333],{"class":324},[312,14148,2985],{"class":1436},[312,14150,13923],{"class":339},[312,14152,3252],{"class":1436},[312,14154,12685],{"class":324},[312,14156,2985],{"class":1436},[312,14158,13272],{"class":324},[312,14160,9057],{"class":318},[312,14162,14163,14165,14167,14170,14172,14175,14177,14179],{"class":314,"line":1020},[312,14164,8333],{"class":324},[312,14166,2985],{"class":1436},[312,14168,14169],{"class":339}," \"c = \"",[312,14171,3252],{"class":1436},[312,14173,14174],{"class":324}," c ",[312,14176,2985],{"class":1436},[312,14178,13272],{"class":324},[312,14180,9057],{"class":318},[312,14182,14183,14185,14187,14189],{"class":314,"line":1026},[312,14184,4108],{"class":332},[312,14186,1576],{"class":324},[312,14188,4113],{"class":339},[312,14190,4524],{"class":324},[312,14192,14193,14195,14197],{"class":314,"line":3418},[312,14194,5895],{"class":1436},[312,14196,5898],{"class":488},[312,14198,498],{"class":324},[312,14200,14201],{"class":314,"line":3423},[312,14202,515],{"class":324},[14,14204,14206],{"id":14205},"_63引用做函数参数","6.3引用做函数参数",[24,14208,14209],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[24,14211,14212],{},"优点：可以简化指针修改实参",[303,14214,14216],{"className":1942,"code":14215,"language":1944,"meta":308,"style":308},"\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",[119,14217,14218,14223,14245,14256,14266,14275,14279,14283,14288,14310,14322,14334,14344,14348,14352,14357,14379,14389,14397,14405,14409,14413,14421,14425,14437,14449,14453,14464,14490,14494,14514,14538,14542,14552,14576,14580,14590,14594,14602],{"__ignoreMap":308},[312,14219,14220],{"class":314,"line":315},[312,14221,14222],{"class":318},"\u002F\u002F1. 值传递\n",[312,14224,14225,14227,14230,14232,14234,14236,14238,14240,14242],{"class":314,"line":171},[312,14226,7168],{"class":1436},[312,14228,14229],{"class":332}," mySwap01",[312,14231,1576],{"class":324},[312,14233,1956],{"class":1436},[312,14235,3206],{"class":1579},[312,14237,733],{"class":324},[312,14239,1956],{"class":1436},[312,14241,4638],{"class":1579},[312,14243,14244],{"class":324},") {\n",[312,14246,14247,14249,14252,14254],{"class":314,"line":274},[312,14248,3790],{"class":1436},[312,14250,14251],{"class":324}," temp ",[312,14253,336],{"class":1436},[312,14255,3240],{"class":324},[312,14257,14258,14261,14263],{"class":314,"line":298},[312,14259,14260],{"class":324},"    a ",[312,14262,336],{"class":1436},[312,14264,14265],{"class":324}," b;\n",[312,14267,14268,14270,14272],{"class":314,"line":974},[312,14269,13942],{"class":324},[312,14271,336],{"class":1436},[312,14273,14274],{"class":324}," temp;\n",[312,14276,14277],{"class":314,"line":980},[312,14278,515],{"class":324},[312,14280,14281],{"class":314,"line":997},[312,14282,4205],{"emptyLinePlaceholder":1881},[312,14284,14285],{"class":314,"line":1003},[312,14286,14287],{"class":318},"\u002F\u002F2. 地址传递\n",[312,14289,14290,14292,14295,14297,14300,14302,14304,14306,14308],{"class":314,"line":1020},[312,14291,7168],{"class":1436},[312,14293,14294],{"class":332}," mySwap02",[312,14296,1576],{"class":324},[312,14298,14299],{"class":1436},"int*",[312,14301,3206],{"class":1579},[312,14303,733],{"class":324},[312,14305,14299],{"class":1436},[312,14307,4638],{"class":1579},[312,14309,14244],{"class":324},[312,14311,14312,14314,14316,14318,14320],{"class":314,"line":1026},[312,14313,3790],{"class":1436},[312,14315,14251],{"class":324},[312,14317,336],{"class":1436},[312,14319,8322],{"class":1436},[312,14321,8001],{"class":324},[312,14323,14324,14326,14328,14330,14332],{"class":314,"line":3418},[312,14325,8207],{"class":1436},[312,14327,12722],{"class":324},[312,14329,336],{"class":1436},[312,14331,8322],{"class":1436},[312,14333,7873],{"class":324},[312,14335,14336,14338,14340,14342],{"class":314,"line":3423},[312,14337,8207],{"class":1436},[312,14339,12748],{"class":324},[312,14341,336],{"class":1436},[312,14343,14274],{"class":324},[312,14345,14346],{"class":314,"line":3429},[312,14347,515],{"class":324},[312,14349,14350],{"class":314,"line":3434},[312,14351,4205],{"emptyLinePlaceholder":1881},[312,14353,14354],{"class":314,"line":3448},[312,14355,14356],{"class":318},"\u002F\u002F3. 引用传递\n",[312,14358,14359,14361,14364,14366,14369,14371,14373,14375,14377],{"class":314,"line":3453},[312,14360,7168],{"class":1436},[312,14362,14363],{"class":332}," mySwap03",[312,14365,1576],{"class":324},[312,14367,14368],{"class":1436},"int&",[312,14370,3206],{"class":1579},[312,14372,733],{"class":324},[312,14374,14368],{"class":1436},[312,14376,4638],{"class":1579},[312,14378,14244],{"class":324},[312,14380,14381,14383,14385,14387],{"class":314,"line":3459},[312,14382,3790],{"class":1436},[312,14384,14251],{"class":324},[312,14386,336],{"class":1436},[312,14388,3240],{"class":324},[312,14390,14391,14393,14395],{"class":314,"line":3480},[312,14392,14260],{"class":324},[312,14394,336],{"class":1436},[312,14396,14265],{"class":324},[312,14398,14399,14401,14403],{"class":314,"line":3485},[312,14400,13942],{"class":324},[312,14402,336],{"class":1436},[312,14404,14274],{"class":324},[312,14406,14407],{"class":314,"line":3499},[312,14408,515],{"class":324},[312,14410,14411],{"class":314,"line":3504},[312,14412,4205],{"emptyLinePlaceholder":1881},[312,14414,14415,14417,14419],{"class":314,"line":3533},[312,14416,1956],{"class":1436},[312,14418,3778],{"class":332},[312,14420,12656],{"class":324},[312,14422,14423],{"class":314,"line":3538},[312,14424,4205],{"emptyLinePlaceholder":1881},[312,14426,14427,14429,14431,14433,14435],{"class":314,"line":3555},[312,14428,3790],{"class":1436},[312,14430,12672],{"class":324},[312,14432,336],{"class":1436},[312,14434,3843],{"class":488},[312,14436,498],{"class":324},[312,14438,14439,14441,14443,14445,14447],{"class":314,"line":3560},[312,14440,3790],{"class":1436},[312,14442,12685],{"class":324},[312,14444,336],{"class":1436},[312,14446,10753],{"class":488},[312,14448,498],{"class":324},[312,14450,14451],{"class":314,"line":3565},[312,14452,4205],{"emptyLinePlaceholder":1881},[312,14454,14455,14458,14461],{"class":314,"line":3570},[312,14456,14457],{"class":332},"    mySwap01",[312,14459,14460],{"class":324},"(a, b);",[312,14462,14463],{"class":318},"\u002F\u002F值传递，形参不会修饰实参\n",[312,14465,14466,14468,14470,14473,14475,14477,14479,14482,14484,14486,14488],{"class":314,"line":3584},[312,14467,8333],{"class":324},[312,14469,2985],{"class":1436},[312,14471,14472],{"class":339}," \"a:\"",[312,14474,3252],{"class":1436},[312,14476,12672],{"class":324},[312,14478,2985],{"class":1436},[312,14480,14481],{"class":339}," \" b:\"",[312,14483,3252],{"class":1436},[312,14485,12685],{"class":324},[312,14487,2985],{"class":1436},[312,14489,10643],{"class":324},[312,14491,14492],{"class":314,"line":3589},[312,14493,4205],{"emptyLinePlaceholder":1881},[312,14495,14496,14499,14501,14503,14506,14508,14511],{"class":314,"line":4382},[312,14497,14498],{"class":332},"    mySwap02",[312,14500,1576],{"class":324},[312,14502,2298],{"class":1436},[312,14504,14505],{"class":324},"a, ",[312,14507,2298],{"class":1436},[312,14509,14510],{"class":324},"b);",[312,14512,14513],{"class":318},"\u002F\u002F地址传递，形参会修饰实参\n",[312,14515,14516,14518,14520,14522,14524,14526,14528,14530,14532,14534,14536],{"class":314,"line":4396},[312,14517,8333],{"class":324},[312,14519,2985],{"class":1436},[312,14521,14472],{"class":339},[312,14523,3252],{"class":1436},[312,14525,12672],{"class":324},[312,14527,2985],{"class":1436},[312,14529,14481],{"class":339},[312,14531,3252],{"class":1436},[312,14533,12685],{"class":324},[312,14535,2985],{"class":1436},[312,14537,10643],{"class":324},[312,14539,14540],{"class":314,"line":4404},[312,14541,4205],{"emptyLinePlaceholder":1881},[312,14543,14544,14547,14549],{"class":314,"line":4409},[312,14545,14546],{"class":332},"    mySwap03",[312,14548,14460],{"class":324},[312,14550,14551],{"class":318},"\u002F\u002F引用传递，形参会修饰实参\n",[312,14553,14554,14556,14558,14560,14562,14564,14566,14568,14570,14572,14574],{"class":314,"line":4415},[312,14555,8333],{"class":324},[312,14557,2985],{"class":1436},[312,14559,14472],{"class":339},[312,14561,3252],{"class":1436},[312,14563,12672],{"class":324},[312,14565,2985],{"class":1436},[312,14567,14481],{"class":339},[312,14569,3252],{"class":1436},[312,14571,12685],{"class":324},[312,14573,2985],{"class":1436},[312,14575,10643],{"class":324},[312,14577,14578],{"class":314,"line":4421},[312,14579,4205],{"emptyLinePlaceholder":1881},[312,14581,14582,14584,14586,14588],{"class":314,"line":4426},[312,14583,4108],{"class":332},[312,14585,1576],{"class":324},[312,14587,4113],{"class":339},[312,14589,4524],{"class":324},[312,14591,14592],{"class":314,"line":9751},[312,14593,4205],{"emptyLinePlaceholder":1881},[312,14595,14596,14598,14600],{"class":314,"line":9775},[312,14597,5895],{"class":1436},[312,14599,5898],{"class":488},[312,14601,498],{"class":324},[312,14603,14604],{"class":314,"line":9780},[312,14605,515],{"class":324},[14,14607,14609],{"id":14608},"_64引用做函数的返回值","6.4引用做函数的返回值",[24,14611,14612],{},"作用：引用是可以作为函数的返回值存在的",[24,14614,10828,14615],{},[27,14616,14617],{},"不要返回局部变量引用",[24,14619,14620],{},"用法：函数调用作为左值",[303,14622,14624],{"className":11744,"code":14623,"language":11746,"meta":308,"style":308},"\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",[119,14625,14626,14631,14639,14654,14660,14664,14668,14673,14681,14698,14704,14708,14712,14720,14724,14729,14743,14763,14782,14786,14791,14804,14824,14842,14846,14862,14866,14885,14903,14907,14917,14921,14929],{"__ignoreMap":308},[312,14627,14628],{"class":314,"line":315},[312,14629,14630],{"class":318},"\u002F\u002F返回局部变量引用\n",[312,14632,14633,14635,14637],{"class":314,"line":171},[312,14634,14368],{"class":1436},[312,14636,7392],{"class":332},[312,14638,12656],{"class":324},[312,14640,14641,14643,14645,14647,14649,14651],{"class":314,"line":274},[312,14642,3790],{"class":1436},[312,14644,12672],{"class":324},[312,14646,336],{"class":1436},[312,14648,3843],{"class":488},[312,14650,2006],{"class":324},[312,14652,14653],{"class":318}," \u002F\u002F局部变量\n",[312,14655,14656,14658],{"class":314,"line":298},[312,14657,5895],{"class":1436},[312,14659,3240],{"class":324},[312,14661,14662],{"class":314,"line":974},[312,14663,515],{"class":324},[312,14665,14666],{"class":314,"line":980},[312,14667,4205],{"emptyLinePlaceholder":1881},[312,14669,14670],{"class":314,"line":997},[312,14671,14672],{"class":318},"\u002F\u002F返回静态变量引用\n",[312,14674,14675,14677,14679],{"class":314,"line":1003},[312,14676,14368],{"class":1436},[312,14678,7461],{"class":332},[312,14680,12656],{"class":324},[312,14682,14683,14685,14687,14689,14691,14693,14695],{"class":314,"line":1020},[312,14684,12823],{"class":1436},[312,14686,4187],{"class":1436},[312,14688,12672],{"class":324},[312,14690,336],{"class":1436},[312,14692,10753],{"class":488},[312,14694,2006],{"class":324},[312,14696,14697],{"class":318},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[312,14699,14700,14702],{"class":314,"line":1026},[312,14701,5895],{"class":1436},[312,14703,3240],{"class":324},[312,14705,14706],{"class":314,"line":3418},[312,14707,515],{"class":324},[312,14709,14710],{"class":314,"line":3423},[312,14711,4205],{"emptyLinePlaceholder":1881},[312,14713,14714,14716,14718],{"class":314,"line":3429},[312,14715,1956],{"class":1436},[312,14717,3778],{"class":332},[312,14719,12656],{"class":324},[312,14721,14722],{"class":314,"line":3434},[312,14723,4205],{"emptyLinePlaceholder":1881},[312,14725,14726],{"class":314,"line":3448},[312,14727,14728],{"class":318},"    \u002F\u002F不能返回局部变量的引用\n",[312,14730,14731,14734,14737,14739,14741],{"class":314,"line":3453},[312,14732,14733],{"class":1436},"    int&",[312,14735,14736],{"class":324}," ref ",[312,14738,336],{"class":1436},[312,14740,7392],{"class":332},[312,14742,7440],{"class":324},[312,14744,14745,14747,14749,14752,14754,14756,14758,14760],{"class":314,"line":3459},[312,14746,8333],{"class":324},[312,14748,2985],{"class":1436},[312,14750,14751],{"class":339}," \"ref = \"",[312,14753,3252],{"class":1436},[312,14755,14736],{"class":324},[312,14757,2985],{"class":1436},[312,14759,13272],{"class":324},[312,14761,14762],{"class":318},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[312,14764,14765,14767,14769,14771,14773,14775,14777,14779],{"class":314,"line":3480},[312,14766,8333],{"class":324},[312,14768,2985],{"class":1436},[312,14770,14751],{"class":339},[312,14772,3252],{"class":1436},[312,14774,14736],{"class":324},[312,14776,2985],{"class":1436},[312,14778,13272],{"class":324},[312,14780,14781],{"class":318},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[312,14783,14784],{"class":314,"line":3485},[312,14785,4205],{"emptyLinePlaceholder":1881},[312,14787,14788],{"class":314,"line":3499},[312,14789,14790],{"class":318},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[312,14792,14793,14795,14798,14800,14802],{"class":314,"line":3504},[312,14794,14733],{"class":1436},[312,14796,14797],{"class":324}," ref2 ",[312,14799,336],{"class":1436},[312,14801,7461],{"class":332},[312,14803,7440],{"class":324},[312,14805,14806,14808,14810,14813,14815,14817,14819,14821],{"class":314,"line":3533},[312,14807,8333],{"class":324},[312,14809,2985],{"class":1436},[312,14811,14812],{"class":339}," \"ref2 = \"",[312,14814,3252],{"class":1436},[312,14816,14797],{"class":324},[312,14818,2985],{"class":1436},[312,14820,13272],{"class":324},[312,14822,14823],{"class":318}," \u002F\u002F20\n",[312,14825,14826,14828,14830,14832,14834,14836,14838,14840],{"class":314,"line":3538},[312,14827,8333],{"class":324},[312,14829,2985],{"class":1436},[312,14831,14812],{"class":339},[312,14833,3252],{"class":1436},[312,14835,14797],{"class":324},[312,14837,2985],{"class":1436},[312,14839,13272],{"class":324},[312,14841,14823],{"class":318},[312,14843,14844],{"class":314,"line":3555},[312,14845,4205],{"emptyLinePlaceholder":1881},[312,14847,14848,14850,14853,14855,14857,14859],{"class":314,"line":3560},[312,14849,7506],{"class":332},[312,14851,14852],{"class":324},"() ",[312,14854,336],{"class":1436},[312,14856,4804],{"class":488},[312,14858,2006],{"class":324},[312,14860,14861],{"class":318},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[312,14863,14864],{"class":314,"line":3565},[312,14865,4205],{"emptyLinePlaceholder":1881},[312,14867,14868,14870,14872,14874,14876,14878,14880,14882],{"class":314,"line":3570},[312,14869,8333],{"class":324},[312,14871,2985],{"class":1436},[312,14873,14812],{"class":339},[312,14875,3252],{"class":1436},[312,14877,14797],{"class":324},[312,14879,2985],{"class":1436},[312,14881,13272],{"class":324},[312,14883,14884],{"class":318}," \u002F\u002F1000\n",[312,14886,14887,14889,14891,14893,14895,14897,14899,14901],{"class":314,"line":3584},[312,14888,8333],{"class":324},[312,14890,2985],{"class":1436},[312,14892,14812],{"class":339},[312,14894,3252],{"class":1436},[312,14896,14797],{"class":324},[312,14898,2985],{"class":1436},[312,14900,13272],{"class":324},[312,14902,14884],{"class":318},[312,14904,14905],{"class":314,"line":3589},[312,14906,4205],{"emptyLinePlaceholder":1881},[312,14908,14909,14911,14913,14915],{"class":314,"line":4382},[312,14910,4108],{"class":332},[312,14912,1576],{"class":324},[312,14914,4113],{"class":339},[312,14916,4524],{"class":324},[312,14918,14919],{"class":314,"line":4396},[312,14920,4205],{"emptyLinePlaceholder":1881},[312,14922,14923,14925,14927],{"class":314,"line":4404},[312,14924,5895],{"class":1436},[312,14926,5898],{"class":488},[312,14928,498],{"class":324},[312,14930,14931],{"class":314,"line":4409},[312,14932,515],{"class":324},[14,14934,14936],{"id":14935},"_65引用的本质","6.5引用的本质",[24,14938,14939,14940],{},"本质：",[27,14941,14942],{},"引用的本质在c++内部实现是一个指针常量.",[303,14944,14946],{"className":1942,"code":14945,"language":1944,"meta":308,"style":308},"\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",[119,14947,14948,14953,14969,14983,14987,14996,15008,15013,15018,15029,15042,15046,15062,15079,15083,15091,15099],{"__ignoreMap":308},[312,14949,14950],{"class":314,"line":315},[312,14951,14952],{"class":318},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[312,14954,14955,14957,14959,14961,14963,14966],{"class":314,"line":171},[312,14956,7168],{"class":1436},[312,14958,13188],{"class":332},[312,14960,1576],{"class":324},[312,14962,14368],{"class":1436},[312,14964,14965],{"class":1579}," ref",[312,14967,14968],{"class":324},"){\n",[312,14970,14971,14974,14976,14978,14980],{"class":314,"line":274},[312,14972,14973],{"class":324},"    ref ",[312,14975,336],{"class":1436},[312,14977,7558],{"class":488},[312,14979,2006],{"class":324},[312,14981,14982],{"class":318}," \u002F\u002F ref是引用，转换为*ref = 100\n",[312,14984,14985],{"class":314,"line":298},[312,14986,515],{"class":324},[312,14988,14989,14991,14993],{"class":314,"line":974},[312,14990,1956],{"class":1436},[312,14992,3778],{"class":332},[312,14994,14995],{"class":324},"(){\n",[312,14997,14998,15000,15002,15004,15006],{"class":314,"line":980},[312,14999,3790],{"class":1436},[312,15001,12672],{"class":324},[312,15003,336],{"class":1436},[312,15005,3843],{"class":488},[312,15007,498],{"class":324},[312,15009,15010],{"class":314,"line":997},[312,15011,15012],{"class":324},"    \n",[312,15014,15015],{"class":314,"line":1003},[312,15016,15017],{"class":318},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[312,15019,15020,15022,15024,15026],{"class":314,"line":1020},[312,15021,14733],{"class":1436},[312,15023,14736],{"class":324},[312,15025,336],{"class":1436},[312,15027,15028],{"class":324}," a; \n",[312,15030,15031,15033,15035,15037,15039],{"class":314,"line":1026},[312,15032,14973],{"class":324},[312,15034,336],{"class":1436},[312,15036,10753],{"class":488},[312,15038,2006],{"class":324},[312,15040,15041],{"class":318}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[312,15043,15044],{"class":314,"line":3418},[312,15045,15012],{"class":324},[312,15047,15048,15050,15052,15054,15056,15058,15060],{"class":314,"line":3423},[312,15049,8333],{"class":324},[312,15051,2985],{"class":1436},[312,15053,14472],{"class":339},[312,15055,3252],{"class":1436},[312,15057,12672],{"class":324},[312,15059,2985],{"class":1436},[312,15061,10643],{"class":324},[312,15063,15064,15066,15068,15071,15073,15075,15077],{"class":314,"line":3429},[312,15065,8333],{"class":324},[312,15067,2985],{"class":1436},[312,15069,15070],{"class":339}," \"ref:\"",[312,15072,3252],{"class":1436},[312,15074,14736],{"class":324},[312,15076,2985],{"class":1436},[312,15078,10643],{"class":324},[312,15080,15081],{"class":314,"line":3434},[312,15082,15012],{"class":324},[312,15084,15085,15088],{"class":314,"line":3448},[312,15086,15087],{"class":332},"    func",[312,15089,15090],{"class":324},"(a);\n",[312,15092,15093,15095,15097],{"class":314,"line":3453},[312,15094,5895],{"class":1436},[312,15096,5898],{"class":488},[312,15098,498],{"class":324},[312,15100,15101],{"class":314,"line":3459},[312,15102,515],{"class":324},[24,15104,13135],{},[140,15106,15107,15110],{},[143,15108,15109],{},"引用的本质，就是一个指针常量",[143,15111,15112],{},"引用一旦初始化，就不可以发生改变",[14,15114,15116],{"id":15115},"_66常量引用","6.6常量引用",[24,15118,15119],{},"作用：常量引用主要用来修饰形参",[24,15121,15122,15123,15126],{},"在函数形参列表中，可以加",[27,15124,15125],{},"const修饰形参","，防止形参改变实参",[303,15128,15130],{"className":1942,"code":15129,"language":1944,"meta":308,"style":308},"\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",[119,15131,15132,15137,15142,15161,15166,15179,15183,15187,15195,15199,15204,15209,15223,15227,15235,15247,15251,15256,15268,15275,15279,15289,15293,15301],{"__ignoreMap":308},[312,15133,15134],{"class":314,"line":315},[312,15135,15136],{"class":318},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[312,15138,15139],{"class":314,"line":171},[312,15140,15141],{"class":318},"\u002F\u002F加上const就不能修改实参的\n",[312,15143,15144,15146,15149,15151,15153,15156,15159],{"class":314,"line":274},[312,15145,7168],{"class":1436},[312,15147,15148],{"class":332}," showValue",[312,15150,1576],{"class":324},[312,15152,8596],{"class":1436},[312,15154,15155],{"class":1436}," int&",[312,15157,15158],{"class":1579}," v",[312,15160,14244],{"class":324},[312,15162,15163],{"class":314,"line":298},[312,15164,15165],{"class":318},"    \u002F\u002Fv += 100;\n",[312,15167,15168,15170,15172,15175,15177],{"class":314,"line":974},[312,15169,8333],{"class":324},[312,15171,2985],{"class":1436},[312,15173,15174],{"class":324}," v ",[312,15176,2985],{"class":1436},[312,15178,10643],{"class":324},[312,15180,15181],{"class":314,"line":980},[312,15182,515],{"class":324},[312,15184,15185],{"class":314,"line":997},[312,15186,4205],{"emptyLinePlaceholder":1881},[312,15188,15189,15191,15193],{"class":314,"line":1003},[312,15190,1956],{"class":1436},[312,15192,3778],{"class":332},[312,15194,12656],{"class":324},[312,15196,15197],{"class":314,"line":1020},[312,15198,4205],{"emptyLinePlaceholder":1881},[312,15200,15201],{"class":314,"line":1026},[312,15202,15203],{"class":318},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[312,15205,15206],{"class":314,"line":3418},[312,15207,15208],{"class":318},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[312,15210,15211,15213,15215,15217,15219,15221],{"class":314,"line":3423},[312,15212,13024],{"class":1436},[312,15214,15155],{"class":1436},[312,15216,14736],{"class":324},[312,15218,336],{"class":1436},[312,15220,3843],{"class":488},[312,15222,498],{"class":324},[312,15224,15225],{"class":314,"line":3429},[312,15226,4205],{"emptyLinePlaceholder":1881},[312,15228,15229,15232],{"class":314,"line":3434},[312,15230,15231],{"class":318},"    \u002F\u002Fref = 100;",[312,15233,15234],{"class":318},"  \u002F\u002F加入const后不可以修改变量\n",[312,15236,15237,15239,15241,15243,15245],{"class":314,"line":3448},[312,15238,8333],{"class":324},[312,15240,2985],{"class":1436},[312,15242,14736],{"class":324},[312,15244,2985],{"class":1436},[312,15246,10643],{"class":324},[312,15248,15249],{"class":314,"line":3453},[312,15250,4205],{"emptyLinePlaceholder":1881},[312,15252,15253],{"class":314,"line":3459},[312,15254,15255],{"class":318},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[312,15257,15258,15260,15262,15264,15266],{"class":314,"line":3480},[312,15259,3790],{"class":1436},[312,15261,12672],{"class":324},[312,15263,336],{"class":1436},[312,15265,3843],{"class":488},[312,15267,498],{"class":324},[312,15269,15270,15273],{"class":314,"line":3485},[312,15271,15272],{"class":332},"    showValue",[312,15274,15090],{"class":324},[312,15276,15277],{"class":314,"line":3499},[312,15278,4205],{"emptyLinePlaceholder":1881},[312,15280,15281,15283,15285,15287],{"class":314,"line":3504},[312,15282,4108],{"class":332},[312,15284,1576],{"class":324},[312,15286,4113],{"class":339},[312,15288,4524],{"class":324},[312,15290,15291],{"class":314,"line":3533},[312,15292,4205],{"emptyLinePlaceholder":1881},[312,15294,15295,15297,15299],{"class":314,"line":3538},[312,15296,5895],{"class":1436},[312,15298,5898],{"class":488},[312,15300,498],{"class":324},[312,15302,15303],{"class":314,"line":3555},[312,15304,515],{"class":324},[1856,15306,15307],{},"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":308,"searchDepth":171,"depth":171,"links":15309},[15310,15311,15312,15313,15314,15315],{"id":13843,"depth":171,"text":13844},{"id":14022,"depth":171,"text":14023},{"id":14205,"depth":171,"text":14206},{"id":14608,"depth":171,"text":14609},{"id":14935,"depth":171,"text":14936},{"id":15115,"depth":171,"text":15116},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13835,"description":308},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15322,"title":15323,"body":15324,"description":308,"extension":1879,"meta":16404,"navigation":1881,"path":16405,"seo":16406,"stem":16407,"__hash__":16408},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15325,"toc":16396},[15326,15329,15333,15336,15341,15572,15574,15585,15589,15592,15600,15704,15707,15711,15714,15718,15721,15726,15748,15754,16081,16084,16088,16096,16393],[10,15327,15323],{"id":15328},"_7函数高级部分",[14,15330,15332],{"id":15331},"_71函数默认参数","7.1函数默认参数",[24,15334,15335],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[24,15337,6986,15338],{},[119,15339,15340],{}," 返回值类型  函数名 （参数= 默认值）{}",[303,15342,15344],{"className":1942,"code":15343,"language":1944,"meta":308,"style":308},"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",[119,15345,15346,15381,15396,15400,15404,15409,15414,15443,15463,15473,15477,15481,15489,15493,15520,15542,15546,15556,15560,15568],{"__ignoreMap":308},[312,15347,15348,15350,15352,15354,15356,15358,15360,15362,15364,15367,15369,15371,15373,15375,15377,15379],{"class":314,"line":315},[312,15349,1956],{"class":1436},[312,15351,13188],{"class":332},[312,15353,1576],{"class":324},[312,15355,1956],{"class":1436},[312,15357,3206],{"class":1579},[312,15359,733],{"class":324},[312,15361,1956],{"class":1436},[312,15363,4638],{"class":1579},[312,15365,15366],{"class":1436}," =",[312,15368,3843],{"class":488},[312,15370,733],{"class":324},[312,15372,1956],{"class":1436},[312,15374,4654],{"class":1579},[312,15376,15366],{"class":1436},[312,15378,3843],{"class":488},[312,15380,14244],{"class":324},[312,15382,15383,15385,15387,15389,15391,15393],{"class":314,"line":171},[312,15384,5895],{"class":1436},[312,15386,12672],{"class":324},[312,15388,2426],{"class":1436},[312,15390,12685],{"class":324},[312,15392,2426],{"class":1436},[312,15394,15395],{"class":324}," c;\n",[312,15397,15398],{"class":314,"line":274},[312,15399,515],{"class":324},[312,15401,15402],{"class":314,"line":298},[312,15403,4205],{"emptyLinePlaceholder":1881},[312,15405,15406],{"class":314,"line":974},[312,15407,15408],{"class":318},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[312,15410,15411],{"class":314,"line":980},[312,15412,15413],{"class":318},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[312,15415,15416,15418,15421,15423,15425,15427,15429,15431,15433,15435,15437,15439,15441],{"class":314,"line":997},[312,15417,1956],{"class":1436},[312,15419,15420],{"class":332}," func2",[312,15422,1576],{"class":324},[312,15424,1956],{"class":1436},[312,15426,3206],{"class":1579},[312,15428,15366],{"class":1436},[312,15430,3843],{"class":488},[312,15432,733],{"class":324},[312,15434,1956],{"class":1436},[312,15436,4638],{"class":1579},[312,15438,15366],{"class":1436},[312,15440,3843],{"class":488},[312,15442,4524],{"class":324},[312,15444,15445,15447,15449,15451,15453,15455,15457,15459,15461],{"class":314,"line":1003},[312,15446,1956],{"class":1436},[312,15448,15420],{"class":332},[312,15450,1576],{"class":324},[312,15452,1956],{"class":1436},[312,15454,3206],{"class":1579},[312,15456,733],{"class":324},[312,15458,1956],{"class":1436},[312,15460,4638],{"class":1579},[312,15462,14244],{"class":324},[312,15464,15465,15467,15469,15471],{"class":314,"line":1020},[312,15466,5895],{"class":1436},[312,15468,12672],{"class":324},[312,15470,2426],{"class":1436},[312,15472,14265],{"class":324},[312,15474,15475],{"class":314,"line":1026},[312,15476,515],{"class":324},[312,15478,15479],{"class":314,"line":3418},[312,15480,4205],{"emptyLinePlaceholder":1881},[312,15482,15483,15485,15487],{"class":314,"line":3423},[312,15484,1956],{"class":1436},[312,15486,3778],{"class":332},[312,15488,12656],{"class":324},[312,15490,15491],{"class":314,"line":3429},[312,15492,4205],{"emptyLinePlaceholder":1881},[312,15494,15495,15497,15499,15502,15504,15506,15508,15510,15512,15514,15516,15518],{"class":314,"line":3434},[312,15496,8333],{"class":324},[312,15498,2985],{"class":1436},[312,15500,15501],{"class":339}," \"ret = \"",[312,15503,3252],{"class":1436},[312,15505,13188],{"class":332},[312,15507,1576],{"class":324},[312,15509,1546],{"class":488},[312,15511,733],{"class":324},[312,15513,1546],{"class":488},[312,15515,1583],{"class":324},[312,15517,2985],{"class":1436},[312,15519,10643],{"class":324},[312,15521,15522,15524,15526,15528,15530,15532,15534,15536,15538,15540],{"class":314,"line":3448},[312,15523,8333],{"class":324},[312,15525,2985],{"class":1436},[312,15527,15501],{"class":339},[312,15529,3252],{"class":1436},[312,15531,13188],{"class":332},[312,15533,1576],{"class":324},[312,15535,2256],{"class":488},[312,15537,1583],{"class":324},[312,15539,2985],{"class":1436},[312,15541,10643],{"class":324},[312,15543,15544],{"class":314,"line":3453},[312,15545,4205],{"emptyLinePlaceholder":1881},[312,15547,15548,15550,15552,15554],{"class":314,"line":3459},[312,15549,4108],{"class":332},[312,15551,1576],{"class":324},[312,15553,4113],{"class":339},[312,15555,4524],{"class":324},[312,15557,15558],{"class":314,"line":3480},[312,15559,4205],{"emptyLinePlaceholder":1881},[312,15561,15562,15564,15566],{"class":314,"line":3485},[312,15563,5895],{"class":1436},[312,15565,5898],{"class":488},[312,15567,498],{"class":324},[312,15569,15570],{"class":314,"line":3499},[312,15571,515],{"class":324},[24,15573,13135],{},[140,15575,15576,15579,15582],{},[143,15577,15578],{},"我传就用我；没传就用你",[143,15580,15581],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[143,15583,15584],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,15586,15588],{"id":15587},"_72函数的占位参数","7.2函数的占位参数",[24,15590,15591],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[24,15593,15594,15596,15597],{},[27,15595,6986],{}," ",[119,15598,15599],{},"返回值类型 函数名 (数据类型){}",[303,15601,15603],{"className":1942,"code":15602,"language":1944,"meta":308,"style":308},"\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",[119,15604,15605,15610,15628,15641,15645,15653,15657,15674,15678,15688,15692,15700],{"__ignoreMap":308},[312,15606,15607],{"class":314,"line":315},[312,15608,15609],{"class":318},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[312,15611,15612,15614,15616,15618,15620,15622,15624,15626],{"class":314,"line":171},[312,15613,7168],{"class":1436},[312,15615,13188],{"class":332},[312,15617,1576],{"class":324},[312,15619,1956],{"class":1436},[312,15621,3206],{"class":1579},[312,15623,733],{"class":324},[312,15625,1956],{"class":1436},[312,15627,14244],{"class":324},[312,15629,15630,15632,15634,15637,15639],{"class":314,"line":274},[312,15631,8333],{"class":324},[312,15633,2985],{"class":1436},[312,15635,15636],{"class":339}," \"this is func\"",[312,15638,3252],{"class":1436},[312,15640,10643],{"class":324},[312,15642,15643],{"class":314,"line":298},[312,15644,515],{"class":324},[312,15646,15647,15649,15651],{"class":314,"line":974},[312,15648,1956],{"class":1436},[312,15650,3778],{"class":332},[312,15652,12656],{"class":324},[312,15654,15655],{"class":314,"line":980},[312,15656,4205],{"emptyLinePlaceholder":1881},[312,15658,15659,15661,15663,15665,15667,15669,15671],{"class":314,"line":997},[312,15660,15087],{"class":332},[312,15662,1576],{"class":324},[312,15664,2391],{"class":488},[312,15666,2323],{"class":324},[312,15668,2391],{"class":488},[312,15670,7770],{"class":324},[312,15672,15673],{"class":318}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[312,15675,15676],{"class":314,"line":1003},[312,15677,4205],{"emptyLinePlaceholder":1881},[312,15679,15680,15682,15684,15686],{"class":314,"line":1020},[312,15681,4108],{"class":332},[312,15683,1576],{"class":324},[312,15685,4113],{"class":339},[312,15687,4524],{"class":324},[312,15689,15690],{"class":314,"line":1026},[312,15691,4205],{"emptyLinePlaceholder":1881},[312,15693,15694,15696,15698],{"class":314,"line":3418},[312,15695,5895],{"class":1436},[312,15697,5898],{"class":488},[312,15699,498],{"class":324},[312,15701,15702],{"class":314,"line":3423},[312,15703,515],{"class":324},[24,15705,15706],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15708,15710],{"id":15709},"_73函数重载","7.3函数重载",[24,15712,15713],{},"意思是函数名是可以相同的",[69,15715,15717],{"id":15716},"_731基本语法","7.3.1基本语法",[24,15719,15720],{},"作用：函数名可以相同，提高复用性",[24,15722,15723],{},[27,15724,15725],{},"函数重载满足条件：",[243,15727,15728,15731,15734],{},[143,15729,15730],{},"同一个作用域下",[143,15732,15733],{},"函数名称相同",[143,15735,15736,15737,15740,15741,15744,15745],{},"函数参数",[27,15738,15739],{},"类型不同","  或者 ",[27,15742,15743],{},"个数不同"," 或者 ",[27,15746,15747],{},"顺序不同",[24,15749,15750,15753],{},[27,15751,15752],{},"注意:","  函数的返回值不可以作为函数重载的条件",[303,15755,15757],{"className":11744,"code":15756,"language":11746,"meta":308,"style":308},"\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",[119,15758,15759,15764,15772,15776,15789,15793,15807,15811,15824,15828,15843,15847,15860,15864,15885,15889,15902,15906,15926,15930,15943,15947,15951,15956,15961,15966,15971,15976,15980,15984,15992,15996,16002,16012,16022,16036,16051,16055,16065,16069,16077],{"__ignoreMap":308},[312,15760,15761],{"class":314,"line":315},[312,15762,15763],{"class":318},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[312,15765,15766,15768,15770],{"class":314,"line":171},[312,15767,7168],{"class":1436},[312,15769,13188],{"class":332},[312,15771,3781],{"class":324},[312,15773,15774],{"class":314,"line":274},[312,15775,3353],{"class":324},[312,15777,15778,15780,15782,15785,15787],{"class":314,"line":298},[312,15779,8333],{"class":324},[312,15781,2985],{"class":1436},[312,15783,15784],{"class":339}," \"func 的调用！\"",[312,15786,3252],{"class":1436},[312,15788,10643],{"class":324},[312,15790,15791],{"class":314,"line":974},[312,15792,515],{"class":324},[312,15794,15795,15797,15799,15801,15803,15805],{"class":314,"line":980},[312,15796,7168],{"class":1436},[312,15798,13188],{"class":332},[312,15800,1576],{"class":324},[312,15802,1956],{"class":1436},[312,15804,3206],{"class":1579},[312,15806,1959],{"class":324},[312,15808,15809],{"class":314,"line":997},[312,15810,3353],{"class":324},[312,15812,15813,15815,15817,15820,15822],{"class":314,"line":1003},[312,15814,8333],{"class":324},[312,15816,2985],{"class":1436},[312,15818,15819],{"class":339}," \"func (int a) 的调用！\"",[312,15821,3252],{"class":1436},[312,15823,10643],{"class":324},[312,15825,15826],{"class":314,"line":1020},[312,15827,515],{"class":324},[312,15829,15830,15832,15834,15836,15839,15841],{"class":314,"line":1026},[312,15831,7168],{"class":1436},[312,15833,13188],{"class":332},[312,15835,1576],{"class":324},[312,15837,15838],{"class":1436},"double",[312,15840,3206],{"class":1579},[312,15842,1959],{"class":324},[312,15844,15845],{"class":314,"line":3418},[312,15846,3353],{"class":324},[312,15848,15849,15851,15853,15856,15858],{"class":314,"line":3423},[312,15850,8333],{"class":324},[312,15852,2985],{"class":1436},[312,15854,15855],{"class":339}," \"func (double a)的调用！\"",[312,15857,3252],{"class":1436},[312,15859,10643],{"class":324},[312,15861,15862],{"class":314,"line":3429},[312,15863,515],{"class":324},[312,15865,15866,15868,15870,15872,15874,15876,15879,15881,15883],{"class":314,"line":3434},[312,15867,7168],{"class":1436},[312,15869,13188],{"class":332},[312,15871,1576],{"class":324},[312,15873,1956],{"class":1436},[312,15875,3206],{"class":1579},[312,15877,15878],{"class":324}," ,",[312,15880,15838],{"class":1436},[312,15882,4638],{"class":1579},[312,15884,1959],{"class":324},[312,15886,15887],{"class":314,"line":3448},[312,15888,3353],{"class":324},[312,15890,15891,15893,15895,15898,15900],{"class":314,"line":3453},[312,15892,8333],{"class":324},[312,15894,2985],{"class":1436},[312,15896,15897],{"class":339}," \"func (int a ,double b) 的调用！\"",[312,15899,3252],{"class":1436},[312,15901,10643],{"class":324},[312,15903,15904],{"class":314,"line":3459},[312,15905,515],{"class":324},[312,15907,15908,15910,15912,15914,15916,15918,15920,15922,15924],{"class":314,"line":3480},[312,15909,7168],{"class":1436},[312,15911,13188],{"class":332},[312,15913,1576],{"class":324},[312,15915,15838],{"class":1436},[312,15917,3206],{"class":1579},[312,15919,15878],{"class":324},[312,15921,1956],{"class":1436},[312,15923,4638],{"class":1579},[312,15925,1959],{"class":324},[312,15927,15928],{"class":314,"line":3485},[312,15929,3353],{"class":324},[312,15931,15932,15934,15936,15939,15941],{"class":314,"line":3499},[312,15933,8333],{"class":324},[312,15935,2985],{"class":1436},[312,15937,15938],{"class":339}," \"func (double a ,int b)的调用！\"",[312,15940,3252],{"class":1436},[312,15942,10643],{"class":324},[312,15944,15945],{"class":314,"line":3504},[312,15946,515],{"class":324},[312,15948,15949],{"class":314,"line":3533},[312,15950,4205],{"emptyLinePlaceholder":1881},[312,15952,15953],{"class":314,"line":3538},[312,15954,15955],{"class":318},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[312,15957,15958],{"class":314,"line":3555},[312,15959,15960],{"class":318},"\u002F\u002Fint func(double a, int b)\n",[312,15962,15963],{"class":314,"line":3560},[312,15964,15965],{"class":318},"\u002F\u002F{\n",[312,15967,15968],{"class":314,"line":3565},[312,15969,15970],{"class":318},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[312,15972,15973],{"class":314,"line":3570},[312,15974,15975],{"class":318},"\u002F\u002F}\n",[312,15977,15978],{"class":314,"line":3584},[312,15979,4205],{"emptyLinePlaceholder":1881},[312,15981,15982],{"class":314,"line":3589},[312,15983,4205],{"emptyLinePlaceholder":1881},[312,15985,15986,15988,15990],{"class":314,"line":4382},[312,15987,1956],{"class":1436},[312,15989,3778],{"class":332},[312,15991,12656],{"class":324},[312,15993,15994],{"class":314,"line":4396},[312,15995,4205],{"emptyLinePlaceholder":1881},[312,15997,15998,16000],{"class":314,"line":4404},[312,15999,15087],{"class":332},[312,16001,7440],{"class":324},[312,16003,16004,16006,16008,16010],{"class":314,"line":4409},[312,16005,15087],{"class":332},[312,16007,1576],{"class":324},[312,16009,2391],{"class":488},[312,16011,4524],{"class":324},[312,16013,16014,16016,16018,16020],{"class":314,"line":4415},[312,16015,15087],{"class":332},[312,16017,1576],{"class":324},[312,16019,2000],{"class":488},[312,16021,4524],{"class":324},[312,16023,16024,16026,16028,16030,16032,16034],{"class":314,"line":4421},[312,16025,15087],{"class":332},[312,16027,1576],{"class":324},[312,16029,2391],{"class":488},[312,16031,2323],{"class":324},[312,16033,2000],{"class":488},[312,16035,4524],{"class":324},[312,16037,16038,16040,16042,16044,16047,16049],{"class":314,"line":4426},[312,16039,15087],{"class":332},[312,16041,1576],{"class":324},[312,16043,2000],{"class":488},[312,16045,16046],{"class":324}," , ",[312,16048,2391],{"class":488},[312,16050,4524],{"class":324},[312,16052,16053],{"class":314,"line":9751},[312,16054,15012],{"class":324},[312,16056,16057,16059,16061,16063],{"class":314,"line":9775},[312,16058,4108],{"class":332},[312,16060,1576],{"class":324},[312,16062,4113],{"class":339},[312,16064,4524],{"class":324},[312,16066,16067],{"class":314,"line":9780},[312,16068,4205],{"emptyLinePlaceholder":1881},[312,16070,16071,16073,16075],{"class":314,"line":9786},[312,16072,5895],{"class":1436},[312,16074,5898],{"class":488},[312,16076,498],{"class":324},[312,16078,16079],{"class":314,"line":9813},[312,16080,515],{"class":324},[24,16082,16083],{},"重点：函数返回值不可以作为函数重载条件！",[69,16085,16087],{"id":16086},"_732注意事项","7.3.2注意事项",[243,16089,16090,16093],{},[143,16091,16092],{},"引用作为重载条件!!!",[143,16094,16095],{},"函数重载碰到函数默认参数",[303,16097,16099],{"className":1942,"code":16098,"language":1944,"meta":308,"style":308},"\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",[119,16100,16101,16106,16111,16115,16131,16135,16148,16152,16156,16174,16178,16191,16195,16199,16203,16208,16212,16236,16240,16253,16257,16261,16275,16279,16292,16296,16300,16308,16312,16324,16334,16347,16351,16355,16363,16367,16377,16381,16389],{"__ignoreMap":308},[312,16102,16103],{"class":314,"line":315},[312,16104,16105],{"class":318},"\u002F\u002F函数重载注意事项\n",[312,16107,16108],{"class":314,"line":171},[312,16109,16110],{"class":318},"\u002F\u002F1、引用作为重载条件\n",[312,16112,16113],{"class":314,"line":274},[312,16114,4205],{"emptyLinePlaceholder":1881},[312,16116,16117,16119,16121,16123,16125,16127,16129],{"class":314,"line":298},[312,16118,7168],{"class":1436},[312,16120,13188],{"class":332},[312,16122,1576],{"class":324},[312,16124,1956],{"class":1436},[312,16126,12387],{"class":1436},[312,16128,164],{"class":1579},[312,16130,1959],{"class":324},[312,16132,16133],{"class":314,"line":974},[312,16134,3353],{"class":324},[312,16136,16137,16139,16141,16144,16146],{"class":314,"line":980},[312,16138,8333],{"class":324},[312,16140,2985],{"class":1436},[312,16142,16143],{"class":339}," \"func (int &a) 调用 \"",[312,16145,3252],{"class":1436},[312,16147,10643],{"class":324},[312,16149,16150],{"class":314,"line":997},[312,16151,515],{"class":324},[312,16153,16154],{"class":314,"line":1003},[312,16155,4205],{"emptyLinePlaceholder":1881},[312,16157,16158,16160,16162,16164,16166,16168,16170,16172],{"class":314,"line":1020},[312,16159,7168],{"class":1436},[312,16161,13188],{"class":332},[312,16163,1576],{"class":324},[312,16165,8596],{"class":1436},[312,16167,4187],{"class":1436},[312,16169,12387],{"class":1436},[312,16171,164],{"class":1579},[312,16173,1959],{"class":324},[312,16175,16176],{"class":314,"line":1026},[312,16177,3353],{"class":324},[312,16179,16180,16182,16184,16187,16189],{"class":314,"line":3418},[312,16181,8333],{"class":324},[312,16183,2985],{"class":1436},[312,16185,16186],{"class":339}," \"func (const int &a) 调用 \"",[312,16188,3252],{"class":1436},[312,16190,10643],{"class":324},[312,16192,16193],{"class":314,"line":3423},[312,16194,515],{"class":324},[312,16196,16197],{"class":314,"line":3429},[312,16198,4205],{"emptyLinePlaceholder":1881},[312,16200,16201],{"class":314,"line":3434},[312,16202,4205],{"emptyLinePlaceholder":1881},[312,16204,16205],{"class":314,"line":3448},[312,16206,16207],{"class":318},"\u002F\u002F2、函数重载碰到函数默认参数\n",[312,16209,16210],{"class":314,"line":3453},[312,16211,4205],{"emptyLinePlaceholder":1881},[312,16213,16214,16216,16218,16220,16222,16224,16226,16228,16230,16232,16234],{"class":314,"line":3459},[312,16215,7168],{"class":1436},[312,16217,15420],{"class":332},[312,16219,1576],{"class":324},[312,16221,1956],{"class":1436},[312,16223,3206],{"class":1579},[312,16225,733],{"class":324},[312,16227,1956],{"class":1436},[312,16229,4638],{"class":1579},[312,16231,15366],{"class":1436},[312,16233,3843],{"class":488},[312,16235,1959],{"class":324},[312,16237,16238],{"class":314,"line":3480},[312,16239,3353],{"class":324},[312,16241,16242,16244,16246,16249,16251],{"class":314,"line":3485},[312,16243,8333],{"class":324},[312,16245,2985],{"class":1436},[312,16247,16248],{"class":339}," \"func2(int a, int b = 10) 调用\"",[312,16250,3252],{"class":1436},[312,16252,10643],{"class":324},[312,16254,16255],{"class":314,"line":3499},[312,16256,515],{"class":324},[312,16258,16259],{"class":314,"line":3504},[312,16260,4205],{"emptyLinePlaceholder":1881},[312,16262,16263,16265,16267,16269,16271,16273],{"class":314,"line":3533},[312,16264,7168],{"class":1436},[312,16266,15420],{"class":332},[312,16268,1576],{"class":324},[312,16270,1956],{"class":1436},[312,16272,3206],{"class":1579},[312,16274,1959],{"class":324},[312,16276,16277],{"class":314,"line":3538},[312,16278,3353],{"class":324},[312,16280,16281,16283,16285,16288,16290],{"class":314,"line":3555},[312,16282,8333],{"class":324},[312,16284,2985],{"class":1436},[312,16286,16287],{"class":339}," \"func2(int a) 调用\"",[312,16289,3252],{"class":1436},[312,16291,10643],{"class":324},[312,16293,16294],{"class":314,"line":3560},[312,16295,515],{"class":324},[312,16297,16298],{"class":314,"line":3565},[312,16299,4205],{"emptyLinePlaceholder":1881},[312,16301,16302,16304,16306],{"class":314,"line":3570},[312,16303,1956],{"class":1436},[312,16305,3778],{"class":332},[312,16307,12656],{"class":324},[312,16309,16310],{"class":314,"line":3584},[312,16311,15012],{"class":324},[312,16313,16314,16316,16318,16320,16322],{"class":314,"line":3589},[312,16315,3790],{"class":1436},[312,16317,12672],{"class":324},[312,16319,336],{"class":1436},[312,16321,3843],{"class":488},[312,16323,498],{"class":324},[312,16325,16326,16328,16331],{"class":314,"line":4382},[312,16327,15087],{"class":332},[312,16329,16330],{"class":324},"(a);",[312,16332,16333],{"class":318}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[312,16335,16336,16338,16340,16342,16344],{"class":314,"line":4396},[312,16337,15087],{"class":332},[312,16339,1576],{"class":324},[312,16341,2391],{"class":488},[312,16343,7770],{"class":324},[312,16345,16346],{"class":318},"\u002F\u002F调用有const   10是个常量\n",[312,16348,16349],{"class":314,"line":4404},[312,16350,4205],{"emptyLinePlaceholder":1881},[312,16352,16353],{"class":314,"line":4409},[312,16354,4205],{"emptyLinePlaceholder":1881},[312,16356,16357,16360],{"class":314,"line":4415},[312,16358,16359],{"class":318},"    \u002F\u002Ffunc2(10);",[312,16361,16362],{"class":318}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[312,16364,16365],{"class":314,"line":4421},[312,16366,4205],{"emptyLinePlaceholder":1881},[312,16368,16369,16371,16373,16375],{"class":314,"line":4426},[312,16370,4108],{"class":332},[312,16372,1576],{"class":324},[312,16374,4113],{"class":339},[312,16376,4524],{"class":324},[312,16378,16379],{"class":314,"line":9751},[312,16380,4205],{"emptyLinePlaceholder":1881},[312,16382,16383,16385,16387],{"class":314,"line":9775},[312,16384,5895],{"class":1436},[312,16386,5898],{"class":488},[312,16388,498],{"class":324},[312,16390,16391],{"class":314,"line":9780},[312,16392,515],{"class":324},[1856,16394,16395],{},"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":308,"searchDepth":171,"depth":171,"links":16397},[16398,16399,16400],{"id":15331,"depth":171,"text":15332},{"id":15587,"depth":171,"text":15588},{"id":15709,"depth":171,"text":15710,"children":16401},[16402,16403],{"id":15716,"depth":274,"text":15717},{"id":16086,"depth":274,"text":16087},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15323,"description":308},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16410,"title":16411,"body":16412,"description":25162,"extension":1879,"meta":25163,"navigation":1881,"path":25164,"seo":25165,"stem":25166,"__hash__":25167},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16413,"toc":25143},[16414,16417,16423,16430,16435,16438,16441,16444,16448,16452,16455,16458,16466,16471,16474,16481,16486,16645,16648,16901,16904,16907,16910,16915,16918,16921,16932,16937,17173,17177,17187,17190,17198,17345,17349,17352,17355,17359,17803,17807,17815,17823,18735,18742,18747,19375,19378,19381,19384,19503,19506,19593,19596,19722,19725,19819,19822,20175,20179,20187,20191,20198,20201,20204,20214,20220,20225,20237,20245,20265,20273,20290,20476,20479,20483,20486,20489,20492,20495,20498,20501,20504,20964,20970,20974,20977,20988,21575,21578,22067,22071,22074,22077,22080,22083,22086,22094,22490,22494,22497,22500,22947,22950,22953,22958,22961,22966,22969,22973,22976,22978,22984,22987,23293,23302,23343,23347,23350,23352,23385,23388,23695,23697,23712,23715,23738,23747,23753,23756,23760,23763,23766,23771,23782,23787,23795,23800,23930,23933,23936,24111,24116,24328,24332,24335,24449,24454,24693,24697,24701,24704,24707,24711,24816,24819,24822,24825,24829,24940,24943,24946,24951,25003,25006,25009,25014,25060,25063,25068,25136,25138,25141],[10,16415,16411],{"id":16416},"_8类和对象",[24,16418,16419,16420],{},"C++面向对象的三大特性为",[27,16421,16422],{},"封装、继承、多态",[24,16424,16425,16426,16429],{},"C++认为",[27,16427,16428],{},"万事万物都皆为对象","，对象上有其属性和行为",[24,16431,16432],{},[27,16433,16434],{},"例如：",[24,16436,16437],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[24,16439,16440],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[24,16442,16443],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,16445,16447],{"id":16446},"_81封装","8.1封装",[69,16449,16451],{"id":16450},"_811封装的意义","8.1.1封装的意义",[24,16453,16454],{},"封装是C++面向对象三大特性之一",[24,16456,16457],{},"封装的意义：",[243,16459,16460,16463],{},[143,16461,16462],{},"将属性和行为作为一个整体，表现生活中的事物",[143,16464,16465],{},"将属性和行为加以权限控制",[24,16467,16468],{},[27,16469,16470],{},"封装意义一：",[24,16472,16473],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[24,16475,16476,15596,16478],{},[27,16477,6986],{},[119,16479,16480],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[140,16482,16483],{},[143,16484,16485],{},"**示例1：**设计一个圆类，求圆的周长",[303,16487,16489],{"className":1942,"code":16488,"language":1944,"meta":308,"style":308},"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",[119,16490,16491,16499,16503,16508,16513,16518,16523,16530,16535,16545,16549,16567,16571,16575,16583,16587,16592,16597,16602,16607,16618,16641],{"__ignoreMap":308},[312,16492,16493,16496],{"class":314,"line":315},[312,16494,16495],{"class":1436},"class",[312,16497,16498],{"class":332}," Circle\n",[312,16500,16501],{"class":314,"line":171},[312,16502,3353],{"class":324},[312,16504,16505],{"class":314,"line":274},[312,16506,16507],{"class":318},"    \u002F\u002F访问权限\n",[312,16509,16510],{"class":314,"line":298},[312,16511,16512],{"class":318},"    \u002F\u002F公共权限\n",[312,16514,16515],{"class":314,"line":974},[312,16516,16517],{"class":1436},"public:\n",[312,16519,16520],{"class":314,"line":980},[312,16521,16522],{"class":318},"    \u002F\u002F属性\n",[312,16524,16525,16527],{"class":314,"line":997},[312,16526,3790],{"class":1436},[312,16528,16529],{"class":324}," m_r;\n",[312,16531,16532],{"class":314,"line":1003},[312,16533,16534],{"class":318},"    \u002F\u002F行为\n",[312,16536,16537,16540,16543],{"class":314,"line":1020},[312,16538,16539],{"class":1436},"    double",[312,16541,16542],{"class":332}," calculateZC",[312,16544,3781],{"class":324},[312,16546,16547],{"class":314,"line":1026},[312,16548,3835],{"class":324},[312,16550,16551,16554,16557,16559,16562,16564],{"class":314,"line":3418},[312,16552,16553],{"class":1436},"        return",[312,16555,16556],{"class":488}," 2",[312,16558,2400],{"class":1436},[312,16560,16561],{"class":324},"PI",[312,16563,2400],{"class":1436},[312,16565,16566],{"class":324},"m_r;\n",[312,16568,16569],{"class":314,"line":3423},[312,16570,3992],{"class":324},[312,16572,16573],{"class":314,"line":3429},[312,16574,5800],{"class":324},[312,16576,16577,16579,16581],{"class":314,"line":3434},[312,16578,1956],{"class":1436},[312,16580,3778],{"class":332},[312,16582,3781],{"class":324},[312,16584,16585],{"class":314,"line":3448},[312,16586,3353],{"class":324},[312,16588,16589],{"class":314,"line":3453},[312,16590,16591],{"class":318},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[312,16593,16594],{"class":314,"line":3459},[312,16595,16596],{"class":318},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[312,16598,16599],{"class":314,"line":3480},[312,16600,16601],{"class":324},"    Circle c1;\n",[312,16603,16604],{"class":314,"line":3485},[312,16605,16606],{"class":318},"    \u002F\u002F给圆对象 的属性进行赋值\n",[312,16608,16609,16612,16614,16616],{"class":314,"line":3499},[312,16610,16611],{"class":324},"    c1.m_r",[312,16613,336],{"class":1436},[312,16615,2391],{"class":488},[312,16617,498],{"class":324},[312,16619,16620,16622,16624,16627,16629,16632,16635,16637,16639],{"class":314,"line":3504},[312,16621,3358],{"class":324},[312,16623,2985],{"class":1436},[312,16625,16626],{"class":339},"\"圆的周长\"",[312,16628,2985],{"class":1436},[312,16630,16631],{"class":324},"c1.",[312,16633,16634],{"class":332},"calculateZC",[312,16636,4232],{"class":324},[312,16638,2985],{"class":1436},[312,16640,3007],{"class":324},[312,16642,16643],{"class":314,"line":3533},[312,16644,515],{"class":324},[24,16646,16647],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[303,16649,16651],{"className":1942,"code":16650,"language":1944,"meta":308,"style":308},"#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",[119,16652,16653,16659,16669,16675,16681,16685,16689,16694,16701,16706,16724,16728,16738,16742,16747,16763,16767,16777,16781,16786,16794,16798,16830,16834,16838,16846,16850,16855,16860,16874,16888,16897],{"__ignoreMap":308},[312,16654,16655,16657],{"class":314,"line":315},[312,16656,3755],{"class":1436},[312,16658,3758],{"class":339},[312,16660,16661,16663,16665,16667],{"class":314,"line":171},[312,16662,3763],{"class":1436},[312,16664,3766],{"class":1436},[312,16666,3769],{"class":332},[312,16668,498],{"class":324},[312,16670,16671,16673],{"class":314,"line":274},[312,16672,3755],{"class":1436},[312,16674,9552],{"class":339},[312,16676,16677,16679],{"class":314,"line":298},[312,16678,16495],{"class":1436},[312,16680,9565],{"class":332},[312,16682,16683],{"class":314,"line":974},[312,16684,3353],{"class":324},[312,16686,16687],{"class":314,"line":980},[312,16688,16517],{"class":1436},[312,16690,16691],{"class":314,"line":997},[312,16692,16693],{"class":324},"    string m_name;\n",[312,16695,16696,16698],{"class":314,"line":1003},[312,16697,3790],{"class":1436},[312,16699,16700],{"class":324}," m_id;\n",[312,16702,16703],{"class":314,"line":1020},[312,16704,16705],{"class":318},"    \u002F\u002F赋值姓名\n",[312,16707,16708,16711,16714,16716,16719,16722],{"class":314,"line":1026},[312,16709,16710],{"class":1436},"    void",[312,16712,16713],{"class":332}," setName",[312,16715,1576],{"class":324},[312,16717,16718],{"class":332},"string",[312,16720,16721],{"class":1579}," name",[312,16723,1959],{"class":324},[312,16725,16726],{"class":314,"line":3418},[312,16727,3835],{"class":324},[312,16729,16730,16733,16735],{"class":314,"line":3423},[312,16731,16732],{"class":324},"        m_name",[312,16734,336],{"class":1436},[312,16736,16737],{"class":324},"name;\n",[312,16739,16740],{"class":314,"line":3429},[312,16741,3992],{"class":324},[312,16743,16744],{"class":314,"line":3434},[312,16745,16746],{"class":318},"    \u002F\u002F赋值学号\n",[312,16748,16749,16751,16754,16756,16758,16761],{"class":314,"line":3448},[312,16750,16710],{"class":1436},[312,16752,16753],{"class":332}," setId",[312,16755,1576],{"class":324},[312,16757,1956],{"class":1436},[312,16759,16760],{"class":1579}," id",[312,16762,1959],{"class":324},[312,16764,16765],{"class":314,"line":3453},[312,16766,3835],{"class":324},[312,16768,16769,16772,16774],{"class":314,"line":3459},[312,16770,16771],{"class":324},"        m_id",[312,16773,336],{"class":1436},[312,16775,16776],{"class":324},"id;\n",[312,16778,16779],{"class":314,"line":3480},[312,16780,3992],{"class":324},[312,16782,16783],{"class":314,"line":3485},[312,16784,16785],{"class":318},"    \u002F\u002F打印学生信息\n",[312,16787,16788,16790,16792],{"class":314,"line":3499},[312,16789,16710],{"class":1436},[312,16791,11418],{"class":332},[312,16793,3781],{"class":324},[312,16795,16796],{"class":314,"line":3504},[312,16797,3835],{"class":324},[312,16799,16800,16802,16804,16807,16809,16812,16814,16816,16818,16821,16823,16826,16828],{"class":314,"line":3533},[312,16801,5256],{"class":324},[312,16803,2985],{"class":1436},[312,16805,16806],{"class":339},"\"姓名：\"",[312,16808,2985],{"class":1436},[312,16810,16811],{"class":324},"m_name",[312,16813,2985],{"class":1436},[312,16815,6164],{"class":339},[312,16817,2985],{"class":1436},[312,16819,16820],{"class":339},"\"学号：\"",[312,16822,2985],{"class":1436},[312,16824,16825],{"class":324},"m_id",[312,16827,2985],{"class":1436},[312,16829,3007],{"class":324},[312,16831,16832],{"class":314,"line":3538},[312,16833,3992],{"class":324},[312,16835,16836],{"class":314,"line":3555},[312,16837,5800],{"class":324},[312,16839,16840,16842,16844],{"class":314,"line":3560},[312,16841,1956],{"class":1436},[312,16843,3778],{"class":332},[312,16845,3781],{"class":324},[312,16847,16848],{"class":314,"line":3565},[312,16849,3353],{"class":324},[312,16851,16852],{"class":314,"line":3570},[312,16853,16854],{"class":318},"    \u002F\u002F实例化\n",[312,16856,16857],{"class":314,"line":3584},[312,16858,16859],{"class":324},"    Student s1;\n",[312,16861,16862,16865,16868,16870,16872],{"class":314,"line":3589},[312,16863,16864],{"class":324},"    s1.",[312,16866,16867],{"class":332},"setName",[312,16869,1576],{"class":324},[312,16871,9719],{"class":339},[312,16873,4524],{"class":324},[312,16875,16876,16878,16881,16883,16886],{"class":314,"line":4382},[312,16877,16864],{"class":324},[312,16879,16880],{"class":332},"setId",[312,16882,1576],{"class":324},[312,16884,16885],{"class":488},"123456",[312,16887,4524],{"class":324},[312,16889,16890,16892,16895],{"class":314,"line":4396},[312,16891,16864],{"class":324},[312,16893,16894],{"class":332},"printInfo",[312,16896,7440],{"class":324},[312,16898,16899],{"class":314,"line":4404},[312,16900,515],{"class":324},[24,16902,16903],{},"类中的属性和行为统称为成员",[24,16905,16906],{},"属性：成员属性(成员变量)",[24,16908,16909],{},"方法：成员函数(成员方法)",[24,16911,16912],{},[27,16913,16914],{},"封装意义二：",[24,16916,16917],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[24,16919,16920],{},"访问权限有三种：",[140,16922,16923,16926,16929],{},[143,16924,16925],{},"public        公共权限",[143,16927,16928],{},"protected 保护权限",[143,16930,16931],{},"private      私有权限",[24,16933,16934],{},[27,16935,16936],{},"示例：",[303,16938,16940],{"className":11744,"code":16939,"language":11746,"meta":308,"style":308},"\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",[119,16941,16942,16947,16952,16957,16962,16966,16973,16977,16982,16986,16991,16995,17000,17005,17010,17014,17019,17024,17031,17035,17039,17047,17051,17062,17074,17086,17090,17094,17098,17106,17110,17115,17127,17135,17143,17147,17157,17161,17169],{"__ignoreMap":308},[312,16943,16944],{"class":314,"line":315},[312,16945,16946],{"class":318},"\u002F\u002F三种权限\n",[312,16948,16949],{"class":314,"line":171},[312,16950,16951],{"class":318},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[312,16953,16954],{"class":314,"line":274},[312,16955,16956],{"class":318},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[312,16958,16959],{"class":314,"line":298},[312,16960,16961],{"class":318},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[312,16963,16964],{"class":314,"line":974},[312,16965,4205],{"emptyLinePlaceholder":1881},[312,16967,16968,16970],{"class":314,"line":980},[312,16969,16495],{"class":1436},[312,16971,16972],{"class":332}," Person\n",[312,16974,16975],{"class":314,"line":997},[312,16976,3353],{"class":324},[312,16978,16979],{"class":314,"line":1003},[312,16980,16981],{"class":318},"    \u002F\u002F姓名  公共权限\n",[312,16983,16984],{"class":314,"line":1020},[312,16985,16517],{"class":1436},[312,16987,16988],{"class":314,"line":1026},[312,16989,16990],{"class":324},"    string m_Name;\n",[312,16992,16993],{"class":314,"line":3418},[312,16994,4205],{"emptyLinePlaceholder":1881},[312,16996,16997],{"class":314,"line":3423},[312,16998,16999],{"class":318},"    \u002F\u002F汽车  保护权限\n",[312,17001,17002],{"class":314,"line":3429},[312,17003,17004],{"class":1436},"protected:\n",[312,17006,17007],{"class":314,"line":3434},[312,17008,17009],{"class":324},"    string m_Car;\n",[312,17011,17012],{"class":314,"line":3448},[312,17013,4205],{"emptyLinePlaceholder":1881},[312,17015,17016],{"class":314,"line":3453},[312,17017,17018],{"class":318},"    \u002F\u002F银行卡密码  私有权限\n",[312,17020,17021],{"class":314,"line":3459},[312,17022,17023],{"class":1436},"private:\n",[312,17025,17026,17028],{"class":314,"line":3480},[312,17027,3790],{"class":1436},[312,17029,17030],{"class":324}," m_Password;\n",[312,17032,17033],{"class":314,"line":3485},[312,17034,4205],{"emptyLinePlaceholder":1881},[312,17036,17037],{"class":314,"line":3499},[312,17038,16517],{"class":1436},[312,17040,17041,17043,17045],{"class":314,"line":3504},[312,17042,16710],{"class":1436},[312,17044,13188],{"class":332},[312,17046,3781],{"class":324},[312,17048,17049],{"class":314,"line":3533},[312,17050,3835],{"class":324},[312,17052,17053,17056,17058,17060],{"class":314,"line":3538},[312,17054,17055],{"class":324},"        m_Name ",[312,17057,336],{"class":1436},[312,17059,10741],{"class":339},[312,17061,498],{"class":324},[312,17063,17064,17067,17069,17072],{"class":314,"line":3555},[312,17065,17066],{"class":324},"        m_Car ",[312,17068,336],{"class":1436},[312,17070,17071],{"class":339}," \"拖拉机\"",[312,17073,498],{"class":324},[312,17075,17076,17079,17081,17084],{"class":314,"line":3560},[312,17077,17078],{"class":324},"        m_Password ",[312,17080,336],{"class":1436},[312,17082,17083],{"class":488}," 123456",[312,17085,498],{"class":324},[312,17087,17088],{"class":314,"line":3565},[312,17089,3992],{"class":324},[312,17091,17092],{"class":314,"line":3570},[312,17093,5800],{"class":324},[312,17095,17096],{"class":314,"line":3584},[312,17097,4205],{"emptyLinePlaceholder":1881},[312,17099,17100,17102,17104],{"class":314,"line":3589},[312,17101,1956],{"class":1436},[312,17103,3778],{"class":332},[312,17105,12656],{"class":324},[312,17107,17108],{"class":314,"line":4382},[312,17109,4205],{"emptyLinePlaceholder":1881},[312,17111,17112],{"class":314,"line":4396},[312,17113,17114],{"class":324},"    Person p;\n",[312,17116,17117,17120,17122,17125],{"class":314,"line":4404},[312,17118,17119],{"class":324},"    p.m_Name ",[312,17121,336],{"class":1436},[312,17123,17124],{"class":339}," \"李四\"",[312,17126,498],{"class":324},[312,17128,17129,17132],{"class":314,"line":4409},[312,17130,17131],{"class":318},"    \u002F\u002Fp.m_Car = \"奔驰\";",[312,17133,17134],{"class":318},"  \u002F\u002F保护权限类外访问不到\n",[312,17136,17137,17140],{"class":314,"line":4415},[312,17138,17139],{"class":318},"    \u002F\u002Fp.m_Password = 123;",[312,17141,17142],{"class":318}," \u002F\u002F私有权限类外访问不到\n",[312,17144,17145],{"class":314,"line":4421},[312,17146,4205],{"emptyLinePlaceholder":1881},[312,17148,17149,17151,17153,17155],{"class":314,"line":4426},[312,17150,4108],{"class":332},[312,17152,1576],{"class":324},[312,17154,4113],{"class":339},[312,17156,4524],{"class":324},[312,17158,17159],{"class":314,"line":9751},[312,17160,4205],{"emptyLinePlaceholder":1881},[312,17162,17163,17165,17167],{"class":314,"line":9775},[312,17164,5895],{"class":1436},[312,17166,5898],{"class":488},[312,17168,498],{"class":324},[312,17170,17171],{"class":314,"line":9780},[312,17172,515],{"class":324},[69,17174,17176],{"id":17175},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[24,17178,17179,17180,17183,17184],{},"在C++中 struct和class唯一的",[27,17181,17182],{},"区别","就在于 ",[27,17185,17186],{},"默认的访问权限不同",[24,17188,17189],{},"区别：",[243,17191,17192,17195],{},[143,17193,17194],{},"struct 默认权限为公共",[143,17196,17197],{},"class   默认权限为私有",[303,17199,17201],{"className":11744,"code":17200,"language":11746,"meta":308,"style":308},"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",[119,17202,17203,17210,17214,17224,17228,17232,17239,17243,17253,17257,17261,17269,17273,17278,17292,17296,17301,17315,17319,17329,17333,17341],{"__ignoreMap":308},[312,17204,17205,17207],{"class":314,"line":315},[312,17206,16495],{"class":1436},[312,17208,17209],{"class":332}," C1\n",[312,17211,17212],{"class":314,"line":171},[312,17213,3353],{"class":324},[312,17215,17216,17218,17221],{"class":314,"line":274},[312,17217,3790],{"class":1436},[312,17219,17220],{"class":324},"  m_A;",[312,17222,17223],{"class":318}," \u002F\u002F默认是私有权限\n",[312,17225,17226],{"class":314,"line":298},[312,17227,5800],{"class":324},[312,17229,17230],{"class":314,"line":974},[312,17231,4205],{"emptyLinePlaceholder":1881},[312,17233,17234,17236],{"class":314,"line":980},[312,17235,9562],{"class":1436},[312,17237,17238],{"class":332}," C2\n",[312,17240,17241],{"class":314,"line":997},[312,17242,3353],{"class":324},[312,17244,17245,17247,17250],{"class":314,"line":1003},[312,17246,3790],{"class":1436},[312,17248,17249],{"class":324}," m_A;",[312,17251,17252],{"class":318},"  \u002F\u002F默认是公共权限\n",[312,17254,17255],{"class":314,"line":1020},[312,17256,5800],{"class":324},[312,17258,17259],{"class":314,"line":1026},[312,17260,4205],{"emptyLinePlaceholder":1881},[312,17262,17263,17265,17267],{"class":314,"line":3418},[312,17264,1956],{"class":1436},[312,17266,3778],{"class":332},[312,17268,12656],{"class":324},[312,17270,17271],{"class":314,"line":3423},[312,17272,4205],{"emptyLinePlaceholder":1881},[312,17274,17275],{"class":314,"line":3429},[312,17276,17277],{"class":324},"    C1 c1;\n",[312,17279,17280,17283,17285,17287,17289],{"class":314,"line":3434},[312,17281,17282],{"class":324},"    c1.m_A ",[312,17284,336],{"class":1436},[312,17286,3843],{"class":488},[312,17288,2006],{"class":324},[312,17290,17291],{"class":318}," \u002F\u002F错误，访问权限是私有\n",[312,17293,17294],{"class":314,"line":3448},[312,17295,4205],{"emptyLinePlaceholder":1881},[312,17297,17298],{"class":314,"line":3453},[312,17299,17300],{"class":324},"    C2 c2;\n",[312,17302,17303,17306,17308,17310,17312],{"class":314,"line":3459},[312,17304,17305],{"class":324},"    c2.m_A ",[312,17307,336],{"class":1436},[312,17309,3843],{"class":488},[312,17311,2006],{"class":324},[312,17313,17314],{"class":318}," \u002F\u002F正确，访问权限是公共\n",[312,17316,17317],{"class":314,"line":3480},[312,17318,4205],{"emptyLinePlaceholder":1881},[312,17320,17321,17323,17325,17327],{"class":314,"line":3485},[312,17322,4108],{"class":332},[312,17324,1576],{"class":324},[312,17326,4113],{"class":339},[312,17328,4524],{"class":324},[312,17330,17331],{"class":314,"line":3499},[312,17332,4205],{"emptyLinePlaceholder":1881},[312,17334,17335,17337,17339],{"class":314,"line":3504},[312,17336,5895],{"class":1436},[312,17338,5898],{"class":488},[312,17340,498],{"class":324},[312,17342,17343],{"class":314,"line":3533},[312,17344,515],{"class":324},[69,17346,17348],{"id":17347},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[24,17350,17351],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[24,17353,17354],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[24,17356,17357],{},[27,17358,16936],{},[303,17360,17362],{"className":11744,"code":17361,"language":11746,"meta":308,"style":308},"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",[119,17363,17364,17373,17377,17381,17386,17400,17409,17413,17423,17427,17434,17438,17442,17446,17451,17460,17467,17471,17476,17492,17515,17528,17535,17539,17548,17552,17556,17561,17577,17587,17591,17595,17599,17607,17611,17621,17625,17633,17637,17641,17649,17653,17657,17662,17675,17698,17702,17707,17720,17742,17746,17751,17765,17773,17777,17787,17791,17799],{"__ignoreMap":308},[312,17365,17366,17368,17371],{"class":314,"line":315},[312,17367,16495],{"class":1436},[312,17369,17370],{"class":332}," Person",[312,17372,483],{"class":324},[312,17374,17375],{"class":314,"line":171},[312,17376,16517],{"class":1436},[312,17378,17379],{"class":314,"line":274},[312,17380,4205],{"emptyLinePlaceholder":1881},[312,17382,17383],{"class":314,"line":298},[312,17384,17385],{"class":318},"    \u002F\u002F姓名设置可读可写\n",[312,17387,17388,17390,17392,17394,17396,17398],{"class":314,"line":974},[312,17389,16710],{"class":1436},[312,17391,16713],{"class":332},[312,17393,1576],{"class":324},[312,17395,16718],{"class":332},[312,17397,16721],{"class":1579},[312,17399,14244],{"class":324},[312,17401,17402,17404,17406],{"class":314,"line":980},[312,17403,17055],{"class":324},[312,17405,336],{"class":1436},[312,17407,17408],{"class":324}," name;\n",[312,17410,17411],{"class":314,"line":997},[312,17412,3992],{"class":324},[312,17414,17415,17418,17421],{"class":314,"line":1003},[312,17416,17417],{"class":332},"    string",[312,17419,17420],{"class":332}," getName",[312,17422,3781],{"class":324},[312,17424,17425],{"class":314,"line":1020},[312,17426,3835],{"class":324},[312,17428,17429,17431],{"class":314,"line":1026},[312,17430,16553],{"class":1436},[312,17432,17433],{"class":324}," m_Name;\n",[312,17435,17436],{"class":314,"line":3418},[312,17437,3992],{"class":324},[312,17439,17440],{"class":314,"line":3423},[312,17441,4205],{"emptyLinePlaceholder":1881},[312,17443,17444],{"class":314,"line":3429},[312,17445,4205],{"emptyLinePlaceholder":1881},[312,17447,17448],{"class":314,"line":3434},[312,17449,17450],{"class":318},"    \u002F\u002F获取年龄 \n",[312,17452,17453,17455,17458],{"class":314,"line":3448},[312,17454,3790],{"class":1436},[312,17456,17457],{"class":332}," getAge",[312,17459,12656],{"class":324},[312,17461,17462,17464],{"class":314,"line":3453},[312,17463,16553],{"class":1436},[312,17465,17466],{"class":324}," m_Age;\n",[312,17468,17469],{"class":314,"line":3459},[312,17470,3992],{"class":324},[312,17472,17473],{"class":314,"line":3480},[312,17474,17475],{"class":318},"    \u002F\u002F设置年龄\n",[312,17477,17478,17480,17483,17485,17487,17490],{"class":314,"line":3485},[312,17479,16710],{"class":1436},[312,17481,17482],{"class":332}," setAge",[312,17484,1576],{"class":324},[312,17486,1956],{"class":1436},[312,17488,17489],{"class":1579}," age",[312,17491,14244],{"class":324},[312,17493,17494,17496,17499,17501,17503,17505,17508,17510,17513],{"class":314,"line":3499},[312,17495,4302],{"class":1436},[312,17497,17498],{"class":324}," (age ",[312,17500,325],{"class":1436},[312,17502,5898],{"class":488},[312,17504,5060],{"class":1436},[312,17506,17507],{"class":324}," age ",[312,17509,2902],{"class":1436},[312,17511,17512],{"class":488}," 150",[312,17514,14244],{"class":324},[312,17516,17517,17519,17521,17524,17526],{"class":314,"line":3504},[312,17518,11522],{"class":324},[312,17520,2985],{"class":1436},[312,17522,17523],{"class":339}," \"你个老妖精!\"",[312,17525,3252],{"class":1436},[312,17527,10643],{"class":324},[312,17529,17530,17533],{"class":314,"line":3533},[312,17531,17532],{"class":1436},"            return",[312,17534,498],{"class":324},[312,17536,17537],{"class":314,"line":3538},[312,17538,4334],{"class":324},[312,17540,17541,17544,17546],{"class":314,"line":3555},[312,17542,17543],{"class":324},"        m_Age ",[312,17545,336],{"class":1436},[312,17547,9600],{"class":324},[312,17549,17550],{"class":314,"line":3560},[312,17551,3992],{"class":324},[312,17553,17554],{"class":314,"line":3565},[312,17555,4205],{"emptyLinePlaceholder":1881},[312,17557,17558],{"class":314,"line":3570},[312,17559,17560],{"class":318},"    \u002F\u002F情人设置为只写\n",[312,17562,17563,17565,17568,17570,17572,17575],{"class":314,"line":3584},[312,17564,16710],{"class":1436},[312,17566,17567],{"class":332}," setLover",[312,17569,1576],{"class":324},[312,17571,16718],{"class":332},[312,17573,17574],{"class":1579}," lover",[312,17576,14244],{"class":324},[312,17578,17579,17582,17584],{"class":314,"line":3589},[312,17580,17581],{"class":324},"        m_Lover ",[312,17583,336],{"class":1436},[312,17585,17586],{"class":324}," lover;\n",[312,17588,17589],{"class":314,"line":4382},[312,17590,3992],{"class":324},[312,17592,17593],{"class":314,"line":4396},[312,17594,4205],{"emptyLinePlaceholder":1881},[312,17596,17597],{"class":314,"line":4404},[312,17598,17023],{"class":1436},[312,17600,17601,17604],{"class":314,"line":4409},[312,17602,17603],{"class":324},"    string m_Name;",[312,17605,17606],{"class":318}," \u002F\u002F可读可写  姓名\n",[312,17608,17609],{"class":314,"line":4415},[312,17610,15012],{"class":324},[312,17612,17613,17615,17618],{"class":314,"line":4421},[312,17614,3790],{"class":1436},[312,17616,17617],{"class":324}," m_Age;",[312,17619,17620],{"class":318}," \u002F\u002F只读  年龄\n",[312,17622,17623],{"class":314,"line":4426},[312,17624,4205],{"emptyLinePlaceholder":1881},[312,17626,17627,17630],{"class":314,"line":9751},[312,17628,17629],{"class":324},"    string m_Lover;",[312,17631,17632],{"class":318}," \u002F\u002F只写  情人\n",[312,17634,17635],{"class":314,"line":9775},[312,17636,5800],{"class":324},[312,17638,17639],{"class":314,"line":9780},[312,17640,4205],{"emptyLinePlaceholder":1881},[312,17642,17643,17645,17647],{"class":314,"line":9786},[312,17644,1956],{"class":1436},[312,17646,3778],{"class":332},[312,17648,12656],{"class":324},[312,17650,17651],{"class":314,"line":9813},[312,17652,4205],{"emptyLinePlaceholder":1881},[312,17654,17655],{"class":314,"line":9818},[312,17656,17114],{"class":324},[312,17658,17659],{"class":314,"line":9824},[312,17660,17661],{"class":318},"    \u002F\u002F姓名设置\n",[312,17663,17664,17667,17669,17671,17673],{"class":314,"line":9836},[312,17665,17666],{"class":324},"    p.",[312,17668,16867],{"class":332},[312,17670,1576],{"class":324},[312,17672,9719],{"class":339},[312,17674,4524],{"class":324},[312,17676,17677,17679,17681,17684,17686,17689,17692,17694,17696],{"class":314,"line":9848},[312,17678,8333],{"class":324},[312,17680,2985],{"class":1436},[312,17682,17683],{"class":339}," \"姓名： \"",[312,17685,3252],{"class":1436},[312,17687,17688],{"class":324}," p.",[312,17690,17691],{"class":332},"getName",[312,17693,14852],{"class":324},[312,17695,2985],{"class":1436},[312,17697,10643],{"class":324},[312,17699,17700],{"class":314,"line":9860},[312,17701,4205],{"emptyLinePlaceholder":1881},[312,17703,17704],{"class":314,"line":11519},[312,17705,17706],{"class":318},"    \u002F\u002F年龄设置\n",[312,17708,17709,17711,17714,17716,17718],{"class":314,"line":11544},[312,17710,17666],{"class":324},[312,17712,17713],{"class":332},"setAge",[312,17715,1576],{"class":324},[312,17717,2601],{"class":488},[312,17719,4524],{"class":324},[312,17721,17722,17724,17726,17729,17731,17733,17736,17738,17740],{"class":314,"line":11567},[312,17723,8333],{"class":324},[312,17725,2985],{"class":1436},[312,17727,17728],{"class":339}," \"年龄： \"",[312,17730,3252],{"class":1436},[312,17732,17688],{"class":324},[312,17734,17735],{"class":332},"getAge",[312,17737,14852],{"class":324},[312,17739,2985],{"class":1436},[312,17741,10643],{"class":324},[312,17743,17744],{"class":314,"line":11591},[312,17745,4205],{"emptyLinePlaceholder":1881},[312,17747,17748],{"class":314,"line":11596},[312,17749,17750],{"class":318},"    \u002F\u002F情人设置\n",[312,17752,17753,17755,17758,17760,17763],{"class":314,"line":11601},[312,17754,17666],{"class":324},[312,17756,17757],{"class":332},"setLover",[312,17759,1576],{"class":324},[312,17761,17762],{"class":339},"\"苍井\"",[312,17764,4524],{"class":324},[312,17766,17767,17770],{"class":314,"line":11606},[312,17768,17769],{"class":318},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[312,17771,17772],{"class":318},"  \u002F\u002F只写属性，不可以读取\n",[312,17774,17775],{"class":314,"line":11615},[312,17776,4205],{"emptyLinePlaceholder":1881},[312,17778,17779,17781,17783,17785],{"class":314,"line":11620},[312,17780,4108],{"class":332},[312,17782,1576],{"class":324},[312,17784,4113],{"class":339},[312,17786,4524],{"class":324},[312,17788,17789],{"class":314,"line":11626},[312,17790,4205],{"emptyLinePlaceholder":1881},[312,17792,17793,17795,17797],{"class":314,"line":11647},[312,17794,5895],{"class":1436},[312,17796,5898],{"class":488},[312,17798,498],{"class":324},[312,17800,17801],{"class":314,"line":11653},[312,17802,515],{"class":324},[69,17804,17806],{"id":17805},"_814封装案例","8.1.4封装案例",[140,17808,17809],{},[143,17810,17811,17814],{},[27,17812,17813],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[243,17816,17817,17820],{},[143,17818,17819],{},"求出立方体的面积和体积",[143,17821,17822],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[303,17824,17826],{"className":1942,"code":17825,"language":1944,"meta":308,"style":308},"#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",[119,17827,17828,17834,17844,17851,17855,17859,17864,17894,17898,17908,17918,17928,17932,17941,17945,17981,17985,17994,17998,18014,18018,18023,18032,18036,18043,18047,18056,18060,18067,18071,18080,18084,18091,18095,18100,18117,18121,18167,18171,18180,18184,18188,18192,18201,18205,18209,18214,18218,18224,18230,18236,18240,18244,18249,18271,18275,18329,18333,18341,18345,18350,18355,18368,18375,18391,18402,18408,18431,18437,18460,18474,18494,18500,18511,18534,18556,18561,18567,18581,18594,18599,18613,18618,18624,18629,18643,18648,18653,18667,18679,18684,18697,18702,18707,18712,18725,18730],{"__ignoreMap":308},[312,17829,17830,17832],{"class":314,"line":315},[312,17831,3755],{"class":1436},[312,17833,3758],{"class":339},[312,17835,17836,17838,17840,17842],{"class":314,"line":171},[312,17837,3763],{"class":1436},[312,17839,3766],{"class":1436},[312,17841,3769],{"class":332},[312,17843,498],{"class":324},[312,17845,17846,17848],{"class":314,"line":274},[312,17847,16495],{"class":1436},[312,17849,17850],{"class":332}," Cube\n",[312,17852,17853],{"class":314,"line":298},[312,17854,3353],{"class":324},[312,17856,17857],{"class":314,"line":974},[312,17858,16517],{"class":1436},[312,17860,17861],{"class":314,"line":980},[312,17862,17863],{"class":318},"    \u002F\u002F输入长宽高\n",[312,17865,17866,17868,17871,17873,17875,17878,17880,17882,17885,17887,17889,17892],{"class":314,"line":997},[312,17867,16710],{"class":1436},[312,17869,17870],{"class":332}," setLwh",[312,17872,1576],{"class":324},[312,17874,1956],{"class":1436},[312,17876,17877],{"class":1579}," l",[312,17879,2323],{"class":324},[312,17881,1956],{"class":1436},[312,17883,17884],{"class":1579}," w",[312,17886,2323],{"class":324},[312,17888,1956],{"class":1436},[312,17890,17891],{"class":1579}," h",[312,17893,1959],{"class":324},[312,17895,17896],{"class":314,"line":1003},[312,17897,3835],{"class":324},[312,17899,17900,17903,17905],{"class":314,"line":1020},[312,17901,17902],{"class":324},"        m_L",[312,17904,336],{"class":1436},[312,17906,17907],{"class":324},"l;\n",[312,17909,17910,17913,17915],{"class":314,"line":1026},[312,17911,17912],{"class":324},"        m_W",[312,17914,336],{"class":1436},[312,17916,17917],{"class":324},"w;\n",[312,17919,17920,17923,17925],{"class":314,"line":3418},[312,17921,17922],{"class":324},"        m_H",[312,17924,336],{"class":1436},[312,17926,17927],{"class":324},"h;\n",[312,17929,17930],{"class":314,"line":3423},[312,17931,3992],{"class":324},[312,17933,17934,17936,17939],{"class":314,"line":3429},[312,17935,3790],{"class":1436},[312,17937,17938],{"class":332}," mianji",[312,17940,3781],{"class":324},[312,17942,17943],{"class":314,"line":3434},[312,17944,3835],{"class":324},[312,17946,17947,17949,17951,17953,17956,17958,17961,17963,17966,17968,17971,17973,17976,17978],{"class":314,"line":3448},[312,17948,16553],{"class":1436},[312,17950,16556],{"class":488},[312,17952,2400],{"class":1436},[312,17954,17955],{"class":324},"(m_L",[312,17957,2400],{"class":1436},[312,17959,17960],{"class":324},"m_W ",[312,17962,2426],{"class":1436},[312,17964,17965],{"class":324}," m_L",[312,17967,2400],{"class":1436},[312,17969,17970],{"class":324},"m_H ",[312,17972,2426],{"class":1436},[312,17974,17975],{"class":324}," m_W",[312,17977,2400],{"class":1436},[312,17979,17980],{"class":324},"m_H);\n",[312,17982,17983],{"class":314,"line":3453},[312,17984,3992],{"class":324},[312,17986,17987,17989,17992],{"class":314,"line":3459},[312,17988,3790],{"class":1436},[312,17990,17991],{"class":332}," tiji",[312,17993,3781],{"class":324},[312,17995,17996],{"class":314,"line":3480},[312,17997,3835],{"class":324},[312,17999,18000,18002,18004,18006,18009,18011],{"class":314,"line":3485},[312,18001,16553],{"class":1436},[312,18003,17965],{"class":324},[312,18005,2400],{"class":1436},[312,18007,18008],{"class":324},"m_W",[312,18010,2400],{"class":1436},[312,18012,18013],{"class":324},"m_H;\n",[312,18015,18016],{"class":314,"line":3499},[312,18017,3992],{"class":324},[312,18019,18020],{"class":314,"line":3504},[312,18021,18022],{"class":318},"    \u002F\u002F获取长宽高\n",[312,18024,18025,18027,18030],{"class":314,"line":3533},[312,18026,3790],{"class":1436},[312,18028,18029],{"class":332}," getLength",[312,18031,3781],{"class":324},[312,18033,18034],{"class":314,"line":3538},[312,18035,3835],{"class":324},[312,18037,18038,18040],{"class":314,"line":3555},[312,18039,16553],{"class":1436},[312,18041,18042],{"class":324}," m_L;\n",[312,18044,18045],{"class":314,"line":3560},[312,18046,3992],{"class":324},[312,18048,18049,18051,18054],{"class":314,"line":3565},[312,18050,3790],{"class":1436},[312,18052,18053],{"class":332}," getWidth",[312,18055,3781],{"class":324},[312,18057,18058],{"class":314,"line":3570},[312,18059,3835],{"class":324},[312,18061,18062,18064],{"class":314,"line":3584},[312,18063,16553],{"class":1436},[312,18065,18066],{"class":324}," m_W;\n",[312,18068,18069],{"class":314,"line":3589},[312,18070,3992],{"class":324},[312,18072,18073,18075,18078],{"class":314,"line":4382},[312,18074,3790],{"class":1436},[312,18076,18077],{"class":332}," getHeight",[312,18079,3781],{"class":324},[312,18081,18082],{"class":314,"line":4396},[312,18083,3835],{"class":324},[312,18085,18086,18088],{"class":314,"line":4404},[312,18087,16553],{"class":1436},[312,18089,18090],{"class":324}," m_H;\n",[312,18092,18093],{"class":314,"line":4409},[312,18094,3992],{"class":324},[312,18096,18097],{"class":314,"line":4415},[312,18098,18099],{"class":318},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[312,18101,18102,18105,18108,18110,18113,18115],{"class":314,"line":4421},[312,18103,18104],{"class":1436},"    bool",[312,18106,18107],{"class":332}," isEqual",[312,18109,1576],{"class":324},[312,18111,18112],{"class":332},"Cube",[312,18114,4654],{"class":1579},[312,18116,1959],{"class":324},[312,18118,18119],{"class":314,"line":4426},[312,18120,3835],{"class":324},[312,18122,18123,18125,18128,18131,18133,18135,18138,18140,18143,18146,18148,18150,18153,18155,18157,18160,18162,18164],{"class":314,"line":9751},[312,18124,4302],{"class":1436},[312,18126,18127],{"class":324}," (c.",[312,18129,18130],{"class":332},"getLength",[312,18132,14852],{"class":324},[312,18134,4754],{"class":1436},[312,18136,18137],{"class":324}," m_L ",[312,18139,3521],{"class":1436},[312,18141,18142],{"class":324}," c.",[312,18144,18145],{"class":332},"getWidth",[312,18147,14852],{"class":324},[312,18149,4754],{"class":1436},[312,18151,18152],{"class":324}," m_W ",[312,18154,3521],{"class":1436},[312,18156,18142],{"class":324},[312,18158,18159],{"class":332},"getHeight",[312,18161,14852],{"class":324},[312,18163,4754],{"class":1436},[312,18165,18166],{"class":324}," m_H)\n",[312,18168,18169],{"class":314,"line":9775},[312,18170,4315],{"class":324},[312,18172,18173,18175,18178],{"class":314,"line":9780},[312,18174,17532],{"class":1436},[312,18176,18177],{"class":488}," true",[312,18179,498],{"class":324},[312,18181,18182],{"class":314,"line":9786},[312,18183,4334],{"class":324},[312,18185,18186],{"class":314,"line":9813},[312,18187,4375],{"class":1436},[312,18189,18190],{"class":314,"line":9818},[312,18191,4315],{"class":324},[312,18193,18194,18196,18199],{"class":314,"line":9824},[312,18195,17532],{"class":1436},[312,18197,18198],{"class":488}," false",[312,18200,498],{"class":324},[312,18202,18203],{"class":314,"line":9836},[312,18204,4334],{"class":324},[312,18206,18207],{"class":314,"line":9848},[312,18208,3992],{"class":324},[312,18210,18211],{"class":314,"line":9860},[312,18212,18213],{"class":318},"    \u002F\u002F私有属性\n",[312,18215,18216],{"class":314,"line":11519},[312,18217,17023],{"class":1436},[312,18219,18220,18222],{"class":314,"line":11544},[312,18221,3790],{"class":1436},[312,18223,18042],{"class":324},[312,18225,18226,18228],{"class":314,"line":11567},[312,18227,3790],{"class":1436},[312,18229,18066],{"class":324},[312,18231,18232,18234],{"class":314,"line":11591},[312,18233,3790],{"class":1436},[312,18235,18090],{"class":324},[312,18237,18238],{"class":314,"line":11596},[312,18239,4205],{"emptyLinePlaceholder":1881},[312,18241,18242],{"class":314,"line":11601},[312,18243,5800],{"class":324},[312,18245,18246],{"class":314,"line":11606},[312,18247,18248],{"class":318},"\u002F\u002F全局函数判断两个立方体是否相等\n",[312,18250,18251,18253,18255,18257,18259,18262,18264,18266,18269],{"class":314,"line":11615},[312,18252,3162],{"class":1436},[312,18254,18107],{"class":332},[312,18256,1576],{"class":324},[312,18258,18112],{"class":332},[312,18260,18261],{"class":1579}," c1",[312,18263,2323],{"class":324},[312,18265,18112],{"class":332},[312,18267,18268],{"class":1579}," c2",[312,18270,1959],{"class":324},[312,18272,18273],{"class":314,"line":11620},[312,18274,3353],{"class":324},[312,18276,18277,18279,18282,18284,18286,18288,18291,18293,18296,18298,18300,18302,18304,18306,18308,18310,18312,18314,18316,18318,18320,18322,18324,18326],{"class":314,"line":11626},[312,18278,5895],{"class":1436},[312,18280,18281],{"class":324}," (c1.",[312,18283,18130],{"class":332},[312,18285,14852],{"class":324},[312,18287,4754],{"class":1436},[312,18289,18290],{"class":324}," c2.",[312,18292,18130],{"class":332},[312,18294,18295],{"class":324},"()) ",[312,18297,3521],{"class":1436},[312,18299,18281],{"class":324},[312,18301,18145],{"class":332},[312,18303,14852],{"class":324},[312,18305,4754],{"class":1436},[312,18307,18290],{"class":324},[312,18309,18145],{"class":332},[312,18311,18295],{"class":324},[312,18313,3521],{"class":1436},[312,18315,18281],{"class":324},[312,18317,18159],{"class":332},[312,18319,14852],{"class":324},[312,18321,4754],{"class":1436},[312,18323,18290],{"class":324},[312,18325,18159],{"class":332},[312,18327,18328],{"class":324},"());\n",[312,18330,18331],{"class":314,"line":11647},[312,18332,515],{"class":324},[312,18334,18335,18337,18339],{"class":314,"line":11653},[312,18336,1956],{"class":1436},[312,18338,3778],{"class":332},[312,18340,3781],{"class":324},[312,18342,18343],{"class":314,"line":11667},[312,18344,3353],{"class":324},[312,18346,18347],{"class":314,"line":11673},[312,18348,18349],{"class":324},"    Cube c1;\n",[312,18351,18352],{"class":314,"line":11700},[312,18353,18354],{"class":318},"    \u002F\u002F输入立方体的长宽高\n",[312,18356,18357,18359,18361,18364,18366],{"class":314,"line":11709},[312,18358,3358],{"class":324},[312,18360,2985],{"class":1436},[312,18362,18363],{"class":339},"\"请输入第一个立方体的长、宽、高：\"",[312,18365,2985],{"class":1436},[312,18367,3007],{"class":324},[312,18369,18370,18372],{"class":314,"line":11715},[312,18371,3790],{"class":1436},[312,18373,18374],{"class":324}," l,w,h,l1,w1,h1;\n",[312,18376,18377,18379,18381,18383,18385,18387,18389],{"class":314,"line":11723},[312,18378,3817],{"class":324},[312,18380,3237],{"class":1436},[312,18382,2463],{"class":324},[312,18384,3237],{"class":1436},[312,18386,2739],{"class":324},[312,18388,3237],{"class":1436},[312,18390,17927],{"class":324},[312,18392,18393,18396,18399],{"class":314,"line":11728},[312,18394,18395],{"class":324},"    c1.",[312,18397,18398],{"class":332},"setLwh",[312,18400,18401],{"class":324},"(l,w,h);\n",[312,18403,18405],{"class":314,"line":18404},66,[312,18406,18407],{"class":318},"    \u002F\u002F面积\n",[312,18409,18411,18413,18415,18418,18420,18422,18425,18427,18429],{"class":314,"line":18410},67,[312,18412,3358],{"class":324},[312,18414,2985],{"class":1436},[312,18416,18417],{"class":339},"\"立方体的表面积为：\"",[312,18419,2985],{"class":1436},[312,18421,16631],{"class":324},[312,18423,18424],{"class":332},"mianji",[312,18426,4232],{"class":324},[312,18428,2985],{"class":1436},[312,18430,3007],{"class":324},[312,18432,18434],{"class":314,"line":18433},68,[312,18435,18436],{"class":318},"    \u002F\u002F体积\n",[312,18438,18440,18442,18444,18447,18449,18451,18454,18456,18458],{"class":314,"line":18439},69,[312,18441,3358],{"class":324},[312,18443,2985],{"class":1436},[312,18445,18446],{"class":339},"\"立方体的体积为：\"",[312,18448,2985],{"class":1436},[312,18450,16631],{"class":324},[312,18452,18453],{"class":332},"tiji",[312,18455,4232],{"class":324},[312,18457,2985],{"class":1436},[312,18459,3007],{"class":324},[312,18461,18463,18465,18467,18470,18472],{"class":314,"line":18462},70,[312,18464,3358],{"class":324},[312,18466,2985],{"class":1436},[312,18468,18469],{"class":339},"\"请输入第二个立方体的长、宽、高：\"",[312,18471,2985],{"class":1436},[312,18473,3007],{"class":324},[312,18475,18477,18479,18481,18484,18486,18489,18491],{"class":314,"line":18476},71,[312,18478,3817],{"class":324},[312,18480,3237],{"class":1436},[312,18482,18483],{"class":324},"l1",[312,18485,3237],{"class":1436},[312,18487,18488],{"class":324},"w1",[312,18490,3237],{"class":1436},[312,18492,18493],{"class":324},"h1;\n",[312,18495,18497],{"class":314,"line":18496},72,[312,18498,18499],{"class":324},"    Cube c2;\n",[312,18501,18503,18506,18508],{"class":314,"line":18502},73,[312,18504,18505],{"class":324},"    c2.",[312,18507,18398],{"class":332},[312,18509,18510],{"class":324},"(l1,w1,h1);\n",[312,18512,18514,18516,18518,18521,18523,18526,18528,18530,18532],{"class":314,"line":18513},74,[312,18515,3358],{"class":324},[312,18517,2985],{"class":1436},[312,18519,18520],{"class":339},"\"第二个立方体的表面积为：\"",[312,18522,2985],{"class":1436},[312,18524,18525],{"class":324},"c2.",[312,18527,18424],{"class":332},[312,18529,4232],{"class":324},[312,18531,2985],{"class":1436},[312,18533,3007],{"class":324},[312,18535,18537,18539,18541,18544,18546,18548,18550,18552,18554],{"class":314,"line":18536},75,[312,18538,3358],{"class":324},[312,18540,2985],{"class":1436},[312,18542,18543],{"class":339},"\"第二个立方体的体积为：\"",[312,18545,2985],{"class":1436},[312,18547,18525],{"class":324},[312,18549,18453],{"class":332},[312,18551,4232],{"class":324},[312,18553,2985],{"class":1436},[312,18555,3007],{"class":324},[312,18557,18559],{"class":314,"line":18558},76,[312,18560,4205],{"emptyLinePlaceholder":1881},[312,18562,18564],{"class":314,"line":18563},77,[312,18565,18566],{"class":318},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[312,18568,18570,18572,18574,18577,18579],{"class":314,"line":18569},78,[312,18571,3358],{"class":324},[312,18573,2985],{"class":1436},[312,18575,18576],{"class":339},"\"内部函数判断结果：\"",[312,18578,2985],{"class":1436},[312,18580,3007],{"class":324},[312,18582,18584,18586,18588,18591],{"class":314,"line":18583},79,[312,18585,4906],{"class":1436},[312,18587,18281],{"class":324},[312,18589,18590],{"class":332},"isEqual",[312,18592,18593],{"class":324},"(c2))\n",[312,18595,18597],{"class":314,"line":18596},80,[312,18598,3835],{"class":324},[312,18600,18602,18604,18606,18609,18611],{"class":314,"line":18601},81,[312,18603,5256],{"class":324},[312,18605,2985],{"class":1436},[312,18607,18608],{"class":339},"\"两个立方体相等\"",[312,18610,2985],{"class":1436},[312,18612,3007],{"class":324},[312,18614,18616],{"class":314,"line":18615},82,[312,18617,3992],{"class":324},[312,18619,18621],{"class":314,"line":18620},83,[312,18622,18623],{"class":1436},"    else\n",[312,18625,18627],{"class":314,"line":18626},84,[312,18628,3835],{"class":324},[312,18630,18632,18634,18636,18639,18641],{"class":314,"line":18631},85,[312,18633,5256],{"class":324},[312,18635,2985],{"class":1436},[312,18637,18638],{"class":339},"\"两个立方体不相等\"",[312,18640,2985],{"class":1436},[312,18642,3007],{"class":324},[312,18644,18646],{"class":314,"line":18645},86,[312,18647,3992],{"class":324},[312,18649,18651],{"class":314,"line":18650},87,[312,18652,4205],{"emptyLinePlaceholder":1881},[312,18654,18656,18658,18660,18663,18665],{"class":314,"line":18655},88,[312,18657,3358],{"class":324},[312,18659,2985],{"class":1436},[312,18661,18662],{"class":339},"\"全局函数判断结果：\"",[312,18664,2985],{"class":1436},[312,18666,3007],{"class":324},[312,18668,18670,18672,18674,18676],{"class":314,"line":18669},89,[312,18671,4906],{"class":1436},[312,18673,3464],{"class":324},[312,18675,18590],{"class":332},[312,18677,18678],{"class":324},"(c1, c2))\n",[312,18680,18682],{"class":314,"line":18681},90,[312,18683,3835],{"class":324},[312,18685,18687,18689,18691,18693,18695],{"class":314,"line":18686},91,[312,18688,5256],{"class":324},[312,18690,2985],{"class":1436},[312,18692,18608],{"class":339},[312,18694,2985],{"class":1436},[312,18696,3007],{"class":324},[312,18698,18700],{"class":314,"line":18699},92,[312,18701,3992],{"class":324},[312,18703,18705],{"class":314,"line":18704},93,[312,18706,18623],{"class":1436},[312,18708,18710],{"class":314,"line":18709},94,[312,18711,3835],{"class":324},[312,18713,18715,18717,18719,18721,18723],{"class":314,"line":18714},95,[312,18716,5256],{"class":324},[312,18718,2985],{"class":1436},[312,18720,18638],{"class":339},[312,18722,2985],{"class":1436},[312,18724,3007],{"class":324},[312,18726,18728],{"class":314,"line":18727},96,[312,18729,3992],{"class":324},[312,18731,18733],{"class":314,"line":18732},97,[312,18734,515],{"class":324},[140,18736,18737],{"start":171},[143,18738,18739],{},[27,18740,18741],{},"练习案例2：点和圆的关系",[243,18743,18744],{},[143,18745,18746],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[303,18748,18750],{"className":1942,"code":18749,"language":1944,"meta":308,"style":308},"#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",[119,18751,18752,18758,18768,18775,18782,18786,18790,18795,18829,18834,18850,18864,18868,18872,18879,18886,18890,18896,18900,18904,18908,18930,18953,18958,18972,18987,18991,18995,19001,19006,19011,19015,19041,19045,19075,19103,19131,19148,19152,19165,19169,19173,19177,19190,19194,19198,19206,19210,19214,19218,19223,19227,19238,19245,19254,19264,19275,19282,19295,19306,19316,19327,19334,19348,19353,19363,19371],{"__ignoreMap":308},[312,18753,18754,18756],{"class":314,"line":315},[312,18755,3755],{"class":1436},[312,18757,3758],{"class":339},[312,18759,18760,18762,18764,18766],{"class":314,"line":171},[312,18761,3763],{"class":1436},[312,18763,3766],{"class":1436},[312,18765,3769],{"class":332},[312,18767,498],{"class":324},[312,18769,18770,18772],{"class":314,"line":274},[312,18771,3755],{"class":1436},[312,18773,18774],{"class":339},"\u003Ccmath>\n",[312,18776,18777,18779],{"class":314,"line":298},[312,18778,16495],{"class":1436},[312,18780,18781],{"class":332}," Point\n",[312,18783,18784],{"class":314,"line":974},[312,18785,3353],{"class":324},[312,18787,18788],{"class":314,"line":980},[312,18789,16517],{"class":1436},[312,18791,18792],{"class":314,"line":997},[312,18793,18794],{"class":318},"    \u002F\u002F赋值\n",[312,18796,18797,18799,18802,18804,18806,18809,18811,18813,18816,18819,18821,18824,18826],{"class":314,"line":1003},[312,18798,16710],{"class":1436},[312,18800,18801],{"class":332}," setPoint",[312,18803,1576],{"class":324},[312,18805,15838],{"class":1436},[312,18807,18808],{"class":1579}," x",[312,18810,733],{"class":324},[312,18812,15838],{"class":1436},[312,18814,18815],{"class":1579}," y",[312,18817,18818],{"class":324},") { m_x ",[312,18820,336],{"class":1436},[312,18822,18823],{"class":324}," x; m_y ",[312,18825,336],{"class":1436},[312,18827,18828],{"class":324}," y; }\n",[312,18830,18831],{"class":314,"line":1020},[312,18832,18833],{"class":318},"    \u002F\u002F获取坐标\n",[312,18835,18836,18838,18841,18844,18847],{"class":314,"line":1026},[312,18837,16539],{"class":1436},[312,18839,18840],{"class":332}," getX",[312,18842,18843],{"class":324},"() { ",[312,18845,18846],{"class":1436},"return",[312,18848,18849],{"class":324}," m_x; }\n",[312,18851,18852,18854,18857,18859,18861],{"class":314,"line":3418},[312,18853,16539],{"class":1436},[312,18855,18856],{"class":332}," getY",[312,18858,18843],{"class":324},[312,18860,18846],{"class":1436},[312,18862,18863],{"class":324}," m_y; }\n",[312,18865,18866],{"class":314,"line":3423},[312,18867,4205],{"emptyLinePlaceholder":1881},[312,18869,18870],{"class":314,"line":3429},[312,18871,17023],{"class":1436},[312,18873,18874,18876],{"class":314,"line":3434},[312,18875,16539],{"class":1436},[312,18877,18878],{"class":324}," m_x;\n",[312,18880,18881,18883],{"class":314,"line":3448},[312,18882,16539],{"class":1436},[312,18884,18885],{"class":324}," m_y;\n",[312,18887,18888],{"class":314,"line":3453},[312,18889,5800],{"class":324},[312,18891,18892,18894],{"class":314,"line":3459},[312,18893,16495],{"class":1436},[312,18895,16498],{"class":332},[312,18897,18898],{"class":314,"line":3480},[312,18899,3353],{"class":324},[312,18901,18902],{"class":314,"line":3485},[312,18903,16517],{"class":1436},[312,18905,18906],{"class":314,"line":3499},[312,18907,18794],{"class":318},[312,18909,18910,18912,18915,18917,18919,18922,18925,18927],{"class":314,"line":3504},[312,18911,16710],{"class":1436},[312,18913,18914],{"class":332}," setRadius",[312,18916,1576],{"class":324},[312,18918,15838],{"class":1436},[312,18920,18921],{"class":1579}," r",[312,18923,18924],{"class":324},") { m_r ",[312,18926,336],{"class":1436},[312,18928,18929],{"class":324}," r; }\n",[312,18931,18932,18934,18937,18939,18942,18945,18948,18950],{"class":314,"line":3533},[312,18933,16710],{"class":1436},[312,18935,18936],{"class":332}," setCenter",[312,18938,1576],{"class":324},[312,18940,18941],{"class":332},"Point",[312,18943,18944],{"class":1579}," center",[312,18946,18947],{"class":324},") { m_center ",[312,18949,336],{"class":1436},[312,18951,18952],{"class":324}," center; }\n",[312,18954,18955],{"class":314,"line":3538},[312,18956,18957],{"class":318},"    \u002F\u002F获取属性\n",[312,18959,18960,18962,18965,18967,18969],{"class":314,"line":3555},[312,18961,16539],{"class":1436},[312,18963,18964],{"class":332}," getRadius",[312,18966,18843],{"class":324},[312,18968,18846],{"class":1436},[312,18970,18971],{"class":324}," m_r; }\n",[312,18973,18974,18977,18980,18982,18984],{"class":314,"line":3560},[312,18975,18976],{"class":332},"    Point",[312,18978,18979],{"class":332}," getCenter",[312,18981,18843],{"class":324},[312,18983,18846],{"class":1436},[312,18985,18986],{"class":324}," m_center; }\n",[312,18988,18989],{"class":314,"line":3565},[312,18990,4205],{"emptyLinePlaceholder":1881},[312,18992,18993],{"class":314,"line":3570},[312,18994,17023],{"class":1436},[312,18996,18997,18999],{"class":314,"line":3584},[312,18998,16539],{"class":1436},[312,19000,16529],{"class":324},[312,19002,19003],{"class":314,"line":3589},[312,19004,19005],{"class":318},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[312,19007,19008],{"class":314,"line":4382},[312,19009,19010],{"class":324},"    Point m_center;\n",[312,19012,19013],{"class":314,"line":4396},[312,19014,5800],{"class":324},[312,19016,19017,19019,19022,19024,19027,19029,19031,19033,19035,19037,19039],{"class":314,"line":4404},[312,19018,7168],{"class":1436},[312,19020,19021],{"class":332}," isInCircle",[312,19023,1576],{"class":324},[312,19025,19026],{"class":332},"Circle",[312,19028,12387],{"class":1436},[312,19030,2233],{"class":1579},[312,19032,2323],{"class":324},[312,19034,18941],{"class":332},[312,19036,12387],{"class":1436},[312,19038,24],{"class":1579},[312,19040,1959],{"class":324},[312,19042,19043],{"class":314,"line":4409},[312,19044,3353],{"class":324},[312,19046,19047,19049,19052,19054,19056,19059,19062,19065,19067,19069,19071,19073],{"class":314,"line":4415},[312,19048,16539],{"class":1436},[312,19050,19051],{"class":324}," dx ",[312,19053,336],{"class":1436},[312,19055,18142],{"class":324},[312,19057,19058],{"class":332},"getCenter",[312,19060,19061],{"class":324},"().",[312,19063,19064],{"class":332},"getX",[312,19066,14852],{"class":324},[312,19068,2477],{"class":1436},[312,19070,17688],{"class":324},[312,19072,19064],{"class":332},[312,19074,7440],{"class":324},[312,19076,19077,19079,19082,19084,19086,19088,19090,19093,19095,19097,19099,19101],{"class":314,"line":4421},[312,19078,16539],{"class":1436},[312,19080,19081],{"class":324}," dy ",[312,19083,336],{"class":1436},[312,19085,18142],{"class":324},[312,19087,19058],{"class":332},[312,19089,19061],{"class":324},[312,19091,19092],{"class":332},"getY",[312,19094,14852],{"class":324},[312,19096,2477],{"class":1436},[312,19098,17688],{"class":324},[312,19100,19092],{"class":332},[312,19102,7440],{"class":324},[312,19104,19105,19107,19110,19112,19115,19118,19120,19122,19124,19126,19128],{"class":314,"line":4426},[312,19106,16539],{"class":1436},[312,19108,19109],{"class":324}," distance ",[312,19111,336],{"class":1436},[312,19113,19114],{"class":332}," sqrt",[312,19116,19117],{"class":324},"(dx ",[312,19119,2400],{"class":1436},[312,19121,19051],{"class":324},[312,19123,2426],{"class":1436},[312,19125,19081],{"class":324},[312,19127,2400],{"class":1436},[312,19129,19130],{"class":324}," dy);\n",[312,19132,19133,19135,19138,19140,19142,19145],{"class":314,"line":9751},[312,19134,4906],{"class":1436},[312,19136,19137],{"class":324}," (distance ",[312,19139,325],{"class":1436},[312,19141,18142],{"class":324},[312,19143,19144],{"class":332},"getRadius",[312,19146,19147],{"class":324},"())\n",[312,19149,19150],{"class":314,"line":9775},[312,19151,3835],{"class":324},[312,19153,19154,19156,19158,19161,19163],{"class":314,"line":9780},[312,19155,11472],{"class":324},[312,19157,2985],{"class":1436},[312,19159,19160],{"class":339}," \"点在圆内\"",[312,19162,3252],{"class":1436},[312,19164,10643],{"class":324},[312,19166,19167],{"class":314,"line":9786},[312,19168,3992],{"class":324},[312,19170,19171],{"class":314,"line":9813},[312,19172,18623],{"class":1436},[312,19174,19175],{"class":314,"line":9818},[312,19176,3835],{"class":324},[312,19178,19179,19181,19183,19186,19188],{"class":314,"line":9824},[312,19180,11472],{"class":324},[312,19182,2985],{"class":1436},[312,19184,19185],{"class":339}," \"点在圆外\"",[312,19187,3252],{"class":1436},[312,19189,10643],{"class":324},[312,19191,19192],{"class":314,"line":9836},[312,19193,3992],{"class":324},[312,19195,19196],{"class":314,"line":9848},[312,19197,515],{"class":324},[312,19199,19200,19202,19204],{"class":314,"line":9860},[312,19201,1956],{"class":1436},[312,19203,3778],{"class":332},[312,19205,3781],{"class":324},[312,19207,19208],{"class":314,"line":11519},[312,19209,3353],{"class":324},[312,19211,19212],{"class":314,"line":11544},[312,19213,16854],{"class":318},[312,19215,19216],{"class":314,"line":11567},[312,19217,16601],{"class":324},[312,19219,19220],{"class":314,"line":11591},[312,19221,19222],{"class":324},"    Point p1;\n",[312,19224,19225],{"class":314,"line":11596},[312,19226,18794],{"class":318},[312,19228,19229,19231,19233,19236],{"class":314,"line":11601},[312,19230,3358],{"class":324},[312,19232,2985],{"class":1436},[312,19234,19235],{"class":339},"\"请输入圆的半径：\"",[312,19237,498],{"class":324},[312,19239,19240,19242],{"class":314,"line":11606},[312,19241,16539],{"class":1436},[312,19243,19244],{"class":324}," r;\n",[312,19246,19247,19249,19251],{"class":314,"line":11615},[312,19248,3817],{"class":324},[312,19250,3237],{"class":1436},[312,19252,19253],{"class":324},"r;\n",[312,19255,19256,19258,19261],{"class":314,"line":11620},[312,19257,18395],{"class":324},[312,19259,19260],{"class":332},"setRadius",[312,19262,19263],{"class":324},"(r);\n",[312,19265,19266,19268,19270,19273],{"class":314,"line":11626},[312,19267,3358],{"class":324},[312,19269,2985],{"class":1436},[312,19271,19272],{"class":339},"\"请输入圆心坐标：\"",[312,19274,498],{"class":324},[312,19276,19277,19279],{"class":314,"line":11647},[312,19278,16539],{"class":1436},[312,19280,19281],{"class":324}," x, y;\n",[312,19283,19284,19286,19288,19290,19292],{"class":314,"line":11653},[312,19285,3817],{"class":324},[312,19287,3237],{"class":1436},[312,19289,2764],{"class":324},[312,19291,3237],{"class":1436},[312,19293,19294],{"class":324},"y;\n",[312,19296,19297,19300,19303],{"class":314,"line":11667},[312,19298,19299],{"class":324},"    p1.",[312,19301,19302],{"class":332},"setPoint",[312,19304,19305],{"class":324},"(x, y);\n",[312,19307,19308,19310,19313],{"class":314,"line":11673},[312,19309,18395],{"class":324},[312,19311,19312],{"class":332},"setCenter",[312,19314,19315],{"class":324},"(p1);\n",[312,19317,19318,19320,19322,19325],{"class":314,"line":11700},[312,19319,3358],{"class":324},[312,19321,2985],{"class":1436},[312,19323,19324],{"class":339},"\"请输入测试点坐标：\"",[312,19326,498],{"class":324},[312,19328,19329,19331],{"class":314,"line":11709},[312,19330,16539],{"class":1436},[312,19332,19333],{"class":324}," x1, y1;\n",[312,19335,19336,19338,19340,19343,19345],{"class":314,"line":11715},[312,19337,3817],{"class":324},[312,19339,3237],{"class":1436},[312,19341,19342],{"class":324},"x1",[312,19344,3237],{"class":1436},[312,19346,19347],{"class":324},"y1;\n",[312,19349,19350],{"class":314,"line":11723},[312,19351,19352],{"class":324},"    Point p2;\n",[312,19354,19355,19358,19360],{"class":314,"line":11728},[312,19356,19357],{"class":324},"    p2.",[312,19359,19302],{"class":332},[312,19361,19362],{"class":324},"(x1, y1);\n",[312,19364,19365,19368],{"class":314,"line":18404},[312,19366,19367],{"class":332},"    isInCircle",[312,19369,19370],{"class":324},"(c1, p2);\n",[312,19372,19373],{"class":314,"line":18410},[312,19374,515],{"class":324},[24,19376,19377],{},"在类中可以让另一个类作为本来的成员",[24,19379,19380],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[24,19382,19383],{},"创建point.h",[303,19385,19387],{"className":1942,"code":19386,"language":1944,"meta":308,"style":308},"#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",[119,19388,19389,19400,19406,19416,19422,19426,19431,19435,19439,19459,19463,19471,19479,19483,19487,19493,19499],{"__ignoreMap":308},[312,19390,19391,19394,19397],{"class":314,"line":315},[312,19392,19393],{"class":1436},"#pragma",[312,19395,19396],{"class":332}," once",[312,19398,19399],{"class":318}," \u002F\u002F防止头文件重复包含\n",[312,19401,19402,19404],{"class":314,"line":171},[312,19403,3755],{"class":1436},[312,19405,3758],{"class":339},[312,19407,19408,19410,19412,19414],{"class":314,"line":274},[312,19409,3763],{"class":1436},[312,19411,3766],{"class":1436},[312,19413,3769],{"class":332},[312,19415,498],{"class":324},[312,19417,19418,19420],{"class":314,"line":298},[312,19419,16495],{"class":1436},[312,19421,18781],{"class":332},[312,19423,19424],{"class":314,"line":974},[312,19425,3353],{"class":324},[312,19427,19428],{"class":314,"line":980},[312,19429,19430],{"class":318},"\u002F\u002F做好声明与变量定义就可以\n",[312,19432,19433],{"class":314,"line":997},[312,19434,16517],{"class":1436},[312,19436,19437],{"class":314,"line":1003},[312,19438,18794],{"class":318},[312,19440,19441,19443,19445,19447,19449,19451,19453,19455,19457],{"class":314,"line":1020},[312,19442,16710],{"class":1436},[312,19444,18801],{"class":332},[312,19446,1576],{"class":324},[312,19448,15838],{"class":1436},[312,19450,18808],{"class":1579},[312,19452,733],{"class":324},[312,19454,15838],{"class":1436},[312,19456,18815],{"class":1579},[312,19458,4524],{"class":324},[312,19460,19461],{"class":314,"line":1026},[312,19462,18833],{"class":318},[312,19464,19465,19467,19469],{"class":314,"line":3418},[312,19466,16539],{"class":1436},[312,19468,18840],{"class":332},[312,19470,7440],{"class":324},[312,19472,19473,19475,19477],{"class":314,"line":3423},[312,19474,16539],{"class":1436},[312,19476,18856],{"class":332},[312,19478,7440],{"class":324},[312,19480,19481],{"class":314,"line":3429},[312,19482,4205],{"emptyLinePlaceholder":1881},[312,19484,19485],{"class":314,"line":3434},[312,19486,17023],{"class":1436},[312,19488,19489,19491],{"class":314,"line":3448},[312,19490,16539],{"class":1436},[312,19492,18878],{"class":324},[312,19494,19495,19497],{"class":314,"line":3453},[312,19496,16539],{"class":1436},[312,19498,18885],{"class":324},[312,19500,19501],{"class":314,"line":3459},[312,19502,5800],{"class":324},[24,19504,19505],{},"创建point.cpp",[303,19507,19509],{"className":1942,"code":19508,"language":1944,"meta":308,"style":308},"#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",[119,19510,19511,19518,19523,19557,19561,19577],{"__ignoreMap":308},[312,19512,19513,19515],{"class":314,"line":315},[312,19514,3755],{"class":1436},[312,19516,19517],{"class":339},"\u003Cpoint.h>\n",[312,19519,19520],{"class":314,"line":171},[312,19521,19522],{"class":318},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[312,19524,19525,19527,19530,19533,19535,19537,19539,19541,19543,19545,19547,19549,19551,19553,19555],{"class":314,"line":274},[312,19526,16710],{"class":1436},[312,19528,19529],{"class":332}," Point",[312,19531,19532],{"class":324},"::",[312,19534,19302],{"class":332},[312,19536,1576],{"class":324},[312,19538,15838],{"class":1436},[312,19540,18808],{"class":1579},[312,19542,733],{"class":324},[312,19544,15838],{"class":1436},[312,19546,18815],{"class":1579},[312,19548,18818],{"class":324},[312,19550,336],{"class":1436},[312,19552,18823],{"class":324},[312,19554,336],{"class":1436},[312,19556,18828],{"class":324},[312,19558,19559],{"class":314,"line":298},[312,19560,18833],{"class":318},[312,19562,19563,19565,19567,19569,19571,19573,19575],{"class":314,"line":974},[312,19564,16539],{"class":1436},[312,19566,19529],{"class":332},[312,19568,19532],{"class":324},[312,19570,19064],{"class":332},[312,19572,18843],{"class":324},[312,19574,18846],{"class":1436},[312,19576,18849],{"class":324},[312,19578,19579,19581,19583,19585,19587,19589,19591],{"class":314,"line":980},[312,19580,16539],{"class":1436},[312,19582,19529],{"class":332},[312,19584,19532],{"class":324},[312,19586,19092],{"class":332},[312,19588,18843],{"class":324},[312,19590,18846],{"class":1436},[312,19592,18863],{"class":324},[24,19594,19595],{},"创建circle.h",[303,19597,19599],{"className":1942,"code":19598,"language":1944,"meta":308,"style":308},"#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",[119,19600,19601,19608,19614,19624,19630,19636,19640,19644,19648,19662,19676,19680,19688,19696,19700,19704,19710,19714,19718],{"__ignoreMap":308},[312,19602,19603,19605],{"class":314,"line":315},[312,19604,19393],{"class":1436},[312,19606,19607],{"class":332}," once\n",[312,19609,19610,19612],{"class":314,"line":171},[312,19611,3755],{"class":1436},[312,19613,3758],{"class":339},[312,19615,19616,19618,19620,19622],{"class":314,"line":274},[312,19617,3763],{"class":1436},[312,19619,3766],{"class":1436},[312,19621,3769],{"class":332},[312,19623,498],{"class":324},[312,19625,19626,19628],{"class":314,"line":298},[312,19627,3755],{"class":1436},[312,19629,19517],{"class":339},[312,19631,19632,19634],{"class":314,"line":974},[312,19633,16495],{"class":1436},[312,19635,16498],{"class":332},[312,19637,19638],{"class":314,"line":980},[312,19639,3353],{"class":324},[312,19641,19642],{"class":314,"line":997},[312,19643,16517],{"class":1436},[312,19645,19646],{"class":314,"line":1003},[312,19647,18794],{"class":318},[312,19649,19650,19652,19654,19656,19658,19660],{"class":314,"line":1020},[312,19651,16710],{"class":1436},[312,19653,18914],{"class":332},[312,19655,1576],{"class":324},[312,19657,15838],{"class":1436},[312,19659,18921],{"class":1579},[312,19661,4524],{"class":324},[312,19663,19664,19666,19668,19670,19672,19674],{"class":314,"line":1026},[312,19665,16710],{"class":1436},[312,19667,18936],{"class":332},[312,19669,1576],{"class":324},[312,19671,18941],{"class":332},[312,19673,18944],{"class":1579},[312,19675,4524],{"class":324},[312,19677,19678],{"class":314,"line":3418},[312,19679,18957],{"class":318},[312,19681,19682,19684,19686],{"class":314,"line":3423},[312,19683,16539],{"class":1436},[312,19685,18964],{"class":332},[312,19687,7440],{"class":324},[312,19689,19690,19692,19694],{"class":314,"line":3429},[312,19691,18976],{"class":332},[312,19693,18979],{"class":332},[312,19695,7440],{"class":324},[312,19697,19698],{"class":314,"line":3434},[312,19699,4205],{"emptyLinePlaceholder":1881},[312,19701,19702],{"class":314,"line":3448},[312,19703,17023],{"class":1436},[312,19705,19706,19708],{"class":314,"line":3453},[312,19707,16539],{"class":1436},[312,19709,16529],{"class":324},[312,19711,19712],{"class":314,"line":3459},[312,19713,19005],{"class":318},[312,19715,19716],{"class":314,"line":3480},[312,19717,19010],{"class":324},[312,19719,19720],{"class":314,"line":3485},[312,19721,5800],{"class":324},[24,19723,19724],{},"创建circle.cpp",[303,19726,19728],{"className":1942,"code":19727,"language":1944,"meta":308,"style":308},"#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",[119,19729,19730,19737,19760,19782,19787,19803],{"__ignoreMap":308},[312,19731,19732,19734],{"class":314,"line":315},[312,19733,3755],{"class":1436},[312,19735,19736],{"class":339},"\u003Ccircle.h>\n",[312,19738,19739,19741,19744,19746,19748,19750,19752,19754,19756,19758],{"class":314,"line":171},[312,19740,7168],{"class":1436},[312,19742,19743],{"class":332}," Circle",[312,19745,19532],{"class":324},[312,19747,19260],{"class":332},[312,19749,1576],{"class":324},[312,19751,15838],{"class":1436},[312,19753,18921],{"class":1579},[312,19755,18924],{"class":324},[312,19757,336],{"class":1436},[312,19759,18929],{"class":324},[312,19761,19762,19764,19766,19768,19770,19772,19774,19776,19778,19780],{"class":314,"line":274},[312,19763,7168],{"class":1436},[312,19765,19743],{"class":332},[312,19767,19532],{"class":324},[312,19769,19312],{"class":332},[312,19771,1576],{"class":324},[312,19773,18941],{"class":332},[312,19775,18944],{"class":1579},[312,19777,18947],{"class":324},[312,19779,336],{"class":1436},[312,19781,18952],{"class":324},[312,19783,19784],{"class":314,"line":298},[312,19785,19786],{"class":318},"\u002F\u002F获取属性\n",[312,19788,19789,19791,19793,19795,19797,19799,19801],{"class":314,"line":974},[312,19790,15838],{"class":1436},[312,19792,19743],{"class":332},[312,19794,19532],{"class":324},[312,19796,19144],{"class":332},[312,19798,18843],{"class":324},[312,19800,18846],{"class":1436},[312,19802,18971],{"class":324},[312,19804,19805,19807,19809,19811,19813,19815,19817],{"class":314,"line":980},[312,19806,18941],{"class":332},[312,19808,19743],{"class":332},[312,19810,19532],{"class":324},[312,19812,19058],{"class":332},[312,19814,18843],{"class":324},[312,19816,18846],{"class":1436},[312,19818,18986],{"class":324},[24,19820,19821],{},"使用封装的类",[303,19823,19825],{"className":1942,"code":19824,"language":1944,"meta":308,"style":308},"#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",[119,19826,19827,19833,19843,19849,19855,19879,19883,19909,19935,19959,19973,19977,19989,19993,19997,20001,20013,20017,20021,20029,20033,20037,20041,20045,20049,20059,20065,20073,20081,20091,20097,20109,20117,20125,20135,20141,20153,20157,20165,20171],{"__ignoreMap":308},[312,19828,19829,19831],{"class":314,"line":315},[312,19830,3755],{"class":1436},[312,19832,3758],{"class":339},[312,19834,19835,19837,19839,19841],{"class":314,"line":171},[312,19836,3763],{"class":1436},[312,19838,3766],{"class":1436},[312,19840,3769],{"class":332},[312,19842,498],{"class":324},[312,19844,19845,19847],{"class":314,"line":274},[312,19846,3755],{"class":1436},[312,19848,19736],{"class":339},[312,19850,19851,19853],{"class":314,"line":298},[312,19852,3755],{"class":1436},[312,19854,19517],{"class":339},[312,19856,19857,19859,19861,19863,19865,19867,19869,19871,19873,19875,19877],{"class":314,"line":974},[312,19858,7168],{"class":1436},[312,19860,19021],{"class":332},[312,19862,1576],{"class":324},[312,19864,19026],{"class":332},[312,19866,12387],{"class":1436},[312,19868,2233],{"class":1579},[312,19870,2323],{"class":324},[312,19872,18941],{"class":332},[312,19874,12387],{"class":1436},[312,19876,24],{"class":1579},[312,19878,1959],{"class":324},[312,19880,19881],{"class":314,"line":980},[312,19882,3353],{"class":324},[312,19884,19885,19887,19889,19891,19893,19895,19897,19899,19901,19903,19905,19907],{"class":314,"line":997},[312,19886,16539],{"class":1436},[312,19888,19051],{"class":324},[312,19890,336],{"class":1436},[312,19892,18142],{"class":324},[312,19894,19058],{"class":332},[312,19896,19061],{"class":324},[312,19898,19064],{"class":332},[312,19900,14852],{"class":324},[312,19902,2477],{"class":1436},[312,19904,17688],{"class":324},[312,19906,19064],{"class":332},[312,19908,7440],{"class":324},[312,19910,19911,19913,19915,19917,19919,19921,19923,19925,19927,19929,19931,19933],{"class":314,"line":1003},[312,19912,16539],{"class":1436},[312,19914,19081],{"class":324},[312,19916,336],{"class":1436},[312,19918,18142],{"class":324},[312,19920,19058],{"class":332},[312,19922,19061],{"class":324},[312,19924,19092],{"class":332},[312,19926,14852],{"class":324},[312,19928,2477],{"class":1436},[312,19930,17688],{"class":324},[312,19932,19092],{"class":332},[312,19934,7440],{"class":324},[312,19936,19937,19939,19941,19943,19945,19947,19949,19951,19953,19955,19957],{"class":314,"line":1020},[312,19938,16539],{"class":1436},[312,19940,19109],{"class":324},[312,19942,336],{"class":1436},[312,19944,19114],{"class":332},[312,19946,19117],{"class":324},[312,19948,2400],{"class":1436},[312,19950,19051],{"class":324},[312,19952,2426],{"class":1436},[312,19954,19081],{"class":324},[312,19956,2400],{"class":1436},[312,19958,19130],{"class":324},[312,19960,19961,19963,19965,19967,19969,19971],{"class":314,"line":1026},[312,19962,4906],{"class":1436},[312,19964,19137],{"class":324},[312,19966,325],{"class":1436},[312,19968,18142],{"class":324},[312,19970,19144],{"class":332},[312,19972,19147],{"class":324},[312,19974,19975],{"class":314,"line":3418},[312,19976,3835],{"class":324},[312,19978,19979,19981,19983,19985,19987],{"class":314,"line":3423},[312,19980,11472],{"class":324},[312,19982,2985],{"class":1436},[312,19984,19160],{"class":339},[312,19986,3252],{"class":1436},[312,19988,10643],{"class":324},[312,19990,19991],{"class":314,"line":3429},[312,19992,3992],{"class":324},[312,19994,19995],{"class":314,"line":3434},[312,19996,18623],{"class":1436},[312,19998,19999],{"class":314,"line":3448},[312,20000,3835],{"class":324},[312,20002,20003,20005,20007,20009,20011],{"class":314,"line":3453},[312,20004,11472],{"class":324},[312,20006,2985],{"class":1436},[312,20008,19185],{"class":339},[312,20010,3252],{"class":1436},[312,20012,10643],{"class":324},[312,20014,20015],{"class":314,"line":3459},[312,20016,3992],{"class":324},[312,20018,20019],{"class":314,"line":3480},[312,20020,515],{"class":324},[312,20022,20023,20025,20027],{"class":314,"line":3485},[312,20024,1956],{"class":1436},[312,20026,3778],{"class":332},[312,20028,3781],{"class":324},[312,20030,20031],{"class":314,"line":3499},[312,20032,3353],{"class":324},[312,20034,20035],{"class":314,"line":3504},[312,20036,16854],{"class":318},[312,20038,20039],{"class":314,"line":3533},[312,20040,16601],{"class":324},[312,20042,20043],{"class":314,"line":3538},[312,20044,19222],{"class":324},[312,20046,20047],{"class":314,"line":3555},[312,20048,18794],{"class":318},[312,20050,20051,20053,20055,20057],{"class":314,"line":3560},[312,20052,3358],{"class":324},[312,20054,2985],{"class":1436},[312,20056,19235],{"class":339},[312,20058,498],{"class":324},[312,20060,20061,20063],{"class":314,"line":3565},[312,20062,16539],{"class":1436},[312,20064,19244],{"class":324},[312,20066,20067,20069,20071],{"class":314,"line":3570},[312,20068,3817],{"class":324},[312,20070,3237],{"class":1436},[312,20072,19253],{"class":324},[312,20074,20075,20077,20079],{"class":314,"line":3584},[312,20076,18395],{"class":324},[312,20078,19260],{"class":332},[312,20080,19263],{"class":324},[312,20082,20083,20085,20087,20089],{"class":314,"line":3589},[312,20084,3358],{"class":324},[312,20086,2985],{"class":1436},[312,20088,19272],{"class":339},[312,20090,498],{"class":324},[312,20092,20093,20095],{"class":314,"line":4382},[312,20094,16539],{"class":1436},[312,20096,19281],{"class":324},[312,20098,20099,20101,20103,20105,20107],{"class":314,"line":4396},[312,20100,3817],{"class":324},[312,20102,3237],{"class":1436},[312,20104,2764],{"class":324},[312,20106,3237],{"class":1436},[312,20108,19294],{"class":324},[312,20110,20111,20113,20115],{"class":314,"line":4404},[312,20112,19299],{"class":324},[312,20114,19302],{"class":332},[312,20116,19305],{"class":324},[312,20118,20119,20121,20123],{"class":314,"line":4409},[312,20120,18395],{"class":324},[312,20122,19312],{"class":332},[312,20124,19315],{"class":324},[312,20126,20127,20129,20131,20133],{"class":314,"line":4415},[312,20128,3358],{"class":324},[312,20130,2985],{"class":1436},[312,20132,19324],{"class":339},[312,20134,498],{"class":324},[312,20136,20137,20139],{"class":314,"line":4421},[312,20138,16539],{"class":1436},[312,20140,19333],{"class":324},[312,20142,20143,20145,20147,20149,20151],{"class":314,"line":4426},[312,20144,3817],{"class":324},[312,20146,3237],{"class":1436},[312,20148,19342],{"class":324},[312,20150,3237],{"class":1436},[312,20152,19347],{"class":324},[312,20154,20155],{"class":314,"line":9751},[312,20156,19352],{"class":324},[312,20158,20159,20161,20163],{"class":314,"line":9775},[312,20160,19357],{"class":324},[312,20162,19302],{"class":332},[312,20164,19362],{"class":324},[312,20166,20167,20169],{"class":314,"line":9780},[312,20168,19367],{"class":332},[312,20170,19370],{"class":324},[312,20172,20173],{"class":314,"line":9786},[312,20174,515],{"class":324},[14,20176,20178],{"id":20177},"_82对象的初始化清理","8.2对象的初始化清理",[243,20180,20181,20184],{},[143,20182,20183],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[143,20185,20186],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[69,20188,20190],{"id":20189},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[24,20192,20193,20194,20197],{},"对象的",[27,20195,20196],{},"初始化和清理","也是两个非常重要的安全问题",[24,20199,20200],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[24,20202,20203],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[24,20205,20206,20207,1512,20210,20213],{},"c++利用了",[27,20208,20209],{},"构造函数",[27,20211,20212],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[24,20215,20216,20217],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[27,20218,20219],{},"我们不提供构造和析构，编译器会提供",[24,20221,20222],{},[27,20223,20224],{},"编译器提供的构造函数和析构函数是空实现。",[243,20226,20227,20230],{},[143,20228,20229],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[143,20231,20232,20233,20236],{},"析构函数：主要作用在于对象",[27,20234,20235],{},"销毁前","系统自动调用，执行一些清理工作。",[24,20238,20239,20242],{},[27,20240,20241],{},"构造函数语法：",[119,20243,20244],{},"类名(){}",[140,20246,20247,20250,20253,20256,20259],{},[143,20248,20249],{},"构造函数，没有返回值也不写void",[143,20251,20252],{},"函数名称与类名相同",[143,20254,20255],{},"构造函数可以有参数，因此可以发生重载",[143,20257,20258],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[143,20260,20261,20262,2374],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[119,20263,20264],{},"Person(){}",[24,20266,20267,15596,20270],{},[27,20268,20269],{},"析构函数语法：",[119,20271,20272],{},"~类名(){}",[140,20274,20275,20278,20281,20287],{},[143,20276,20277],{},"析构函数，没有返回值也不写void",[143,20279,20280],{},"函数名称与类名相同,在名称前加上符号  ~",[143,20282,20283,20284],{},"析构函数不可以有参数，因此",[27,20285,20286],{},"不可以发生重载",[143,20288,20289],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[303,20291,20293],{"className":1942,"code":20292,"language":1944,"meta":308,"style":308},"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",[119,20294,20295,20301,20305,20309,20314,20321,20325,20338,20342,20347,20354,20358,20371,20375,20379,20383,20387,20395,20399,20407,20411,20415,20423,20427,20432,20436,20443,20447,20460,20464,20472],{"__ignoreMap":308},[312,20296,20297,20299],{"class":314,"line":315},[312,20298,16495],{"class":1436},[312,20300,16972],{"class":332},[312,20302,20303],{"class":314,"line":171},[312,20304,3353],{"class":324},[312,20306,20307],{"class":314,"line":274},[312,20308,16517],{"class":1436},[312,20310,20311],{"class":314,"line":298},[312,20312,20313],{"class":318},"    \u002F\u002F构造函数\n",[312,20315,20316,20319],{"class":314,"line":974},[312,20317,20318],{"class":332},"    Person",[312,20320,3781],{"class":324},[312,20322,20323],{"class":314,"line":980},[312,20324,3835],{"class":324},[312,20326,20327,20329,20331,20334,20336],{"class":314,"line":997},[312,20328,11472],{"class":324},[312,20330,2985],{"class":1436},[312,20332,20333],{"class":339}," \"Person的构造函数调用\"",[312,20335,3252],{"class":1436},[312,20337,10643],{"class":324},[312,20339,20340],{"class":314,"line":1003},[312,20341,3992],{"class":324},[312,20343,20344],{"class":314,"line":1020},[312,20345,20346],{"class":318},"    \u002F\u002F析构函数\n",[312,20348,20349,20352],{"class":314,"line":1026},[312,20350,20351],{"class":332},"    ~Person",[312,20353,3781],{"class":324},[312,20355,20356],{"class":314,"line":3418},[312,20357,3835],{"class":324},[312,20359,20360,20362,20364,20367,20369],{"class":314,"line":3423},[312,20361,11472],{"class":324},[312,20363,2985],{"class":1436},[312,20365,20366],{"class":339}," \"Person的析构函数调用\"",[312,20368,3252],{"class":1436},[312,20370,10643],{"class":324},[312,20372,20373],{"class":314,"line":3429},[312,20374,3992],{"class":324},[312,20376,20377],{"class":314,"line":3434},[312,20378,4205],{"emptyLinePlaceholder":1881},[312,20380,20381],{"class":314,"line":3448},[312,20382,5800],{"class":324},[312,20384,20385],{"class":314,"line":3453},[312,20386,4205],{"emptyLinePlaceholder":1881},[312,20388,20389,20391,20393],{"class":314,"line":3459},[312,20390,7168],{"class":1436},[312,20392,7392],{"class":332},[312,20394,3781],{"class":324},[312,20396,20397],{"class":314,"line":3480},[312,20398,3353],{"class":324},[312,20400,20401,20404],{"class":314,"line":3485},[312,20402,20403],{"class":324},"    Person p;",[312,20405,20406],{"class":318},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[312,20408,20409],{"class":314,"line":3499},[312,20410,515],{"class":324},[312,20412,20413],{"class":314,"line":3504},[312,20414,4205],{"emptyLinePlaceholder":1881},[312,20416,20417,20419,20421],{"class":314,"line":3533},[312,20418,1956],{"class":1436},[312,20420,3778],{"class":332},[312,20422,12656],{"class":324},[312,20424,20425],{"class":314,"line":3538},[312,20426,15012],{"class":324},[312,20428,20429],{"class":314,"line":3555},[312,20430,20431],{"class":318},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[312,20433,20434],{"class":314,"line":3560},[312,20435,4205],{"emptyLinePlaceholder":1881},[312,20437,20438,20440],{"class":314,"line":3565},[312,20439,20403],{"class":324},[312,20441,20442],{"class":318},"\u002F\u002F只有构造函数\n",[312,20444,20445],{"class":314,"line":3570},[312,20446,4205],{"emptyLinePlaceholder":1881},[312,20448,20449,20451,20453,20455,20457],{"class":314,"line":3584},[312,20450,4108],{"class":332},[312,20452,1576],{"class":324},[312,20454,4113],{"class":339},[312,20456,7770],{"class":324},[312,20458,20459],{"class":318},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[312,20461,20462],{"class":314,"line":3589},[312,20463,4205],{"emptyLinePlaceholder":1881},[312,20465,20466,20468,20470],{"class":314,"line":4382},[312,20467,5895],{"class":1436},[312,20469,5898],{"class":488},[312,20471,498],{"class":324},[312,20473,20474],{"class":314,"line":4396},[312,20475,515],{"class":324},[24,20477,20478],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[69,20480,20482],{"id":20481},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[24,20484,20485],{},"两种分类方式：",[24,20487,20488],{},"​\t按参数分为： 有参构造和无参构造",[24,20490,20491],{},"​\t按类型分为： 普通构造和拷贝构造",[24,20493,20494],{},"三种调用方式：",[24,20496,20497],{},"​\t括号法",[24,20499,20500],{},"​\t显示法",[24,20502,20503],{},"​\t隐式转换法",[303,20505,20507],{"className":1942,"code":20506,"language":1944,"meta":308,"style":308},"#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",[119,20508,20509,20515,20525,20530,20535,20540,20545,20549,20557,20561,20565,20569,20575,20579,20592,20596,20608,20612,20621,20634,20638,20642,20648,20652,20665,20669,20674,20690,20694,20699,20708,20721,20725,20731,20735,20740,20748,20752,20757,20761,20769,20773,20778,20783,20788,20793,20798,20802,20807,20812,20817,20822,20826,20831,20836,20852,20864,20869,20873,20878,20883,20888,20892,20897,20911,20924,20928,20936,20940,20946,20952,20960],{"__ignoreMap":308},[312,20510,20511,20513],{"class":314,"line":315},[312,20512,3755],{"class":1436},[312,20514,3758],{"class":339},[312,20516,20517,20519,20521,20523],{"class":314,"line":171},[312,20518,3763],{"class":1436},[312,20520,3766],{"class":1436},[312,20522,3769],{"class":332},[312,20524,498],{"class":324},[312,20526,20527],{"class":314,"line":274},[312,20528,20529],{"class":318},"\u002F\u002F1.构造函数的分类及调用\n",[312,20531,20532],{"class":314,"line":298},[312,20533,20534],{"class":318},"\u002F\u002F分类\n",[312,20536,20537],{"class":314,"line":974},[312,20538,20539],{"class":318},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[312,20541,20542],{"class":314,"line":980},[312,20543,20544],{"class":318},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[312,20546,20547],{"class":314,"line":997},[312,20548,4205],{"emptyLinePlaceholder":1881},[312,20550,20551,20553,20555],{"class":314,"line":1003},[312,20552,16495],{"class":1436},[312,20554,17370],{"class":332},[312,20556,4479],{"class":324},[312,20558,20559],{"class":314,"line":1020},[312,20560,3353],{"class":324},[312,20562,20563],{"class":314,"line":1026},[312,20564,16517],{"class":1436},[312,20566,20567],{"class":314,"line":3418},[312,20568,20313],{"class":318},[312,20570,20571,20573],{"class":314,"line":3423},[312,20572,20318],{"class":332},[312,20574,3781],{"class":324},[312,20576,20577],{"class":314,"line":3429},[312,20578,3835],{"class":324},[312,20580,20581,20583,20585,20588,20590],{"class":314,"line":3434},[312,20582,5256],{"class":324},[312,20584,2985],{"class":1436},[312,20586,20587],{"class":339},"\"Person构造函数无参构造\"",[312,20589,2985],{"class":1436},[312,20591,3007],{"class":324},[312,20593,20594],{"class":314,"line":3448},[312,20595,3992],{"class":324},[312,20597,20598,20600,20602,20604,20606],{"class":314,"line":3453},[312,20599,20318],{"class":332},[312,20601,1576],{"class":324},[312,20603,1956],{"class":1436},[312,20605,3206],{"class":1579},[312,20607,1959],{"class":324},[312,20609,20610],{"class":314,"line":3459},[312,20611,3835],{"class":324},[312,20613,20614,20617,20619],{"class":314,"line":3480},[312,20615,20616],{"class":324},"        age",[312,20618,336],{"class":1436},[312,20620,8001],{"class":324},[312,20622,20623,20625,20627,20630,20632],{"class":314,"line":3485},[312,20624,5256],{"class":324},[312,20626,2985],{"class":1436},[312,20628,20629],{"class":339},"\"Person构造函数有参构造\"",[312,20631,2985],{"class":1436},[312,20633,3007],{"class":324},[312,20635,20636],{"class":314,"line":3499},[312,20637,3992],{"class":324},[312,20639,20640],{"class":314,"line":3504},[312,20641,20346],{"class":318},[312,20643,20644,20646],{"class":314,"line":3533},[312,20645,20351],{"class":332},[312,20647,3781],{"class":324},[312,20649,20650],{"class":314,"line":3538},[312,20651,3835],{"class":324},[312,20653,20654,20656,20658,20661,20663],{"class":314,"line":3555},[312,20655,5256],{"class":324},[312,20657,2985],{"class":1436},[312,20659,20660],{"class":339},"\"Person析构函数被调用\"",[312,20662,2985],{"class":1436},[312,20664,3007],{"class":324},[312,20666,20667],{"class":314,"line":3560},[312,20668,3992],{"class":324},[312,20670,20671],{"class":314,"line":3565},[312,20672,20673],{"class":318},"    \u002F\u002F拷贝构造函数\n",[312,20675,20676,20678,20680,20682,20684,20686,20688],{"class":314,"line":3570},[312,20677,20318],{"class":332},[312,20679,1576],{"class":324},[312,20681,8596],{"class":1436},[312,20683,17370],{"class":332},[312,20685,12387],{"class":1436},[312,20687,24],{"class":1579},[312,20689,1959],{"class":324},[312,20691,20692],{"class":314,"line":3584},[312,20693,3835],{"class":324},[312,20695,20696],{"class":314,"line":3589},[312,20697,20698],{"class":318},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[312,20700,20701,20703,20705],{"class":314,"line":4382},[312,20702,20616],{"class":324},[312,20704,336],{"class":1436},[312,20706,20707],{"class":324},"p.age;\n",[312,20709,20710,20712,20714,20717,20719],{"class":314,"line":4396},[312,20711,5256],{"class":324},[312,20713,2985],{"class":1436},[312,20715,20716],{"class":339},"\"Person拷贝构造函数被调用\"",[312,20718,2985],{"class":1436},[312,20720,3007],{"class":324},[312,20722,20723],{"class":314,"line":4404},[312,20724,3992],{"class":324},[312,20726,20727,20729],{"class":314,"line":4409},[312,20728,3790],{"class":1436},[312,20730,9600],{"class":324},[312,20732,20733],{"class":314,"line":4415},[312,20734,5800],{"class":324},[312,20736,20737],{"class":314,"line":4421},[312,20738,20739],{"class":318},"\u002F\u002F调用\n",[312,20741,20742,20744,20746],{"class":314,"line":4426},[312,20743,7168],{"class":1436},[312,20745,7392],{"class":332},[312,20747,3781],{"class":324},[312,20749,20750],{"class":314,"line":9751},[312,20751,3353],{"class":324},[312,20753,20754],{"class":314,"line":9775},[312,20755,20756],{"class":318},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[312,20758,20759],{"class":314,"line":9780},[312,20760,515],{"class":324},[312,20762,20763,20765,20767],{"class":314,"line":9786},[312,20764,7168],{"class":1436},[312,20766,7461],{"class":332},[312,20768,3781],{"class":324},[312,20770,20771],{"class":314,"line":9813},[312,20772,3353],{"class":324},[312,20774,20775],{"class":314,"line":9818},[312,20776,20777],{"class":318},"    \u002F\u002F1.括号法\n",[312,20779,20780],{"class":314,"line":9824},[312,20781,20782],{"class":318},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[312,20784,20785],{"class":314,"line":9836},[312,20786,20787],{"class":318},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[312,20789,20790],{"class":314,"line":9848},[312,20791,20792],{"class":318},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[312,20794,20795],{"class":314,"line":9860},[312,20796,20797],{"class":318},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[312,20799,20800],{"class":314,"line":11519},[312,20801,4205],{"emptyLinePlaceholder":1881},[312,20803,20804],{"class":314,"line":11544},[312,20805,20806],{"class":318},"    \u002F\u002F注意事项\n",[312,20808,20809],{"class":314,"line":11567},[312,20810,20811],{"class":318},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[312,20813,20814],{"class":314,"line":11591},[312,20815,20816],{"class":318},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[312,20818,20819],{"class":314,"line":11596},[312,20820,20821],{"class":318},"    \u002F\u002F Person p4();\n",[312,20823,20824],{"class":314,"line":11601},[312,20825,4205],{"emptyLinePlaceholder":1881},[312,20827,20828],{"class":314,"line":11606},[312,20829,20830],{"class":318},"    \u002F\u002F2.显示法\n",[312,20832,20833],{"class":314,"line":11615},[312,20834,20835],{"class":324},"    Person p1;\n",[312,20837,20838,20841,20843,20846,20848,20850],{"class":314,"line":11620},[312,20839,20840],{"class":324},"    Person p2",[312,20842,336],{"class":1436},[312,20844,20845],{"class":332},"Person",[312,20847,1576],{"class":324},[312,20849,2391],{"class":488},[312,20851,4524],{"class":324},[312,20853,20854,20857,20859,20861],{"class":314,"line":11626},[312,20855,20856],{"class":324},"    Person p3",[312,20858,336],{"class":1436},[312,20860,20845],{"class":332},[312,20862,20863],{"class":324},"(p2);\n",[312,20865,20866],{"class":314,"line":11647},[312,20867,20868],{"class":318},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[312,20870,20871],{"class":314,"line":11653},[312,20872,4205],{"emptyLinePlaceholder":1881},[312,20874,20875],{"class":314,"line":11667},[312,20876,20877],{"class":318},"    \u002F\u002F 注意事项2\n",[312,20879,20880],{"class":314,"line":11673},[312,20881,20882],{"class":318},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[312,20884,20885],{"class":314,"line":11700},[312,20886,20887],{"class":318},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[312,20889,20890],{"class":314,"line":11709},[312,20891,4205],{"emptyLinePlaceholder":1881},[312,20893,20894],{"class":314,"line":11715},[312,20895,20896],{"class":318},"    \u002F\u002F3.隐士转换法\n",[312,20898,20899,20902,20904,20906,20908],{"class":314,"line":11723},[312,20900,20901],{"class":324},"    Person p4",[312,20903,336],{"class":1436},[312,20905,2391],{"class":488},[312,20907,2006],{"class":324},[312,20909,20910],{"class":318},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[312,20912,20913,20916,20918,20921],{"class":314,"line":11728},[312,20914,20915],{"class":324},"    Person p5",[312,20917,336],{"class":1436},[312,20919,20920],{"class":324},"p4;",[312,20922,20923],{"class":318}," \u002F\u002F 这里会调用拷贝构造函数\n",[312,20925,20926],{"class":314,"line":18404},[312,20927,515],{"class":324},[312,20929,20930,20932,20934],{"class":314,"line":18410},[312,20931,1956],{"class":1436},[312,20933,3778],{"class":332},[312,20935,3781],{"class":324},[312,20937,20938],{"class":314,"line":18433},[312,20939,3353],{"class":324},[312,20941,20942,20944],{"class":314,"line":18439},[312,20943,7437],{"class":332},[312,20945,7440],{"class":324},[312,20947,20948,20950],{"class":314,"line":18462},[312,20949,7506],{"class":332},[312,20951,7440],{"class":324},[312,20953,20954,20956,20958],{"class":314,"line":18476},[312,20955,5895],{"class":1436},[312,20957,5898],{"class":488},[312,20959,498],{"class":324},[312,20961,20962],{"class":314,"line":18496},[312,20963,515],{"class":324},[24,20965,20966,20969],{},[27,20967,20968],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[69,20971,20973],{"id":20972},"_823拷贝构造函数","8.2.3拷贝构造函数",[24,20975,20976],{},"C++中拷贝构造函数调用时机通常有三种情况",[243,20978,20979,20982,20985],{},[143,20980,20981],{},"使用一个已经创建完毕的对象来初始化一个新对象",[143,20983,20984],{},"值传递的方式给函数参数传值",[143,20986,20987],{},"以值方式返回局部对象",[303,20989,20991],{"className":1942,"code":20990,"language":1944,"meta":308,"style":308},"#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",[119,20992,20993,20999,21009,21013,21018,21022,21027,21032,21037,21043,21047,21051,21057,21061,21074,21078,21083,21095,21099,21107,21120,21124,21128,21144,21148,21157,21170,21174,21180,21184,21196,21200,21206,21210,21214,21222,21226,21239,21247,21265,21269,21274,21279,21294,21298,21311,21315,21323,21327,21331,21339,21343,21348,21357,21361,21365,21390,21400,21404,21412,21416,21427,21452,21456,21460,21464,21472,21476,21481,21486,21493,21498,21503,21508,21513,21517,21522,21526,21531,21535,21540,21545,21549,21553,21558,21563,21571],{"__ignoreMap":308},[312,20994,20995,20997],{"class":314,"line":315},[312,20996,3755],{"class":1436},[312,20998,3758],{"class":339},[312,21000,21001,21003,21005,21007],{"class":314,"line":171},[312,21002,3763],{"class":1436},[312,21004,3766],{"class":1436},[312,21006,3769],{"class":332},[312,21008,498],{"class":324},[312,21010,21011],{"class":314,"line":274},[312,21012,4205],{"emptyLinePlaceholder":1881},[312,21014,21015],{"class":314,"line":298},[312,21016,21017],{"class":318},"\u002F\u002F拷贝构造函数调用时机\n",[312,21019,21020],{"class":314,"line":974},[312,21021,4205],{"emptyLinePlaceholder":1881},[312,21023,21024],{"class":314,"line":980},[312,21025,21026],{"class":318},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[312,21028,21029],{"class":314,"line":997},[312,21030,21031],{"class":318},"\u002F\u002F2.值传递的方式给函数参数传值\n",[312,21033,21034],{"class":314,"line":1003},[312,21035,21036],{"class":318},"\u002F\u002F3.以值方式返回局部对象\n",[312,21038,21039,21041],{"class":314,"line":1020},[312,21040,16495],{"class":1436},[312,21042,16972],{"class":332},[312,21044,21045],{"class":314,"line":1026},[312,21046,3353],{"class":324},[312,21048,21049],{"class":314,"line":3418},[312,21050,16517],{"class":1436},[312,21052,21053,21055],{"class":314,"line":3423},[312,21054,20318],{"class":332},[312,21056,3781],{"class":324},[312,21058,21059],{"class":314,"line":3429},[312,21060,3835],{"class":324},[312,21062,21063,21065,21067,21070,21072],{"class":314,"line":3434},[312,21064,11472],{"class":324},[312,21066,2985],{"class":1436},[312,21068,21069],{"class":339}," \"Person的默认构造函数调用\"",[312,21071,3252],{"class":1436},[312,21073,10643],{"class":324},[312,21075,21076],{"class":314,"line":3448},[312,21077,3992],{"class":324},[312,21079,21080],{"class":314,"line":3453},[312,21081,21082],{"class":318},"    \u002F\u002F有参构造\n",[312,21084,21085,21087,21089,21091,21093],{"class":314,"line":3459},[312,21086,20318],{"class":332},[312,21088,1576],{"class":324},[312,21090,1956],{"class":1436},[312,21092,17489],{"class":1579},[312,21094,1959],{"class":324},[312,21096,21097],{"class":314,"line":3480},[312,21098,3835],{"class":324},[312,21100,21101,21103,21105],{"class":314,"line":3485},[312,21102,17543],{"class":324},[312,21104,336],{"class":1436},[312,21106,9600],{"class":324},[312,21108,21109,21111,21113,21116,21118],{"class":314,"line":3499},[312,21110,11472],{"class":324},[312,21112,2985],{"class":1436},[312,21114,21115],{"class":339}," \"Person的有参构造函数调用\"",[312,21117,3252],{"class":1436},[312,21119,10643],{"class":324},[312,21121,21122],{"class":314,"line":3504},[312,21123,3992],{"class":324},[312,21125,21126],{"class":314,"line":3533},[312,21127,20673],{"class":318},[312,21129,21130,21132,21134,21136,21138,21140,21142],{"class":314,"line":3538},[312,21131,20318],{"class":332},[312,21133,1576],{"class":324},[312,21135,8596],{"class":1436},[312,21137,17370],{"class":332},[312,21139,12387],{"class":1436},[312,21141,24],{"class":1579},[312,21143,1959],{"class":324},[312,21145,21146],{"class":314,"line":3555},[312,21147,3835],{"class":324},[312,21149,21150,21152,21154],{"class":314,"line":3560},[312,21151,17543],{"class":324},[312,21153,336],{"class":1436},[312,21155,21156],{"class":324}," p.m_Age;\n",[312,21158,21159,21161,21163,21166,21168],{"class":314,"line":3565},[312,21160,11472],{"class":324},[312,21162,2985],{"class":1436},[312,21164,21165],{"class":339}," \"Person的拷贝构造函数调用\"",[312,21167,3252],{"class":1436},[312,21169,10643],{"class":324},[312,21171,21172],{"class":314,"line":3570},[312,21173,3992],{"class":324},[312,21175,21176,21178],{"class":314,"line":3584},[312,21177,20351],{"class":332},[312,21179,3781],{"class":324},[312,21181,21182],{"class":314,"line":3589},[312,21183,3835],{"class":324},[312,21185,21186,21188,21190,21192,21194],{"class":314,"line":4382},[312,21187,11472],{"class":324},[312,21189,2985],{"class":1436},[312,21191,20366],{"class":339},[312,21193,3252],{"class":1436},[312,21195,10643],{"class":324},[312,21197,21198],{"class":314,"line":4396},[312,21199,3992],{"class":324},[312,21201,21202,21204],{"class":314,"line":4404},[312,21203,3790],{"class":1436},[312,21205,17466],{"class":324},[312,21207,21208],{"class":314,"line":4409},[312,21209,5800],{"class":324},[312,21211,21212],{"class":314,"line":4415},[312,21213,21026],{"class":318},[312,21215,21216,21218,21220],{"class":314,"line":4421},[312,21217,7168],{"class":1436},[312,21219,7392],{"class":332},[312,21221,3781],{"class":324},[312,21223,21224],{"class":314,"line":4426},[312,21225,3353],{"class":324},[312,21227,21228,21231,21233,21235,21237],{"class":314,"line":9751},[312,21229,21230],{"class":324},"    Person ",[312,21232,8934],{"class":332},[312,21234,1576],{"class":324},[312,21236,1546],{"class":488},[312,21238,4524],{"class":324},[312,21240,21241,21243,21245],{"class":314,"line":9775},[312,21242,21230],{"class":324},[312,21244,8837],{"class":332},[312,21246,19315],{"class":324},[312,21248,21249,21251,21253,21256,21258,21261,21263],{"class":314,"line":9780},[312,21250,3358],{"class":324},[312,21252,2985],{"class":1436},[312,21254,21255],{"class":339},"\"P2的年龄为：\"",[312,21257,2985],{"class":1436},[312,21259,21260],{"class":324},"p2.m_Age",[312,21262,2985],{"class":1436},[312,21264,3007],{"class":324},[312,21266,21267],{"class":314,"line":9786},[312,21268,515],{"class":324},[312,21270,21271],{"class":314,"line":9813},[312,21272,21273],{"class":318},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[312,21275,21276],{"class":314,"line":9818},[312,21277,21278],{"class":318},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[312,21280,21281,21283,21286,21288,21290,21292],{"class":314,"line":9824},[312,21282,7168],{"class":1436},[312,21284,21285],{"class":332}," doWork",[312,21287,1576],{"class":324},[312,21289,20845],{"class":332},[312,21291,8629],{"class":1579},[312,21293,1959],{"class":324},[312,21295,21296],{"class":314,"line":9836},[312,21297,3353],{"class":324},[312,21299,21300,21302,21304,21307,21309],{"class":314,"line":9848},[312,21301,8333],{"class":324},[312,21303,2985],{"class":1436},[312,21305,21306],{"class":339}," \"doWork函数调用\"",[312,21308,3252],{"class":1436},[312,21310,10643],{"class":324},[312,21312,21313],{"class":314,"line":9860},[312,21314,515],{"class":324},[312,21316,21317,21319,21321],{"class":314,"line":11519},[312,21318,7168],{"class":1436},[312,21320,7461],{"class":332},[312,21322,3781],{"class":324},[312,21324,21325],{"class":314,"line":11544},[312,21326,3353],{"class":324},[312,21328,21329],{"class":314,"line":11567},[312,21330,17114],{"class":324},[312,21332,21333,21336],{"class":314,"line":11591},[312,21334,21335],{"class":332},"    doWork",[312,21337,21338],{"class":324},"(p);\n",[312,21340,21341],{"class":314,"line":11596},[312,21342,515],{"class":324},[312,21344,21345],{"class":314,"line":11601},[312,21346,21347],{"class":318},"\u002F\u002F 3.以值方式返回局部对象\n",[312,21349,21350,21352,21355],{"class":314,"line":11606},[312,21351,20845],{"class":332},[312,21353,21354],{"class":332}," doWork2",[312,21356,3781],{"class":324},[312,21358,21359],{"class":314,"line":11615},[312,21360,3353],{"class":324},[312,21362,21363],{"class":314,"line":11620},[312,21364,20835],{"class":324},[312,21366,21367,21369,21371,21373,21375,21377,21379,21381,21383,21385,21387],{"class":314,"line":11626},[312,21368,3358],{"class":324},[312,21370,2985],{"class":1436},[312,21372,1576],{"class":324},[312,21374,1956],{"class":1436},[312,21376,8322],{"class":1436},[312,21378,2374],{"class":324},[312,21380,2298],{"class":1436},[312,21382,8934],{"class":324},[312,21384,2985],{"class":1436},[312,21386,3050],{"class":324},[312,21388,21389],{"class":318},"\u002F\u002F打印p1的地址\n",[312,21391,21392,21394,21397],{"class":314,"line":11647},[312,21393,5895],{"class":1436},[312,21395,21396],{"class":324}," p1;",[312,21398,21399],{"class":318},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[312,21401,21402],{"class":314,"line":11653},[312,21403,515],{"class":324},[312,21405,21406,21408,21410],{"class":314,"line":11667},[312,21407,7168],{"class":1436},[312,21409,7533],{"class":332},[312,21411,3781],{"class":324},[312,21413,21414],{"class":314,"line":11673},[312,21415,3353],{"class":324},[312,21417,21418,21421,21423,21425],{"class":314,"line":11700},[312,21419,21420],{"class":324},"    Person p ",[312,21422,336],{"class":1436},[312,21424,21354],{"class":332},[312,21426,7440],{"class":324},[312,21428,21429,21431,21433,21435,21437,21439,21441,21443,21445,21447,21449],{"class":314,"line":11709},[312,21430,3358],{"class":324},[312,21432,2985],{"class":1436},[312,21434,1576],{"class":324},[312,21436,1956],{"class":1436},[312,21438,8322],{"class":1436},[312,21440,2374],{"class":324},[312,21442,2298],{"class":1436},[312,21444,24],{"class":324},[312,21446,2985],{"class":1436},[312,21448,3050],{"class":324},[312,21450,21451],{"class":318},"\u002F\u002F打印p的地址\n",[312,21453,21454],{"class":314,"line":11715},[312,21455,515],{"class":324},[312,21457,21458],{"class":314,"line":11723},[312,21459,4205],{"emptyLinePlaceholder":1881},[312,21461,21462],{"class":314,"line":11728},[312,21463,4205],{"emptyLinePlaceholder":1881},[312,21465,21466,21468,21470],{"class":314,"line":18404},[312,21467,1956],{"class":1436},[312,21469,3778],{"class":332},[312,21471,3781],{"class":324},[312,21473,21474],{"class":314,"line":18410},[312,21475,3353],{"class":324},[312,21477,21478],{"class":314,"line":18433},[312,21479,21480],{"class":318},"    \u002F\u002F test01();\n",[312,21482,21483],{"class":314,"line":18439},[312,21484,21485],{"class":318},"    \u002F\u002F test02();\n",[312,21487,21488,21491],{"class":314,"line":18462},[312,21489,21490],{"class":332},"    test03",[312,21492,7440],{"class":324},[312,21494,21495],{"class":314,"line":18476},[312,21496,21497],{"class":318},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[312,21499,21500],{"class":314,"line":18496},[312,21501,21502],{"class":318},"\u002F\u002F 输出结果如下：\n",[312,21504,21505],{"class":314,"line":18502},[312,21506,21507],{"class":318},"\u002F\u002F Person的默认构造函数调用\n",[312,21509,21510],{"class":314,"line":18513},[312,21511,21512],{"class":318},"\u002F\u002F 0x7fffffffceec\n",[312,21514,21515],{"class":314,"line":18536},[312,21516,21512],{"class":318},[312,21518,21519],{"class":314,"line":18558},[312,21520,21521],{"class":318},"\u002F\u002F Person的析构函数调用\n",[312,21523,21524],{"class":314,"line":18563},[312,21525,4205],{"emptyLinePlaceholder":1881},[312,21527,21528],{"class":314,"line":18569},[312,21529,21530],{"class":318},"\u002F\u002F 之前的输出结果如下：\n",[312,21532,21533],{"class":314,"line":18583},[312,21534,21507],{"class":318},[312,21536,21537],{"class":314,"line":18596},[312,21538,21539],{"class":318},"\u002F\u002F 地址\n",[312,21541,21542],{"class":314,"line":18601},[312,21543,21544],{"class":318},"\u002F\u002F Person的拷贝构造函数调用\n",[312,21546,21547],{"class":314,"line":18615},[312,21548,21521],{"class":318},[312,21550,21551],{"class":314,"line":18620},[312,21552,21539],{"class":318},[312,21554,21555],{"class":314,"line":18626},[312,21556,21557],{"class":318},"\u002F\u002F (这两次输出的地址也是不同的) \n",[312,21559,21560],{"class":314,"line":18631},[312,21561,21562],{"class":318},"\u002F\u002F Person的析构函数调用     \n",[312,21564,21565,21567,21569],{"class":314,"line":18645},[312,21566,5895],{"class":1436},[312,21568,5898],{"class":488},[312,21570,498],{"class":324},[312,21572,21573],{"class":314,"line":18650},[312,21574,515],{"class":324},[24,21576,21577],{},"简化版理解",[303,21579,21581],{"className":1942,"code":21580,"language":1944,"meta":308,"style":308},"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",[119,21582,21583,21591,21595,21601,21614,21625,21629,21641,21654,21662,21666,21682,21695,21704,21708,21713,21719,21732,21736,21740,21747,21751,21755,21760,21768,21772,21788,21801,21814,21818,21823,21831,21835,21839,21844,21849,21865,21873,21880,21886,21890,21894,21899,21907,21911,21915,21938,21945,21949,21953,21961,21965,21975,21997,22001,22005,22009,22017,22021,22026,22031,22037,22041,22051,22055,22063],{"__ignoreMap":308},[312,21584,21585,21587,21589],{"class":314,"line":315},[312,21586,16495],{"class":1436},[312,21588,17370],{"class":332},[312,21590,483],{"class":324},[312,21592,21593],{"class":314,"line":171},[312,21594,16517],{"class":1436},[312,21596,21597,21599],{"class":314,"line":274},[312,21598,20318],{"class":332},[312,21600,12656],{"class":324},[312,21602,21603,21605,21607,21610,21612],{"class":314,"line":298},[312,21604,11472],{"class":324},[312,21606,2985],{"class":1436},[312,21608,21609],{"class":339}," \"无参构造函数!\"",[312,21611,3252],{"class":1436},[312,21613,10643],{"class":324},[312,21615,21616,21619,21621,21623],{"class":314,"line":974},[312,21617,21618],{"class":324},"        mAge ",[312,21620,336],{"class":1436},[312,21622,5898],{"class":488},[312,21624,498],{"class":324},[312,21626,21627],{"class":314,"line":980},[312,21628,3992],{"class":324},[312,21630,21631,21633,21635,21637,21639],{"class":314,"line":997},[312,21632,20318],{"class":332},[312,21634,1576],{"class":324},[312,21636,1956],{"class":1436},[312,21638,17489],{"class":1579},[312,21640,14244],{"class":324},[312,21642,21643,21645,21647,21650,21652],{"class":314,"line":1003},[312,21644,11472],{"class":324},[312,21646,2985],{"class":1436},[312,21648,21649],{"class":339}," \"有参构造函数!\"",[312,21651,3252],{"class":1436},[312,21653,10643],{"class":324},[312,21655,21656,21658,21660],{"class":314,"line":1020},[312,21657,21618],{"class":324},[312,21659,336],{"class":1436},[312,21661,9600],{"class":324},[312,21663,21664],{"class":314,"line":1026},[312,21665,3992],{"class":324},[312,21667,21668,21670,21672,21674,21676,21678,21680],{"class":314,"line":3418},[312,21669,20318],{"class":332},[312,21671,1576],{"class":324},[312,21673,8596],{"class":1436},[312,21675,17370],{"class":332},[312,21677,2298],{"class":1436},[312,21679,8629],{"class":1579},[312,21681,14244],{"class":324},[312,21683,21684,21686,21688,21691,21693],{"class":314,"line":3423},[312,21685,11472],{"class":324},[312,21687,2985],{"class":1436},[312,21689,21690],{"class":339}," \"拷贝构造函数!\"",[312,21692,3252],{"class":1436},[312,21694,10643],{"class":324},[312,21696,21697,21699,21701],{"class":314,"line":3429},[312,21698,21618],{"class":324},[312,21700,336],{"class":1436},[312,21702,21703],{"class":324}," p.mAge;\n",[312,21705,21706],{"class":314,"line":3434},[312,21707,3992],{"class":324},[312,21709,21710],{"class":314,"line":3448},[312,21711,21712],{"class":318},"    \u002F\u002F析构函数在释放内存之前调用\n",[312,21714,21715,21717],{"class":314,"line":3453},[312,21716,20351],{"class":332},[312,21718,12656],{"class":324},[312,21720,21721,21723,21725,21728,21730],{"class":314,"line":3459},[312,21722,11472],{"class":324},[312,21724,2985],{"class":1436},[312,21726,21727],{"class":339}," \"析构函数!\"",[312,21729,3252],{"class":1436},[312,21731,10643],{"class":324},[312,21733,21734],{"class":314,"line":3480},[312,21735,3992],{"class":324},[312,21737,21738],{"class":314,"line":3485},[312,21739,16517],{"class":1436},[312,21741,21742,21744],{"class":314,"line":3499},[312,21743,3790],{"class":1436},[312,21745,21746],{"class":324}," mAge;\n",[312,21748,21749],{"class":314,"line":3504},[312,21750,5800],{"class":324},[312,21752,21753],{"class":314,"line":3533},[312,21754,4205],{"emptyLinePlaceholder":1881},[312,21756,21757],{"class":314,"line":3538},[312,21758,21759],{"class":318},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[312,21761,21762,21764,21766],{"class":314,"line":3555},[312,21763,7168],{"class":1436},[312,21765,7392],{"class":332},[312,21767,12656],{"class":324},[312,21769,21770],{"class":314,"line":3560},[312,21771,4205],{"emptyLinePlaceholder":1881},[312,21773,21774,21776,21779,21781,21783,21785],{"class":314,"line":3565},[312,21775,21230],{"class":324},[312,21777,21778],{"class":332},"man",[312,21780,1576],{"class":324},[312,21782,2256],{"class":488},[312,21784,7770],{"class":324},[312,21786,21787],{"class":318}," \u002F\u002Fp对象已经创建完毕\n",[312,21789,21790,21792,21795,21798],{"class":314,"line":3570},[312,21791,21230],{"class":324},[312,21793,21794],{"class":332},"newman",[312,21796,21797],{"class":324},"(man);",[312,21799,21800],{"class":318}," \u002F\u002F调用拷贝构造函数\n",[312,21802,21803,21806,21808,21811],{"class":314,"line":3584},[312,21804,21805],{"class":324},"    Person newman2 ",[312,21807,336],{"class":1436},[312,21809,21810],{"class":324}," man;",[312,21812,21813],{"class":318}," \u002F\u002F拷贝构造\n",[312,21815,21816],{"class":314,"line":3589},[312,21817,4205],{"emptyLinePlaceholder":1881},[312,21819,21820],{"class":314,"line":4382},[312,21821,21822],{"class":318},"    \u002F\u002FPerson newman3;\n",[312,21824,21825,21828],{"class":314,"line":4396},[312,21826,21827],{"class":318},"    \u002F\u002Fnewman3 = man;",[312,21829,21830],{"class":318}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[312,21832,21833],{"class":314,"line":4404},[312,21834,515],{"class":324},[312,21836,21837],{"class":314,"line":4409},[312,21838,4205],{"emptyLinePlaceholder":1881},[312,21840,21841],{"class":314,"line":4415},[312,21842,21843],{"class":318},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[312,21845,21846],{"class":314,"line":4421},[312,21847,21848],{"class":318},"\u002F\u002F相当于Person p1 = p;\n",[312,21850,21851,21853,21855,21857,21859,21862],{"class":314,"line":4426},[312,21852,7168],{"class":1436},[312,21854,21285],{"class":332},[312,21856,1576],{"class":324},[312,21858,20845],{"class":332},[312,21860,21861],{"class":1579}," p1",[312,21863,21864],{"class":324},") {}\n",[312,21866,21867,21869,21871],{"class":314,"line":9751},[312,21868,7168],{"class":1436},[312,21870,7461],{"class":332},[312,21872,12656],{"class":324},[312,21874,21875,21877],{"class":314,"line":9775},[312,21876,20403],{"class":324},[312,21878,21879],{"class":318}," \u002F\u002F无参构造函数\n",[312,21881,21882,21884],{"class":314,"line":9780},[312,21883,21335],{"class":332},[312,21885,21338],{"class":324},[312,21887,21888],{"class":314,"line":9786},[312,21889,515],{"class":324},[312,21891,21892],{"class":314,"line":9813},[312,21893,4205],{"emptyLinePlaceholder":1881},[312,21895,21896],{"class":314,"line":9818},[312,21897,21898],{"class":318},"\u002F\u002F3. 以值方式返回局部对象\n",[312,21900,21901,21903,21905],{"class":314,"line":9824},[312,21902,20845],{"class":332},[312,21904,21354],{"class":332},[312,21906,3781],{"class":324},[312,21908,21909],{"class":314,"line":9836},[312,21910,3353],{"class":324},[312,21912,21913],{"class":314,"line":9848},[312,21914,20835],{"class":324},[312,21916,21917,21919,21921,21923,21925,21927,21929,21931,21934,21936],{"class":314,"line":9860},[312,21918,8333],{"class":324},[312,21920,2985],{"class":1436},[312,21922,3464],{"class":324},[312,21924,1956],{"class":1436},[312,21926,8322],{"class":1436},[312,21928,2374],{"class":324},[312,21930,2298],{"class":1436},[312,21932,21933],{"class":324},"p1 ",[312,21935,2985],{"class":1436},[312,21937,10643],{"class":324},[312,21939,21940,21942],{"class":314,"line":11519},[312,21941,5895],{"class":1436},[312,21943,21944],{"class":324}," p1;\n",[312,21946,21947],{"class":314,"line":11544},[312,21948,515],{"class":324},[312,21950,21951],{"class":314,"line":11567},[312,21952,4205],{"emptyLinePlaceholder":1881},[312,21954,21955,21957,21959],{"class":314,"line":11591},[312,21956,7168],{"class":1436},[312,21958,7533],{"class":332},[312,21960,3781],{"class":324},[312,21962,21963],{"class":314,"line":11596},[312,21964,3353],{"class":324},[312,21966,21967,21969,21971,21973],{"class":314,"line":11601},[312,21968,21420],{"class":324},[312,21970,336],{"class":1436},[312,21972,21354],{"class":332},[312,21974,7440],{"class":324},[312,21976,21977,21979,21981,21983,21985,21987,21989,21991,21993,21995],{"class":314,"line":11606},[312,21978,8333],{"class":324},[312,21980,2985],{"class":1436},[312,21982,3464],{"class":324},[312,21984,1956],{"class":1436},[312,21986,8322],{"class":1436},[312,21988,2374],{"class":324},[312,21990,2298],{"class":1436},[312,21992,13251],{"class":324},[312,21994,2985],{"class":1436},[312,21996,10643],{"class":324},[312,21998,21999],{"class":314,"line":11615},[312,22000,515],{"class":324},[312,22002,22003],{"class":314,"line":11620},[312,22004,4205],{"emptyLinePlaceholder":1881},[312,22006,22007],{"class":314,"line":11626},[312,22008,4205],{"emptyLinePlaceholder":1881},[312,22010,22011,22013,22015],{"class":314,"line":11647},[312,22012,1956],{"class":1436},[312,22014,3778],{"class":332},[312,22016,12656],{"class":324},[312,22018,22019],{"class":314,"line":11653},[312,22020,4205],{"emptyLinePlaceholder":1881},[312,22022,22023],{"class":314,"line":11667},[312,22024,22025],{"class":318},"    \u002F\u002Ftest01();\n",[312,22027,22028],{"class":314,"line":11673},[312,22029,22030],{"class":318},"    \u002F\u002Ftest02();\n",[312,22032,22033,22035],{"class":314,"line":11700},[312,22034,21490],{"class":332},[312,22036,7440],{"class":324},[312,22038,22039],{"class":314,"line":11709},[312,22040,4205],{"emptyLinePlaceholder":1881},[312,22042,22043,22045,22047,22049],{"class":314,"line":11715},[312,22044,4108],{"class":332},[312,22046,1576],{"class":324},[312,22048,4113],{"class":339},[312,22050,4524],{"class":324},[312,22052,22053],{"class":314,"line":11723},[312,22054,4205],{"emptyLinePlaceholder":1881},[312,22056,22057,22059,22061],{"class":314,"line":11728},[312,22058,5895],{"class":1436},[312,22060,5898],{"class":488},[312,22062,498],{"class":324},[312,22064,22065],{"class":314,"line":18404},[312,22066,515],{"class":324},[69,22068,22070],{"id":22069},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[24,22072,22073],{},"默认情况下，c++编译器至少给一个类添加3个函数",[24,22075,22076],{},"1．默认构造函数(无参，函数体为空)",[24,22078,22079],{},"2．默认析构函数(无参，函数体为空)",[24,22081,22082],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[24,22084,22085],{},"构造函数调用规则如下：",[243,22087,22088,22091],{},[143,22089,22090],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[143,22092,22093],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[303,22095,22097],{"className":1942,"code":22096,"language":1944,"meta":308,"style":308},"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",[119,22098,22099,22107,22111,22116,22122,22134,22138,22143,22155,22164,22176,22180,22184,22200,22209,22221,22225,22229,22235,22247,22251,22255,22261,22265,22269,22277,22281,22293,22298,22306,22310,22328,22332,22336,22344,22348,22353,22361,22376,22389,22393,22398,22405,22421,22434,22438,22442,22450,22454,22460,22464,22474,22478,22486],{"__ignoreMap":308},[312,22100,22101,22103,22105],{"class":314,"line":315},[312,22102,16495],{"class":1436},[312,22104,17370],{"class":332},[312,22106,483],{"class":324},[312,22108,22109],{"class":314,"line":171},[312,22110,16517],{"class":1436},[312,22112,22113],{"class":314,"line":274},[312,22114,22115],{"class":318},"    \u002F\u002F无参（默认）构造函数\n",[312,22117,22118,22120],{"class":314,"line":298},[312,22119,20318],{"class":332},[312,22121,12656],{"class":324},[312,22123,22124,22126,22128,22130,22132],{"class":314,"line":974},[312,22125,11472],{"class":324},[312,22127,2985],{"class":1436},[312,22129,21609],{"class":339},[312,22131,3252],{"class":1436},[312,22133,10643],{"class":324},[312,22135,22136],{"class":314,"line":980},[312,22137,3992],{"class":324},[312,22139,22140],{"class":314,"line":997},[312,22141,22142],{"class":318},"    \u002F\u002F有参构造函数\n",[312,22144,22145,22147,22149,22151,22153],{"class":314,"line":1003},[312,22146,20318],{"class":332},[312,22148,1576],{"class":324},[312,22150,1956],{"class":1436},[312,22152,3206],{"class":1579},[312,22154,14244],{"class":324},[312,22156,22157,22160,22162],{"class":314,"line":1020},[312,22158,22159],{"class":324},"        age ",[312,22161,336],{"class":1436},[312,22163,3240],{"class":324},[312,22165,22166,22168,22170,22172,22174],{"class":314,"line":1026},[312,22167,11472],{"class":324},[312,22169,2985],{"class":1436},[312,22171,21649],{"class":339},[312,22173,3252],{"class":1436},[312,22175,10643],{"class":324},[312,22177,22178],{"class":314,"line":3418},[312,22179,3992],{"class":324},[312,22181,22182],{"class":314,"line":3423},[312,22183,20673],{"class":318},[312,22185,22186,22188,22190,22192,22194,22196,22198],{"class":314,"line":3429},[312,22187,20318],{"class":332},[312,22189,1576],{"class":324},[312,22191,8596],{"class":1436},[312,22193,17370],{"class":332},[312,22195,2298],{"class":1436},[312,22197,8629],{"class":1579},[312,22199,14244],{"class":324},[312,22201,22202,22204,22206],{"class":314,"line":3434},[312,22203,22159],{"class":324},[312,22205,336],{"class":1436},[312,22207,22208],{"class":324}," p.age;\n",[312,22210,22211,22213,22215,22217,22219],{"class":314,"line":3448},[312,22212,11472],{"class":324},[312,22214,2985],{"class":1436},[312,22216,21690],{"class":339},[312,22218,3252],{"class":1436},[312,22220,10643],{"class":324},[312,22222,22223],{"class":314,"line":3453},[312,22224,3992],{"class":324},[312,22226,22227],{"class":314,"line":3459},[312,22228,20346],{"class":318},[312,22230,22231,22233],{"class":314,"line":3480},[312,22232,20351],{"class":332},[312,22234,12656],{"class":324},[312,22236,22237,22239,22241,22243,22245],{"class":314,"line":3485},[312,22238,11472],{"class":324},[312,22240,2985],{"class":1436},[312,22242,21727],{"class":339},[312,22244,3252],{"class":1436},[312,22246,10643],{"class":324},[312,22248,22249],{"class":314,"line":3499},[312,22250,3992],{"class":324},[312,22252,22253],{"class":314,"line":3504},[312,22254,16517],{"class":1436},[312,22256,22257,22259],{"class":314,"line":3533},[312,22258,3790],{"class":1436},[312,22260,9600],{"class":324},[312,22262,22263],{"class":314,"line":3538},[312,22264,5800],{"class":324},[312,22266,22267],{"class":314,"line":3555},[312,22268,4205],{"emptyLinePlaceholder":1881},[312,22270,22271,22273,22275],{"class":314,"line":3560},[312,22272,7168],{"class":1436},[312,22274,7392],{"class":332},[312,22276,3781],{"class":324},[312,22278,22279],{"class":314,"line":3565},[312,22280,3353],{"class":324},[312,22282,22283,22285,22287,22289,22291],{"class":314,"line":3570},[312,22284,21230],{"class":324},[312,22286,8934],{"class":332},[312,22288,1576],{"class":324},[312,22290,2595],{"class":488},[312,22292,4524],{"class":324},[312,22294,22295],{"class":314,"line":3584},[312,22296,22297],{"class":318},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[312,22299,22300,22302,22304],{"class":314,"line":3589},[312,22301,21230],{"class":324},[312,22303,8837],{"class":332},[312,22305,19315],{"class":324},[312,22307,22308],{"class":314,"line":4382},[312,22309,4205],{"emptyLinePlaceholder":1881},[312,22311,22312,22314,22316,22319,22321,22324,22326],{"class":314,"line":4396},[312,22313,8333],{"class":324},[312,22315,2985],{"class":1436},[312,22317,22318],{"class":339}," \"p2的年龄为： \"",[312,22320,3252],{"class":1436},[312,22322,22323],{"class":324}," p2.age ",[312,22325,2985],{"class":1436},[312,22327,10643],{"class":324},[312,22329,22330],{"class":314,"line":4404},[312,22331,515],{"class":324},[312,22333,22334],{"class":314,"line":4409},[312,22335,4205],{"emptyLinePlaceholder":1881},[312,22337,22338,22340,22342],{"class":314,"line":4415},[312,22339,7168],{"class":1436},[312,22341,7461],{"class":332},[312,22343,3781],{"class":324},[312,22345,22346],{"class":314,"line":4421},[312,22347,3353],{"class":324},[312,22349,22350],{"class":314,"line":4426},[312,22351,22352],{"class":318},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[312,22354,22355,22358],{"class":314,"line":9751},[312,22356,22357],{"class":324},"    Person p1;",[312,22359,22360],{"class":318}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[312,22362,22363,22365,22367,22369,22371,22373],{"class":314,"line":9775},[312,22364,21230],{"class":324},[312,22366,8837],{"class":332},[312,22368,1576],{"class":324},[312,22370,2391],{"class":488},[312,22372,7770],{"class":324},[312,22374,22375],{"class":318}," \u002F\u002F用户提供的有参\n",[312,22377,22378,22380,22383,22386],{"class":314,"line":9780},[312,22379,21230],{"class":324},[312,22381,22382],{"class":332},"p3",[312,22384,22385],{"class":324},"(p2);",[312,22387,22388],{"class":318}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[312,22390,22391],{"class":314,"line":9786},[312,22392,4205],{"emptyLinePlaceholder":1881},[312,22394,22395],{"class":314,"line":9813},[312,22396,22397],{"class":318},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[312,22399,22400,22403],{"class":314,"line":9818},[312,22401,22402],{"class":324},"    Person p4;",[312,22404,22360],{"class":318},[312,22406,22407,22409,22412,22414,22416,22418],{"class":314,"line":9824},[312,22408,21230],{"class":324},[312,22410,22411],{"class":332},"p5",[312,22413,1576],{"class":324},[312,22415,2391],{"class":488},[312,22417,7770],{"class":324},[312,22419,22420],{"class":318}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[312,22422,22423,22425,22428,22431],{"class":314,"line":9836},[312,22424,21230],{"class":324},[312,22426,22427],{"class":332},"p6",[312,22429,22430],{"class":324},"(p5);",[312,22432,22433],{"class":318}," \u002F\u002F用户自己提供拷贝构造\n",[312,22435,22436],{"class":314,"line":9848},[312,22437,515],{"class":324},[312,22439,22440],{"class":314,"line":9860},[312,22441,4205],{"emptyLinePlaceholder":1881},[312,22443,22444,22446,22448],{"class":314,"line":11519},[312,22445,1956],{"class":1436},[312,22447,3778],{"class":332},[312,22449,12656],{"class":324},[312,22451,22452],{"class":314,"line":11544},[312,22453,4205],{"emptyLinePlaceholder":1881},[312,22455,22456,22458],{"class":314,"line":11567},[312,22457,7437],{"class":332},[312,22459,7440],{"class":324},[312,22461,22462],{"class":314,"line":11591},[312,22463,4205],{"emptyLinePlaceholder":1881},[312,22465,22466,22468,22470,22472],{"class":314,"line":11596},[312,22467,4108],{"class":332},[312,22469,1576],{"class":324},[312,22471,4113],{"class":339},[312,22473,4524],{"class":324},[312,22475,22476],{"class":314,"line":11601},[312,22477,4205],{"emptyLinePlaceholder":1881},[312,22479,22480,22482,22484],{"class":314,"line":11606},[312,22481,5895],{"class":1436},[312,22483,5898],{"class":488},[312,22485,498],{"class":324},[312,22487,22488],{"class":314,"line":11615},[312,22489,515],{"class":324},[69,22491,22493],{"id":22492},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[24,22495,22496],{},"浅拷贝：简单的赋值拷贝操作",[24,22498,22499],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[303,22501,22503],{"className":1942,"code":22502,"language":1944,"meta":308,"style":308},"#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",[119,22504,22505,22511,22521,22527,22531,22535,22540,22546,22550,22563,22567,22571,22578,22582,22592,22607,22620,22624,22629,22634,22650,22654,22667,22672,22677,22682,22691,22696,22711,22715,22719,22723,22729,22733,22738,22753,22757,22768,22782,22786,22795,22799,22805,22817,22821,22829,22833,22850,22881,22889,22917,22921,22925,22933,22937,22943],{"__ignoreMap":308},[312,22506,22507,22509],{"class":314,"line":315},[312,22508,3755],{"class":1436},[312,22510,3758],{"class":339},[312,22512,22513,22515,22517,22519],{"class":314,"line":171},[312,22514,3763],{"class":1436},[312,22516,3766],{"class":1436},[312,22518,3769],{"class":332},[312,22520,498],{"class":324},[312,22522,22523,22525],{"class":314,"line":274},[312,22524,16495],{"class":1436},[312,22526,16972],{"class":332},[312,22528,22529],{"class":314,"line":298},[312,22530,3353],{"class":324},[312,22532,22533],{"class":314,"line":974},[312,22534,16517],{"class":1436},[312,22536,22537],{"class":314,"line":980},[312,22538,22539],{"class":318},"    \u002F\u002F默认构造函数\n",[312,22541,22542,22544],{"class":314,"line":997},[312,22543,20318],{"class":332},[312,22545,3781],{"class":324},[312,22547,22548],{"class":314,"line":1003},[312,22549,3835],{"class":324},[312,22551,22552,22554,22556,22559,22561],{"class":314,"line":1020},[312,22553,5256],{"class":324},[312,22555,2985],{"class":1436},[312,22557,22558],{"class":339},"\"默认构造函数\"",[312,22560,2985],{"class":1436},[312,22562,3007],{"class":324},[312,22564,22565],{"class":314,"line":1026},[312,22566,3992],{"class":324},[312,22568,22569],{"class":314,"line":3418},[312,22570,22142],{"class":318},[312,22572,22573,22575],{"class":314,"line":3423},[312,22574,20351],{"class":332},[312,22576,22577],{"class":324},"(int age,int height)\n",[312,22579,22580],{"class":314,"line":3429},[312,22581,3835],{"class":324},[312,22583,22584,22587,22589],{"class":314,"line":3434},[312,22585,22586],{"class":324},"        m_Age",[312,22588,336],{"class":1436},[312,22590,22591],{"class":324},"age;\n",[312,22593,22594,22597,22599,22601,22604],{"class":314,"line":3448},[312,22595,22596],{"class":324},"        m_Height",[312,22598,13520],{"class":1436},[312,22600,4187],{"class":1436},[312,22602,22603],{"class":324},"(height);",[312,22605,22606],{"class":318},"\u002F\u002F放到堆区\n",[312,22608,22609,22611,22613,22616,22618],{"class":314,"line":3453},[312,22610,5256],{"class":324},[312,22612,2985],{"class":1436},[312,22614,22615],{"class":339},"\"有参构造函数\"",[312,22617,2985],{"class":1436},[312,22619,3007],{"class":324},[312,22621,22622],{"class":314,"line":3459},[312,22623,3992],{"class":324},[312,22625,22626],{"class":314,"line":3480},[312,22627,22628],{"class":318},"    \u002F\u002F深拷贝解决上述问题\n",[312,22630,22631],{"class":314,"line":3485},[312,22632,22633],{"class":318},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[312,22635,22636,22638,22640,22642,22644,22646,22648],{"class":314,"line":3499},[312,22637,20318],{"class":332},[312,22639,1576],{"class":324},[312,22641,8596],{"class":1436},[312,22643,17370],{"class":332},[312,22645,12387],{"class":1436},[312,22647,24],{"class":1579},[312,22649,1959],{"class":324},[312,22651,22652],{"class":314,"line":3504},[312,22653,3835],{"class":324},[312,22655,22656,22658,22660,22663,22665],{"class":314,"line":3533},[312,22657,5256],{"class":324},[312,22659,2985],{"class":1436},[312,22661,22662],{"class":339},"\"拷贝构造函数\"",[312,22664,2985],{"class":1436},[312,22666,3007],{"class":324},[312,22668,22669],{"class":314,"line":3538},[312,22670,22671],{"class":318},"        \u002F\u002F编译器默认的写如下注释部分\n",[312,22673,22674],{"class":314,"line":3555},[312,22675,22676],{"class":318},"        \u002F\u002Fm_Age=p.m_Age;\n",[312,22678,22679],{"class":314,"line":3560},[312,22680,22681],{"class":318},"        \u002F\u002Fm_Height=p.m_Height;\n",[312,22683,22684,22686,22688],{"class":314,"line":3565},[312,22685,22586],{"class":324},[312,22687,336],{"class":1436},[312,22689,22690],{"class":324},"p.m_Age;\n",[312,22692,22693],{"class":314,"line":3570},[312,22694,22695],{"class":318},"        \u002F\u002F深拷贝操作\n",[312,22697,22698,22700,22702,22704,22706,22708],{"class":314,"line":3584},[312,22699,22596],{"class":324},[312,22701,13520],{"class":1436},[312,22703,4187],{"class":1436},[312,22705,1576],{"class":324},[312,22707,2400],{"class":1436},[312,22709,22710],{"class":324},"p.m_Height);\n",[312,22712,22713],{"class":314,"line":3589},[312,22714,3992],{"class":324},[312,22716,22717],{"class":314,"line":4382},[312,22718,4205],{"emptyLinePlaceholder":1881},[312,22720,22721],{"class":314,"line":4396},[312,22722,20346],{"class":318},[312,22724,22725,22727],{"class":314,"line":4404},[312,22726,20351],{"class":332},[312,22728,3781],{"class":324},[312,22730,22731],{"class":314,"line":4409},[312,22732,3835],{"class":324},[312,22734,22735],{"class":314,"line":4415},[312,22736,22737],{"class":318},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[312,22739,22740,22742,22745,22748,22751],{"class":314,"line":4421},[312,22741,4302],{"class":1436},[312,22743,22744],{"class":324},"(m_Height ",[312,22746,22747],{"class":1436},"!=",[312,22749,22750],{"class":488}," NULL",[312,22752,1959],{"class":324},[312,22754,22755],{"class":314,"line":4426},[312,22756,4315],{"class":324},[312,22758,22759,22762,22765],{"class":314,"line":9751},[312,22760,22761],{"class":1436},"            delete",[312,22763,22764],{"class":324}," m_Height;",[312,22766,22767],{"class":318}," \u002F\u002F释放堆区内存\n",[312,22769,22770,22773,22775,22777,22779],{"class":314,"line":9775},[312,22771,22772],{"class":324},"            m_Height",[312,22774,336],{"class":1436},[312,22776,4197],{"class":488},[312,22778,2006],{"class":324},[312,22780,22781],{"class":318}," \u002F\u002F防止野指针\n",[312,22783,22784],{"class":314,"line":9780},[312,22785,4334],{"class":324},[312,22787,22788,22790,22792],{"class":314,"line":9786},[312,22789,5256],{"class":324},[312,22791,2985],{"class":1436},[312,22793,22794],{"class":339},"\"Person的析构函数调用\"\n",[312,22796,22797],{"class":314,"line":9813},[312,22798,3992],{"class":324},[312,22800,22801,22803],{"class":314,"line":9818},[312,22802,3790],{"class":1436},[312,22804,17466],{"class":324},[312,22806,22807,22809,22811,22814],{"class":314,"line":9824},[312,22808,3790],{"class":1436},[312,22810,8322],{"class":1436},[312,22812,22813],{"class":324},"m_Height;",[312,22815,22816],{"class":318}," \u002F\u002F定义一个指针，指向身高\n",[312,22818,22819],{"class":314,"line":9836},[312,22820,5800],{"class":324},[312,22822,22823,22825,22827],{"class":314,"line":9848},[312,22824,7168],{"class":1436},[312,22826,7392],{"class":332},[312,22828,3781],{"class":324},[312,22830,22831],{"class":314,"line":9860},[312,22832,3353],{"class":324},[312,22834,22835,22837,22839,22841,22843,22845,22848],{"class":314,"line":11519},[312,22836,21230],{"class":324},[312,22838,8934],{"class":332},[312,22840,1576],{"class":324},[312,22842,2595],{"class":488},[312,22844,2323],{"class":324},[312,22846,22847],{"class":488},"160",[312,22849,4524],{"class":324},[312,22851,22852,22854,22856,22859,22861,22864,22866,22869,22871,22874,22876,22878],{"class":314,"line":11544},[312,22853,3358],{"class":324},[312,22855,2985],{"class":1436},[312,22857,22858],{"class":339},"\"p1的年龄为:\"",[312,22860,2985],{"class":1436},[312,22862,22863],{"class":324},"p1.m_Age",[312,22865,2985],{"class":1436},[312,22867,22868],{"class":339},"\"身高为：\"",[312,22870,8223],{"class":1436},[312,22872,22873],{"class":324},"p1.m_Height",[312,22875,2985],{"class":1436},[312,22877,3050],{"class":324},[312,22879,22880],{"class":318},"  \u002F\u002F18\n",[312,22882,22883,22885,22887],{"class":314,"line":11567},[312,22884,21230],{"class":324},[312,22886,8837],{"class":332},[312,22888,19315],{"class":324},[312,22890,22891,22893,22895,22898,22900,22902,22904,22906,22908,22911,22913,22915],{"class":314,"line":11591},[312,22892,3358],{"class":324},[312,22894,2985],{"class":1436},[312,22896,22897],{"class":339},"\"p2的年龄为：\"",[312,22899,2985],{"class":1436},[312,22901,21260],{"class":324},[312,22903,2985],{"class":1436},[312,22905,22868],{"class":339},[312,22907,8223],{"class":1436},[312,22909,22910],{"class":324},"p2.m_Height",[312,22912,2985],{"class":1436},[312,22914,3050],{"class":324},[312,22916,22880],{"class":318},[312,22918,22919],{"class":314,"line":11596},[312,22920,15012],{"class":324},[312,22922,22923],{"class":314,"line":11601},[312,22924,515],{"class":324},[312,22926,22927,22929,22931],{"class":314,"line":11606},[312,22928,1956],{"class":1436},[312,22930,3778],{"class":332},[312,22932,3781],{"class":324},[312,22934,22935],{"class":314,"line":11615},[312,22936,3353],{"class":324},[312,22938,22939,22941],{"class":314,"line":11620},[312,22940,7437],{"class":332},[312,22942,7440],{"class":324},[312,22944,22945],{"class":314,"line":11626},[312,22946,515],{"class":324},[24,22948,22949],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[24,22951,22952],{},"浅拷贝带来的问题是堆区的内存重复释放",[24,22954,22955],{},[19,22956],{"alt":308,"src":22957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[24,22959,22960],{},"浅拷贝问题要使用深拷贝来解决",[24,22962,22963],{},[19,22964],{"alt":308,"src":22965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[24,22967,22968],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[69,22970,22972],{"id":22971},"_826初始化列表","8.2.6初始化列表",[24,22974,22975],{},"作用：初始化属性",[24,22977,6986],{},[303,22979,22982],{"className":22980,"code":22981,"language":6992},[6990],"构造函数():属性1(值1),属性2(值2).....{}\n",[119,22983,22981],{"__ignoreMap":308},[24,22985,22986],{},"例子",[303,22988,22990],{"className":1942,"code":22989,"language":1944,"meta":308,"style":308},"#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",[119,22991,22992,22998,23008,23014,23018,23023,23027,23032,23037,23042,23047,23052,23057,23061,23066,23071,23114,23123,23141,23159,23177,23181,23185,23192,23199,23206,23210,23214,23222,23226,23230,23250,23259,23263,23267,23277,23281,23289],{"__ignoreMap":308},[312,22993,22994,22996],{"class":314,"line":315},[312,22995,3755],{"class":1436},[312,22997,3758],{"class":339},[312,22999,23000,23002,23004,23006],{"class":314,"line":171},[312,23001,3763],{"class":1436},[312,23003,3766],{"class":1436},[312,23005,3769],{"class":332},[312,23007,498],{"class":324},[312,23009,23010,23012],{"class":314,"line":274},[312,23011,16495],{"class":1436},[312,23013,16972],{"class":332},[312,23015,23016],{"class":314,"line":298},[312,23017,3353],{"class":324},[312,23019,23020],{"class":314,"line":974},[312,23021,23022],{"class":1436},"    public:\n",[312,23024,23025],{"class":314,"line":980},[312,23026,4205],{"emptyLinePlaceholder":1881},[312,23028,23029],{"class":314,"line":997},[312,23030,23031],{"class":318},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[312,23033,23034],{"class":314,"line":1003},[312,23035,23036],{"class":318},"    \u002F\u002FPerson(int a, int b, int c) {\n",[312,23038,23039],{"class":314,"line":1020},[312,23040,23041],{"class":318},"    \u002F\u002F  m_A = a;\n",[312,23043,23044],{"class":314,"line":1026},[312,23045,23046],{"class":318},"    \u002F\u002F  m_B = b;\n",[312,23048,23049],{"class":314,"line":3418},[312,23050,23051],{"class":318},"    \u002F\u002F  m_C = c;\n",[312,23053,23054],{"class":314,"line":3423},[312,23055,23056],{"class":318},"    \u002F\u002F}\n",[312,23058,23059],{"class":314,"line":3429},[312,23060,4205],{"emptyLinePlaceholder":1881},[312,23062,23063],{"class":314,"line":3434},[312,23064,23065],{"class":318},"    \u002F\u002F初始化列表方式初始化\n",[312,23067,23068],{"class":314,"line":3448},[312,23069,23070],{"class":318},"    \u002F\u002F使用有参构造函数\n",[312,23072,23073,23075,23077,23079,23081,23083,23085,23087,23089,23091,23093,23096,23099,23102,23105,23108,23111],{"class":314,"line":3453},[312,23074,20318],{"class":332},[312,23076,1576],{"class":324},[312,23078,1956],{"class":1436},[312,23080,3206],{"class":1579},[312,23082,733],{"class":324},[312,23084,1956],{"class":1436},[312,23086,4638],{"class":1579},[312,23088,733],{"class":324},[312,23090,1956],{"class":1436},[312,23092,4654],{"class":1579},[312,23094,23095],{"class":324},") :",[312,23097,23098],{"class":332},"m_A",[312,23100,23101],{"class":324},"(a), ",[312,23103,23104],{"class":332},"m_B",[312,23106,23107],{"class":324},"(b), ",[312,23109,23110],{"class":332},"m_C",[312,23112,23113],{"class":324},"(c) {}\n",[312,23115,23116,23118,23121],{"class":314,"line":3459},[312,23117,16710],{"class":1436},[312,23119,23120],{"class":332}," PrintPerson",[312,23122,12656],{"class":324},[312,23124,23125,23127,23129,23132,23134,23137,23139],{"class":314,"line":3480},[312,23126,11472],{"class":324},[312,23128,2985],{"class":1436},[312,23130,23131],{"class":339}," \"mA:\"",[312,23133,3252],{"class":1436},[312,23135,23136],{"class":324}," m_A ",[312,23138,2985],{"class":1436},[312,23140,10643],{"class":324},[312,23142,23143,23145,23147,23150,23152,23155,23157],{"class":314,"line":3485},[312,23144,11472],{"class":324},[312,23146,2985],{"class":1436},[312,23148,23149],{"class":339}," \"mB:\"",[312,23151,3252],{"class":1436},[312,23153,23154],{"class":324}," m_B ",[312,23156,2985],{"class":1436},[312,23158,10643],{"class":324},[312,23160,23161,23163,23165,23168,23170,23173,23175],{"class":314,"line":3499},[312,23162,11472],{"class":324},[312,23164,2985],{"class":1436},[312,23166,23167],{"class":339}," \"mC:\"",[312,23169,3252],{"class":1436},[312,23171,23172],{"class":324}," m_C ",[312,23174,2985],{"class":1436},[312,23176,10643],{"class":324},[312,23178,23179],{"class":314,"line":3504},[312,23180,3992],{"class":324},[312,23182,23183],{"class":314,"line":3533},[312,23184,17023],{"class":1436},[312,23186,23187,23189],{"class":314,"line":3538},[312,23188,3790],{"class":1436},[312,23190,23191],{"class":324}," m_A;\n",[312,23193,23194,23196],{"class":314,"line":3555},[312,23195,3790],{"class":1436},[312,23197,23198],{"class":324}," m_B;\n",[312,23200,23201,23203],{"class":314,"line":3560},[312,23202,3790],{"class":1436},[312,23204,23205],{"class":324}," m_C;\n",[312,23207,23208],{"class":314,"line":3565},[312,23209,5800],{"class":324},[312,23211,23212],{"class":314,"line":3570},[312,23213,4205],{"emptyLinePlaceholder":1881},[312,23215,23216,23218,23220],{"class":314,"line":3584},[312,23217,1956],{"class":1436},[312,23219,3778],{"class":332},[312,23221,7782],{"class":324},[312,23223,23224],{"class":314,"line":3589},[312,23225,3353],{"class":324},[312,23227,23228],{"class":314,"line":4382},[312,23229,4205],{"emptyLinePlaceholder":1881},[312,23231,23232,23234,23236,23238,23240,23242,23244,23246,23248],{"class":314,"line":4396},[312,23233,21230],{"class":324},[312,23235,24],{"class":332},[312,23237,1576],{"class":324},[312,23239,1433],{"class":488},[312,23241,733],{"class":324},[312,23243,2027],{"class":488},[312,23245,733],{"class":324},[312,23247,2021],{"class":488},[312,23249,4524],{"class":324},[312,23251,23252,23254,23257],{"class":314,"line":4404},[312,23253,17666],{"class":324},[312,23255,23256],{"class":332},"PrintPerson",[312,23258,7440],{"class":324},[312,23260,23261],{"class":314,"line":4409},[312,23262,4205],{"emptyLinePlaceholder":1881},[312,23264,23265],{"class":314,"line":4415},[312,23266,4205],{"emptyLinePlaceholder":1881},[312,23268,23269,23271,23273,23275],{"class":314,"line":4421},[312,23270,4108],{"class":332},[312,23272,1576],{"class":324},[312,23274,4113],{"class":339},[312,23276,4524],{"class":324},[312,23278,23279],{"class":314,"line":4426},[312,23280,4205],{"emptyLinePlaceholder":1881},[312,23282,23283,23285,23287],{"class":314,"line":9751},[312,23284,5895],{"class":1436},[312,23286,5898],{"class":488},[312,23288,498],{"class":324},[312,23290,23291],{"class":314,"line":9775},[312,23292,515],{"class":324},[24,23294,23295,23296,394,23299],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[27,23297,23298],{},"参数名就是定义的对象属性",[27,23300,23301],{},"属性后面的值为有参构造函数的形参",[303,23303,23305],{"className":1942,"code":23304,"language":1944,"meta":308,"style":308},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[119,23306,23307],{"__ignoreMap":308},[312,23308,23309,23311,23313,23315,23318,23320,23323,23325,23328,23330,23333,23335,23338,23340],{"class":314,"line":315},[312,23310,20845],{"class":332},[312,23312,1576],{"class":324},[312,23314,1956],{"class":1436},[312,23316,23317],{"class":324}," a.",[312,23319,1956],{"class":1436},[312,23321,23322],{"class":324}," b,",[312,23324,1956],{"class":1436},[312,23326,23327],{"class":324}," b):",[312,23329,23098],{"class":332},[312,23331,23332],{"class":324},"(a),",[312,23334,23104],{"class":332},[312,23336,23337],{"class":324},"(c),",[312,23339,23110],{"class":332},[312,23341,23342],{"class":324},"(b) {}\n",[69,23344,23346],{"id":23345},"_827类对象作为类成员","8.2.7类对象作为类成员",[24,23348,23349],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[24,23351,16434],{},[303,23353,23355],{"className":1942,"code":23354,"language":1944,"meta":308,"style":308},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[119,23356,23357,23362,23367,23371,23376,23380],{"__ignoreMap":308},[312,23358,23359],{"class":314,"line":315},[312,23360,23361],{"class":324},"A{};\n",[312,23363,23364],{"class":314,"line":171},[312,23365,23366],{"class":324},"B\n",[312,23368,23369],{"class":314,"line":274},[312,23370,3353],{"class":324},[312,23372,23373],{"class":314,"line":298},[312,23374,23375],{"class":324},"    A a;\n",[312,23377,23378],{"class":314,"line":974},[312,23379,515],{"class":324},[312,23381,23382],{"class":314,"line":980},[312,23383,23384],{"class":318},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[24,23386,23387],{},"案例",[303,23389,23391],{"className":1942,"code":23390,"language":1944,"meta":308,"style":308},"\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",[119,23392,23393,23398,23405,23409,23414,23419,23433,23437,23447,23458,23462,23469,23473,23486,23490,23495,23500,23504,23510,23514,23518,23522,23553,23557,23568,23572,23578,23582,23595,23599,23603,23607,23612,23617,23621,23629,23633,23650,23669,23673,23681,23685,23691],{"__ignoreMap":308},[312,23394,23395],{"class":314,"line":315},[312,23396,23397],{"class":318},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[312,23399,23400,23402],{"class":314,"line":171},[312,23401,16495],{"class":1436},[312,23403,23404],{"class":332}," Phone\n",[312,23406,23407],{"class":314,"line":274},[312,23408,3353],{"class":324},[312,23410,23411],{"class":314,"line":298},[312,23412,23413],{"class":324},"public：\n",[312,23415,23416],{"class":314,"line":974},[312,23417,23418],{"class":318},"    \u002F\u002F 赋值(构造函数)\n",[312,23420,23421,23424,23426,23428,23431],{"class":314,"line":980},[312,23422,23423],{"class":332},"    Phone",[312,23425,1576],{"class":324},[312,23427,16718],{"class":332},[312,23429,23430],{"class":1579}," pName",[312,23432,1959],{"class":324},[312,23434,23435],{"class":314,"line":997},[312,23436,3835],{"class":324},[312,23438,23439,23442,23444],{"class":314,"line":1003},[312,23440,23441],{"class":324},"        m_pName",[312,23443,336],{"class":1436},[312,23445,23446],{"class":324},"pName;\n",[312,23448,23449,23451,23453,23456],{"class":314,"line":1020},[312,23450,5256],{"class":324},[312,23452,2985],{"class":1436},[312,23454,23455],{"class":339},"\"Phone的构造函数调用\"",[312,23457,498],{"class":324},[312,23459,23460],{"class":314,"line":1026},[312,23461,3992],{"class":324},[312,23463,23464,23467],{"class":314,"line":3418},[312,23465,23466],{"class":332},"    ~Phone",[312,23468,3781],{"class":324},[312,23470,23471],{"class":314,"line":3423},[312,23472,3835],{"class":324},[312,23474,23475,23477,23479,23482,23484],{"class":314,"line":3429},[312,23476,5256],{"class":324},[312,23478,2985],{"class":1436},[312,23480,23481],{"class":339},"\"Phone析构函数调用\"",[312,23483,2985],{"class":1436},[312,23485,3007],{"class":324},[312,23487,23488],{"class":314,"line":3434},[312,23489,3992],{"class":324},[312,23491,23492],{"class":314,"line":3448},[312,23493,23494],{"class":318},"    \u002F\u002F\n",[312,23496,23497],{"class":314,"line":3453},[312,23498,23499],{"class":324},"    string m_PName;\n",[312,23501,23502],{"class":314,"line":3459},[312,23503,5800],{"class":324},[312,23505,23506,23508],{"class":314,"line":3480},[312,23507,16495],{"class":1436},[312,23509,16972],{"class":332},[312,23511,23512],{"class":314,"line":3485},[312,23513,3353],{"class":324},[312,23515,23516],{"class":314,"line":3499},[312,23517,16517],{"class":1436},[312,23519,23520],{"class":314,"line":3504},[312,23521,18794],{"class":318},[312,23523,23524,23526,23528,23530,23532,23534,23536,23539,23542,23544,23547,23550],{"class":314,"line":3533},[312,23525,20318],{"class":332},[312,23527,1576],{"class":324},[312,23529,16718],{"class":332},[312,23531,16721],{"class":1579},[312,23533,2323],{"class":324},[312,23535,16718],{"class":332},[312,23537,23538],{"class":1579}," pname",[312,23540,23541],{"class":324},"):",[312,23543,16811],{"class":332},[312,23545,23546],{"class":324},"(name),m_phone.",[312,23548,23549],{"class":332},"m_PName",[312,23551,23552],{"class":324},"(pname) \n",[312,23554,23555],{"class":314,"line":3538},[312,23556,3835],{"class":324},[312,23558,23559,23561,23563,23566],{"class":314,"line":3555},[312,23560,5256],{"class":324},[312,23562,2985],{"class":1436},[312,23564,23565],{"class":339},"\"Person的构造函数调用\"",[312,23567,498],{"class":324},[312,23569,23570],{"class":314,"line":3560},[312,23571,3992],{"class":324},[312,23573,23574,23576],{"class":314,"line":3565},[312,23575,20351],{"class":332},[312,23577,3781],{"class":324},[312,23579,23580],{"class":314,"line":3570},[312,23581,3835],{"class":324},[312,23583,23584,23586,23588,23591,23593],{"class":314,"line":3584},[312,23585,5256],{"class":324},[312,23587,2985],{"class":1436},[312,23589,23590],{"class":339},"\"Person析构函数调用\"",[312,23592,2985],{"class":1436},[312,23594,3007],{"class":324},[312,23596,23597],{"class":314,"line":3589},[312,23598,3992],{"class":324},[312,23600,23601],{"class":314,"line":4382},[312,23602,9583],{"class":318},[312,23604,23605],{"class":314,"line":4396},[312,23606,16693],{"class":324},[312,23608,23609],{"class":314,"line":4404},[312,23610,23611],{"class":318},"    \u002F\u002F手机\n",[312,23613,23614],{"class":314,"line":4409},[312,23615,23616],{"class":324},"    Phone m_Phone;\n",[312,23618,23619],{"class":314,"line":4415},[312,23620,5800],{"class":324},[312,23622,23623,23625,23627],{"class":314,"line":4421},[312,23624,7168],{"class":1436},[312,23626,7392],{"class":332},[312,23628,3781],{"class":324},[312,23630,23631],{"class":314,"line":4426},[312,23632,3353],{"class":324},[312,23634,23635,23637,23639,23641,23643,23645,23648],{"class":314,"line":9751},[312,23636,21230],{"class":324},[312,23638,24],{"class":332},[312,23640,1576],{"class":324},[312,23642,9719],{"class":339},[312,23644,2323],{"class":324},[312,23646,23647],{"class":339},"\"安卓\"",[312,23649,4524],{"class":324},[312,23651,23652,23654,23656,23659,23661,23664,23666],{"class":314,"line":9775},[312,23653,3358],{"class":324},[312,23655,2985],{"class":1436},[312,23657,23658],{"class":324},"p.Name",[312,23660,2985],{"class":1436},[312,23662,23663],{"class":339},"\"拿着：\"",[312,23665,2985],{"class":1436},[312,23667,23668],{"class":324},"p.m_phone.m_PName;\n",[312,23670,23671],{"class":314,"line":9780},[312,23672,515],{"class":324},[312,23674,23675,23677,23679],{"class":314,"line":9786},[312,23676,1956],{"class":1436},[312,23678,3778],{"class":332},[312,23680,3781],{"class":324},[312,23682,23683],{"class":314,"line":9813},[312,23684,3353],{"class":324},[312,23686,23687,23689],{"class":314,"line":9818},[312,23688,7437],{"class":332},[312,23690,7440],{"class":324},[312,23692,23693],{"class":314,"line":9824},[312,23694,515],{"class":324},[24,23696,10828],{},[303,23698,23700],{"className":1942,"code":23699,"language":1944,"meta":308,"style":308},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[119,23701,23702,23707],{"__ignoreMap":308},[312,23703,23704],{"class":314,"line":315},[312,23705,23706],{"class":318},"    \u002F\u002F不需要写这个：\n",[312,23708,23709],{"class":314,"line":171},[312,23710,23711],{"class":318},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[24,23713,23714],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[303,23716,23718],{"className":1942,"code":23717,"language":1944,"meta":308,"style":308},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[119,23719,23720],{"__ignoreMap":308},[312,23721,23722,23724,23727,23729,23732,23735],{"class":314,"line":315},[312,23723,20845],{"class":332},[312,23725,23726],{"class":324},"(string name.string pname):",[312,23728,16811],{"class":332},[312,23730,23731],{"class":324},"(name),",[312,23733,23734],{"class":332},"m_phone",[312,23736,23737],{"class":324},"(pname) {}\n",[24,23739,23740,23741,336,23744],{},"采用的是隐式转换法，实际为如下：\n",[119,23742,23743],{},"m_phone(pname)",[119,23745,23746],{},"Phone m_phone=pname",[24,23748,23749,23752],{},[27,23750,23751],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[24,23754,23755],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[69,23757,23759],{"id":23758},"_828静态对象","8.2.8静态对象",[24,23761,23762],{},"静态对象在成员对象前static，称为静态对象",[24,23764,23765],{},"静态对象分为两类：",[140,23767,23768],{},[143,23769,23770],{},"静态成员变量",[243,23772,23773,23776,23779],{},[143,23774,23775],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[143,23777,23778],{},"②在编译阶段分配内存",[143,23780,23781],{},"③类内声明，类外初始化",[140,23783,23784],{"start":171},[143,23785,23786],{},"静态成员函数",[243,23788,23789,23792],{},[143,23790,23791],{},"①所有对象共享同一个函数",[143,23793,23794],{},"②静态成员函数只能访问静态成员变量",[23796,23797,23799],"h4",{"id":23798},"_8281静态成员变量","8.2.8.1静态成员变量",[303,23801,23803],{"className":1942,"code":23802,"language":1944,"meta":308,"style":308},"#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",[119,23804,23805,23811,23821,23827,23831,23835,23840,23845,23850,23858,23862,23866,23870,23878,23882,23886,23891,23904,23908,23916,23920,23926],{"__ignoreMap":308},[312,23806,23807,23809],{"class":314,"line":315},[312,23808,3755],{"class":1436},[312,23810,3758],{"class":339},[312,23812,23813,23815,23817,23819],{"class":314,"line":171},[312,23814,3763],{"class":1436},[312,23816,3766],{"class":1436},[312,23818,3769],{"class":332},[312,23820,498],{"class":324},[312,23822,23823,23825],{"class":314,"line":274},[312,23824,16495],{"class":1436},[312,23826,16972],{"class":332},[312,23828,23829],{"class":314,"line":298},[312,23830,3353],{"class":324},[312,23832,23833],{"class":314,"line":974},[312,23834,16517],{"class":1436},[312,23836,23837],{"class":314,"line":980},[312,23838,23839],{"class":318},"    \u002F\u002F非静态成员变量\n",[312,23841,23842],{"class":314,"line":997},[312,23843,23844],{"class":318},"    \u002F\u002F int m_A;\n",[312,23846,23847],{"class":314,"line":1003},[312,23848,23849],{"class":318},"    \u002F\u002F定义静态成员变量\n",[312,23851,23852,23854,23856],{"class":314,"line":1020},[312,23853,12823],{"class":1436},[312,23855,4187],{"class":1436},[312,23857,23191],{"class":324},[312,23859,23860],{"class":314,"line":1026},[312,23861,4205],{"emptyLinePlaceholder":1881},[312,23863,23864],{"class":314,"line":3418},[312,23865,4205],{"emptyLinePlaceholder":1881},[312,23867,23868],{"class":314,"line":3423},[312,23869,5800],{"class":324},[312,23871,23872,23874,23876],{"class":314,"line":3429},[312,23873,7168],{"class":1436},[312,23875,7392],{"class":332},[312,23877,3781],{"class":324},[312,23879,23880],{"class":314,"line":3434},[312,23881,3353],{"class":324},[312,23883,23884],{"class":314,"line":3448},[312,23885,17114],{"class":324},[312,23887,23888],{"class":314,"line":3453},[312,23889,23890],{"class":318},"    \u002F\u002F输出类成员变量这块内存\n",[312,23892,23893,23895,23897,23900,23902],{"class":314,"line":3459},[312,23894,3358],{"class":324},[312,23896,2985],{"class":1436},[312,23898,23899],{"class":324},"p.m_A",[312,23901,2985],{"class":1436},[312,23903,3007],{"class":324},[312,23905,23906],{"class":314,"line":3480},[312,23907,515],{"class":324},[312,23909,23910,23912,23914],{"class":314,"line":3485},[312,23911,1956],{"class":1436},[312,23913,3778],{"class":332},[312,23915,3781],{"class":324},[312,23917,23918],{"class":314,"line":3499},[312,23919,3353],{"class":324},[312,23921,23922,23924],{"class":314,"line":3504},[312,23923,7437],{"class":332},[312,23925,3781],{"class":324},[312,23927,23928],{"class":314,"line":3533},[312,23929,515],{"class":324},[24,23931,23932],{},"此时输出是报错的：无法解析外部命令",[24,23934,23935],{},"解决这一问题：必须用到类内声明，类外初始化操作",[303,23937,23939],{"className":1942,"code":23938,"language":1944,"meta":308,"style":308},"#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",[119,23940,23941,23947,23957,23963,23967,23971,23976,23984,23988,23993,24008,24016,24020,24024,24029,24034,24046,24051,24062,24067,24072,24085,24089,24097,24101,24107],{"__ignoreMap":308},[312,23942,23943,23945],{"class":314,"line":315},[312,23944,3755],{"class":1436},[312,23946,3758],{"class":339},[312,23948,23949,23951,23953,23955],{"class":314,"line":171},[312,23950,3763],{"class":1436},[312,23952,3766],{"class":1436},[312,23954,3769],{"class":332},[312,23956,498],{"class":324},[312,23958,23959,23961],{"class":314,"line":274},[312,23960,16495],{"class":1436},[312,23962,16972],{"class":332},[312,23964,23965],{"class":314,"line":298},[312,23966,3353],{"class":324},[312,23968,23969],{"class":314,"line":974},[312,23970,16517],{"class":1436},[312,23972,23973],{"class":314,"line":980},[312,23974,23975],{"class":318},"    \u002F\u002F类内声明\n",[312,23977,23978,23980,23982],{"class":314,"line":997},[312,23979,12823],{"class":1436},[312,23981,4187],{"class":1436},[312,23983,23191],{"class":324},[312,23985,23986],{"class":314,"line":1003},[312,23987,5800],{"class":324},[312,23989,23990],{"class":314,"line":1020},[312,23991,23992],{"class":318},"\u002F\u002F类外初始化\n",[312,23994,23995,23997,23999,24002,24004,24006],{"class":314,"line":1026},[312,23996,1956],{"class":1436},[312,23998,17370],{"class":332},[312,24000,24001],{"class":324},"::m_A",[312,24003,336],{"class":1436},[312,24005,2391],{"class":488},[312,24007,498],{"class":324},[312,24009,24010,24012,24014],{"class":314,"line":3418},[312,24011,7168],{"class":1436},[312,24013,7392],{"class":332},[312,24015,3781],{"class":324},[312,24017,24018],{"class":314,"line":3423},[312,24019,3353],{"class":324},[312,24021,24022],{"class":314,"line":3429},[312,24023,17114],{"class":324},[312,24025,24026],{"class":314,"line":3434},[312,24027,24028],{"class":318},"    \u002F\u002F访问变量的原内存空间\n",[312,24030,24031],{"class":314,"line":3448},[312,24032,24033],{"class":318},"    \u002F\u002F100\n",[312,24035,24036,24038,24040,24042,24044],{"class":314,"line":3453},[312,24037,3358],{"class":324},[312,24039,2985],{"class":1436},[312,24041,23899],{"class":324},[312,24043,2985],{"class":1436},[312,24045,3007],{"class":324},[312,24047,24048],{"class":314,"line":3459},[312,24049,24050],{"class":324},"    Person p2;\n",[312,24052,24053,24056,24058,24060],{"class":314,"line":3480},[312,24054,24055],{"class":324},"    p2.m_A",[312,24057,336],{"class":1436},[312,24059,3528],{"class":488},[312,24061,498],{"class":324},[312,24063,24064],{"class":314,"line":3485},[312,24065,24066],{"class":318},"    \u002F\u002F继续访问这片空间\n",[312,24068,24069],{"class":314,"line":3499},[312,24070,24071],{"class":318},"    \u002F\u002F200\n",[312,24073,24074,24076,24078,24081,24083],{"class":314,"line":3504},[312,24075,3358],{"class":324},[312,24077,2985],{"class":1436},[312,24079,24080],{"class":324},"p2.m_A",[312,24082,2985],{"class":1436},[312,24084,3007],{"class":324},[312,24086,24087],{"class":314,"line":3533},[312,24088,515],{"class":324},[312,24090,24091,24093,24095],{"class":314,"line":3538},[312,24092,1956],{"class":1436},[312,24094,3778],{"class":332},[312,24096,3781],{"class":324},[312,24098,24099],{"class":314,"line":3555},[312,24100,3353],{"class":324},[312,24102,24103,24105],{"class":314,"line":3560},[312,24104,7437],{"class":332},[312,24106,7440],{"class":324},[312,24108,24109],{"class":314,"line":3565},[312,24110,515],{"class":324},[24,24112,24113],{},[27,24114,24115],{},"静态变量的访问",[303,24117,24119],{"className":1942,"code":24118,"language":1944,"meta":308,"style":308},"#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",[119,24120,24121,24127,24137,24143,24147,24151,24155,24163,24167,24172,24180,24184,24188,24202,24217,24225,24229,24234,24239,24244,24249,24261,24266,24271,24285,24302,24306,24314,24318,24324],{"__ignoreMap":308},[312,24122,24123,24125],{"class":314,"line":315},[312,24124,3755],{"class":1436},[312,24126,3758],{"class":339},[312,24128,24129,24131,24133,24135],{"class":314,"line":171},[312,24130,3763],{"class":1436},[312,24132,3766],{"class":1436},[312,24134,3769],{"class":332},[312,24136,498],{"class":324},[312,24138,24139,24141],{"class":314,"line":274},[312,24140,16495],{"class":1436},[312,24142,16972],{"class":332},[312,24144,24145],{"class":314,"line":298},[312,24146,3353],{"class":324},[312,24148,24149],{"class":314,"line":974},[312,24150,16517],{"class":1436},[312,24152,24153],{"class":314,"line":980},[312,24154,23975],{"class":318},[312,24156,24157,24159,24161],{"class":314,"line":997},[312,24158,12823],{"class":1436},[312,24160,4187],{"class":1436},[312,24162,23191],{"class":324},[312,24164,24165],{"class":314,"line":1003},[312,24166,17023],{"class":1436},[312,24168,24169],{"class":314,"line":1020},[312,24170,24171],{"class":318},"    \u002F\u002F静态成员变量也是有访问权限的\n",[312,24173,24174,24176,24178],{"class":314,"line":1026},[312,24175,12823],{"class":1436},[312,24177,4187],{"class":1436},[312,24179,23198],{"class":324},[312,24181,24182],{"class":314,"line":3418},[312,24183,5800],{"class":324},[312,24185,24186],{"class":314,"line":3423},[312,24187,23992],{"class":318},[312,24189,24190,24192,24194,24196,24198,24200],{"class":314,"line":3429},[312,24191,1956],{"class":1436},[312,24193,17370],{"class":332},[312,24195,24001],{"class":324},[312,24197,336],{"class":1436},[312,24199,2391],{"class":488},[312,24201,498],{"class":324},[312,24203,24204,24206,24208,24211,24213,24215],{"class":314,"line":3434},[312,24205,1956],{"class":1436},[312,24207,17370],{"class":332},[312,24209,24210],{"class":324},"::m_B",[312,24212,336],{"class":1436},[312,24214,1546],{"class":488},[312,24216,498],{"class":324},[312,24218,24219,24221,24223],{"class":314,"line":3448},[312,24220,7168],{"class":1436},[312,24222,7461],{"class":332},[312,24224,3781],{"class":324},[312,24226,24227],{"class":314,"line":3453},[312,24228,3353],{"class":324},[312,24230,24231],{"class":314,"line":3459},[312,24232,24233],{"class":318},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[312,24235,24236],{"class":314,"line":3480},[312,24237,24238],{"class":318},"    \u002F\u002F静态成员变量有两种访问方式：\n",[312,24240,24241],{"class":314,"line":3485},[312,24242,24243],{"class":318},"    \u002F\u002F1.通过对象进行访问\n",[312,24245,24246],{"class":314,"line":3499},[312,24247,24248],{"class":324},"    Person p;  \n",[312,24250,24251,24253,24255,24257,24259],{"class":314,"line":3504},[312,24252,3358],{"class":324},[312,24254,2985],{"class":1436},[312,24256,23899],{"class":324},[312,24258,2985],{"class":1436},[312,24260,3007],{"class":324},[312,24262,24263],{"class":314,"line":3533},[312,24264,24265],{"class":318},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[312,24267,24268],{"class":314,"line":3538},[312,24269,24270],{"class":318},"    \u002F\u002F2.通过类名进行访问\n",[312,24272,24273,24275,24277,24279,24281,24283],{"class":314,"line":3555},[312,24274,3358],{"class":324},[312,24276,2985],{"class":1436},[312,24278,20845],{"class":332},[312,24280,24001],{"class":324},[312,24282,2985],{"class":1436},[312,24284,3007],{"class":324},[312,24286,24287,24289,24291,24293,24295,24297,24299],{"class":314,"line":3560},[312,24288,3358],{"class":324},[312,24290,2985],{"class":1436},[312,24292,20845],{"class":332},[312,24294,24210],{"class":324},[312,24296,2985],{"class":1436},[312,24298,3050],{"class":324},[312,24300,24301],{"class":318}," \u002F\u002F没有访问权限，报错\n",[312,24303,24304],{"class":314,"line":3565},[312,24305,515],{"class":324},[312,24307,24308,24310,24312],{"class":314,"line":3570},[312,24309,1956],{"class":1436},[312,24311,3778],{"class":332},[312,24313,3781],{"class":324},[312,24315,24316],{"class":314,"line":3584},[312,24317,3353],{"class":324},[312,24319,24320,24322],{"class":314,"line":3589},[312,24321,7506],{"class":332},[312,24323,7440],{"class":324},[312,24325,24326],{"class":314,"line":4382},[312,24327,515],{"class":324},[23796,24329,24331],{"id":24330},"_8282静态成员函数","8.2.8.2静态成员函数",[24,24333,24334],{},"1.静态成员函数定义与访问",[303,24336,24338],{"className":1942,"code":24337,"language":1944,"meta":308,"style":308},"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",[119,24339,24340,24346,24350,24354,24359,24370,24374,24388,24392,24396,24404,24408,24413,24418,24422,24430,24435,24445],{"__ignoreMap":308},[312,24341,24342,24344],{"class":314,"line":315},[312,24343,16495],{"class":1436},[312,24345,16972],{"class":332},[312,24347,24348],{"class":314,"line":171},[312,24349,3353],{"class":324},[312,24351,24352],{"class":314,"line":274},[312,24353,16517],{"class":1436},[312,24355,24356],{"class":314,"line":298},[312,24357,24358],{"class":318},"    \u002F\u002F在公共权限下定义静态成员函数\n",[312,24360,24361,24363,24366,24368],{"class":314,"line":974},[312,24362,12823],{"class":1436},[312,24364,24365],{"class":1436}," void",[312,24367,13188],{"class":332},[312,24369,3781],{"class":324},[312,24371,24372],{"class":314,"line":980},[312,24373,3835],{"class":324},[312,24375,24376,24379,24381,24384,24386],{"class":314,"line":997},[312,24377,24378],{"class":324},"        coout",[312,24380,2985],{"class":1436},[312,24382,24383],{"class":339},"\"静态成员函数的调用\"",[312,24385,2985],{"class":1436},[312,24387,3007],{"class":324},[312,24389,24390],{"class":314,"line":1003},[312,24391,3992],{"class":324},[312,24393,24394],{"class":314,"line":1020},[312,24395,5800],{"class":324},[312,24397,24398,24400,24402],{"class":314,"line":1026},[312,24399,7168],{"class":1436},[312,24401,7392],{"class":332},[312,24403,3781],{"class":324},[312,24405,24406],{"class":314,"line":3418},[312,24407,3353],{"class":324},[312,24409,24410],{"class":314,"line":3423},[312,24411,24412],{"class":318},"    \u002F\u002F静态成员函数的调用方式:\n",[312,24414,24415],{"class":314,"line":3429},[312,24416,24417],{"class":318},"    \u002F\u002F1.通过对象访问\n",[312,24419,24420],{"class":314,"line":3434},[312,24421,17114],{"class":324},[312,24423,24424,24426,24428],{"class":314,"line":3448},[312,24425,17666],{"class":324},[312,24427,13354],{"class":332},[312,24429,7440],{"class":324},[312,24431,24432],{"class":314,"line":3453},[312,24433,24434],{"class":318},"    \u002F\u002F2.通过类名访问\n",[312,24436,24437,24439,24441,24443],{"class":314,"line":3459},[312,24438,20318],{"class":332},[312,24440,19532],{"class":324},[312,24442,13354],{"class":332},[312,24444,7440],{"class":324},[312,24446,24447],{"class":314,"line":3480},[312,24448,515],{"class":324},[140,24450,24451],{"start":171},[143,24452,24453],{},"静态成员函数只能访问静态成员变量",[303,24455,24457],{"className":1942,"code":24456,"language":1944,"meta":308,"style":308},"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",[119,24458,24459,24465,24469,24473,24477,24487,24491,24505,24510,24522,24526,24537,24547,24551,24555,24559,24569,24573,24586,24590,24594,24598,24602,24616,24624,24628,24632,24636,24640,24648,24652,24662,24667,24671,24679,24683,24689],{"__ignoreMap":308},[312,24460,24461,24463],{"class":314,"line":315},[312,24462,16495],{"class":1436},[312,24464,16972],{"class":332},[312,24466,24467],{"class":314,"line":171},[312,24468,3353],{"class":324},[312,24470,24471],{"class":314,"line":274},[312,24472,16517],{"class":1436},[312,24474,24475],{"class":314,"line":298},[312,24476,24358],{"class":318},[312,24478,24479,24481,24483,24485],{"class":314,"line":974},[312,24480,12823],{"class":1436},[312,24482,24365],{"class":1436},[312,24484,13188],{"class":332},[312,24486,3781],{"class":324},[312,24488,24489],{"class":314,"line":980},[312,24490,3835],{"class":324},[312,24492,24493,24496,24498,24500,24502],{"class":314,"line":997},[312,24494,24495],{"class":324},"        m_A",[312,24497,336],{"class":1436},[312,24499,2256],{"class":488},[312,24501,2006],{"class":324},[312,24503,24504],{"class":318}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[312,24506,24507],{"class":314,"line":1003},[312,24508,24509],{"class":318},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[312,24511,24512,24514,24516,24518,24520],{"class":314,"line":1020},[312,24513,24378],{"class":324},[312,24515,2985],{"class":1436},[312,24517,24383],{"class":339},[312,24519,2985],{"class":1436},[312,24521,3007],{"class":324},[312,24523,24524],{"class":314,"line":1026},[312,24525,3992],{"class":324},[312,24527,24528,24530,24532,24534],{"class":314,"line":3418},[312,24529,12823],{"class":1436},[312,24531,4187],{"class":1436},[312,24533,17249],{"class":324},[312,24535,24536],{"class":318}," \u002F\u002F静态成员变量\n",[312,24538,24539,24541,24544],{"class":314,"line":3423},[312,24540,3790],{"class":1436},[312,24542,24543],{"class":324}," m_B;",[312,24545,24546],{"class":318}," \u002F\u002F非静态成员变量\n",[312,24548,24549],{"class":314,"line":3429},[312,24550,4205],{"emptyLinePlaceholder":1881},[312,24552,24553],{"class":314,"line":3434},[312,24554,17023],{"class":1436},[312,24556,24557],{"class":314,"line":3448},[312,24558,24171],{"class":318},[312,24560,24561,24563,24565,24567],{"class":314,"line":3453},[312,24562,12823],{"class":1436},[312,24564,24365],{"class":1436},[312,24566,15420],{"class":332},[312,24568,3781],{"class":324},[312,24570,24571],{"class":314,"line":3459},[312,24572,3835],{"class":324},[312,24574,24575,24577,24579,24582,24584],{"class":314,"line":3480},[312,24576,5256],{"class":324},[312,24578,2985],{"class":1436},[312,24580,24581],{"class":339},"\"这是私有权限下的静态函数调用\"",[312,24583,2985],{"class":1436},[312,24585,3007],{"class":324},[312,24587,24588],{"class":314,"line":3485},[312,24589,3992],{"class":324},[312,24591,24592],{"class":314,"line":3499},[312,24593,4205],{"emptyLinePlaceholder":1881},[312,24595,24596],{"class":314,"line":3504},[312,24597,4205],{"emptyLinePlaceholder":1881},[312,24599,24600],{"class":314,"line":3533},[312,24601,5800],{"class":324},[312,24603,24604,24606,24608,24610,24612,24614],{"class":314,"line":3538},[312,24605,1956],{"class":1436},[312,24607,17370],{"class":332},[312,24609,24001],{"class":324},[312,24611,336],{"class":1436},[312,24613,858],{"class":488},[312,24615,498],{"class":324},[312,24617,24618,24620,24622],{"class":314,"line":3555},[312,24619,7168],{"class":1436},[312,24621,7392],{"class":332},[312,24623,3781],{"class":324},[312,24625,24626],{"class":314,"line":3560},[312,24627,3353],{"class":324},[312,24629,24630],{"class":314,"line":3565},[312,24631,24412],{"class":318},[312,24633,24634],{"class":314,"line":3570},[312,24635,24417],{"class":318},[312,24637,24638],{"class":314,"line":3584},[312,24639,17114],{"class":324},[312,24641,24642,24644,24646],{"class":314,"line":3589},[312,24643,17666],{"class":324},[312,24645,13354],{"class":332},[312,24647,7440],{"class":324},[312,24649,24650],{"class":314,"line":4382},[312,24651,24434],{"class":318},[312,24653,24654,24656,24658,24660],{"class":314,"line":4396},[312,24655,20318],{"class":332},[312,24657,19532],{"class":324},[312,24659,13354],{"class":332},[312,24661,7440],{"class":324},[312,24663,24664],{"class":314,"line":4404},[312,24665,24666],{"class":318},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[312,24668,24669],{"class":314,"line":4409},[312,24670,515],{"class":324},[312,24672,24673,24675,24677],{"class":314,"line":4415},[312,24674,1956],{"class":1436},[312,24676,3778],{"class":332},[312,24678,3781],{"class":324},[312,24680,24681],{"class":314,"line":4421},[312,24682,3353],{"class":324},[312,24684,24685,24687],{"class":314,"line":4426},[312,24686,7437],{"class":332},[312,24688,7440],{"class":324},[312,24690,24691],{"class":314,"line":9751},[312,24692,515],{"class":324},[69,24694,24696],{"id":24695},"_83c对象模型和this指针","8.3C++对象模型和this指针",[23796,24698,24700],{"id":24699},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[24,24702,24703],{},"在c++中，类内的成员变量和成员函数分开存储",[24,24705,24706],{},"只有非静态成员变量才属于类的对象上",[1505,24708,24710],{"id":24709},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[303,24712,24714],{"className":1942,"code":24713,"language":1944,"meta":308,"style":308},"#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",[119,24715,24716,24723,24733,24739,24743,24747,24751,24759,24763,24767,24790,24794,24802,24806,24812],{"__ignoreMap":308},[312,24717,24718,24720],{"class":314,"line":315},[312,24719,3755],{"class":1436},[312,24721,24722],{"class":339},"\u003Ciostraem>\n",[312,24724,24725,24727,24729,24731],{"class":314,"line":171},[312,24726,3763],{"class":1436},[312,24728,3766],{"class":1436},[312,24730,3769],{"class":332},[312,24732,498],{"class":324},[312,24734,24735,24737],{"class":314,"line":274},[312,24736,16495],{"class":1436},[312,24738,16972],{"class":332},[312,24740,24741],{"class":314,"line":298},[312,24742,3353],{"class":324},[312,24744,24745],{"class":314,"line":974},[312,24746,4205],{"emptyLinePlaceholder":1881},[312,24748,24749],{"class":314,"line":980},[312,24750,5800],{"class":324},[312,24752,24753,24755,24757],{"class":314,"line":997},[312,24754,7168],{"class":1436},[312,24756,7392],{"class":332},[312,24758,3781],{"class":324},[312,24760,24761],{"class":314,"line":1003},[312,24762,3353],{"class":324},[312,24764,24765],{"class":314,"line":1020},[312,24766,17114],{"class":324},[312,24768,24769,24771,24773,24776,24778,24781,24783,24785,24787],{"class":314,"line":1026},[312,24770,3358],{"class":324},[312,24772,2985],{"class":1436},[312,24774,24775],{"class":339},"\"size of p=\"",[312,24777,2985],{"class":1436},[312,24779,24780],{"class":332},"sizeoif",[312,24782,8343],{"class":324},[312,24784,2985],{"class":1436},[312,24786,3050],{"class":324},[312,24788,24789],{"class":318}," \u002F\u002F查看这个空类的占用的内存空间\n",[312,24791,24792],{"class":314,"line":3418},[312,24793,515],{"class":324},[312,24795,24796,24798,24800],{"class":314,"line":3423},[312,24797,1956],{"class":1436},[312,24799,3778],{"class":332},[312,24801,3781],{"class":324},[312,24803,24804],{"class":314,"line":3429},[312,24805,3353],{"class":324},[312,24807,24808,24810],{"class":314,"line":3434},[312,24809,7437],{"class":332},[312,24811,7440],{"class":324},[312,24813,24814],{"class":314,"line":3448},[312,24815,515],{"class":324},[24,24817,24818],{},"输出结果为：size of p=1",[24,24820,24821],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[24,24823,24824],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[1505,24826,24828],{"id":24827},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[303,24830,24832],{"className":1942,"code":24831,"language":1944,"meta":308,"style":308},"#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",[119,24833,24834,24840,24850,24858,24862,24871,24875,24883,24887,24891,24910,24914,24918,24926,24930,24936],{"__ignoreMap":308},[312,24835,24836,24838],{"class":314,"line":315},[312,24837,3755],{"class":1436},[312,24839,3758],{"class":339},[312,24841,24842,24844,24846,24848],{"class":314,"line":171},[312,24843,3763],{"class":1436},[312,24845,3766],{"class":1436},[312,24847,3769],{"class":332},[312,24849,498],{"class":324},[312,24851,24852,24854,24856],{"class":314,"line":274},[312,24853,16495],{"class":1436},[312,24855,17370],{"class":332},[312,24857,4479],{"class":324},[312,24859,24860],{"class":314,"line":298},[312,24861,3353],{"class":324},[312,24863,24864,24866,24868],{"class":314,"line":974},[312,24865,3790],{"class":1436},[312,24867,17249],{"class":324},[312,24869,24870],{"class":318},"\u002F\u002F非静态成员变量\n",[312,24872,24873],{"class":314,"line":980},[312,24874,5800],{"class":324},[312,24876,24877,24879,24881],{"class":314,"line":997},[312,24878,7168],{"class":1436},[312,24880,7392],{"class":332},[312,24882,3781],{"class":324},[312,24884,24885],{"class":314,"line":1003},[312,24886,3353],{"class":324},[312,24888,24889],{"class":314,"line":1020},[312,24890,17114],{"class":324},[312,24892,24893,24895,24897,24899,24901,24903,24905,24907],{"class":314,"line":1026},[312,24894,3358],{"class":324},[312,24896,2985],{"class":1436},[312,24898,24775],{"class":339},[312,24900,3180],{"class":1436},[312,24902,8343],{"class":324},[312,24904,2985],{"class":1436},[312,24906,3050],{"class":324},[312,24908,24909],{"class":318}," \u002F\u002F查看不是空对象时占用多少内存\n",[312,24911,24912],{"class":314,"line":3418},[312,24913,4205],{"emptyLinePlaceholder":1881},[312,24915,24916],{"class":314,"line":3423},[312,24917,515],{"class":324},[312,24919,24920,24922,24924],{"class":314,"line":3429},[312,24921,1956],{"class":1436},[312,24923,3778],{"class":332},[312,24925,3781],{"class":324},[312,24927,24928],{"class":314,"line":3434},[312,24929,3353],{"class":324},[312,24931,24932,24934],{"class":314,"line":3448},[312,24933,7437],{"class":332},[312,24935,7440],{"class":324},[312,24937,24938],{"class":314,"line":3453},[312,24939,515],{"class":324},[24,24941,24942],{},"输出结果：size of p=4",[24,24944,24945],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[140,24947,24948],{},[143,24949,24950],{},"如果加上非静态成员变量，Person类修改如下",[303,24952,24954],{"className":1942,"code":24953,"language":1944,"meta":308,"style":308},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[119,24955,24956,24962,24966,24972,24980,24984,24989],{"__ignoreMap":308},[312,24957,24958,24960],{"class":314,"line":315},[312,24959,16495],{"class":1436},[312,24961,16972],{"class":332},[312,24963,24964],{"class":314,"line":171},[312,24965,3353],{"class":324},[312,24967,24968,24970],{"class":314,"line":274},[312,24969,3790],{"class":1436},[312,24971,23191],{"class":324},[312,24973,24974,24976,24978],{"class":314,"line":298},[312,24975,12823],{"class":1436},[312,24977,4187],{"class":1436},[312,24979,23198],{"class":324},[312,24981,24982],{"class":314,"line":974},[312,24983,5800],{"class":324},[312,24985,24986],{"class":314,"line":980},[312,24987,24988],{"class":318},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[312,24990,24991,24993,24995,24997,24999,25001],{"class":314,"line":997},[312,24992,1956],{"class":1436},[312,24994,17370],{"class":332},[312,24996,24210],{"class":324},[312,24998,336],{"class":1436},[312,25000,858],{"class":488},[312,25002,498],{"class":324},[24,25004,25005],{},"输出结果：4",[24,25007,25008],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[140,25010,25011],{"start":171},[143,25012,25013],{},"加上非静态成员函数",[303,25015,25017],{"className":1942,"code":25016,"language":1944,"meta":308,"style":308},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[119,25018,25019,25026,25030,25036,25044,25048,25052,25056],{"__ignoreMap":308},[312,25020,25021,25023],{"class":314,"line":315},[312,25022,16495],{"class":1436},[312,25024,25025],{"class":332},"  Person\n",[312,25027,25028],{"class":314,"line":171},[312,25029,3353],{"class":324},[312,25031,25032,25034],{"class":314,"line":274},[312,25033,3790],{"class":1436},[312,25035,23191],{"class":324},[312,25037,25038,25040,25042],{"class":314,"line":298},[312,25039,16710],{"class":1436},[312,25041,13188],{"class":332},[312,25043,3781],{"class":324},[312,25045,25046],{"class":314,"line":974},[312,25047,3835],{"class":324},[312,25049,25050],{"class":314,"line":980},[312,25051,4205],{"emptyLinePlaceholder":1881},[312,25053,25054],{"class":314,"line":997},[312,25055,3992],{"class":324},[312,25057,25058],{"class":314,"line":1003},[312,25059,5800],{"class":324},[24,25061,25062],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[140,25064,25065],{"start":274},[143,25066,25067],{},"加上静态成员函数",[303,25069,25071],{"className":1942,"code":25070,"language":1944,"meta":308,"style":308},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[119,25072,25073,25079,25083,25089,25097,25101,25105,25109,25120,25124,25128,25132],{"__ignoreMap":308},[312,25074,25075,25077],{"class":314,"line":315},[312,25076,16495],{"class":1436},[312,25078,25025],{"class":332},[312,25080,25081],{"class":314,"line":171},[312,25082,3353],{"class":324},[312,25084,25085,25087],{"class":314,"line":274},[312,25086,3790],{"class":1436},[312,25088,23191],{"class":324},[312,25090,25091,25093,25095],{"class":314,"line":298},[312,25092,16710],{"class":1436},[312,25094,13188],{"class":332},[312,25096,3781],{"class":324},[312,25098,25099],{"class":314,"line":974},[312,25100,3835],{"class":324},[312,25102,25103],{"class":314,"line":980},[312,25104,4205],{"emptyLinePlaceholder":1881},[312,25106,25107],{"class":314,"line":997},[312,25108,3992],{"class":324},[312,25110,25111,25113,25115,25118],{"class":314,"line":1003},[312,25112,12823],{"class":1436},[312,25114,24365],{"class":1436},[312,25116,25117],{"class":332}," func1",[312,25119,3781],{"class":324},[312,25121,25122],{"class":314,"line":1020},[312,25123,3835],{"class":324},[312,25125,25126],{"class":314,"line":1026},[312,25127,4205],{"emptyLinePlaceholder":1881},[312,25129,25130],{"class":314,"line":3418},[312,25131,3992],{"class":324},[312,25133,25134],{"class":314,"line":3423},[312,25135,5800],{"class":324},[24,25137,25005],{},[24,25139,25140],{},"解释：静态成员函数也不属于类上",[1856,25142,9477],{},{"title":308,"searchDepth":171,"depth":171,"links":25144},[25145,25151],{"id":16446,"depth":171,"text":16447,"children":25146},[25147,25148,25149,25150],{"id":16450,"depth":274,"text":16451},{"id":17175,"depth":274,"text":17176},{"id":17347,"depth":274,"text":17348},{"id":17805,"depth":274,"text":17806},{"id":20177,"depth":171,"text":20178,"children":25152},[25153,25154,25155,25156,25157,25158,25159,25160,25161],{"id":20189,"depth":274,"text":20190},{"id":20481,"depth":274,"text":20482},{"id":20972,"depth":274,"text":20973},{"id":22069,"depth":274,"text":22070},{"id":22492,"depth":274,"text":22493},{"id":22971,"depth":274,"text":22972},{"id":23345,"depth":274,"text":23346},{"id":23758,"depth":274,"text":23759},{"id":24695,"depth":274,"text":24696},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16411,"description":25162},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":25169,"title":1944,"body":25170,"description":1878,"extension":1879,"meta":25174,"navigation":1881,"path":25176,"seo":25177,"stem":25178,"__hash__":25179},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":25171,"toc":25172},[],{"title":308,"searchDepth":171,"depth":171,"links":25173},[],{"category":25175},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":1944,"description":1878},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":25181,"title":25182,"body":25183,"description":308,"extension":1879,"meta":25772,"navigation":1881,"path":25773,"seo":25774,"stem":25775,"__hash__":25776},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25184,"toc":25754},[25185,25188,25192,25195,25198,25201,25219,25224,25227,25230,25233,25236,25241,25244,25249,25252,25255,25259,25262,25265,25271,25274,25292,25296,25300,25303,25308,25311,25315,25318,25331,25334,25338,25341,25344,25347,25372,25375,25384,25395,25410,25442,25446,25453,25461,25465,25468,25471,25476,25480,25483,25486,25491,25494,25498,25501,25504,25509,25512,25516,25521,25525,25591,25595,25598,25601,25604,25607,25610,25616,25637,25640,25654,25662,25666,25669,25672,25677,25680,25685,25690,25693,25696,25701,25706,25709,25714,25719,25722,25727,25732,25735,25738,25743,25746,25751],[10,25186,25182],{"id":25187},"_1强化学习基本认识",[14,25189,25191],{"id":25190},"_11什么是强化学习","1.1.什么是强化学习",[24,25193,25194],{},"强化学习有两部分组成：智能体和环境；",[24,25196,25197],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[24,25199,25200],{},"强化学习与监督学习的区别:",[140,25202,25203,25206,25209,25212],{},[143,25204,25205],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[143,25207,25208],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[143,25210,25211],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[143,25213,25214,25215,25218],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[27,25216,25217],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[24,25220,25221],{},[19,25222],{"alt":308,"src":25223},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[24,25225,25226],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[24,25228,25229],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[24,25231,25232],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[24,25234,25235],{},"获取奖励",[24,25237,25238],{},[19,25239],{"alt":308,"src":25240},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[24,25242,25243],{},"强化学习可以分成标准强化学习和深度强化学习",[24,25245,25246],{},[19,25247],{"alt":308,"src":25248},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[24,25250,25251],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[24,25253,25254],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25256,25258],{"id":25257},"_12强化学习应用场景","1.2.强化学习应用场景",[24,25260,25261],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[24,25263,25264],{},"具身智能中的应用",[24,25266,25267,25270],{},[27,25268,25269],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[24,25272,25273],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[24,25275,25276,25277,25280,25281,25284,25285,25288,25289],{},"机器人是",[27,25278,25279],{},"躯体","，深度学习是",[27,25282,25283],{},"神经元****网络","，VLA是",[27,25286,25287],{},"通用的行为逻辑","，而强化学习是",[27,25290,25291],{},"教练",[14,25293,25295],{"id":25294},"_13序列决策","1.3.序列决策",[69,25297,25299],{"id":25298},"_131智能体与环境","1.3.1.智能体与环境",[24,25301,25302],{},"强化学习研究的问题是智能体agent与环境交互的问题",[24,25304,25305],{},[19,25306],{"alt":308,"src":25307},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[24,25309,25310],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[69,25312,25314],{"id":25313},"_132奖励","1.3.2.奖励",[24,25316,25317],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[24,25319,25320,25321,25330],{},"取某个策略的表现如何。强化学习的目的就是",[27,25322,25323,25324,25329],{},"最大化",[27,25325,25326],{},[27,25327,25328],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[24,25332,25333],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[69,25335,25337],{"id":25336},"_133序列决策","1.3.3.序列决策",[24,25339,25340],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[24,25342,25343],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[24,25345,25346],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[24,25348,25349,25353,25354,25356,25357,25359,25360,25362,25363,15596,25366,15596,25369],{},[25350,25351,25352],"em",{},"Ht"," = ",[25350,25355,2541],{},"1*, a",[25350,25358,1433],{},", r",[25350,25361,1433],{},", . . . ,* ",[25350,25364,25365],{},"ot",[25350,25367,25368],{},", at ,",[25350,25370,25371],{},"rt",[24,25373,25374],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[24,25376,25377,25353,25380,3464,25382,2374],{},[25350,25378,25379],{},"st",[25350,25381,2003],{},[25350,25383,25352],{},[24,25385,25386,25387,25390,25391,25394],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[27,25388,25389],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[27,25392,25393],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[24,25396,25397,25398,25401,25402,25405,25406,25409],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[27,25399,25400],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[27,25403,25404],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25350,25407,25408],{},"S, A, T, R, Ω, O, γ",")。",[24,25411,25412,25413,25415,25416,25418,25419,1576,25421,25424,25425,25427,25428,1576,25431,25434,25435,25437,25438,25441],{},"其中 ",[25350,25414,2634],{}," 表示状态空间，为隐变量，",[25350,25417,2178],{}," 为动作空间，",[25350,25420,2658],{},[25350,25422,25423],{},"s ′ |s, a",") 为状态转移概率，",[25350,25426,2609],{}," 为奖励函数，",[25350,25429,25430],{},"Ω",[25350,25432,25433],{},"o|s, a",") 为观测概率，",[25350,25436,2535],{}," 为观测空间，",[25350,25439,25440],{},"γ"," 为折扣因子。",[14,25443,25445],{"id":25444},"_14动作空间","1.4.动作空间",[24,25447,25448,25449,25452],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[27,25450,25451],{},"动作空间"," ，动作空间分为:",[140,25454,25455,25458],{},[143,25456,25457],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[143,25459,25460],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,25462,25464],{"id":25463},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[24,25466,25467],{},"由策略、价值函数、模型三部分组成",[24,25469,25470],{},"这三者组成马尔可夫决策过程",[24,25472,25473],{},[19,25474],{"alt":308,"src":25475},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[69,25477,25479],{"id":25478},"_151策略","1.5.1.策略",[24,25481,25482],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[24,25484,25485],{},"策略可分为两种：",[24,25487,25488],{},[19,25489],{"alt":308,"src":25490},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[24,25492,25493],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[69,25495,25497],{"id":25496},"_152价值函数","1.5.2.价值函数",[24,25499,25500],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[24,25502,25503],{},"价值函数中有一个折扣因子，类似于存款利息",[24,25505,25506],{},[19,25507],{"alt":308,"src":25508},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[24,25510,25511],{},"进入某个状态采取的最优动作可以通过Q函数得到",[69,25513,25515],{"id":25514},"_153模型","1.5.3.模型",[24,25517,25518],{},[19,25519],{"alt":308,"src":25520},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,25522,25524],{"id":25523},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[2086,25526,25527,25537],{},[2089,25528,25529],{},[2092,25530,25531,25534],{},[2095,25532,25533],{"align":1374},"类型",[2095,25535,25536],{"align":1374},"特点",[2132,25538,25539,25549,25559,25569,25581],{},[2092,25540,25541,25546],{},[2137,25542,25543],{"align":1374},[27,25544,25545],{},"基于价值的智能体",[2137,25547,25548],{"align":1374},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[2092,25550,25551,25556],{},[2137,25552,25553],{"align":1374},[27,25554,25555],{},"基于策略的智能体",[2137,25557,25558],{"align":1374},"直接学习策略，没有学习价值函数",[2092,25560,25561,25566],{},[2137,25562,25563],{"align":1374},[27,25564,25565],{},"演员-评论员智能体",[2137,25567,25568],{"align":1374},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[2092,25570,25571,25576],{},[2137,25572,25573],{"align":1374},[27,25574,25575],{},"有模型强化学习智能体",[2137,25577,25578],{"align":1374},[19,25579],{"alt":308,"src":25580},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[2092,25582,25583,25588],{},[2137,25584,25585],{"align":1374},[27,25586,25587],{},"免模型强化学习智能体",[2137,25589,25590],{"align":1374},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,25592,25594],{"id":25593},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[24,25596,25597],{},"学习和规划是序列决策的两个基本问题",[24,25599,25600],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[24,25602,25603],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[24,25605,25606],{},"强化学习用到的库：Gym",[24,25608,25609],{},"Gym可以检验强化学习算法的优劣",[24,25611,25612,25615],{},[27,25613,25614],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[303,25617,25621],{"className":25618,"code":25619,"language":25620,"meta":308,"style":308},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[119,25622,25623],{"__ignoreMap":308},[312,25624,25625,25628,25631,25634],{"class":314,"line":315},[312,25626,25627],{"class":332},"pip",[312,25629,25630],{"class":339}," install",[312,25632,25633],{"class":339}," gym==",[312,25635,25636],{"class":488},"0.25.2\n",[24,25638,25639],{},"显示图形界面需要",[303,25641,25643],{"className":25618,"code":25642,"language":25620,"meta":308,"style":308},"pip install pygame\n",[119,25644,25645],{"__ignoreMap":308},[312,25646,25647,25649,25651],{"class":314,"line":315},[312,25648,25627],{"class":332},[312,25650,25630],{"class":339},[312,25652,25653],{"class":339}," pygame\n",[24,25655,25656,25657],{},"有关Gym库的相关文档介绍：",[164,25658,25661],{"href":25659,"rel":25660},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[168],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25663,25665],{"id":25664},"_18一些补充基础概念","1.8.一些补充基础概念",[24,25667,25668],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[24,25670,25671],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[24,25673,25674],{},[19,25675],{"alt":308,"src":25676},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[24,25678,25679],{},"折扣率需要自己来设定",[24,25681,25682],{},[19,25683],{"alt":308,"src":25684},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[140,25686,25687],{},[143,25688,25689],{},"状态转移函数：",[24,25691,25692],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[24,25694,25695],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[24,25697,25698],{},[19,25699],{"alt":308,"src":25700},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[140,25702,25703],{"start":171},[143,25704,25705],{},"动作价值函数：",[24,25707,25708],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[24,25710,25711],{},[19,25712],{"alt":308,"src":25713},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[140,25715,25716],{"start":274},[143,25717,25718],{},"最优动作价值函数：",[24,25720,25721],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[24,25723,25724],{},[19,25725],{"alt":308,"src":25726},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[140,25728,25729],{"start":298},[143,25730,25731],{},"状态价值函数:",[24,25733,25734],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[24,25736,25737],{},"它衡量的是“一个具体动作”的长期价值",[24,25739,25740],{},[19,25741],{"alt":308,"src":25742},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[24,25744,25745],{},"几个价值函数之间的比较：",[24,25747,25748],{},[19,25749],{"alt":308,"src":25750},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1856,25752,25753],{},"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":308,"searchDepth":171,"depth":171,"links":25755},[25756,25757,25758,25763,25764,25769,25770,25771],{"id":25190,"depth":171,"text":25191},{"id":25257,"depth":171,"text":25258},{"id":25294,"depth":171,"text":25295,"children":25759},[25760,25761,25762],{"id":25298,"depth":274,"text":25299},{"id":25313,"depth":274,"text":25314},{"id":25336,"depth":274,"text":25337},{"id":25444,"depth":171,"text":25445},{"id":25463,"depth":171,"text":25464,"children":25765},[25766,25767,25768],{"id":25478,"depth":274,"text":25479},{"id":25496,"depth":274,"text":25497},{"id":25514,"depth":274,"text":25515},{"id":25523,"depth":171,"text":25524},{"id":25593,"depth":171,"text":25594},{"id":25664,"depth":171,"text":25665},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25182,"description":308},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25778,"title":25779,"body":25780,"description":25787,"extension":1879,"meta":25798,"navigation":1881,"path":25799,"seo":25800,"stem":25801,"__hash__":25802},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25781,"toc":25796},[25782,25785,25788,25793],[10,25783,25779],{"id":25784},"_2马尔可夫决策过程",[24,25786,25787],{},"这是强化学习的基本框架",[24,25789,25790],{},[19,25791],{"alt":308,"src":25792},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[24,25794,25795],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":308,"searchDepth":171,"depth":171,"links":25797},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25779,"description":25787},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25804,"title":25805,"body":25806,"description":308,"extension":1879,"meta":25922,"navigation":1881,"path":25923,"seo":25924,"stem":25925,"__hash__":25926},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25807,"toc":25917},[25808,25811,25815,25818,25823,25828,25831,25836,25839,25844,25847,25851,25856,25859,25864,25869,25874,25877,25881,25886,25889,25894,25899,25904,25909,25912],[10,25809,25805],{"id":25810},"_3动作价值函数",[14,25812,25814],{"id":25813},"_31dqn","3.1.DQN",[24,25816,25817],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[24,25819,25820],{},[19,25821],{"alt":308,"src":25822},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[24,25824,25825],{},[19,25826],{"alt":308,"src":25827},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[24,25829,25830],{},"DQN算法的描述：",[24,25832,25833],{},[19,25834],{"alt":308,"src":25835},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[24,25837,25838],{},"这里的Dense指的是全连接层",[24,25840,25841],{},[19,25842],{"alt":308,"src":25843},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[24,25845,25846],{},"当前观测的状态为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,25848,25850],{"id":25849},"_32dqn的举例","3.2.DQN的举例",[24,25852,25853],{},[19,25854],{"alt":308,"src":25855},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[24,25857,25858],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[24,25860,25861],{},[19,25862],{"alt":308,"src":25863},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[24,25865,25866],{},[19,25867],{"alt":308,"src":25868},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[24,25870,25871],{},[19,25872],{"alt":308,"src":25873},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[24,25875,25876],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,25878,25880],{"id":25879},"_33td算法","3.3.TD算法",[24,25882,25883],{},[19,25884],{"alt":308,"src":25885},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[24,25887,25888],{},"强化学习TD算法公式的粗略解释：",[24,25890,25891],{},[19,25892],{"alt":308,"src":25893},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[24,25895,25896],{},[19,25897],{"alt":308,"src":25898},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[24,25900,25901],{},[19,25902],{"alt":308,"src":25903},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[24,25905,25906],{},[19,25907],{"alt":308,"src":25908},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[24,25910,25911],{},"TD算法总结：",[24,25913,25914],{},[19,25915],{"alt":308,"src":25916},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":308,"searchDepth":171,"depth":171,"links":25918},[25919,25920,25921],{"id":25813,"depth":171,"text":25814},{"id":25849,"depth":171,"text":25850},{"id":25879,"depth":171,"text":25880},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25805,"description":308},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25928,"title":25929,"body":25930,"description":308,"extension":1879,"meta":26163,"navigation":1881,"path":26164,"seo":26165,"stem":26166,"__hash__":26167},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25931,"toc":26159},[25932,25935,25939,25942,25945,25950,25955,25958,25963,25968,25971,25976,25979,25984,25987,25992,25995,26000,26003,26008,26013,26016,26021,26024,26027,26032,26035,26040,26045,26049,26052,26055,26060,26065,26068,26073,26078,26081,26086,26089,26092,26097,26100,26105,26108,26113,26118,26121,26126,26131,26134,26139,26142,26147,26150],[10,25933,25929],{"id":25934},"_4策略学习",[14,25936,25938],{"id":25937},"_41概念描述","4.1.概念描述",[24,25940,25941],{},"用神经网络（策略网络）近似策略函数",[24,25943,25944],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[24,25946,25947],{},[19,25948],{"alt":308,"src":25949},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[24,25951,25952],{},[19,25953],{"alt":308,"src":25954},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[24,25956,25957],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[24,25959,25960],{},[19,25961],{"alt":308,"src":25962},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[24,25964,25965],{},[19,25966],{"alt":308,"src":25967},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[24,25969,25970],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[24,25972,25973],{},[19,25974],{"alt":308,"src":25975},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[24,25977,25978],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[24,25980,25981],{},[19,25982],{"alt":308,"src":25983},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[24,25985,25986],{},"改进theta要用到策略梯度算法",[24,25988,25989],{},[19,25990],{"alt":308,"src":25991},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[24,25993,25994],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[24,25996,25997],{},[19,25998],{"alt":308,"src":25999},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[24,26001,26002],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[24,26004,26005],{},[19,26006],{"alt":308,"src":26007},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[24,26009,26010],{},[19,26011],{"alt":308,"src":26012},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[24,26014,26015],{},"梯度公式总结：",[24,26017,26018],{},[19,26019],{"alt":308,"src":26020},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[24,26022,26023],{},"两个公式的分别应用场景：",[24,26025,26026],{},"对于离散的动作：",[24,26028,26029],{},[19,26030],{"alt":308,"src":26031},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[24,26033,26034],{},"对于连续的动作：",[24,26036,26037],{},[19,26038],{"alt":308,"src":26039},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[24,26041,26042],{},[19,26043],{"alt":308,"src":26044},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,26046,26048],{"id":26047},"_42概率梯度算法总结","4.2.概率梯度算法总结",[24,26050,26051],{},"使用蒙特卡洛来近似计算策略梯度",[24,26053,26054],{},"蒙特卡洛法的解释如下：",[24,26056,26057],{},[19,26058],{"alt":308,"src":26059},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[24,26061,26062],{},[19,26063],{"alt":308,"src":26064},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[24,26066,26067],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[140,26069,26070],{},[143,26071,26072],{},"方法一：reinforce算法",[24,26074,26075],{},[19,26076],{"alt":308,"src":26077},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[24,26079,26080],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[140,26082,26083],{"start":171},[143,26084,26085],{},"方法二：actor-critic算法",[24,26087,26088],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[24,26090,26091],{},"两个网络的构建：",[24,26093,26094],{},[19,26095],{"alt":308,"src":26096},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[24,26098,26099],{},"actor网路：",[24,26101,26102],{},[19,26103],{"alt":308,"src":26104},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[24,26106,26107],{},"critic网络",[24,26109,26110],{},[19,26111],{"alt":308,"src":26112},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[140,26114,26115],{"start":274},[143,26116,26117],{},"网络的训练",[24,26119,26120],{},"网络描述",[24,26122,26123],{},[19,26124],{"alt":308,"src":26125},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[24,26127,26128],{},[19,26129],{"alt":308,"src":26130},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[24,26132,26133],{},"TD算法更新梯度：",[24,26135,26136],{},[19,26137],{"alt":308,"src":26138},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[24,26140,26141],{},"策略网络更新梯度：",[24,26143,26144],{},[19,26145],{"alt":308,"src":26146},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[24,26148,26149],{},"训练整个流程的具体描述：",[24,26151,26152,26155,26156],{},[19,26153],{"alt":308,"src":26154},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[19,26157],{"alt":308,"src":26158},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":308,"searchDepth":171,"depth":171,"links":26160},[26161,26162],{"id":25937,"depth":171,"text":25938},{"id":26047,"depth":171,"text":26048},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25929,"description":308},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":26169,"title":26170,"body":26171,"description":26178,"extension":1879,"meta":26228,"navigation":1881,"path":26229,"seo":26230,"stem":26231,"__hash__":26232},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":26172,"toc":26224},[26173,26176,26179,26183,26186,26191,26195,26198,26203,26206,26211,26216,26219],[10,26174,26170],{"id":26175},"_5alphago算法",[24,26177,26178],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,26180,26182],{"id":26181},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[24,26184,26185],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[24,26187,26188],{},[19,26189],{"alt":308,"src":26190},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,26192,26194],{"id":26193},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[24,26196,26197],{},"采用强化学习的方式训练策略网络",[24,26199,26200],{},[19,26201],{"alt":308,"src":26202},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[24,26204,26205],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[24,26207,26208],{},[19,26209],{"alt":308,"src":26210},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[24,26212,26213],{},[19,26214],{"alt":308,"src":26215},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[24,26217,26218],{},"强化学习训练策略网络的总结：",[24,26220,26221],{},[19,26222],{"alt":308,"src":26223},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":308,"searchDepth":171,"depth":171,"links":26225},[26226,26227],{"id":26181,"depth":171,"text":26182},{"id":26193,"depth":171,"text":26194},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":26170,"description":26178},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26234,"title":26235,"body":26236,"description":26243,"extension":1879,"meta":26246,"navigation":1881,"path":26247,"seo":26248,"stem":26249,"__hash__":26250},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26237,"toc":26244},[26238,26241],[10,26239,26235],{"id":26240},"_6价值网络",[24,26242,26243],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":308,"searchDepth":171,"depth":171,"links":26245},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26235,"description":26243},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26252,"title":26253,"body":26254,"description":26258,"extension":1879,"meta":26259,"navigation":1881,"path":26260,"seo":26261,"stem":26262,"__hash__":26263},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26255,"toc":26256},[],{"title":308,"searchDepth":171,"depth":171,"links":26257},[],"记录自己的强化学习笔记。",{"category":25175},"\u002Fwiki\u002F2025-12-04",{"title":26253,"description":26258},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26265,"title":26266,"body":26267,"description":1878,"extension":1879,"meta":26306,"navigation":1881,"path":26307,"seo":26308,"stem":26309,"__hash__":26310},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26268,"toc":26304},[26269,26272,26275,26281,26284,26290,26293,26298,26301],[10,26270,26266],{"id":26271},"_1-项目概览与官方资源",[24,26273,26274],{},"官方文档：",[24,26276,26277],{},[164,26278,26279],{"href":26279,"rel":26280},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[168],[24,26282,26283],{},"官方代码仓库：",[24,26285,26286],{},[164,26287,26288],{"href":26288,"rel":26289},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[168],[24,26291,26292],{},"复现大体流程：",[24,26294,26295],{},[19,26296],{"alt":308,"src":26297},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[24,26299,26300],{},"本教程的目标是打通这条链路：",[24,26302,26303],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":308,"searchDepth":171,"depth":171,"links":26305},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26266,"description":1878},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26312,"title":26313,"body":26314,"description":1878,"extension":1879,"meta":26430,"navigation":1881,"path":26431,"seo":26432,"stem":26433,"__hash__":26434},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26315,"toc":26425},[26316,26319,26323,26326,26333,26337,26340,26349,26359,26363,26393,26396,26422],[10,26317,26313],{"id":26318},"_2-环境准备与设备连接",[14,26320,26322],{"id":26321},"_21-系统与环境","2.1 系统与环境",[24,26324,26325],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[24,26327,26328,26329,26332],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[119,26330,26331],{},"lerobot"," 依赖。",[14,26334,26336],{"id":26335},"_22-机械臂串口识别","2.2 机械臂串口识别",[24,26338,26339],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[303,26341,26343],{"className":25618,"code":26342,"language":25620,"meta":308,"style":308},"lerobot-find-out\n",[119,26344,26345],{"__ignoreMap":308},[312,26346,26347],{"class":314,"line":315},[312,26348,26342],{"class":332},[24,26350,26351,26352,2159,26355,26358],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[119,26353,26354],{},"\u002Fdev\u002FttyACM0",[119,26356,26357],{},"\u002Fdev\u002FttyACM1","）。",[14,26360,26362],{"id":26361},"_23-串口授权","2.3 串口授权",[303,26364,26366],{"className":25618,"code":26365,"language":25620,"meta":308,"style":308},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[119,26367,26368,26382],{"__ignoreMap":308},[312,26369,26370,26373,26376,26379],{"class":314,"line":315},[312,26371,26372],{"class":332},"sudo",[312,26374,26375],{"class":339}," chmod",[312,26377,26378],{"class":488}," 666",[312,26380,26381],{"class":339}," \u002Fdev\u002FttyACM0\n",[312,26383,26384,26386,26388,26390],{"class":314,"line":171},[312,26385,26372],{"class":332},[312,26387,26375],{"class":339},[312,26389,26378],{"class":488},[312,26391,26392],{"class":339}," \u002Fdev\u002FttyACM1\n",[24,26394,26395],{},"说明：",[243,26397,26398,26403,26409,26419],{},[143,26399,26400,26402],{},[119,26401,26372],{},"：以 root 权限执行命令。",[143,26404,26405,26408],{},[119,26406,26407],{},"chmod","：修改设备节点权限。",[143,26410,26411,26414,26415,26418],{},[119,26412,26413],{},"666","：",[119,26416,26417],{},"rw-rw-rw-","，所有用户可读写。",[143,26420,26421],{},"串口号必须替换为你机器上的真实端口。",[1856,26423,26424],{},"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":308,"searchDepth":171,"depth":171,"links":26426},[26427,26428,26429],{"id":26321,"depth":171,"text":26322},{"id":26335,"depth":171,"text":26336},{"id":26361,"depth":171,"text":26362},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26313,"description":1878},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":26436,"title":26437,"body":26438,"description":1878,"extension":1879,"meta":26599,"navigation":1881,"path":26600,"seo":26601,"stem":26602,"__hash__":26603},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":26439,"toc":26595},[26440,26444,26448,26454,26457,26514,26517,26521,26524,26592],[10,26441,26443],{"id":26442},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,26445,26447],{"id":26446},"_31-配置电机-id","3.1 配置电机 ID",[24,26449,26450,26451,26453],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[119,26452,1433],{},"，需要改成机械臂链路里不冲突的编号。",[24,26455,26456],{},"方式一：用 LeRobot 命令逐步写入。",[303,26458,26460],{"className":25618,"code":26459,"language":25620,"meta":308,"style":308},"# 主臂舵机配置 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",[119,26461,26462,26467,26475,26482,26487,26491,26496,26502,26509],{"__ignoreMap":308},[312,26463,26464],{"class":314,"line":315},[312,26465,26466],{"class":318},"# 主臂舵机配置 ID\n",[312,26468,26469,26472],{"class":314,"line":171},[312,26470,26471],{"class":332},"lerobot-setup-motors",[312,26473,26474],{"class":488}," \\\n",[312,26476,26477,26480],{"class":314,"line":274},[312,26478,26479],{"class":488},"  --teleop.type=so101_leader",[312,26481,26474],{"class":488},[312,26483,26484],{"class":314,"line":298},[312,26485,26486],{"class":488},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[312,26488,26489],{"class":314,"line":974},[312,26490,4205],{"emptyLinePlaceholder":1881},[312,26492,26493],{"class":314,"line":980},[312,26494,26495],{"class":318},"# 从臂舵机配置 ID\n",[312,26497,26498,26500],{"class":314,"line":997},[312,26499,26471],{"class":332},[312,26501,26474],{"class":488},[312,26503,26504,26507],{"class":314,"line":1003},[312,26505,26506],{"class":488},"  --robot.type=so101_follower",[312,26508,26474],{"class":488},[312,26510,26511],{"class":314,"line":1020},[312,26512,26513],{"class":488},"  --robot.port=\u002Fdev\u002FttyACM1\n",[24,26515,26516],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,26518,26520],{"id":26519},"_32-机械臂校准","3.2 机械臂校准",[24,26522,26523],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[303,26525,26527],{"className":25618,"code":26526,"language":25620,"meta":308,"style":308},"# 主臂校准\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",[119,26528,26529,26534,26541,26547,26554,26559,26563,26568,26574,26580,26587],{"__ignoreMap":308},[312,26530,26531],{"class":314,"line":315},[312,26532,26533],{"class":318},"# 主臂校准\n",[312,26535,26536,26539],{"class":314,"line":171},[312,26537,26538],{"class":332},"lerobot-calibrate",[312,26540,26474],{"class":488},[312,26542,26543,26545],{"class":314,"line":274},[312,26544,26479],{"class":488},[312,26546,26474],{"class":488},[312,26548,26549,26552],{"class":314,"line":298},[312,26550,26551],{"class":488},"  --teleop.port=\u002Fdev\u002FttyACM0",[312,26553,26474],{"class":488},[312,26555,26556],{"class":314,"line":974},[312,26557,26558],{"class":488},"  --teleop.id=my_awesome_leader_arm\n",[312,26560,26561],{"class":314,"line":980},[312,26562,4205],{"emptyLinePlaceholder":1881},[312,26564,26565],{"class":314,"line":997},[312,26566,26567],{"class":318},"# 从臂校准\n",[312,26569,26570,26572],{"class":314,"line":1003},[312,26571,26538],{"class":332},[312,26573,26474],{"class":488},[312,26575,26576,26578],{"class":314,"line":1020},[312,26577,26506],{"class":488},[312,26579,26474],{"class":488},[312,26581,26582,26585],{"class":314,"line":1026},[312,26583,26584],{"class":488},"  --robot.port=\u002Fdev\u002FttyACM1",[312,26586,26474],{"class":488},[312,26588,26589],{"class":314,"line":3418},[312,26590,26591],{"class":488},"  --robot.id=my_awesome_follower_arm\n",[1856,26593,26594],{},"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":308,"searchDepth":171,"depth":171,"links":26596},[26597,26598],{"id":26446,"depth":171,"text":26447},{"id":26519,"depth":171,"text":26520},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":26437,"description":1878},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26605,"title":26606,"body":26607,"description":1878,"extension":1879,"meta":26798,"navigation":1881,"path":26799,"seo":26800,"stem":26801,"__hash__":26802},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26608,"toc":26794},[26609,26612,26616,26663,26667,26680,26743,26746,26791],[10,26610,26606],{"id":26611},"_4-遥操与相机接入",[14,26613,26615],{"id":26614},"_41-不带相机遥操","4.1 不带相机遥操",[303,26617,26619],{"className":25618,"code":26618,"language":25620,"meta":308,"style":308},"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",[119,26620,26621,26628,26634,26640,26647,26653,26659],{"__ignoreMap":308},[312,26622,26623,26626],{"class":314,"line":315},[312,26624,26625],{"class":332},"lerobot-teleoperate",[312,26627,26474],{"class":488},[312,26629,26630,26632],{"class":314,"line":171},[312,26631,26506],{"class":488},[312,26633,26474],{"class":488},[312,26635,26636,26638],{"class":314,"line":274},[312,26637,26584],{"class":488},[312,26639,26474],{"class":488},[312,26641,26642,26645],{"class":314,"line":298},[312,26643,26644],{"class":488},"  --robot.id=my_awesome_follower_arm",[312,26646,26474],{"class":488},[312,26648,26649,26651],{"class":314,"line":974},[312,26650,26479],{"class":488},[312,26652,26474],{"class":488},[312,26654,26655,26657],{"class":314,"line":980},[312,26656,26551],{"class":488},[312,26658,26474],{"class":488},[312,26660,26661],{"class":314,"line":997},[312,26662,26558],{"class":488},[14,26664,26666],{"id":26665},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[303,26668,26670],{"className":25618,"code":26669,"language":25620,"meta":308,"style":308},"lerobot-find-cameras opencv\n",[119,26671,26672],{"__ignoreMap":308},[312,26673,26674,26677],{"class":314,"line":315},[312,26675,26676],{"class":332},"lerobot-find-cameras",[312,26678,26679],{"class":339}," opencv\n",[303,26681,26683],{"className":25618,"code":26682,"language":25620,"meta":308,"style":308},"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",[119,26684,26685,26691,26697,26703,26709,26719,26725,26731,26738],{"__ignoreMap":308},[312,26686,26687,26689],{"class":314,"line":315},[312,26688,26625],{"class":332},[312,26690,26474],{"class":488},[312,26692,26693,26695],{"class":314,"line":171},[312,26694,26506],{"class":488},[312,26696,26474],{"class":488},[312,26698,26699,26701],{"class":314,"line":274},[312,26700,26584],{"class":488},[312,26702,26474],{"class":488},[312,26704,26705,26707],{"class":314,"line":298},[312,26706,26644],{"class":488},[312,26708,26474],{"class":488},[312,26710,26711,26714,26717],{"class":314,"line":974},[312,26712,26713],{"class":488},"  --robot.cameras=",[312,26715,26716],{"class":339},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[312,26718,26474],{"class":488},[312,26720,26721,26723],{"class":314,"line":980},[312,26722,26479],{"class":488},[312,26724,26474],{"class":488},[312,26726,26727,26729],{"class":314,"line":997},[312,26728,26551],{"class":488},[312,26730,26474],{"class":488},[312,26732,26733,26736],{"class":314,"line":1003},[312,26734,26735],{"class":488},"  --teleop.id=my_awesome_leader_arm",[312,26737,26474],{"class":488},[312,26739,26740],{"class":314,"line":1020},[312,26741,26742],{"class":488},"  --display_data=true\n",[24,26744,26745],{},"相机参数说明：",[243,26747,26748,26754,26760,26769,26779,26785],{},[143,26749,26750,26753],{},[119,26751,26752],{},"front","：相机名称。",[143,26755,26756,26759],{},[119,26757,26758],{},"type: opencv","：相机驱动类型。",[143,26761,26762,26765,26766,26358],{},[119,26763,26764],{},"index_or_path","：设备编号或设备路径（如 ",[119,26767,26768],{},"\u002Fdev\u002Fvideo4",[143,26770,26771,26774,26775,26778],{},[119,26772,26773],{},"width"," \u002F ",[119,26776,26777],{},"height","：图像分辨率。",[143,26780,26781,26784],{},[119,26782,26783],{},"fps","：采样帧率。",[143,26786,26787,26790],{},[119,26788,26789],{},"--display_data=true","：启用实时可视化。",[1856,26792,26793],{},"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":308,"searchDepth":171,"depth":171,"links":26795},[26796,26797],{"id":26614,"depth":171,"text":26615},{"id":26665,"depth":171,"text":26666},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26606,"description":1878},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26804,"title":26805,"body":26806,"description":1878,"extension":1879,"meta":26978,"navigation":1881,"path":26979,"seo":26980,"stem":26981,"__hash__":26982},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26807,"toc":26973},[26808,26812,26816,26821,26826,26829,26871,26877,26881,26930,26935,26939,26942,26950,26955,26960,26965,26970],[10,26809,26811],{"id":26810},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,26813,26815],{"id":26814},"_51-生成访问令牌","5.1 生成访问令牌",[24,26817,26818],{},[19,26819],{"alt":308,"src":26820},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[24,26822,26823],{},[19,26824],{"alt":308,"src":26825},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[24,26827,26828],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[303,26830,26832],{"className":25618,"code":26831,"language":25620,"meta":308,"style":308},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[119,26833,26834,26847],{"__ignoreMap":308},[312,26835,26836,26839,26842,26844],{"class":314,"line":315},[312,26837,26838],{"class":1436},"export",[312,26840,26841],{"class":324}," HF_TOKEN",[312,26843,336],{"class":1436},[312,26845,26846],{"class":339},"\"your_huggingface_token\"\n",[312,26848,26849,26852,26855,26858,26861,26863,26866,26868],{"class":314,"line":171},[312,26850,26851],{"class":332},"hf",[312,26853,26854],{"class":339}," auth",[312,26856,26857],{"class":339}," login",[312,26859,26860],{"class":488}," --token",[312,26862,11527],{"class":339},[312,26864,26865],{"class":324},"$HF_TOKEN",[312,26867,2196],{"class":339},[312,26869,26870],{"class":488}," --add-to-git-credential\n",[24,26872,26873,26876],{},[119,26874,26875],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,26878,26880],{"id":26879},"_52-验证登录","5.2 验证登录",[303,26882,26884],{"className":25618,"code":26883,"language":25620,"meta":308,"style":308},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[119,26885,26886,26917],{"__ignoreMap":308},[312,26887,26888,26891,26893,26896,26898,26900,26903,26906,26909,26912,26915],{"class":314,"line":315},[312,26889,26890],{"class":324},"HF_USER",[312,26892,336],{"class":1436},[312,26894,26895],{"class":324},"$(",[312,26897,26851],{"class":332},[312,26899,26854],{"class":339},[312,26901,26902],{"class":339}," whoami",[312,26904,26905],{"class":1436}," |",[312,26907,26908],{"class":332}," head",[312,26910,26911],{"class":488}," -n",[312,26913,26914],{"class":488}," 1",[312,26916,1959],{"class":324},[312,26918,26919,26922,26924,26927],{"class":314,"line":171},[312,26920,26921],{"class":488},"echo",[312,26923,11527],{"class":339},[312,26925,26926],{"class":324},"$HF_USER",[312,26928,26929],{"class":339},"\"\n",[24,26931,26932],{},[19,26933],{"alt":308,"src":26934},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26936,26938],{"id":26937},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[24,26940,26941],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[243,26943,26944,26947],{},[143,26945,26946],{},"Dataset Repo（用于上传演示数据）",[143,26948,26949],{},"Model Repo（用于上传训练后的 ACT 权重）",[24,26951,26952],{},[19,26953],{"alt":308,"src":26954},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[24,26956,26957],{},[19,26958],{"alt":308,"src":26959},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[24,26961,26962],{},[19,26963],{"alt":308,"src":26964},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[24,26966,26967],{},[19,26968],{"alt":308,"src":26969},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1856,26971,26972],{},"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":308,"searchDepth":171,"depth":171,"links":26974},[26975,26976,26977],{"id":26814,"depth":171,"text":26815},{"id":26879,"depth":171,"text":26880},{"id":26937,"depth":171,"text":26938},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26805,"description":1878},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26984,"title":26985,"body":26986,"description":1878,"extension":1879,"meta":27183,"navigation":1881,"path":27184,"seo":27185,"stem":27186,"__hash__":27187},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26987,"toc":27178},[26988,26992,26996,27092,27100,27105,27109,27125,27128,27132,27175],[10,26989,26991],{"id":26990},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26993,26995],{"id":26994},"_61-录制示教数据","6.1 录制示教数据",[303,26997,26999],{"className":25618,"code":26998,"language":25620,"meta":308,"style":308},"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",[119,27000,27001,27008,27014,27020,27026,27035,27041,27047,27053,27060,27070,27077,27087],{"__ignoreMap":308},[312,27002,27003,27006],{"class":314,"line":315},[312,27004,27005],{"class":332},"lerobot-record",[312,27007,26474],{"class":488},[312,27009,27010,27012],{"class":314,"line":171},[312,27011,26506],{"class":488},[312,27013,26474],{"class":488},[312,27015,27016,27018],{"class":314,"line":274},[312,27017,26584],{"class":488},[312,27019,26474],{"class":488},[312,27021,27022,27024],{"class":314,"line":298},[312,27023,26644],{"class":488},[312,27025,26474],{"class":488},[312,27027,27028,27030,27033],{"class":314,"line":974},[312,27029,26713],{"class":488},[312,27031,27032],{"class":339},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[312,27034,26474],{"class":488},[312,27036,27037,27039],{"class":314,"line":980},[312,27038,26479],{"class":488},[312,27040,26474],{"class":488},[312,27042,27043,27045],{"class":314,"line":997},[312,27044,26551],{"class":488},[312,27046,26474],{"class":488},[312,27048,27049,27051],{"class":314,"line":1003},[312,27050,26735],{"class":488},[312,27052,26474],{"class":488},[312,27054,27055,27058],{"class":314,"line":1020},[312,27056,27057],{"class":488},"  --display_data=true",[312,27059,26474],{"class":488},[312,27061,27062,27065,27068],{"class":314,"line":1026},[312,27063,27064],{"class":488},"  --dataset.repo_id=",[312,27066,27067],{"class":339},"\"Embodied-AI-6\u002Fso101_test\"",[312,27069,26474],{"class":488},[312,27071,27072,27075],{"class":314,"line":3418},[312,27073,27074],{"class":488},"  --dataset.num_episodes=10",[312,27076,26474],{"class":488},[312,27078,27079,27082,27085],{"class":314,"line":3423},[312,27080,27081],{"class":488},"  --dataset.single_task=",[312,27083,27084],{"class":339},"\"Grab the green cube\"",[312,27086,26474],{"class":488},[312,27088,27089],{"class":314,"line":3429},[312,27090,27091],{"class":488},"  --resume=true\n",[243,27093,27094],{},[143,27095,27096,27099],{},[119,27097,27098],{},"--resume=true","：已有同一数据集时继续追加 episode。",[24,27101,27102],{},[19,27103],{"alt":308,"src":27104},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,27106,27108],{"id":27107},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[303,27110,27112],{"className":25618,"code":27111,"language":25620,"meta":308,"style":308},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[119,27113,27114],{"__ignoreMap":308},[312,27115,27116,27119,27122],{"class":314,"line":315},[312,27117,27118],{"class":332},"rm",[312,27120,27121],{"class":488}," -rf",[312,27123,27124],{"class":339}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[24,27126,27127],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,27129,27131],{"id":27130},"_63-回放指定-episode","6.3 回放指定 episode",[303,27133,27135],{"className":25618,"code":27134,"language":25620,"meta":308,"style":308},"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",[119,27136,27137,27144,27150,27156,27162,27170],{"__ignoreMap":308},[312,27138,27139,27142],{"class":314,"line":315},[312,27140,27141],{"class":332},"lerobot-replay",[312,27143,26474],{"class":488},[312,27145,27146,27148],{"class":314,"line":171},[312,27147,26506],{"class":488},[312,27149,26474],{"class":488},[312,27151,27152,27154],{"class":314,"line":274},[312,27153,26584],{"class":488},[312,27155,26474],{"class":488},[312,27157,27158,27160],{"class":314,"line":298},[312,27159,26644],{"class":488},[312,27161,26474],{"class":488},[312,27163,27164,27166,27168],{"class":314,"line":974},[312,27165,27064],{"class":488},[312,27167,27067],{"class":339},[312,27169,26474],{"class":488},[312,27171,27172],{"class":314,"line":980},[312,27173,27174],{"class":488},"  --dataset.episode=0\n",[1856,27176,27177],{},"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":308,"searchDepth":171,"depth":171,"links":27179},[27180,27181,27182],{"id":26994,"depth":171,"text":26995},{"id":27107,"depth":171,"text":27108},{"id":27130,"depth":171,"text":27131},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26985,"description":1878},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27189,"title":27190,"body":27191,"description":1878,"extension":1879,"meta":27319,"navigation":1881,"path":27320,"seo":27321,"stem":27322,"__hash__":27323},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27192,"toc":27317},[27193,27197,27260,27263,27310,27315],[10,27194,27196],{"id":27195},"_7-act-模型训练","7. ACT 模型训练",[303,27198,27200],{"className":25618,"code":27199,"language":25620,"meta":308,"style":308},"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",[119,27201,27202,27209,27217,27224,27231,27238,27245,27252],{"__ignoreMap":308},[312,27203,27204,27207],{"class":314,"line":315},[312,27205,27206],{"class":332},"lerobot-train",[312,27208,26474],{"class":488},[312,27210,27211,27213,27215],{"class":314,"line":171},[312,27212,27064],{"class":488},[312,27214,27067],{"class":339},[312,27216,26474],{"class":488},[312,27218,27219,27222],{"class":314,"line":274},[312,27220,27221],{"class":488},"  --policy.type=act",[312,27223,26474],{"class":488},[312,27225,27226,27229],{"class":314,"line":298},[312,27227,27228],{"class":488},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[312,27230,26474],{"class":488},[312,27232,27233,27236],{"class":314,"line":974},[312,27234,27235],{"class":488},"  --job_name=act_so101_test",[312,27237,26474],{"class":488},[312,27239,27240,27243],{"class":314,"line":980},[312,27241,27242],{"class":488},"  --policy.device=cuda",[312,27244,26474],{"class":488},[312,27246,27247,27250],{"class":314,"line":997},[312,27248,27249],{"class":488},"  --wandb.enable=false",[312,27251,26474],{"class":488},[312,27253,27254,27257],{"class":314,"line":1003},[312,27255,27256],{"class":488},"  --policy.repo_id=",[312,27258,27259],{"class":339},"\"Embodied-AI-6\u002Flerobot_new\"\n",[24,27261,27262],{},"参数说明：",[243,27264,27265,27271,27277,27283,27289,27298,27304],{},[143,27266,27267,27270],{},[119,27268,27269],{},"--dataset.repo_id","：训练数据集仓库。",[143,27272,27273,27276],{},[119,27274,27275],{},"--policy.type=act","：策略模型类型为 ACT。",[143,27278,27279,27282],{},[119,27280,27281],{},"--output_dir","：本地训练输出目录。",[143,27284,27285,27288],{},[119,27286,27287],{},"--job_name","：训练任务名称。",[143,27290,27291,27294,27295,26358],{},[119,27292,27293],{},"--policy.device","：训练设备（如 ",[119,27296,27297],{},"cuda",[143,27299,27300,27303],{},[119,27301,27302],{},"--wandb.enable","：是否启用 WandB 可视化。",[143,27305,27306,27309],{},[119,27307,27308],{},"--policy.repo_id","：训练后模型推送目标仓库。",[24,27311,27312],{},[19,27313],{"alt":308,"src":27314},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1856,27316,27177],{},{"title":308,"searchDepth":171,"depth":171,"links":27318},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27190,"description":1878},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27325,"title":27326,"body":27327,"description":1878,"extension":1879,"meta":27414,"navigation":1881,"path":27415,"seo":27416,"stem":27417,"__hash__":27418},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27328,"toc":27412},[27329,27332,27335,27402,27410],[10,27330,27326],{"id":27331},"_8-策略部署与自动采集",[24,27333,27334],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[303,27336,27338],{"className":25618,"code":27337,"language":25620,"meta":308,"style":308},"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",[119,27339,27340,27346,27352,27358,27366,27372,27379,27387,27395],{"__ignoreMap":308},[312,27341,27342,27344],{"class":314,"line":315},[312,27343,27005],{"class":332},[312,27345,26474],{"class":488},[312,27347,27348,27350],{"class":314,"line":171},[312,27349,26506],{"class":488},[312,27351,26474],{"class":488},[312,27353,27354,27356],{"class":314,"line":274},[312,27355,26584],{"class":488},[312,27357,26474],{"class":488},[312,27359,27360,27362,27364],{"class":314,"line":298},[312,27361,26713],{"class":488},[312,27363,27032],{"class":339},[312,27365,26474],{"class":488},[312,27367,27368,27370],{"class":314,"line":974},[312,27369,26644],{"class":488},[312,27371,26474],{"class":488},[312,27373,27374,27377],{"class":314,"line":980},[312,27375,27376],{"class":488},"  --display_data=false",[312,27378,26474],{"class":488},[312,27380,27381,27383,27385],{"class":314,"line":997},[312,27382,27064],{"class":488},[312,27384,27067],{"class":339},[312,27386,26474],{"class":488},[312,27388,27389,27391,27393],{"class":314,"line":1003},[312,27390,27081],{"class":488},[312,27392,27084],{"class":339},[312,27394,26474],{"class":488},[312,27396,27397,27400],{"class":314,"line":1020},[312,27398,27399],{"class":488},"  --policy.path=",[312,27401,27259],{"class":339},[243,27403,27404],{},[143,27405,27406,27409],{},[119,27407,27408],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1856,27411,27177],{},{"title":308,"searchDepth":171,"depth":171,"links":27413},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27326,"description":1878},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27420,"title":27421,"body":27422,"description":1878,"extension":1879,"meta":27451,"navigation":1881,"path":27452,"seo":27453,"stem":27454,"__hash__":27455},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27423,"toc":27449},[27424,27428,27431,27437,27440,27446],[10,27425,27427],{"id":27426},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[24,27429,27430],{},"项目地址：",[24,27432,27433],{},[164,27434,27435],{"href":27435,"rel":27436},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[168],[24,27438,27439],{},"参考教程：",[24,27441,27442],{},[164,27443,27444],{"href":27444,"rel":27445},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[168],[24,27447,27448],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":308,"searchDepth":171,"depth":171,"links":27450},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27421,"description":1878},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":27457,"title":27458,"body":27459,"description":27463,"extension":1879,"meta":27464,"navigation":1881,"path":27465,"seo":27466,"stem":27467,"__hash__":27468},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":27460,"toc":27461},[],{"title":308,"searchDepth":171,"depth":171,"links":27462},[],"act复现",{"category":25175},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":27458,"description":27463},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27470,"title":27471,"body":27472,"description":308,"extension":1879,"meta":27774,"navigation":1881,"path":27775,"seo":27776,"stem":27777,"__hash__":27778},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27473,"toc":27766},[27474,27477,27481,27491,27498,27505,27508,27515,27518,27521,27525,27537,27541,27587,27590,27593,27596,27599,27602,27606,27644,27650,27654,27708,27713,27716,27719,27724,27727,27732,27735,27738,27742,27745,27748,27752],[10,27475,27471],{"id":27476},"_1简介",[69,27478,27480],{"id":27479},"_11什么是-docker","1.1什么是 Docker？",[24,27482,27483,27484,27487,27488],{},"Docker 是一个开源的 ",[27,27485,27486],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[27,27489,27490],{},"一次构建，到处运行。",[24,27492,27493,27494,27497],{},"“ ",[27,27495,27496],{},"一次构建，到处运行"," ”也就是说：",[140,27499,27500],{},[143,27501,27502],{},[27,27503,27504],{},"之前：",[24,27506,27507],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[140,27509,27510],{},[143,27511,27512],{},[27,27513,27514],{},"使用docker后：",[24,27516,27517],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[24,27519,27520],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[69,27522,27524],{"id":27523},"_12它是怎么工作的","1.2.它是怎么工作的？",[243,27526,27527,27530],{},[143,27528,27529],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[143,27531,27532,27533,27536],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[27,27534,27535],{},"无论在哪运行都一样稳定"," 。",[69,27538,27540],{"id":27539},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[2086,27542,27543,27553],{},[2089,27544,27545],{},[2092,27546,27547,27550],{},[2095,27548,27549],{"align":1374},"概念",[2095,27551,27552],{"align":1374},"解释",[2132,27554,27555,27563,27571,27579],{},[2092,27556,27557,27560],{},[2137,27558,27559],{"align":1374},"镜像",[2137,27561,27562],{"align":1374},"Image，运行容器的模板，像是一个应用快照",[2092,27564,27565,27568],{},[2137,27566,27567],{"align":1374},"容器",[2137,27569,27570],{"align":1374},"Container，运行中的镜像实例，有自己的文件系统、网络等",[2092,27572,27573,27576],{},[2137,27574,27575],{"align":1374},"Dockerfile",[2137,27577,27578],{"align":1374},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[2092,27580,27581,27584],{},[2137,27582,27583],{"align":1374},"仓库",[2137,27585,27586],{"align":1374},"Registry，存放镜像的地方，比如 Docker Hub",[24,27588,27589],{},"抽象化理解:",[24,27591,27592],{},"Docker镜像≈C++类",[24,27594,27595],{},"Docker容器≈C++类实例(即对象)",[24,27597,27598],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[24,27600,27601],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[69,27603,27605],{"id":27604},"_14类比理解","1.4.类比理解",[2086,27607,27608,27618],{},[2089,27609,27610],{},[2092,27611,27612,27615],{},[2095,27613,27614],{"align":1374},"传统部署",[2095,27616,27617],{"align":1374},"Docker部署",[2132,27619,27620,27628,27636],{},[2092,27621,27622,27625],{},[2137,27623,27624],{"align":1374},"手动安装依赖、调试版本不一致问题",[2137,27626,27627],{"align":1374},"一次打包环境和代码",[2092,27629,27630,27633],{},[2137,27631,27632],{"align":1374},"程序“裸奔”跑在系统上",[2137,27634,27635],{"align":1374},"程序“穿着容器”隔离运行",[2092,27637,27638,27641],{},[2137,27639,27640],{"align":1374},"容易“在我电脑上能跑”",[2137,27642,27643],{"align":1374},"保证“无论在哪都能跑”",[24,27645,27646,27647],{},"就像快递包裹： ",[27,27648,27649],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[69,27651,27653],{"id":27652},"_15docker-的核心优势","1.5.Docker 的核心优势",[2086,27655,27656,27666],{},[2089,27657,27658],{},[2092,27659,27660,27663],{},[2095,27661,27662],{"align":1374},"优势",[2095,27664,27665],{"align":1374},"说明",[2132,27667,27668,27676,27684,27692,27700],{},[2092,27669,27670,27673],{},[2137,27671,27672],{"align":1374},"轻量级",[2137,27674,27675],{"align":1374},"基于系统内核共享，启动速度快，占资源少",[2092,27677,27678,27681],{},[2137,27679,27680],{"align":1374},"跨平台",[2137,27682,27683],{"align":1374},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[2092,27685,27686,27689],{},[2137,27687,27688],{"align":1374},"易于迁移部署",[2137,27690,27691],{"align":1374},"应用和环境一起封装，不怕依赖不一致",[2092,27693,27694,27697],{},[2137,27695,27696],{"align":1374},"易于版本控制",[2137,27698,27699],{"align":1374},"镜像版本可控，支持回滚",[2092,27701,27702,27705],{},[2137,27703,27704],{"align":1374},"生态丰富",[2137,27706,27707],{"align":1374},"Docker Hub 上有成千上万的现成镜像可用",[140,27709,27710],{},[143,27711,27712],{},"在Linux上可以几乎实现无性能损失。",[24,27714,27715],{},"docker里的发行版和本机共用Linux内核。",[24,27717,27718],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[140,27720,27721],{},[143,27722,27723],{},"可以快速部署在绝大多数Linux发行版",[24,27725,27726],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[140,27728,27729],{},[143,27730,27731],{},"配置环境简单",[24,27733,27734],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[24,27736,27737],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[140,27739,27740],{},[143,27741,27704],{},[24,27743,27744],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[24,27746,27747],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[69,27749,27751],{"id":27750},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[243,27753,27754,27757,27760,27763],{},[143,27755,27756],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[143,27758,27759],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[143,27761,27762],{},"微服务架构：每个服务一个容器，灵活组合",[143,27764,27765],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":308,"searchDepth":171,"depth":171,"links":27767},[27768,27769,27770,27771,27772,27773],{"id":27479,"depth":274,"text":27480},{"id":27523,"depth":274,"text":27524},{"id":27539,"depth":274,"text":27540},{"id":27604,"depth":274,"text":27605},{"id":27652,"depth":274,"text":27653},{"id":27750,"depth":274,"text":27751},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27471,"description":308},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27780,"title":27781,"body":27782,"description":308,"extension":1879,"meta":28515,"navigation":1881,"path":28516,"seo":28517,"stem":28518,"__hash__":28519},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27783,"toc":28510},[27784,27787,27791,27794,27797,27803,27809,27813,27822,27825,27882,27885,27936,27939,28022,28025,28062,28066,28077,28090,28097,28100,28180,28183,28233,28236,28259,28263,28270,28273,28289,28295,28298,28314,28320,28323,28339,28353,28359,28379,28385,28388,28400,28406,28409,28423,28429,28432,28452,28457,28460,28463,28467,28470,28473,28476,28483,28486,28489,28492,28497,28502,28507],[10,27785,27781],{"id":27786},"_2安装docker",[69,27788,27790],{"id":27789},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[24,27792,27793],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[24,27795,27796],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[24,27798,27799],{},[164,27800,27801],{"href":27801,"rel":27802},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[168],[24,27804,27805],{},[164,27806,27807],{"href":27807,"rel":27808},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[168],[23796,27810,27812],{"id":27811},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[24,27814,27815,27816,27821],{},"以下内容根据 ",[164,27817,27820],{"href":27818,"rel":27819},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[168],"官方文档"," 修改而来。",[24,27823,27824],{},"如果你过去安装过 docker，先删掉：",[303,27826,27828],{"className":25618,"code":27827,"language":25620,"meta":308,"style":308},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[119,27829,27830],{"__ignoreMap":308},[312,27831,27832,27834,27837,27840,27843,27846,27849,27852,27855,27858,27861,27864,27867,27870,27873,27876,27879],{"class":314,"line":315},[312,27833,4830],{"class":1436},[312,27835,27836],{"class":324}," pkg ",[312,27838,27839],{"class":1436},"in",[312,27841,27842],{"class":339}," docker.io",[312,27844,27845],{"class":339}," docker-doc",[312,27847,27848],{"class":339}," docker-compose",[312,27850,27851],{"class":339}," docker-compose-v2",[312,27853,27854],{"class":339}," podman-docker",[312,27856,27857],{"class":339}," containerd",[312,27859,27860],{"class":339}," runc",[312,27862,27863],{"class":324},"; ",[312,27865,27866],{"class":1436},"do",[312,27868,27869],{"class":332}," sudo",[312,27871,27872],{"class":339}," apt-get",[312,27874,27875],{"class":339}," remove",[312,27877,27878],{"class":324}," $pkg; ",[312,27880,27881],{"class":1436},"done\n",[24,27883,27884],{},"首先安装依赖和GPG：",[303,27886,27890],{"className":27887,"code":27888,"language":27889,"meta":308,"style":308},"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",[119,27891,27892,27897,27902,27907,27912,27917,27922,27926,27931],{"__ignoreMap":308},[312,27893,27894],{"class":314,"line":315},[312,27895,27896],{},"# Add Docker's official GPG key:\n",[312,27898,27899],{"class":314,"line":171},[312,27900,27901],{},"sudo apt-get update\n",[312,27903,27904],{"class":314,"line":274},[312,27905,27906],{},"sudo apt-get install ca-certificates curl\n",[312,27908,27909],{"class":314,"line":298},[312,27910,27911],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[312,27913,27914],{"class":314,"line":974},[312,27915,27916],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[312,27918,27919],{"class":314,"line":980},[312,27920,27921],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[312,27923,27924],{"class":314,"line":997},[312,27925,4205],{"emptyLinePlaceholder":1881},[312,27927,27928],{"class":314,"line":1003},[312,27929,27930],{},"# 如果上面这行报错就弄下面这行\n",[312,27932,27933],{"class":314,"line":1020},[312,27934,27935],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[24,27937,27938],{},"信任 Docker 的 GPG 公钥并添加仓库：",[303,27940,27942],{"className":25618,"code":27941,"language":25620,"meta":308,"style":308},"# 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",[119,27943,27944,27949,27955,27972,28005],{"__ignoreMap":308},[312,27945,27946],{"class":314,"line":315},[312,27947,27948],{"class":318},"# Add the repository to Apt sources:\n",[312,27950,27951,27953],{"class":314,"line":171},[312,27952,26921],{"class":488},[312,27954,26474],{"class":488},[312,27956,27957,27960,27963,27966,27969],{"class":314,"line":274},[312,27958,27959],{"class":339},"  \"deb [arch=$(",[312,27961,27962],{"class":332},"dpkg",[312,27964,27965],{"class":488}," --print-architecture",[312,27967,27968],{"class":339},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[312,27970,27971],{"class":488},"\\\n",[312,27973,27974,27977,27979,27981,27984,27987,27989,27991,27994,27996,27998,28001,28003],{"class":314,"line":298},[312,27975,27976],{"class":339},"  \"",[312,27978,26895],{"class":324},[312,27980,2503],{"class":488},[312,27982,27983],{"class":339}," \u002Fetc\u002Fos-release",[312,27985,27986],{"class":324}," && ",[312,27988,26921],{"class":488},[312,27990,11527],{"class":339},[312,27992,27993],{"class":324},"$VERSION_CODENAME",[312,27995,2196],{"class":339},[312,27997,2374],{"class":324},[312,27999,28000],{"class":339},"\" stable\"",[312,28002,26905],{"class":1436},[312,28004,26474],{"class":488},[312,28006,28007,28010,28013,28016,28019],{"class":314,"line":974},[312,28008,28009],{"class":332},"  sudo",[312,28011,28012],{"class":339}," tee",[312,28014,28015],{"class":339}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[312,28017,28018],{"class":1436}," >",[312,28020,28021],{"class":339}," \u002Fdev\u002Fnull\n",[24,28023,28024],{},"最后安装",[303,28026,28028],{"className":25618,"code":28027,"language":25620,"meta":308,"style":308},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[119,28029,28030,28039],{"__ignoreMap":308},[312,28031,28032,28034,28036],{"class":314,"line":315},[312,28033,26372],{"class":332},[312,28035,27872],{"class":339},[312,28037,28038],{"class":339}," update\n",[312,28040,28041,28043,28045,28047,28050,28053,28056,28059],{"class":314,"line":171},[312,28042,26372],{"class":332},[312,28044,27872],{"class":339},[312,28046,25630],{"class":339},[312,28048,28049],{"class":339}," docker-ce",[312,28051,28052],{"class":339}," docker-ce-cli",[312,28054,28055],{"class":339}," containerd.io",[312,28057,28058],{"class":339}," docker-buildx-plugin",[312,28060,28061],{"class":339}," docker-compose-plugin\n",[23796,28063,28065],{"id":28064},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[24,28067,28068,28069,28072,28073,28076],{},"查看自己自己包管理工具版本（dnf是 ",[27,28070,28071],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[27,28074,28075],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[303,28078,28080],{"className":25618,"code":28079,"language":25620,"meta":308,"style":308},"dnf --version\n",[119,28081,28082],{"__ignoreMap":308},[312,28083,28084,28087],{"class":314,"line":315},[312,28085,28086],{"class":332},"dnf",[312,28088,28089],{"class":488}," --version\n",[24,28091,27815,28092,28096],{},[164,28093,27820],{"href":28094,"rel":28095},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[168]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[24,28098,28099],{},"如果你之前安装过 docker，请先删掉",[303,28101,28103],{"className":25618,"code":28102,"language":25620,"meta":308,"style":308},"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",[119,28104,28105,28119,28126,28133,28140,28147,28154,28161,28168,28175],{"__ignoreMap":308},[312,28106,28107,28109,28112,28114,28117],{"class":314,"line":315},[312,28108,26372],{"class":332},[312,28110,28111],{"class":339}," dnf",[312,28113,27875],{"class":339},[312,28115,28116],{"class":339}," docker",[312,28118,26474],{"class":488},[312,28120,28121,28124],{"class":314,"line":171},[312,28122,28123],{"class":339},"                  docker-client",[312,28125,26474],{"class":488},[312,28127,28128,28131],{"class":314,"line":274},[312,28129,28130],{"class":339},"                  docker-client-latest",[312,28132,26474],{"class":488},[312,28134,28135,28138],{"class":314,"line":298},[312,28136,28137],{"class":339},"                  docker-common",[312,28139,26474],{"class":488},[312,28141,28142,28145],{"class":314,"line":974},[312,28143,28144],{"class":339},"                  docker-latest",[312,28146,26474],{"class":488},[312,28148,28149,28152],{"class":314,"line":980},[312,28150,28151],{"class":339},"                  docker-latest-logrotate",[312,28153,26474],{"class":488},[312,28155,28156,28159],{"class":314,"line":997},[312,28157,28158],{"class":339},"                  docker-logrotate",[312,28160,26474],{"class":488},[312,28162,28163,28166],{"class":314,"line":1003},[312,28164,28165],{"class":339},"                  docker-selinux",[312,28167,26474],{"class":488},[312,28169,28170,28173],{"class":314,"line":1020},[312,28171,28172],{"class":339},"                  docker-engine-selinux",[312,28174,26474],{"class":488},[312,28176,28177],{"class":314,"line":1026},[312,28178,28179],{"class":339},"                  docker-engine\n",[24,28181,28182],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[303,28184,28186],{"className":25618,"code":28185,"language":25620,"meta":308,"style":308},"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",[119,28187,28188,28202,28217],{"__ignoreMap":308},[312,28189,28190,28192,28194,28197,28199],{"class":314,"line":315},[312,28191,26372],{"class":332},[312,28193,28111],{"class":339},[312,28195,28196],{"class":488}," -y",[312,28198,25630],{"class":339},[312,28200,28201],{"class":339}," dnf-plugins-core\n",[312,28203,28204,28206,28208,28211,28214],{"class":314,"line":171},[312,28205,26372],{"class":332},[312,28207,28111],{"class":339},[312,28209,28210],{"class":339}," config-manager",[312,28212,28213],{"class":339}," addrepo",[312,28215,28216],{"class":488}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[312,28218,28219,28221,28224,28227,28230],{"class":314,"line":274},[312,28220,26372],{"class":332},[312,28222,28223],{"class":339}," sed",[312,28225,28226],{"class":488}," -i",[312,28228,28229],{"class":339}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[312,28231,28232],{"class":339}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[24,28234,28235],{},"最后安装：",[303,28237,28239],{"className":25618,"code":28238,"language":25620,"meta":308,"style":308},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[119,28240,28241],{"__ignoreMap":308},[312,28242,28243,28245,28247,28249,28251,28253,28255,28257],{"class":314,"line":315},[312,28244,26372],{"class":332},[312,28246,28111],{"class":339},[312,28248,25630],{"class":339},[312,28250,28049],{"class":339},[312,28252,28052],{"class":339},[312,28254,28055],{"class":339},[312,28256,28058],{"class":339},[312,28258,28061],{"class":339},[69,28260,28262],{"id":28261},"_22配置环境","2.2.配置环境",[23796,28264,28266,28269],{"id":28265},"_221检查-docker-服务状态",[27,28267,28268],{},"2.2.1.检查 Docker 服务状态"," ：",[24,28271,28272],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[303,28274,28276],{"className":25618,"code":28275,"language":25620,"meta":308,"style":308},"systemctl status docker\n",[119,28277,28278],{"__ignoreMap":308},[312,28279,28280,28283,28286],{"class":314,"line":315},[312,28281,28282],{"class":332},"systemctl",[312,28284,28285],{"class":339}," status",[312,28287,28288],{"class":339}," docker\n",[23796,28290,28292,28269],{"id":28291},"_222启动-docker-服务",[27,28293,28294],{},"2.2.2.启动 Docker 服务",[24,28296,28297],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[303,28299,28301],{"className":25618,"code":28300,"language":25620,"meta":308,"style":308},"sudo systemctl start docker\n",[119,28302,28303],{"__ignoreMap":308},[312,28304,28305,28307,28310,28312],{"class":314,"line":315},[312,28306,26372],{"class":332},[312,28308,28309],{"class":339}," systemctl",[312,28311,5989],{"class":339},[312,28313,28288],{"class":339},[23796,28315,28317,28269],{"id":28316},"_223设置-docker-开机自启",[27,28318,28319],{},"2.2.3.设置 Docker 开机自启",[24,28321,28322],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[303,28324,28326],{"className":25618,"code":28325,"language":25620,"meta":308,"style":308},"sudo systemctl enable docker\n",[119,28327,28328],{"__ignoreMap":308},[312,28329,28330,28332,28334,28337],{"class":314,"line":315},[312,28331,26372],{"class":332},[312,28333,28309],{"class":339},[312,28335,28336],{"class":339}," enable",[312,28338,28288],{"class":339},[23796,28340,28342,15596,28345,15596,28350,28269],{"id":28341},"_224将用户添加到-docker-组",[27,28343,28344],{},"2.2.4.将用户添加到",[27,28346,28347],{},[119,28348,28349],{},"docker",[27,28351,28352],{},"组",[24,28354,28355,28356,28358],{},"使用以下命令将当前用户添加到 ",[119,28357,28349],{}," 组：",[303,28360,28362],{"className":25618,"code":28361,"language":25620,"meta":308,"style":308},"sudo usermod -aG docker $USER\n",[119,28363,28364],{"__ignoreMap":308},[312,28365,28366,28368,28371,28374,28376],{"class":314,"line":315},[312,28367,26372],{"class":332},[312,28369,28370],{"class":339}," usermod",[312,28372,28373],{"class":488}," -aG",[312,28375,28116],{"class":339},[312,28377,28378],{"class":324}," $USER\n",[23796,28380,28382,28269],{"id":28381},"_225退出并重新登录",[27,28383,28384],{},"2.2.5.退出并重新登录",[24,28386,28387],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[303,28389,28391],{"className":25618,"code":28390,"language":25620,"meta":308,"style":308},"newgrp docker\n",[119,28392,28393],{"__ignoreMap":308},[312,28394,28395,28398],{"class":314,"line":315},[312,28396,28397],{"class":332},"newgrp",[312,28399,28288],{"class":339},[23796,28401,28403,28269],{"id":28402},"_226重新启动-docker-服务如果需要",[27,28404,28405],{},"2.2.6.重新启动 Docker 服务（如果需要）",[24,28407,28408],{},"确保 Docker 服务正在运行，可以使用以下命令：",[303,28410,28411],{"className":25618,"code":28300,"language":25620,"meta":308,"style":308},[119,28412,28413],{"__ignoreMap":308},[312,28414,28415,28417,28419,28421],{"class":314,"line":315},[312,28416,26372],{"class":332},[312,28418,28309],{"class":339},[312,28420,5989],{"class":339},[312,28422,28288],{"class":339},[23796,28424,28426,28269],{"id":28425},"_227重启电脑后检查-docker-服务状态",[27,28427,28428],{},"2.2.7.重启电脑后检查 Docker 服务状态",[24,28430,28431],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[303,28433,28435],{"className":25618,"code":28434,"language":25620,"meta":308,"style":308},"sudo reboot\nsystemctl status docker\n",[119,28436,28437,28444],{"__ignoreMap":308},[312,28438,28439,28441],{"class":314,"line":315},[312,28440,26372],{"class":332},[312,28442,28443],{"class":339}," reboot\n",[312,28445,28446,28448,28450],{"class":314,"line":171},[312,28447,28282],{"class":332},[312,28449,28285],{"class":339},[312,28451,28288],{"class":339},[24,28453,28454],{},[19,28455],{"alt":308,"src":28456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[24,28458,28459],{},"第三行显示enabled说明开机自启动成功",[24,28461,28462],{},"按q退出",[69,28464,28466],{"id":28465},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[24,28468,28469],{},"优先使用linux来使用docker是比较好的",[24,28471,28472],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[24,28474,28475],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[24,28477,28478,28479],{},"官方下载安装:",[164,28480,28481],{"href":28481,"rel":28482},"https:\u002F\u002Fwww.docker.com\u002F",[168],[24,28484,28485],{},"Windows的Docker显卡直通与USB直通:",[24,28487,28488],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[24,28490,28491],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[24,28493,28494],{},[19,28495],{"alt":308,"src":28496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[24,28498,28499],{},[19,28500],{"alt":308,"src":28501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[24,28503,28504],{},[19,28505],{"alt":308,"src":28506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1856,28508,28509],{},"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":308,"searchDepth":171,"depth":171,"links":28511},[28512,28513,28514],{"id":27789,"depth":274,"text":27790},{"id":28261,"depth":274,"text":28262},{"id":28465,"depth":274,"text":28466},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27781,"description":308},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28521,"title":28522,"body":28523,"description":28530,"extension":1879,"meta":29223,"navigation":1881,"path":29224,"seo":29225,"stem":29226,"__hash__":29227},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28524,"toc":29217},[28525,28528,28531,28535,28540,28545,28548,28576,28581,28590,28593,28598,28602,28609,28614,28620,28624,28627,28631,28636,28728,28733,28751,28756,28777,28782,28798,28802,28807,28836,28841,28887,28892,28936,28944,28961,28966,28982,28987,29001,29004,29007,29010,29013,29042,29045,29050,29054,29057,29060,29066,29069,29072,29075,29137,29144,29149,29152,29170,29174,29177,29194,29197,29200,29214],[10,28526,28522],{"id":28527},"_3docker直通",[24,28529,28530],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[69,28532,28534],{"id":28533},"_31usb直通","3.1.USB直通",[24,28536,28537],{},[19,28538],{"alt":308,"src":28539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[140,28541,28542],{},[143,28543,28544],{},"方法一(不是很推荐新手)：",[24,28546,28547],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[303,28549,28551],{"className":25618,"code":28550,"language":25620,"meta":308,"style":308},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[119,28552,28553,28561,28566],{"__ignoreMap":308},[312,28554,28555,28558],{"class":314,"line":315},[312,28556,28557],{"class":332},"ls",[312,28559,28560],{"class":339}," \u002Fdev\n",[312,28562,28563],{"class":314,"line":171},[312,28564,28565],{"class":318},"#例如\n",[312,28567,28568,28571,28573],{"class":314,"line":274},[312,28569,28570],{"class":324},"--device",[312,28572,336],{"class":1436},[312,28574,28575],{"class":339},"\u002Fdev\u002Ftty_USB0\n",[140,28577,28578],{"start":171},[143,28579,28580],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[303,28582,28584],{"className":25618,"code":28583,"language":25620,"meta":308,"style":308},"--privileged\n",[119,28585,28586],{"__ignoreMap":308},[312,28587,28588],{"class":314,"line":315},[312,28589,28583],{"class":332},[24,28591,28592],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[24,28594,28595],{},[19,28596],{"alt":308,"src":28597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[69,28599,28601],{"id":28600},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[24,28603,28604,28605,28608],{},"NVIDIA Container Toolkit使用户 ",[27,28606,28607],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[24,28610,28611],{},[19,28612],{"alt":308,"src":28613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[24,28615,28616],{},[164,28617,28618],{"href":28618,"rel":28619},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[168],[23796,28621,28623],{"id":28622},"_321安装","3.2.1.安装",[24,28625,28626],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[1505,28628,28630],{"id":28629},"_3211ubuntu","3.2.1.1.Ubuntu",[140,28632,28633],{},[143,28634,28635],{},"配置存储库 并更新",[303,28637,28639],{"className":25618,"code":28638,"language":25620,"meta":308,"style":308},"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",[119,28640,28641,28670,28690,28702,28714,28720],{"__ignoreMap":308},[312,28642,28643,28646,28649,28652,28654,28656,28659,28662,28665,28668],{"class":314,"line":315},[312,28644,28645],{"class":332},"curl",[312,28647,28648],{"class":488}," -fsSL",[312,28650,28651],{"class":339}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[312,28653,26905],{"class":1436},[312,28655,27869],{"class":332},[312,28657,28658],{"class":339}," gpg",[312,28660,28661],{"class":488}," --dearmor",[312,28663,28664],{"class":488}," -o",[312,28666,28667],{"class":339}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[312,28669,26474],{"class":488},[312,28671,28672,28675,28677,28680,28683,28686,28688],{"class":314,"line":171},[312,28673,28674],{"class":324},"  && ",[312,28676,28645],{"class":332},[312,28678,28679],{"class":488}," -s",[312,28681,28682],{"class":488}," -L",[312,28684,28685],{"class":339}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[312,28687,26905],{"class":1436},[312,28689,26474],{"class":488},[312,28691,28692,28695,28698,28700],{"class":314,"line":274},[312,28693,28694],{"class":332},"    sed",[312,28696,28697],{"class":339}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[312,28699,26905],{"class":1436},[312,28701,26474],{"class":488},[312,28703,28704,28707,28709,28712],{"class":314,"line":298},[312,28705,28706],{"class":332},"    sudo",[312,28708,28012],{"class":339},[312,28710,28711],{"class":339}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[312,28713,26474],{"class":488},[312,28715,28716,28718],{"class":314,"line":974},[312,28717,28674],{"class":324},[312,28719,27971],{"class":488},[312,28721,28722,28724,28726],{"class":314,"line":980},[312,28723,28706],{"class":332},[312,28725,27872],{"class":339},[312,28727,28038],{"class":339},[140,28729,28730],{"start":171},[143,28731,28732],{},"安装nvidia-docker2",[303,28734,28736],{"className":25618,"code":28735,"language":25620,"meta":308,"style":308},"sudo apt-get install -y nvidia-docker2\n",[119,28737,28738],{"__ignoreMap":308},[312,28739,28740,28742,28744,28746,28748],{"class":314,"line":315},[312,28741,26372],{"class":332},[312,28743,27872],{"class":339},[312,28745,25630],{"class":339},[312,28747,28196],{"class":488},[312,28749,28750],{"class":339}," nvidia-docker2\n",[140,28752,28753],{"start":274},[143,28754,28755],{},"使用nvidia-ctk命令配置container runtime",[303,28757,28759],{"className":25618,"code":28758,"language":25620,"meta":308,"style":308},"sudo nvidia-ctk runtime configure --runtime=docker\n",[119,28760,28761],{"__ignoreMap":308},[312,28762,28763,28765,28768,28771,28774],{"class":314,"line":315},[312,28764,26372],{"class":332},[312,28766,28767],{"class":339}," nvidia-ctk",[312,28769,28770],{"class":339}," runtime",[312,28772,28773],{"class":339}," configure",[312,28775,28776],{"class":488}," --runtime=docker\n",[140,28778,28779],{"start":298},[143,28780,28781],{},"重启docker服务:",[303,28783,28785],{"className":25618,"code":28784,"language":25620,"meta":308,"style":308},"sudo systemctl restart docker\n",[119,28786,28787],{"__ignoreMap":308},[312,28788,28789,28791,28793,28796],{"class":314,"line":315},[312,28790,26372],{"class":332},[312,28792,28309],{"class":339},[312,28794,28795],{"class":339}," restart",[312,28797,28288],{"class":339},[1505,28799,28801],{"id":28800},"_3212fedora","3.2.1.2.Fedora",[140,28803,28804],{},[143,28805,28806],{},"配置存储库",[303,28808,28810],{"className":25618,"code":28809,"language":25620,"meta":308,"style":308},"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",[119,28811,28812,28827],{"__ignoreMap":308},[312,28813,28814,28816,28818,28820,28823,28825],{"class":314,"line":315},[312,28815,28645],{"class":332},[312,28817,28679],{"class":488},[312,28819,28682],{"class":488},[312,28821,28822],{"class":339}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[312,28824,26905],{"class":1436},[312,28826,26474],{"class":488},[312,28828,28829,28831,28833],{"class":314,"line":171},[312,28830,26372],{"class":332},[312,28832,28012],{"class":339},[312,28834,28835],{"class":339}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[140,28837,28838],{"start":171},[143,28839,28840],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[303,28842,28844],{"className":25618,"code":28843,"language":25620,"meta":308,"style":308},"# 如果是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",[119,28845,28846,28851,28865,28869,28874],{"__ignoreMap":308},[312,28847,28848],{"class":314,"line":315},[312,28849,28850],{"class":318},"# 如果是RHEL或者Rocky（DNF4）\n",[312,28852,28853,28855,28857,28859,28862],{"class":314,"line":171},[312,28854,26372],{"class":332},[312,28856,28111],{"class":339},[312,28858,28210],{"class":339},[312,28860,28861],{"class":488}," --add-repo",[312,28863,28864],{"class":339}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[312,28866,28867],{"class":314,"line":274},[312,28868,4205],{"emptyLinePlaceholder":1881},[312,28870,28871],{"class":314,"line":298},[312,28872,28873],{"class":318},"# 如果是Feodra41+（DNF5）\n",[312,28875,28876,28878,28880,28882,28884],{"class":314,"line":974},[312,28877,26372],{"class":332},[312,28879,28111],{"class":339},[312,28881,28210],{"class":339},[312,28883,28213],{"class":339},[312,28885,28886],{"class":488}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[140,28888,28889],{"start":274},[143,28890,28891],{},"安装NVIDIA Container Toolki包",[303,28893,28895],{"className":25618,"code":28894,"language":25620,"meta":308,"style":308},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[119,28896,28897,28902,28915,28919,28924],{"__ignoreMap":308},[312,28898,28899],{"class":314,"line":315},[312,28900,28901],{"class":318},"# 如果是RHEL或者Rocky\n",[312,28903,28904,28906,28908,28910,28912],{"class":314,"line":171},[312,28905,26372],{"class":332},[312,28907,28111],{"class":339},[312,28909,25630],{"class":339},[312,28911,28196],{"class":488},[312,28913,28914],{"class":339}," nvidia-container-toolkit\n",[312,28916,28917],{"class":314,"line":274},[312,28918,4205],{"emptyLinePlaceholder":1881},[312,28920,28921],{"class":314,"line":298},[312,28922,28923],{"class":318},"# 如果是Fedora\n",[312,28925,28926,28928,28930,28932,28934],{"class":314,"line":974},[312,28927,26372],{"class":332},[312,28929,28111],{"class":339},[312,28931,25630],{"class":339},[312,28933,28196],{"class":488},[312,28935,28914],{"class":339},[140,28937,28938],{"start":298},[143,28939,28940,28941,28943],{},"安装nvidia-docker2 ： 在Fedora上使用",[119,28942,28086],{},"进行安装",[303,28945,28947],{"className":25618,"code":28946,"language":25620,"meta":308,"style":308},"sudo dnf install -y nvidia-docker2\n",[119,28948,28949],{"__ignoreMap":308},[312,28950,28951,28953,28955,28957,28959],{"class":314,"line":315},[312,28952,26372],{"class":332},[312,28954,28111],{"class":339},[312,28956,25630],{"class":339},[312,28958,28196],{"class":488},[312,28960,28750],{"class":339},[140,28962,28963],{"start":974},[143,28964,28965],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[303,28967,28968],{"className":25618,"code":28758,"language":25620,"meta":308,"style":308},[119,28969,28970],{"__ignoreMap":308},[312,28971,28972,28974,28976,28978,28980],{"class":314,"line":315},[312,28973,26372],{"class":332},[312,28975,28767],{"class":339},[312,28977,28770],{"class":339},[312,28979,28773],{"class":339},[312,28981,28776],{"class":488},[140,28983,28984],{"start":980},[143,28985,28986],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[303,28988,28989],{"className":25618,"code":28784,"language":25620,"meta":308,"style":308},[119,28990,28991],{"__ignoreMap":308},[312,28992,28993,28995,28997,28999],{"class":314,"line":315},[312,28994,26372],{"class":332},[312,28996,28309],{"class":339},[312,28998,28795],{"class":339},[312,29000,28288],{"class":339},[24,29002,29003],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[24,29005,29006],{},"方法：",[24,29008,29009],{},"1️⃣nvidia-smi",[24,29011,29012],{},"2️⃣运行nvidia cuda 容器进行测试",[303,29014,29016],{"className":25618,"code":29015,"language":25620,"meta":308,"style":308},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[119,29017,29018],{"__ignoreMap":308},[312,29019,29020,29022,29024,29027,29030,29033,29036,29039],{"class":314,"line":315},[312,29021,26372],{"class":332},[312,29023,28116],{"class":339},[312,29025,29026],{"class":339}," run",[312,29028,29029],{"class":488}," --rm",[312,29031,29032],{"class":488}," --gpus",[312,29034,29035],{"class":339}," all",[312,29037,29038],{"class":339}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[312,29040,29041],{"class":339}," nvidia-smi\n",[24,29043,29044],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[24,29046,29047],{},[19,29048],{"alt":308,"src":29049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[69,29051,29053],{"id":29052},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[24,29055,29056],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[24,29058,29059],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[24,29061,29062],{},[164,29063,29064],{"href":29064,"rel":29065},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[168],[24,29067,29068],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[24,29070,29071],{},"我们只需要找到对应的Docker镜像当底包即可。",[24,29073,29074],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[2086,29076,29077,29093],{},[2089,29078,29079],{},[2092,29080,29081,29084,29087,29090],{},[2095,29082,29083],{"align":1374},"镜像类型",[2095,29085,29086],{"align":1374},"适用场景",[2095,29088,29089],{"align":1374},"示例标签",[2095,29091,29092],{"align":1374},"大小",[2132,29094,29095,29109,29123],{},[2092,29096,29097,29100,29103,29106],{},[2137,29098,29099],{"align":1374},"base",[2137,29101,29102],{"align":1374},"仅需 CUDA 运行时库",[2137,29104,29105],{"align":1374},"12.4.0-base-ubuntu22.04",[2137,29107,29108],{"align":1374},"~240MB",[2092,29110,29111,29114,29117,29120],{},[2137,29112,29113],{"align":1374},"runtime",[2137,29115,29116],{"align":1374},"部署编译后的应用（含数学库）",[2137,29118,29119],{"align":1374},"12.4.0-runtime-ubuntu22.04",[2137,29121,29122],{"align":1374},"~2GB",[2092,29124,29125,29128,29131,29134],{},[2137,29126,29127],{"align":1374},"devel",[2137,29129,29130],{"align":1374},"开发环境（含编译工具）",[2137,29132,29133],{"align":1374},"12.4.0-devel-ubuntu22.04",[2137,29135,29136],{"align":1374},"~3GB",[24,29138,29139,29140,29143],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[119,29141,29142],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[24,29145,29146],{},[19,29147],{"alt":308,"src":29148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[24,29150,29151],{},"在dockerfile里就可以开头这么写：",[303,29153,29155],{"className":25618,"code":29154,"language":25620,"meta":308,"style":308},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[119,29156,29157,29162],{"__ignoreMap":308},[312,29158,29159],{"class":314,"line":315},[312,29160,29161],{"class":318},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[312,29163,29164,29167],{"class":314,"line":171},[312,29165,29166],{"class":332},"FROM",[312,29168,29169],{"class":339}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[69,29171,29173],{"id":29172},"_34配置以太网","3.4.配置以太网",[24,29175,29176],{},"指定网络模式",[303,29178,29180],{"className":25618,"code":29179,"language":25620,"meta":308,"style":308},"--net=host \\\n",[119,29181,29182],{"__ignoreMap":308},[312,29183,29184,29187,29189,29192],{"class":314,"line":315},[312,29185,29186],{"class":324},"--net",[312,29188,336],{"class":1436},[312,29190,29191],{"class":339},"host",[312,29193,26474],{"class":332},[24,29195,29196],{},"启动参数里加上这行即可。具体在下方",[24,29198,29199],{},"--net选项：指定网络模式，该选项有以下参数可选：",[243,29201,29202,29205,29208,29211],{},[143,29203,29204],{},"--net=bridge:默认选项，表示连接到默认的网桥",[143,29206,29207],{},"--net=host:容器使用宿主机的网络",[143,29209,29210],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[143,29212,29213],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1856,29215,29216],{},"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":308,"searchDepth":171,"depth":171,"links":29218},[29219,29220,29221,29222],{"id":28533,"depth":274,"text":28534},{"id":28600,"depth":274,"text":28601},{"id":29052,"depth":274,"text":29053},{"id":29172,"depth":274,"text":29173},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28522,"description":28530},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29229,"title":29230,"body":29231,"description":29238,"extension":1879,"meta":29244,"navigation":1881,"path":29245,"seo":29246,"stem":29247,"__hash__":29248},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29232,"toc":29242},[29233,29236,29239],[10,29234,29230],{"id":29235},"_4dockerhub换源",[24,29237,29238],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[24,29240,29241],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":308,"searchDepth":171,"depth":171,"links":29243},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29230,"description":29238},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29250,"title":29251,"body":29252,"description":308,"extension":1879,"meta":30264,"navigation":1881,"path":30265,"seo":30266,"stem":30267,"__hash__":30268},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29253,"toc":30259},[29254,29257,29261,29267,29271,29274,29614,29617,29620,29623,29628,29633,29636,29639,29642,29645,29664,29667,29678,29684,29866,29876,29892,30155,30157,30182,30197,30206,30256],[10,29255,29251],{"id":29256},"_5docker命令学习",[69,29258,29260],{"id":29259},"_51参考文档","5.1.参考文档",[24,29262,29263],{},[164,29264,29265],{"href":29265,"rel":29266},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[168],[69,29268,29270],{"id":29269},"_52常用命令","5.2.常用命令",[24,29272,29273],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[2086,29275,29276,29289],{},[2089,29277,29278],{},[2092,29279,29280,29283,29286],{},[2095,29281,29282],{"align":1374},"命令",[2095,29284,29285],{"align":1374},"描述",[2095,29287,29288],{"align":1374},"示例",[2132,29290,29291,29302,29313,29324,29335,29346,29357,29368,29378,29389,29400,29411,29421,29432,29443,29454,29464,29474,29484,29494,29505,29516,29527,29538,29549,29560,29570,29581,29592,29603],{},[2092,29292,29293,29296,29299],{},[2137,29294,29295],{"align":1374},"docker run",[2137,29297,29298],{"align":1374},"创建并启动一个新的容器。",[2137,29300,29301],{"align":1374},"docker run -it ubuntu bash",[2092,29303,29304,29307,29310],{},[2137,29305,29306],{"align":1374},"docker build",[2137,29308,29309],{"align":1374},"通过指定的 Dockerfile 创建一个新的镜像。",[2137,29311,29312],{"align":1374},"docker build -t myimage .",[2092,29314,29315,29318,29321],{},[2137,29316,29317],{"align":1374},"docker pull",[2137,29319,29320],{"align":1374},"从 Docker 仓库拉取镜像。",[2137,29322,29323],{"align":1374},"docker pull ubuntu",[2092,29325,29326,29329,29332],{},[2137,29327,29328],{"align":1374},"docker push",[2137,29330,29331],{"align":1374},"将本地镜像推送到 Docker 仓库。",[2137,29333,29334],{"align":1374},"docker push myimage",[2092,29336,29337,29340,29343],{},[2137,29338,29339],{"align":1374},"docker stop",[2137,29341,29342],{"align":1374},"停止一个正在运行的容器。",[2137,29344,29345],{"align":1374},"docker stop container_id",[2092,29347,29348,29351,29354],{},[2137,29349,29350],{"align":1374},"docker start",[2137,29352,29353],{"align":1374},"启动一个已经存在的容器。",[2137,29355,29356],{"align":1374},"docker start container_id",[2092,29358,29359,29362,29365],{},[2137,29360,29361],{"align":1374},"docker restart",[2137,29363,29364],{"align":1374},"重新启动容器。",[2137,29366,29367],{"align":1374},"docker restart container_id",[2092,29369,29370,29373,29376],{},[2137,29371,29372],{"align":1374},"docker ps",[2137,29374,29375],{"align":1374},"列出当前正在运行的容器。",[2137,29377,29372],{"align":1374},[2092,29379,29380,29383,29386],{},[2137,29381,29382],{"align":1374},"docker rm",[2137,29384,29385],{"align":1374},"删除一个或多个停止的容器。",[2137,29387,29388],{"align":1374},"docker rm container_id",[2092,29390,29391,29394,29397],{},[2137,29392,29393],{"align":1374},"docker exec",[2137,29395,29396],{"align":1374},"在一个正在运行的容器中执行命令。",[2137,29398,29399],{"align":1374},"docker exec -it container_id bash",[2092,29401,29402,29405,29408],{},[2137,29403,29404],{"align":1374},"docker logs",[2137,29406,29407],{"align":1374},"查看容器的日志输出。",[2137,29409,29410],{"align":1374},"docker logs container_id",[2092,29412,29413,29416,29419],{},[2137,29414,29415],{"align":1374},"docker images",[2137,29417,29418],{"align":1374},"列出本地所有镜像。",[2137,29420,29415],{"align":1374},[2092,29422,29423,29426,29429],{},[2137,29424,29425],{"align":1374},"docker rmi",[2137,29427,29428],{"align":1374},"删除一个或多个镜像。",[2137,29430,29431],{"align":1374},"docker rmi myimage",[2092,29433,29434,29437,29440],{},[2137,29435,29436],{"align":1374},"docker network",[2137,29438,29439],{"align":1374},"管理 Docker 网络。",[2137,29441,29442],{"align":1374},"docker network ls",[2092,29444,29445,29448,29451],{},[2137,29446,29447],{"align":1374},"docker volume",[2137,29449,29450],{"align":1374},"管理 Docker 数据卷。",[2137,29452,29453],{"align":1374},"docker volume ls",[2092,29455,29456,29459,29462],{},[2137,29457,29458],{"align":1374},"docker-compose up",[2137,29460,29461],{"align":1374},"启动 docker-compose.yml 中定义的所有服务。",[2137,29463,29458],{"align":1374},[2092,29465,29466,29469,29472],{},[2137,29467,29468],{"align":1374},"docker-compose down",[2137,29470,29471],{"align":1374},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[2137,29473,29468],{"align":1374},[2092,29475,29476,29479,29482],{},[2137,29477,29478],{"align":1374},"docker info",[2137,29480,29481],{"align":1374},"显示 Docker 系统的详细信息。",[2137,29483,29478],{"align":1374},[2092,29485,29486,29489,29492],{},[2137,29487,29488],{"align":1374},"docker stats",[2137,29490,29491],{"align":1374},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[2137,29493,29488],{"align":1374},[2092,29495,29496,29499,29502],{},[2137,29497,29498],{"align":1374},"docker inspect",[2137,29500,29501],{"align":1374},"查看容器或镜像的详细信息（JSON 格式）。",[2137,29503,29504],{"align":1374},"docker inspect container_id",[2092,29506,29507,29510,29513],{},[2137,29508,29509],{"align":1374},"docker save",[2137,29511,29512],{"align":1374},"将一个镜像保存为 tar 文件。",[2137,29514,29515],{"align":1374},"docker save -o myimage.tar myimage",[2092,29517,29518,29521,29524],{},[2137,29519,29520],{"align":1374},"docker load",[2137,29522,29523],{"align":1374},"从 tar 文件中加载镜像。",[2137,29525,29526],{"align":1374},"docker load -i myimage.tar",[2092,29528,29529,29532,29535],{},[2137,29530,29531],{"align":1374},"docker tag",[2137,29533,29534],{"align":1374},"为镜像添加标签（tag）。",[2137,29536,29537],{"align":1374},"docker tag myimage myimage:v1",[2092,29539,29540,29543,29546],{},[2137,29541,29542],{"align":1374},"docker buildx build",[2137,29544,29545],{"align":1374},"使用 Buildx 构建多架构镜像。",[2137,29547,29548],{"align":1374},"docker buildx build -t myimage .",[2092,29550,29551,29554,29557],{},[2137,29552,29553],{"align":1374},"docker buildx create",[2137,29555,29556],{"align":1374},"创建一个新的 Buildx 构建实例。",[2137,29558,29559],{"align":1374},"docker buildx create –use",[2092,29561,29562,29565,29568],{},[2137,29563,29564],{"align":1374},"docker buildx ls",[2137,29566,29567],{"align":1374},"列出所有可用的 Buildx 构建实例。",[2137,29569,29564],{"align":1374},[2092,29571,29572,29575,29578],{},[2137,29573,29574],{"align":1374},"docker buildx use",[2137,29576,29577],{"align":1374},"设置当前的 Buildx 构建实例。",[2137,29579,29580],{"align":1374},"docker buildx use mybuilder",[2092,29582,29583,29586,29589],{},[2137,29584,29585],{"align":1374},"docker buildx bake",[2137,29587,29588],{"align":1374},"使用 Bake 文件批量构建镜像。",[2137,29590,29591],{"align":1374},"docker buildx bake -f bake.hcl",[2092,29593,29594,29597,29600],{},[2137,29595,29596],{"align":1374},"docker buildx build –push",[2137,29598,29599],{"align":1374},"构建镜像并推送到镜像仓库。",[2137,29601,29602],{"align":1374},"docker buildx build –push -t myimage .",[2092,29604,29605,29608,29611],{},[2137,29606,29607],{"align":1374},"docker buildx build –platform",[2137,29609,29610],{"align":1374},"构建镜像并为多个平台生成支持。",[2137,29612,29613],{"align":1374},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[24,29615,29616],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[24,29618,29619],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[24,29621,29622],{},"docker images 可以查看已经下载的镜像",[24,29624,29625],{},[19,29626],{"alt":308,"src":29627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[24,29629,29630],{},[27,29631,29632],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[24,29634,29635],{},"docker rmi $(docker images -q) 删除所有的镜像",[24,29637,29638],{},"docker container logs 查看容器日志",[24,29640,29641],{},"docker top 查看容器里的进程",[24,29643,29644],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[303,29646,29648],{"className":25618,"code":29647,"language":25620,"meta":308,"style":308},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[119,29649,29650],{"__ignoreMap":308},[312,29651,29652,29655,29658,29661],{"class":314,"line":315},[312,29653,29654],{"class":332},"如：docker",[312,29656,29657],{"class":339}," cp",[312,29659,29660],{"class":339}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[312,29662,29663],{"class":339}," \u002Fmydata\u002Fnginx\n",[24,29665,29666],{},"docker run时在启动容器的时候会有几个常用的选项：",[243,29668,29669,29672,29675],{},[143,29670,29671],{},"-d选项：表示后台运行",[143,29673,29674],{},"-P选项：随机端口映射",[143,29676,29677],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[69,29679,29681],{"id":29680},"_53run命令的参数非常重要",[27,29682,29683],{},"5.3.run命令的参数（非常重要）",[2086,29685,29686,29699],{},[2089,29687,29688],{},[2092,29689,29690,29693,29696],{},[2095,29691,29692],{"align":1374},"参数\u002F配置",[2095,29694,29695],{"align":1374},"功能说明",[2095,29697,29698],{"align":1374},"重要性与参考依据",[2132,29700,29701,29712,29723,29734,29745,29756,29767,29778,29789,29800,29811,29822,29833,29844,29855],{},[2092,29702,29703,29706,29709],{},[2137,29704,29705],{"align":1374},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[2137,29707,29708],{"align":1374},"指定容器名称，便于后续管理",[2137,29710,29711],{"align":1374},"替代随机生成的容器名。",[2092,29713,29714,29717,29720],{},[2137,29715,29716],{"align":1374},"–gpus all",[2137,29718,29719],{"align":1374},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[2137,29721,29722],{"align":1374},"用于CUDA加速等GPU依赖任务。",[2092,29724,29725,29728,29731],{},[2137,29726,29727],{"align":1374},"-e NVIDIA_DRIVER_CAPABILITIES=all",[2137,29729,29730],{"align":1374},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[2137,29732,29733],{"align":1374},"确保容器内GPU功能完整67。",[2092,29735,29736,29739,29742],{},[2137,29737,29738],{"align":1374},"-dit",[2137,29740,29741],{"align":1374},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[2137,29743,29744],{"align":1374},"允许容器在后台运行并支持交互操作。",[2092,29746,29747,29750,29753],{},[2137,29748,29749],{"align":1374},"–privileged",[2137,29751,29752],{"align":1374},"赋予容器完全主机权限（可访问设备、内核模块等）",[2137,29754,29755],{"align":1374},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[2092,29757,29758,29761,29764],{},[2137,29759,29760],{"align":1374},"–net=host",[2137,29762,29763],{"align":1374},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[2137,29765,29766],{"align":1374},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[2092,29768,29769,29772,29775],{},[2137,29770,29771],{"align":1374},"–group-add audio–group-add video–group-add dialout",[2137,29773,29774],{"align":1374},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[2137,29776,29777],{"align":1374},"避免权限问题（如避免无法调用摄像头、麦克风）。",[2092,29779,29780,29783,29786],{},[2137,29781,29782],{"align":1374},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[2137,29784,29785],{"align":1374},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[2137,29787,29788],{"align":1374},"支持容器内运行图形界面应用（如OpenCV可视化）。",[2092,29790,29791,29794,29797],{},[2137,29792,29793],{"align":1374},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[2137,29795,29796],{"align":1374},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[2137,29798,29799],{"align":1374},"实现容器内图形显示。",[2092,29801,29802,29805,29808],{},[2137,29803,29804],{"align":1374},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[2137,29806,29807],{"align":1374},"挂载X11认证文件（只读）",[2137,29809,29810],{"align":1374},"确保容器有权连接宿主机显示服务。",[2092,29812,29813,29816,29819],{},[2137,29814,29815],{"align":1374},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[2137,29817,29818],{"align":1374},"挂载Wayland显示协议相关目录",[2137,29820,29821],{"align":1374},"支持Wayland协议的图形显示。",[2092,29823,29824,29827,29830],{},[2137,29825,29826],{"align":1374},"–ulimit nofile=1024:524288",[2137,29828,29829],{"align":1374},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[2137,29831,29832],{"align":1374},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[2092,29834,29835,29838,29841],{},[2137,29836,29837],{"align":1374},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[2137,29839,29840],{"align":1374},"挂载宿主机用户目录到容器内同名路径",[2137,29842,29843],{"align":1374},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[2092,29845,29846,29849,29852],{},[2137,29847,29848],{"align":1374},"-w \u002Fhome\u002Ftungchiahui",[2137,29850,29851],{"align":1374},"设置容器启动后的默认工作目录",[2137,29853,29854],{"align":1374},"直接进入项目路径，方便执行命令2324。",[2092,29856,29857,29860,29863],{},[2137,29858,29859],{"align":1374},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[2137,29861,29862],{"align":1374},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[2137,29864,29865],{"align":1374},"提供预配置的深度学习与机器人开发环境。",[24,29867,29868,29869,29871,29872,29875],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[119,29870,26372],{},"加不加",[119,29873,29874],{},"sudo -E","都无所谓。",[24,29877,29878,29879,29881,29882,29884,29885,29888,29889,29891],{},"用户已经被加到docker组了，不用",[119,29880,26372],{},"也行跑，其次，",[119,29883,26372],{},"运行的话，你的",[119,29886,29887],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[119,29890,29887],{},"更不可能变了。",[303,29893,29895],{"className":25618,"code":29894,"language":25620,"meta":308,"style":308},"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",[119,29896,29897,29910,29920,29930,29942,29949,29956,29963,29973,29982,29991,30005,30017,30029,30038,30048,30057,30072,30105,30132,30143,30150],{"__ignoreMap":308},[312,29898,29899,29901,29903,29905,29908],{"class":314,"line":315},[312,29900,26372],{"class":332},[312,29902,28116],{"class":339},[312,29904,29026],{"class":339},[312,29906,29907],{"class":488}," --name=ros_opencv_cuda",[312,29909,26474],{"class":488},[312,29911,29912,29915,29918],{"class":314,"line":171},[312,29913,29914],{"class":324},"--gpus ",[312,29916,29917],{"class":339},"all",[312,29919,26474],{"class":488},[312,29921,29922,29925,29928],{"class":314,"line":274},[312,29923,29924],{"class":324},"-e ",[312,29926,29927],{"class":339},"NVIDIA_DRIVER_CAPABILITIES=all",[312,29929,26474],{"class":488},[312,29931,29932,29934,29937,29940],{"class":314,"line":298},[312,29933,29924],{"class":324},[312,29935,29936],{"class":339},"DISPLAY=",[312,29938,29939],{"class":324},"$DISPLAY ",[312,29941,27971],{"class":488},[312,29943,29944,29947],{"class":314,"line":974},[312,29945,29946],{"class":324},"-dit ",[312,29948,27971],{"class":488},[312,29950,29951,29954],{"class":314,"line":980},[312,29952,29953],{"class":324},"--privileged ",[312,29955,27971],{"class":488},[312,29957,29958,29961],{"class":314,"line":997},[312,29959,29960],{"class":324},"--net=host ",[312,29962,27971],{"class":488},[312,29964,29965,29968,29971],{"class":314,"line":1003},[312,29966,29967],{"class":324},"--group-add ",[312,29969,29970],{"class":339},"audio",[312,29972,26474],{"class":488},[312,29974,29975,29977,29980],{"class":314,"line":1020},[312,29976,29967],{"class":324},[312,29978,29979],{"class":339},"video",[312,29981,26474],{"class":488},[312,29983,29984,29986,29989],{"class":314,"line":1026},[312,29985,29967],{"class":324},[312,29987,29988],{"class":339},"dialout",[312,29990,26474],{"class":488},[312,29992,29993,29995,29998,30000,30003],{"class":314,"line":3418},[312,29994,29924],{"class":324},[312,29996,29997],{"class":339},"XAUTHORITY=",[312,29999,29887],{"class":324},[312,30001,30002],{"class":339},"\u002F.Xauthority",[312,30004,26474],{"class":488},[312,30006,30007,30009,30012,30015],{"class":314,"line":3423},[312,30008,29924],{"class":324},[312,30010,30011],{"class":339},"WAYLAND_DISPLAY=",[312,30013,30014],{"class":324},"$WAYLAND_DISPLAY ",[312,30016,27971],{"class":488},[312,30018,30019,30021,30024,30027],{"class":314,"line":3429},[312,30020,29924],{"class":324},[312,30022,30023],{"class":339},"XDG_RUNTIME_DIR=",[312,30025,30026],{"class":324},"$XDG_RUNTIME_DIR ",[312,30028,27971],{"class":488},[312,30030,30031,30033,30036],{"class":314,"line":3434},[312,30032,29924],{"class":324},[312,30034,30035],{"class":339},"QT_QPA_PLATFORM=xcb",[312,30037,26474],{"class":488},[312,30039,30040,30043,30046],{"class":314,"line":3448},[312,30041,30042],{"class":324},"-v ",[312,30044,30045],{"class":339},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[312,30047,26474],{"class":488},[312,30049,30050,30052,30055],{"class":314,"line":3453},[312,30051,30042],{"class":324},[312,30053,30054],{"class":339},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[312,30056,26474],{"class":488},[312,30058,30059,30062,30065,30067,30070],{"class":314,"line":3459},[312,30060,30061],{"class":324},"-v $HOME",[312,30063,30064],{"class":339},"\u002F.Xauthority:",[312,30066,29887],{"class":324},[312,30068,30069],{"class":339},"\u002F.Xauthority:ro",[312,30071,26474],{"class":488},[312,30073,30074,30076,30079,30081,30084,30087,30089,30092,30094,30096,30098,30100,30103],{"class":314,"line":3480},[312,30075,30042],{"class":324},[312,30077,30078],{"class":339},"\u002Frun\u002Fuser\u002F",[312,30080,26895],{"class":324},[312,30082,30083],{"class":332},"id",[312,30085,30086],{"class":488}," -u",[312,30088,2374],{"class":324},[312,30090,30091],{"class":339},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[312,30093,26895],{"class":324},[312,30095,30083],{"class":332},[312,30097,30086],{"class":488},[312,30099,2374],{"class":324},[312,30101,30102],{"class":339},"\u002Fwayland-0",[312,30104,26474],{"class":488},[312,30106,30107,30109,30111,30113,30115,30117,30119,30122,30124,30126,30128,30130],{"class":314,"line":3485},[312,30108,30042],{"class":324},[312,30110,30078],{"class":339},[312,30112,26895],{"class":324},[312,30114,30083],{"class":332},[312,30116,30086],{"class":488},[312,30118,2374],{"class":324},[312,30120,30121],{"class":339},":\u002Frun\u002Fuser\u002F",[312,30123,26895],{"class":324},[312,30125,30083],{"class":332},[312,30127,30086],{"class":488},[312,30129,1583],{"class":324},[312,30131,27971],{"class":488},[312,30133,30134,30136,30138,30141],{"class":314,"line":3499},[312,30135,30061],{"class":324},[312,30137,2803],{"class":339},[312,30139,30140],{"class":324},"$HOME ",[312,30142,27971],{"class":488},[312,30144,30145,30148],{"class":314,"line":3504},[312,30146,30147],{"class":324},"-w $HOME ",[312,30149,27971],{"class":488},[312,30151,30152],{"class":314,"line":3533},[312,30153,30154],{"class":324},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[24,30156,10828],{},[140,30158,30159,30167,30170,30173],{},[143,30160,30161,15596,30163,30166],{},[119,30162,29927],{},[119,30164,30165],{},"--gpus all","没有英伟达显卡请注释。",[143,30168,30169],{},"--name后面请自己为容器起名。",[143,30171,30172],{},"最后一行仓库名称请你自己找对应的镜像填上。",[143,30174,30175,30176,30181],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25350,30177,30178],{},[27,30179,30180],{},"请不要加","。",[303,30183,30185],{"className":25618,"code":30184,"language":25620,"meta":308,"style":308},"--ulimit nofile=1024:524288 \\\n",[119,30186,30187],{"__ignoreMap":308},[312,30188,30189,30192,30195],{"class":314,"line":315},[312,30190,30191],{"class":332},"--ulimit",[312,30193,30194],{"class":339}," nofile=1024:524288",[312,30196,26474],{"class":488},[24,30198,30199,30200,30205],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25350,30201,30202],{},[27,30203,30204],{},"不建议","**.**",[303,30207,30209],{"className":25618,"code":30208,"language":25620,"meta":308,"style":308},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[119,30210,30211,30238,30247],{"__ignoreMap":308},[312,30212,30213,30216,30219,30221,30223,30225,30227,30229,30231,30234,30236],{"class":314,"line":315},[312,30214,30215],{"class":332},"--user",[312,30217,30218],{"class":324}," $(",[312,30220,30083],{"class":332},[312,30222,30086],{"class":488},[312,30224,2374],{"class":324},[312,30226,2803],{"class":339},[312,30228,26895],{"class":324},[312,30230,30083],{"class":332},[312,30232,30233],{"class":488}," -g",[312,30235,1583],{"class":324},[312,30237,27971],{"class":488},[312,30239,30240,30242,30245],{"class":314,"line":171},[312,30241,30042],{"class":324},[312,30243,30244],{"class":339},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[312,30246,26474],{"class":488},[312,30248,30249,30251,30254],{"class":314,"line":274},[312,30250,30042],{"class":324},[312,30252,30253],{"class":339},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[312,30255,26474],{"class":488},[1856,30257,30258],{},"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":308,"searchDepth":171,"depth":171,"links":30260},[30261,30262,30263],{"id":29259,"depth":274,"text":29260},{"id":29269,"depth":274,"text":29270},{"id":29680,"depth":274,"text":29683},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29251,"description":308},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30270,"title":30271,"body":30272,"description":308,"extension":1879,"meta":31895,"navigation":1881,"path":31896,"seo":31897,"stem":31898,"__hash__":31899},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30273,"toc":31890},[30274,30277,30281,30284,30506,30510,30514,30517,30623,30628,30631,30636,30639,30644,30647,30652,30655,30667,30670,30675,30682,30710,30717,30793,30798,30801,30824,30826,30901,30906,30909,30913,30921,30926,30931,30935,30946,30952,30955,30958,30982,30985,30988,31016,31019,31022,31487,31490,31495,31500,31504,31527,31532,31536,31540,31543,31546,31549,31576,31579,31582,31600,31603,31606,31628,31636,31641,31646,31650,31653,31656,31659,31662,31707,31710,31728,31731,31736,31739,31760,31763,31819,31822,31827,31831,31834,31841,31844,31847,31852,31855,31871,31874,31887],[10,30275,30271],{"id":30276},"_6手动创建docker镜像",[69,30278,30280],{"id":30279},"_61dockerfile","6.1.DockerFile",[24,30282,30283],{},"常用命令：",[2086,30285,30286,30297],{},[2089,30287,30288],{},[2092,30289,30290,30293,30295],{},[2095,30291,30292],{"align":1374},"指令",[2095,30294,27665],{"align":1374},[2095,30296,29288],{"align":1374},[2132,30298,30299,30309,30325,30336,30347,30358,30369,30380,30391,30405,30419,30430,30444,30455,30466,30480,30495],{},[2092,30300,30301,30303,30306],{},[2137,30302,29166],{"align":1374},[2137,30304,30305],{"align":1374},"指定基础镜像，是 Dockerfile 的起点",[2137,30307,30308],{"align":1374},"FROM ubuntu:22.04",[2092,30310,30311,30314,30317],{},[2137,30312,30313],{"align":1374},"LABEL",[2137,30315,30316],{"align":1374},"添加元数据（如作者、版本等）",[2137,30318,30319,30320,30324],{"align":1374},"LABEL maintainer=”",[164,30321,30323],{"href":30322},"mailto:you@example.com","you@example.com","”",[2092,30326,30327,30330,30333],{},[2137,30328,30329],{"align":1374},"ENV",[2137,30331,30332],{"align":1374},"设置环境变量",[2137,30334,30335],{"align":1374},"ENV PORT=8080",[2092,30337,30338,30341,30344],{},[2137,30339,30340],{"align":1374},"ARG",[2137,30342,30343],{"align":1374},"构建参数，只在构建期间可用",[2137,30345,30346],{"align":1374},"ARG VERSION=1.0",[2092,30348,30349,30352,30355],{},[2137,30350,30351],{"align":1374},"RUN",[2137,30353,30354],{"align":1374},"构建镜像时运行命令",[2137,30356,30357],{"align":1374},"RUN apt-get update && apt-get install -y curl",[2092,30359,30360,30363,30366],{},[2137,30361,30362],{"align":1374},"COPY",[2137,30364,30365],{"align":1374},"复制文件到镜像中",[2137,30367,30368],{"align":1374},"COPY . \u002Fapp",[2092,30370,30371,30374,30377],{},[2137,30372,30373],{"align":1374},"ADD",[2137,30375,30376],{"align":1374},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[2137,30378,30379],{"align":1374},"ADD archive.tar.gz \u002Fdata\u002F",[2092,30381,30382,30385,30388],{},[2137,30383,30384],{"align":1374},"WORKDIR",[2137,30386,30387],{"align":1374},"设置工作目录",[2137,30389,30390],{"align":1374},"WORKDIR \u002Fopt",[2092,30392,30393,30396,30399],{},[2137,30394,30395],{"align":1374},"CMD",[2137,30397,30398],{"align":1374},"设置容器启动时默认命令（可被 docker run 覆盖）",[2137,30400,30401,30402],{"align":1374},"CMD ",[312,30403,30404],{},"“node”, “index.js”",[2092,30406,30407,30410,30413],{},[2137,30408,30409],{"align":1374},"ENTRYPOINT",[2137,30411,30412],{"align":1374},"设置容器启动时固定命令（通常用于 CLI 工具等）",[2137,30414,30415,30416],{"align":1374},"ENTRYPOINT ",[312,30417,30418],{},"“python3”",[2092,30420,30421,30424,30427],{},[2137,30422,30423],{"align":1374},"EXPOSE",[2137,30425,30426],{"align":1374},"声明镜像内服务监听的端口（不会自动映射）",[2137,30428,30429],{"align":1374},"EXPOSE 80",[2092,30431,30432,30435,30438],{},[2137,30433,30434],{"align":1374},"VOLUME",[2137,30436,30437],{"align":1374},"声明数据卷挂载点",[2137,30439,30440,30441],{"align":1374},"VOLUME ",[312,30442,30443],{},"“\u002Fdata”",[2092,30445,30446,30449,30452],{},[2137,30447,30448],{"align":1374},"USER",[2137,30450,30451],{"align":1374},"设置后续命令执行的用户",[2137,30453,30454],{"align":1374},"USER appuser",[2092,30456,30457,30460,30463],{},[2137,30458,30459],{"align":1374},"ONBUILD",[2137,30461,30462],{"align":1374},"当镜像作为其他镜像基础镜像时触发的构建指令",[2137,30464,30465],{"align":1374},"ONBUILD COPY . \u002Fsrc",[2092,30467,30468,30471,30474],{},[2137,30469,30470],{"align":1374},"SHELL",[2137,30472,30473],{"align":1374},"更改默认 shell，比如将 sh -c 改为 bash -c",[2137,30475,30476,30477],{"align":1374},"SHELL ",[312,30478,30479],{},"“\u002Fbin\u002Fbash”, “-c”",[2092,30481,30482,30485,30488],{},[2137,30483,30484],{"align":1374},"HEALTHCHECK",[2137,30486,30487],{"align":1374},"定义容器运行时的健康检查命令",[2137,30489,30490,30491],{"align":1374},"`HEALTHCHECK CMD curl –fail ",[164,30492,30493],{"href":30493,"rel":30494},"http:\u002F\u002Flocalhost:8080",[168],[2092,30496,30497,30500,30503],{},[2137,30498,30499],{"align":1374},"STOPSIGNAL",[2137,30501,30502],{"align":1374},"容器停止时发送的信号",[2137,30504,30505],{"align":1374},"STOPSIGNAL SIGKILL",[69,30507,30509],{"id":30508},"_62自己创建容器","6.2.自己创建容器",[23796,30511,30513],{"id":30512},"_621手动创建","6.2.1.手动创建",[24,30515,30516],{},"在x86电脑上编译x86的：",[303,30518,30520],{"className":25618,"code":30519,"language":25620,"meta":308,"style":308},"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",[119,30521,30522,30538,30542,30555,30559,30572,30576,30589,30593,30606,30610],{"__ignoreMap":308},[312,30523,30524,30526,30529,30532,30535],{"class":314,"line":315},[312,30525,28349],{"class":332},[312,30527,30528],{"class":339}," build",[312,30530,30531],{"class":488}," -t",[312,30533,30534],{"class":339}," ros-melodic-cuda118-cudnn8-bionic:latest",[312,30536,30537],{"class":339}," .\n",[312,30539,30540],{"class":314,"line":171},[312,30541,4205],{"emptyLinePlaceholder":1881},[312,30543,30544,30546,30548,30550,30553],{"class":314,"line":274},[312,30545,28349],{"class":332},[312,30547,30528],{"class":339},[312,30549,30531],{"class":488},[312,30551,30552],{"class":339}," ros-noetic-focal:latest",[312,30554,30537],{"class":339},[312,30556,30557],{"class":314,"line":298},[312,30558,4205],{"emptyLinePlaceholder":1881},[312,30560,30561,30563,30565,30567,30570],{"class":314,"line":974},[312,30562,28349],{"class":332},[312,30564,30528],{"class":339},[312,30566,30531],{"class":488},[312,30568,30569],{"class":339}," ros-humble-jammy:latest",[312,30571,30537],{"class":339},[312,30573,30574],{"class":314,"line":980},[312,30575,4205],{"emptyLinePlaceholder":1881},[312,30577,30578,30580,30582,30584,30587],{"class":314,"line":997},[312,30579,28349],{"class":332},[312,30581,30528],{"class":339},[312,30583,30531],{"class":488},[312,30585,30586],{"class":339}," ros-jazzy-noble:latest",[312,30588,30537],{"class":339},[312,30590,30591],{"class":314,"line":1003},[312,30592,4205],{"emptyLinePlaceholder":1881},[312,30594,30595,30597,30599,30601,30604],{"class":314,"line":1020},[312,30596,28349],{"class":332},[312,30598,30528],{"class":339},[312,30600,30531],{"class":488},[312,30602,30603],{"class":339}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[312,30605,30537],{"class":339},[312,30607,30608],{"class":314,"line":1026},[312,30609,4205],{"emptyLinePlaceholder":1881},[312,30611,30612,30614,30616,30618,30621],{"class":314,"line":3418},[312,30613,28349],{"class":332},[312,30615,30528],{"class":339},[312,30617,30531],{"class":488},[312,30619,30620],{"class":339}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[312,30622,30537],{"class":339},[24,30624,30625],{},[19,30626],{"alt":308,"src":30627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[24,30629,30630],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[24,30632,30633],{},[19,30634],{"alt":308,"src":30635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[24,30637,30638],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[140,30640,30641],{},[143,30642,30643],{},"创建 Docker Hub 账户",[24,30645,30646],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[140,30648,30649],{"start":171},[143,30650,30651],{},"登录 Docker Hub",[24,30653,30654],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[303,30656,30658],{"className":25618,"code":30657,"language":25620,"meta":308,"style":308},"docker login\n",[119,30659,30660],{"__ignoreMap":308},[312,30661,30662,30664],{"class":314,"line":315},[312,30663,28349],{"class":332},[312,30665,30666],{"class":339}," login\n",[24,30668,30669],{},"输入你的 Docker Hub 用户名和密码进行验证。",[140,30671,30672],{},[143,30673,30674],{},"为你的镜像打标签",[24,30676,30677,30678,30681],{},"Docker Hub 使用 ",[119,30679,30680],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[303,30683,30685],{"className":25618,"code":30684,"language":25620,"meta":308,"style":308},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[119,30686,30687],{"__ignoreMap":308},[312,30688,30689,30691,30694,30696,30699,30702,30705,30707],{"class":314,"line":315},[312,30690,28349],{"class":332},[312,30692,30693],{"class":339}," tag",[312,30695,30586],{"class":339},[312,30697,30698],{"class":1436}," \u003C",[312,30700,30701],{"class":339},"你的用户",[312,30703,30704],{"class":324},"名",[312,30706,2902],{"class":1436},[312,30708,30709],{"class":339},"\u002Fros-jazzy-noble:latest\n",[24,30711,30712,30713,30716],{},"例如，如果你的 Docker Hub 用户名是 ",[119,30714,30715],{},"tungchiahui","，你应该执行：",[303,30718,30720],{"className":25618,"code":30719,"language":25620,"meta":308,"style":308},"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",[119,30721,30722,30733,30737,30748,30752,30763,30767,30778,30782],{"__ignoreMap":308},[312,30723,30724,30726,30728,30730],{"class":314,"line":315},[312,30725,28349],{"class":332},[312,30727,30693],{"class":339},[312,30729,30552],{"class":339},[312,30731,30732],{"class":339}," tungchiahui\u002Fros-noetic-focal:latest\n",[312,30734,30735],{"class":314,"line":171},[312,30736,4205],{"emptyLinePlaceholder":1881},[312,30738,30739,30741,30743,30745],{"class":314,"line":274},[312,30740,28349],{"class":332},[312,30742,30693],{"class":339},[312,30744,30569],{"class":339},[312,30746,30747],{"class":339}," tungchiahui\u002Fros-humble-jammy:latest\n",[312,30749,30750],{"class":314,"line":298},[312,30751,4205],{"emptyLinePlaceholder":1881},[312,30753,30754,30756,30758,30760],{"class":314,"line":974},[312,30755,28349],{"class":332},[312,30757,30693],{"class":339},[312,30759,30586],{"class":339},[312,30761,30762],{"class":339}," tungchiahui\u002Fros-jazzy-noble:latest\n",[312,30764,30765],{"class":314,"line":980},[312,30766,4205],{"emptyLinePlaceholder":1881},[312,30768,30769,30771,30773,30775],{"class":314,"line":997},[312,30770,28349],{"class":332},[312,30772,30693],{"class":339},[312,30774,30603],{"class":339},[312,30776,30777],{"class":339}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[312,30779,30780],{"class":314,"line":1003},[312,30781,4205],{"emptyLinePlaceholder":1881},[312,30783,30784,30786,30788,30790],{"class":314,"line":1020},[312,30785,28349],{"class":332},[312,30787,30693],{"class":339},[312,30789,30620],{"class":339},[312,30791,30792],{"class":339}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[140,30794,30795],{"start":171},[143,30796,30797],{},"推送镜像到 Docker Hub",[24,30799,30800],{},"使用以下命令将镜像推送到 Docker Hub：",[303,30802,30804],{"className":25618,"code":30803,"language":25620,"meta":308,"style":308},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[119,30805,30806],{"__ignoreMap":308},[312,30807,30808,30810,30813,30815,30817,30819,30821],{"class":314,"line":315},[312,30809,28349],{"class":332},[312,30811,30812],{"class":339}," push",[312,30814,30698],{"class":1436},[312,30816,30701],{"class":339},[312,30818,30704],{"class":324},[312,30820,2902],{"class":1436},[312,30822,30823],{"class":339},"\u002Fros-noetic-jazzy-noble:latest\n",[24,30825,16434],{},[303,30827,30829],{"className":25618,"code":30828,"language":25620,"meta":308,"style":308},"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",[119,30830,30831,30839,30843,30851,30855,30863,30867,30876,30880,30888,30892],{"__ignoreMap":308},[312,30832,30833,30835,30837],{"class":314,"line":315},[312,30834,28349],{"class":332},[312,30836,30812],{"class":339},[312,30838,30732],{"class":339},[312,30840,30841],{"class":314,"line":171},[312,30842,4205],{"emptyLinePlaceholder":1881},[312,30844,30845,30847,30849],{"class":314,"line":274},[312,30846,28349],{"class":332},[312,30848,30812],{"class":339},[312,30850,30747],{"class":339},[312,30852,30853],{"class":314,"line":298},[312,30854,4205],{"emptyLinePlaceholder":1881},[312,30856,30857,30859,30861],{"class":314,"line":974},[312,30858,28349],{"class":332},[312,30860,30812],{"class":339},[312,30862,30762],{"class":339},[312,30864,30865],{"class":314,"line":980},[312,30866,4205],{"emptyLinePlaceholder":1881},[312,30868,30869,30871,30873],{"class":314,"line":997},[312,30870,28349],{"class":332},[312,30872,30812],{"class":339},[312,30874,30875],{"class":339}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[312,30877,30878],{"class":314,"line":1003},[312,30879,4205],{"emptyLinePlaceholder":1881},[312,30881,30882,30884,30886],{"class":314,"line":1020},[312,30883,28349],{"class":332},[312,30885,30812],{"class":339},[312,30887,30792],{"class":339},[312,30889,30890],{"class":314,"line":1026},[312,30891,4205],{"emptyLinePlaceholder":1881},[312,30893,30894,30896,30898],{"class":314,"line":3418},[312,30895,28349],{"class":332},[312,30897,30812],{"class":339},[312,30899,30900],{"class":339}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[140,30902,30903],{"start":274},[143,30904,30905],{},"验证推送成功",[24,30907,30908],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[24,30910,30911],{},[27,30912,5589],{},[243,30914,30915,30918],{},[143,30916,30917],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[143,30919,30920],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[24,30922,30923],{},[19,30924],{"alt":308,"src":30925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[24,30927,30928],{},[19,30929],{"alt":308,"src":30930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[23796,30932,30934],{"id":30933},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[24,30936,30937,30938,30941,30942,30945],{},"如果您想在 ",[27,30939,30940],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[27,30943,30944],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[24,30947,30948,30949],{},"1. ",[27,30950,30951],{},"启用 Docker 跨平台构建",[24,30953,30954],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[24,30956,30957],{},"第一步：启用 buildx（只需执行一次）",[303,30959,30961],{"className":25618,"code":30960,"language":25620,"meta":308,"style":308},"docker buildx create --name multiarch_builder --use\n",[119,30962,30963],{"__ignoreMap":308},[312,30964,30965,30967,30970,30973,30976,30979],{"class":314,"line":315},[312,30966,28349],{"class":332},[312,30968,30969],{"class":339}," buildx",[312,30971,30972],{"class":339}," create",[312,30974,30975],{"class":488}," --name",[312,30977,30978],{"class":339}," multiarch_builder",[312,30980,30981],{"class":488}," --use\n",[24,30983,30984],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[24,30986,30987],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[303,30989,30991],{"className":25618,"code":30990,"language":25620,"meta":308,"style":308},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[119,30992,30993],{"__ignoreMap":308},[312,30994,30995,30997,30999,31001,31004,31007,31010,31013],{"class":314,"line":315},[312,30996,28349],{"class":332},[312,30998,29026],{"class":339},[312,31000,29029],{"class":488},[312,31002,31003],{"class":488}," --privileged",[312,31005,31006],{"class":339}," multiarch\u002Fqemu-user-static",[312,31008,31009],{"class":488}," --reset",[312,31011,31012],{"class":488}," -p",[312,31014,31015],{"class":339}," yes\n",[24,31017,31018],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[24,31020,31021],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[303,31023,31025],{"className":25618,"code":31024,"language":25620,"meta":308,"style":308},"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",[119,31026,31027,31069,31073,31078,31088,31098,31107,31113,31117,31121,31131,31139,31148,31154,31158,31162,31172,31180,31189,31195,31199,31203,31213,31221,31230,31236,31240,31244,31254,31262,31271,31277,31281,31285,31295,31303,31312,31318,31322,31326,31336,31344,31353,31359,31363,31367,31377,31385,31394,31400,31404,31408,31418,31426,31435,31441,31445,31449,31460,31468,31477,31483],{"__ignoreMap":308},[312,31028,31029,31031,31033,31035,31038,31041,31043,31045,31048,31050,31052,31054,31056,31059,31062,31064,31067],{"class":314,"line":315},[312,31030,28349],{"class":332},[312,31032,30969],{"class":339},[312,31034,30528],{"class":339},[312,31036,31037],{"class":488}," --platform",[312,31039,31040],{"class":339}," linux\u002Famd64,linux\u002Farm64",[312,31042,30531],{"class":488},[312,31044,30698],{"class":1436},[312,31046,31047],{"class":339},"你的镜像",[312,31049,30704],{"class":324},[312,31051,2902],{"class":1436},[312,31053,2803],{"class":339},[312,31055,325],{"class":1436},[312,31057,31058],{"class":339},"标",[312,31060,31061],{"class":324},"签",[312,31063,2902],{"class":1436},[312,31065,31066],{"class":488}," --push",[312,31068,30537],{"class":339},[312,31070,31071],{"class":314,"line":171},[312,31072,4205],{"emptyLinePlaceholder":1881},[312,31074,31075],{"class":314,"line":274},[312,31076,31077],{"class":318},"# 例子：\n",[312,31079,31080,31082,31084,31086],{"class":314,"line":298},[312,31081,28349],{"class":332},[312,31083,30969],{"class":339},[312,31085,30528],{"class":339},[312,31087,26474],{"class":488},[312,31089,31090,31093,31096],{"class":314,"line":974},[312,31091,31092],{"class":324},"--platform ",[312,31094,31095],{"class":339},"linux\u002Famd64,linux\u002Farm64",[312,31097,26474],{"class":488},[312,31099,31100,31102,31105],{"class":314,"line":980},[312,31101,30531],{"class":488},[312,31103,31104],{"class":339}," tungchiahui\u002Fros:noetic-focal",[312,31106,26474],{"class":488},[312,31108,31109,31111],{"class":314,"line":997},[312,31110,31066],{"class":488},[312,31112,26474],{"class":488},[312,31114,31115],{"class":314,"line":1003},[312,31116,30537],{"class":339},[312,31118,31119],{"class":314,"line":1020},[312,31120,4205],{"emptyLinePlaceholder":1881},[312,31122,31123,31125,31127,31129],{"class":314,"line":1026},[312,31124,28349],{"class":332},[312,31126,30969],{"class":339},[312,31128,30528],{"class":339},[312,31130,26474],{"class":488},[312,31132,31133,31135,31137],{"class":314,"line":3418},[312,31134,31092],{"class":324},[312,31136,31095],{"class":339},[312,31138,26474],{"class":488},[312,31140,31141,31143,31146],{"class":314,"line":3423},[312,31142,30531],{"class":488},[312,31144,31145],{"class":339}," tungchiahui\u002Fros:humble-jammy",[312,31147,26474],{"class":488},[312,31149,31150,31152],{"class":314,"line":3429},[312,31151,31066],{"class":488},[312,31153,26474],{"class":488},[312,31155,31156],{"class":314,"line":3434},[312,31157,30537],{"class":339},[312,31159,31160],{"class":314,"line":3448},[312,31161,4205],{"emptyLinePlaceholder":1881},[312,31163,31164,31166,31168,31170],{"class":314,"line":3453},[312,31165,28349],{"class":332},[312,31167,30969],{"class":339},[312,31169,30528],{"class":339},[312,31171,26474],{"class":488},[312,31173,31174,31176,31178],{"class":314,"line":3459},[312,31175,31092],{"class":324},[312,31177,31095],{"class":339},[312,31179,26474],{"class":488},[312,31181,31182,31184,31187],{"class":314,"line":3480},[312,31183,30531],{"class":488},[312,31185,31186],{"class":339}," tungchiahui\u002Fros:jazzy-noble",[312,31188,26474],{"class":488},[312,31190,31191,31193],{"class":314,"line":3485},[312,31192,31066],{"class":488},[312,31194,26474],{"class":488},[312,31196,31197],{"class":314,"line":3499},[312,31198,30537],{"class":339},[312,31200,31201],{"class":314,"line":3504},[312,31202,4205],{"emptyLinePlaceholder":1881},[312,31204,31205,31207,31209,31211],{"class":314,"line":3533},[312,31206,28116],{"class":332},[312,31208,30969],{"class":339},[312,31210,30528],{"class":339},[312,31212,26474],{"class":488},[312,31214,31215,31217,31219],{"class":314,"line":3538},[312,31216,31092],{"class":324},[312,31218,31095],{"class":339},[312,31220,26474],{"class":488},[312,31222,31223,31225,31228],{"class":314,"line":3555},[312,31224,30531],{"class":488},[312,31226,31227],{"class":339}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[312,31229,26474],{"class":488},[312,31231,31232,31234],{"class":314,"line":3560},[312,31233,31066],{"class":488},[312,31235,26474],{"class":488},[312,31237,31238],{"class":314,"line":3565},[312,31239,30537],{"class":339},[312,31241,31242],{"class":314,"line":3570},[312,31243,4205],{"emptyLinePlaceholder":1881},[312,31245,31246,31248,31250,31252],{"class":314,"line":3584},[312,31247,28349],{"class":332},[312,31249,30969],{"class":339},[312,31251,30528],{"class":339},[312,31253,26474],{"class":488},[312,31255,31256,31258,31260],{"class":314,"line":3589},[312,31257,31092],{"class":324},[312,31259,31095],{"class":339},[312,31261,26474],{"class":488},[312,31263,31264,31266,31269],{"class":314,"line":4382},[312,31265,30531],{"class":488},[312,31267,31268],{"class":339}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[312,31270,26474],{"class":488},[312,31272,31273,31275],{"class":314,"line":4396},[312,31274,31066],{"class":488},[312,31276,26474],{"class":488},[312,31278,31279],{"class":314,"line":4404},[312,31280,30537],{"class":339},[312,31282,31283],{"class":314,"line":4409},[312,31284,4205],{"emptyLinePlaceholder":1881},[312,31286,31287,31289,31291,31293],{"class":314,"line":4415},[312,31288,28116],{"class":332},[312,31290,30969],{"class":339},[312,31292,30528],{"class":339},[312,31294,26474],{"class":488},[312,31296,31297,31299,31301],{"class":314,"line":4421},[312,31298,31092],{"class":324},[312,31300,31095],{"class":339},[312,31302,26474],{"class":488},[312,31304,31305,31307,31310],{"class":314,"line":4426},[312,31306,30531],{"class":488},[312,31308,31309],{"class":339}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[312,31311,26474],{"class":488},[312,31313,31314,31316],{"class":314,"line":9751},[312,31315,31066],{"class":488},[312,31317,26474],{"class":488},[312,31319,31320],{"class":314,"line":9775},[312,31321,30537],{"class":339},[312,31323,31324],{"class":314,"line":9780},[312,31325,4205],{"emptyLinePlaceholder":1881},[312,31327,31328,31330,31332,31334],{"class":314,"line":9786},[312,31329,28349],{"class":332},[312,31331,30969],{"class":339},[312,31333,30528],{"class":339},[312,31335,26474],{"class":488},[312,31337,31338,31340,31342],{"class":314,"line":9813},[312,31339,31092],{"class":324},[312,31341,31095],{"class":339},[312,31343,26474],{"class":488},[312,31345,31346,31348,31351],{"class":314,"line":9818},[312,31347,30531],{"class":488},[312,31349,31350],{"class":339}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[312,31352,26474],{"class":488},[312,31354,31355,31357],{"class":314,"line":9824},[312,31356,31066],{"class":488},[312,31358,26474],{"class":488},[312,31360,31361],{"class":314,"line":9836},[312,31362,30537],{"class":339},[312,31364,31365],{"class":314,"line":9848},[312,31366,4205],{"emptyLinePlaceholder":1881},[312,31368,31369,31371,31373,31375],{"class":314,"line":9860},[312,31370,28349],{"class":332},[312,31372,30969],{"class":339},[312,31374,30528],{"class":339},[312,31376,26474],{"class":488},[312,31378,31379,31381,31383],{"class":314,"line":11519},[312,31380,31092],{"class":324},[312,31382,31095],{"class":339},[312,31384,26474],{"class":488},[312,31386,31387,31389,31392],{"class":314,"line":11544},[312,31388,30531],{"class":488},[312,31390,31391],{"class":339}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[312,31393,26474],{"class":488},[312,31395,31396,31398],{"class":314,"line":11567},[312,31397,31066],{"class":488},[312,31399,26474],{"class":488},[312,31401,31402],{"class":314,"line":11591},[312,31403,30537],{"class":339},[312,31405,31406],{"class":314,"line":11596},[312,31407,4205],{"emptyLinePlaceholder":1881},[312,31409,31410,31412,31414,31416],{"class":314,"line":11601},[312,31411,28116],{"class":332},[312,31413,30969],{"class":339},[312,31415,30528],{"class":339},[312,31417,26474],{"class":488},[312,31419,31420,31422,31424],{"class":314,"line":11606},[312,31421,31092],{"class":324},[312,31423,31095],{"class":339},[312,31425,26474],{"class":488},[312,31427,31428,31430,31433],{"class":314,"line":11615},[312,31429,30531],{"class":488},[312,31431,31432],{"class":339}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[312,31434,26474],{"class":488},[312,31436,31437,31439],{"class":314,"line":11620},[312,31438,31066],{"class":488},[312,31440,26474],{"class":488},[312,31442,31443],{"class":314,"line":11626},[312,31444,30537],{"class":339},[312,31446,31447],{"class":314,"line":11647},[312,31448,4205],{"emptyLinePlaceholder":1881},[312,31450,31451,31454,31456,31458],{"class":314,"line":11653},[312,31452,31453],{"class":332},"  docker",[312,31455,30969],{"class":339},[312,31457,30528],{"class":339},[312,31459,26474],{"class":488},[312,31461,31462,31464,31466],{"class":314,"line":11667},[312,31463,31092],{"class":324},[312,31465,31095],{"class":339},[312,31467,26474],{"class":488},[312,31469,31470,31472,31475],{"class":314,"line":11673},[312,31471,30531],{"class":488},[312,31473,31474],{"class":339}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[312,31476,26474],{"class":488},[312,31478,31479,31481],{"class":314,"line":11700},[312,31480,31066],{"class":488},[312,31482,26474],{"class":488},[312,31484,31485],{"class":314,"line":11709},[312,31486,30537],{"class":339},[24,31488,31489],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[24,31491,31492],{},[19,31493],{"alt":308,"src":31494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[24,31496,31497],{},[19,31498],{"alt":308,"src":31499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[23796,31501,31503],{"id":31502},"_623清除构建缓存","6.2.3.清除构建缓存",[303,31505,31507],{"className":25618,"code":31506,"language":25620,"meta":308,"style":308},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[119,31508,31509,31514],{"__ignoreMap":308},[312,31510,31511],{"class":314,"line":315},[312,31512,31513],{"class":318},"# 清理BuildKit构建缓存\n",[312,31515,31516,31518,31521,31524],{"class":314,"line":171},[312,31517,28349],{"class":332},[312,31519,31520],{"class":339}," builder",[312,31522,31523],{"class":339}," prune",[312,31525,31526],{"class":488}," -f\n",[24,31528,31529],{},[19,31530],{"alt":308,"src":31531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[69,31533,31535],{"id":31534},"_63补充","6.3.补充",[23796,31537,31539],{"id":31538},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[24,31541,31542],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[24,31544,31545],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[24,31547,31548],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[303,31550,31552],{"className":25618,"code":31551,"language":25620,"meta":308,"style":308},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[119,31553,31554,31561],{"__ignoreMap":308},[312,31555,31556,31558],{"class":314,"line":315},[312,31557,29166],{"class":332},[312,31559,31560],{"class":339}," nginx\n",[312,31562,31563,31565,31568,31571,31573],{"class":314,"line":171},[312,31564,30351],{"class":332},[312,31566,31567],{"class":339}," echo",[312,31569,31570],{"class":339}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[312,31572,28018],{"class":1436},[312,31574,31575],{"class":339}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[24,31577,31578],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[24,31580,31581],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[303,31583,31585],{"className":25618,"code":31584,"language":25620,"meta":308,"style":308},"docker build -t nginx:tuling .\n",[119,31586,31587],{"__ignoreMap":308},[312,31588,31589,31591,31593,31595,31598],{"class":314,"line":315},[312,31590,28349],{"class":332},[312,31592,30528],{"class":339},[312,31594,30531],{"class":488},[312,31596,31597],{"class":339}," nginx:tuling",[312,31599,30537],{"class":339},[24,31601,31602],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[24,31604,31605],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[303,31607,31609],{"className":25618,"code":31608,"language":25620,"meta":308,"style":308},"docker run -d -p 92:80 nginx:tuling\n",[119,31610,31611],{"__ignoreMap":308},[312,31612,31613,31615,31617,31620,31622,31625],{"class":314,"line":315},[312,31614,28349],{"class":332},[312,31616,29026],{"class":339},[312,31618,31619],{"class":488}," -d",[312,31621,31012],{"class":488},[312,31623,31624],{"class":339}," 92:80",[312,31626,31627],{"class":339}," nginx:tuling\n",[24,31629,31630,31631],{},"4、访问 ",[164,31632,31635],{"href":31633,"rel":31634},"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",[168],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[24,31637,31638],{},[19,31639],{"alt":308,"src":31640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[24,31642,31643],{},[19,31644],{"alt":308,"src":31645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[23796,31647,31649],{"id":31648},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[24,31651,31652],{},"只需要知道大体流程即可",[24,31654,31655],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[24,31657,31658],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[24,31660,31661],{},"2、在Dockerfile中添加以下内容",[303,31663,31665],{"className":27887,"code":31664,"language":27889,"meta":308,"style":308},"# 基于哪个镜像\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",[119,31666,31667,31672,31677,31682,31687,31692,31697,31702],{"__ignoreMap":308},[312,31668,31669],{"class":314,"line":315},[312,31670,31671],{},"# 基于哪个镜像\n",[312,31673,31674],{"class":314,"line":171},[312,31675,31676],{},"From java:8\n",[312,31678,31679],{"class":314,"line":274},[312,31680,31681],{},"# 复制文件到容器\n",[312,31683,31684],{"class":314,"line":298},[312,31685,31686],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[312,31688,31689],{"class":314,"line":974},[312,31690,31691],{},"# 声明需要暴露的端口\n",[312,31693,31694],{"class":314,"line":980},[312,31695,31696],{},"EXPOSE 8877\n",[312,31698,31699],{"class":314,"line":997},[312,31700,31701],{},"# 配置容器启动后执行的命令\n",[312,31703,31704],{"class":314,"line":1003},[312,31705,31706],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[24,31708,31709],{},"3、使用docker build命令构建镜像",[303,31711,31713],{"className":25618,"code":31712,"language":25620,"meta":308,"style":308},"docker build -t tulingmall-member:0.0.5 .\n",[119,31714,31715],{"__ignoreMap":308},[312,31716,31717,31719,31721,31723,31726],{"class":314,"line":315},[312,31718,28349],{"class":332},[312,31720,30528],{"class":339},[312,31722,30531],{"class":488},[312,31724,31725],{"class":339}," tulingmall-member:0.0.5",[312,31727,30537],{"class":339},[24,31729,31730],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[24,31732,31733],{},[19,31734],{"alt":308,"src":31735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[24,31737,31738],{},"4、启动镜像，加-d可在后台启动",[303,31740,31742],{"className":25618,"code":31741,"language":25620,"meta":308,"style":308},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[119,31743,31744],{"__ignoreMap":308},[312,31745,31746,31748,31750,31752,31754,31757],{"class":314,"line":315},[312,31747,28349],{"class":332},[312,31749,29026],{"class":339},[312,31751,31619],{"class":488},[312,31753,31012],{"class":488},[312,31755,31756],{"class":339}," 8877:8877",[312,31758,31759],{"class":339}," tulingmall-member:0.0.5\n",[24,31761,31762],{},"加上JVM参数：",[303,31764,31766],{"className":25618,"code":31765,"language":25620,"meta":308,"style":308},"# --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",[119,31767,31768,31773,31788,31798,31807,31814],{"__ignoreMap":308},[312,31769,31770],{"class":314,"line":315},[312,31771,31772],{"class":318},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[312,31774,31775,31777,31779,31782,31784,31786],{"class":314,"line":171},[312,31776,28349],{"class":332},[312,31778,29026],{"class":339},[312,31780,31781],{"class":488},"  -d",[312,31783,31012],{"class":488},[312,31785,31756],{"class":339},[312,31787,26474],{"class":488},[312,31789,31790,31792,31795],{"class":314,"line":274},[312,31791,29924],{"class":324},[312,31793,31794],{"class":339},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[312,31796,31797],{"class":488},"  \\\n",[312,31799,31800,31802,31805],{"class":314,"line":298},[312,31801,29924],{"class":324},[312,31803,31804],{"class":339},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[312,31806,31797],{"class":488},[312,31808,31809,31812],{"class":314,"line":974},[312,31810,31811],{"class":324},"--cap-add=SYS_PTRACE  ",[312,31813,27971],{"class":488},[312,31815,31816],{"class":314,"line":980},[312,31817,31818],{"class":324},"tulingmall-member:0.0.5\n",[24,31820,31821],{},"5、访问会员服务接口",[24,31823,31824],{},[19,31825],{"alt":308,"src":31826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[23796,31828,31830],{"id":31829},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[24,31832,31833],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[24,31835,31836,31837],{},"阿里云docker镜像仓库：",[164,31838,31839],{"href":31839,"rel":31840},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[168],[24,31842,31843],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[24,31845,31846],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[24,31848,31849],{},[19,31850],{"alt":308,"src":31851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[24,31853,31854],{},"要把镜像推送到镜像仓库",[303,31856,31858],{"className":25618,"code":31857,"language":25620,"meta":308,"style":308},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[119,31859,31860],{"__ignoreMap":308},[312,31861,31862,31864,31866,31868],{"class":314,"line":315},[312,31863,28349],{"class":332},[312,31865,30693],{"class":339},[312,31867,31725],{"class":339},[312,31869,31870],{"class":339}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[24,31872,31873],{},"最后将镜像推送到远程仓库",[303,31875,31877],{"className":25618,"code":31876,"language":25620,"meta":308,"style":308},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[119,31878,31879],{"__ignoreMap":308},[312,31880,31881,31883,31885],{"class":314,"line":315},[312,31882,28349],{"class":332},[312,31884,30812],{"class":339},[312,31886,31870],{"class":339},[1856,31888,31889],{},"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":308,"searchDepth":171,"depth":171,"links":31891},[31892,31893,31894],{"id":30279,"depth":274,"text":30280},{"id":30508,"depth":274,"text":30509},{"id":31534,"depth":274,"text":31535},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30271,"description":308},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31901,"title":31902,"body":31903,"description":308,"extension":1879,"meta":32046,"navigation":1881,"path":32047,"seo":32048,"stem":32049,"__hash__":32050},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31904,"toc":32044},[31905,31908,31913,31918,31921,31926,31931,31934,31939,31944,31947,31952,31955,31958,31961,31964,31967,31970,31990,32012,32015,32018,32038,32041],[10,31906,31902],{"id":31907},"_7vscode远程开发",[140,31909,31910],{},[143,31911,31912],{},"插件1：微软Docker工具",[24,31914,31915],{},[19,31916],{"alt":308,"src":31917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[24,31919,31920],{},"docker扩展插件已经进化为container tools了，请安装container tools",[24,31922,31923],{},[19,31924],{"alt":308,"src":31925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[140,31927,31928],{"start":171},[143,31929,31930],{},"插件2：微软Docker远程开发工具",[24,31932,31933],{},"下面这是远程开发的插件。",[24,31935,31936],{},[19,31937],{"alt":308,"src":31938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[24,31940,31941],{},[19,31942],{"alt":308,"src":31943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[24,31945,31946],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[24,31948,31949],{},[19,31950],{"alt":308,"src":31951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[24,31953,31954],{},"安装完拓展之后，vscode进行链接：",[24,31956,31957],{},"1.按ctrl+shift+p",[24,31959,31960],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[24,31962,31963],{},"3.选择目前运行的容器",[24,31965,31966],{},"4.VS Code 会在新窗口中打开并连接到容器",[24,31968,31969],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[303,31971,31973],{"className":25618,"code":31972,"language":25620,"meta":308,"style":308},"docker run -v 主机目录:容器目录 image-name\n",[119,31974,31975],{"__ignoreMap":308},[312,31976,31977,31979,31981,31984,31987],{"class":314,"line":315},[312,31978,28349],{"class":332},[312,31980,29026],{"class":339},[312,31982,31983],{"class":488}," -v",[312,31985,31986],{"class":339}," 主机目录:容器目录",[312,31988,31989],{"class":339}," image-name\n",[303,31991,31993],{"className":25618,"code":31992,"language":25620,"meta":308,"style":308},"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",[119,31994,31995],{"__ignoreMap":308},[312,31996,31997,31999,32001,32004,32006,32009],{"class":314,"line":315},[312,31998,28349],{"class":332},[312,32000,29026],{"class":339},[312,32002,32003],{"class":488}," -it",[312,32005,31983],{"class":488},[312,32007,32008],{"class":339}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[312,32010,32011],{"class":339}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[24,32013,32014],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[24,32016,32017],{},"查看挂载情况：",[303,32019,32021],{"className":25618,"code":32020,"language":25620,"meta":308,"style":308},"mount | grep -i project\n",[119,32022,32023],{"__ignoreMap":308},[312,32024,32025,32028,32030,32033,32035],{"class":314,"line":315},[312,32026,32027],{"class":332},"mount",[312,32029,26905],{"class":1436},[312,32031,32032],{"class":332}," grep",[312,32034,28226],{"class":488},[312,32036,32037],{"class":339}," project\n",[24,32039,32040],{},"也可以通过ls来进行查看",[1856,32042,32043],{},"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":308,"searchDepth":171,"depth":171,"links":32045},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31902,"description":308},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":32052,"title":32053,"body":32054,"description":1878,"extension":1879,"meta":32058,"navigation":1881,"path":32060,"seo":32061,"stem":32062,"__hash__":32063},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":32055,"toc":32056},[],{"title":308,"searchDepth":171,"depth":171,"links":32057},[],{"category":32059},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":32053,"description":1878},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":32065,"title":32066,"body":32067,"description":1878,"extension":1879,"meta":32071,"navigation":1881,"path":32072,"seo":32073,"stem":32074,"__hash__":32075},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":32068,"toc":32069},[],{"title":308,"searchDepth":171,"depth":171,"links":32070},[],{"category":32059},"\u002Fwiki\u002F2025-11-10-k8s",{"title":32066,"description":1878},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":32077,"title":32078,"body":32079,"description":1878,"extension":1879,"meta":32372,"navigation":1881,"path":32373,"seo":32374,"stem":32375,"__hash__":32376},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":32080,"toc":32370},[32081,32084,32092,32107,32112,32163,32166,32172,32359,32364,32367],[10,32082,32078],{"id":32083},"_1验证深度学习环境",[24,32085,32086,32087],{},"关于环境的安装，看",[164,32088,32091],{"href":32089,"rel":32090},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[168],"Pytorch-->深度学习",[24,32093,32094,32095,32098,32099,32102,32103,32106],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[119,32096,32097],{},"pytorch-cuda=12.4"," 是一个“ ",[27,32100,32101],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[27,32104,32105],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[24,32108,32109],{},[19,32110],{"alt":308,"src":32111},"\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",[303,32113,32115],{"className":25618,"code":32114,"language":25620,"meta":308,"style":308},"# 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",[119,32116,32117,32122],{"__ignoreMap":308},[312,32118,32119],{"class":314,"line":315},[312,32120,32121],{"class":318},"# CUDA 12.4\n",[312,32123,32124,32127,32129,32132,32135,32138,32141,32144,32146,32149,32152,32155,32158,32160],{"class":314,"line":171},[312,32125,32126],{"class":332},"conda",[312,32128,25630],{"class":339},[312,32130,32131],{"class":339}," pytorch==",[312,32133,32134],{"class":488},"2.5.1",[312,32136,32137],{"class":339}," torchvision==",[312,32139,32140],{"class":488},"0.20.1",[312,32142,32143],{"class":339}," torchaudio==",[312,32145,32134],{"class":488},[312,32147,32148],{"class":339}," pytorch-cuda=",[312,32150,32151],{"class":488},"12.4",[312,32153,32154],{"class":488}," -c",[312,32156,32157],{"class":339}," pytorch",[312,32159,32154],{"class":488},[312,32161,32162],{"class":339}," nvidia\n",[24,32164,32165],{},"）：",[24,32167,32168],{},[164,32169,32170],{"href":32170,"rel":32171},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[168],[303,32173,32177],{"className":32174,"code":32175,"language":32176,"meta":308,"style":308},"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",[119,32178,32179,32184,32192,32197,32207,32223,32228,32238,32275,32282,32294,32310,32315,32325,32337,32347],{"__ignoreMap":308},[312,32180,32181],{"class":314,"line":315},[312,32182,32183],{"class":318},"# 对深度学习环境进行测试\n",[312,32185,32186,32189],{"class":314,"line":171},[312,32187,32188],{"class":1436},"import",[312,32190,32191],{"class":324}," torch\n",[312,32193,32194],{"class":314,"line":274},[312,32195,32196],{"class":318},"# 查看cuda是否被激活\n",[312,32198,32199,32202,32204],{"class":314,"line":298},[312,32200,32201],{"class":324},"flag",[312,32203,336],{"class":1436},[312,32205,32206],{"class":324},"torch.cuda.is_available()\n",[312,32208,32209,32212,32214,32217,32220],{"class":314,"line":974},[312,32210,32211],{"class":488},"print",[312,32213,1576],{"class":324},[312,32215,32216],{"class":339},"\"cuda:\"",[312,32218,32219],{"class":324},", flag)   ",[312,32221,32222],{"class":318},"#返回true的话说明被激活\n",[312,32224,32225],{"class":314,"line":980},[312,32226,32227],{"class":318},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[312,32229,32230,32233,32235],{"class":314,"line":997},[312,32231,32232],{"class":324},"ngpu",[312,32234,336],{"class":1436},[312,32236,32237],{"class":488},"1\n",[312,32239,32240,32243,32245,32248,32251,32253,32256,32259,32262,32264,32266,32268,32270,32273],{"class":314,"line":1003},[312,32241,32242],{"class":324},"device",[312,32244,336],{"class":1436},[312,32246,32247],{"class":324},"torch.device(",[312,32249,32250],{"class":339},"\"cuda:0\"",[312,32252,3510],{"class":1436},[312,32254,32255],{"class":324},"(torch.cuda.is_available() ",[312,32257,32258],{"class":1436},"and",[312,32260,32261],{"class":324}," ngpu",[312,32263,2902],{"class":1436},[312,32265,858],{"class":488},[312,32267,1583],{"class":324},[312,32269,3507],{"class":1436},[312,32271,32272],{"class":339}," \"cpu\"",[312,32274,1959],{"class":324},[312,32276,32277,32279],{"class":314,"line":1020},[312,32278,32211],{"class":488},[312,32280,32281],{"class":324},"(device)\n",[312,32283,32284,32286,32289,32291],{"class":314,"line":1026},[312,32285,32211],{"class":488},[312,32287,32288],{"class":324},"(torch.cuda.get_device_name(",[312,32290,858],{"class":488},[312,32292,32293],{"class":324},"))\n",[312,32295,32296,32298,32301,32303,32305,32307],{"class":314,"line":3418},[312,32297,32211],{"class":488},[312,32299,32300],{"class":324},"(torch.rand(",[312,32302,2021],{"class":488},[312,32304,2323],{"class":324},[312,32306,2021],{"class":488},[312,32308,32309],{"class":324},").cuda())\n",[312,32311,32312],{"class":314,"line":3423},[312,32313,32314],{"class":318},"# 查看cuda和cudnn的版本\n",[312,32316,32317,32320,32322],{"class":314,"line":3429},[312,32318,32319],{"class":324},"cuda_version",[312,32321,336],{"class":1436},[312,32323,32324],{"class":324},"torch.version.cuda\n",[312,32326,32327,32329,32331,32334],{"class":314,"line":3434},[312,32328,32211],{"class":488},[312,32330,1576],{"class":324},[312,32332,32333],{"class":339},"\"cuda version\"",[312,32335,32336],{"class":324},",cuda_version)\n",[312,32338,32339,32342,32344],{"class":314,"line":3448},[312,32340,32341],{"class":324},"cudnn_version",[312,32343,336],{"class":1436},[312,32345,32346],{"class":324},"torch.backends.cudnn.version()\n",[312,32348,32349,32351,32353,32356],{"class":314,"line":3453},[312,32350,32211],{"class":488},[312,32352,1576],{"class":324},[312,32354,32355],{"class":339},"\"cudnn version\"",[312,32357,32358],{"class":324},",cudnn_version)\n",[24,32360,32361],{},[19,32362],{"alt":308,"src":32363},"\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",[24,32365,32366],{},"cuda:0 指的是一块显卡",[1856,32368,32369],{},"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":308,"searchDepth":171,"depth":171,"links":32371},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":32078,"description":1878},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32378,"title":32379,"body":32380,"description":1878,"extension":1879,"meta":52183,"navigation":1881,"path":52184,"seo":52185,"stem":52186,"__hash__":52187},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":32381,"toc":52177},[32382,32385,32389,32393,32396,32401,32406,32409,32414,32419,32424,32427,32431,32436,32440,32445,32448,32453,32456,32459,32462,32465,32470,32473,32478,32483,32488,32493,32496,32500,32503,32508,33111,33116,33119,33124,33127,33130,33594,33597,33600,33603,33606,35657,35660,35665,35670,36465,36468,36473,37251,37255,38914,38918,39632,39636,39640,39645,39650,39655,39658,39663,39668,39673,39678,39683,39687,39692,40974,40979,40982,40985,40988,41143,41146,41149,42365,42370,43065,43069,43073,43078,43083,43086,43091,43096,43101,43106,43111,43116,43121,43126,43131,43136,43141,43146,43151,43156,43161,43166,43171,43176,43181,43186,43191,43196,43201,43206,43211,43216,43221,43226,43231,43236,43240,43244,43247,44725,44729,46376,46380,47074,47078,47081,47084,47628,47631,47635,47638,49035,49039,49042,49620,51407,51411,51414,52174],[10,32383,32379],{"id":32384},"_2经典神经网络",[69,32386,32388],{"id":32387},"_21lenet与alexnet","2.1.LeNet与AlexNet",[23796,32390,32392],{"id":32391},"_211原理介绍","2.1.1.原理介绍",[24,32394,32395],{},"LeNet-5",[140,32397,32398],{},[143,32399,32400],{},"原理",[24,32402,32403],{},[19,32404],{"alt":308,"src":32405},"\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",[24,32407,32408],{},"B是batch批次；C是channel通道",[140,32410,32411],{"start":171},[143,32412,32413],{},"网络参数详细",[24,32415,32416],{},[19,32417],{"alt":308,"src":32418},"\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",[24,32420,32421],{},[19,32422],{"alt":308,"src":32423},"\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",[24,32425,32426],{},"AlexNet",[140,32428,32429],{},[143,32430,32400],{},[24,32432,32433],{},[19,32434],{"alt":308,"src":32435},"\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",[140,32437,32438],{"start":171},[143,32439,32413],{},[24,32441,32442],{},[19,32443],{"alt":308,"src":32444},"\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",[24,32446,32447],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[24,32449,32450],{},[19,32451],{"alt":308,"src":32452},"\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",[24,32454,32455],{},"数据处理中的图像增强操作:",[24,32457,32458],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[24,32460,32461],{},"①增加数据量，保证训练数据充足；②防止过拟合",[24,32463,32464],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[24,32466,32467],{},[19,32468],{"alt":308,"src":32469},"\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",[24,32471,32472],{},"提升网络精确度的方法：LRN正则化",[24,32474,32475],{},[19,32476],{"alt":308,"src":32477},"\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",[24,32479,32480],{},[19,32481],{"alt":308,"src":32482},"\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",[140,32484,32485],{"start":274},[143,32486,32487],{},"AlexNet的总结",[24,32489,32490],{},[19,32491],{"alt":308,"src":32492},"\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",[24,32494,32495],{},"比LeNet模型要深一丢丢",[23796,32497,32499],{"id":32498},"_212代码实现","2.1.2.代码实现",[24,32501,32502],{},"（1）LeNet",[140,32504,32505],{},[143,32506,32507],{},"模型搭建",[303,32509,32511],{"className":32174,"code":32510,"language":32176,"meta":308,"style":308},"# 导入库\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",[119,32512,32513,32518,32524,32529,32542,32547,32559,32563,32583,32588,32593,32604,32609,32628,32632,32637,32685,32697,32702,32731,32766,32793,32798,32810,32815,32835,32854,32873,32877,32882,32892,32909,32920,32935,32946,32957,32972,32987,32998,33005,33009,33023,33028,33051,33056,33061,33066,33070,33075,33080,33090],{"__ignoreMap":308},[312,32514,32515],{"class":314,"line":315},[312,32516,32517],{"class":318},"# 导入库\n",[312,32519,32520,32522],{"class":314,"line":171},[312,32521,32188],{"class":1436},[312,32523,32191],{"class":324},[312,32525,32526],{"class":314,"line":274},[312,32527,32528],{"class":318},"# 导入神经网络层\n",[312,32530,32531,32534,32537,32539],{"class":314,"line":298},[312,32532,32533],{"class":1436},"from",[312,32535,32536],{"class":324}," torch ",[312,32538,32188],{"class":1436},[312,32540,32541],{"class":324}," nn\n",[312,32543,32544],{"class":314,"line":974},[312,32545,32546],{"class":318},"# 导入展示神经网络参数的包\n",[312,32548,32549,32551,32554,32556],{"class":314,"line":980},[312,32550,32533],{"class":1436},[312,32552,32553],{"class":324}," torchsummary ",[312,32555,32188],{"class":1436},[312,32557,32558],{"class":324}," summary\n",[312,32560,32561],{"class":314,"line":997},[312,32562,4205],{"emptyLinePlaceholder":1881},[312,32564,32565,32567,32570,32572,32575,32577,32580],{"class":314,"line":1003},[312,32566,16495],{"class":1436},[312,32568,32569],{"class":332}," LeNet",[312,32571,1576],{"class":324},[312,32573,32574],{"class":332},"nn",[312,32576,2503],{"class":324},[312,32578,32579],{"class":332},"Module",[312,32581,32582],{"class":324},"):\n",[312,32584,32585],{"class":314,"line":1020},[312,32586,32587],{"class":318},"    # 模型初始化:\n",[312,32589,32590],{"class":314,"line":1026},[312,32591,32592],{"class":318},"    # 定义一些网络层和激活函数\n",[312,32594,32595,32598,32601],{"class":314,"line":3418},[312,32596,32597],{"class":1436},"    def",[312,32599,32600],{"class":488}," __init__",[312,32602,32603],{"class":324},"(self):\n",[312,32605,32606],{"class":314,"line":3423},[312,32607,32608],{"class":318},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[312,32610,32611,32614,32617,32620,32623,32626],{"class":314,"line":3429},[312,32612,32613],{"class":488},"        super",[312,32615,32616],{"class":324},"(LeNet,",[312,32618,32619],{"class":488},"self",[312,32621,32622],{"class":324},").",[312,32624,32625],{"class":488},"__init__",[312,32627,3781],{"class":324},[312,32629,32630],{"class":314,"line":3434},[312,32631,4205],{"emptyLinePlaceholder":1881},[312,32633,32634],{"class":314,"line":3448},[312,32635,32636],{"class":318},"        # 定义网络层\n",[312,32638,32639,32642,32645,32647,32650,32653,32655,32657,32659,32662,32664,32666,32668,32671,32673,32675,32677,32679,32681,32683],{"class":314,"line":3453},[312,32640,32641],{"class":488},"        self",[312,32643,32644],{"class":324},".c1",[312,32646,336],{"class":1436},[312,32648,32649],{"class":324},"nn.Conv2d(",[312,32651,32652],{"class":1579},"in_channels",[312,32654,336],{"class":1436},[312,32656,1433],{"class":488},[312,32658,2323],{"class":324},[312,32660,32661],{"class":1579},"out_channels",[312,32663,336],{"class":1436},[312,32665,2289],{"class":488},[312,32667,2323],{"class":324},[312,32669,32670],{"class":1579},"kernel_size",[312,32672,336],{"class":1436},[312,32674,2264],{"class":488},[312,32676,2323],{"class":324},[312,32678,1340],{"class":1579},[312,32680,336],{"class":1436},[312,32682,2027],{"class":488},[312,32684,1959],{"class":324},[312,32686,32687,32689,32692,32694],{"class":314,"line":3459},[312,32688,32641],{"class":488},[312,32690,32691],{"class":324},".sig",[312,32693,336],{"class":1436},[312,32695,32696],{"class":324},"nn.Sigmoid()\n",[312,32698,32699],{"class":314,"line":3480},[312,32700,32701],{"class":318},"        # 定义池化\n",[312,32703,32704,32706,32709,32711,32714,32716,32718,32720,32722,32725,32727,32729],{"class":314,"line":3485},[312,32705,32641],{"class":488},[312,32707,32708],{"class":324},".s2",[312,32710,336],{"class":1436},[312,32712,32713],{"class":324},"nn.AvgPool2d(",[312,32715,32670],{"class":1579},[312,32717,336],{"class":1436},[312,32719,2027],{"class":488},[312,32721,2323],{"class":324},[312,32723,32724],{"class":1579},"stride",[312,32726,336],{"class":1436},[312,32728,2027],{"class":488},[312,32730,1959],{"class":324},[312,32732,32733,32735,32738,32740,32742,32744,32746,32748,32750,32752,32754,32756,32758,32760,32762,32764],{"class":314,"line":3499},[312,32734,32641],{"class":488},[312,32736,32737],{"class":324},".c3",[312,32739,336],{"class":1436},[312,32741,32649],{"class":324},[312,32743,32652],{"class":1579},[312,32745,336],{"class":1436},[312,32747,2289],{"class":488},[312,32749,2323],{"class":324},[312,32751,32661],{"class":1579},[312,32753,336],{"class":1436},[312,32755,2546],{"class":488},[312,32757,2323],{"class":324},[312,32759,32670],{"class":1579},[312,32761,336],{"class":1436},[312,32763,2264],{"class":488},[312,32765,1959],{"class":324},[312,32767,32768,32770,32773,32775,32777,32779,32781,32783,32785,32787,32789,32791],{"class":314,"line":3504},[312,32769,32641],{"class":488},[312,32771,32772],{"class":324},".s4",[312,32774,336],{"class":1436},[312,32776,32713],{"class":324},[312,32778,32670],{"class":1579},[312,32780,336],{"class":1436},[312,32782,2027],{"class":488},[312,32784,2323],{"class":324},[312,32786,32724],{"class":1579},[312,32788,336],{"class":1436},[312,32790,2027],{"class":488},[312,32792,1959],{"class":324},[312,32794,32795],{"class":314,"line":3533},[312,32796,32797],{"class":318},"        # 定义平展层\n",[312,32799,32800,32802,32805,32807],{"class":314,"line":3538},[312,32801,32641],{"class":488},[312,32803,32804],{"class":324},".flatten",[312,32806,336],{"class":1436},[312,32808,32809],{"class":324},"nn.Flatten()\n",[312,32811,32812],{"class":314,"line":3555},[312,32813,32814],{"class":318},"        # 定义全连接层\n",[312,32816,32817,32819,32822,32824,32827,32829,32831,32833],{"class":314,"line":3560},[312,32818,32641],{"class":488},[312,32820,32821],{"class":324},".f5",[312,32823,336],{"class":1436},[312,32825,32826],{"class":324},"nn.Linear(",[312,32828,5792],{"class":488},[312,32830,2323],{"class":324},[312,32832,2761],{"class":488},[312,32834,1959],{"class":324},[312,32836,32837,32839,32842,32844,32846,32848,32850,32852],{"class":314,"line":3565},[312,32838,32641],{"class":488},[312,32840,32841],{"class":324},".f6",[312,32843,336],{"class":1436},[312,32845,32826],{"class":324},[312,32847,2761],{"class":488},[312,32849,2323],{"class":324},[312,32851,2655],{"class":488},[312,32853,1959],{"class":324},[312,32855,32856,32858,32861,32863,32865,32867,32869,32871],{"class":314,"line":3570},[312,32857,32641],{"class":488},[312,32859,32860],{"class":324},".f7",[312,32862,336],{"class":1436},[312,32864,32826],{"class":324},[312,32866,2655],{"class":488},[312,32868,2323],{"class":324},[312,32870,2391],{"class":488},[312,32872,1959],{"class":324},[312,32874,32875],{"class":314,"line":3584},[312,32876,4205],{"emptyLinePlaceholder":1881},[312,32878,32879],{"class":314,"line":3589},[312,32880,32881],{"class":318},"    # 写工具->写前向传播\n",[312,32883,32884,32886,32889],{"class":314,"line":4382},[312,32885,32597],{"class":1436},[312,32887,32888],{"class":332}," forward",[312,32890,32891],{"class":324},"(self,x):\n",[312,32893,32894,32897,32899,32901,32904,32906],{"class":314,"line":4396},[312,32895,32896],{"class":324},"        x",[312,32898,336],{"class":1436},[312,32900,32619],{"class":488},[312,32902,32903],{"class":324},".sig(",[312,32905,32619],{"class":488},[312,32907,32908],{"class":324},".c1(x))\n",[312,32910,32911,32913,32915,32917],{"class":314,"line":4404},[312,32912,32896],{"class":324},[312,32914,336],{"class":1436},[312,32916,32619],{"class":488},[312,32918,32919],{"class":324},".s2(x)\n",[312,32921,32922,32924,32926,32928,32930,32932],{"class":314,"line":4409},[312,32923,32896],{"class":324},[312,32925,336],{"class":1436},[312,32927,32619],{"class":488},[312,32929,32903],{"class":324},[312,32931,32619],{"class":488},[312,32933,32934],{"class":324},".c3(x))\n",[312,32936,32937,32939,32941,32943],{"class":314,"line":4415},[312,32938,32896],{"class":324},[312,32940,336],{"class":1436},[312,32942,32619],{"class":488},[312,32944,32945],{"class":324},".s4(x)\n",[312,32947,32948,32950,32952,32954],{"class":314,"line":4421},[312,32949,32896],{"class":324},[312,32951,336],{"class":1436},[312,32953,32619],{"class":488},[312,32955,32956],{"class":324},".flatten(x)\n",[312,32958,32959,32961,32963,32965,32967,32969],{"class":314,"line":4426},[312,32960,32896],{"class":324},[312,32962,336],{"class":1436},[312,32964,32619],{"class":488},[312,32966,32903],{"class":324},[312,32968,32619],{"class":488},[312,32970,32971],{"class":324},".f5(x))\n",[312,32973,32974,32976,32978,32980,32982,32984],{"class":314,"line":9751},[312,32975,32896],{"class":324},[312,32977,336],{"class":1436},[312,32979,32619],{"class":488},[312,32981,32903],{"class":324},[312,32983,32619],{"class":488},[312,32985,32986],{"class":324},".f6(x))\n",[312,32988,32989,32991,32993,32995],{"class":314,"line":9775},[312,32990,32896],{"class":324},[312,32992,336],{"class":1436},[312,32994,32619],{"class":488},[312,32996,32997],{"class":324},".f7(x)\n",[312,32999,33000,33002],{"class":314,"line":9780},[312,33001,16553],{"class":1436},[312,33003,33004],{"class":324}," x\n",[312,33006,33007],{"class":314,"line":9786},[312,33008,4205],{"emptyLinePlaceholder":1881},[312,33010,33011,33013,33016,33018,33021],{"class":314,"line":9813},[312,33012,3338],{"class":1436},[312,33014,33015],{"class":488}," __name__",[312,33017,4754],{"class":1436},[312,33019,33020],{"class":339},"\"__main__\"",[312,33022,5544],{"class":324},[312,33024,33025],{"class":314,"line":9818},[312,33026,33027],{"class":318},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[312,33029,33030,33033,33035,33037,33040,33042,33045,33047,33049],{"class":314,"line":9824},[312,33031,33032],{"class":324},"    device",[312,33034,336],{"class":1436},[312,33036,32247],{"class":324},[312,33038,33039],{"class":339},"\"cuda\"",[312,33041,3510],{"class":1436},[312,33043,33044],{"class":324}," torch.cuda.is_available() ",[312,33046,3507],{"class":1436},[312,33048,32272],{"class":339},[312,33050,1959],{"class":324},[312,33052,33053],{"class":314,"line":9836},[312,33054,33055],{"class":318},"    # 如果就是想指定用cpu用下方代码:\n",[312,33057,33058],{"class":314,"line":9848},[312,33059,33060],{"class":318},"    # device=\"cpu\"\n",[312,33062,33063],{"class":314,"line":9860},[312,33064,33065],{"class":318},"    # print(device)\n",[312,33067,33068],{"class":314,"line":11519},[312,33069,4205],{"emptyLinePlaceholder":1881},[312,33071,33072],{"class":314,"line":11544},[312,33073,33074],{"class":318},"    # 实例化模型\n",[312,33076,33077],{"class":314,"line":11567},[312,33078,33079],{"class":318},"    # 将模型放到设备中去运行\n",[312,33081,33082,33085,33087],{"class":314,"line":11591},[312,33083,33084],{"class":324},"    model",[312,33086,336],{"class":1436},[312,33088,33089],{"class":324},"LeNet().to(device)\n",[312,33091,33092,33095,33098,33100,33102,33104,33106,33108],{"class":314,"line":11596},[312,33093,33094],{"class":488},"    print",[312,33096,33097],{"class":324},"(summary(model,(",[312,33099,1433],{"class":488},[312,33101,2323],{"class":324},[312,33103,2845],{"class":488},[312,33105,2323],{"class":324},[312,33107,2845],{"class":488},[312,33109,33110],{"class":324},")))\n",[24,33112,33113],{},[19,33114],{"alt":308,"src":33115},"\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",[24,33117,33118],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[140,33120,33121],{"start":171},[143,33122,33123],{},"训练",[24,33125,33126],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[24,33128,33129],{},"在训练之前可以将数据展示看一下",[303,33131,33133],{"className":32174,"code":33132,"language":32176,"meta":308,"style":308},"# 建立画图的函数，用于展示数据\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",[119,33134,33135,33140,33145,33157,33169,33182,33187,33199,33204,33216,33221,33233,33237,33241,33262,33274,33279,33300,33311,33315,33320,33338,33349,33354,33365,33370,33381,33385,33390,33405,33418,33423,33428,33441,33454,33467,33472,33476,33481,33501,33518,33538,33551,33564,33574,33589],{"__ignoreMap":308},[312,33136,33137],{"class":314,"line":315},[312,33138,33139],{"class":318},"# 建立画图的函数，用于展示数据\n",[312,33141,33142],{"class":314,"line":171},[312,33143,33144],{"class":318},"# torchvision中包含很多内置的数据集\n",[312,33146,33147,33149,33152,33154],{"class":314,"line":274},[312,33148,32533],{"class":1436},[312,33150,33151],{"class":324}," sklearn.externals.array_api_compat.torch ",[312,33153,32188],{"class":1436},[312,33155,33156],{"class":324}," squeeze\n",[312,33158,33159,33161,33164,33166],{"class":314,"line":298},[312,33160,32533],{"class":1436},[312,33162,33163],{"class":324}," torchvision.datasets ",[312,33165,32188],{"class":1436},[312,33167,33168],{"class":324}," FashionMNIST\n",[312,33170,33171,33173,33176,33179],{"class":314,"line":974},[312,33172,32188],{"class":1436},[312,33174,33175],{"class":324}," numpy ",[312,33177,33178],{"class":1436},"as",[312,33180,33181],{"class":324}," np\n",[312,33183,33184],{"class":314,"line":980},[312,33185,33186],{"class":318},"# 引入处理数据集的包\n",[312,33188,33189,33191,33194,33196],{"class":314,"line":997},[312,33190,32533],{"class":1436},[312,33192,33193],{"class":324}," torchvision ",[312,33195,32188],{"class":1436},[312,33197,33198],{"class":324}," transforms\n",[312,33200,33201],{"class":314,"line":1003},[312,33202,33203],{"class":318},"# 从torch库中引入数据处理的包\n",[312,33205,33206,33208,33211,33213],{"class":314,"line":1020},[312,33207,32188],{"class":1436},[312,33209,33210],{"class":324}," torch.utils.data ",[312,33212,33178],{"class":1436},[312,33214,33215],{"class":324}," Data\n",[312,33217,33218],{"class":314,"line":1026},[312,33219,33220],{"class":318},"# 导入画图的库\n",[312,33222,33223,33225,33228,33230],{"class":314,"line":3418},[312,33224,32188],{"class":1436},[312,33226,33227],{"class":324}," matplotlib.pyplot ",[312,33229,33178],{"class":1436},[312,33231,33232],{"class":324}," plt\n",[312,33234,33235],{"class":314,"line":3423},[312,33236,4205],{"emptyLinePlaceholder":1881},[312,33238,33239],{"class":314,"line":3429},[312,33240,4205],{"emptyLinePlaceholder":1881},[312,33242,33243,33246,33248,33251,33254,33256,33259],{"class":314,"line":3434},[312,33244,33245],{"class":324},"train_data",[312,33247,336],{"class":1436},[312,33249,33250],{"class":324},"FashionMNIST(",[312,33252,33253],{"class":1579},"root",[312,33255,336],{"class":1436},[312,33257,33258],{"class":339},"'.\u002Fdata'",[312,33260,33261],{"class":324},",\n",[312,33263,33264,33267,33269,33272],{"class":314,"line":3448},[312,33265,33266],{"class":1579},"                        train",[312,33268,336],{"class":1436},[312,33270,33271],{"class":488},"True",[312,33273,33261],{"class":324},[312,33275,33276],{"class":314,"line":3453},[312,33277,33278],{"class":318},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[312,33280,33281,33284,33286,33289,33292,33294,33297],{"class":314,"line":3459},[312,33282,33283],{"class":1579},"                        transform",[312,33285,336],{"class":1436},[312,33287,33288],{"class":324},"transforms.Compose([transforms.Resize(",[312,33290,33291],{"class":1579},"size",[312,33293,336],{"class":1436},[312,33295,33296],{"class":488},"224",[312,33298,33299],{"class":324},"),transforms.ToTensor()]),\n",[312,33301,33302,33305,33307,33309],{"class":314,"line":3480},[312,33303,33304],{"class":1579},"                        download",[312,33306,336],{"class":1436},[312,33308,33271],{"class":488},[312,33310,1959],{"class":324},[312,33312,33313],{"class":314,"line":3485},[312,33314,4205],{"emptyLinePlaceholder":1881},[312,33316,33317],{"class":314,"line":3499},[312,33318,33319],{"class":318},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[312,33321,33322,33325,33327,33330,33333,33335],{"class":314,"line":3504},[312,33323,33324],{"class":324},"train_loader",[312,33326,336],{"class":1436},[312,33328,33329],{"class":324},"Data.DataLoader(",[312,33331,33332],{"class":1579},"dataset",[312,33334,336],{"class":1436},[312,33336,33337],{"class":324},"train_data,\n",[312,33339,33340,33343,33345,33347],{"class":314,"line":3533},[312,33341,33342],{"class":1579},"                             batch_size",[312,33344,336],{"class":1436},[312,33346,2150],{"class":488},[312,33348,33261],{"class":324},[312,33350,33351],{"class":314,"line":3538},[312,33352,33353],{"class":318},"                             # 数据是否打乱\n",[312,33355,33356,33359,33361,33363],{"class":314,"line":3555},[312,33357,33358],{"class":1579},"                             shuffle",[312,33360,336],{"class":1436},[312,33362,33271],{"class":488},[312,33364,33261],{"class":324},[312,33366,33367],{"class":314,"line":3560},[312,33368,33369],{"class":318},"                             # 规定加载数据的进程\n",[312,33371,33372,33375,33377,33379],{"class":314,"line":3565},[312,33373,33374],{"class":1579},"                             num_workers",[312,33376,336],{"class":1436},[312,33378,858],{"class":488},[312,33380,1959],{"class":324},[312,33382,33383],{"class":314,"line":3570},[312,33384,4205],{"emptyLinePlaceholder":1881},[312,33386,33387],{"class":314,"line":3584},[312,33388,33389],{"class":318},"# 获得一个batch的数据\n",[312,33391,33392,33394,33397,33399,33402],{"class":314,"line":3589},[312,33393,4830],{"class":1436},[312,33395,33396],{"class":324}," step,(b_x,b_y) ",[312,33398,27839],{"class":1436},[312,33400,33401],{"class":488}," enumerate",[312,33403,33404],{"class":324},"(train_loader):\n",[312,33406,33407,33409,33412,33414,33416],{"class":314,"line":4382},[312,33408,4906],{"class":1436},[312,33410,33411],{"class":324}," step ",[312,33413,2902],{"class":1436},[312,33415,5898],{"class":488},[312,33417,5544],{"class":324},[312,33419,33420],{"class":314,"line":4396},[312,33421,33422],{"class":1436},"        break\n",[312,33424,33425],{"class":314,"line":4404},[312,33426,33427],{"class":318},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[312,33429,33430,33433,33435,33438],{"class":314,"line":4409},[312,33431,33432],{"class":324},"batch_x",[312,33434,336],{"class":1436},[312,33436,33437],{"class":324},"b_x.squeeze().numpy()  ",[312,33439,33440],{"class":318},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[312,33442,33443,33446,33448,33451],{"class":314,"line":4415},[312,33444,33445],{"class":324},"batch_y",[312,33447,336],{"class":1436},[312,33449,33450],{"class":324},"b_y.numpy()   ",[312,33452,33453],{"class":318},"#将张量转换成功numpy数组\n",[312,33455,33456,33459,33461,33464],{"class":314,"line":4421},[312,33457,33458],{"class":324},"class_label",[312,33460,336],{"class":1436},[312,33462,33463],{"class":324},"train_data.classes  ",[312,33465,33466],{"class":318},"#训练集标签\n",[312,33468,33469],{"class":314,"line":4426},[312,33470,33471],{"class":318},"# print(class_label)\n",[312,33473,33474],{"class":314,"line":9751},[312,33475,4205],{"emptyLinePlaceholder":1881},[312,33477,33478],{"class":314,"line":9775},[312,33479,33480],{"class":318},"# 可视化一个batch的图像\n",[312,33482,33483,33486,33489,33491,33493,33495,33497,33499],{"class":314,"line":9780},[312,33484,33485],{"class":324},"plt.figure(",[312,33487,33488],{"class":1579},"figsize",[312,33490,336],{"class":1436},[312,33492,1576],{"class":324},[312,33494,2443],{"class":488},[312,33496,2323],{"class":324},[312,33498,2264],{"class":488},[312,33500,32293],{"class":324},[312,33502,33503,33505,33508,33510,33513,33515],{"class":314,"line":9786},[312,33504,4830],{"class":1436},[312,33506,33507],{"class":324}," ii ",[312,33509,27839],{"class":1436},[312,33511,33512],{"class":324}," np.arange(",[312,33514,9162],{"class":488},[312,33516,33517],{"class":324},"(batch_y)):\n",[312,33519,33520,33523,33525,33527,33529,33532,33534,33536],{"class":314,"line":9813},[312,33521,33522],{"class":324},"    plt.subplot(",[312,33524,2238],{"class":488},[312,33526,2323],{"class":324},[312,33528,2546],{"class":488},[312,33530,33531],{"class":324},",ii ",[312,33533,2426],{"class":1436},[312,33535,26914],{"class":488},[312,33537,1959],{"class":324},[312,33539,33540,33543,33546,33548],{"class":314,"line":9818},[312,33541,33542],{"class":324},"    plt.imshow(batch_x[ii,:,:],",[312,33544,33545],{"class":1579},"cmap",[312,33547,336],{"class":1436},[312,33549,33550],{"class":324},"plt.cm.gray)\n",[312,33552,33553,33556,33558,33560,33562],{"class":314,"line":9824},[312,33554,33555],{"class":324},"    plt.title(class_label[batch_y[ii]],",[312,33557,33291],{"class":1579},[312,33559,336],{"class":1436},[312,33561,2391],{"class":488},[312,33563,1959],{"class":324},[312,33565,33566,33569,33572],{"class":314,"line":9836},[312,33567,33568],{"class":324},"    plt.axis(",[312,33570,33571],{"class":339},"\"off\"",[312,33573,1959],{"class":324},[312,33575,33576,33579,33582,33584,33587],{"class":314,"line":9848},[312,33577,33578],{"class":324},"    plt.subplots_adjust(",[312,33580,33581],{"class":1579},"wspace",[312,33583,336],{"class":1436},[312,33585,33586],{"class":488},"0.05",[312,33588,1959],{"class":324},[312,33590,33591],{"class":314,"line":9860},[312,33592,33593],{"class":324},"plt.show()\n",[24,33595,33596],{},"用matplotlib进行展示的过程可以后续再补",[24,33598,33599],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[24,33601,33602],{},"训练次数就是按照批次过整个训练集数据的次数",[24,33604,33605],{},"模型训练：",[303,33607,33609],{"className":32174,"code":33608,"language":32176,"meta":308,"style":308},"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",[119,33610,33611,33618,33625,33629,33641,33647,33658,33668,33678,33688,33698,33703,33715,33725,33729,33733,33738,33749,33762,33773,33790,33801,33840,33856,33868,33879,33884,33895,33911,33922,33933,33944,33951,33955,33960,33965,33969,33974,33984,34005,34009,34013,34018,34023,34028,34048,34052,34057,34067,34071,34076,34085,34090,34095,34100,34110,34114,34118,34123,34128,34138,34143,34153,34158,34167,34172,34181,34186,34195,34199,34204,34214,34218,34222,34227,34242,34270,34285,34289,34294,34299,34308,34313,34322,34327,34336,34341,34350,34355,34364,34369,34378,34383,34396,34401,34411,34416,34426,34432,34438,34444,34450,34461,34467,34487,34493,34504,34510,34516,34522,34528,34534,34540,34546,34566,34572,34588,34594,34608,34614,34629,34635,34644,34650,34659,34665,34671,34680,34686,34697,34703,34722,34728,34739,34745,34765,34781,34787,34801,34807,34813,34824,34830,34836,34846,34852,34863,34869,34879,34884,34890,34939,34986,34991,34997,35016,35022,35042,35048,35054,35064,35069,35075,35091,35136,35142,35148,35154,35165,35171,35177,35183,35201,35215,35224,35233,35242,35251,35257,35263,35271,35276,35282,35293,35299,35319,35325,35331,35337,35354,35360,35366,35372,35378,35384,35411,35435,35441,35447,35453,35464,35475,35481,35498,35521,35544,35550,35555,35564,35574,35580,35585,35591,35604,35610,35621,35632,35651],{"__ignoreMap":308},[312,33612,33613,33615],{"class":314,"line":315},[312,33614,32188],{"class":1436},[312,33616,33617],{"class":324}," copy\n",[312,33619,33620,33622],{"class":314,"line":171},[312,33621,32188],{"class":1436},[312,33623,33624],{"class":324}," time\n",[312,33626,33627],{"class":314,"line":274},[312,33628,4205],{"emptyLinePlaceholder":1881},[312,33630,33631,33633,33636,33638],{"class":314,"line":298},[312,33632,32188],{"class":1436},[312,33634,33635],{"class":324}," pandas ",[312,33637,33178],{"class":1436},[312,33639,33640],{"class":324}," pd\n",[312,33642,33643,33645],{"class":314,"line":974},[312,33644,32188],{"class":1436},[312,33646,32191],{"class":324},[312,33648,33649,33651,33653,33655],{"class":314,"line":980},[312,33650,32533],{"class":1436},[312,33652,33210],{"class":324},[312,33654,32188],{"class":1436},[312,33656,33657],{"class":324}," Dataset\n",[312,33659,33660,33662,33664,33666],{"class":314,"line":997},[312,33661,32533],{"class":1436},[312,33663,33163],{"class":324},[312,33665,32188],{"class":1436},[312,33667,33168],{"class":324},[312,33669,33670,33672,33674,33676],{"class":314,"line":1003},[312,33671,32533],{"class":1436},[312,33673,33193],{"class":324},[312,33675,32188],{"class":1436},[312,33677,33198],{"class":324},[312,33679,33680,33682,33684,33686],{"class":314,"line":1020},[312,33681,32188],{"class":1436},[312,33683,33210],{"class":324},[312,33685,33178],{"class":1436},[312,33687,33215],{"class":324},[312,33689,33690,33692,33694,33696],{"class":314,"line":1026},[312,33691,32188],{"class":1436},[312,33693,33227],{"class":324},[312,33695,33178],{"class":1436},[312,33697,33232],{"class":324},[312,33699,33700],{"class":314,"line":3418},[312,33701,33702],{"class":318},"# 导入模型\n",[312,33704,33705,33707,33710,33712],{"class":314,"line":3423},[312,33706,32533],{"class":1436},[312,33708,33709],{"class":324}," model ",[312,33711,32188],{"class":1436},[312,33713,33714],{"class":324}," LeNet\n",[312,33716,33717,33719,33721,33723],{"class":314,"line":3429},[312,33718,32533],{"class":1436},[312,33720,32536],{"class":324},[312,33722,32188],{"class":1436},[312,33724,32541],{"class":324},[312,33726,33727],{"class":314,"line":3434},[312,33728,4205],{"emptyLinePlaceholder":1881},[312,33730,33731],{"class":314,"line":3448},[312,33732,4205],{"emptyLinePlaceholder":1881},[312,33734,33735],{"class":314,"line":3453},[312,33736,33737],{"class":318},"# 处理训练集与验证集函数--->划分数据集\n",[312,33739,33740,33743,33746],{"class":314,"line":3459},[312,33741,33742],{"class":1436},"def",[312,33744,33745],{"class":332}," train_val_data_process",[312,33747,33748],{"class":324},"():\n",[312,33750,33751,33754,33756,33758,33760],{"class":314,"line":3480},[312,33752,33753],{"class":324},"    train_data",[312,33755,336],{"class":1436},[312,33757,33250],{"class":324},[312,33759,33258],{"class":339},[312,33761,33261],{"class":324},[312,33763,33764,33767,33769,33771],{"class":314,"line":3485},[312,33765,33766],{"class":1579},"                            train",[312,33768,336],{"class":1436},[312,33770,33271],{"class":488},[312,33772,33261],{"class":324},[312,33774,33775,33778,33780,33782,33784,33786,33788],{"class":314,"line":3499},[312,33776,33777],{"class":1579},"                            transform",[312,33779,336],{"class":1436},[312,33781,33288],{"class":324},[312,33783,33291],{"class":1579},[312,33785,336],{"class":1436},[312,33787,2845],{"class":488},[312,33789,33299],{"class":324},[312,33791,33792,33795,33797,33799],{"class":314,"line":3504},[312,33793,33794],{"class":1579},"                            download",[312,33796,336],{"class":1436},[312,33798,33271],{"class":488},[312,33800,1959],{"class":324},[312,33802,33803,33806,33808,33811,33814,33816,33819,33821,33823,33826,33828,33830,33833,33835,33837],{"class":314,"line":3533},[312,33804,33805],{"class":324},"    train_data,val_data",[312,33807,336],{"class":1436},[312,33809,33810],{"class":324},"Data.random_split(train_data,[",[312,33812,33813],{"class":488},"round",[312,33815,1576],{"class":324},[312,33817,33818],{"class":488},"0.8",[312,33820,2400],{"class":1436},[312,33822,9162],{"class":488},[312,33824,33825],{"class":324},"(train_data)),",[312,33827,33813],{"class":488},[312,33829,1576],{"class":324},[312,33831,33832],{"class":488},"0.2",[312,33834,2400],{"class":1436},[312,33836,9162],{"class":488},[312,33838,33839],{"class":324},"(train_data))])\n",[312,33841,33842,33845,33847,33850,33852,33854],{"class":314,"line":3538},[312,33843,33844],{"class":324},"    train_dataloader ",[312,33846,336],{"class":1436},[312,33848,33849],{"class":324}," Data.DataLoader(",[312,33851,33332],{"class":1579},[312,33853,336],{"class":1436},[312,33855,33337],{"class":324},[312,33857,33858,33861,33863,33866],{"class":314,"line":3555},[312,33859,33860],{"class":1579},"                                       batch_size",[312,33862,336],{"class":1436},[312,33864,33865],{"class":488},"128",[312,33867,33261],{"class":324},[312,33869,33870,33873,33875,33877],{"class":314,"line":3560},[312,33871,33872],{"class":1579},"                                       shuffle",[312,33874,336],{"class":1436},[312,33876,33271],{"class":488},[312,33878,33261],{"class":324},[312,33880,33881],{"class":314,"line":3565},[312,33882,33883],{"class":318},"                                       # 规定8个进程\n",[312,33885,33886,33889,33891,33893],{"class":314,"line":3570},[312,33887,33888],{"class":1579},"                                       num_workers",[312,33890,336],{"class":1436},[312,33892,2340],{"class":488},[312,33894,1959],{"class":324},[312,33896,33897,33900,33902,33904,33906,33908],{"class":314,"line":3584},[312,33898,33899],{"class":324},"    val_dataloader",[312,33901,336],{"class":1436},[312,33903,33329],{"class":324},[312,33905,33332],{"class":1579},[312,33907,336],{"class":1436},[312,33909,33910],{"class":324},"val_data,\n",[312,33912,33913,33916,33918,33920],{"class":314,"line":3589},[312,33914,33915],{"class":1579},"                                   batch_size",[312,33917,336],{"class":1436},[312,33919,33865],{"class":488},[312,33921,33261],{"class":324},[312,33923,33924,33927,33929,33931],{"class":314,"line":4382},[312,33925,33926],{"class":1579},"                                   shuffle",[312,33928,336],{"class":1436},[312,33930,33271],{"class":488},[312,33932,33261],{"class":324},[312,33934,33935,33938,33940,33942],{"class":314,"line":4396},[312,33936,33937],{"class":1579},"                                   num_workers",[312,33939,336],{"class":1436},[312,33941,2340],{"class":488},[312,33943,1959],{"class":324},[312,33945,33946,33948],{"class":314,"line":4404},[312,33947,5895],{"class":1436},[312,33949,33950],{"class":324}," train_dataloader,val_dataloader\n",[312,33952,33953],{"class":314,"line":4409},[312,33954,4205],{"emptyLinePlaceholder":1881},[312,33956,33957],{"class":314,"line":4415},[312,33958,33959],{"class":318},"# 验证是否出错\n",[312,33961,33962],{"class":314,"line":4421},[312,33963,33964],{"class":318},"# train_val_data_process()\n",[312,33966,33967],{"class":314,"line":4426},[312,33968,4205],{"emptyLinePlaceholder":1881},[312,33970,33971],{"class":314,"line":9751},[312,33972,33973],{"class":318},"# 定义模型训练函数\n",[312,33975,33976,33978,33981],{"class":314,"line":9775},[312,33977,33742],{"class":1436},[312,33979,33980],{"class":332}," train_model_process",[312,33982,33983],{"class":324},"(model,train_dataloader,val_dataloader,num_epochs):\n",[312,33985,33986,33988,33990,33992,33994,33996,33998,34000,34003],{"class":314,"line":9780},[312,33987,33032],{"class":324},[312,33989,336],{"class":1436},[312,33991,32247],{"class":324},[312,33993,33039],{"class":339},[312,33995,3510],{"class":1436},[312,33997,33044],{"class":324},[312,33999,3507],{"class":1436},[312,34001,34002],{"class":339}," 'cpu'",[312,34004,1959],{"class":324},[312,34006,34007],{"class":314,"line":9786},[312,34008,4205],{"emptyLinePlaceholder":1881},[312,34010,34011],{"class":314,"line":9813},[312,34012,4205],{"emptyLinePlaceholder":1881},[312,34014,34015],{"class":314,"line":9818},[312,34016,34017],{"class":318},"    # 定义优化器\n",[312,34019,34020],{"class":314,"line":9824},[312,34021,34022],{"class":318},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[312,34024,34025],{"class":314,"line":9836},[312,34026,34027],{"class":318},"    # lr为学习率\n",[312,34029,34030,34033,34035,34038,34041,34043,34046],{"class":314,"line":9848},[312,34031,34032],{"class":324},"    optimizer",[312,34034,336],{"class":1436},[312,34036,34037],{"class":324},"torch.optim.Adam(model.parameters(),",[312,34039,34040],{"class":1579},"lr",[312,34042,336],{"class":1436},[312,34044,34045],{"class":488},"0.001",[312,34047,1959],{"class":324},[312,34049,34050],{"class":314,"line":9860},[312,34051,4205],{"emptyLinePlaceholder":1881},[312,34053,34054],{"class":314,"line":11519},[312,34055,34056],{"class":318},"    # 定义损失函数使用交叉熵损失函数\n",[312,34058,34059,34062,34064],{"class":314,"line":11544},[312,34060,34061],{"class":324},"    criterion",[312,34063,336],{"class":1436},[312,34065,34066],{"class":324},"nn.CrossEntropyLoss()\n",[312,34068,34069],{"class":314,"line":11567},[312,34070,4205],{"emptyLinePlaceholder":1881},[312,34072,34073],{"class":314,"line":11591},[312,34074,34075],{"class":318},"    # 将模型放到GPU中进行训练\n",[312,34077,34078,34080,34082],{"class":314,"line":11596},[312,34079,33084],{"class":324},[312,34081,336],{"class":1436},[312,34083,34084],{"class":324},"model.to(device)\n",[312,34086,34087],{"class":314,"line":11601},[312,34088,34089],{"class":318},"    # 复制当前模型的参数\n",[312,34091,34092],{"class":314,"line":11606},[312,34093,34094],{"class":318},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[312,34096,34097],{"class":314,"line":11615},[312,34098,34099],{"class":318},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[312,34101,34102,34105,34107],{"class":314,"line":11620},[312,34103,34104],{"class":324},"    best_model_wts",[312,34106,336],{"class":1436},[312,34108,34109],{"class":324},"copy.deepcopy(model.state_dict())\n",[312,34111,34112],{"class":314,"line":11626},[312,34113,4205],{"emptyLinePlaceholder":1881},[312,34115,34116],{"class":314,"line":11647},[312,34117,4205],{"emptyLinePlaceholder":1881},[312,34119,34120],{"class":314,"line":11653},[312,34121,34122],{"class":318},"    # 初始化参数\n",[312,34124,34125],{"class":314,"line":11667},[312,34126,34127],{"class":318},"    # 最高准确度\n",[312,34129,34130,34133,34135],{"class":314,"line":11673},[312,34131,34132],{"class":324},"    best_acc",[312,34134,336],{"class":1436},[312,34136,34137],{"class":488},"0.0\n",[312,34139,34140],{"class":314,"line":11700},[312,34141,34142],{"class":318},"    # 训练集损失列表\n",[312,34144,34145,34148,34150],{"class":314,"line":11709},[312,34146,34147],{"class":324},"    train_loss_all",[312,34149,336],{"class":1436},[312,34151,34152],{"class":324},"[]\n",[312,34154,34155],{"class":314,"line":11715},[312,34156,34157],{"class":318},"    # 验证集函数列表\n",[312,34159,34160,34163,34165],{"class":314,"line":11723},[312,34161,34162],{"class":324},"    val_loss_all",[312,34164,336],{"class":1436},[312,34166,34152],{"class":324},[312,34168,34169],{"class":314,"line":11728},[312,34170,34171],{"class":318},"    # 训练集准确度列表\n",[312,34173,34174,34177,34179],{"class":314,"line":18404},[312,34175,34176],{"class":324},"    train_acc_all",[312,34178,336],{"class":1436},[312,34180,34152],{"class":324},[312,34182,34183],{"class":314,"line":18410},[312,34184,34185],{"class":318},"    # 验证集准确度列表\n",[312,34187,34188,34191,34193],{"class":314,"line":18433},[312,34189,34190],{"class":324},"    val_acc_all",[312,34192,336],{"class":1436},[312,34194,34152],{"class":324},[312,34196,34197],{"class":314,"line":18439},[312,34198,4205],{"emptyLinePlaceholder":1881},[312,34200,34201],{"class":314,"line":18462},[312,34202,34203],{"class":318},"    # 保存当前时间--->方便看每轮训练的时间\n",[312,34205,34206,34209,34211],{"class":314,"line":18476},[312,34207,34208],{"class":324},"    since",[312,34210,336],{"class":1436},[312,34212,34213],{"class":324},"time.time()\n",[312,34215,34216],{"class":314,"line":18496},[312,34217,4205],{"emptyLinePlaceholder":1881},[312,34219,34220],{"class":314,"line":18502},[312,34221,4205],{"emptyLinePlaceholder":1881},[312,34223,34224],{"class":314,"line":18513},[312,34225,34226],{"class":318},"    # 准备工作完成--->开始训练模型\n",[312,34228,34229,34231,34234,34236,34239],{"class":314,"line":18536},[312,34230,5006],{"class":1436},[312,34232,34233],{"class":324}," epoch ",[312,34235,27839],{"class":1436},[312,34237,34238],{"class":488}," range",[312,34240,34241],{"class":324},"(num_epochs):\n",[312,34243,34244,34247,34249,34252,34255,34257,34259,34261,34264,34266,34268],{"class":314,"line":18558},[312,34245,34246],{"class":488},"        print",[312,34248,1576],{"class":324},[312,34250,34251],{"class":339},"\"Epoch ",[312,34253,34254],{"class":488},"{}",[312,34256,2529],{"class":339},[312,34258,34254],{"class":488},[312,34260,2196],{"class":339},[312,34262,34263],{"class":324},".format(epoch,num_epochs",[312,34265,2477],{"class":1436},[312,34267,1433],{"class":488},[312,34269,32293],{"class":324},[312,34271,34272,34274,34276,34279,34281,34283],{"class":314,"line":18563},[312,34273,34246],{"class":488},[312,34275,1576],{"class":324},[312,34277,34278],{"class":339},"\"-\"",[312,34280,2400],{"class":1436},[312,34282,2391],{"class":488},[312,34284,1959],{"class":324},[312,34286,34287],{"class":314,"line":18569},[312,34288,4205],{"emptyLinePlaceholder":1881},[312,34290,34291],{"class":314,"line":18583},[312,34292,34293],{"class":318},"        # 初始化参数\n",[312,34295,34296],{"class":314,"line":18596},[312,34297,34298],{"class":318},"        # 训练集损失函数\n",[312,34300,34301,34304,34306],{"class":314,"line":18601},[312,34302,34303],{"class":324},"        train_loss",[312,34305,336],{"class":1436},[312,34307,34137],{"class":488},[312,34309,34310],{"class":314,"line":18615},[312,34311,34312],{"class":318},"        # 训练集准确度\n",[312,34314,34315,34318,34320],{"class":314,"line":18620},[312,34316,34317],{"class":324},"        train_corrects",[312,34319,336],{"class":1436},[312,34321,4890],{"class":488},[312,34323,34324],{"class":314,"line":18626},[312,34325,34326],{"class":318},"        # 验证集损失函数\n",[312,34328,34329,34332,34334],{"class":314,"line":18631},[312,34330,34331],{"class":324},"        val_loss",[312,34333,336],{"class":1436},[312,34335,34137],{"class":488},[312,34337,34338],{"class":314,"line":18645},[312,34339,34340],{"class":318},"        # 验证集准确度\n",[312,34342,34343,34346,34348],{"class":314,"line":18650},[312,34344,34345],{"class":324},"        val_corrects",[312,34347,336],{"class":1436},[312,34349,4890],{"class":488},[312,34351,34352],{"class":314,"line":18655},[312,34353,34354],{"class":318},"        # 训练集样本数量\n",[312,34356,34357,34360,34362],{"class":314,"line":18669},[312,34358,34359],{"class":324},"        train_num",[312,34361,336],{"class":1436},[312,34363,4890],{"class":488},[312,34365,34366],{"class":314,"line":18681},[312,34367,34368],{"class":318},"        # 验证集样本数量\n",[312,34370,34371,34374,34376],{"class":314,"line":18686},[312,34372,34373],{"class":324},"        val_num",[312,34375,336],{"class":1436},[312,34377,4890],{"class":488},[312,34379,34380],{"class":314,"line":18699},[312,34381,34382],{"class":318},"        # 将数据放到设备,并开始训练\n",[312,34384,34385,34387,34389,34391,34393],{"class":314,"line":18704},[312,34386,5208],{"class":1436},[312,34388,33396],{"class":324},[312,34390,27839],{"class":1436},[312,34392,33401],{"class":488},[312,34394,34395],{"class":324},"(train_dataloader):\n",[312,34397,34398],{"class":314,"line":18709},[312,34399,34400],{"class":318},"            # 将特征放入到训练设备\n",[312,34402,34403,34406,34408],{"class":314,"line":18714},[312,34404,34405],{"class":324},"            b_x",[312,34407,336],{"class":1436},[312,34409,34410],{"class":324},"b_x.to(device)\n",[312,34412,34413],{"class":314,"line":18727},[312,34414,34415],{"class":318},"            # 将标签放入到训练设备当中\n",[312,34417,34418,34421,34423],{"class":314,"line":18732},[312,34419,34420],{"class":324},"            b_y",[312,34422,336],{"class":1436},[312,34424,34425],{"class":324},"b_y.to(device)\n",[312,34427,34429],{"class":314,"line":34428},98,[312,34430,34431],{"class":318},"            # 设置模型为训练模式\n",[312,34433,34435],{"class":314,"line":34434},99,[312,34436,34437],{"class":324},"            model.train()\n",[312,34439,34441],{"class":314,"line":34440},100,[312,34442,34443],{"class":318},"            # 将数据放到模型当中,开始前向传播\n",[312,34445,34447],{"class":314,"line":34446},101,[312,34448,34449],{"class":318},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[312,34451,34453,34456,34458],{"class":314,"line":34452},102,[312,34454,34455],{"class":324},"            output",[312,34457,336],{"class":1436},[312,34459,34460],{"class":324},"model(b_x)\n",[312,34462,34464],{"class":314,"line":34463},103,[312,34465,34466],{"class":318},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[312,34468,34470,34473,34475,34478,34481,34483,34485],{"class":314,"line":34469},104,[312,34471,34472],{"class":324},"            pre_lab",[312,34474,336],{"class":1436},[312,34476,34477],{"class":324},"torch.argmax(output,",[312,34479,34480],{"class":1579},"dim",[312,34482,336],{"class":1436},[312,34484,1433],{"class":488},[312,34486,1959],{"class":324},[312,34488,34490],{"class":314,"line":34489},105,[312,34491,34492],{"class":318},"            # 计算每一个batch的损失函数\n",[312,34494,34496,34499,34501],{"class":314,"line":34495},106,[312,34497,34498],{"class":324},"            loss",[312,34500,336],{"class":1436},[312,34502,34503],{"class":324},"criterion(output,b_y)\n",[312,34505,34507],{"class":314,"line":34506},107,[312,34508,34509],{"class":318},"            # 将梯度初始化为0\n",[312,34511,34513],{"class":314,"line":34512},108,[312,34514,34515],{"class":324},"            optimizer.zero_grad()\n",[312,34517,34519],{"class":314,"line":34518},109,[312,34520,34521],{"class":318},"            # 梯度置为0后再进行反向传播\n",[312,34523,34525],{"class":314,"line":34524},110,[312,34526,34527],{"class":324},"            loss.backward()\n",[312,34529,34531],{"class":314,"line":34530},111,[312,34532,34533],{"class":318},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[312,34535,34537],{"class":314,"line":34536},112,[312,34538,34539],{"class":324},"            optimizer.step()\n",[312,34541,34543],{"class":314,"line":34542},113,[312,34544,34545],{"class":318},"            # loss.item()指的是batch的平均损失\n",[312,34547,34549,34552,34554,34557,34559,34562,34564],{"class":314,"line":34548},114,[312,34550,34551],{"class":324},"            train_loss",[312,34553,11280],{"class":1436},[312,34555,34556],{"class":324},"loss.item()",[312,34558,2400],{"class":1436},[312,34560,34561],{"class":324},"b_x.size(",[312,34563,858],{"class":488},[312,34565,1959],{"class":324},[312,34567,34569],{"class":314,"line":34568},115,[312,34570,34571],{"class":318},"            # 计算每个批次中正确预测的数量\n",[312,34573,34575,34578,34580,34583,34585],{"class":314,"line":34574},116,[312,34576,34577],{"class":324},"            train_corrects",[312,34579,11280],{"class":1436},[312,34581,34582],{"class":324},"torch.sum(pre_lab",[312,34584,4754],{"class":1436},[312,34586,34587],{"class":324},"b_y.data)\n",[312,34589,34591],{"class":314,"line":34590},117,[312,34592,34593],{"class":318},"            # 计算目前为止一共处理了多少样本\n",[312,34595,34597,34600,34602,34604,34606],{"class":314,"line":34596},118,[312,34598,34599],{"class":324},"            train_num",[312,34601,11280],{"class":1436},[312,34603,34561],{"class":324},[312,34605,858],{"class":488},[312,34607,1959],{"class":324},[312,34609,34611],{"class":314,"line":34610},119,[312,34612,34613],{"class":318},"        # 验证数据\n",[312,34615,34617,34619,34622,34624,34626],{"class":314,"line":34616},120,[312,34618,5208],{"class":1436},[312,34620,34621],{"class":324}," step ,(b_x,b_y) ",[312,34623,27839],{"class":1436},[312,34625,33401],{"class":488},[312,34627,34628],{"class":324},"(val_dataloader):\n",[312,34630,34632],{"class":314,"line":34631},121,[312,34633,34634],{"class":318},"            # 将特征放到验证设备当中\n",[312,34636,34638,34640,34642],{"class":314,"line":34637},122,[312,34639,34405],{"class":324},[312,34641,336],{"class":1436},[312,34643,34410],{"class":324},[312,34645,34647],{"class":314,"line":34646},123,[312,34648,34649],{"class":318},"            # 将标签放到放到训练设备当中\n",[312,34651,34653,34655,34657],{"class":314,"line":34652},124,[312,34654,34420],{"class":324},[312,34656,336],{"class":1436},[312,34658,34425],{"class":324},[312,34660,34662],{"class":314,"line":34661},125,[312,34663,34664],{"class":318},"            # 开启验证模式，设置模型为评估模式\n",[312,34666,34668],{"class":314,"line":34667},126,[312,34669,34670],{"class":324},"            model.eval()\n",[312,34672,34674,34677],{"class":314,"line":34673},127,[312,34675,34676],{"class":1436},"            with",[312,34678,34679],{"class":324}," torch.no_grad():\n",[312,34681,34683],{"class":314,"line":34682},128,[312,34684,34685],{"class":318},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[312,34687,34689,34692,34694],{"class":314,"line":34688},129,[312,34690,34691],{"class":324},"                output ",[312,34693,336],{"class":1436},[312,34695,34696],{"class":324}," model(b_x)\n",[312,34698,34700],{"class":314,"line":34699},130,[312,34701,34702],{"class":318},"                # 查找每一行中最大值对应的下标\n",[312,34704,34706,34709,34711,34714,34716,34718,34720],{"class":314,"line":34705},131,[312,34707,34708],{"class":324},"                pre_lab ",[312,34710,336],{"class":1436},[312,34712,34713],{"class":324}," torch.argmax(output, ",[312,34715,34480],{"class":1579},[312,34717,336],{"class":1436},[312,34719,1433],{"class":488},[312,34721,1959],{"class":324},[312,34723,34725],{"class":314,"line":34724},132,[312,34726,34727],{"class":318},"                # 计算验证集上的当前 batch 损失\n",[312,34729,34731,34734,34736],{"class":314,"line":34730},133,[312,34732,34733],{"class":324},"                val_batch_loss ",[312,34735,336],{"class":1436},[312,34737,34738],{"class":324}," criterion(output, b_y)\n",[312,34740,34742],{"class":314,"line":34741},134,[312,34743,34744],{"class":318},"                # 对损失函数进行累加（按样本数加权）\n",[312,34746,34748,34751,34753,34756,34758,34761,34763],{"class":314,"line":34747},135,[312,34749,34750],{"class":324},"                val_loss ",[312,34752,11280],{"class":1436},[312,34754,34755],{"class":324}," val_batch_loss.item() ",[312,34757,2400],{"class":1436},[312,34759,34760],{"class":324}," b_x.size(",[312,34762,858],{"class":488},[312,34764,1959],{"class":324},[312,34766,34768,34771,34773,34776,34778],{"class":314,"line":34767},136,[312,34769,34770],{"class":324},"                val_corrects ",[312,34772,11280],{"class":1436},[312,34774,34775],{"class":324}," torch.sum(pre_lab ",[312,34777,4754],{"class":1436},[312,34779,34780],{"class":324}," b_y.data)\n",[312,34782,34784],{"class":314,"line":34783},137,[312,34785,34786],{"class":318},"                # 当前用于验证的样本数量\n",[312,34788,34790,34793,34795,34797,34799],{"class":314,"line":34789},138,[312,34791,34792],{"class":324},"            val_num ",[312,34794,11280],{"class":1436},[312,34796,34760],{"class":324},[312,34798,858],{"class":488},[312,34800,1959],{"class":324},[312,34802,34804],{"class":314,"line":34803},139,[312,34805,34806],{"class":318},"        # 计算并保存每一次迭代的loss值和准确率\n",[312,34808,34810],{"class":314,"line":34809},140,[312,34811,34812],{"class":318},"        # 计算并保存训练集的loss值\n",[312,34814,34816,34819,34821],{"class":314,"line":34815},141,[312,34817,34818],{"class":324},"        train_loss_all.append(train_loss",[312,34820,2529],{"class":1436},[312,34822,34823],{"class":324},"train_num)\n",[312,34825,34827],{"class":314,"line":34826},142,[312,34828,34829],{"class":318},"        # 取双精度\n",[312,34831,34833],{"class":314,"line":34832},143,[312,34834,34835],{"class":318},"        # 计算并保存训练集的准确率\n",[312,34837,34839,34842,34844],{"class":314,"line":34838},144,[312,34840,34841],{"class":324},"        train_acc_all.append(train_corrects.double().item()",[312,34843,2529],{"class":1436},[312,34845,34823],{"class":324},[312,34847,34849],{"class":314,"line":34848},145,[312,34850,34851],{"class":318},"        # 计算并保存验证集的loss值\n",[312,34853,34855,34858,34860],{"class":314,"line":34854},146,[312,34856,34857],{"class":324},"        val_loss_all.append(val_loss",[312,34859,2529],{"class":1436},[312,34861,34862],{"class":324},"val_num)\n",[312,34864,34866],{"class":314,"line":34865},147,[312,34867,34868],{"class":318},"        # 计算并保存验证集的准确率\n",[312,34870,34872,34875,34877],{"class":314,"line":34871},148,[312,34873,34874],{"class":324},"        val_acc_all.append(val_corrects.double().item()",[312,34876,2529],{"class":1436},[312,34878,34862],{"class":324},[312,34880,34882],{"class":314,"line":34881},149,[312,34883,4205],{"emptyLinePlaceholder":1881},[312,34885,34887],{"class":314,"line":34886},150,[312,34888,34889],{"class":318},"        # 打印训练一轮的loss值和准确率\n",[312,34891,34893,34895,34897,34899,34901,34904,34906,34909,34911,34914,34916,34918,34920,34922,34925,34927,34929,34932,34934,34936],{"class":314,"line":34892},151,[312,34894,34246],{"class":488},[312,34896,1576],{"class":324},[312,34898,5397],{"class":339},[312,34900,34254],{"class":488},[312,34902,34903],{"class":339},"train loss:",[312,34905,2840],{"class":488},[312,34907,34908],{"class":1436},":.4f",[312,34910,2888],{"class":488},[312,34912,34913],{"class":339}," train acc:",[312,34915,2840],{"class":488},[312,34917,34908],{"class":1436},[312,34919,2888],{"class":488},[312,34921,5397],{"class":339},[312,34923,34924],{"class":324},".format(epoch,train_loss_all[",[312,34926,2477],{"class":1436},[312,34928,1433],{"class":488},[312,34930,34931],{"class":324},"],train_acc_all[",[312,34933,2477],{"class":1436},[312,34935,1433],{"class":488},[312,34937,34938],{"class":324},"]))\n",[312,34940,34942,34944,34946,34948,34950,34953,34955,34957,34959,34962,34964,34966,34968,34970,34973,34975,34977,34980,34982,34984],{"class":314,"line":34941},152,[312,34943,34246],{"class":488},[312,34945,1576],{"class":324},[312,34947,5397],{"class":339},[312,34949,34254],{"class":488},[312,34951,34952],{"class":339},"val loss:",[312,34954,2840],{"class":488},[312,34956,34908],{"class":1436},[312,34958,2888],{"class":488},[312,34960,34961],{"class":339}," val acc:",[312,34963,2840],{"class":488},[312,34965,34908],{"class":1436},[312,34967,2888],{"class":488},[312,34969,5397],{"class":339},[312,34971,34972],{"class":324},".format(epoch,val_loss_all[",[312,34974,2477],{"class":1436},[312,34976,1433],{"class":488},[312,34978,34979],{"class":324},"],val_acc_all[",[312,34981,2477],{"class":1436},[312,34983,1433],{"class":488},[312,34985,34938],{"class":324},[312,34987,34989],{"class":314,"line":34988},153,[312,34990,4205],{"emptyLinePlaceholder":1881},[312,34992,34994],{"class":314,"line":34993},154,[312,34995,34996],{"class":318},"        # 判断准确度--->保存最优模型\n",[312,34998,35000,35002,35005,35007,35009,35011,35013],{"class":314,"line":34999},155,[312,35001,4302],{"class":1436},[312,35003,35004],{"class":324}," val_acc_all[",[312,35006,2477],{"class":1436},[312,35008,1433],{"class":488},[312,35010,2882],{"class":324},[312,35012,2902],{"class":1436},[312,35014,35015],{"class":324},"best_acc:\n",[312,35017,35019],{"class":314,"line":35018},156,[312,35020,35021],{"class":318},"            # 保存当前模型准确度\n",[312,35023,35025,35028,35030,35032,35035,35037,35039],{"class":314,"line":35024},157,[312,35026,35027],{"class":324},"            best_acc:",[312,35029,1992],{"class":488},[312,35031,336],{"class":1436},[312,35033,35034],{"class":324},"val_acc_all[",[312,35036,2477],{"class":1436},[312,35038,1433],{"class":488},[312,35040,35041],{"class":324},"]\n",[312,35043,35045],{"class":314,"line":35044},158,[312,35046,35047],{"class":318},"            # 保存当前的准确度\n",[312,35049,35051],{"class":314,"line":35050},159,[312,35052,35053],{"class":318},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[312,35055,35057,35060,35062],{"class":314,"line":35056},160,[312,35058,35059],{"class":324},"            best_model_wts",[312,35061,336],{"class":1436},[312,35063,34109],{"class":324},[312,35065,35067],{"class":314,"line":35066},161,[312,35068,4205],{"emptyLinePlaceholder":1881},[312,35070,35072],{"class":314,"line":35071},162,[312,35073,35074],{"class":318},"        # 计算耗时\n",[312,35076,35078,35081,35083,35086,35088],{"class":314,"line":35077},163,[312,35079,35080],{"class":324},"        time_use",[312,35082,336],{"class":1436},[312,35084,35085],{"class":324},"time.time()",[312,35087,2477],{"class":1436},[312,35089,35090],{"class":324},"since\n",[312,35092,35094,35096,35098,35101,35103,35106,35108,35110,35112,35114,35116,35119,35122,35125,35127,35130,35132,35134],{"class":314,"line":35093},164,[312,35095,34246],{"class":488},[312,35097,1576],{"class":324},[312,35099,35100],{"class":339},"'训练和验证耗费的时间",[312,35102,2840],{"class":488},[312,35104,35105],{"class":1436},":.0f",[312,35107,2888],{"class":488},[312,35109,2489],{"class":339},[312,35111,2840],{"class":488},[312,35113,35105],{"class":1436},[312,35115,2888],{"class":488},[312,35117,35118],{"class":339},"s'",[312,35120,35121],{"class":324},".format(time_use",[312,35123,35124],{"class":1436},"\u002F\u002F",[312,35126,2851],{"class":488},[312,35128,35129],{"class":324},",time_use",[312,35131,2273],{"class":1436},[312,35133,2851],{"class":488},[312,35135,32293],{"class":324},[312,35137,35139],{"class":314,"line":35138},165,[312,35140,35141],{"class":318},"    # 选择最优参数\n",[312,35143,35145],{"class":314,"line":35144},166,[312,35146,35147],{"class":318},"    # 加载最高准确率下的模型参数\n",[312,35149,35151],{"class":314,"line":35150},167,[312,35152,35153],{"class":318},"    # model.load_state_dict(best_model_wts)\n",[312,35155,35157,35160,35163],{"class":314,"line":35156},168,[312,35158,35159],{"class":324},"    torch.save(model.state_dict(best_model_wts), ",[312,35161,35162],{"class":339},"'.\u002Fbest_model.pth'",[312,35164,1959],{"class":324},[312,35166,35168],{"class":314,"line":35167},169,[312,35169,35170],{"class":318},"    # 或者写成\n",[312,35172,35174],{"class":314,"line":35173},170,[312,35175,35176],{"class":318},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[312,35178,35180],{"class":314,"line":35179},171,[312,35181,35182],{"class":318},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[312,35184,35186,35189,35191,35194,35197,35199],{"class":314,"line":35185},172,[312,35187,35188],{"class":324},"    train_process",[312,35190,336],{"class":1436},[312,35192,35193],{"class":324},"pd.DataFrame(",[312,35195,35196],{"class":1579},"data",[312,35198,336],{"class":1436},[312,35200,3353],{"class":324},[312,35202,35204,35207,35209,35212],{"class":314,"line":35203},173,[312,35205,35206],{"class":339},"        \"epoch\"",[312,35208,2803],{"class":324},[312,35210,35211],{"class":488},"range",[312,35213,35214],{"class":324},"(num_epochs),\n",[312,35216,35218,35221],{"class":314,"line":35217},174,[312,35219,35220],{"class":339},"        \"train_loss_all\"",[312,35222,35223],{"class":324},":train_loss_all,\n",[312,35225,35227,35230],{"class":314,"line":35226},175,[312,35228,35229],{"class":339},"        \"val_loss_all\"",[312,35231,35232],{"class":324},":val_loss_all,\n",[312,35234,35236,35239],{"class":314,"line":35235},176,[312,35237,35238],{"class":339},"        \"train_acc_all\"",[312,35240,35241],{"class":324},":train_acc_all,\n",[312,35243,35245,35248],{"class":314,"line":35244},177,[312,35246,35247],{"class":339},"        \"val_acc_all\"",[312,35249,35250],{"class":324},":val_acc_all\n",[312,35252,35254],{"class":314,"line":35253},178,[312,35255,35256],{"class":324},"    })\n",[312,35258,35260],{"class":314,"line":35259},179,[312,35261,35262],{"class":318},"    # 返回训练保存的过程\n",[312,35264,35266,35268],{"class":314,"line":35265},180,[312,35267,5895],{"class":1436},[312,35269,35270],{"class":324}," train_process\n",[312,35272,35274],{"class":314,"line":35273},181,[312,35275,4205],{"emptyLinePlaceholder":1881},[312,35277,35279],{"class":314,"line":35278},182,[312,35280,35281],{"class":318},"# 将loss值和精度按照图片的形式展示出来\n",[312,35283,35285,35287,35290],{"class":314,"line":35284},183,[312,35286,33742],{"class":1436},[312,35288,35289],{"class":332}," matplot_acc_loss",[312,35291,35292],{"class":324},"(train_process):\n",[312,35294,35296],{"class":314,"line":35295},184,[312,35297,35298],{"class":318},"    # 设置图的大小\n",[312,35300,35302,35305,35307,35309,35311,35313,35315,35317],{"class":314,"line":35301},185,[312,35303,35304],{"class":324},"    plt.figure(",[312,35306,33488],{"class":1579},[312,35308,336],{"class":1436},[312,35310,1576],{"class":324},[312,35312,2443],{"class":488},[312,35314,2323],{"class":324},[312,35316,2238],{"class":488},[312,35318,32293],{"class":324},[312,35320,35322],{"class":314,"line":35321},186,[312,35323,35324],{"class":318},"    # 设置图中有几张图\n",[312,35326,35328],{"class":314,"line":35327},187,[312,35329,35330],{"class":318},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[312,35332,35334],{"class":314,"line":35333},188,[312,35335,35336],{"class":318},"    # ①loss图\n",[312,35338,35340,35342,35344,35346,35348,35350,35352],{"class":314,"line":35339},189,[312,35341,33522],{"class":324},[312,35343,1433],{"class":488},[312,35345,2323],{"class":324},[312,35347,2027],{"class":488},[312,35349,2323],{"class":324},[312,35351,1433],{"class":488},[312,35353,1959],{"class":324},[312,35355,35357],{"class":314,"line":35356},190,[312,35358,35359],{"class":318},"    # 补充:\n",[312,35361,35363],{"class":314,"line":35362},191,[312,35364,35365],{"class":318},"    # plt.subplot(nrows, ncols, index)\n",[312,35367,35369],{"class":314,"line":35368},192,[312,35370,35371],{"class":318},"    # nrows：行数\n",[312,35373,35375],{"class":314,"line":35374},193,[312,35376,35377],{"class":318},"    # ncols：列数\n",[312,35379,35381],{"class":314,"line":35380},194,[312,35382,35383],{"class":318},"    # index：目前选中第几个子图（从1开始）\n",[312,35385,35387,35390,35393,35396,35399,35401,35404,35406,35409],{"class":314,"line":35386},195,[312,35388,35389],{"class":324},"    plt.plot(train_process[",[312,35391,35392],{"class":339},"\"epoch\"",[312,35394,35395],{"class":324},"],train_process.train_loss_all,",[312,35397,35398],{"class":339},"'ro-'",[312,35400,2323],{"class":324},[312,35402,35403],{"class":1579},"label",[312,35405,336],{"class":1436},[312,35407,35408],{"class":339},"'train loss'",[312,35410,1959],{"class":324},[312,35412,35414,35416,35418,35421,35424,35426,35428,35430,35433],{"class":314,"line":35413},196,[312,35415,35389],{"class":324},[312,35417,35392],{"class":339},[312,35419,35420],{"class":324},"],train_process.val_loss_all,",[312,35422,35423],{"class":339},"'bs--'",[312,35425,2323],{"class":324},[312,35427,35403],{"class":1579},[312,35429,336],{"class":1436},[312,35431,35432],{"class":339},"'val loss'",[312,35434,1959],{"class":324},[312,35436,35438],{"class":314,"line":35437},197,[312,35439,35440],{"class":318},"    # 添加一个图例\n",[312,35442,35444],{"class":314,"line":35443},198,[312,35445,35446],{"class":324},"    plt.legend()\n",[312,35448,35450],{"class":314,"line":35449},199,[312,35451,35452],{"class":318},"    # 给轴添加标签\n",[312,35454,35456,35459,35462],{"class":314,"line":35455},200,[312,35457,35458],{"class":324},"    plt.xlabel(",[312,35460,35461],{"class":339},"'epoch'",[312,35463,1959],{"class":324},[312,35465,35467,35470,35473],{"class":314,"line":35466},201,[312,35468,35469],{"class":324},"    plt.ylabel(",[312,35471,35472],{"class":339},"'loss'",[312,35474,1959],{"class":324},[312,35476,35478],{"class":314,"line":35477},202,[312,35479,35480],{"class":318},"    # ②准确度图\n",[312,35482,35484,35486,35488,35490,35492,35494,35496],{"class":314,"line":35483},203,[312,35485,33522],{"class":324},[312,35487,1433],{"class":488},[312,35489,2323],{"class":324},[312,35491,2027],{"class":488},[312,35493,2323],{"class":324},[312,35495,2027],{"class":488},[312,35497,1959],{"class":324},[312,35499,35501,35503,35505,35508,35510,35512,35514,35516,35519],{"class":314,"line":35500},204,[312,35502,35389],{"class":324},[312,35504,35392],{"class":339},[312,35506,35507],{"class":324},"],train_process.train_acc_all,",[312,35509,35398],{"class":339},[312,35511,2323],{"class":324},[312,35513,35403],{"class":1579},[312,35515,336],{"class":1436},[312,35517,35518],{"class":339},"'train acc'",[312,35520,1959],{"class":324},[312,35522,35524,35526,35528,35531,35533,35535,35537,35539,35542],{"class":314,"line":35523},205,[312,35525,35389],{"class":324},[312,35527,35392],{"class":339},[312,35529,35530],{"class":324},"],train_process.val_acc_all,",[312,35532,35423],{"class":339},[312,35534,2323],{"class":324},[312,35536,35403],{"class":1579},[312,35538,336],{"class":1436},[312,35540,35541],{"class":339},"'val acc'",[312,35543,1959],{"class":324},[312,35545,35547],{"class":314,"line":35546},206,[312,35548,35549],{"class":318},"    # 添加图例\n",[312,35551,35553],{"class":314,"line":35552},207,[312,35554,35446],{"class":324},[312,35556,35558,35560,35562],{"class":314,"line":35557},208,[312,35559,35458],{"class":324},[312,35561,35392],{"class":339},[312,35563,1959],{"class":324},[312,35565,35567,35569,35572],{"class":314,"line":35566},209,[312,35568,35469],{"class":324},[312,35570,35571],{"class":339},"\"acc\"",[312,35573,1959],{"class":324},[312,35575,35577],{"class":314,"line":35576},210,[312,35578,35579],{"class":324},"    plt.show()\n",[312,35581,35583],{"class":314,"line":35582},211,[312,35584,4205],{"emptyLinePlaceholder":1881},[312,35586,35588],{"class":314,"line":35587},212,[312,35589,35590],{"class":318},"# 正式开始训练:\n",[312,35592,35594,35596,35598,35600,35602],{"class":314,"line":35593},213,[312,35595,3338],{"class":1436},[312,35597,33015],{"class":488},[312,35599,4754],{"class":1436},[312,35601,33020],{"class":339},[312,35603,5544],{"class":324},[312,35605,35607],{"class":314,"line":35606},214,[312,35608,35609],{"class":318},"    # 将模型实例化\n",[312,35611,35613,35616,35618],{"class":314,"line":35612},215,[312,35614,35615],{"class":324},"    LeNet",[312,35617,336],{"class":1436},[312,35619,35620],{"class":324},"LeNet()\n",[312,35622,35624,35627,35629],{"class":314,"line":35623},216,[312,35625,35626],{"class":324},"    train_dataloader,val_dataloader",[312,35628,336],{"class":1436},[312,35630,35631],{"class":324},"train_val_data_process()\n",[312,35633,35635,35637,35639,35642,35645,35647,35649],{"class":314,"line":35634},217,[312,35636,35188],{"class":324},[312,35638,336],{"class":1436},[312,35640,35641],{"class":324},"train_model_process(LeNet,train_dataloader,val_dataloader,",[312,35643,35644],{"class":1579},"num_epochs",[312,35646,336],{"class":1436},[312,35648,1546],{"class":488},[312,35650,1959],{"class":324},[312,35652,35654],{"class":314,"line":35653},218,[312,35655,35656],{"class":324},"    matplot_acc_loss(train_process)\n",[24,35658,35659],{},"画图的补充点学习：",[24,35661,35662],{},[19,35663],{"alt":308,"src":35664},"\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",[140,35666,35667],{"start":274},[143,35668,35669],{},"测试",[303,35671,35673],{"className":32174,"code":35672,"language":32176,"meta":308,"style":308},"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",[119,35674,35675,35681,35691,35703,35713,35718,35728,35738,35742,35747,35756,35773,35785,35802,35813,35829,35834,35845,35856,35867,35874,35878,35883,35893,35898,35915,35923,35927,35932,35941,35950,35954,35959,35964,35969,35976,35981,35993,36003,36013,36018,36022,36027,36036,36041,36057,36062,36067,36072,36086,36091,36105,36109,36114,36129,36134,36146,36150,36155,36167,36172,36180,36185,36190,36200,36205,36214,36219,36224,36228,36233,36238,36254,36262,36267,36272,36331,36337,36342,36353,36361,36369,36373,36378,36382,36387,36395,36400,36416,36421,36431,36441],{"__ignoreMap":308},[312,35676,35677,35679],{"class":314,"line":315},[312,35678,32188],{"class":1436},[312,35680,32191],{"class":324},[312,35682,35683,35685,35687,35689],{"class":314,"line":171},[312,35684,32188],{"class":1436},[312,35686,33210],{"class":324},[312,35688,33178],{"class":1436},[312,35690,33215],{"class":324},[312,35692,35693,35695,35698,35700],{"class":314,"line":274},[312,35694,32533],{"class":1436},[312,35696,35697],{"class":324}," jupyter_client.consoleapp ",[312,35699,32188],{"class":1436},[312,35701,35702],{"class":324}," classes\n",[312,35704,35705,35707,35709,35711],{"class":314,"line":298},[312,35706,32533],{"class":1436},[312,35708,33193],{"class":324},[312,35710,32188],{"class":1436},[312,35712,33198],{"class":324},[312,35714,35715],{"class":314,"line":974},[312,35716,35717],{"class":318},"# 导入数据集\n",[312,35719,35720,35722,35724,35726],{"class":314,"line":980},[312,35721,32533],{"class":1436},[312,35723,33163],{"class":324},[312,35725,32188],{"class":1436},[312,35727,33168],{"class":324},[312,35729,35730,35732,35734,35736],{"class":314,"line":997},[312,35731,32533],{"class":1436},[312,35733,33709],{"class":324},[312,35735,32188],{"class":1436},[312,35737,33714],{"class":324},[312,35739,35740],{"class":314,"line":1003},[312,35741,4205],{"emptyLinePlaceholder":1881},[312,35743,35744],{"class":314,"line":1020},[312,35745,35746],{"class":318},"# 测试数据处理\n",[312,35748,35749,35751,35754],{"class":314,"line":1026},[312,35750,33742],{"class":1436},[312,35752,35753],{"class":332}," test_data_process",[312,35755,33748],{"class":324},[312,35757,35758,35761,35763,35765,35767,35769,35771],{"class":314,"line":3418},[312,35759,35760],{"class":324},"    test_data",[312,35762,336],{"class":1436},[312,35764,33250],{"class":324},[312,35766,33253],{"class":1579},[312,35768,336],{"class":1436},[312,35770,33258],{"class":339},[312,35772,33261],{"class":324},[312,35774,35775,35778,35780,35783],{"class":314,"line":3423},[312,35776,35777],{"class":1579},"                           train",[312,35779,336],{"class":1436},[312,35781,35782],{"class":488},"False",[312,35784,33261],{"class":324},[312,35786,35787,35790,35792,35794,35796,35798,35800],{"class":314,"line":3429},[312,35788,35789],{"class":1579},"                           transform",[312,35791,336],{"class":1436},[312,35793,33288],{"class":324},[312,35795,33291],{"class":1579},[312,35797,336],{"class":1436},[312,35799,2845],{"class":488},[312,35801,33299],{"class":324},[312,35803,35804,35807,35809,35811],{"class":314,"line":3434},[312,35805,35806],{"class":1579},"                           download",[312,35808,336],{"class":1436},[312,35810,33271],{"class":488},[312,35812,1959],{"class":324},[312,35814,35815,35818,35820,35822,35824,35826],{"class":314,"line":3448},[312,35816,35817],{"class":324},"    test_dataloader",[312,35819,336],{"class":1436},[312,35821,33329],{"class":324},[312,35823,33332],{"class":1579},[312,35825,336],{"class":1436},[312,35827,35828],{"class":324},"test_data,\n",[312,35830,35831],{"class":314,"line":3453},[312,35832,35833],{"class":318},"                                    # 这里是一张一张进行测试\n",[312,35835,35836,35839,35841,35843],{"class":314,"line":3459},[312,35837,35838],{"class":1579},"                                    batch_size",[312,35840,336],{"class":1436},[312,35842,1433],{"class":488},[312,35844,33261],{"class":324},[312,35846,35847,35850,35852,35854],{"class":314,"line":3480},[312,35848,35849],{"class":1579},"                                    shuffle",[312,35851,336],{"class":1436},[312,35853,33271],{"class":488},[312,35855,33261],{"class":324},[312,35857,35858,35861,35863,35865],{"class":314,"line":3485},[312,35859,35860],{"class":1579},"                                    num_workers",[312,35862,336],{"class":1436},[312,35864,858],{"class":488},[312,35866,1959],{"class":324},[312,35868,35869,35871],{"class":314,"line":3499},[312,35870,5895],{"class":1436},[312,35872,35873],{"class":324}," test_dataloader\n",[312,35875,35876],{"class":314,"line":3504},[312,35877,4205],{"emptyLinePlaceholder":1881},[312,35879,35880],{"class":314,"line":3533},[312,35881,35882],{"class":318},"# 定义模型测试函数\n",[312,35884,35885,35887,35890],{"class":314,"line":3538},[312,35886,33742],{"class":1436},[312,35888,35889],{"class":332}," test_model_process",[312,35891,35892],{"class":324},"(model,test_dataloader):\n",[312,35894,35895],{"class":314,"line":3555},[312,35896,35897],{"class":318},"    # 将模型放到设备当中，先进行判断\n",[312,35899,35900,35902,35904,35906,35908,35910,35912],{"class":314,"line":3560},[312,35901,33032],{"class":324},[312,35903,336],{"class":1436},[312,35905,33039],{"class":339},[312,35907,3510],{"class":1436},[312,35909,33044],{"class":324},[312,35911,3507],{"class":1436},[312,35913,35914],{"class":339}," \"cpu\"\n",[312,35916,35917,35919,35921],{"class":314,"line":3565},[312,35918,33084],{"class":324},[312,35920,336],{"class":1436},[312,35922,34084],{"class":324},[312,35924,35925],{"class":314,"line":3570},[312,35926,4205],{"emptyLinePlaceholder":1881},[312,35928,35929],{"class":314,"line":3584},[312,35930,35931],{"class":318},"    # 设置初始化参数\n",[312,35933,35934,35937,35939],{"class":314,"line":3589},[312,35935,35936],{"class":324},"    test_corrects",[312,35938,336],{"class":1436},[312,35940,34137],{"class":488},[312,35942,35943,35946,35948],{"class":314,"line":4382},[312,35944,35945],{"class":324},"    test_num",[312,35947,336],{"class":1436},[312,35949,4890],{"class":488},[312,35951,35952],{"class":314,"line":4396},[312,35953,4205],{"emptyLinePlaceholder":1881},[312,35955,35956],{"class":314,"line":4404},[312,35957,35958],{"class":318},"    # 进行模型测试\n",[312,35960,35961],{"class":314,"line":4409},[312,35962,35963],{"class":318},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[312,35965,35966],{"class":314,"line":4415},[312,35967,35968],{"class":318},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[312,35970,35971,35974],{"class":314,"line":4421},[312,35972,35973],{"class":1436},"    with",[312,35975,34679],{"class":324},[312,35977,35978],{"class":314,"line":4426},[312,35979,35980],{"class":318},"        # 从数据中进行\n",[312,35982,35983,35985,35988,35990],{"class":314,"line":9751},[312,35984,5208],{"class":1436},[312,35986,35987],{"class":324}," test_data_x,test_data_y ",[312,35989,27839],{"class":1436},[312,35991,35992],{"class":324}," test_dataloader:\n",[312,35994,35995,35998,36000],{"class":314,"line":9775},[312,35996,35997],{"class":324},"            test_data_x",[312,35999,336],{"class":1436},[312,36001,36002],{"class":324},"test_data_x.to(device)\n",[312,36004,36005,36008,36010],{"class":314,"line":9780},[312,36006,36007],{"class":324},"            test_data_y",[312,36009,336],{"class":1436},[312,36011,36012],{"class":324},"test_data_y.to(device)\n",[312,36014,36015],{"class":314,"line":9786},[312,36016,36017],{"class":318},"            # 设置为验证模式\n",[312,36019,36020],{"class":314,"line":9813},[312,36021,34670],{"class":324},[312,36023,36024],{"class":314,"line":9818},[312,36025,36026],{"class":318},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[312,36028,36029,36031,36033],{"class":314,"line":9824},[312,36030,34455],{"class":324},[312,36032,336],{"class":1436},[312,36034,36035],{"class":324},"model(test_data_x)\n",[312,36037,36038],{"class":314,"line":9836},[312,36039,36040],{"class":318},"            # 查找每一行中最大值对应的下标\n",[312,36042,36043,36045,36047,36049,36051,36053,36055],{"class":314,"line":9848},[312,36044,34472],{"class":324},[312,36046,336],{"class":1436},[312,36048,34477],{"class":324},[312,36050,34480],{"class":1579},[312,36052,336],{"class":1436},[312,36054,1433],{"class":488},[312,36056,1959],{"class":324},[312,36058,36059],{"class":314,"line":9860},[312,36060,36061],{"class":318},"            # 计算正确率\n",[312,36063,36064],{"class":314,"line":11519},[312,36065,36066],{"class":318},"            # .data表示是一个不带梯度信息的tensor\n",[312,36068,36069],{"class":314,"line":11544},[312,36070,36071],{"class":318},"            # 如果预测正确，则准确度test_corrects加1\n",[312,36073,36074,36077,36079,36081,36083],{"class":314,"line":11567},[312,36075,36076],{"class":324},"            test_corrects",[312,36078,11280],{"class":1436},[312,36080,34582],{"class":324},[312,36082,4754],{"class":1436},[312,36084,36085],{"class":324},"test_data_y.data)\n",[312,36087,36088],{"class":314,"line":11591},[312,36089,36090],{"class":318},"            # 将所有的测试样本进行累计\n",[312,36092,36093,36096,36098,36101,36103],{"class":314,"line":11596},[312,36094,36095],{"class":324},"            test_num",[312,36097,11280],{"class":1436},[312,36099,36100],{"class":324},"test_data_x.size(",[312,36102,858],{"class":488},[312,36104,1959],{"class":324},[312,36106,36107],{"class":314,"line":11601},[312,36108,4205],{"emptyLinePlaceholder":1881},[312,36110,36111],{"class":314,"line":11606},[312,36112,36113],{"class":318},"        # 计算准确度\n",[312,36115,36116,36119,36121,36124,36126],{"class":314,"line":11615},[312,36117,36118],{"class":324},"        test_acc",[312,36120,336],{"class":1436},[312,36122,36123],{"class":324},"test_corrects.double().item()",[312,36125,2529],{"class":1436},[312,36127,36128],{"class":324},"test_num\n",[312,36130,36131],{"class":314,"line":11620},[312,36132,36133],{"class":318},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[312,36135,36136,36138,36140,36143],{"class":314,"line":11626},[312,36137,34246],{"class":488},[312,36139,1576],{"class":324},[312,36141,36142],{"class":339},"\"测试的准确率：\"",[312,36144,36145],{"class":324},",test_acc)\n",[312,36147,36148],{"class":314,"line":11647},[312,36149,4205],{"emptyLinePlaceholder":1881},[312,36151,36152],{"class":314,"line":11653},[312,36153,36154],{"class":318},"# 实现模型的测试功能\n",[312,36156,36157,36159,36161,36163,36165],{"class":314,"line":11667},[312,36158,3338],{"class":1436},[312,36160,33015],{"class":488},[312,36162,4754],{"class":1436},[312,36164,33020],{"class":339},[312,36166,5544],{"class":324},[312,36168,36169],{"class":314,"line":11673},[312,36170,36171],{"class":318},"    # 加载模型\n",[312,36173,36174,36176,36178],{"class":314,"line":11700},[312,36175,33084],{"class":324},[312,36177,336],{"class":1436},[312,36179,35620],{"class":324},[312,36181,36182],{"class":314,"line":11709},[312,36183,36184],{"class":318},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[312,36186,36187],{"class":314,"line":11715},[312,36188,36189],{"class":318},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[312,36191,36192,36195,36198],{"class":314,"line":11723},[312,36193,36194],{"class":324},"    model.load_state_dict(torch.load(",[312,36196,36197],{"class":339},"'best_model.pth'",[312,36199,32293],{"class":324},[312,36201,36202],{"class":314,"line":11728},[312,36203,36204],{"class":318},"    # 数据加载\n",[312,36206,36207,36209,36211],{"class":314,"line":18404},[312,36208,35817],{"class":324},[312,36210,336],{"class":1436},[312,36212,36213],{"class":324},"test_data_process()\n",[312,36215,36216],{"class":314,"line":18410},[312,36217,36218],{"class":318},"    # 加载模型测试的函数\n",[312,36220,36221],{"class":314,"line":18433},[312,36222,36223],{"class":324},"    test_model_process(model,test_dataloader)\n",[312,36225,36226],{"class":314,"line":18439},[312,36227,4205],{"emptyLinePlaceholder":1881},[312,36229,36230],{"class":314,"line":18462},[312,36231,36232],{"class":318},"    # 验证集推理实现：\n",[312,36234,36235],{"class":314,"line":18476},[312,36236,36237],{"class":318},"    # 加载数据加载的更详细一些\n",[312,36239,36240,36242,36244,36246,36248,36250,36252],{"class":314,"line":18496},[312,36241,33032],{"class":324},[312,36243,336],{"class":1436},[312,36245,33039],{"class":339},[312,36247,3510],{"class":1436},[312,36249,33044],{"class":324},[312,36251,3507],{"class":1436},[312,36253,35914],{"class":339},[312,36255,36256,36258,36260],{"class":314,"line":18502},[312,36257,33084],{"class":324},[312,36259,336],{"class":1436},[312,36261,34084],{"class":324},[312,36263,36264],{"class":314,"line":18513},[312,36265,36266],{"class":318},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[312,36268,36269],{"class":314,"line":18536},[312,36270,36271],{"class":318},"    # 顺序不可改变\n",[312,36273,36274,36277,36279,36281,36284,36286,36289,36291,36294,36296,36299,36301,36304,36306,36309,36311,36314,36316,36319,36321,36324,36326,36329],{"class":314,"line":18558},[312,36275,36276],{"class":324},"    classes",[312,36278,336],{"class":1436},[312,36280,2834],{"class":324},[312,36282,36283],{"class":339},"'T-shirt\u002Ftop'",[312,36285,2323],{"class":324},[312,36287,36288],{"class":339},"'Trouser'",[312,36290,2323],{"class":324},[312,36292,36293],{"class":339},"'Pullover'",[312,36295,2323],{"class":324},[312,36297,36298],{"class":339},"'Dress'",[312,36300,2323],{"class":324},[312,36302,36303],{"class":339},"'Coat'",[312,36305,2323],{"class":324},[312,36307,36308],{"class":339},"'Sandal'",[312,36310,2323],{"class":324},[312,36312,36313],{"class":339},"'Shirt'",[312,36315,2323],{"class":324},[312,36317,36318],{"class":339},"'Sneaker'",[312,36320,2323],{"class":324},[312,36322,36323],{"class":339},"'Bag'",[312,36325,2323],{"class":324},[312,36327,36328],{"class":339},"'Ankle boot'",[312,36330,35041],{"class":324},[312,36332,36333,36335],{"class":314,"line":18563},[312,36334,35973],{"class":1436},[312,36336,34679],{"class":324},[312,36338,36339],{"class":314,"line":18569},[312,36340,36341],{"class":318},"        # 将数据和标签都放到设备当中\n",[312,36343,36344,36346,36349,36351],{"class":314,"line":18583},[312,36345,5208],{"class":1436},[312,36347,36348],{"class":324}," b_x,b_y ",[312,36350,27839],{"class":1436},[312,36352,35992],{"class":324},[312,36354,36355,36357,36359],{"class":314,"line":18596},[312,36356,34405],{"class":324},[312,36358,336],{"class":1436},[312,36360,34410],{"class":324},[312,36362,36363,36365,36367],{"class":314,"line":18601},[312,36364,34420],{"class":324},[312,36366,336],{"class":1436},[312,36368,34425],{"class":324},[312,36370,36371],{"class":314,"line":18615},[312,36372,4205],{"emptyLinePlaceholder":1881},[312,36374,36375],{"class":314,"line":18620},[312,36376,36377],{"class":318},"            # 设置模型为验证模式\n",[312,36379,36380],{"class":314,"line":18626},[312,36381,34670],{"class":324},[312,36383,36384],{"class":314,"line":18631},[312,36385,36386],{"class":318},"            # 模型推理结果\n",[312,36388,36389,36391,36393],{"class":314,"line":18645},[312,36390,34455],{"class":324},[312,36392,336],{"class":1436},[312,36394,34460],{"class":324},[312,36396,36397],{"class":314,"line":18650},[312,36398,36399],{"class":318},"            # 获取最大下标，最大下标就是类别号\n",[312,36401,36402,36404,36406,36408,36410,36412,36414],{"class":314,"line":18655},[312,36403,34472],{"class":324},[312,36405,336],{"class":1436},[312,36407,34477],{"class":324},[312,36409,34480],{"class":1579},[312,36411,336],{"class":1436},[312,36413,1433],{"class":488},[312,36415,1959],{"class":324},[312,36417,36418],{"class":314,"line":18669},[312,36419,36420],{"class":318},"            # 取出张量中的数值\n",[312,36422,36423,36426,36428],{"class":314,"line":18681},[312,36424,36425],{"class":324},"            result",[312,36427,336],{"class":1436},[312,36429,36430],{"class":324},"pre_lab.item()\n",[312,36432,36433,36436,36438],{"class":314,"line":18686},[312,36434,36435],{"class":324},"            label",[312,36437,336],{"class":1436},[312,36439,36440],{"class":324},"b_y.item()\n",[312,36442,36443,36446,36448,36451,36454,36457,36459,36462],{"class":314,"line":18699},[312,36444,36445],{"class":488},"            print",[312,36447,1576],{"class":324},[312,36449,36450],{"class":339},"\"预测值：\"",[312,36452,36453],{"class":324},",classes[result],",[312,36455,36456],{"class":339},"\"------\"",[312,36458,2323],{"class":324},[312,36460,36461],{"class":339},"\"真实值：\"",[312,36463,36464],{"class":324},",classes[label])\n",[24,36466,36467],{},"（2）AlexNet",[140,36469,36470],{},[143,36471,36472],{},"神经网络构建",[303,36474,36476],{"className":32174,"code":36475,"language":32176,"meta":308,"style":308},"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",[119,36477,36478,36484,36494,36504,36516,36520,36537,36545,36560,36572,36614,36641,36684,36710,36754,36797,36840,36867,36871,36881,36886,36914,36933,36952,36956,36961,36969,36984,36994,37008,37018,37033,37048,37063,37074,37078,37083,37093,37108,37113,37127,37142,37154,37159,37170,37175,37181,37186,37198,37218,37223,37232],{"__ignoreMap":308},[312,36479,36480,36482],{"class":314,"line":315},[312,36481,32188],{"class":1436},[312,36483,32191],{"class":324},[312,36485,36486,36488,36490,36492],{"class":314,"line":171},[312,36487,32533],{"class":1436},[312,36489,32536],{"class":324},[312,36491,32188],{"class":1436},[312,36493,32541],{"class":324},[312,36495,36496,36498,36500,36502],{"class":314,"line":274},[312,36497,32533],{"class":1436},[312,36499,32553],{"class":324},[312,36501,32188],{"class":1436},[312,36503,32558],{"class":324},[312,36505,36506,36508,36511,36513],{"class":314,"line":298},[312,36507,32188],{"class":1436},[312,36509,36510],{"class":324}," torch.nn.functional ",[312,36512,33178],{"class":1436},[312,36514,36515],{"class":324}," F\n",[312,36517,36518],{"class":314,"line":974},[312,36519,4205],{"emptyLinePlaceholder":1881},[312,36521,36522,36524,36527,36529,36531,36533,36535],{"class":314,"line":980},[312,36523,16495],{"class":1436},[312,36525,36526],{"class":332}," AlexNet",[312,36528,1576],{"class":324},[312,36530,32574],{"class":332},[312,36532,2503],{"class":324},[312,36534,32579],{"class":332},[312,36536,32582],{"class":324},[312,36538,36539,36541,36543],{"class":314,"line":997},[312,36540,32597],{"class":1436},[312,36542,32600],{"class":488},[312,36544,32603],{"class":324},[312,36546,36547,36549,36552,36554,36556,36558],{"class":314,"line":1003},[312,36548,32613],{"class":488},[312,36550,36551],{"class":324},"(AlexNet,",[312,36553,32619],{"class":488},[312,36555,32622],{"class":324},[312,36557,32625],{"class":488},[312,36559,3781],{"class":324},[312,36561,36562,36564,36567,36569],{"class":314,"line":1020},[312,36563,32641],{"class":488},[312,36565,36566],{"class":324},".ReLu",[312,36568,336],{"class":1436},[312,36570,36571],{"class":324},"nn.ReLU()\n",[312,36573,36574,36576,36578,36580,36582,36584,36586,36588,36590,36592,36594,36596,36598,36600,36602,36604,36606,36608,36610,36612],{"class":314,"line":1026},[312,36575,32641],{"class":488},[312,36577,32644],{"class":324},[312,36579,336],{"class":1436},[312,36581,32649],{"class":324},[312,36583,32652],{"class":1579},[312,36585,336],{"class":1436},[312,36587,1433],{"class":488},[312,36589,2323],{"class":324},[312,36591,32661],{"class":1579},[312,36593,336],{"class":1436},[312,36595,2156],{"class":488},[312,36597,2323],{"class":324},[312,36599,32670],{"class":1579},[312,36601,336],{"class":1436},[312,36603,2417],{"class":488},[312,36605,2323],{"class":324},[312,36607,32724],{"class":1579},[312,36609,336],{"class":1436},[312,36611,2238],{"class":488},[312,36613,1959],{"class":324},[312,36615,36616,36618,36620,36622,36625,36627,36629,36631,36633,36635,36637,36639],{"class":314,"line":3418},[312,36617,32641],{"class":488},[312,36619,32708],{"class":324},[312,36621,336],{"class":1436},[312,36623,36624],{"class":324},"nn.MaxPool2d(",[312,36626,32670],{"class":1579},[312,36628,336],{"class":1436},[312,36630,2021],{"class":488},[312,36632,2323],{"class":324},[312,36634,32724],{"class":1579},[312,36636,336],{"class":1436},[312,36638,2027],{"class":488},[312,36640,1959],{"class":324},[312,36642,36643,36645,36647,36649,36651,36653,36655,36657,36659,36661,36663,36666,36668,36670,36672,36674,36676,36678,36680,36682],{"class":314,"line":3423},[312,36644,32641],{"class":488},[312,36646,32737],{"class":324},[312,36648,336],{"class":1436},[312,36650,32649],{"class":324},[312,36652,32652],{"class":1579},[312,36654,336],{"class":1436},[312,36656,2156],{"class":488},[312,36658,2323],{"class":324},[312,36660,32661],{"class":1579},[312,36662,336],{"class":1436},[312,36664,36665],{"class":488},"256",[312,36667,2323],{"class":324},[312,36669,32670],{"class":1579},[312,36671,336],{"class":1436},[312,36673,2264],{"class":488},[312,36675,2323],{"class":324},[312,36677,1340],{"class":1579},[312,36679,336],{"class":1436},[312,36681,2027],{"class":488},[312,36683,1959],{"class":324},[312,36685,36686,36688,36690,36692,36694,36696,36698,36700,36702,36704,36706,36708],{"class":314,"line":3429},[312,36687,32641],{"class":488},[312,36689,32772],{"class":324},[312,36691,336],{"class":1436},[312,36693,36624],{"class":324},[312,36695,32670],{"class":1579},[312,36697,336],{"class":1436},[312,36699,2021],{"class":488},[312,36701,2323],{"class":324},[312,36703,32724],{"class":1579},[312,36705,336],{"class":1436},[312,36707,2027],{"class":488},[312,36709,1959],{"class":324},[312,36711,36712,36714,36717,36719,36721,36723,36725,36727,36729,36731,36733,36736,36738,36740,36742,36744,36746,36748,36750,36752],{"class":314,"line":3434},[312,36713,32641],{"class":488},[312,36715,36716],{"class":324},".c5",[312,36718,336],{"class":1436},[312,36720,32649],{"class":324},[312,36722,32652],{"class":1579},[312,36724,336],{"class":1436},[312,36726,36665],{"class":488},[312,36728,2323],{"class":324},[312,36730,32661],{"class":1579},[312,36732,336],{"class":1436},[312,36734,36735],{"class":488},"384",[312,36737,2323],{"class":324},[312,36739,32670],{"class":1579},[312,36741,336],{"class":1436},[312,36743,2021],{"class":488},[312,36745,2323],{"class":324},[312,36747,1340],{"class":1579},[312,36749,336],{"class":1436},[312,36751,1433],{"class":488},[312,36753,1959],{"class":324},[312,36755,36756,36758,36761,36763,36765,36767,36769,36771,36773,36775,36777,36779,36781,36783,36785,36787,36789,36791,36793,36795],{"class":314,"line":3448},[312,36757,32641],{"class":488},[312,36759,36760],{"class":324},".c6",[312,36762,336],{"class":1436},[312,36764,32649],{"class":324},[312,36766,32652],{"class":1579},[312,36768,336],{"class":1436},[312,36770,36735],{"class":488},[312,36772,2323],{"class":324},[312,36774,32661],{"class":1579},[312,36776,336],{"class":1436},[312,36778,36735],{"class":488},[312,36780,2323],{"class":324},[312,36782,32670],{"class":1579},[312,36784,336],{"class":1436},[312,36786,2021],{"class":488},[312,36788,2323],{"class":324},[312,36790,1340],{"class":1579},[312,36792,336],{"class":1436},[312,36794,1433],{"class":488},[312,36796,1959],{"class":324},[312,36798,36799,36801,36804,36806,36808,36810,36812,36814,36816,36818,36820,36822,36824,36826,36828,36830,36832,36834,36836,36838],{"class":314,"line":3453},[312,36800,32641],{"class":488},[312,36802,36803],{"class":324},".c7",[312,36805,336],{"class":1436},[312,36807,32649],{"class":324},[312,36809,32652],{"class":1579},[312,36811,336],{"class":1436},[312,36813,36735],{"class":488},[312,36815,2323],{"class":324},[312,36817,32661],{"class":1579},[312,36819,336],{"class":1436},[312,36821,36665],{"class":488},[312,36823,2323],{"class":324},[312,36825,32670],{"class":1579},[312,36827,336],{"class":1436},[312,36829,2021],{"class":488},[312,36831,2323],{"class":324},[312,36833,1340],{"class":1579},[312,36835,336],{"class":1436},[312,36837,1433],{"class":488},[312,36839,1959],{"class":324},[312,36841,36842,36844,36847,36849,36851,36853,36855,36857,36859,36861,36863,36865],{"class":314,"line":3459},[312,36843,32641],{"class":488},[312,36845,36846],{"class":324},".s8",[312,36848,336],{"class":1436},[312,36850,36624],{"class":324},[312,36852,32670],{"class":1579},[312,36854,336],{"class":1436},[312,36856,2021],{"class":488},[312,36858,2323],{"class":324},[312,36860,32724],{"class":1579},[312,36862,336],{"class":1436},[312,36864,2027],{"class":488},[312,36866,1959],{"class":324},[312,36868,36869],{"class":314,"line":3480},[312,36870,32797],{"class":318},[312,36872,36873,36875,36877,36879],{"class":314,"line":3485},[312,36874,32641],{"class":488},[312,36876,32804],{"class":324},[312,36878,336],{"class":1436},[312,36880,32809],{"class":324},[312,36882,36883],{"class":314,"line":3499},[312,36884,36885],{"class":318},"       # 定义全连接层\n",[312,36887,36888,36890,36893,36895,36897,36899,36901,36903,36905,36907,36909,36912],{"class":314,"line":3504},[312,36889,32641],{"class":488},[312,36891,36892],{"class":324},".f1",[312,36894,336],{"class":1436},[312,36896,32826],{"class":324},[312,36898,2289],{"class":488},[312,36900,2400],{"class":1436},[312,36902,2289],{"class":488},[312,36904,2400],{"class":1436},[312,36906,36665],{"class":488},[312,36908,2323],{"class":324},[312,36910,36911],{"class":488},"4096",[312,36913,1959],{"class":324},[312,36915,36916,36918,36921,36923,36925,36927,36929,36931],{"class":314,"line":3533},[312,36917,32641],{"class":488},[312,36919,36920],{"class":324},".f2",[312,36922,336],{"class":1436},[312,36924,32826],{"class":324},[312,36926,36911],{"class":488},[312,36928,2323],{"class":324},[312,36930,36911],{"class":488},[312,36932,1959],{"class":324},[312,36934,36935,36937,36940,36942,36944,36946,36948,36950],{"class":314,"line":3538},[312,36936,32641],{"class":488},[312,36938,36939],{"class":324},".f3",[312,36941,336],{"class":1436},[312,36943,32826],{"class":324},[312,36945,36911],{"class":488},[312,36947,2323],{"class":324},[312,36949,2391],{"class":488},[312,36951,1959],{"class":324},[312,36953,36954],{"class":314,"line":3555},[312,36955,4205],{"emptyLinePlaceholder":1881},[312,36957,36958],{"class":314,"line":3560},[312,36959,36960],{"class":318},"    # 定义前向传播\n",[312,36962,36963,36965,36967],{"class":314,"line":3565},[312,36964,32597],{"class":1436},[312,36966,32888],{"class":332},[312,36968,32891],{"class":324},[312,36970,36971,36973,36975,36977,36980,36982],{"class":314,"line":3570},[312,36972,32896],{"class":324},[312,36974,336],{"class":1436},[312,36976,32619],{"class":488},[312,36978,36979],{"class":324},".ReLu(",[312,36981,32619],{"class":488},[312,36983,32908],{"class":324},[312,36985,36986,36988,36990,36992],{"class":314,"line":3584},[312,36987,32896],{"class":324},[312,36989,336],{"class":1436},[312,36991,32619],{"class":488},[312,36993,32919],{"class":324},[312,36995,36996,36998,37000,37002,37004,37006],{"class":314,"line":3589},[312,36997,32896],{"class":324},[312,36999,336],{"class":1436},[312,37001,32619],{"class":488},[312,37003,36979],{"class":324},[312,37005,32619],{"class":488},[312,37007,32934],{"class":324},[312,37009,37010,37012,37014,37016],{"class":314,"line":4382},[312,37011,32896],{"class":324},[312,37013,336],{"class":1436},[312,37015,32619],{"class":488},[312,37017,32945],{"class":324},[312,37019,37020,37022,37024,37026,37028,37030],{"class":314,"line":4396},[312,37021,32896],{"class":324},[312,37023,336],{"class":1436},[312,37025,32619],{"class":488},[312,37027,36979],{"class":324},[312,37029,32619],{"class":488},[312,37031,37032],{"class":324},".c5(x))\n",[312,37034,37035,37037,37039,37041,37043,37045],{"class":314,"line":4404},[312,37036,32896],{"class":324},[312,37038,336],{"class":1436},[312,37040,32619],{"class":488},[312,37042,36979],{"class":324},[312,37044,32619],{"class":488},[312,37046,37047],{"class":324},".c6(x))\n",[312,37049,37050,37052,37054,37056,37058,37060],{"class":314,"line":4409},[312,37051,32896],{"class":324},[312,37053,336],{"class":1436},[312,37055,32619],{"class":488},[312,37057,36979],{"class":324},[312,37059,32619],{"class":488},[312,37061,37062],{"class":324},".c7(x))\n",[312,37064,37065,37067,37069,37071],{"class":314,"line":4415},[312,37066,32896],{"class":324},[312,37068,336],{"class":1436},[312,37070,32619],{"class":488},[312,37072,37073],{"class":324},".s8(x)\n",[312,37075,37076],{"class":314,"line":4421},[312,37077,4205],{"emptyLinePlaceholder":1881},[312,37079,37080],{"class":314,"line":4426},[312,37081,37082],{"class":318},"        # 展平加线性全连接层\n",[312,37084,37085,37087,37089,37091],{"class":314,"line":9751},[312,37086,32896],{"class":324},[312,37088,336],{"class":1436},[312,37090,32619],{"class":488},[312,37092,32956],{"class":324},[312,37094,37095,37097,37099,37101,37103,37105],{"class":314,"line":9775},[312,37096,32896],{"class":324},[312,37098,336],{"class":1436},[312,37100,32619],{"class":488},[312,37102,36979],{"class":324},[312,37104,32619],{"class":488},[312,37106,37107],{"class":324},".f1(x))\n",[312,37109,37110],{"class":314,"line":9780},[312,37111,37112],{"class":318},"        # 还需要dropout对神经元随机进行失活\n",[312,37114,37115,37117,37119,37122,37125],{"class":314,"line":9786},[312,37116,32896],{"class":324},[312,37118,336],{"class":1436},[312,37120,37121],{"class":324},"F.dropout(x,",[312,37123,37124],{"class":488},"0.5",[312,37126,1959],{"class":324},[312,37128,37129,37131,37133,37135,37137,37139],{"class":314,"line":9813},[312,37130,32896],{"class":324},[312,37132,336],{"class":1436},[312,37134,32619],{"class":488},[312,37136,36979],{"class":324},[312,37138,32619],{"class":488},[312,37140,37141],{"class":324},".f2(x))\n",[312,37143,37144,37146,37148,37150,37152],{"class":314,"line":9818},[312,37145,32896],{"class":324},[312,37147,336],{"class":1436},[312,37149,37121],{"class":324},[312,37151,37124],{"class":488},[312,37153,1959],{"class":324},[312,37155,37156],{"class":314,"line":9824},[312,37157,37158],{"class":318},"        # 直接输出\n",[312,37160,37161,37163,37165,37167],{"class":314,"line":9836},[312,37162,32896],{"class":324},[312,37164,336],{"class":1436},[312,37166,32619],{"class":488},[312,37168,37169],{"class":324},".f3(x)\n",[312,37171,37172],{"class":314,"line":9848},[312,37173,37174],{"class":318},"        # 前向传播输出\n",[312,37176,37177,37179],{"class":314,"line":9860},[312,37178,16553],{"class":1436},[312,37180,33004],{"class":324},[312,37182,37183],{"class":314,"line":11519},[312,37184,37185],{"class":318},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[312,37187,37188,37190,37192,37194,37196],{"class":314,"line":11544},[312,37189,3338],{"class":1436},[312,37191,33015],{"class":488},[312,37193,4754],{"class":1436},[312,37195,33020],{"class":339},[312,37197,5544],{"class":324},[312,37199,37200,37202,37204,37206,37208,37210,37212,37214,37216],{"class":314,"line":11567},[312,37201,33032],{"class":324},[312,37203,336],{"class":1436},[312,37205,32247],{"class":324},[312,37207,33039],{"class":339},[312,37209,3510],{"class":1436},[312,37211,33044],{"class":324},[312,37213,3507],{"class":1436},[312,37215,32272],{"class":339},[312,37217,1959],{"class":324},[312,37219,37220],{"class":314,"line":11591},[312,37221,37222],{"class":318},"    # 模型实例化，然后将实例化的模型放到设备中\n",[312,37224,37225,37227,37229],{"class":314,"line":11596},[312,37226,33084],{"class":324},[312,37228,336],{"class":1436},[312,37230,37231],{"class":324},"AlexNet().to(device)\n",[312,37233,37234,37236,37238,37240,37242,37245,37247,37249],{"class":314,"line":11601},[312,37235,33094],{"class":488},[312,37237,33097],{"class":324},[312,37239,1433],{"class":488},[312,37241,2323],{"class":324},[312,37243,37244],{"class":488},"227",[312,37246,2323],{"class":324},[312,37248,37244],{"class":488},[312,37250,33110],{"class":324},[140,37252,37253],{"start":171},[143,37254,33123],{},[303,37256,37258],{"className":32174,"code":37257,"language":32176,"meta":308,"style":308},"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",[119,37259,37260,37266,37272,37282,37288,37298,37308,37318,37328,37338,37342,37353,37363,37367,37371,37375,37383,37395,37405,37421,37431,37463,37477,37487,37497,37501,37511,37525,37535,37545,37555,37561,37565,37569,37573,37577,37581,37589,37609,37613,37617,37621,37625,37629,37645,37649,37653,37661,37665,37669,37677,37681,37685,37689,37697,37701,37705,37709,37713,37721,37725,37733,37737,37745,37749,37757,37761,37769,37773,37777,37785,37789,37793,37797,37809,37833,37847,37851,37855,37859,37867,37871,37879,37883,37891,37895,37903,37907,37915,37919,37927,37931,37943,37947,37955,37959,37967,37971,37975,37979,37983,37991,37995,38011,38015,38023,38027,38031,38035,38039,38043,38047,38051,38067,38071,38083,38087,38099,38103,38115,38119,38127,38131,38139,38143,38147,38152,38158,38162,38171,38175,38192,38196,38205,38209,38227,38240,38245,38258,38262,38266,38274,38278,38282,38290,38294,38302,38306,38314,38318,38322,38364,38406,38410,38414,38430,38434,38450,38454,38458,38466,38470,38474,38486,38524,38529,38534,38543,38547,38561,38571,38577,38583,38589,38595,38599,38603,38609,38613,38617,38625,38629,38647,38651,38655,38659,38675,38679,38683,38687,38691,38695,38715,38735,38739,38743,38747,38755,38763,38767,38783,38803,38823,38827,38831,38839,38847,38851,38855,38859,38871,38875,38885,38893,38910],{"__ignoreMap":308},[312,37261,37262,37264],{"class":314,"line":315},[312,37263,32188],{"class":1436},[312,37265,33617],{"class":324},[312,37267,37268,37270],{"class":314,"line":171},[312,37269,32188],{"class":1436},[312,37271,33624],{"class":324},[312,37273,37274,37276,37278,37280],{"class":314,"line":274},[312,37275,32188],{"class":1436},[312,37277,33635],{"class":324},[312,37279,33178],{"class":1436},[312,37281,33640],{"class":324},[312,37283,37284,37286],{"class":314,"line":298},[312,37285,32188],{"class":1436},[312,37287,32191],{"class":324},[312,37289,37290,37292,37294,37296],{"class":314,"line":974},[312,37291,32533],{"class":1436},[312,37293,33210],{"class":324},[312,37295,32188],{"class":1436},[312,37297,33657],{"class":324},[312,37299,37300,37302,37304,37306],{"class":314,"line":980},[312,37301,32533],{"class":1436},[312,37303,33163],{"class":324},[312,37305,32188],{"class":1436},[312,37307,33168],{"class":324},[312,37309,37310,37312,37314,37316],{"class":314,"line":997},[312,37311,32533],{"class":1436},[312,37313,33193],{"class":324},[312,37315,32188],{"class":1436},[312,37317,33198],{"class":324},[312,37319,37320,37322,37324,37326],{"class":314,"line":1003},[312,37321,32188],{"class":1436},[312,37323,33210],{"class":324},[312,37325,33178],{"class":1436},[312,37327,33215],{"class":324},[312,37329,37330,37332,37334,37336],{"class":314,"line":1020},[312,37331,32188],{"class":1436},[312,37333,33227],{"class":324},[312,37335,33178],{"class":1436},[312,37337,33232],{"class":324},[312,37339,37340],{"class":314,"line":1026},[312,37341,33702],{"class":318},[312,37343,37344,37346,37348,37350],{"class":314,"line":3418},[312,37345,32533],{"class":1436},[312,37347,33709],{"class":324},[312,37349,32188],{"class":1436},[312,37351,37352],{"class":324}," AlexNet\n",[312,37354,37355,37357,37359,37361],{"class":314,"line":3423},[312,37356,32533],{"class":1436},[312,37358,32536],{"class":324},[312,37360,32188],{"class":1436},[312,37362,32541],{"class":324},[312,37364,37365],{"class":314,"line":3429},[312,37366,4205],{"emptyLinePlaceholder":1881},[312,37368,37369],{"class":314,"line":3434},[312,37370,4205],{"emptyLinePlaceholder":1881},[312,37372,37373],{"class":314,"line":3448},[312,37374,33737],{"class":318},[312,37376,37377,37379,37381],{"class":314,"line":3453},[312,37378,33742],{"class":1436},[312,37380,33745],{"class":332},[312,37382,33748],{"class":324},[312,37384,37385,37387,37389,37391,37393],{"class":314,"line":3459},[312,37386,33753],{"class":324},[312,37388,336],{"class":1436},[312,37390,33250],{"class":324},[312,37392,33258],{"class":339},[312,37394,33261],{"class":324},[312,37396,37397,37399,37401,37403],{"class":314,"line":3480},[312,37398,33766],{"class":1579},[312,37400,336],{"class":1436},[312,37402,33271],{"class":488},[312,37404,33261],{"class":324},[312,37406,37407,37409,37411,37413,37415,37417,37419],{"class":314,"line":3485},[312,37408,33777],{"class":1579},[312,37410,336],{"class":1436},[312,37412,33288],{"class":324},[312,37414,33291],{"class":1579},[312,37416,336],{"class":1436},[312,37418,37244],{"class":488},[312,37420,33299],{"class":324},[312,37422,37423,37425,37427,37429],{"class":314,"line":3499},[312,37424,33794],{"class":1579},[312,37426,336],{"class":1436},[312,37428,33271],{"class":488},[312,37430,1959],{"class":324},[312,37432,37433,37435,37437,37439,37441,37443,37445,37447,37449,37451,37453,37455,37457,37459,37461],{"class":314,"line":3504},[312,37434,33805],{"class":324},[312,37436,336],{"class":1436},[312,37438,33810],{"class":324},[312,37440,33813],{"class":488},[312,37442,1576],{"class":324},[312,37444,33818],{"class":488},[312,37446,2400],{"class":1436},[312,37448,9162],{"class":488},[312,37450,33825],{"class":324},[312,37452,33813],{"class":488},[312,37454,1576],{"class":324},[312,37456,33832],{"class":488},[312,37458,2400],{"class":1436},[312,37460,9162],{"class":488},[312,37462,33839],{"class":324},[312,37464,37465,37467,37469,37471,37473,37475],{"class":314,"line":3533},[312,37466,33844],{"class":324},[312,37468,336],{"class":1436},[312,37470,33849],{"class":324},[312,37472,33332],{"class":1579},[312,37474,336],{"class":1436},[312,37476,33337],{"class":324},[312,37478,37479,37481,37483,37485],{"class":314,"line":3538},[312,37480,33860],{"class":1579},[312,37482,336],{"class":1436},[312,37484,33865],{"class":488},[312,37486,33261],{"class":324},[312,37488,37489,37491,37493,37495],{"class":314,"line":3555},[312,37490,33872],{"class":1579},[312,37492,336],{"class":1436},[312,37494,33271],{"class":488},[312,37496,33261],{"class":324},[312,37498,37499],{"class":314,"line":3560},[312,37500,33883],{"class":318},[312,37502,37503,37505,37507,37509],{"class":314,"line":3565},[312,37504,33888],{"class":1579},[312,37506,336],{"class":1436},[312,37508,2340],{"class":488},[312,37510,1959],{"class":324},[312,37512,37513,37515,37517,37519,37521,37523],{"class":314,"line":3570},[312,37514,33899],{"class":324},[312,37516,336],{"class":1436},[312,37518,33329],{"class":324},[312,37520,33332],{"class":1579},[312,37522,336],{"class":1436},[312,37524,33910],{"class":324},[312,37526,37527,37529,37531,37533],{"class":314,"line":3584},[312,37528,33915],{"class":1579},[312,37530,336],{"class":1436},[312,37532,33865],{"class":488},[312,37534,33261],{"class":324},[312,37536,37537,37539,37541,37543],{"class":314,"line":3589},[312,37538,33926],{"class":1579},[312,37540,336],{"class":1436},[312,37542,33271],{"class":488},[312,37544,33261],{"class":324},[312,37546,37547,37549,37551,37553],{"class":314,"line":4382},[312,37548,33937],{"class":1579},[312,37550,336],{"class":1436},[312,37552,2340],{"class":488},[312,37554,1959],{"class":324},[312,37556,37557,37559],{"class":314,"line":4396},[312,37558,5895],{"class":1436},[312,37560,33950],{"class":324},[312,37562,37563],{"class":314,"line":4404},[312,37564,4205],{"emptyLinePlaceholder":1881},[312,37566,37567],{"class":314,"line":4409},[312,37568,33959],{"class":318},[312,37570,37571],{"class":314,"line":4415},[312,37572,33964],{"class":318},[312,37574,37575],{"class":314,"line":4421},[312,37576,4205],{"emptyLinePlaceholder":1881},[312,37578,37579],{"class":314,"line":4426},[312,37580,33973],{"class":318},[312,37582,37583,37585,37587],{"class":314,"line":9751},[312,37584,33742],{"class":1436},[312,37586,33980],{"class":332},[312,37588,33983],{"class":324},[312,37590,37591,37593,37595,37597,37599,37601,37603,37605,37607],{"class":314,"line":9775},[312,37592,33032],{"class":324},[312,37594,336],{"class":1436},[312,37596,32247],{"class":324},[312,37598,33039],{"class":339},[312,37600,3510],{"class":1436},[312,37602,33044],{"class":324},[312,37604,3507],{"class":1436},[312,37606,34002],{"class":339},[312,37608,1959],{"class":324},[312,37610,37611],{"class":314,"line":9780},[312,37612,4205],{"emptyLinePlaceholder":1881},[312,37614,37615],{"class":314,"line":9786},[312,37616,4205],{"emptyLinePlaceholder":1881},[312,37618,37619],{"class":314,"line":9813},[312,37620,34017],{"class":318},[312,37622,37623],{"class":314,"line":9818},[312,37624,34022],{"class":318},[312,37626,37627],{"class":314,"line":9824},[312,37628,34027],{"class":318},[312,37630,37631,37633,37635,37637,37639,37641,37643],{"class":314,"line":9836},[312,37632,34032],{"class":324},[312,37634,336],{"class":1436},[312,37636,34037],{"class":324},[312,37638,34040],{"class":1579},[312,37640,336],{"class":1436},[312,37642,34045],{"class":488},[312,37644,1959],{"class":324},[312,37646,37647],{"class":314,"line":9848},[312,37648,4205],{"emptyLinePlaceholder":1881},[312,37650,37651],{"class":314,"line":9860},[312,37652,34056],{"class":318},[312,37654,37655,37657,37659],{"class":314,"line":11519},[312,37656,34061],{"class":324},[312,37658,336],{"class":1436},[312,37660,34066],{"class":324},[312,37662,37663],{"class":314,"line":11544},[312,37664,4205],{"emptyLinePlaceholder":1881},[312,37666,37667],{"class":314,"line":11567},[312,37668,34075],{"class":318},[312,37670,37671,37673,37675],{"class":314,"line":11591},[312,37672,33084],{"class":324},[312,37674,336],{"class":1436},[312,37676,34084],{"class":324},[312,37678,37679],{"class":314,"line":11596},[312,37680,34089],{"class":318},[312,37682,37683],{"class":314,"line":11601},[312,37684,34094],{"class":318},[312,37686,37687],{"class":314,"line":11606},[312,37688,34099],{"class":318},[312,37690,37691,37693,37695],{"class":314,"line":11615},[312,37692,34104],{"class":324},[312,37694,336],{"class":1436},[312,37696,34109],{"class":324},[312,37698,37699],{"class":314,"line":11620},[312,37700,4205],{"emptyLinePlaceholder":1881},[312,37702,37703],{"class":314,"line":11626},[312,37704,4205],{"emptyLinePlaceholder":1881},[312,37706,37707],{"class":314,"line":11647},[312,37708,34122],{"class":318},[312,37710,37711],{"class":314,"line":11653},[312,37712,34127],{"class":318},[312,37714,37715,37717,37719],{"class":314,"line":11667},[312,37716,34132],{"class":324},[312,37718,336],{"class":1436},[312,37720,34137],{"class":488},[312,37722,37723],{"class":314,"line":11673},[312,37724,34142],{"class":318},[312,37726,37727,37729,37731],{"class":314,"line":11700},[312,37728,34147],{"class":324},[312,37730,336],{"class":1436},[312,37732,34152],{"class":324},[312,37734,37735],{"class":314,"line":11709},[312,37736,34157],{"class":318},[312,37738,37739,37741,37743],{"class":314,"line":11715},[312,37740,34162],{"class":324},[312,37742,336],{"class":1436},[312,37744,34152],{"class":324},[312,37746,37747],{"class":314,"line":11723},[312,37748,34171],{"class":318},[312,37750,37751,37753,37755],{"class":314,"line":11728},[312,37752,34176],{"class":324},[312,37754,336],{"class":1436},[312,37756,34152],{"class":324},[312,37758,37759],{"class":314,"line":18404},[312,37760,34185],{"class":318},[312,37762,37763,37765,37767],{"class":314,"line":18410},[312,37764,34190],{"class":324},[312,37766,336],{"class":1436},[312,37768,34152],{"class":324},[312,37770,37771],{"class":314,"line":18433},[312,37772,4205],{"emptyLinePlaceholder":1881},[312,37774,37775],{"class":314,"line":18439},[312,37776,34203],{"class":318},[312,37778,37779,37781,37783],{"class":314,"line":18462},[312,37780,34208],{"class":324},[312,37782,336],{"class":1436},[312,37784,34213],{"class":324},[312,37786,37787],{"class":314,"line":18476},[312,37788,4205],{"emptyLinePlaceholder":1881},[312,37790,37791],{"class":314,"line":18496},[312,37792,4205],{"emptyLinePlaceholder":1881},[312,37794,37795],{"class":314,"line":18502},[312,37796,34226],{"class":318},[312,37798,37799,37801,37803,37805,37807],{"class":314,"line":18513},[312,37800,5006],{"class":1436},[312,37802,34233],{"class":324},[312,37804,27839],{"class":1436},[312,37806,34238],{"class":488},[312,37808,34241],{"class":324},[312,37810,37811,37813,37815,37817,37819,37821,37823,37825,37827,37829,37831],{"class":314,"line":18536},[312,37812,34246],{"class":488},[312,37814,1576],{"class":324},[312,37816,34251],{"class":339},[312,37818,34254],{"class":488},[312,37820,2529],{"class":339},[312,37822,34254],{"class":488},[312,37824,2196],{"class":339},[312,37826,34263],{"class":324},[312,37828,2477],{"class":1436},[312,37830,1433],{"class":488},[312,37832,32293],{"class":324},[312,37834,37835,37837,37839,37841,37843,37845],{"class":314,"line":18558},[312,37836,34246],{"class":488},[312,37838,1576],{"class":324},[312,37840,34278],{"class":339},[312,37842,2400],{"class":1436},[312,37844,2391],{"class":488},[312,37846,1959],{"class":324},[312,37848,37849],{"class":314,"line":18563},[312,37850,4205],{"emptyLinePlaceholder":1881},[312,37852,37853],{"class":314,"line":18569},[312,37854,34293],{"class":318},[312,37856,37857],{"class":314,"line":18583},[312,37858,34298],{"class":318},[312,37860,37861,37863,37865],{"class":314,"line":18596},[312,37862,34303],{"class":324},[312,37864,336],{"class":1436},[312,37866,34137],{"class":488},[312,37868,37869],{"class":314,"line":18601},[312,37870,34312],{"class":318},[312,37872,37873,37875,37877],{"class":314,"line":18615},[312,37874,34317],{"class":324},[312,37876,336],{"class":1436},[312,37878,4890],{"class":488},[312,37880,37881],{"class":314,"line":18620},[312,37882,34326],{"class":318},[312,37884,37885,37887,37889],{"class":314,"line":18626},[312,37886,34331],{"class":324},[312,37888,336],{"class":1436},[312,37890,34137],{"class":488},[312,37892,37893],{"class":314,"line":18631},[312,37894,34340],{"class":318},[312,37896,37897,37899,37901],{"class":314,"line":18645},[312,37898,34345],{"class":324},[312,37900,336],{"class":1436},[312,37902,4890],{"class":488},[312,37904,37905],{"class":314,"line":18650},[312,37906,34354],{"class":318},[312,37908,37909,37911,37913],{"class":314,"line":18655},[312,37910,34359],{"class":324},[312,37912,336],{"class":1436},[312,37914,4890],{"class":488},[312,37916,37917],{"class":314,"line":18669},[312,37918,34368],{"class":318},[312,37920,37921,37923,37925],{"class":314,"line":18681},[312,37922,34373],{"class":324},[312,37924,336],{"class":1436},[312,37926,4890],{"class":488},[312,37928,37929],{"class":314,"line":18686},[312,37930,34382],{"class":318},[312,37932,37933,37935,37937,37939,37941],{"class":314,"line":18699},[312,37934,5208],{"class":1436},[312,37936,33396],{"class":324},[312,37938,27839],{"class":1436},[312,37940,33401],{"class":488},[312,37942,34395],{"class":324},[312,37944,37945],{"class":314,"line":18704},[312,37946,34400],{"class":318},[312,37948,37949,37951,37953],{"class":314,"line":18709},[312,37950,34405],{"class":324},[312,37952,336],{"class":1436},[312,37954,34410],{"class":324},[312,37956,37957],{"class":314,"line":18714},[312,37958,34415],{"class":318},[312,37960,37961,37963,37965],{"class":314,"line":18727},[312,37962,34420],{"class":324},[312,37964,336],{"class":1436},[312,37966,34425],{"class":324},[312,37968,37969],{"class":314,"line":18732},[312,37970,34431],{"class":318},[312,37972,37973],{"class":314,"line":34428},[312,37974,34437],{"class":324},[312,37976,37977],{"class":314,"line":34434},[312,37978,34443],{"class":318},[312,37980,37981],{"class":314,"line":34440},[312,37982,34449],{"class":318},[312,37984,37985,37987,37989],{"class":314,"line":34446},[312,37986,34455],{"class":324},[312,37988,336],{"class":1436},[312,37990,34460],{"class":324},[312,37992,37993],{"class":314,"line":34452},[312,37994,34466],{"class":318},[312,37996,37997,37999,38001,38003,38005,38007,38009],{"class":314,"line":34463},[312,37998,34472],{"class":324},[312,38000,336],{"class":1436},[312,38002,34477],{"class":324},[312,38004,34480],{"class":1579},[312,38006,336],{"class":1436},[312,38008,1433],{"class":488},[312,38010,1959],{"class":324},[312,38012,38013],{"class":314,"line":34469},[312,38014,34492],{"class":318},[312,38016,38017,38019,38021],{"class":314,"line":34489},[312,38018,34498],{"class":324},[312,38020,336],{"class":1436},[312,38022,34503],{"class":324},[312,38024,38025],{"class":314,"line":34495},[312,38026,34509],{"class":318},[312,38028,38029],{"class":314,"line":34506},[312,38030,34515],{"class":324},[312,38032,38033],{"class":314,"line":34512},[312,38034,34521],{"class":318},[312,38036,38037],{"class":314,"line":34518},[312,38038,34527],{"class":324},[312,38040,38041],{"class":314,"line":34524},[312,38042,34533],{"class":318},[312,38044,38045],{"class":314,"line":34530},[312,38046,34539],{"class":324},[312,38048,38049],{"class":314,"line":34536},[312,38050,34545],{"class":318},[312,38052,38053,38055,38057,38059,38061,38063,38065],{"class":314,"line":34542},[312,38054,34551],{"class":324},[312,38056,11280],{"class":1436},[312,38058,34556],{"class":324},[312,38060,2400],{"class":1436},[312,38062,34561],{"class":324},[312,38064,858],{"class":488},[312,38066,1959],{"class":324},[312,38068,38069],{"class":314,"line":34548},[312,38070,34571],{"class":318},[312,38072,38073,38075,38077,38079,38081],{"class":314,"line":34568},[312,38074,34577],{"class":324},[312,38076,11280],{"class":1436},[312,38078,34582],{"class":324},[312,38080,4754],{"class":1436},[312,38082,34587],{"class":324},[312,38084,38085],{"class":314,"line":34574},[312,38086,34593],{"class":318},[312,38088,38089,38091,38093,38095,38097],{"class":314,"line":34590},[312,38090,34599],{"class":324},[312,38092,11280],{"class":1436},[312,38094,34561],{"class":324},[312,38096,858],{"class":488},[312,38098,1959],{"class":324},[312,38100,38101],{"class":314,"line":34596},[312,38102,34613],{"class":318},[312,38104,38105,38107,38109,38111,38113],{"class":314,"line":34610},[312,38106,5208],{"class":1436},[312,38108,34621],{"class":324},[312,38110,27839],{"class":1436},[312,38112,33401],{"class":488},[312,38114,34628],{"class":324},[312,38116,38117],{"class":314,"line":34616},[312,38118,34634],{"class":318},[312,38120,38121,38123,38125],{"class":314,"line":34631},[312,38122,34405],{"class":324},[312,38124,336],{"class":1436},[312,38126,34410],{"class":324},[312,38128,38129],{"class":314,"line":34637},[312,38130,34649],{"class":318},[312,38132,38133,38135,38137],{"class":314,"line":34646},[312,38134,34420],{"class":324},[312,38136,336],{"class":1436},[312,38138,34425],{"class":324},[312,38140,38141],{"class":314,"line":34652},[312,38142,34664],{"class":318},[312,38144,38145],{"class":314,"line":34661},[312,38146,34670],{"class":324},[312,38148,38149],{"class":314,"line":34667},[312,38150,38151],{"class":318},"            # 验证时不计算梯度以节省内存\u002F计算\n",[312,38153,38154,38156],{"class":314,"line":34673},[312,38155,34676],{"class":1436},[312,38157,34679],{"class":324},[312,38159,38160],{"class":314,"line":34682},[312,38161,34685],{"class":318},[312,38163,38164,38167,38169],{"class":314,"line":34688},[312,38165,38166],{"class":324},"                output",[312,38168,336],{"class":1436},[312,38170,34460],{"class":324},[312,38172,38173],{"class":314,"line":34699},[312,38174,34702],{"class":318},[312,38176,38177,38180,38182,38184,38186,38188,38190],{"class":314,"line":34705},[312,38178,38179],{"class":324},"                pre_lab",[312,38181,336],{"class":1436},[312,38183,34477],{"class":324},[312,38185,34480],{"class":1579},[312,38187,336],{"class":1436},[312,38189,1433],{"class":488},[312,38191,1959],{"class":324},[312,38193,38194],{"class":314,"line":34724},[312,38195,34727],{"class":318},[312,38197,38198,38201,38203],{"class":314,"line":34730},[312,38199,38200],{"class":324},"                val_batch_loss",[312,38202,336],{"class":1436},[312,38204,34503],{"class":324},[312,38206,38207],{"class":314,"line":34741},[312,38208,34744],{"class":318},[312,38210,38211,38214,38216,38219,38221,38223,38225],{"class":314,"line":34747},[312,38212,38213],{"class":324},"                val_loss",[312,38215,11280],{"class":1436},[312,38217,38218],{"class":324},"val_batch_loss.item()",[312,38220,2400],{"class":1436},[312,38222,34561],{"class":324},[312,38224,858],{"class":488},[312,38226,1959],{"class":324},[312,38228,38229,38232,38234,38236,38238],{"class":314,"line":34767},[312,38230,38231],{"class":324},"                val_corrects",[312,38233,11280],{"class":1436},[312,38235,34582],{"class":324},[312,38237,4754],{"class":1436},[312,38239,34587],{"class":324},[312,38241,38242],{"class":314,"line":34783},[312,38243,38244],{"class":318},"            # 当前用于验证的样本数量\n",[312,38246,38247,38250,38252,38254,38256],{"class":314,"line":34789},[312,38248,38249],{"class":324},"            val_num",[312,38251,11280],{"class":1436},[312,38253,34561],{"class":324},[312,38255,858],{"class":488},[312,38257,1959],{"class":324},[312,38259,38260],{"class":314,"line":34803},[312,38261,34806],{"class":318},[312,38263,38264],{"class":314,"line":34809},[312,38265,34812],{"class":318},[312,38267,38268,38270,38272],{"class":314,"line":34815},[312,38269,34818],{"class":324},[312,38271,2529],{"class":1436},[312,38273,34823],{"class":324},[312,38275,38276],{"class":314,"line":34826},[312,38277,34829],{"class":318},[312,38279,38280],{"class":314,"line":34832},[312,38281,34835],{"class":318},[312,38283,38284,38286,38288],{"class":314,"line":34838},[312,38285,34841],{"class":324},[312,38287,2529],{"class":1436},[312,38289,34823],{"class":324},[312,38291,38292],{"class":314,"line":34848},[312,38293,34851],{"class":318},[312,38295,38296,38298,38300],{"class":314,"line":34854},[312,38297,34857],{"class":324},[312,38299,2529],{"class":1436},[312,38301,34862],{"class":324},[312,38303,38304],{"class":314,"line":34865},[312,38305,34868],{"class":318},[312,38307,38308,38310,38312],{"class":314,"line":34871},[312,38309,34874],{"class":324},[312,38311,2529],{"class":1436},[312,38313,34862],{"class":324},[312,38315,38316],{"class":314,"line":34881},[312,38317,4205],{"emptyLinePlaceholder":1881},[312,38319,38320],{"class":314,"line":34886},[312,38321,34889],{"class":318},[312,38323,38324,38326,38328,38330,38332,38334,38336,38338,38340,38342,38344,38346,38348,38350,38352,38354,38356,38358,38360,38362],{"class":314,"line":34892},[312,38325,34246],{"class":488},[312,38327,1576],{"class":324},[312,38329,5397],{"class":339},[312,38331,34254],{"class":488},[312,38333,34903],{"class":339},[312,38335,2840],{"class":488},[312,38337,34908],{"class":1436},[312,38339,2888],{"class":488},[312,38341,34913],{"class":339},[312,38343,2840],{"class":488},[312,38345,34908],{"class":1436},[312,38347,2888],{"class":488},[312,38349,5397],{"class":339},[312,38351,34924],{"class":324},[312,38353,2477],{"class":1436},[312,38355,1433],{"class":488},[312,38357,34931],{"class":324},[312,38359,2477],{"class":1436},[312,38361,1433],{"class":488},[312,38363,34938],{"class":324},[312,38365,38366,38368,38370,38372,38374,38376,38378,38380,38382,38384,38386,38388,38390,38392,38394,38396,38398,38400,38402,38404],{"class":314,"line":34941},[312,38367,34246],{"class":488},[312,38369,1576],{"class":324},[312,38371,5397],{"class":339},[312,38373,34254],{"class":488},[312,38375,34952],{"class":339},[312,38377,2840],{"class":488},[312,38379,34908],{"class":1436},[312,38381,2888],{"class":488},[312,38383,34961],{"class":339},[312,38385,2840],{"class":488},[312,38387,34908],{"class":1436},[312,38389,2888],{"class":488},[312,38391,5397],{"class":339},[312,38393,34972],{"class":324},[312,38395,2477],{"class":1436},[312,38397,1433],{"class":488},[312,38399,34979],{"class":324},[312,38401,2477],{"class":1436},[312,38403,1433],{"class":488},[312,38405,34938],{"class":324},[312,38407,38408],{"class":314,"line":34988},[312,38409,4205],{"emptyLinePlaceholder":1881},[312,38411,38412],{"class":314,"line":34993},[312,38413,34996],{"class":318},[312,38415,38416,38418,38420,38422,38424,38426,38428],{"class":314,"line":34999},[312,38417,4302],{"class":1436},[312,38419,35004],{"class":324},[312,38421,2477],{"class":1436},[312,38423,1433],{"class":488},[312,38425,2882],{"class":324},[312,38427,2902],{"class":1436},[312,38429,35015],{"class":324},[312,38431,38432],{"class":314,"line":35018},[312,38433,35021],{"class":318},[312,38435,38436,38438,38440,38442,38444,38446,38448],{"class":314,"line":35024},[312,38437,35027],{"class":324},[312,38439,1992],{"class":488},[312,38441,336],{"class":1436},[312,38443,35034],{"class":324},[312,38445,2477],{"class":1436},[312,38447,1433],{"class":488},[312,38449,35041],{"class":324},[312,38451,38452],{"class":314,"line":35044},[312,38453,35047],{"class":318},[312,38455,38456],{"class":314,"line":35050},[312,38457,35053],{"class":318},[312,38459,38460,38462,38464],{"class":314,"line":35056},[312,38461,35059],{"class":324},[312,38463,336],{"class":1436},[312,38465,34109],{"class":324},[312,38467,38468],{"class":314,"line":35066},[312,38469,4205],{"emptyLinePlaceholder":1881},[312,38471,38472],{"class":314,"line":35071},[312,38473,35074],{"class":318},[312,38475,38476,38478,38480,38482,38484],{"class":314,"line":35077},[312,38477,35080],{"class":324},[312,38479,336],{"class":1436},[312,38481,35085],{"class":324},[312,38483,2477],{"class":1436},[312,38485,35090],{"class":324},[312,38487,38488,38490,38492,38494,38496,38498,38500,38502,38504,38506,38508,38510,38512,38514,38516,38518,38520,38522],{"class":314,"line":35093},[312,38489,34246],{"class":488},[312,38491,1576],{"class":324},[312,38493,35100],{"class":339},[312,38495,2840],{"class":488},[312,38497,35105],{"class":1436},[312,38499,2888],{"class":488},[312,38501,2489],{"class":339},[312,38503,2840],{"class":488},[312,38505,35105],{"class":1436},[312,38507,2888],{"class":488},[312,38509,35118],{"class":339},[312,38511,35121],{"class":324},[312,38513,35124],{"class":1436},[312,38515,2851],{"class":488},[312,38517,35129],{"class":324},[312,38519,2273],{"class":1436},[312,38521,2851],{"class":488},[312,38523,32293],{"class":324},[312,38525,38526],{"class":314,"line":35138},[312,38527,38528],{"class":318},"    # 选择最优参数并保存\n",[312,38530,38531],{"class":314,"line":35144},[312,38532,38533],{"class":318},"    # 保存最佳模型权重字典\n",[312,38535,38536,38539,38541],{"class":314,"line":35150},[312,38537,38538],{"class":324},"    torch.save(best_model_wts,",[312,38540,35162],{"class":339},[312,38542,1959],{"class":324},[312,38544,38545],{"class":314,"line":35156},[312,38546,35182],{"class":318},[312,38548,38549,38551,38553,38555,38557,38559],{"class":314,"line":35167},[312,38550,35188],{"class":324},[312,38552,336],{"class":1436},[312,38554,35193],{"class":324},[312,38556,35196],{"class":1579},[312,38558,336],{"class":1436},[312,38560,3353],{"class":324},[312,38562,38563,38565,38567,38569],{"class":314,"line":35173},[312,38564,35206],{"class":339},[312,38566,2803],{"class":324},[312,38568,35211],{"class":488},[312,38570,35214],{"class":324},[312,38572,38573,38575],{"class":314,"line":35179},[312,38574,35220],{"class":339},[312,38576,35223],{"class":324},[312,38578,38579,38581],{"class":314,"line":35185},[312,38580,35229],{"class":339},[312,38582,35232],{"class":324},[312,38584,38585,38587],{"class":314,"line":35203},[312,38586,35238],{"class":339},[312,38588,35241],{"class":324},[312,38590,38591,38593],{"class":314,"line":35217},[312,38592,35247],{"class":339},[312,38594,35250],{"class":324},[312,38596,38597],{"class":314,"line":35226},[312,38598,35256],{"class":324},[312,38600,38601],{"class":314,"line":35235},[312,38602,35262],{"class":318},[312,38604,38605,38607],{"class":314,"line":35244},[312,38606,5895],{"class":1436},[312,38608,35270],{"class":324},[312,38610,38611],{"class":314,"line":35253},[312,38612,4205],{"emptyLinePlaceholder":1881},[312,38614,38615],{"class":314,"line":35259},[312,38616,35281],{"class":318},[312,38618,38619,38621,38623],{"class":314,"line":35265},[312,38620,33742],{"class":1436},[312,38622,35289],{"class":332},[312,38624,35292],{"class":324},[312,38626,38627],{"class":314,"line":35273},[312,38628,35298],{"class":318},[312,38630,38631,38633,38635,38637,38639,38641,38643,38645],{"class":314,"line":35278},[312,38632,35304],{"class":324},[312,38634,33488],{"class":1579},[312,38636,336],{"class":1436},[312,38638,1576],{"class":324},[312,38640,2443],{"class":488},[312,38642,2323],{"class":324},[312,38644,2238],{"class":488},[312,38646,32293],{"class":324},[312,38648,38649],{"class":314,"line":35284},[312,38650,35324],{"class":318},[312,38652,38653],{"class":314,"line":35295},[312,38654,35330],{"class":318},[312,38656,38657],{"class":314,"line":35301},[312,38658,35336],{"class":318},[312,38660,38661,38663,38665,38667,38669,38671,38673],{"class":314,"line":35321},[312,38662,33522],{"class":324},[312,38664,1433],{"class":488},[312,38666,2323],{"class":324},[312,38668,2027],{"class":488},[312,38670,2323],{"class":324},[312,38672,1433],{"class":488},[312,38674,1959],{"class":324},[312,38676,38677],{"class":314,"line":35327},[312,38678,35359],{"class":318},[312,38680,38681],{"class":314,"line":35333},[312,38682,35365],{"class":318},[312,38684,38685],{"class":314,"line":35339},[312,38686,35371],{"class":318},[312,38688,38689],{"class":314,"line":35356},[312,38690,35377],{"class":318},[312,38692,38693],{"class":314,"line":35362},[312,38694,35383],{"class":318},[312,38696,38697,38699,38701,38703,38705,38707,38709,38711,38713],{"class":314,"line":35368},[312,38698,35389],{"class":324},[312,38700,35392],{"class":339},[312,38702,35395],{"class":324},[312,38704,35398],{"class":339},[312,38706,2323],{"class":324},[312,38708,35403],{"class":1579},[312,38710,336],{"class":1436},[312,38712,35408],{"class":339},[312,38714,1959],{"class":324},[312,38716,38717,38719,38721,38723,38725,38727,38729,38731,38733],{"class":314,"line":35374},[312,38718,35389],{"class":324},[312,38720,35392],{"class":339},[312,38722,35420],{"class":324},[312,38724,35423],{"class":339},[312,38726,2323],{"class":324},[312,38728,35403],{"class":1579},[312,38730,336],{"class":1436},[312,38732,35432],{"class":339},[312,38734,1959],{"class":324},[312,38736,38737],{"class":314,"line":35380},[312,38738,35440],{"class":318},[312,38740,38741],{"class":314,"line":35386},[312,38742,35446],{"class":324},[312,38744,38745],{"class":314,"line":35413},[312,38746,35452],{"class":318},[312,38748,38749,38751,38753],{"class":314,"line":35437},[312,38750,35458],{"class":324},[312,38752,35461],{"class":339},[312,38754,1959],{"class":324},[312,38756,38757,38759,38761],{"class":314,"line":35443},[312,38758,35469],{"class":324},[312,38760,35472],{"class":339},[312,38762,1959],{"class":324},[312,38764,38765],{"class":314,"line":35449},[312,38766,35480],{"class":318},[312,38768,38769,38771,38773,38775,38777,38779,38781],{"class":314,"line":35455},[312,38770,33522],{"class":324},[312,38772,1433],{"class":488},[312,38774,2323],{"class":324},[312,38776,2027],{"class":488},[312,38778,2323],{"class":324},[312,38780,2027],{"class":488},[312,38782,1959],{"class":324},[312,38784,38785,38787,38789,38791,38793,38795,38797,38799,38801],{"class":314,"line":35466},[312,38786,35389],{"class":324},[312,38788,35392],{"class":339},[312,38790,35507],{"class":324},[312,38792,35398],{"class":339},[312,38794,2323],{"class":324},[312,38796,35403],{"class":1579},[312,38798,336],{"class":1436},[312,38800,35518],{"class":339},[312,38802,1959],{"class":324},[312,38804,38805,38807,38809,38811,38813,38815,38817,38819,38821],{"class":314,"line":35477},[312,38806,35389],{"class":324},[312,38808,35392],{"class":339},[312,38810,35530],{"class":324},[312,38812,35423],{"class":339},[312,38814,2323],{"class":324},[312,38816,35403],{"class":1579},[312,38818,336],{"class":1436},[312,38820,35541],{"class":339},[312,38822,1959],{"class":324},[312,38824,38825],{"class":314,"line":35483},[312,38826,35549],{"class":318},[312,38828,38829],{"class":314,"line":35500},[312,38830,35446],{"class":324},[312,38832,38833,38835,38837],{"class":314,"line":35523},[312,38834,35458],{"class":324},[312,38836,35392],{"class":339},[312,38838,1959],{"class":324},[312,38840,38841,38843,38845],{"class":314,"line":35546},[312,38842,35469],{"class":324},[312,38844,35571],{"class":339},[312,38846,1959],{"class":324},[312,38848,38849],{"class":314,"line":35552},[312,38850,35579],{"class":324},[312,38852,38853],{"class":314,"line":35557},[312,38854,4205],{"emptyLinePlaceholder":1881},[312,38856,38857],{"class":314,"line":35566},[312,38858,35590],{"class":318},[312,38860,38861,38863,38865,38867,38869],{"class":314,"line":35576},[312,38862,3338],{"class":1436},[312,38864,33015],{"class":488},[312,38866,4754],{"class":1436},[312,38868,33020],{"class":339},[312,38870,5544],{"class":324},[312,38872,38873],{"class":314,"line":35582},[312,38874,35609],{"class":318},[312,38876,38877,38880,38882],{"class":314,"line":35587},[312,38878,38879],{"class":324},"    AlexNet",[312,38881,336],{"class":1436},[312,38883,38884],{"class":324},"AlexNet()\n",[312,38886,38887,38889,38891],{"class":314,"line":35593},[312,38888,35626],{"class":324},[312,38890,336],{"class":1436},[312,38892,35631],{"class":324},[312,38894,38895,38897,38899,38902,38904,38906,38908],{"class":314,"line":35606},[312,38896,35188],{"class":324},[312,38898,336],{"class":1436},[312,38900,38901],{"class":324},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[312,38903,35644],{"class":1579},[312,38905,336],{"class":1436},[312,38907,1546],{"class":488},[312,38909,1959],{"class":324},[312,38911,38912],{"class":314,"line":35612},[312,38913,35656],{"class":324},[140,38915,38916],{"start":274},[143,38917,35669],{},[303,38919,38921],{"className":32174,"code":38920,"language":32176,"meta":308,"style":308},"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",[119,38922,38923,38929,38939,38949,38959,38963,38973,38983,38994,38998,39002,39006,39014,39030,39040,39056,39066,39080,39084,39094,39104,39114,39120,39124,39128,39136,39140,39156,39164,39168,39172,39180,39188,39192,39196,39200,39204,39210,39214,39224,39232,39240,39244,39248,39252,39260,39264,39280,39284,39288,39292,39304,39308,39320,39324,39328,39340,39344,39354,39358,39362,39374,39378,39386,39390,39394,39402,39406,39414,39418,39422,39426,39430,39434,39450,39458,39462,39466,39514,39520,39524,39534,39542,39550,39554,39558,39562,39566,39574,39578,39594,39598,39606,39614],{"__ignoreMap":308},[312,38924,38925,38927],{"class":314,"line":315},[312,38926,32188],{"class":1436},[312,38928,32191],{"class":324},[312,38930,38931,38933,38935,38937],{"class":314,"line":171},[312,38932,32188],{"class":1436},[312,38934,33210],{"class":324},[312,38936,33178],{"class":1436},[312,38938,33215],{"class":324},[312,38940,38941,38943,38945,38947],{"class":314,"line":274},[312,38942,32533],{"class":1436},[312,38944,35697],{"class":324},[312,38946,32188],{"class":1436},[312,38948,35702],{"class":324},[312,38950,38951,38953,38955,38957],{"class":314,"line":298},[312,38952,32533],{"class":1436},[312,38954,33193],{"class":324},[312,38956,32188],{"class":1436},[312,38958,33198],{"class":324},[312,38960,38961],{"class":314,"line":974},[312,38962,35717],{"class":318},[312,38964,38965,38967,38969,38971],{"class":314,"line":980},[312,38966,32533],{"class":1436},[312,38968,33163],{"class":324},[312,38970,32188],{"class":1436},[312,38972,33168],{"class":324},[312,38974,38975,38977,38979,38981],{"class":314,"line":997},[312,38976,32533],{"class":1436},[312,38978,33709],{"class":324},[312,38980,32188],{"class":1436},[312,38982,37352],{"class":324},[312,38984,38985,38987,38990,38992],{"class":314,"line":1003},[312,38986,32533],{"class":1436},[312,38988,38989],{"class":324}," 练习.AlexNet.model ",[312,38991,32188],{"class":1436},[312,38993,37352],{"class":324},[312,38995,38996],{"class":314,"line":1020},[312,38997,4205],{"emptyLinePlaceholder":1881},[312,38999,39000],{"class":314,"line":1026},[312,39001,4205],{"emptyLinePlaceholder":1881},[312,39003,39004],{"class":314,"line":3418},[312,39005,35746],{"class":318},[312,39007,39008,39010,39012],{"class":314,"line":3423},[312,39009,33742],{"class":1436},[312,39011,35753],{"class":332},[312,39013,33748],{"class":324},[312,39015,39016,39018,39020,39022,39024,39026,39028],{"class":314,"line":3429},[312,39017,35760],{"class":324},[312,39019,336],{"class":1436},[312,39021,33250],{"class":324},[312,39023,33253],{"class":1579},[312,39025,336],{"class":1436},[312,39027,33258],{"class":339},[312,39029,33261],{"class":324},[312,39031,39032,39034,39036,39038],{"class":314,"line":3434},[312,39033,35777],{"class":1579},[312,39035,336],{"class":1436},[312,39037,35782],{"class":488},[312,39039,33261],{"class":324},[312,39041,39042,39044,39046,39048,39050,39052,39054],{"class":314,"line":3448},[312,39043,35789],{"class":1579},[312,39045,336],{"class":1436},[312,39047,33288],{"class":324},[312,39049,33291],{"class":1579},[312,39051,336],{"class":1436},[312,39053,37244],{"class":488},[312,39055,33299],{"class":324},[312,39057,39058,39060,39062,39064],{"class":314,"line":3453},[312,39059,35806],{"class":1579},[312,39061,336],{"class":1436},[312,39063,33271],{"class":488},[312,39065,1959],{"class":324},[312,39067,39068,39070,39072,39074,39076,39078],{"class":314,"line":3459},[312,39069,35817],{"class":324},[312,39071,336],{"class":1436},[312,39073,33329],{"class":324},[312,39075,33332],{"class":1579},[312,39077,336],{"class":1436},[312,39079,35828],{"class":324},[312,39081,39082],{"class":314,"line":3480},[312,39083,35833],{"class":318},[312,39085,39086,39088,39090,39092],{"class":314,"line":3485},[312,39087,35838],{"class":1579},[312,39089,336],{"class":1436},[312,39091,1433],{"class":488},[312,39093,33261],{"class":324},[312,39095,39096,39098,39100,39102],{"class":314,"line":3499},[312,39097,35849],{"class":1579},[312,39099,336],{"class":1436},[312,39101,33271],{"class":488},[312,39103,33261],{"class":324},[312,39105,39106,39108,39110,39112],{"class":314,"line":3504},[312,39107,35860],{"class":1579},[312,39109,336],{"class":1436},[312,39111,858],{"class":488},[312,39113,1959],{"class":324},[312,39115,39116,39118],{"class":314,"line":3533},[312,39117,5895],{"class":1436},[312,39119,35873],{"class":324},[312,39121,39122],{"class":314,"line":3538},[312,39123,4205],{"emptyLinePlaceholder":1881},[312,39125,39126],{"class":314,"line":3555},[312,39127,35882],{"class":318},[312,39129,39130,39132,39134],{"class":314,"line":3560},[312,39131,33742],{"class":1436},[312,39133,35889],{"class":332},[312,39135,35892],{"class":324},[312,39137,39138],{"class":314,"line":3565},[312,39139,35897],{"class":318},[312,39141,39142,39144,39146,39148,39150,39152,39154],{"class":314,"line":3570},[312,39143,33032],{"class":324},[312,39145,336],{"class":1436},[312,39147,33039],{"class":339},[312,39149,3510],{"class":1436},[312,39151,33044],{"class":324},[312,39153,3507],{"class":1436},[312,39155,35914],{"class":339},[312,39157,39158,39160,39162],{"class":314,"line":3584},[312,39159,33084],{"class":324},[312,39161,336],{"class":1436},[312,39163,34084],{"class":324},[312,39165,39166],{"class":314,"line":3589},[312,39167,4205],{"emptyLinePlaceholder":1881},[312,39169,39170],{"class":314,"line":4382},[312,39171,35931],{"class":318},[312,39173,39174,39176,39178],{"class":314,"line":4396},[312,39175,35936],{"class":324},[312,39177,336],{"class":1436},[312,39179,34137],{"class":488},[312,39181,39182,39184,39186],{"class":314,"line":4404},[312,39183,35945],{"class":324},[312,39185,336],{"class":1436},[312,39187,4890],{"class":488},[312,39189,39190],{"class":314,"line":4409},[312,39191,4205],{"emptyLinePlaceholder":1881},[312,39193,39194],{"class":314,"line":4415},[312,39195,35958],{"class":318},[312,39197,39198],{"class":314,"line":4421},[312,39199,35963],{"class":318},[312,39201,39202],{"class":314,"line":4426},[312,39203,35968],{"class":318},[312,39205,39206,39208],{"class":314,"line":9751},[312,39207,35973],{"class":1436},[312,39209,34679],{"class":324},[312,39211,39212],{"class":314,"line":9775},[312,39213,35980],{"class":318},[312,39215,39216,39218,39220,39222],{"class":314,"line":9780},[312,39217,5208],{"class":1436},[312,39219,35987],{"class":324},[312,39221,27839],{"class":1436},[312,39223,35992],{"class":324},[312,39225,39226,39228,39230],{"class":314,"line":9786},[312,39227,35997],{"class":324},[312,39229,336],{"class":1436},[312,39231,36002],{"class":324},[312,39233,39234,39236,39238],{"class":314,"line":9813},[312,39235,36007],{"class":324},[312,39237,336],{"class":1436},[312,39239,36012],{"class":324},[312,39241,39242],{"class":314,"line":9818},[312,39243,36017],{"class":318},[312,39245,39246],{"class":314,"line":9824},[312,39247,34670],{"class":324},[312,39249,39250],{"class":314,"line":9836},[312,39251,36026],{"class":318},[312,39253,39254,39256,39258],{"class":314,"line":9848},[312,39255,34455],{"class":324},[312,39257,336],{"class":1436},[312,39259,36035],{"class":324},[312,39261,39262],{"class":314,"line":9860},[312,39263,36040],{"class":318},[312,39265,39266,39268,39270,39272,39274,39276,39278],{"class":314,"line":11519},[312,39267,34472],{"class":324},[312,39269,336],{"class":1436},[312,39271,34477],{"class":324},[312,39273,34480],{"class":1579},[312,39275,336],{"class":1436},[312,39277,1433],{"class":488},[312,39279,1959],{"class":324},[312,39281,39282],{"class":314,"line":11544},[312,39283,36061],{"class":318},[312,39285,39286],{"class":314,"line":11567},[312,39287,36066],{"class":318},[312,39289,39290],{"class":314,"line":11591},[312,39291,36071],{"class":318},[312,39293,39294,39296,39298,39300,39302],{"class":314,"line":11596},[312,39295,36076],{"class":324},[312,39297,11280],{"class":1436},[312,39299,34582],{"class":324},[312,39301,4754],{"class":1436},[312,39303,36085],{"class":324},[312,39305,39306],{"class":314,"line":11601},[312,39307,36090],{"class":318},[312,39309,39310,39312,39314,39316,39318],{"class":314,"line":11606},[312,39311,36095],{"class":324},[312,39313,11280],{"class":1436},[312,39315,36100],{"class":324},[312,39317,858],{"class":488},[312,39319,1959],{"class":324},[312,39321,39322],{"class":314,"line":11615},[312,39323,4205],{"emptyLinePlaceholder":1881},[312,39325,39326],{"class":314,"line":11620},[312,39327,36113],{"class":318},[312,39329,39330,39332,39334,39336,39338],{"class":314,"line":11626},[312,39331,36118],{"class":324},[312,39333,336],{"class":1436},[312,39335,36123],{"class":324},[312,39337,2529],{"class":1436},[312,39339,36128],{"class":324},[312,39341,39342],{"class":314,"line":11647},[312,39343,36133],{"class":318},[312,39345,39346,39348,39350,39352],{"class":314,"line":11653},[312,39347,34246],{"class":488},[312,39349,1576],{"class":324},[312,39351,36142],{"class":339},[312,39353,36145],{"class":324},[312,39355,39356],{"class":314,"line":11667},[312,39357,4205],{"emptyLinePlaceholder":1881},[312,39359,39360],{"class":314,"line":11673},[312,39361,36154],{"class":318},[312,39363,39364,39366,39368,39370,39372],{"class":314,"line":11700},[312,39365,3338],{"class":1436},[312,39367,33015],{"class":488},[312,39369,4754],{"class":1436},[312,39371,33020],{"class":339},[312,39373,5544],{"class":324},[312,39375,39376],{"class":314,"line":11709},[312,39377,36171],{"class":318},[312,39379,39380,39382,39384],{"class":314,"line":11715},[312,39381,33084],{"class":324},[312,39383,336],{"class":1436},[312,39385,38884],{"class":324},[312,39387,39388],{"class":314,"line":11723},[312,39389,36184],{"class":318},[312,39391,39392],{"class":314,"line":11728},[312,39393,36189],{"class":318},[312,39395,39396,39398,39400],{"class":314,"line":18404},[312,39397,36194],{"class":324},[312,39399,36197],{"class":339},[312,39401,32293],{"class":324},[312,39403,39404],{"class":314,"line":18410},[312,39405,36204],{"class":318},[312,39407,39408,39410,39412],{"class":314,"line":18433},[312,39409,35817],{"class":324},[312,39411,336],{"class":1436},[312,39413,36213],{"class":324},[312,39415,39416],{"class":314,"line":18439},[312,39417,36218],{"class":318},[312,39419,39420],{"class":314,"line":18462},[312,39421,36223],{"class":324},[312,39423,39424],{"class":314,"line":18476},[312,39425,4205],{"emptyLinePlaceholder":1881},[312,39427,39428],{"class":314,"line":18496},[312,39429,36232],{"class":318},[312,39431,39432],{"class":314,"line":18502},[312,39433,36237],{"class":318},[312,39435,39436,39438,39440,39442,39444,39446,39448],{"class":314,"line":18513},[312,39437,33032],{"class":324},[312,39439,336],{"class":1436},[312,39441,33039],{"class":339},[312,39443,3510],{"class":1436},[312,39445,33044],{"class":324},[312,39447,3507],{"class":1436},[312,39449,35914],{"class":339},[312,39451,39452,39454,39456],{"class":314,"line":18536},[312,39453,33084],{"class":324},[312,39455,336],{"class":1436},[312,39457,34084],{"class":324},[312,39459,39460],{"class":314,"line":18558},[312,39461,36266],{"class":318},[312,39463,39464],{"class":314,"line":18563},[312,39465,36271],{"class":318},[312,39467,39468,39470,39472,39474,39476,39478,39480,39482,39484,39486,39488,39490,39492,39494,39496,39498,39500,39502,39504,39506,39508,39510,39512],{"class":314,"line":18569},[312,39469,36276],{"class":324},[312,39471,336],{"class":1436},[312,39473,2834],{"class":324},[312,39475,36283],{"class":339},[312,39477,2323],{"class":324},[312,39479,36288],{"class":339},[312,39481,2323],{"class":324},[312,39483,36293],{"class":339},[312,39485,2323],{"class":324},[312,39487,36298],{"class":339},[312,39489,2323],{"class":324},[312,39491,36303],{"class":339},[312,39493,2323],{"class":324},[312,39495,36308],{"class":339},[312,39497,2323],{"class":324},[312,39499,36313],{"class":339},[312,39501,2323],{"class":324},[312,39503,36318],{"class":339},[312,39505,2323],{"class":324},[312,39507,36323],{"class":339},[312,39509,2323],{"class":324},[312,39511,36328],{"class":339},[312,39513,35041],{"class":324},[312,39515,39516,39518],{"class":314,"line":18583},[312,39517,35973],{"class":1436},[312,39519,34679],{"class":324},[312,39521,39522],{"class":314,"line":18596},[312,39523,36341],{"class":318},[312,39525,39526,39528,39530,39532],{"class":314,"line":18601},[312,39527,5208],{"class":1436},[312,39529,36348],{"class":324},[312,39531,27839],{"class":1436},[312,39533,35992],{"class":324},[312,39535,39536,39538,39540],{"class":314,"line":18615},[312,39537,34405],{"class":324},[312,39539,336],{"class":1436},[312,39541,34410],{"class":324},[312,39543,39544,39546,39548],{"class":314,"line":18620},[312,39545,34420],{"class":324},[312,39547,336],{"class":1436},[312,39549,34425],{"class":324},[312,39551,39552],{"class":314,"line":18626},[312,39553,4205],{"emptyLinePlaceholder":1881},[312,39555,39556],{"class":314,"line":18631},[312,39557,36377],{"class":318},[312,39559,39560],{"class":314,"line":18645},[312,39561,34670],{"class":324},[312,39563,39564],{"class":314,"line":18650},[312,39565,36386],{"class":318},[312,39567,39568,39570,39572],{"class":314,"line":18655},[312,39569,34455],{"class":324},[312,39571,336],{"class":1436},[312,39573,34460],{"class":324},[312,39575,39576],{"class":314,"line":18669},[312,39577,36399],{"class":318},[312,39579,39580,39582,39584,39586,39588,39590,39592],{"class":314,"line":18681},[312,39581,34472],{"class":324},[312,39583,336],{"class":1436},[312,39585,34477],{"class":324},[312,39587,34480],{"class":1579},[312,39589,336],{"class":1436},[312,39591,1433],{"class":488},[312,39593,1959],{"class":324},[312,39595,39596],{"class":314,"line":18686},[312,39597,36420],{"class":318},[312,39599,39600,39602,39604],{"class":314,"line":18699},[312,39601,36425],{"class":324},[312,39603,336],{"class":1436},[312,39605,36430],{"class":324},[312,39607,39608,39610,39612],{"class":314,"line":18704},[312,39609,36435],{"class":324},[312,39611,336],{"class":1436},[312,39613,36440],{"class":324},[312,39615,39616,39618,39620,39622,39624,39626,39628,39630],{"class":314,"line":18709},[312,39617,36445],{"class":488},[312,39619,1576],{"class":324},[312,39621,36450],{"class":339},[312,39623,36453],{"class":324},[312,39625,36456],{"class":339},[312,39627,2323],{"class":324},[312,39629,36461],{"class":339},[312,39631,36464],{"class":324},[69,39633,39635],{"id":39634},"_22vgg","2.2.VGG",[23796,39637,39639],{"id":39638},"_221原理","2.2.1.原理",[24,39641,39642],{},[19,39643],{"alt":308,"src":39644},"\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",[24,39646,39647],{},[19,39648],{"alt":308,"src":39649},"\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",[24,39651,39652],{},[19,39653],{"alt":308,"src":39654},"\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",[24,39656,39657],{},"参数详细描述：",[24,39659,39660],{},[19,39661],{"alt":308,"src":39662},"\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",[24,39664,39665],{},[19,39666],{"alt":308,"src":39667},"\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",[24,39669,39670],{},[19,39671],{"alt":308,"src":39672},"\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",[24,39674,39675],{},[19,39676],{"alt":308,"src":39677},"\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",[24,39679,39680],{},[19,39681],{"alt":308,"src":39682},"\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",[23796,39684,39686],{"id":39685},"_222代码实现","2.2.2.代码实现",[140,39688,39689],{},[143,39690,39691],{},"网络搭建",[303,39693,39695],{"className":32174,"code":39694,"language":32176,"meta":308,"style":308},"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",[119,39696,39697,39703,39715,39725,39735,39739,39756,39764,39783,39788,39793,39805,39843,39848,39884,39888,39917,39922,39927,39938,39974,39978,40014,40018,40046,40050,40055,40066,40102,40106,40142,40146,40182,40186,40214,40218,40223,40234,40271,40275,40311,40315,40351,40355,40383,40387,40392,40403,40439,40443,40479,40483,40519,40523,40551,40555,40560,40571,40576,40581,40586,40607,40611,40623,40627,40639,40643,40647,40652,40657,40672,40677,40687,40692,40707,40712,40731,40736,40745,40750,40760,40765,40770,40784,40789,40803,40811,40815,40819,40827,40838,40849,40860,40871,40882,40893,40899,40903,40908,40921,40941,40947,40956],{"__ignoreMap":308},[312,39698,39699,39701],{"class":314,"line":315},[312,39700,32188],{"class":1436},[312,39702,32191],{"class":324},[312,39704,39705,39707,39710,39712],{"class":314,"line":171},[312,39706,32533],{"class":1436},[312,39708,39709],{"class":324}," sympy.core.sympify ",[312,39711,32188],{"class":1436},[312,39713,39714],{"class":324}," kernS\n",[312,39716,39717,39719,39721,39723],{"class":314,"line":274},[312,39718,32533],{"class":1436},[312,39720,32536],{"class":324},[312,39722,32188],{"class":1436},[312,39724,32541],{"class":324},[312,39726,39727,39729,39731,39733],{"class":314,"line":298},[312,39728,32533],{"class":1436},[312,39730,32553],{"class":324},[312,39732,32188],{"class":1436},[312,39734,32558],{"class":324},[312,39736,39737],{"class":314,"line":974},[312,39738,4205],{"emptyLinePlaceholder":1881},[312,39740,39741,39743,39746,39748,39750,39752,39754],{"class":314,"line":980},[312,39742,16495],{"class":1436},[312,39744,39745],{"class":332}," VGG16",[312,39747,1576],{"class":324},[312,39749,32574],{"class":332},[312,39751,2503],{"class":324},[312,39753,32579],{"class":332},[312,39755,32582],{"class":324},[312,39757,39758,39760,39762],{"class":314,"line":997},[312,39759,32597],{"class":1436},[312,39761,32600],{"class":488},[312,39763,32603],{"class":324},[312,39765,39766,39768,39770,39773,39775,39777,39779,39781],{"class":314,"line":1003},[312,39767,32613],{"class":488},[312,39769,1576],{"class":324},[312,39771,39772],{"class":488},"VGG16",[312,39774,733],{"class":324},[312,39776,32619],{"class":488},[312,39778,32622],{"class":324},[312,39780,32625],{"class":488},[312,39782,3781],{"class":324},[312,39784,39785],{"class":314,"line":1020},[312,39786,39787],{"class":318},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[312,39789,39790],{"class":314,"line":1026},[312,39791,39792],{"class":318},"        # 这里用的是灰度图\n",[312,39794,39795,39797,39800,39802],{"class":314,"line":3418},[312,39796,32641],{"class":488},[312,39798,39799],{"class":324},".block1",[312,39801,336],{"class":1436},[312,39803,39804],{"class":324},"nn.Sequential(\n",[312,39806,39807,39810,39812,39814,39816,39818,39820,39822,39824,39826,39828,39830,39832,39834,39836,39838,39840],{"class":314,"line":3423},[312,39808,39809],{"class":324},"            nn.Conv2d(",[312,39811,32652],{"class":1579},[312,39813,336],{"class":1436},[312,39815,1433],{"class":488},[312,39817,2323],{"class":324},[312,39819,32661],{"class":1579},[312,39821,336],{"class":1436},[312,39823,2150],{"class":488},[312,39825,2323],{"class":324},[312,39827,32670],{"class":1579},[312,39829,336],{"class":1436},[312,39831,2021],{"class":488},[312,39833,2323],{"class":324},[312,39835,1340],{"class":1579},[312,39837,336],{"class":1436},[312,39839,1433],{"class":488},[312,39841,39842],{"class":324},"),\n",[312,39844,39845],{"class":314,"line":3429},[312,39846,39847],{"class":324},"            nn.ReLU(),\n",[312,39849,39850,39852,39854,39856,39858,39860,39862,39864,39866,39868,39870,39872,39874,39876,39878,39880,39882],{"class":314,"line":3434},[312,39851,39809],{"class":324},[312,39853,32652],{"class":1579},[312,39855,336],{"class":1436},[312,39857,2150],{"class":488},[312,39859,2323],{"class":324},[312,39861,32661],{"class":1579},[312,39863,336],{"class":1436},[312,39865,2150],{"class":488},[312,39867,2323],{"class":324},[312,39869,32670],{"class":1579},[312,39871,336],{"class":1436},[312,39873,2021],{"class":488},[312,39875,2323],{"class":324},[312,39877,1340],{"class":1579},[312,39879,336],{"class":1436},[312,39881,1433],{"class":488},[312,39883,39842],{"class":324},[312,39885,39886],{"class":314,"line":3448},[312,39887,39847],{"class":324},[312,39889,39890,39893,39895,39897,39899,39901,39903,39905,39907,39909,39911,39913,39915],{"class":314,"line":3453},[312,39891,39892],{"class":324},"            nn.MaxPool2d(",[312,39894,32670],{"class":1579},[312,39896,336],{"class":1436},[312,39898,2027],{"class":488},[312,39900,2323],{"class":324},[312,39902,32724],{"class":1579},[312,39904,336],{"class":1436},[312,39906,2027],{"class":488},[312,39908,2323],{"class":324},[312,39910,1340],{"class":1579},[312,39912,336],{"class":1436},[312,39914,858],{"class":488},[312,39916,1959],{"class":324},[312,39918,39919],{"class":314,"line":3459},[312,39920,39921],{"class":324},"        )\n",[312,39923,39924],{"class":314,"line":3480},[312,39925,39926],{"class":318},"        # 第二层\n",[312,39928,39929,39931,39934,39936],{"class":314,"line":3485},[312,39930,32641],{"class":488},[312,39932,39933],{"class":324},".block2",[312,39935,336],{"class":1436},[312,39937,39804],{"class":324},[312,39939,39940,39942,39944,39946,39948,39950,39952,39954,39956,39958,39960,39962,39964,39966,39968,39970,39972],{"class":314,"line":3499},[312,39941,39809],{"class":324},[312,39943,32652],{"class":1579},[312,39945,336],{"class":1436},[312,39947,2150],{"class":488},[312,39949,2323],{"class":324},[312,39951,32661],{"class":1579},[312,39953,336],{"class":1436},[312,39955,33865],{"class":488},[312,39957,2323],{"class":324},[312,39959,32670],{"class":1579},[312,39961,336],{"class":1436},[312,39963,2021],{"class":488},[312,39965,2323],{"class":324},[312,39967,1340],{"class":1579},[312,39969,336],{"class":1436},[312,39971,1433],{"class":488},[312,39973,39842],{"class":324},[312,39975,39976],{"class":314,"line":3504},[312,39977,39847],{"class":324},[312,39979,39980,39982,39984,39986,39988,39990,39992,39994,39996,39998,40000,40002,40004,40006,40008,40010,40012],{"class":314,"line":3533},[312,39981,39809],{"class":324},[312,39983,32652],{"class":1579},[312,39985,336],{"class":1436},[312,39987,33865],{"class":488},[312,39989,2323],{"class":324},[312,39991,32661],{"class":1579},[312,39993,336],{"class":1436},[312,39995,33865],{"class":488},[312,39997,2323],{"class":324},[312,39999,32670],{"class":1579},[312,40001,336],{"class":1436},[312,40003,2021],{"class":488},[312,40005,2323],{"class":324},[312,40007,1340],{"class":1579},[312,40009,336],{"class":1436},[312,40011,1433],{"class":488},[312,40013,39842],{"class":324},[312,40015,40016],{"class":314,"line":3538},[312,40017,39847],{"class":324},[312,40019,40020,40022,40024,40026,40028,40030,40032,40034,40036,40038,40040,40042,40044],{"class":314,"line":3555},[312,40021,39892],{"class":324},[312,40023,32670],{"class":1579},[312,40025,336],{"class":1436},[312,40027,2027],{"class":488},[312,40029,2323],{"class":324},[312,40031,32724],{"class":1579},[312,40033,336],{"class":1436},[312,40035,2027],{"class":488},[312,40037,2323],{"class":324},[312,40039,1340],{"class":1579},[312,40041,336],{"class":1436},[312,40043,858],{"class":488},[312,40045,1959],{"class":324},[312,40047,40048],{"class":314,"line":3560},[312,40049,39921],{"class":324},[312,40051,40052],{"class":314,"line":3565},[312,40053,40054],{"class":318},"        # 第三层\n",[312,40056,40057,40059,40062,40064],{"class":314,"line":3570},[312,40058,32641],{"class":488},[312,40060,40061],{"class":324},".block3",[312,40063,336],{"class":1436},[312,40065,39804],{"class":324},[312,40067,40068,40070,40072,40074,40076,40078,40080,40082,40084,40086,40088,40090,40092,40094,40096,40098,40100],{"class":314,"line":3584},[312,40069,39809],{"class":324},[312,40071,32652],{"class":1579},[312,40073,336],{"class":1436},[312,40075,33865],{"class":488},[312,40077,2323],{"class":324},[312,40079,32661],{"class":1579},[312,40081,336],{"class":1436},[312,40083,36665],{"class":488},[312,40085,2323],{"class":324},[312,40087,32670],{"class":1579},[312,40089,336],{"class":1436},[312,40091,2021],{"class":488},[312,40093,2323],{"class":324},[312,40095,1340],{"class":1579},[312,40097,336],{"class":1436},[312,40099,1433],{"class":488},[312,40101,39842],{"class":324},[312,40103,40104],{"class":314,"line":3589},[312,40105,39847],{"class":324},[312,40107,40108,40110,40112,40114,40116,40118,40120,40122,40124,40126,40128,40130,40132,40134,40136,40138,40140],{"class":314,"line":4382},[312,40109,39809],{"class":324},[312,40111,32652],{"class":1579},[312,40113,336],{"class":1436},[312,40115,36665],{"class":488},[312,40117,2323],{"class":324},[312,40119,32661],{"class":1579},[312,40121,336],{"class":1436},[312,40123,36665],{"class":488},[312,40125,2323],{"class":324},[312,40127,32670],{"class":1579},[312,40129,336],{"class":1436},[312,40131,2021],{"class":488},[312,40133,2323],{"class":324},[312,40135,1340],{"class":1579},[312,40137,336],{"class":1436},[312,40139,1433],{"class":488},[312,40141,39842],{"class":324},[312,40143,40144],{"class":314,"line":4396},[312,40145,39847],{"class":324},[312,40147,40148,40150,40152,40154,40156,40158,40160,40162,40164,40166,40168,40170,40172,40174,40176,40178,40180],{"class":314,"line":4404},[312,40149,39809],{"class":324},[312,40151,32652],{"class":1579},[312,40153,336],{"class":1436},[312,40155,36665],{"class":488},[312,40157,2323],{"class":324},[312,40159,32661],{"class":1579},[312,40161,336],{"class":1436},[312,40163,36665],{"class":488},[312,40165,2323],{"class":324},[312,40167,32670],{"class":1579},[312,40169,336],{"class":1436},[312,40171,2021],{"class":488},[312,40173,2323],{"class":324},[312,40175,1340],{"class":1579},[312,40177,336],{"class":1436},[312,40179,1433],{"class":488},[312,40181,39842],{"class":324},[312,40183,40184],{"class":314,"line":4409},[312,40185,39847],{"class":324},[312,40187,40188,40190,40192,40194,40196,40198,40200,40202,40204,40206,40208,40210,40212],{"class":314,"line":4415},[312,40189,39892],{"class":324},[312,40191,32670],{"class":1579},[312,40193,336],{"class":1436},[312,40195,2027],{"class":488},[312,40197,2323],{"class":324},[312,40199,32724],{"class":1579},[312,40201,336],{"class":1436},[312,40203,2027],{"class":488},[312,40205,2323],{"class":324},[312,40207,1340],{"class":1579},[312,40209,336],{"class":1436},[312,40211,858],{"class":488},[312,40213,1959],{"class":324},[312,40215,40216],{"class":314,"line":4421},[312,40217,39921],{"class":324},[312,40219,40220],{"class":314,"line":4426},[312,40221,40222],{"class":318},"        # 第四层\n",[312,40224,40225,40227,40230,40232],{"class":314,"line":9751},[312,40226,32641],{"class":488},[312,40228,40229],{"class":324},".block4",[312,40231,336],{"class":1436},[312,40233,39804],{"class":324},[312,40235,40236,40238,40240,40242,40244,40246,40248,40250,40253,40255,40257,40259,40261,40263,40265,40267,40269],{"class":314,"line":9775},[312,40237,39809],{"class":324},[312,40239,32652],{"class":1579},[312,40241,336],{"class":1436},[312,40243,36665],{"class":488},[312,40245,2323],{"class":324},[312,40247,32661],{"class":1579},[312,40249,336],{"class":1436},[312,40251,40252],{"class":488},"512",[312,40254,2323],{"class":324},[312,40256,32670],{"class":1579},[312,40258,336],{"class":1436},[312,40260,2021],{"class":488},[312,40262,2323],{"class":324},[312,40264,1340],{"class":1579},[312,40266,336],{"class":1436},[312,40268,1433],{"class":488},[312,40270,39842],{"class":324},[312,40272,40273],{"class":314,"line":9780},[312,40274,39847],{"class":324},[312,40276,40277,40279,40281,40283,40285,40287,40289,40291,40293,40295,40297,40299,40301,40303,40305,40307,40309],{"class":314,"line":9786},[312,40278,39809],{"class":324},[312,40280,32652],{"class":1579},[312,40282,336],{"class":1436},[312,40284,40252],{"class":488},[312,40286,2323],{"class":324},[312,40288,32661],{"class":1579},[312,40290,336],{"class":1436},[312,40292,40252],{"class":488},[312,40294,2323],{"class":324},[312,40296,32670],{"class":1579},[312,40298,336],{"class":1436},[312,40300,2021],{"class":488},[312,40302,2323],{"class":324},[312,40304,1340],{"class":1579},[312,40306,336],{"class":1436},[312,40308,1433],{"class":488},[312,40310,39842],{"class":324},[312,40312,40313],{"class":314,"line":9813},[312,40314,39847],{"class":324},[312,40316,40317,40319,40321,40323,40325,40327,40329,40331,40333,40335,40337,40339,40341,40343,40345,40347,40349],{"class":314,"line":9818},[312,40318,39809],{"class":324},[312,40320,32652],{"class":1579},[312,40322,336],{"class":1436},[312,40324,40252],{"class":488},[312,40326,2323],{"class":324},[312,40328,32661],{"class":1579},[312,40330,336],{"class":1436},[312,40332,40252],{"class":488},[312,40334,2323],{"class":324},[312,40336,32670],{"class":1579},[312,40338,336],{"class":1436},[312,40340,2021],{"class":488},[312,40342,2323],{"class":324},[312,40344,1340],{"class":1579},[312,40346,336],{"class":1436},[312,40348,1433],{"class":488},[312,40350,39842],{"class":324},[312,40352,40353],{"class":314,"line":9824},[312,40354,39847],{"class":324},[312,40356,40357,40359,40361,40363,40365,40367,40369,40371,40373,40375,40377,40379,40381],{"class":314,"line":9836},[312,40358,39892],{"class":324},[312,40360,32670],{"class":1579},[312,40362,336],{"class":1436},[312,40364,2027],{"class":488},[312,40366,2323],{"class":324},[312,40368,32724],{"class":1579},[312,40370,336],{"class":1436},[312,40372,2027],{"class":488},[312,40374,2323],{"class":324},[312,40376,1340],{"class":1579},[312,40378,336],{"class":1436},[312,40380,858],{"class":488},[312,40382,1959],{"class":324},[312,40384,40385],{"class":314,"line":9848},[312,40386,39921],{"class":324},[312,40388,40389],{"class":314,"line":9860},[312,40390,40391],{"class":318},"        # 第五层\n",[312,40393,40394,40396,40399,40401],{"class":314,"line":11519},[312,40395,32641],{"class":488},[312,40397,40398],{"class":324},".block5",[312,40400,336],{"class":1436},[312,40402,39804],{"class":324},[312,40404,40405,40407,40409,40411,40413,40415,40417,40419,40421,40423,40425,40427,40429,40431,40433,40435,40437],{"class":314,"line":11544},[312,40406,39809],{"class":324},[312,40408,32652],{"class":1579},[312,40410,336],{"class":1436},[312,40412,40252],{"class":488},[312,40414,2323],{"class":324},[312,40416,32661],{"class":1579},[312,40418,336],{"class":1436},[312,40420,40252],{"class":488},[312,40422,2323],{"class":324},[312,40424,32670],{"class":1579},[312,40426,336],{"class":1436},[312,40428,2021],{"class":488},[312,40430,2323],{"class":324},[312,40432,1340],{"class":1579},[312,40434,336],{"class":1436},[312,40436,1433],{"class":488},[312,40438,39842],{"class":324},[312,40440,40441],{"class":314,"line":11567},[312,40442,39847],{"class":324},[312,40444,40445,40447,40449,40451,40453,40455,40457,40459,40461,40463,40465,40467,40469,40471,40473,40475,40477],{"class":314,"line":11591},[312,40446,39809],{"class":324},[312,40448,32652],{"class":1579},[312,40450,336],{"class":1436},[312,40452,40252],{"class":488},[312,40454,2323],{"class":324},[312,40456,32661],{"class":1579},[312,40458,336],{"class":1436},[312,40460,40252],{"class":488},[312,40462,2323],{"class":324},[312,40464,32670],{"class":1579},[312,40466,336],{"class":1436},[312,40468,2021],{"class":488},[312,40470,2323],{"class":324},[312,40472,1340],{"class":1579},[312,40474,336],{"class":1436},[312,40476,1433],{"class":488},[312,40478,39842],{"class":324},[312,40480,40481],{"class":314,"line":11596},[312,40482,39847],{"class":324},[312,40484,40485,40487,40489,40491,40493,40495,40497,40499,40501,40503,40505,40507,40509,40511,40513,40515,40517],{"class":314,"line":11601},[312,40486,39809],{"class":324},[312,40488,32652],{"class":1579},[312,40490,336],{"class":1436},[312,40492,40252],{"class":488},[312,40494,2323],{"class":324},[312,40496,32661],{"class":1579},[312,40498,336],{"class":1436},[312,40500,40252],{"class":488},[312,40502,2323],{"class":324},[312,40504,32670],{"class":1579},[312,40506,336],{"class":1436},[312,40508,2021],{"class":488},[312,40510,2323],{"class":324},[312,40512,1340],{"class":1579},[312,40514,336],{"class":1436},[312,40516,1433],{"class":488},[312,40518,39842],{"class":324},[312,40520,40521],{"class":314,"line":11606},[312,40522,39847],{"class":324},[312,40524,40525,40527,40529,40531,40533,40535,40537,40539,40541,40543,40545,40547,40549],{"class":314,"line":11615},[312,40526,39892],{"class":324},[312,40528,32670],{"class":1579},[312,40530,336],{"class":1436},[312,40532,2027],{"class":488},[312,40534,2323],{"class":324},[312,40536,32724],{"class":1579},[312,40538,336],{"class":1436},[312,40540,2027],{"class":488},[312,40542,2323],{"class":324},[312,40544,1340],{"class":1579},[312,40546,336],{"class":1436},[312,40548,858],{"class":488},[312,40550,1959],{"class":324},[312,40552,40553],{"class":314,"line":11620},[312,40554,39921],{"class":324},[312,40556,40557],{"class":314,"line":11626},[312,40558,40559],{"class":318},"        # 全连接层\n",[312,40561,40562,40564,40567,40569],{"class":314,"line":11647},[312,40563,32641],{"class":488},[312,40565,40566],{"class":324},".block6",[312,40568,336],{"class":1436},[312,40570,39804],{"class":324},[312,40572,40573],{"class":314,"line":11653},[312,40574,40575],{"class":318},"            # 平展操作\n",[312,40577,40578],{"class":314,"line":11667},[312,40579,40580],{"class":318},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[312,40582,40583],{"class":314,"line":11673},[312,40584,40585],{"class":324},"            nn.Flatten(),\n",[312,40587,40588,40591,40593,40595,40597,40599,40601,40603,40605],{"class":314,"line":11700},[312,40589,40590],{"class":324},"            nn.Linear(",[312,40592,2314],{"class":488},[312,40594,2400],{"class":1436},[312,40596,2314],{"class":488},[312,40598,2400],{"class":1436},[312,40600,40252],{"class":488},[312,40602,2323],{"class":324},[312,40604,36665],{"class":488},[312,40606,39842],{"class":324},[312,40608,40609],{"class":314,"line":11709},[312,40610,39847],{"class":324},[312,40612,40613,40615,40617,40619,40621],{"class":314,"line":11715},[312,40614,40590],{"class":324},[312,40616,36665],{"class":488},[312,40618,2323],{"class":324},[312,40620,33865],{"class":488},[312,40622,39842],{"class":324},[312,40624,40625],{"class":314,"line":11723},[312,40626,39847],{"class":324},[312,40628,40629,40631,40633,40635,40637],{"class":314,"line":11728},[312,40630,40590],{"class":324},[312,40632,33865],{"class":488},[312,40634,2323],{"class":324},[312,40636,2391],{"class":488},[312,40638,1959],{"class":324},[312,40640,40641],{"class":314,"line":18404},[312,40642,39921],{"class":324},[312,40644,40645],{"class":314,"line":18410},[312,40646,4205],{"emptyLinePlaceholder":1881},[312,40648,40649],{"class":314,"line":18433},[312,40650,40651],{"class":318},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[312,40653,40654],{"class":314,"line":18439},[312,40655,40656],{"class":318},"        # 循环遍历模型\n",[312,40658,40659,40661,40664,40666,40669],{"class":314,"line":18462},[312,40660,5208],{"class":1436},[312,40662,40663],{"class":324}," m ",[312,40665,27839],{"class":1436},[312,40667,40668],{"class":488}," self",[312,40670,40671],{"class":324},".modules():\n",[312,40673,40674],{"class":314,"line":18476},[312,40675,40676],{"class":318},"            # print(m)\n",[312,40678,40679,40681,40684],{"class":314,"line":18496},[312,40680,6447],{"class":1436},[312,40682,40683],{"class":488}," isinstance",[312,40685,40686],{"class":324},"(m,nn.Conv2d):\n",[312,40688,40689],{"class":314,"line":18502},[312,40690,40691],{"class":318},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[312,40693,40694,40697,40700,40702,40705],{"class":314,"line":18513},[312,40695,40696],{"class":324},"                nn.init.kaiming_normal_(m.weight,",[312,40698,40699],{"class":1579},"nonlinearity",[312,40701,336],{"class":1436},[312,40703,40704],{"class":339},"'relu'",[312,40706,1959],{"class":324},[312,40708,40709],{"class":314,"line":18536},[312,40710,40711],{"class":318},"                # 判断b参数是否存在\n",[312,40713,40714,40717,40720,40723,40726,40729],{"class":314,"line":18558},[312,40715,40716],{"class":1436},"                if",[312,40718,40719],{"class":324}," m.bias ",[312,40721,40722],{"class":1436},"is",[312,40724,40725],{"class":1436}," not",[312,40727,40728],{"class":488}," None",[312,40730,5544],{"class":324},[312,40732,40733],{"class":314,"line":18563},[312,40734,40735],{"class":318},"                    # 如果参数不存在的化初始化b=0\n",[312,40737,40738,40741,40743],{"class":314,"line":18569},[312,40739,40740],{"class":324},"                    nn.init.constant_(m.bias,",[312,40742,858],{"class":488},[312,40744,1959],{"class":324},[312,40746,40747],{"class":314,"line":18583},[312,40748,40749],{"class":318},"            # 全连接层初始化\n",[312,40751,40752,40755,40757],{"class":314,"line":18596},[312,40753,40754],{"class":1436},"            elif",[312,40756,40683],{"class":488},[312,40758,40759],{"class":324},"(m,nn.Linear):\n",[312,40761,40762],{"class":314,"line":18601},[312,40763,40764],{"class":318},"                # 这个初始化方法是利用的是正太分布的方式\n",[312,40766,40767],{"class":314,"line":18615},[312,40768,40769],{"class":318},"                # 均值为0，方差为0.01\n",[312,40771,40772,40775,40777,40779,40782],{"class":314,"line":18620},[312,40773,40774],{"class":324},"                nn.init.normal_(m.weight,",[312,40776,858],{"class":488},[312,40778,2323],{"class":324},[312,40780,40781],{"class":488},"0.01",[312,40783,1959],{"class":324},[312,40785,40786],{"class":314,"line":18626},[312,40787,40788],{"class":318},"                # 初始化b参数\n",[312,40790,40791,40793,40795,40797,40799,40801],{"class":314,"line":18631},[312,40792,40716],{"class":1436},[312,40794,40719],{"class":324},[312,40796,40722],{"class":1436},[312,40798,40725],{"class":1436},[312,40800,40728],{"class":488},[312,40802,5544],{"class":324},[312,40804,40805,40807,40809],{"class":314,"line":18645},[312,40806,40740],{"class":324},[312,40808,858],{"class":488},[312,40810,1959],{"class":324},[312,40812,40813],{"class":314,"line":18650},[312,40814,4205],{"emptyLinePlaceholder":1881},[312,40816,40817],{"class":314,"line":18655},[312,40818,36960],{"class":318},[312,40820,40821,40823,40825],{"class":314,"line":18669},[312,40822,32597],{"class":1436},[312,40824,32888],{"class":332},[312,40826,32891],{"class":324},[312,40828,40829,40831,40833,40835],{"class":314,"line":18681},[312,40830,32896],{"class":324},[312,40832,336],{"class":1436},[312,40834,32619],{"class":488},[312,40836,40837],{"class":324},".block1(x)\n",[312,40839,40840,40842,40844,40846],{"class":314,"line":18686},[312,40841,32896],{"class":324},[312,40843,336],{"class":1436},[312,40845,32619],{"class":488},[312,40847,40848],{"class":324},".block2(x)\n",[312,40850,40851,40853,40855,40857],{"class":314,"line":18699},[312,40852,32896],{"class":324},[312,40854,336],{"class":1436},[312,40856,32619],{"class":488},[312,40858,40859],{"class":324},".block3(x)\n",[312,40861,40862,40864,40866,40868],{"class":314,"line":18704},[312,40863,32896],{"class":324},[312,40865,336],{"class":1436},[312,40867,32619],{"class":488},[312,40869,40870],{"class":324},".block4(x)\n",[312,40872,40873,40875,40877,40879],{"class":314,"line":18709},[312,40874,32896],{"class":324},[312,40876,336],{"class":1436},[312,40878,32619],{"class":488},[312,40880,40881],{"class":324},".block5(x)\n",[312,40883,40884,40886,40888,40890],{"class":314,"line":18714},[312,40885,32896],{"class":324},[312,40887,336],{"class":1436},[312,40889,32619],{"class":488},[312,40891,40892],{"class":324},".block6(x)\n",[312,40894,40895,40897],{"class":314,"line":18727},[312,40896,16553],{"class":1436},[312,40898,33004],{"class":324},[312,40900,40901],{"class":314,"line":18732},[312,40902,4205],{"emptyLinePlaceholder":1881},[312,40904,40905],{"class":314,"line":34428},[312,40906,40907],{"class":318},"# 验证模型\n",[312,40909,40910,40912,40914,40916,40919],{"class":314,"line":34434},[312,40911,3338],{"class":1436},[312,40913,33015],{"class":488},[312,40915,4754],{"class":1436},[312,40917,40918],{"class":339},"'__main__'",[312,40920,5544],{"class":324},[312,40922,40923,40925,40927,40929,40931,40933,40935,40937,40939],{"class":314,"line":34440},[312,40924,33032],{"class":324},[312,40926,336],{"class":1436},[312,40928,32247],{"class":324},[312,40930,33039],{"class":339},[312,40932,3510],{"class":1436},[312,40934,33044],{"class":324},[312,40936,3507],{"class":1436},[312,40938,32272],{"class":339},[312,40940,1959],{"class":324},[312,40942,40943,40945],{"class":314,"line":34446},[312,40944,33094],{"class":488},[312,40946,32281],{"class":324},[312,40948,40949,40951,40953],{"class":314,"line":34452},[312,40950,33084],{"class":324},[312,40952,336],{"class":1436},[312,40954,40955],{"class":324},"VGG16().to(device)\n",[312,40957,40958,40960,40962,40964,40966,40968,40970,40972],{"class":314,"line":34463},[312,40959,33094],{"class":488},[312,40961,33097],{"class":324},[312,40963,1433],{"class":488},[312,40965,2323],{"class":324},[312,40967,33296],{"class":488},[312,40969,2323],{"class":324},[312,40971,33296],{"class":488},[312,40973,33110],{"class":324},[140,40975,40976],{"start":171},[143,40977,40978],{},"训练代码",[24,40980,40981],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[24,40983,40984],{},"解决方式:",[24,40986,40987],{},"①权重初始化",[303,40989,40991],{"className":32174,"code":40990,"language":32176,"meta":308,"style":308},"# 权重初始化,保证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",[119,40992,40993,40998,41003,41015,41020,41028,41033,41046,41051,41065,41070,41079,41084,41093,41098,41103,41116,41121,41135],{"__ignoreMap":308},[312,40994,40995],{"class":314,"line":315},[312,40996,40997],{"class":318},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[312,40999,41000],{"class":314,"line":171},[312,41001,41002],{"class":318},"# 循环遍历模型\n",[312,41004,41005,41007,41009,41011,41013],{"class":314,"line":274},[312,41006,4830],{"class":1436},[312,41008,40663],{"class":324},[312,41010,27839],{"class":1436},[312,41012,40668],{"class":488},[312,41014,40671],{"class":324},[312,41016,41017],{"class":314,"line":298},[312,41018,41019],{"class":318},"    # print(m)\n",[312,41021,41022,41024,41026],{"class":314,"line":974},[312,41023,4906],{"class":1436},[312,41025,40683],{"class":488},[312,41027,40686],{"class":324},[312,41029,41030],{"class":314,"line":980},[312,41031,41032],{"class":318},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[312,41034,41035,41038,41040,41042,41044],{"class":314,"line":997},[312,41036,41037],{"class":324},"        nn.init.kaiming_normal_(m.weight,",[312,41039,40699],{"class":1579},[312,41041,336],{"class":1436},[312,41043,40704],{"class":339},[312,41045,1959],{"class":324},[312,41047,41048],{"class":314,"line":1003},[312,41049,41050],{"class":318},"        # 判断b参数是否存在\n",[312,41052,41053,41055,41057,41059,41061,41063],{"class":314,"line":1020},[312,41054,4302],{"class":1436},[312,41056,40719],{"class":324},[312,41058,40722],{"class":1436},[312,41060,40725],{"class":1436},[312,41062,40728],{"class":488},[312,41064,5544],{"class":324},[312,41066,41067],{"class":314,"line":1026},[312,41068,41069],{"class":318},"            # 如果参数不存在的化初始化b=0\n",[312,41071,41072,41075,41077],{"class":314,"line":3418},[312,41073,41074],{"class":324},"            nn.init.constant_(m.bias,",[312,41076,858],{"class":488},[312,41078,1959],{"class":324},[312,41080,41081],{"class":314,"line":3423},[312,41082,41083],{"class":318},"    # 全连接层初始化\n",[312,41085,41086,41089,41091],{"class":314,"line":3429},[312,41087,41088],{"class":1436},"    elif",[312,41090,40683],{"class":488},[312,41092,40759],{"class":324},[312,41094,41095],{"class":314,"line":3434},[312,41096,41097],{"class":318},"        # 这个初始化方法是利用的是正太分布的方式\n",[312,41099,41100],{"class":314,"line":3448},[312,41101,41102],{"class":318},"        # 均值为0，方差为0.01\n",[312,41104,41105,41108,41110,41112,41114],{"class":314,"line":3453},[312,41106,41107],{"class":324},"        nn.init.normal_(m.weight,",[312,41109,858],{"class":488},[312,41111,2323],{"class":324},[312,41113,40781],{"class":488},[312,41115,1959],{"class":324},[312,41117,41118],{"class":314,"line":3459},[312,41119,41120],{"class":318},"        # 初始化b参数\n",[312,41122,41123,41125,41127,41129,41131,41133],{"class":314,"line":3480},[312,41124,4302],{"class":1436},[312,41126,40719],{"class":324},[312,41128,40722],{"class":1436},[312,41130,40725],{"class":1436},[312,41132,40728],{"class":488},[312,41134,5544],{"class":324},[312,41136,41137,41139,41141],{"class":314,"line":3485},[312,41138,41074],{"class":324},[312,41140,858],{"class":488},[312,41142,1959],{"class":324},[24,41144,41145],{},"②尽可能地增加批次",[24,41147,41148],{},"训练完整代码：",[303,41150,41151],{"className":32174,"code":39694,"language":32176,"meta":308,"style":308},[119,41152,41153,41159,41169,41179,41189,41193,41209,41217,41235,41239,41243,41253,41289,41293,41329,41333,41361,41365,41369,41379,41415,41419,41455,41459,41487,41491,41495,41505,41541,41545,41581,41585,41621,41625,41653,41657,41661,41671,41707,41711,41747,41751,41787,41791,41819,41823,41827,41837,41873,41877,41913,41917,41953,41957,41985,41989,41993,42003,42007,42011,42015,42035,42039,42051,42055,42067,42071,42075,42079,42083,42095,42099,42107,42111,42123,42127,42141,42145,42153,42157,42165,42169,42173,42185,42189,42203,42211,42215,42219,42227,42237,42247,42257,42267,42277,42287,42293,42297,42301,42313,42333,42339,42347],{"__ignoreMap":308},[312,41154,41155,41157],{"class":314,"line":315},[312,41156,32188],{"class":1436},[312,41158,32191],{"class":324},[312,41160,41161,41163,41165,41167],{"class":314,"line":171},[312,41162,32533],{"class":1436},[312,41164,39709],{"class":324},[312,41166,32188],{"class":1436},[312,41168,39714],{"class":324},[312,41170,41171,41173,41175,41177],{"class":314,"line":274},[312,41172,32533],{"class":1436},[312,41174,32536],{"class":324},[312,41176,32188],{"class":1436},[312,41178,32541],{"class":324},[312,41180,41181,41183,41185,41187],{"class":314,"line":298},[312,41182,32533],{"class":1436},[312,41184,32553],{"class":324},[312,41186,32188],{"class":1436},[312,41188,32558],{"class":324},[312,41190,41191],{"class":314,"line":974},[312,41192,4205],{"emptyLinePlaceholder":1881},[312,41194,41195,41197,41199,41201,41203,41205,41207],{"class":314,"line":980},[312,41196,16495],{"class":1436},[312,41198,39745],{"class":332},[312,41200,1576],{"class":324},[312,41202,32574],{"class":332},[312,41204,2503],{"class":324},[312,41206,32579],{"class":332},[312,41208,32582],{"class":324},[312,41210,41211,41213,41215],{"class":314,"line":997},[312,41212,32597],{"class":1436},[312,41214,32600],{"class":488},[312,41216,32603],{"class":324},[312,41218,41219,41221,41223,41225,41227,41229,41231,41233],{"class":314,"line":1003},[312,41220,32613],{"class":488},[312,41222,1576],{"class":324},[312,41224,39772],{"class":488},[312,41226,733],{"class":324},[312,41228,32619],{"class":488},[312,41230,32622],{"class":324},[312,41232,32625],{"class":488},[312,41234,3781],{"class":324},[312,41236,41237],{"class":314,"line":1020},[312,41238,39787],{"class":318},[312,41240,41241],{"class":314,"line":1026},[312,41242,39792],{"class":318},[312,41244,41245,41247,41249,41251],{"class":314,"line":3418},[312,41246,32641],{"class":488},[312,41248,39799],{"class":324},[312,41250,336],{"class":1436},[312,41252,39804],{"class":324},[312,41254,41255,41257,41259,41261,41263,41265,41267,41269,41271,41273,41275,41277,41279,41281,41283,41285,41287],{"class":314,"line":3423},[312,41256,39809],{"class":324},[312,41258,32652],{"class":1579},[312,41260,336],{"class":1436},[312,41262,1433],{"class":488},[312,41264,2323],{"class":324},[312,41266,32661],{"class":1579},[312,41268,336],{"class":1436},[312,41270,2150],{"class":488},[312,41272,2323],{"class":324},[312,41274,32670],{"class":1579},[312,41276,336],{"class":1436},[312,41278,2021],{"class":488},[312,41280,2323],{"class":324},[312,41282,1340],{"class":1579},[312,41284,336],{"class":1436},[312,41286,1433],{"class":488},[312,41288,39842],{"class":324},[312,41290,41291],{"class":314,"line":3429},[312,41292,39847],{"class":324},[312,41294,41295,41297,41299,41301,41303,41305,41307,41309,41311,41313,41315,41317,41319,41321,41323,41325,41327],{"class":314,"line":3434},[312,41296,39809],{"class":324},[312,41298,32652],{"class":1579},[312,41300,336],{"class":1436},[312,41302,2150],{"class":488},[312,41304,2323],{"class":324},[312,41306,32661],{"class":1579},[312,41308,336],{"class":1436},[312,41310,2150],{"class":488},[312,41312,2323],{"class":324},[312,41314,32670],{"class":1579},[312,41316,336],{"class":1436},[312,41318,2021],{"class":488},[312,41320,2323],{"class":324},[312,41322,1340],{"class":1579},[312,41324,336],{"class":1436},[312,41326,1433],{"class":488},[312,41328,39842],{"class":324},[312,41330,41331],{"class":314,"line":3448},[312,41332,39847],{"class":324},[312,41334,41335,41337,41339,41341,41343,41345,41347,41349,41351,41353,41355,41357,41359],{"class":314,"line":3453},[312,41336,39892],{"class":324},[312,41338,32670],{"class":1579},[312,41340,336],{"class":1436},[312,41342,2027],{"class":488},[312,41344,2323],{"class":324},[312,41346,32724],{"class":1579},[312,41348,336],{"class":1436},[312,41350,2027],{"class":488},[312,41352,2323],{"class":324},[312,41354,1340],{"class":1579},[312,41356,336],{"class":1436},[312,41358,858],{"class":488},[312,41360,1959],{"class":324},[312,41362,41363],{"class":314,"line":3459},[312,41364,39921],{"class":324},[312,41366,41367],{"class":314,"line":3480},[312,41368,39926],{"class":318},[312,41370,41371,41373,41375,41377],{"class":314,"line":3485},[312,41372,32641],{"class":488},[312,41374,39933],{"class":324},[312,41376,336],{"class":1436},[312,41378,39804],{"class":324},[312,41380,41381,41383,41385,41387,41389,41391,41393,41395,41397,41399,41401,41403,41405,41407,41409,41411,41413],{"class":314,"line":3499},[312,41382,39809],{"class":324},[312,41384,32652],{"class":1579},[312,41386,336],{"class":1436},[312,41388,2150],{"class":488},[312,41390,2323],{"class":324},[312,41392,32661],{"class":1579},[312,41394,336],{"class":1436},[312,41396,33865],{"class":488},[312,41398,2323],{"class":324},[312,41400,32670],{"class":1579},[312,41402,336],{"class":1436},[312,41404,2021],{"class":488},[312,41406,2323],{"class":324},[312,41408,1340],{"class":1579},[312,41410,336],{"class":1436},[312,41412,1433],{"class":488},[312,41414,39842],{"class":324},[312,41416,41417],{"class":314,"line":3504},[312,41418,39847],{"class":324},[312,41420,41421,41423,41425,41427,41429,41431,41433,41435,41437,41439,41441,41443,41445,41447,41449,41451,41453],{"class":314,"line":3533},[312,41422,39809],{"class":324},[312,41424,32652],{"class":1579},[312,41426,336],{"class":1436},[312,41428,33865],{"class":488},[312,41430,2323],{"class":324},[312,41432,32661],{"class":1579},[312,41434,336],{"class":1436},[312,41436,33865],{"class":488},[312,41438,2323],{"class":324},[312,41440,32670],{"class":1579},[312,41442,336],{"class":1436},[312,41444,2021],{"class":488},[312,41446,2323],{"class":324},[312,41448,1340],{"class":1579},[312,41450,336],{"class":1436},[312,41452,1433],{"class":488},[312,41454,39842],{"class":324},[312,41456,41457],{"class":314,"line":3538},[312,41458,39847],{"class":324},[312,41460,41461,41463,41465,41467,41469,41471,41473,41475,41477,41479,41481,41483,41485],{"class":314,"line":3555},[312,41462,39892],{"class":324},[312,41464,32670],{"class":1579},[312,41466,336],{"class":1436},[312,41468,2027],{"class":488},[312,41470,2323],{"class":324},[312,41472,32724],{"class":1579},[312,41474,336],{"class":1436},[312,41476,2027],{"class":488},[312,41478,2323],{"class":324},[312,41480,1340],{"class":1579},[312,41482,336],{"class":1436},[312,41484,858],{"class":488},[312,41486,1959],{"class":324},[312,41488,41489],{"class":314,"line":3560},[312,41490,39921],{"class":324},[312,41492,41493],{"class":314,"line":3565},[312,41494,40054],{"class":318},[312,41496,41497,41499,41501,41503],{"class":314,"line":3570},[312,41498,32641],{"class":488},[312,41500,40061],{"class":324},[312,41502,336],{"class":1436},[312,41504,39804],{"class":324},[312,41506,41507,41509,41511,41513,41515,41517,41519,41521,41523,41525,41527,41529,41531,41533,41535,41537,41539],{"class":314,"line":3584},[312,41508,39809],{"class":324},[312,41510,32652],{"class":1579},[312,41512,336],{"class":1436},[312,41514,33865],{"class":488},[312,41516,2323],{"class":324},[312,41518,32661],{"class":1579},[312,41520,336],{"class":1436},[312,41522,36665],{"class":488},[312,41524,2323],{"class":324},[312,41526,32670],{"class":1579},[312,41528,336],{"class":1436},[312,41530,2021],{"class":488},[312,41532,2323],{"class":324},[312,41534,1340],{"class":1579},[312,41536,336],{"class":1436},[312,41538,1433],{"class":488},[312,41540,39842],{"class":324},[312,41542,41543],{"class":314,"line":3589},[312,41544,39847],{"class":324},[312,41546,41547,41549,41551,41553,41555,41557,41559,41561,41563,41565,41567,41569,41571,41573,41575,41577,41579],{"class":314,"line":4382},[312,41548,39809],{"class":324},[312,41550,32652],{"class":1579},[312,41552,336],{"class":1436},[312,41554,36665],{"class":488},[312,41556,2323],{"class":324},[312,41558,32661],{"class":1579},[312,41560,336],{"class":1436},[312,41562,36665],{"class":488},[312,41564,2323],{"class":324},[312,41566,32670],{"class":1579},[312,41568,336],{"class":1436},[312,41570,2021],{"class":488},[312,41572,2323],{"class":324},[312,41574,1340],{"class":1579},[312,41576,336],{"class":1436},[312,41578,1433],{"class":488},[312,41580,39842],{"class":324},[312,41582,41583],{"class":314,"line":4396},[312,41584,39847],{"class":324},[312,41586,41587,41589,41591,41593,41595,41597,41599,41601,41603,41605,41607,41609,41611,41613,41615,41617,41619],{"class":314,"line":4404},[312,41588,39809],{"class":324},[312,41590,32652],{"class":1579},[312,41592,336],{"class":1436},[312,41594,36665],{"class":488},[312,41596,2323],{"class":324},[312,41598,32661],{"class":1579},[312,41600,336],{"class":1436},[312,41602,36665],{"class":488},[312,41604,2323],{"class":324},[312,41606,32670],{"class":1579},[312,41608,336],{"class":1436},[312,41610,2021],{"class":488},[312,41612,2323],{"class":324},[312,41614,1340],{"class":1579},[312,41616,336],{"class":1436},[312,41618,1433],{"class":488},[312,41620,39842],{"class":324},[312,41622,41623],{"class":314,"line":4409},[312,41624,39847],{"class":324},[312,41626,41627,41629,41631,41633,41635,41637,41639,41641,41643,41645,41647,41649,41651],{"class":314,"line":4415},[312,41628,39892],{"class":324},[312,41630,32670],{"class":1579},[312,41632,336],{"class":1436},[312,41634,2027],{"class":488},[312,41636,2323],{"class":324},[312,41638,32724],{"class":1579},[312,41640,336],{"class":1436},[312,41642,2027],{"class":488},[312,41644,2323],{"class":324},[312,41646,1340],{"class":1579},[312,41648,336],{"class":1436},[312,41650,858],{"class":488},[312,41652,1959],{"class":324},[312,41654,41655],{"class":314,"line":4421},[312,41656,39921],{"class":324},[312,41658,41659],{"class":314,"line":4426},[312,41660,40222],{"class":318},[312,41662,41663,41665,41667,41669],{"class":314,"line":9751},[312,41664,32641],{"class":488},[312,41666,40229],{"class":324},[312,41668,336],{"class":1436},[312,41670,39804],{"class":324},[312,41672,41673,41675,41677,41679,41681,41683,41685,41687,41689,41691,41693,41695,41697,41699,41701,41703,41705],{"class":314,"line":9775},[312,41674,39809],{"class":324},[312,41676,32652],{"class":1579},[312,41678,336],{"class":1436},[312,41680,36665],{"class":488},[312,41682,2323],{"class":324},[312,41684,32661],{"class":1579},[312,41686,336],{"class":1436},[312,41688,40252],{"class":488},[312,41690,2323],{"class":324},[312,41692,32670],{"class":1579},[312,41694,336],{"class":1436},[312,41696,2021],{"class":488},[312,41698,2323],{"class":324},[312,41700,1340],{"class":1579},[312,41702,336],{"class":1436},[312,41704,1433],{"class":488},[312,41706,39842],{"class":324},[312,41708,41709],{"class":314,"line":9780},[312,41710,39847],{"class":324},[312,41712,41713,41715,41717,41719,41721,41723,41725,41727,41729,41731,41733,41735,41737,41739,41741,41743,41745],{"class":314,"line":9786},[312,41714,39809],{"class":324},[312,41716,32652],{"class":1579},[312,41718,336],{"class":1436},[312,41720,40252],{"class":488},[312,41722,2323],{"class":324},[312,41724,32661],{"class":1579},[312,41726,336],{"class":1436},[312,41728,40252],{"class":488},[312,41730,2323],{"class":324},[312,41732,32670],{"class":1579},[312,41734,336],{"class":1436},[312,41736,2021],{"class":488},[312,41738,2323],{"class":324},[312,41740,1340],{"class":1579},[312,41742,336],{"class":1436},[312,41744,1433],{"class":488},[312,41746,39842],{"class":324},[312,41748,41749],{"class":314,"line":9813},[312,41750,39847],{"class":324},[312,41752,41753,41755,41757,41759,41761,41763,41765,41767,41769,41771,41773,41775,41777,41779,41781,41783,41785],{"class":314,"line":9818},[312,41754,39809],{"class":324},[312,41756,32652],{"class":1579},[312,41758,336],{"class":1436},[312,41760,40252],{"class":488},[312,41762,2323],{"class":324},[312,41764,32661],{"class":1579},[312,41766,336],{"class":1436},[312,41768,40252],{"class":488},[312,41770,2323],{"class":324},[312,41772,32670],{"class":1579},[312,41774,336],{"class":1436},[312,41776,2021],{"class":488},[312,41778,2323],{"class":324},[312,41780,1340],{"class":1579},[312,41782,336],{"class":1436},[312,41784,1433],{"class":488},[312,41786,39842],{"class":324},[312,41788,41789],{"class":314,"line":9824},[312,41790,39847],{"class":324},[312,41792,41793,41795,41797,41799,41801,41803,41805,41807,41809,41811,41813,41815,41817],{"class":314,"line":9836},[312,41794,39892],{"class":324},[312,41796,32670],{"class":1579},[312,41798,336],{"class":1436},[312,41800,2027],{"class":488},[312,41802,2323],{"class":324},[312,41804,32724],{"class":1579},[312,41806,336],{"class":1436},[312,41808,2027],{"class":488},[312,41810,2323],{"class":324},[312,41812,1340],{"class":1579},[312,41814,336],{"class":1436},[312,41816,858],{"class":488},[312,41818,1959],{"class":324},[312,41820,41821],{"class":314,"line":9848},[312,41822,39921],{"class":324},[312,41824,41825],{"class":314,"line":9860},[312,41826,40391],{"class":318},[312,41828,41829,41831,41833,41835],{"class":314,"line":11519},[312,41830,32641],{"class":488},[312,41832,40398],{"class":324},[312,41834,336],{"class":1436},[312,41836,39804],{"class":324},[312,41838,41839,41841,41843,41845,41847,41849,41851,41853,41855,41857,41859,41861,41863,41865,41867,41869,41871],{"class":314,"line":11544},[312,41840,39809],{"class":324},[312,41842,32652],{"class":1579},[312,41844,336],{"class":1436},[312,41846,40252],{"class":488},[312,41848,2323],{"class":324},[312,41850,32661],{"class":1579},[312,41852,336],{"class":1436},[312,41854,40252],{"class":488},[312,41856,2323],{"class":324},[312,41858,32670],{"class":1579},[312,41860,336],{"class":1436},[312,41862,2021],{"class":488},[312,41864,2323],{"class":324},[312,41866,1340],{"class":1579},[312,41868,336],{"class":1436},[312,41870,1433],{"class":488},[312,41872,39842],{"class":324},[312,41874,41875],{"class":314,"line":11567},[312,41876,39847],{"class":324},[312,41878,41879,41881,41883,41885,41887,41889,41891,41893,41895,41897,41899,41901,41903,41905,41907,41909,41911],{"class":314,"line":11591},[312,41880,39809],{"class":324},[312,41882,32652],{"class":1579},[312,41884,336],{"class":1436},[312,41886,40252],{"class":488},[312,41888,2323],{"class":324},[312,41890,32661],{"class":1579},[312,41892,336],{"class":1436},[312,41894,40252],{"class":488},[312,41896,2323],{"class":324},[312,41898,32670],{"class":1579},[312,41900,336],{"class":1436},[312,41902,2021],{"class":488},[312,41904,2323],{"class":324},[312,41906,1340],{"class":1579},[312,41908,336],{"class":1436},[312,41910,1433],{"class":488},[312,41912,39842],{"class":324},[312,41914,41915],{"class":314,"line":11596},[312,41916,39847],{"class":324},[312,41918,41919,41921,41923,41925,41927,41929,41931,41933,41935,41937,41939,41941,41943,41945,41947,41949,41951],{"class":314,"line":11601},[312,41920,39809],{"class":324},[312,41922,32652],{"class":1579},[312,41924,336],{"class":1436},[312,41926,40252],{"class":488},[312,41928,2323],{"class":324},[312,41930,32661],{"class":1579},[312,41932,336],{"class":1436},[312,41934,40252],{"class":488},[312,41936,2323],{"class":324},[312,41938,32670],{"class":1579},[312,41940,336],{"class":1436},[312,41942,2021],{"class":488},[312,41944,2323],{"class":324},[312,41946,1340],{"class":1579},[312,41948,336],{"class":1436},[312,41950,1433],{"class":488},[312,41952,39842],{"class":324},[312,41954,41955],{"class":314,"line":11606},[312,41956,39847],{"class":324},[312,41958,41959,41961,41963,41965,41967,41969,41971,41973,41975,41977,41979,41981,41983],{"class":314,"line":11615},[312,41960,39892],{"class":324},[312,41962,32670],{"class":1579},[312,41964,336],{"class":1436},[312,41966,2027],{"class":488},[312,41968,2323],{"class":324},[312,41970,32724],{"class":1579},[312,41972,336],{"class":1436},[312,41974,2027],{"class":488},[312,41976,2323],{"class":324},[312,41978,1340],{"class":1579},[312,41980,336],{"class":1436},[312,41982,858],{"class":488},[312,41984,1959],{"class":324},[312,41986,41987],{"class":314,"line":11620},[312,41988,39921],{"class":324},[312,41990,41991],{"class":314,"line":11626},[312,41992,40559],{"class":318},[312,41994,41995,41997,41999,42001],{"class":314,"line":11647},[312,41996,32641],{"class":488},[312,41998,40566],{"class":324},[312,42000,336],{"class":1436},[312,42002,39804],{"class":324},[312,42004,42005],{"class":314,"line":11653},[312,42006,40575],{"class":318},[312,42008,42009],{"class":314,"line":11667},[312,42010,40580],{"class":318},[312,42012,42013],{"class":314,"line":11673},[312,42014,40585],{"class":324},[312,42016,42017,42019,42021,42023,42025,42027,42029,42031,42033],{"class":314,"line":11700},[312,42018,40590],{"class":324},[312,42020,2314],{"class":488},[312,42022,2400],{"class":1436},[312,42024,2314],{"class":488},[312,42026,2400],{"class":1436},[312,42028,40252],{"class":488},[312,42030,2323],{"class":324},[312,42032,36665],{"class":488},[312,42034,39842],{"class":324},[312,42036,42037],{"class":314,"line":11709},[312,42038,39847],{"class":324},[312,42040,42041,42043,42045,42047,42049],{"class":314,"line":11715},[312,42042,40590],{"class":324},[312,42044,36665],{"class":488},[312,42046,2323],{"class":324},[312,42048,33865],{"class":488},[312,42050,39842],{"class":324},[312,42052,42053],{"class":314,"line":11723},[312,42054,39847],{"class":324},[312,42056,42057,42059,42061,42063,42065],{"class":314,"line":11728},[312,42058,40590],{"class":324},[312,42060,33865],{"class":488},[312,42062,2323],{"class":324},[312,42064,2391],{"class":488},[312,42066,1959],{"class":324},[312,42068,42069],{"class":314,"line":18404},[312,42070,39921],{"class":324},[312,42072,42073],{"class":314,"line":18410},[312,42074,4205],{"emptyLinePlaceholder":1881},[312,42076,42077],{"class":314,"line":18433},[312,42078,40651],{"class":318},[312,42080,42081],{"class":314,"line":18439},[312,42082,40656],{"class":318},[312,42084,42085,42087,42089,42091,42093],{"class":314,"line":18462},[312,42086,5208],{"class":1436},[312,42088,40663],{"class":324},[312,42090,27839],{"class":1436},[312,42092,40668],{"class":488},[312,42094,40671],{"class":324},[312,42096,42097],{"class":314,"line":18476},[312,42098,40676],{"class":318},[312,42100,42101,42103,42105],{"class":314,"line":18496},[312,42102,6447],{"class":1436},[312,42104,40683],{"class":488},[312,42106,40686],{"class":324},[312,42108,42109],{"class":314,"line":18502},[312,42110,40691],{"class":318},[312,42112,42113,42115,42117,42119,42121],{"class":314,"line":18513},[312,42114,40696],{"class":324},[312,42116,40699],{"class":1579},[312,42118,336],{"class":1436},[312,42120,40704],{"class":339},[312,42122,1959],{"class":324},[312,42124,42125],{"class":314,"line":18536},[312,42126,40711],{"class":318},[312,42128,42129,42131,42133,42135,42137,42139],{"class":314,"line":18558},[312,42130,40716],{"class":1436},[312,42132,40719],{"class":324},[312,42134,40722],{"class":1436},[312,42136,40725],{"class":1436},[312,42138,40728],{"class":488},[312,42140,5544],{"class":324},[312,42142,42143],{"class":314,"line":18563},[312,42144,40735],{"class":318},[312,42146,42147,42149,42151],{"class":314,"line":18569},[312,42148,40740],{"class":324},[312,42150,858],{"class":488},[312,42152,1959],{"class":324},[312,42154,42155],{"class":314,"line":18583},[312,42156,40749],{"class":318},[312,42158,42159,42161,42163],{"class":314,"line":18596},[312,42160,40754],{"class":1436},[312,42162,40683],{"class":488},[312,42164,40759],{"class":324},[312,42166,42167],{"class":314,"line":18601},[312,42168,40764],{"class":318},[312,42170,42171],{"class":314,"line":18615},[312,42172,40769],{"class":318},[312,42174,42175,42177,42179,42181,42183],{"class":314,"line":18620},[312,42176,40774],{"class":324},[312,42178,858],{"class":488},[312,42180,2323],{"class":324},[312,42182,40781],{"class":488},[312,42184,1959],{"class":324},[312,42186,42187],{"class":314,"line":18626},[312,42188,40788],{"class":318},[312,42190,42191,42193,42195,42197,42199,42201],{"class":314,"line":18631},[312,42192,40716],{"class":1436},[312,42194,40719],{"class":324},[312,42196,40722],{"class":1436},[312,42198,40725],{"class":1436},[312,42200,40728],{"class":488},[312,42202,5544],{"class":324},[312,42204,42205,42207,42209],{"class":314,"line":18645},[312,42206,40740],{"class":324},[312,42208,858],{"class":488},[312,42210,1959],{"class":324},[312,42212,42213],{"class":314,"line":18650},[312,42214,4205],{"emptyLinePlaceholder":1881},[312,42216,42217],{"class":314,"line":18655},[312,42218,36960],{"class":318},[312,42220,42221,42223,42225],{"class":314,"line":18669},[312,42222,32597],{"class":1436},[312,42224,32888],{"class":332},[312,42226,32891],{"class":324},[312,42228,42229,42231,42233,42235],{"class":314,"line":18681},[312,42230,32896],{"class":324},[312,42232,336],{"class":1436},[312,42234,32619],{"class":488},[312,42236,40837],{"class":324},[312,42238,42239,42241,42243,42245],{"class":314,"line":18686},[312,42240,32896],{"class":324},[312,42242,336],{"class":1436},[312,42244,32619],{"class":488},[312,42246,40848],{"class":324},[312,42248,42249,42251,42253,42255],{"class":314,"line":18699},[312,42250,32896],{"class":324},[312,42252,336],{"class":1436},[312,42254,32619],{"class":488},[312,42256,40859],{"class":324},[312,42258,42259,42261,42263,42265],{"class":314,"line":18704},[312,42260,32896],{"class":324},[312,42262,336],{"class":1436},[312,42264,32619],{"class":488},[312,42266,40870],{"class":324},[312,42268,42269,42271,42273,42275],{"class":314,"line":18709},[312,42270,32896],{"class":324},[312,42272,336],{"class":1436},[312,42274,32619],{"class":488},[312,42276,40881],{"class":324},[312,42278,42279,42281,42283,42285],{"class":314,"line":18714},[312,42280,32896],{"class":324},[312,42282,336],{"class":1436},[312,42284,32619],{"class":488},[312,42286,40892],{"class":324},[312,42288,42289,42291],{"class":314,"line":18727},[312,42290,16553],{"class":1436},[312,42292,33004],{"class":324},[312,42294,42295],{"class":314,"line":18732},[312,42296,4205],{"emptyLinePlaceholder":1881},[312,42298,42299],{"class":314,"line":34428},[312,42300,40907],{"class":318},[312,42302,42303,42305,42307,42309,42311],{"class":314,"line":34434},[312,42304,3338],{"class":1436},[312,42306,33015],{"class":488},[312,42308,4754],{"class":1436},[312,42310,40918],{"class":339},[312,42312,5544],{"class":324},[312,42314,42315,42317,42319,42321,42323,42325,42327,42329,42331],{"class":314,"line":34440},[312,42316,33032],{"class":324},[312,42318,336],{"class":1436},[312,42320,32247],{"class":324},[312,42322,33039],{"class":339},[312,42324,3510],{"class":1436},[312,42326,33044],{"class":324},[312,42328,3507],{"class":1436},[312,42330,32272],{"class":339},[312,42332,1959],{"class":324},[312,42334,42335,42337],{"class":314,"line":34446},[312,42336,33094],{"class":488},[312,42338,32281],{"class":324},[312,42340,42341,42343,42345],{"class":314,"line":34452},[312,42342,33084],{"class":324},[312,42344,336],{"class":1436},[312,42346,40955],{"class":324},[312,42348,42349,42351,42353,42355,42357,42359,42361,42363],{"class":314,"line":34463},[312,42350,33094],{"class":488},[312,42352,33097],{"class":324},[312,42354,1433],{"class":488},[312,42356,2323],{"class":324},[312,42358,33296],{"class":488},[312,42360,2323],{"class":324},[312,42362,33296],{"class":488},[312,42364,33110],{"class":324},[140,42366,42367],{"start":274},[143,42368,42369],{},"测试代码",[303,42371,42373],{"className":32174,"code":42372,"language":32176,"meta":308,"style":308},"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",[119,42374,42375,42381,42391,42401,42405,42415,42426,42430,42434,42438,42446,42462,42472,42488,42498,42512,42516,42526,42536,42546,42552,42556,42560,42568,42572,42588,42596,42600,42604,42612,42620,42624,42628,42632,42636,42642,42646,42656,42664,42672,42676,42680,42684,42692,42696,42712,42716,42720,42724,42736,42740,42752,42756,42760,42772,42776,42786,42790,42794,42806,42810,42819,42823,42827,42835,42839,42847,42851,42855,42859,42863,42867,42883,42891,42895,42899,42947,42953,42957,42967,42975,42983,42987,42991,42995,42999,43007,43011,43027,43031,43039,43047],{"__ignoreMap":308},[312,42376,42377,42379],{"class":314,"line":315},[312,42378,32188],{"class":1436},[312,42380,32191],{"class":324},[312,42382,42383,42385,42387,42389],{"class":314,"line":171},[312,42384,32188],{"class":1436},[312,42386,33210],{"class":324},[312,42388,33178],{"class":1436},[312,42390,33215],{"class":324},[312,42392,42393,42395,42397,42399],{"class":314,"line":274},[312,42394,32533],{"class":1436},[312,42396,33193],{"class":324},[312,42398,32188],{"class":1436},[312,42400,33198],{"class":324},[312,42402,42403],{"class":314,"line":298},[312,42404,35717],{"class":318},[312,42406,42407,42409,42411,42413],{"class":314,"line":974},[312,42408,32533],{"class":1436},[312,42410,33163],{"class":324},[312,42412,32188],{"class":1436},[312,42414,33168],{"class":324},[312,42416,42417,42419,42421,42423],{"class":314,"line":980},[312,42418,32533],{"class":1436},[312,42420,33709],{"class":324},[312,42422,32188],{"class":1436},[312,42424,42425],{"class":488}," VGG16\n",[312,42427,42428],{"class":314,"line":997},[312,42429,4205],{"emptyLinePlaceholder":1881},[312,42431,42432],{"class":314,"line":1003},[312,42433,4205],{"emptyLinePlaceholder":1881},[312,42435,42436],{"class":314,"line":1020},[312,42437,35746],{"class":318},[312,42439,42440,42442,42444],{"class":314,"line":1026},[312,42441,33742],{"class":1436},[312,42443,35753],{"class":332},[312,42445,33748],{"class":324},[312,42447,42448,42450,42452,42454,42456,42458,42460],{"class":314,"line":3418},[312,42449,35760],{"class":324},[312,42451,336],{"class":1436},[312,42453,33250],{"class":324},[312,42455,33253],{"class":1579},[312,42457,336],{"class":1436},[312,42459,33258],{"class":339},[312,42461,33261],{"class":324},[312,42463,42464,42466,42468,42470],{"class":314,"line":3423},[312,42465,35777],{"class":1579},[312,42467,336],{"class":1436},[312,42469,35782],{"class":488},[312,42471,33261],{"class":324},[312,42473,42474,42476,42478,42480,42482,42484,42486],{"class":314,"line":3429},[312,42475,35789],{"class":1579},[312,42477,336],{"class":1436},[312,42479,33288],{"class":324},[312,42481,33291],{"class":1579},[312,42483,336],{"class":1436},[312,42485,33296],{"class":488},[312,42487,33299],{"class":324},[312,42489,42490,42492,42494,42496],{"class":314,"line":3434},[312,42491,35806],{"class":1579},[312,42493,336],{"class":1436},[312,42495,33271],{"class":488},[312,42497,1959],{"class":324},[312,42499,42500,42502,42504,42506,42508,42510],{"class":314,"line":3448},[312,42501,35817],{"class":324},[312,42503,336],{"class":1436},[312,42505,33329],{"class":324},[312,42507,33332],{"class":1579},[312,42509,336],{"class":1436},[312,42511,35828],{"class":324},[312,42513,42514],{"class":314,"line":3453},[312,42515,35833],{"class":318},[312,42517,42518,42520,42522,42524],{"class":314,"line":3459},[312,42519,35838],{"class":1579},[312,42521,336],{"class":1436},[312,42523,1433],{"class":488},[312,42525,33261],{"class":324},[312,42527,42528,42530,42532,42534],{"class":314,"line":3480},[312,42529,35849],{"class":1579},[312,42531,336],{"class":1436},[312,42533,33271],{"class":488},[312,42535,33261],{"class":324},[312,42537,42538,42540,42542,42544],{"class":314,"line":3485},[312,42539,35860],{"class":1579},[312,42541,336],{"class":1436},[312,42543,858],{"class":488},[312,42545,1959],{"class":324},[312,42547,42548,42550],{"class":314,"line":3499},[312,42549,5895],{"class":1436},[312,42551,35873],{"class":324},[312,42553,42554],{"class":314,"line":3504},[312,42555,4205],{"emptyLinePlaceholder":1881},[312,42557,42558],{"class":314,"line":3533},[312,42559,35882],{"class":318},[312,42561,42562,42564,42566],{"class":314,"line":3538},[312,42563,33742],{"class":1436},[312,42565,35889],{"class":332},[312,42567,35892],{"class":324},[312,42569,42570],{"class":314,"line":3555},[312,42571,35897],{"class":318},[312,42573,42574,42576,42578,42580,42582,42584,42586],{"class":314,"line":3560},[312,42575,33032],{"class":324},[312,42577,336],{"class":1436},[312,42579,33039],{"class":339},[312,42581,3510],{"class":1436},[312,42583,33044],{"class":324},[312,42585,3507],{"class":1436},[312,42587,35914],{"class":339},[312,42589,42590,42592,42594],{"class":314,"line":3565},[312,42591,33084],{"class":324},[312,42593,336],{"class":1436},[312,42595,34084],{"class":324},[312,42597,42598],{"class":314,"line":3570},[312,42599,4205],{"emptyLinePlaceholder":1881},[312,42601,42602],{"class":314,"line":3584},[312,42603,35931],{"class":318},[312,42605,42606,42608,42610],{"class":314,"line":3589},[312,42607,35936],{"class":324},[312,42609,336],{"class":1436},[312,42611,34137],{"class":488},[312,42613,42614,42616,42618],{"class":314,"line":4382},[312,42615,35945],{"class":324},[312,42617,336],{"class":1436},[312,42619,4890],{"class":488},[312,42621,42622],{"class":314,"line":4396},[312,42623,4205],{"emptyLinePlaceholder":1881},[312,42625,42626],{"class":314,"line":4404},[312,42627,35958],{"class":318},[312,42629,42630],{"class":314,"line":4409},[312,42631,35963],{"class":318},[312,42633,42634],{"class":314,"line":4415},[312,42635,35968],{"class":318},[312,42637,42638,42640],{"class":314,"line":4421},[312,42639,35973],{"class":1436},[312,42641,34679],{"class":324},[312,42643,42644],{"class":314,"line":4426},[312,42645,35980],{"class":318},[312,42647,42648,42650,42652,42654],{"class":314,"line":9751},[312,42649,5208],{"class":1436},[312,42651,35987],{"class":324},[312,42653,27839],{"class":1436},[312,42655,35992],{"class":324},[312,42657,42658,42660,42662],{"class":314,"line":9775},[312,42659,35997],{"class":324},[312,42661,336],{"class":1436},[312,42663,36002],{"class":324},[312,42665,42666,42668,42670],{"class":314,"line":9780},[312,42667,36007],{"class":324},[312,42669,336],{"class":1436},[312,42671,36012],{"class":324},[312,42673,42674],{"class":314,"line":9786},[312,42675,36017],{"class":318},[312,42677,42678],{"class":314,"line":9813},[312,42679,34670],{"class":324},[312,42681,42682],{"class":314,"line":9818},[312,42683,36026],{"class":318},[312,42685,42686,42688,42690],{"class":314,"line":9824},[312,42687,34455],{"class":324},[312,42689,336],{"class":1436},[312,42691,36035],{"class":324},[312,42693,42694],{"class":314,"line":9836},[312,42695,36040],{"class":318},[312,42697,42698,42700,42702,42704,42706,42708,42710],{"class":314,"line":9848},[312,42699,34472],{"class":324},[312,42701,336],{"class":1436},[312,42703,34477],{"class":324},[312,42705,34480],{"class":1579},[312,42707,336],{"class":1436},[312,42709,1433],{"class":488},[312,42711,1959],{"class":324},[312,42713,42714],{"class":314,"line":9860},[312,42715,36061],{"class":318},[312,42717,42718],{"class":314,"line":11519},[312,42719,36066],{"class":318},[312,42721,42722],{"class":314,"line":11544},[312,42723,36071],{"class":318},[312,42725,42726,42728,42730,42732,42734],{"class":314,"line":11567},[312,42727,36076],{"class":324},[312,42729,11280],{"class":1436},[312,42731,34582],{"class":324},[312,42733,4754],{"class":1436},[312,42735,36085],{"class":324},[312,42737,42738],{"class":314,"line":11591},[312,42739,36090],{"class":318},[312,42741,42742,42744,42746,42748,42750],{"class":314,"line":11596},[312,42743,36095],{"class":324},[312,42745,11280],{"class":1436},[312,42747,36100],{"class":324},[312,42749,858],{"class":488},[312,42751,1959],{"class":324},[312,42753,42754],{"class":314,"line":11601},[312,42755,4205],{"emptyLinePlaceholder":1881},[312,42757,42758],{"class":314,"line":11606},[312,42759,36113],{"class":318},[312,42761,42762,42764,42766,42768,42770],{"class":314,"line":11615},[312,42763,36118],{"class":324},[312,42765,336],{"class":1436},[312,42767,36123],{"class":324},[312,42769,2529],{"class":1436},[312,42771,36128],{"class":324},[312,42773,42774],{"class":314,"line":11620},[312,42775,36133],{"class":318},[312,42777,42778,42780,42782,42784],{"class":314,"line":11626},[312,42779,34246],{"class":488},[312,42781,1576],{"class":324},[312,42783,36142],{"class":339},[312,42785,36145],{"class":324},[312,42787,42788],{"class":314,"line":11647},[312,42789,4205],{"emptyLinePlaceholder":1881},[312,42791,42792],{"class":314,"line":11653},[312,42793,36154],{"class":318},[312,42795,42796,42798,42800,42802,42804],{"class":314,"line":11667},[312,42797,3338],{"class":1436},[312,42799,33015],{"class":488},[312,42801,4754],{"class":1436},[312,42803,33020],{"class":339},[312,42805,5544],{"class":324},[312,42807,42808],{"class":314,"line":11673},[312,42809,36171],{"class":318},[312,42811,42812,42814,42816],{"class":314,"line":11700},[312,42813,33084],{"class":324},[312,42815,336],{"class":1436},[312,42817,42818],{"class":324},"VGG16()\n",[312,42820,42821],{"class":314,"line":11709},[312,42822,36184],{"class":318},[312,42824,42825],{"class":314,"line":11715},[312,42826,36189],{"class":318},[312,42828,42829,42831,42833],{"class":314,"line":11723},[312,42830,36194],{"class":324},[312,42832,36197],{"class":339},[312,42834,32293],{"class":324},[312,42836,42837],{"class":314,"line":11728},[312,42838,36204],{"class":318},[312,42840,42841,42843,42845],{"class":314,"line":18404},[312,42842,35817],{"class":324},[312,42844,336],{"class":1436},[312,42846,36213],{"class":324},[312,42848,42849],{"class":314,"line":18410},[312,42850,36218],{"class":318},[312,42852,42853],{"class":314,"line":18433},[312,42854,36223],{"class":324},[312,42856,42857],{"class":314,"line":18439},[312,42858,4205],{"emptyLinePlaceholder":1881},[312,42860,42861],{"class":314,"line":18462},[312,42862,36232],{"class":318},[312,42864,42865],{"class":314,"line":18476},[312,42866,36237],{"class":318},[312,42868,42869,42871,42873,42875,42877,42879,42881],{"class":314,"line":18496},[312,42870,33032],{"class":324},[312,42872,336],{"class":1436},[312,42874,33039],{"class":339},[312,42876,3510],{"class":1436},[312,42878,33044],{"class":324},[312,42880,3507],{"class":1436},[312,42882,35914],{"class":339},[312,42884,42885,42887,42889],{"class":314,"line":18502},[312,42886,33084],{"class":324},[312,42888,336],{"class":1436},[312,42890,34084],{"class":324},[312,42892,42893],{"class":314,"line":18513},[312,42894,36266],{"class":318},[312,42896,42897],{"class":314,"line":18536},[312,42898,36271],{"class":318},[312,42900,42901,42903,42905,42907,42909,42911,42913,42915,42917,42919,42921,42923,42925,42927,42929,42931,42933,42935,42937,42939,42941,42943,42945],{"class":314,"line":18558},[312,42902,36276],{"class":324},[312,42904,336],{"class":1436},[312,42906,2834],{"class":324},[312,42908,36283],{"class":339},[312,42910,2323],{"class":324},[312,42912,36288],{"class":339},[312,42914,2323],{"class":324},[312,42916,36293],{"class":339},[312,42918,2323],{"class":324},[312,42920,36298],{"class":339},[312,42922,2323],{"class":324},[312,42924,36303],{"class":339},[312,42926,2323],{"class":324},[312,42928,36308],{"class":339},[312,42930,2323],{"class":324},[312,42932,36313],{"class":339},[312,42934,2323],{"class":324},[312,42936,36318],{"class":339},[312,42938,2323],{"class":324},[312,42940,36323],{"class":339},[312,42942,2323],{"class":324},[312,42944,36328],{"class":339},[312,42946,35041],{"class":324},[312,42948,42949,42951],{"class":314,"line":18563},[312,42950,35973],{"class":1436},[312,42952,34679],{"class":324},[312,42954,42955],{"class":314,"line":18569},[312,42956,36341],{"class":318},[312,42958,42959,42961,42963,42965],{"class":314,"line":18583},[312,42960,5208],{"class":1436},[312,42962,36348],{"class":324},[312,42964,27839],{"class":1436},[312,42966,35992],{"class":324},[312,42968,42969,42971,42973],{"class":314,"line":18596},[312,42970,34405],{"class":324},[312,42972,336],{"class":1436},[312,42974,34410],{"class":324},[312,42976,42977,42979,42981],{"class":314,"line":18601},[312,42978,34420],{"class":324},[312,42980,336],{"class":1436},[312,42982,34425],{"class":324},[312,42984,42985],{"class":314,"line":18615},[312,42986,4205],{"emptyLinePlaceholder":1881},[312,42988,42989],{"class":314,"line":18620},[312,42990,36377],{"class":318},[312,42992,42993],{"class":314,"line":18626},[312,42994,34670],{"class":324},[312,42996,42997],{"class":314,"line":18631},[312,42998,36386],{"class":318},[312,43000,43001,43003,43005],{"class":314,"line":18645},[312,43002,34455],{"class":324},[312,43004,336],{"class":1436},[312,43006,34460],{"class":324},[312,43008,43009],{"class":314,"line":18650},[312,43010,36399],{"class":318},[312,43012,43013,43015,43017,43019,43021,43023,43025],{"class":314,"line":18655},[312,43014,34472],{"class":324},[312,43016,336],{"class":1436},[312,43018,34477],{"class":324},[312,43020,34480],{"class":1579},[312,43022,336],{"class":1436},[312,43024,1433],{"class":488},[312,43026,1959],{"class":324},[312,43028,43029],{"class":314,"line":18669},[312,43030,36420],{"class":318},[312,43032,43033,43035,43037],{"class":314,"line":18681},[312,43034,36425],{"class":324},[312,43036,336],{"class":1436},[312,43038,36430],{"class":324},[312,43040,43041,43043,43045],{"class":314,"line":18686},[312,43042,36435],{"class":324},[312,43044,336],{"class":1436},[312,43046,36440],{"class":324},[312,43048,43049,43051,43053,43055,43057,43059,43061,43063],{"class":314,"line":18699},[312,43050,36445],{"class":488},[312,43052,1576],{"class":324},[312,43054,36450],{"class":339},[312,43056,36453],{"class":324},[312,43058,36456],{"class":339},[312,43060,2323],{"class":324},[312,43062,36461],{"class":339},[312,43064,36464],{"class":324},[69,43066,43068],{"id":43067},"_23googlenet","2.3.GoogLeNet",[23796,43070,43072],{"id":43071},"_231原理","2.3.1.原理",[140,43074,43075],{},[143,43076,43077],{},"网络结构",[24,43079,43080],{},[19,43081],{"alt":308,"src":43082},"\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",[24,43084,43085],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[24,43087,43088],{},[19,43089],{"alt":308,"src":43090},"\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",[24,43092,43093],{},[19,43094],{"alt":308,"src":43095},"\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",[24,43097,43098],{},[19,43099],{"alt":308,"src":43100},"\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",[140,43102,43103],{"start":171},[143,43104,43105],{},"1x1卷积的优点",[24,43107,43108],{},[19,43109],{"alt":308,"src":43110},"\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",[140,43112,43113],{"start":274},[143,43114,43115],{},"全局平均池化层优点",[24,43117,43118],{},[19,43119],{"alt":308,"src":43120},"\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",[24,43122,43123],{},[19,43124],{"alt":308,"src":43125},"\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",[140,43127,43128],{"start":298},[143,43129,43130],{},"参数详细描述",[24,43132,43133],{},[19,43134],{"alt":308,"src":43135},"\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",[24,43137,43138],{},[19,43139],{"alt":308,"src":43140},"\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",[24,43142,43143],{},[19,43144],{"alt":308,"src":43145},"\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",[24,43147,43148],{},[19,43149],{"alt":308,"src":43150},"\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",[24,43152,43153],{},[19,43154],{"alt":308,"src":43155},"\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",[24,43157,43158],{},[19,43159],{"alt":308,"src":43160},"\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",[24,43162,43163],{},[19,43164],{"alt":308,"src":43165},"\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",[24,43167,43168],{},[19,43169],{"alt":308,"src":43170},"\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",[24,43172,43173],{},[19,43174],{"alt":308,"src":43175},"\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",[24,43177,43178],{},[19,43179],{"alt":308,"src":43180},"\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",[24,43182,43183],{},[19,43184],{"alt":308,"src":43185},"\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",[24,43187,43188],{},[19,43189],{"alt":308,"src":43190},"\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",[24,43192,43193],{},[19,43194],{"alt":308,"src":43195},"\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",[24,43197,43198],{},[19,43199],{"alt":308,"src":43200},"\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",[24,43202,43203],{},[19,43204],{"alt":308,"src":43205},"\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",[24,43207,43208],{},[19,43209],{"alt":308,"src":43210},"\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",[24,43212,43213],{},[19,43214],{"alt":308,"src":43215},"\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",[24,43217,43218],{},[19,43219],{"alt":308,"src":43220},"\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",[24,43222,43223],{},[19,43224],{"alt":308,"src":43225},"\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",[24,43227,43228],{},[19,43229],{"alt":308,"src":43230},"\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",[24,43232,43233],{},[19,43234],{"alt":308,"src":43235},"\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",[23796,43237,43239],{"id":43238},"_232代码实现","2.3.2.代码实现",[140,43241,43242],{},[143,43243,32507],{},[24,43245,43246],{},"根据原理一步一步搭建即可",[303,43248,43250],{"className":32174,"code":43249,"language":32176,"meta":308,"style":308},"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",[119,43251,43252,43258,43268,43278,43282,43299,43308,43323,43333,43338,43371,43376,43413,43460,43465,43501,43548,43553,43558,43593,43625,43629,43637,43653,43677,43702,43723,43728,43743,43747,43751,43756,43773,43778,43787,43802,43813,43857,43861,43889,43893,43904,43932,43936,43973,43977,44005,44009,44020,44056,44088,44116,44120,44131,44165,44197,44229,44262,44296,44324,44328,44339,44372,44404,44418,44422,44435,44439,44444,44456,44464,44486,44491,44496,44501,44506,44511,44516,44530,44538,44547,44560,44575,44584,44588,44596,44607,44618,44629,44640,44651,44657,44661,44666,44678,44698,44707],{"__ignoreMap":308},[312,43253,43254,43256],{"class":314,"line":315},[312,43255,32188],{"class":1436},[312,43257,32191],{"class":324},[312,43259,43260,43262,43264,43266],{"class":314,"line":171},[312,43261,32533],{"class":1436},[312,43263,32536],{"class":324},[312,43265,32188],{"class":1436},[312,43267,32541],{"class":324},[312,43269,43270,43272,43274,43276],{"class":314,"line":274},[312,43271,32533],{"class":1436},[312,43273,32553],{"class":324},[312,43275,32188],{"class":1436},[312,43277,32558],{"class":324},[312,43279,43280],{"class":314,"line":298},[312,43281,4205],{"emptyLinePlaceholder":1881},[312,43283,43284,43286,43289,43291,43293,43295,43297],{"class":314,"line":974},[312,43285,16495],{"class":1436},[312,43287,43288],{"class":332}," Inception",[312,43290,1576],{"class":324},[312,43292,32574],{"class":332},[312,43294,2503],{"class":324},[312,43296,32579],{"class":332},[312,43298,32582],{"class":324},[312,43300,43301,43303,43305],{"class":314,"line":980},[312,43302,32597],{"class":1436},[312,43304,32600],{"class":488},[312,43306,43307],{"class":324},"(self,in_channels,c1,c2,c3,c4):\n",[312,43309,43310,43312,43315,43317,43319,43321],{"class":314,"line":997},[312,43311,32613],{"class":488},[312,43313,43314],{"class":324},"(Inception,",[312,43316,32619],{"class":488},[312,43318,32622],{"class":324},[312,43320,32625],{"class":488},[312,43322,3781],{"class":324},[312,43324,43325,43327,43329,43331],{"class":314,"line":1003},[312,43326,32641],{"class":488},[312,43328,36566],{"class":324},[312,43330,336],{"class":1436},[312,43332,36571],{"class":324},[312,43334,43335],{"class":314,"line":1020},[312,43336,43337],{"class":318},"        # 路线1：定义1*1卷积\n",[312,43339,43340,43342,43345,43347,43349,43351,43353,43356,43358,43360,43363,43365,43367,43369],{"class":314,"line":1026},[312,43341,32641],{"class":488},[312,43343,43344],{"class":324},".p1_1",[312,43346,336],{"class":1436},[312,43348,32649],{"class":324},[312,43350,32652],{"class":1579},[312,43352,336],{"class":1436},[312,43354,43355],{"class":324},"in_channels,",[312,43357,32661],{"class":1579},[312,43359,336],{"class":1436},[312,43361,43362],{"class":324},"c1,",[312,43364,32670],{"class":1579},[312,43366,336],{"class":1436},[312,43368,1433],{"class":488},[312,43370,1959],{"class":324},[312,43372,43373],{"class":314,"line":3418},[312,43374,43375],{"class":318},"        # 路线2：定义1*1卷积和3*3\n",[312,43377,43378,43380,43383,43385,43387,43389,43391,43393,43395,43397,43400,43402,43405,43407,43409,43411],{"class":314,"line":3423},[312,43379,32641],{"class":488},[312,43381,43382],{"class":324},".p2_1",[312,43384,336],{"class":1436},[312,43386,32649],{"class":324},[312,43388,32652],{"class":1579},[312,43390,336],{"class":1436},[312,43392,43355],{"class":324},[312,43394,32661],{"class":1579},[312,43396,336],{"class":1436},[312,43398,43399],{"class":324},"c2[",[312,43401,858],{"class":488},[312,43403,43404],{"class":324},"],",[312,43406,32670],{"class":1579},[312,43408,336],{"class":1436},[312,43410,1433],{"class":488},[312,43412,1959],{"class":324},[312,43414,43415,43417,43420,43422,43424,43426,43428,43430,43432,43434,43436,43438,43440,43442,43444,43446,43448,43450,43452,43454,43456,43458],{"class":314,"line":3429},[312,43416,32641],{"class":488},[312,43418,43419],{"class":324},".p2_2",[312,43421,336],{"class":1436},[312,43423,32649],{"class":324},[312,43425,32652],{"class":1579},[312,43427,336],{"class":1436},[312,43429,43399],{"class":324},[312,43431,858],{"class":488},[312,43433,43404],{"class":324},[312,43435,32661],{"class":1579},[312,43437,336],{"class":1436},[312,43439,43399],{"class":324},[312,43441,1433],{"class":488},[312,43443,43404],{"class":324},[312,43445,32670],{"class":1579},[312,43447,336],{"class":1436},[312,43449,2021],{"class":488},[312,43451,2323],{"class":324},[312,43453,1340],{"class":1579},[312,43455,336],{"class":1436},[312,43457,1433],{"class":488},[312,43459,1959],{"class":324},[312,43461,43462],{"class":314,"line":3434},[312,43463,43464],{"class":318},"        # 路线3：定义1*1卷积和5*5\n",[312,43466,43467,43469,43472,43474,43476,43478,43480,43482,43484,43486,43489,43491,43493,43495,43497,43499],{"class":314,"line":3448},[312,43468,32641],{"class":488},[312,43470,43471],{"class":324},".p3_1",[312,43473,336],{"class":1436},[312,43475,32649],{"class":324},[312,43477,32652],{"class":1579},[312,43479,336],{"class":1436},[312,43481,43355],{"class":324},[312,43483,32661],{"class":1579},[312,43485,336],{"class":1436},[312,43487,43488],{"class":324},"c3[",[312,43490,858],{"class":488},[312,43492,43404],{"class":324},[312,43494,32670],{"class":1579},[312,43496,336],{"class":1436},[312,43498,1433],{"class":488},[312,43500,1959],{"class":324},[312,43502,43503,43505,43508,43510,43512,43514,43516,43518,43520,43522,43524,43526,43528,43530,43532,43534,43536,43538,43540,43542,43544,43546],{"class":314,"line":3453},[312,43504,32641],{"class":488},[312,43506,43507],{"class":324},".p3_2",[312,43509,336],{"class":1436},[312,43511,32649],{"class":324},[312,43513,32652],{"class":1579},[312,43515,336],{"class":1436},[312,43517,43488],{"class":324},[312,43519,858],{"class":488},[312,43521,43404],{"class":324},[312,43523,32661],{"class":1579},[312,43525,336],{"class":1436},[312,43527,43488],{"class":324},[312,43529,1433],{"class":488},[312,43531,43404],{"class":324},[312,43533,32670],{"class":1579},[312,43535,336],{"class":1436},[312,43537,2264],{"class":488},[312,43539,2323],{"class":324},[312,43541,1340],{"class":1579},[312,43543,336],{"class":1436},[312,43545,2027],{"class":488},[312,43547,1959],{"class":324},[312,43549,43550],{"class":314,"line":3459},[312,43551,43552],{"class":318},"        # 路线4：定义3*3最大池化和1*1卷积\n",[312,43554,43555],{"class":314,"line":3480},[312,43556,43557],{"class":318},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[312,43559,43560,43562,43565,43567,43569,43571,43573,43575,43577,43579,43581,43583,43585,43587,43589,43591],{"class":314,"line":3485},[312,43561,32641],{"class":488},[312,43563,43564],{"class":324},".p4_1",[312,43566,336],{"class":1436},[312,43568,36624],{"class":324},[312,43570,32670],{"class":1579},[312,43572,336],{"class":1436},[312,43574,2021],{"class":488},[312,43576,2323],{"class":324},[312,43578,32724],{"class":1579},[312,43580,336],{"class":1436},[312,43582,1433],{"class":488},[312,43584,2323],{"class":324},[312,43586,1340],{"class":1579},[312,43588,336],{"class":1436},[312,43590,1433],{"class":488},[312,43592,1959],{"class":324},[312,43594,43595,43597,43600,43602,43604,43606,43608,43610,43612,43614,43617,43619,43621,43623],{"class":314,"line":3499},[312,43596,32641],{"class":488},[312,43598,43599],{"class":324},".p4_2",[312,43601,336],{"class":1436},[312,43603,32649],{"class":324},[312,43605,32652],{"class":1579},[312,43607,336],{"class":1436},[312,43609,43355],{"class":324},[312,43611,32661],{"class":1579},[312,43613,336],{"class":1436},[312,43615,43616],{"class":324},"c4,",[312,43618,32670],{"class":1579},[312,43620,336],{"class":1436},[312,43622,1433],{"class":488},[312,43624,1959],{"class":324},[312,43626,43627],{"class":314,"line":3504},[312,43628,4205],{"emptyLinePlaceholder":1881},[312,43630,43631,43633,43635],{"class":314,"line":3533},[312,43632,32597],{"class":1436},[312,43634,32888],{"class":332},[312,43636,32891],{"class":324},[312,43638,43639,43642,43644,43646,43648,43650],{"class":314,"line":3538},[312,43640,43641],{"class":324},"        p1",[312,43643,336],{"class":1436},[312,43645,32619],{"class":488},[312,43647,36979],{"class":324},[312,43649,32619],{"class":488},[312,43651,43652],{"class":324},".p1_1(x))\n",[312,43654,43655,43657,43659,43661,43663,43665,43668,43670,43672,43674],{"class":314,"line":3555},[312,43656,8889],{"class":324},[312,43658,336],{"class":1436},[312,43660,32619],{"class":488},[312,43662,36979],{"class":324},[312,43664,32619],{"class":488},[312,43666,43667],{"class":324},".p2_2(",[312,43669,32619],{"class":488},[312,43671,36979],{"class":324},[312,43673,32619],{"class":488},[312,43675,43676],{"class":324},".p2_1(x))))\n",[312,43678,43679,43682,43684,43686,43688,43690,43693,43695,43697,43699],{"class":314,"line":3560},[312,43680,43681],{"class":324},"        p3",[312,43683,336],{"class":1436},[312,43685,32619],{"class":488},[312,43687,36979],{"class":324},[312,43689,32619],{"class":488},[312,43691,43692],{"class":324},".p3_2(",[312,43694,32619],{"class":488},[312,43696,36979],{"class":324},[312,43698,32619],{"class":488},[312,43700,43701],{"class":324},".p3_1(x))))\n",[312,43703,43704,43707,43709,43711,43713,43715,43718,43720],{"class":314,"line":3565},[312,43705,43706],{"class":324},"        p4",[312,43708,336],{"class":1436},[312,43710,32619],{"class":488},[312,43712,36979],{"class":324},[312,43714,32619],{"class":488},[312,43716,43717],{"class":324},".p4_2(",[312,43719,32619],{"class":488},[312,43721,43722],{"class":324},".p4_1(x)))\n",[312,43724,43725],{"class":314,"line":3570},[312,43726,43727],{"class":318},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[312,43729,43730,43732,43735,43737,43739,43741],{"class":314,"line":3584},[312,43731,16553],{"class":1436},[312,43733,43734],{"class":324}," torch.cat((p1,p2,p3,p4),",[312,43736,34480],{"class":1579},[312,43738,336],{"class":1436},[312,43740,1433],{"class":488},[312,43742,1959],{"class":324},[312,43744,43745],{"class":314,"line":3589},[312,43746,4205],{"emptyLinePlaceholder":1881},[312,43748,43749],{"class":314,"line":4382},[312,43750,4205],{"emptyLinePlaceholder":1881},[312,43752,43753],{"class":314,"line":4396},[312,43754,43755],{"class":318},"# 搭建GoogLeNet网络\n",[312,43757,43758,43760,43763,43765,43767,43769,43771],{"class":314,"line":4404},[312,43759,16495],{"class":1436},[312,43761,43762],{"class":332}," GoogLeNet",[312,43764,1576],{"class":324},[312,43766,32574],{"class":332},[312,43768,2503],{"class":324},[312,43770,32579],{"class":332},[312,43772,32582],{"class":324},[312,43774,43775],{"class":314,"line":4409},[312,43776,43777],{"class":318},"    # 必须把Inception导入到里边\n",[312,43779,43780,43782,43784],{"class":314,"line":4415},[312,43781,32597],{"class":1436},[312,43783,32600],{"class":488},[312,43785,43786],{"class":324},"(self,Inception):\n",[312,43788,43789,43791,43794,43796,43798,43800],{"class":314,"line":4421},[312,43790,32613],{"class":488},[312,43792,43793],{"class":324},"(GoogLeNet,",[312,43795,32619],{"class":488},[312,43797,32622],{"class":324},[312,43799,32625],{"class":488},[312,43801,3781],{"class":324},[312,43803,43804,43806,43809,43811],{"class":314,"line":4426},[312,43805,32641],{"class":488},[312,43807,43808],{"class":324},".b1",[312,43810,336],{"class":1436},[312,43812,39804],{"class":324},[312,43814,43815,43817,43819,43821,43823,43825,43827,43829,43831,43833,43835,43837,43839,43841,43843,43845,43847,43849,43851,43853,43855],{"class":314,"line":9751},[312,43816,39809],{"class":324},[312,43818,32652],{"class":1579},[312,43820,336],{"class":1436},[312,43822,1433],{"class":488},[312,43824,2323],{"class":324},[312,43826,32661],{"class":1579},[312,43828,336],{"class":1436},[312,43830,2150],{"class":488},[312,43832,2323],{"class":324},[312,43834,32670],{"class":1579},[312,43836,336],{"class":1436},[312,43838,2314],{"class":488},[312,43840,2323],{"class":324},[312,43842,32724],{"class":1579},[312,43844,336],{"class":1436},[312,43846,2027],{"class":488},[312,43848,2323],{"class":324},[312,43850,1340],{"class":1579},[312,43852,336],{"class":1436},[312,43854,2021],{"class":488},[312,43856,39842],{"class":324},[312,43858,43859],{"class":314,"line":9775},[312,43860,39847],{"class":324},[312,43862,43863,43865,43867,43869,43871,43873,43875,43877,43879,43881,43883,43885,43887],{"class":314,"line":9780},[312,43864,39892],{"class":324},[312,43866,32670],{"class":1579},[312,43868,336],{"class":1436},[312,43870,2021],{"class":488},[312,43872,2323],{"class":324},[312,43874,32724],{"class":1579},[312,43876,336],{"class":1436},[312,43878,2027],{"class":488},[312,43880,2323],{"class":324},[312,43882,1340],{"class":1579},[312,43884,336],{"class":1436},[312,43886,1433],{"class":488},[312,43888,1959],{"class":324},[312,43890,43891],{"class":314,"line":9786},[312,43892,39921],{"class":324},[312,43894,43895,43897,43900,43902],{"class":314,"line":9813},[312,43896,32641],{"class":488},[312,43898,43899],{"class":324},".b2",[312,43901,336],{"class":1436},[312,43903,39804],{"class":324},[312,43905,43906,43908,43910,43912,43914,43916,43918,43920,43922,43924,43926,43928,43930],{"class":314,"line":9818},[312,43907,39809],{"class":324},[312,43909,32652],{"class":1579},[312,43911,336],{"class":1436},[312,43913,2150],{"class":488},[312,43915,2323],{"class":324},[312,43917,32661],{"class":1579},[312,43919,336],{"class":1436},[312,43921,2150],{"class":488},[312,43923,2323],{"class":324},[312,43925,32670],{"class":1579},[312,43927,336],{"class":1436},[312,43929,1433],{"class":488},[312,43931,39842],{"class":324},[312,43933,43934],{"class":314,"line":9824},[312,43935,39847],{"class":324},[312,43937,43938,43940,43942,43944,43946,43948,43950,43952,43955,43957,43959,43961,43963,43965,43967,43969,43971],{"class":314,"line":9836},[312,43939,39809],{"class":324},[312,43941,32652],{"class":1579},[312,43943,336],{"class":1436},[312,43945,2150],{"class":488},[312,43947,2323],{"class":324},[312,43949,32661],{"class":1579},[312,43951,336],{"class":1436},[312,43953,43954],{"class":488},"192",[312,43956,2323],{"class":324},[312,43958,32670],{"class":1579},[312,43960,336],{"class":1436},[312,43962,2021],{"class":488},[312,43964,2323],{"class":324},[312,43966,1340],{"class":1579},[312,43968,336],{"class":1436},[312,43970,1433],{"class":488},[312,43972,39842],{"class":324},[312,43974,43975],{"class":314,"line":9848},[312,43976,39847],{"class":324},[312,43978,43979,43981,43983,43985,43987,43989,43991,43993,43995,43997,43999,44001,44003],{"class":314,"line":9860},[312,43980,39892],{"class":324},[312,43982,32670],{"class":1579},[312,43984,336],{"class":1436},[312,43986,2021],{"class":488},[312,43988,2323],{"class":324},[312,43990,32724],{"class":1579},[312,43992,336],{"class":1436},[312,43994,2027],{"class":488},[312,43996,2323],{"class":324},[312,43998,1340],{"class":1579},[312,44000,336],{"class":1436},[312,44002,1433],{"class":488},[312,44004,1959],{"class":324},[312,44006,44007],{"class":314,"line":11519},[312,44008,39921],{"class":324},[312,44010,44011,44013,44016,44018],{"class":314,"line":11544},[312,44012,32641],{"class":488},[312,44014,44015],{"class":324},".b3",[312,44017,336],{"class":1436},[312,44019,39804],{"class":324},[312,44021,44022,44025,44027,44029,44031,44034,44036,44038,44040,44043,44045,44047,44049,44052,44054],{"class":314,"line":11567},[312,44023,44024],{"class":324},"            Inception(",[312,44026,43954],{"class":488},[312,44028,2323],{"class":324},[312,44030,2150],{"class":488},[312,44032,44033],{"class":324},",(",[312,44035,2156],{"class":488},[312,44037,2323],{"class":324},[312,44039,33865],{"class":488},[312,44041,44042],{"class":324},"),(",[312,44044,2546],{"class":488},[312,44046,2323],{"class":324},[312,44048,2144],{"class":488},[312,44050,44051],{"class":324},"),",[312,44053,2144],{"class":488},[312,44055,39842],{"class":324},[312,44057,44058,44060,44062,44064,44066,44068,44070,44072,44074,44076,44078,44080,44082,44084,44086],{"class":314,"line":11591},[312,44059,44024],{"class":324},[312,44061,36665],{"class":488},[312,44063,2323],{"class":324},[312,44065,33865],{"class":488},[312,44067,44033],{"class":324},[312,44069,33865],{"class":488},[312,44071,2323],{"class":324},[312,44073,43954],{"class":488},[312,44075,44042],{"class":324},[312,44077,2144],{"class":488},[312,44079,2323],{"class":324},[312,44081,2156],{"class":488},[312,44083,44051],{"class":324},[312,44085,2150],{"class":488},[312,44087,39842],{"class":324},[312,44089,44090,44092,44094,44096,44098,44100,44102,44104,44106,44108,44110,44112,44114],{"class":314,"line":11596},[312,44091,39892],{"class":324},[312,44093,32670],{"class":1579},[312,44095,336],{"class":1436},[312,44097,2021],{"class":488},[312,44099,2323],{"class":324},[312,44101,32724],{"class":1579},[312,44103,336],{"class":1436},[312,44105,2027],{"class":488},[312,44107,2323],{"class":324},[312,44109,1340],{"class":1579},[312,44111,336],{"class":1436},[312,44113,1433],{"class":488},[312,44115,1959],{"class":324},[312,44117,44118],{"class":314,"line":11601},[312,44119,39921],{"class":324},[312,44121,44122,44124,44127,44129],{"class":314,"line":11606},[312,44123,32641],{"class":488},[312,44125,44126],{"class":324},".b4",[312,44128,336],{"class":1436},[312,44130,39804],{"class":324},[312,44132,44133,44135,44138,44140,44142,44144,44146,44148,44151,44153,44155,44157,44159,44161,44163],{"class":314,"line":11615},[312,44134,44024],{"class":324},[312,44136,44137],{"class":488},"480",[312,44139,2323],{"class":324},[312,44141,43954],{"class":488},[312,44143,44033],{"class":324},[312,44145,2156],{"class":488},[312,44147,2323],{"class":324},[312,44149,44150],{"class":488},"208",[312,44152,44042],{"class":324},[312,44154,2546],{"class":488},[312,44156,2323],{"class":324},[312,44158,2552],{"class":488},[312,44160,44051],{"class":324},[312,44162,2150],{"class":488},[312,44164,39842],{"class":324},[312,44166,44167,44169,44171,44173,44175,44177,44179,44181,44183,44185,44187,44189,44191,44193,44195],{"class":314,"line":11620},[312,44168,44024],{"class":324},[312,44170,40252],{"class":488},[312,44172,2323],{"class":324},[312,44174,22847],{"class":488},[312,44176,44033],{"class":324},[312,44178,2563],{"class":488},[312,44180,2323],{"class":324},[312,44182,33296],{"class":488},[312,44184,44042],{"class":324},[312,44186,2744],{"class":488},[312,44188,2323],{"class":324},[312,44190,2150],{"class":488},[312,44192,44051],{"class":324},[312,44194,2150],{"class":488},[312,44196,39842],{"class":324},[312,44198,44199,44201,44203,44205,44207,44209,44211,44213,44215,44217,44219,44221,44223,44225,44227],{"class":314,"line":11626},[312,44200,44024],{"class":324},[312,44202,40252],{"class":488},[312,44204,2323],{"class":324},[312,44206,33865],{"class":488},[312,44208,44033],{"class":324},[312,44210,33865],{"class":488},[312,44212,2323],{"class":324},[312,44214,36665],{"class":488},[312,44216,44042],{"class":324},[312,44218,2744],{"class":488},[312,44220,2323],{"class":324},[312,44222,2150],{"class":488},[312,44224,44051],{"class":324},[312,44226,2150],{"class":488},[312,44228,39842],{"class":324},[312,44230,44231,44233,44235,44237,44239,44241,44243,44245,44248,44250,44252,44254,44256,44258,44260],{"class":314,"line":11647},[312,44232,44024],{"class":324},[312,44234,40252],{"class":488},[312,44236,2323],{"class":324},[312,44238,2563],{"class":488},[312,44240,44033],{"class":324},[312,44242,33865],{"class":488},[312,44244,2323],{"class":324},[312,44246,44247],{"class":488},"288",[312,44249,44042],{"class":324},[312,44251,2144],{"class":488},[312,44253,2323],{"class":324},[312,44255,2150],{"class":488},[312,44257,44051],{"class":324},[312,44259,2150],{"class":488},[312,44261,39842],{"class":324},[312,44263,44264,44266,44269,44271,44273,44275,44277,44279,44282,44284,44286,44288,44290,44292,44294],{"class":314,"line":11653},[312,44265,44024],{"class":324},[312,44267,44268],{"class":488},"528",[312,44270,2323],{"class":324},[312,44272,36665],{"class":488},[312,44274,44033],{"class":324},[312,44276,22847],{"class":488},[312,44278,2323],{"class":324},[312,44280,44281],{"class":488},"320",[312,44283,44042],{"class":324},[312,44285,2144],{"class":488},[312,44287,2323],{"class":324},[312,44289,33865],{"class":488},[312,44291,44051],{"class":324},[312,44293,33865],{"class":488},[312,44295,39842],{"class":324},[312,44297,44298,44300,44302,44304,44306,44308,44310,44312,44314,44316,44318,44320,44322],{"class":314,"line":11667},[312,44299,39892],{"class":324},[312,44301,32670],{"class":1579},[312,44303,336],{"class":1436},[312,44305,2021],{"class":488},[312,44307,2323],{"class":324},[312,44309,32724],{"class":1579},[312,44311,336],{"class":1436},[312,44313,2027],{"class":488},[312,44315,2323],{"class":324},[312,44317,1340],{"class":1579},[312,44319,336],{"class":1436},[312,44321,1433],{"class":488},[312,44323,1959],{"class":324},[312,44325,44326],{"class":314,"line":11673},[312,44327,39921],{"class":324},[312,44329,44330,44332,44335,44337],{"class":314,"line":11700},[312,44331,32641],{"class":488},[312,44333,44334],{"class":324},".b5",[312,44336,336],{"class":1436},[312,44338,39804],{"class":324},[312,44340,44341,44343,44346,44348,44350,44352,44354,44356,44358,44360,44362,44364,44366,44368,44370],{"class":314,"line":11709},[312,44342,44024],{"class":324},[312,44344,44345],{"class":488},"832",[312,44347,2323],{"class":324},[312,44349,36665],{"class":488},[312,44351,44033],{"class":324},[312,44353,22847],{"class":488},[312,44355,2323],{"class":324},[312,44357,44281],{"class":488},[312,44359,44042],{"class":324},[312,44361,2144],{"class":488},[312,44363,2323],{"class":324},[312,44365,33865],{"class":488},[312,44367,44051],{"class":324},[312,44369,33865],{"class":488},[312,44371,39842],{"class":324},[312,44373,44374,44376,44378,44380,44382,44384,44386,44388,44390,44392,44394,44396,44398,44400,44402],{"class":314,"line":11715},[312,44375,44024],{"class":324},[312,44377,44345],{"class":488},[312,44379,2323],{"class":324},[312,44381,36735],{"class":488},[312,44383,44033],{"class":324},[312,44385,43954],{"class":488},[312,44387,2323],{"class":324},[312,44389,36735],{"class":488},[312,44391,44042],{"class":324},[312,44393,2552],{"class":488},[312,44395,2323],{"class":324},[312,44397,33865],{"class":488},[312,44399,44051],{"class":324},[312,44401,33865],{"class":488},[312,44403,39842],{"class":324},[312,44405,44406,44409,44411,44413,44415],{"class":314,"line":11723},[312,44407,44408],{"class":324},"            nn.AdaptiveAvgPool2d((",[312,44410,1433],{"class":488},[312,44412,2323],{"class":324},[312,44414,1433],{"class":488},[312,44416,44417],{"class":324},")),\n",[312,44419,44420],{"class":314,"line":11728},[312,44421,40585],{"class":324},[312,44423,44424,44426,44429,44431,44433],{"class":314,"line":18404},[312,44425,40590],{"class":324},[312,44427,44428],{"class":488},"1024",[312,44430,2323],{"class":324},[312,44432,2391],{"class":488},[312,44434,1959],{"class":324},[312,44436,44437],{"class":314,"line":18410},[312,44438,39921],{"class":324},[312,44440,44441],{"class":314,"line":18433},[312,44442,44443],{"class":318},"        # 对模型参数初始化\n",[312,44445,44446,44448,44450,44452,44454],{"class":314,"line":18439},[312,44447,5208],{"class":1436},[312,44449,40663],{"class":324},[312,44451,27839],{"class":1436},[312,44453,40668],{"class":488},[312,44455,40671],{"class":324},[312,44457,44458,44460,44462],{"class":314,"line":18462},[312,44459,6447],{"class":1436},[312,44461,40683],{"class":488},[312,44463,40686],{"class":324},[312,44465,44466,44468,44471,44473,44476,44478,44480,44482,44484],{"class":314,"line":18476},[312,44467,40696],{"class":324},[312,44469,44470],{"class":1579},"mode",[312,44472,336],{"class":1436},[312,44474,44475],{"class":339},"'fan_out'",[312,44477,2323],{"class":324},[312,44479,40699],{"class":1579},[312,44481,336],{"class":1436},[312,44483,40704],{"class":339},[312,44485,1959],{"class":324},[312,44487,44488],{"class":314,"line":18496},[312,44489,44490],{"class":318},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[312,44492,44493],{"class":314,"line":18502},[312,44494,44495],{"class":318},"                # ② mode = 'fan_out'决定使用的fan值：\n",[312,44497,44498],{"class":314,"line":18513},[312,44499,44500],{"class":318},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[312,44502,44503],{"class":314,"line":18536},[312,44504,44505],{"class":318},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[312,44507,44508],{"class":314,"line":18558},[312,44509,44510],{"class":318},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[312,44512,44513],{"class":314,"line":18563},[312,44514,44515],{"class":318},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[312,44517,44518,44520,44522,44524,44526,44528],{"class":314,"line":18569},[312,44519,40716],{"class":1436},[312,44521,40719],{"class":324},[312,44523,40722],{"class":1436},[312,44525,40725],{"class":1436},[312,44527,40728],{"class":488},[312,44529,5544],{"class":324},[312,44531,44532,44534,44536],{"class":314,"line":18583},[312,44533,40740],{"class":324},[312,44535,858],{"class":488},[312,44537,1959],{"class":324},[312,44539,44540,44543,44545],{"class":314,"line":18596},[312,44541,44542],{"class":1436},"                elif",[312,44544,40683],{"class":488},[312,44546,40759],{"class":324},[312,44548,44549,44552,44554,44556,44558],{"class":314,"line":18601},[312,44550,44551],{"class":324},"                    nn.init.normal_(m.weight,",[312,44553,858],{"class":488},[312,44555,2323],{"class":324},[312,44557,40781],{"class":488},[312,44559,1959],{"class":324},[312,44561,44562,44565,44567,44569,44571,44573],{"class":314,"line":18615},[312,44563,44564],{"class":1436},"                    if",[312,44566,40719],{"class":324},[312,44568,40722],{"class":1436},[312,44570,40725],{"class":1436},[312,44572,40728],{"class":488},[312,44574,5544],{"class":324},[312,44576,44577,44580,44582],{"class":314,"line":18620},[312,44578,44579],{"class":324},"                        nn.init.constant_(m.bias,",[312,44581,858],{"class":488},[312,44583,1959],{"class":324},[312,44585,44586],{"class":314,"line":18626},[312,44587,36960],{"class":318},[312,44589,44590,44592,44594],{"class":314,"line":18631},[312,44591,32597],{"class":1436},[312,44593,32888],{"class":332},[312,44595,32891],{"class":324},[312,44597,44598,44600,44602,44604],{"class":314,"line":18645},[312,44599,32896],{"class":324},[312,44601,336],{"class":1436},[312,44603,32619],{"class":488},[312,44605,44606],{"class":324},".b1(x)\n",[312,44608,44609,44611,44613,44615],{"class":314,"line":18650},[312,44610,32896],{"class":324},[312,44612,336],{"class":1436},[312,44614,32619],{"class":488},[312,44616,44617],{"class":324},".b2(x)\n",[312,44619,44620,44622,44624,44626],{"class":314,"line":18655},[312,44621,32896],{"class":324},[312,44623,336],{"class":1436},[312,44625,32619],{"class":488},[312,44627,44628],{"class":324},".b3(x)\n",[312,44630,44631,44633,44635,44637],{"class":314,"line":18669},[312,44632,32896],{"class":324},[312,44634,336],{"class":1436},[312,44636,32619],{"class":488},[312,44638,44639],{"class":324},".b4(x)\n",[312,44641,44642,44644,44646,44648],{"class":314,"line":18681},[312,44643,32896],{"class":324},[312,44645,336],{"class":1436},[312,44647,32619],{"class":488},[312,44649,44650],{"class":324},".b5(x)\n",[312,44652,44653,44655],{"class":314,"line":18686},[312,44654,16553],{"class":1436},[312,44656,33004],{"class":324},[312,44658,44659],{"class":314,"line":18699},[312,44660,4205],{"emptyLinePlaceholder":1881},[312,44662,44663],{"class":314,"line":18704},[312,44664,44665],{"class":318},"# 模型展示\n",[312,44667,44668,44670,44672,44674,44676],{"class":314,"line":18709},[312,44669,3338],{"class":1436},[312,44671,33015],{"class":488},[312,44673,4754],{"class":1436},[312,44675,33020],{"class":339},[312,44677,5544],{"class":324},[312,44679,44680,44682,44684,44686,44688,44690,44692,44694,44696],{"class":314,"line":18714},[312,44681,33032],{"class":324},[312,44683,336],{"class":1436},[312,44685,32247],{"class":324},[312,44687,33039],{"class":339},[312,44689,3510],{"class":1436},[312,44691,33044],{"class":324},[312,44693,3507],{"class":1436},[312,44695,32272],{"class":339},[312,44697,1959],{"class":324},[312,44699,44700,44702,44704],{"class":314,"line":18727},[312,44701,33084],{"class":324},[312,44703,336],{"class":1436},[312,44705,44706],{"class":324},"GoogLeNet(Inception).to(device)\n",[312,44708,44709,44711,44713,44715,44717,44719,44721,44723],{"class":314,"line":18732},[312,44710,33094],{"class":488},[312,44712,33097],{"class":324},[312,44714,1433],{"class":488},[312,44716,2323],{"class":324},[312,44718,33296],{"class":488},[312,44720,2323],{"class":324},[312,44722,33296],{"class":488},[312,44724,33110],{"class":324},[140,44726,44727],{"start":171},[143,44728,40978],{},[303,44730,44732],{"className":32174,"code":44731,"language":32176,"meta":308,"style":308},"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",[119,44733,44734,44740,44746,44756,44762,44772,44782,44792,44802,44812,44816,44827,44837,44841,44845,44849,44857,44869,44879,44895,44905,44937,44951,44961,44971,44975,44985,44999,45009,45019,45029,45035,45039,45043,45047,45051,45055,45063,45083,45087,45091,45095,45099,45103,45119,45123,45127,45135,45139,45143,45151,45155,45159,45163,45171,45175,45179,45183,45187,45195,45199,45207,45211,45219,45223,45231,45235,45243,45247,45251,45259,45263,45267,45271,45283,45307,45321,45325,45329,45333,45341,45345,45353,45357,45365,45369,45377,45381,45389,45393,45401,45405,45417,45421,45429,45433,45441,45445,45449,45453,45457,45465,45469,45485,45489,45497,45501,45505,45509,45513,45517,45521,45525,45541,45545,45557,45561,45573,45577,45589,45593,45601,45605,45613,45617,45621,45625,45631,45635,45643,45647,45663,45667,45675,45679,45695,45707,45711,45723,45727,45731,45739,45743,45747,45755,45759,45767,45771,45779,45783,45787,45829,45871,45875,45879,45895,45899,45915,45919,45923,45931,45935,45939,45951,45989,45993,45997,46005,46009,46023,46033,46039,46045,46051,46057,46061,46065,46071,46075,46079,46087,46091,46109,46113,46117,46121,46137,46141,46145,46149,46153,46157,46177,46197,46201,46205,46209,46217,46225,46229,46245,46265,46285,46289,46293,46301,46309,46313,46317,46321,46333,46337,46347,46355,46372],{"__ignoreMap":308},[312,44735,44736,44738],{"class":314,"line":315},[312,44737,32188],{"class":1436},[312,44739,33617],{"class":324},[312,44741,44742,44744],{"class":314,"line":171},[312,44743,32188],{"class":1436},[312,44745,33624],{"class":324},[312,44747,44748,44750,44752,44754],{"class":314,"line":274},[312,44749,32188],{"class":1436},[312,44751,33635],{"class":324},[312,44753,33178],{"class":1436},[312,44755,33640],{"class":324},[312,44757,44758,44760],{"class":314,"line":298},[312,44759,32188],{"class":1436},[312,44761,32191],{"class":324},[312,44763,44764,44766,44768,44770],{"class":314,"line":974},[312,44765,32533],{"class":1436},[312,44767,33210],{"class":324},[312,44769,32188],{"class":1436},[312,44771,33657],{"class":324},[312,44773,44774,44776,44778,44780],{"class":314,"line":980},[312,44775,32533],{"class":1436},[312,44777,33163],{"class":324},[312,44779,32188],{"class":1436},[312,44781,33168],{"class":324},[312,44783,44784,44786,44788,44790],{"class":314,"line":997},[312,44785,32533],{"class":1436},[312,44787,33193],{"class":324},[312,44789,32188],{"class":1436},[312,44791,33198],{"class":324},[312,44793,44794,44796,44798,44800],{"class":314,"line":1003},[312,44795,32188],{"class":1436},[312,44797,33210],{"class":324},[312,44799,33178],{"class":1436},[312,44801,33215],{"class":324},[312,44803,44804,44806,44808,44810],{"class":314,"line":1020},[312,44805,32188],{"class":1436},[312,44807,33227],{"class":324},[312,44809,33178],{"class":1436},[312,44811,33232],{"class":324},[312,44813,44814],{"class":314,"line":1026},[312,44815,33702],{"class":318},[312,44817,44818,44820,44822,44824],{"class":314,"line":3418},[312,44819,32533],{"class":1436},[312,44821,33709],{"class":324},[312,44823,32188],{"class":1436},[312,44825,44826],{"class":324}," GoogLeNet, Inception\n",[312,44828,44829,44831,44833,44835],{"class":314,"line":3423},[312,44830,32533],{"class":1436},[312,44832,32536],{"class":324},[312,44834,32188],{"class":1436},[312,44836,32541],{"class":324},[312,44838,44839],{"class":314,"line":3429},[312,44840,4205],{"emptyLinePlaceholder":1881},[312,44842,44843],{"class":314,"line":3434},[312,44844,4205],{"emptyLinePlaceholder":1881},[312,44846,44847],{"class":314,"line":3448},[312,44848,33737],{"class":318},[312,44850,44851,44853,44855],{"class":314,"line":3453},[312,44852,33742],{"class":1436},[312,44854,33745],{"class":332},[312,44856,33748],{"class":324},[312,44858,44859,44861,44863,44865,44867],{"class":314,"line":3459},[312,44860,33753],{"class":324},[312,44862,336],{"class":1436},[312,44864,33250],{"class":324},[312,44866,33258],{"class":339},[312,44868,33261],{"class":324},[312,44870,44871,44873,44875,44877],{"class":314,"line":3480},[312,44872,33766],{"class":1579},[312,44874,336],{"class":1436},[312,44876,33271],{"class":488},[312,44878,33261],{"class":324},[312,44880,44881,44883,44885,44887,44889,44891,44893],{"class":314,"line":3485},[312,44882,33777],{"class":1579},[312,44884,336],{"class":1436},[312,44886,33288],{"class":324},[312,44888,33291],{"class":1579},[312,44890,336],{"class":1436},[312,44892,37244],{"class":488},[312,44894,33299],{"class":324},[312,44896,44897,44899,44901,44903],{"class":314,"line":3499},[312,44898,33794],{"class":1579},[312,44900,336],{"class":1436},[312,44902,33271],{"class":488},[312,44904,1959],{"class":324},[312,44906,44907,44909,44911,44913,44915,44917,44919,44921,44923,44925,44927,44929,44931,44933,44935],{"class":314,"line":3504},[312,44908,33805],{"class":324},[312,44910,336],{"class":1436},[312,44912,33810],{"class":324},[312,44914,33813],{"class":488},[312,44916,1576],{"class":324},[312,44918,33818],{"class":488},[312,44920,2400],{"class":1436},[312,44922,9162],{"class":488},[312,44924,33825],{"class":324},[312,44926,33813],{"class":488},[312,44928,1576],{"class":324},[312,44930,33832],{"class":488},[312,44932,2400],{"class":1436},[312,44934,9162],{"class":488},[312,44936,33839],{"class":324},[312,44938,44939,44941,44943,44945,44947,44949],{"class":314,"line":3533},[312,44940,33844],{"class":324},[312,44942,336],{"class":1436},[312,44944,33849],{"class":324},[312,44946,33332],{"class":1579},[312,44948,336],{"class":1436},[312,44950,33337],{"class":324},[312,44952,44953,44955,44957,44959],{"class":314,"line":3538},[312,44954,33860],{"class":1579},[312,44956,336],{"class":1436},[312,44958,2144],{"class":488},[312,44960,33261],{"class":324},[312,44962,44963,44965,44967,44969],{"class":314,"line":3555},[312,44964,33872],{"class":1579},[312,44966,336],{"class":1436},[312,44968,33271],{"class":488},[312,44970,33261],{"class":324},[312,44972,44973],{"class":314,"line":3560},[312,44974,33883],{"class":318},[312,44976,44977,44979,44981,44983],{"class":314,"line":3565},[312,44978,33888],{"class":1579},[312,44980,336],{"class":1436},[312,44982,2340],{"class":488},[312,44984,1959],{"class":324},[312,44986,44987,44989,44991,44993,44995,44997],{"class":314,"line":3570},[312,44988,33899],{"class":324},[312,44990,336],{"class":1436},[312,44992,33329],{"class":324},[312,44994,33332],{"class":1579},[312,44996,336],{"class":1436},[312,44998,33910],{"class":324},[312,45000,45001,45003,45005,45007],{"class":314,"line":3584},[312,45002,33915],{"class":1579},[312,45004,336],{"class":1436},[312,45006,2144],{"class":488},[312,45008,33261],{"class":324},[312,45010,45011,45013,45015,45017],{"class":314,"line":3589},[312,45012,33926],{"class":1579},[312,45014,336],{"class":1436},[312,45016,33271],{"class":488},[312,45018,33261],{"class":324},[312,45020,45021,45023,45025,45027],{"class":314,"line":4382},[312,45022,33937],{"class":1579},[312,45024,336],{"class":1436},[312,45026,2340],{"class":488},[312,45028,1959],{"class":324},[312,45030,45031,45033],{"class":314,"line":4396},[312,45032,5895],{"class":1436},[312,45034,33950],{"class":324},[312,45036,45037],{"class":314,"line":4404},[312,45038,4205],{"emptyLinePlaceholder":1881},[312,45040,45041],{"class":314,"line":4409},[312,45042,33959],{"class":318},[312,45044,45045],{"class":314,"line":4415},[312,45046,33964],{"class":318},[312,45048,45049],{"class":314,"line":4421},[312,45050,4205],{"emptyLinePlaceholder":1881},[312,45052,45053],{"class":314,"line":4426},[312,45054,33973],{"class":318},[312,45056,45057,45059,45061],{"class":314,"line":9751},[312,45058,33742],{"class":1436},[312,45060,33980],{"class":332},[312,45062,33983],{"class":324},[312,45064,45065,45067,45069,45071,45073,45075,45077,45079,45081],{"class":314,"line":9775},[312,45066,33032],{"class":324},[312,45068,336],{"class":1436},[312,45070,32247],{"class":324},[312,45072,33039],{"class":339},[312,45074,3510],{"class":1436},[312,45076,33044],{"class":324},[312,45078,3507],{"class":1436},[312,45080,34002],{"class":339},[312,45082,1959],{"class":324},[312,45084,45085],{"class":314,"line":9780},[312,45086,4205],{"emptyLinePlaceholder":1881},[312,45088,45089],{"class":314,"line":9786},[312,45090,4205],{"emptyLinePlaceholder":1881},[312,45092,45093],{"class":314,"line":9813},[312,45094,34017],{"class":318},[312,45096,45097],{"class":314,"line":9818},[312,45098,34022],{"class":318},[312,45100,45101],{"class":314,"line":9824},[312,45102,34027],{"class":318},[312,45104,45105,45107,45109,45111,45113,45115,45117],{"class":314,"line":9836},[312,45106,34032],{"class":324},[312,45108,336],{"class":1436},[312,45110,34037],{"class":324},[312,45112,34040],{"class":1579},[312,45114,336],{"class":1436},[312,45116,34045],{"class":488},[312,45118,1959],{"class":324},[312,45120,45121],{"class":314,"line":9848},[312,45122,4205],{"emptyLinePlaceholder":1881},[312,45124,45125],{"class":314,"line":9860},[312,45126,34056],{"class":318},[312,45128,45129,45131,45133],{"class":314,"line":11519},[312,45130,34061],{"class":324},[312,45132,336],{"class":1436},[312,45134,34066],{"class":324},[312,45136,45137],{"class":314,"line":11544},[312,45138,4205],{"emptyLinePlaceholder":1881},[312,45140,45141],{"class":314,"line":11567},[312,45142,34075],{"class":318},[312,45144,45145,45147,45149],{"class":314,"line":11591},[312,45146,33084],{"class":324},[312,45148,336],{"class":1436},[312,45150,34084],{"class":324},[312,45152,45153],{"class":314,"line":11596},[312,45154,34089],{"class":318},[312,45156,45157],{"class":314,"line":11601},[312,45158,34094],{"class":318},[312,45160,45161],{"class":314,"line":11606},[312,45162,34099],{"class":318},[312,45164,45165,45167,45169],{"class":314,"line":11615},[312,45166,34104],{"class":324},[312,45168,336],{"class":1436},[312,45170,34109],{"class":324},[312,45172,45173],{"class":314,"line":11620},[312,45174,4205],{"emptyLinePlaceholder":1881},[312,45176,45177],{"class":314,"line":11626},[312,45178,4205],{"emptyLinePlaceholder":1881},[312,45180,45181],{"class":314,"line":11647},[312,45182,34122],{"class":318},[312,45184,45185],{"class":314,"line":11653},[312,45186,34127],{"class":318},[312,45188,45189,45191,45193],{"class":314,"line":11667},[312,45190,34132],{"class":324},[312,45192,336],{"class":1436},[312,45194,34137],{"class":488},[312,45196,45197],{"class":314,"line":11673},[312,45198,34142],{"class":318},[312,45200,45201,45203,45205],{"class":314,"line":11700},[312,45202,34147],{"class":324},[312,45204,336],{"class":1436},[312,45206,34152],{"class":324},[312,45208,45209],{"class":314,"line":11709},[312,45210,34157],{"class":318},[312,45212,45213,45215,45217],{"class":314,"line":11715},[312,45214,34162],{"class":324},[312,45216,336],{"class":1436},[312,45218,34152],{"class":324},[312,45220,45221],{"class":314,"line":11723},[312,45222,34171],{"class":318},[312,45224,45225,45227,45229],{"class":314,"line":11728},[312,45226,34176],{"class":324},[312,45228,336],{"class":1436},[312,45230,34152],{"class":324},[312,45232,45233],{"class":314,"line":18404},[312,45234,34185],{"class":318},[312,45236,45237,45239,45241],{"class":314,"line":18410},[312,45238,34190],{"class":324},[312,45240,336],{"class":1436},[312,45242,34152],{"class":324},[312,45244,45245],{"class":314,"line":18433},[312,45246,4205],{"emptyLinePlaceholder":1881},[312,45248,45249],{"class":314,"line":18439},[312,45250,34203],{"class":318},[312,45252,45253,45255,45257],{"class":314,"line":18462},[312,45254,34208],{"class":324},[312,45256,336],{"class":1436},[312,45258,34213],{"class":324},[312,45260,45261],{"class":314,"line":18476},[312,45262,4205],{"emptyLinePlaceholder":1881},[312,45264,45265],{"class":314,"line":18496},[312,45266,4205],{"emptyLinePlaceholder":1881},[312,45268,45269],{"class":314,"line":18502},[312,45270,34226],{"class":318},[312,45272,45273,45275,45277,45279,45281],{"class":314,"line":18513},[312,45274,5006],{"class":1436},[312,45276,34233],{"class":324},[312,45278,27839],{"class":1436},[312,45280,34238],{"class":488},[312,45282,34241],{"class":324},[312,45284,45285,45287,45289,45291,45293,45295,45297,45299,45301,45303,45305],{"class":314,"line":18536},[312,45286,34246],{"class":488},[312,45288,1576],{"class":324},[312,45290,34251],{"class":339},[312,45292,34254],{"class":488},[312,45294,2529],{"class":339},[312,45296,34254],{"class":488},[312,45298,2196],{"class":339},[312,45300,34263],{"class":324},[312,45302,2477],{"class":1436},[312,45304,1433],{"class":488},[312,45306,32293],{"class":324},[312,45308,45309,45311,45313,45315,45317,45319],{"class":314,"line":18558},[312,45310,34246],{"class":488},[312,45312,1576],{"class":324},[312,45314,34278],{"class":339},[312,45316,2400],{"class":1436},[312,45318,2391],{"class":488},[312,45320,1959],{"class":324},[312,45322,45323],{"class":314,"line":18563},[312,45324,4205],{"emptyLinePlaceholder":1881},[312,45326,45327],{"class":314,"line":18569},[312,45328,34293],{"class":318},[312,45330,45331],{"class":314,"line":18583},[312,45332,34298],{"class":318},[312,45334,45335,45337,45339],{"class":314,"line":18596},[312,45336,34303],{"class":324},[312,45338,336],{"class":1436},[312,45340,34137],{"class":488},[312,45342,45343],{"class":314,"line":18601},[312,45344,34312],{"class":318},[312,45346,45347,45349,45351],{"class":314,"line":18615},[312,45348,34317],{"class":324},[312,45350,336],{"class":1436},[312,45352,4890],{"class":488},[312,45354,45355],{"class":314,"line":18620},[312,45356,34326],{"class":318},[312,45358,45359,45361,45363],{"class":314,"line":18626},[312,45360,34331],{"class":324},[312,45362,336],{"class":1436},[312,45364,34137],{"class":488},[312,45366,45367],{"class":314,"line":18631},[312,45368,34340],{"class":318},[312,45370,45371,45373,45375],{"class":314,"line":18645},[312,45372,34345],{"class":324},[312,45374,336],{"class":1436},[312,45376,4890],{"class":488},[312,45378,45379],{"class":314,"line":18650},[312,45380,34354],{"class":318},[312,45382,45383,45385,45387],{"class":314,"line":18655},[312,45384,34359],{"class":324},[312,45386,336],{"class":1436},[312,45388,4890],{"class":488},[312,45390,45391],{"class":314,"line":18669},[312,45392,34368],{"class":318},[312,45394,45395,45397,45399],{"class":314,"line":18681},[312,45396,34373],{"class":324},[312,45398,336],{"class":1436},[312,45400,4890],{"class":488},[312,45402,45403],{"class":314,"line":18686},[312,45404,34382],{"class":318},[312,45406,45407,45409,45411,45413,45415],{"class":314,"line":18699},[312,45408,5208],{"class":1436},[312,45410,33396],{"class":324},[312,45412,27839],{"class":1436},[312,45414,33401],{"class":488},[312,45416,34395],{"class":324},[312,45418,45419],{"class":314,"line":18704},[312,45420,34400],{"class":318},[312,45422,45423,45425,45427],{"class":314,"line":18709},[312,45424,34405],{"class":324},[312,45426,336],{"class":1436},[312,45428,34410],{"class":324},[312,45430,45431],{"class":314,"line":18714},[312,45432,34415],{"class":318},[312,45434,45435,45437,45439],{"class":314,"line":18727},[312,45436,34420],{"class":324},[312,45438,336],{"class":1436},[312,45440,34425],{"class":324},[312,45442,45443],{"class":314,"line":18732},[312,45444,34431],{"class":318},[312,45446,45447],{"class":314,"line":34428},[312,45448,34437],{"class":324},[312,45450,45451],{"class":314,"line":34434},[312,45452,34443],{"class":318},[312,45454,45455],{"class":314,"line":34440},[312,45456,34449],{"class":318},[312,45458,45459,45461,45463],{"class":314,"line":34446},[312,45460,34455],{"class":324},[312,45462,336],{"class":1436},[312,45464,34460],{"class":324},[312,45466,45467],{"class":314,"line":34452},[312,45468,34466],{"class":318},[312,45470,45471,45473,45475,45477,45479,45481,45483],{"class":314,"line":34463},[312,45472,34472],{"class":324},[312,45474,336],{"class":1436},[312,45476,34477],{"class":324},[312,45478,34480],{"class":1579},[312,45480,336],{"class":1436},[312,45482,1433],{"class":488},[312,45484,1959],{"class":324},[312,45486,45487],{"class":314,"line":34469},[312,45488,34492],{"class":318},[312,45490,45491,45493,45495],{"class":314,"line":34489},[312,45492,34498],{"class":324},[312,45494,336],{"class":1436},[312,45496,34503],{"class":324},[312,45498,45499],{"class":314,"line":34495},[312,45500,34509],{"class":318},[312,45502,45503],{"class":314,"line":34506},[312,45504,34515],{"class":324},[312,45506,45507],{"class":314,"line":34512},[312,45508,34521],{"class":318},[312,45510,45511],{"class":314,"line":34518},[312,45512,34527],{"class":324},[312,45514,45515],{"class":314,"line":34524},[312,45516,34533],{"class":318},[312,45518,45519],{"class":314,"line":34530},[312,45520,34539],{"class":324},[312,45522,45523],{"class":314,"line":34536},[312,45524,34545],{"class":318},[312,45526,45527,45529,45531,45533,45535,45537,45539],{"class":314,"line":34542},[312,45528,34551],{"class":324},[312,45530,11280],{"class":1436},[312,45532,34556],{"class":324},[312,45534,2400],{"class":1436},[312,45536,34561],{"class":324},[312,45538,858],{"class":488},[312,45540,1959],{"class":324},[312,45542,45543],{"class":314,"line":34548},[312,45544,34571],{"class":318},[312,45546,45547,45549,45551,45553,45555],{"class":314,"line":34568},[312,45548,34577],{"class":324},[312,45550,11280],{"class":1436},[312,45552,34582],{"class":324},[312,45554,4754],{"class":1436},[312,45556,34587],{"class":324},[312,45558,45559],{"class":314,"line":34574},[312,45560,34593],{"class":318},[312,45562,45563,45565,45567,45569,45571],{"class":314,"line":34590},[312,45564,34599],{"class":324},[312,45566,11280],{"class":1436},[312,45568,34561],{"class":324},[312,45570,858],{"class":488},[312,45572,1959],{"class":324},[312,45574,45575],{"class":314,"line":34596},[312,45576,34613],{"class":318},[312,45578,45579,45581,45583,45585,45587],{"class":314,"line":34610},[312,45580,5208],{"class":1436},[312,45582,34621],{"class":324},[312,45584,27839],{"class":1436},[312,45586,33401],{"class":488},[312,45588,34628],{"class":324},[312,45590,45591],{"class":314,"line":34616},[312,45592,34634],{"class":318},[312,45594,45595,45597,45599],{"class":314,"line":34631},[312,45596,34405],{"class":324},[312,45598,336],{"class":1436},[312,45600,34410],{"class":324},[312,45602,45603],{"class":314,"line":34637},[312,45604,34649],{"class":318},[312,45606,45607,45609,45611],{"class":314,"line":34646},[312,45608,34420],{"class":324},[312,45610,336],{"class":1436},[312,45612,34425],{"class":324},[312,45614,45615],{"class":314,"line":34652},[312,45616,34664],{"class":318},[312,45618,45619],{"class":314,"line":34661},[312,45620,34670],{"class":324},[312,45622,45623],{"class":314,"line":34667},[312,45624,38151],{"class":318},[312,45626,45627,45629],{"class":314,"line":34673},[312,45628,34676],{"class":1436},[312,45630,34679],{"class":324},[312,45632,45633],{"class":314,"line":34682},[312,45634,34685],{"class":318},[312,45636,45637,45639,45641],{"class":314,"line":34688},[312,45638,38166],{"class":324},[312,45640,336],{"class":1436},[312,45642,34460],{"class":324},[312,45644,45645],{"class":314,"line":34699},[312,45646,34702],{"class":318},[312,45648,45649,45651,45653,45655,45657,45659,45661],{"class":314,"line":34705},[312,45650,38179],{"class":324},[312,45652,336],{"class":1436},[312,45654,34477],{"class":324},[312,45656,34480],{"class":1579},[312,45658,336],{"class":1436},[312,45660,1433],{"class":488},[312,45662,1959],{"class":324},[312,45664,45665],{"class":314,"line":34724},[312,45666,34727],{"class":318},[312,45668,45669,45671,45673],{"class":314,"line":34730},[312,45670,38200],{"class":324},[312,45672,336],{"class":1436},[312,45674,34503],{"class":324},[312,45676,45677],{"class":314,"line":34741},[312,45678,34744],{"class":318},[312,45680,45681,45683,45685,45687,45689,45691,45693],{"class":314,"line":34747},[312,45682,38213],{"class":324},[312,45684,11280],{"class":1436},[312,45686,38218],{"class":324},[312,45688,2400],{"class":1436},[312,45690,34561],{"class":324},[312,45692,858],{"class":488},[312,45694,1959],{"class":324},[312,45696,45697,45699,45701,45703,45705],{"class":314,"line":34767},[312,45698,38231],{"class":324},[312,45700,11280],{"class":1436},[312,45702,34582],{"class":324},[312,45704,4754],{"class":1436},[312,45706,34587],{"class":324},[312,45708,45709],{"class":314,"line":34783},[312,45710,38244],{"class":318},[312,45712,45713,45715,45717,45719,45721],{"class":314,"line":34789},[312,45714,38249],{"class":324},[312,45716,11280],{"class":1436},[312,45718,34561],{"class":324},[312,45720,858],{"class":488},[312,45722,1959],{"class":324},[312,45724,45725],{"class":314,"line":34803},[312,45726,34806],{"class":318},[312,45728,45729],{"class":314,"line":34809},[312,45730,34812],{"class":318},[312,45732,45733,45735,45737],{"class":314,"line":34815},[312,45734,34818],{"class":324},[312,45736,2529],{"class":1436},[312,45738,34823],{"class":324},[312,45740,45741],{"class":314,"line":34826},[312,45742,34829],{"class":318},[312,45744,45745],{"class":314,"line":34832},[312,45746,34835],{"class":318},[312,45748,45749,45751,45753],{"class":314,"line":34838},[312,45750,34841],{"class":324},[312,45752,2529],{"class":1436},[312,45754,34823],{"class":324},[312,45756,45757],{"class":314,"line":34848},[312,45758,34851],{"class":318},[312,45760,45761,45763,45765],{"class":314,"line":34854},[312,45762,34857],{"class":324},[312,45764,2529],{"class":1436},[312,45766,34862],{"class":324},[312,45768,45769],{"class":314,"line":34865},[312,45770,34868],{"class":318},[312,45772,45773,45775,45777],{"class":314,"line":34871},[312,45774,34874],{"class":324},[312,45776,2529],{"class":1436},[312,45778,34862],{"class":324},[312,45780,45781],{"class":314,"line":34881},[312,45782,4205],{"emptyLinePlaceholder":1881},[312,45784,45785],{"class":314,"line":34886},[312,45786,34889],{"class":318},[312,45788,45789,45791,45793,45795,45797,45799,45801,45803,45805,45807,45809,45811,45813,45815,45817,45819,45821,45823,45825,45827],{"class":314,"line":34892},[312,45790,34246],{"class":488},[312,45792,1576],{"class":324},[312,45794,5397],{"class":339},[312,45796,34254],{"class":488},[312,45798,34903],{"class":339},[312,45800,2840],{"class":488},[312,45802,34908],{"class":1436},[312,45804,2888],{"class":488},[312,45806,34913],{"class":339},[312,45808,2840],{"class":488},[312,45810,34908],{"class":1436},[312,45812,2888],{"class":488},[312,45814,5397],{"class":339},[312,45816,34924],{"class":324},[312,45818,2477],{"class":1436},[312,45820,1433],{"class":488},[312,45822,34931],{"class":324},[312,45824,2477],{"class":1436},[312,45826,1433],{"class":488},[312,45828,34938],{"class":324},[312,45830,45831,45833,45835,45837,45839,45841,45843,45845,45847,45849,45851,45853,45855,45857,45859,45861,45863,45865,45867,45869],{"class":314,"line":34941},[312,45832,34246],{"class":488},[312,45834,1576],{"class":324},[312,45836,5397],{"class":339},[312,45838,34254],{"class":488},[312,45840,34952],{"class":339},[312,45842,2840],{"class":488},[312,45844,34908],{"class":1436},[312,45846,2888],{"class":488},[312,45848,34961],{"class":339},[312,45850,2840],{"class":488},[312,45852,34908],{"class":1436},[312,45854,2888],{"class":488},[312,45856,5397],{"class":339},[312,45858,34972],{"class":324},[312,45860,2477],{"class":1436},[312,45862,1433],{"class":488},[312,45864,34979],{"class":324},[312,45866,2477],{"class":1436},[312,45868,1433],{"class":488},[312,45870,34938],{"class":324},[312,45872,45873],{"class":314,"line":34988},[312,45874,4205],{"emptyLinePlaceholder":1881},[312,45876,45877],{"class":314,"line":34993},[312,45878,34996],{"class":318},[312,45880,45881,45883,45885,45887,45889,45891,45893],{"class":314,"line":34999},[312,45882,4302],{"class":1436},[312,45884,35004],{"class":324},[312,45886,2477],{"class":1436},[312,45888,1433],{"class":488},[312,45890,2882],{"class":324},[312,45892,2902],{"class":1436},[312,45894,35015],{"class":324},[312,45896,45897],{"class":314,"line":35018},[312,45898,35021],{"class":318},[312,45900,45901,45903,45905,45907,45909,45911,45913],{"class":314,"line":35024},[312,45902,35027],{"class":324},[312,45904,1992],{"class":488},[312,45906,336],{"class":1436},[312,45908,35034],{"class":324},[312,45910,2477],{"class":1436},[312,45912,1433],{"class":488},[312,45914,35041],{"class":324},[312,45916,45917],{"class":314,"line":35044},[312,45918,35047],{"class":318},[312,45920,45921],{"class":314,"line":35050},[312,45922,35053],{"class":318},[312,45924,45925,45927,45929],{"class":314,"line":35056},[312,45926,35059],{"class":324},[312,45928,336],{"class":1436},[312,45930,34109],{"class":324},[312,45932,45933],{"class":314,"line":35066},[312,45934,4205],{"emptyLinePlaceholder":1881},[312,45936,45937],{"class":314,"line":35071},[312,45938,35074],{"class":318},[312,45940,45941,45943,45945,45947,45949],{"class":314,"line":35077},[312,45942,35080],{"class":324},[312,45944,336],{"class":1436},[312,45946,35085],{"class":324},[312,45948,2477],{"class":1436},[312,45950,35090],{"class":324},[312,45952,45953,45955,45957,45959,45961,45963,45965,45967,45969,45971,45973,45975,45977,45979,45981,45983,45985,45987],{"class":314,"line":35093},[312,45954,34246],{"class":488},[312,45956,1576],{"class":324},[312,45958,35100],{"class":339},[312,45960,2840],{"class":488},[312,45962,35105],{"class":1436},[312,45964,2888],{"class":488},[312,45966,2489],{"class":339},[312,45968,2840],{"class":488},[312,45970,35105],{"class":1436},[312,45972,2888],{"class":488},[312,45974,35118],{"class":339},[312,45976,35121],{"class":324},[312,45978,35124],{"class":1436},[312,45980,2851],{"class":488},[312,45982,35129],{"class":324},[312,45984,2273],{"class":1436},[312,45986,2851],{"class":488},[312,45988,32293],{"class":324},[312,45990,45991],{"class":314,"line":35138},[312,45992,38528],{"class":318},[312,45994,45995],{"class":314,"line":35144},[312,45996,38533],{"class":318},[312,45998,45999,46001,46003],{"class":314,"line":35150},[312,46000,38538],{"class":324},[312,46002,35162],{"class":339},[312,46004,1959],{"class":324},[312,46006,46007],{"class":314,"line":35156},[312,46008,35182],{"class":318},[312,46010,46011,46013,46015,46017,46019,46021],{"class":314,"line":35167},[312,46012,35188],{"class":324},[312,46014,336],{"class":1436},[312,46016,35193],{"class":324},[312,46018,35196],{"class":1579},[312,46020,336],{"class":1436},[312,46022,3353],{"class":324},[312,46024,46025,46027,46029,46031],{"class":314,"line":35173},[312,46026,35206],{"class":339},[312,46028,2803],{"class":324},[312,46030,35211],{"class":488},[312,46032,35214],{"class":324},[312,46034,46035,46037],{"class":314,"line":35179},[312,46036,35220],{"class":339},[312,46038,35223],{"class":324},[312,46040,46041,46043],{"class":314,"line":35185},[312,46042,35229],{"class":339},[312,46044,35232],{"class":324},[312,46046,46047,46049],{"class":314,"line":35203},[312,46048,35238],{"class":339},[312,46050,35241],{"class":324},[312,46052,46053,46055],{"class":314,"line":35217},[312,46054,35247],{"class":339},[312,46056,35250],{"class":324},[312,46058,46059],{"class":314,"line":35226},[312,46060,35256],{"class":324},[312,46062,46063],{"class":314,"line":35235},[312,46064,35262],{"class":318},[312,46066,46067,46069],{"class":314,"line":35244},[312,46068,5895],{"class":1436},[312,46070,35270],{"class":324},[312,46072,46073],{"class":314,"line":35253},[312,46074,4205],{"emptyLinePlaceholder":1881},[312,46076,46077],{"class":314,"line":35259},[312,46078,35281],{"class":318},[312,46080,46081,46083,46085],{"class":314,"line":35265},[312,46082,33742],{"class":1436},[312,46084,35289],{"class":332},[312,46086,35292],{"class":324},[312,46088,46089],{"class":314,"line":35273},[312,46090,35298],{"class":318},[312,46092,46093,46095,46097,46099,46101,46103,46105,46107],{"class":314,"line":35278},[312,46094,35304],{"class":324},[312,46096,33488],{"class":1579},[312,46098,336],{"class":1436},[312,46100,1576],{"class":324},[312,46102,2443],{"class":488},[312,46104,2323],{"class":324},[312,46106,2238],{"class":488},[312,46108,32293],{"class":324},[312,46110,46111],{"class":314,"line":35284},[312,46112,35324],{"class":318},[312,46114,46115],{"class":314,"line":35295},[312,46116,35330],{"class":318},[312,46118,46119],{"class":314,"line":35301},[312,46120,35336],{"class":318},[312,46122,46123,46125,46127,46129,46131,46133,46135],{"class":314,"line":35321},[312,46124,33522],{"class":324},[312,46126,1433],{"class":488},[312,46128,2323],{"class":324},[312,46130,2027],{"class":488},[312,46132,2323],{"class":324},[312,46134,1433],{"class":488},[312,46136,1959],{"class":324},[312,46138,46139],{"class":314,"line":35327},[312,46140,35359],{"class":318},[312,46142,46143],{"class":314,"line":35333},[312,46144,35365],{"class":318},[312,46146,46147],{"class":314,"line":35339},[312,46148,35371],{"class":318},[312,46150,46151],{"class":314,"line":35356},[312,46152,35377],{"class":318},[312,46154,46155],{"class":314,"line":35362},[312,46156,35383],{"class":318},[312,46158,46159,46161,46163,46165,46167,46169,46171,46173,46175],{"class":314,"line":35368},[312,46160,35389],{"class":324},[312,46162,35392],{"class":339},[312,46164,35395],{"class":324},[312,46166,35398],{"class":339},[312,46168,2323],{"class":324},[312,46170,35403],{"class":1579},[312,46172,336],{"class":1436},[312,46174,35408],{"class":339},[312,46176,1959],{"class":324},[312,46178,46179,46181,46183,46185,46187,46189,46191,46193,46195],{"class":314,"line":35374},[312,46180,35389],{"class":324},[312,46182,35392],{"class":339},[312,46184,35420],{"class":324},[312,46186,35423],{"class":339},[312,46188,2323],{"class":324},[312,46190,35403],{"class":1579},[312,46192,336],{"class":1436},[312,46194,35432],{"class":339},[312,46196,1959],{"class":324},[312,46198,46199],{"class":314,"line":35380},[312,46200,35440],{"class":318},[312,46202,46203],{"class":314,"line":35386},[312,46204,35446],{"class":324},[312,46206,46207],{"class":314,"line":35413},[312,46208,35452],{"class":318},[312,46210,46211,46213,46215],{"class":314,"line":35437},[312,46212,35458],{"class":324},[312,46214,35461],{"class":339},[312,46216,1959],{"class":324},[312,46218,46219,46221,46223],{"class":314,"line":35443},[312,46220,35469],{"class":324},[312,46222,35472],{"class":339},[312,46224,1959],{"class":324},[312,46226,46227],{"class":314,"line":35449},[312,46228,35480],{"class":318},[312,46230,46231,46233,46235,46237,46239,46241,46243],{"class":314,"line":35455},[312,46232,33522],{"class":324},[312,46234,1433],{"class":488},[312,46236,2323],{"class":324},[312,46238,2027],{"class":488},[312,46240,2323],{"class":324},[312,46242,2027],{"class":488},[312,46244,1959],{"class":324},[312,46246,46247,46249,46251,46253,46255,46257,46259,46261,46263],{"class":314,"line":35466},[312,46248,35389],{"class":324},[312,46250,35392],{"class":339},[312,46252,35507],{"class":324},[312,46254,35398],{"class":339},[312,46256,2323],{"class":324},[312,46258,35403],{"class":1579},[312,46260,336],{"class":1436},[312,46262,35518],{"class":339},[312,46264,1959],{"class":324},[312,46266,46267,46269,46271,46273,46275,46277,46279,46281,46283],{"class":314,"line":35477},[312,46268,35389],{"class":324},[312,46270,35392],{"class":339},[312,46272,35530],{"class":324},[312,46274,35423],{"class":339},[312,46276,2323],{"class":324},[312,46278,35403],{"class":1579},[312,46280,336],{"class":1436},[312,46282,35541],{"class":339},[312,46284,1959],{"class":324},[312,46286,46287],{"class":314,"line":35483},[312,46288,35549],{"class":318},[312,46290,46291],{"class":314,"line":35500},[312,46292,35446],{"class":324},[312,46294,46295,46297,46299],{"class":314,"line":35523},[312,46296,35458],{"class":324},[312,46298,35392],{"class":339},[312,46300,1959],{"class":324},[312,46302,46303,46305,46307],{"class":314,"line":35546},[312,46304,35469],{"class":324},[312,46306,35571],{"class":339},[312,46308,1959],{"class":324},[312,46310,46311],{"class":314,"line":35552},[312,46312,35579],{"class":324},[312,46314,46315],{"class":314,"line":35557},[312,46316,4205],{"emptyLinePlaceholder":1881},[312,46318,46319],{"class":314,"line":35566},[312,46320,35590],{"class":318},[312,46322,46323,46325,46327,46329,46331],{"class":314,"line":35576},[312,46324,3338],{"class":1436},[312,46326,33015],{"class":488},[312,46328,4754],{"class":1436},[312,46330,33020],{"class":339},[312,46332,5544],{"class":324},[312,46334,46335],{"class":314,"line":35582},[312,46336,35609],{"class":318},[312,46338,46339,46342,46344],{"class":314,"line":35587},[312,46340,46341],{"class":324},"    GoogLeNet",[312,46343,336],{"class":1436},[312,46345,46346],{"class":324},"GoogLeNet(Inception)\n",[312,46348,46349,46351,46353],{"class":314,"line":35593},[312,46350,35626],{"class":324},[312,46352,336],{"class":1436},[312,46354,35631],{"class":324},[312,46356,46357,46359,46361,46364,46366,46368,46370],{"class":314,"line":35606},[312,46358,35188],{"class":324},[312,46360,336],{"class":1436},[312,46362,46363],{"class":324},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[312,46365,35644],{"class":1579},[312,46367,336],{"class":1436},[312,46369,2893],{"class":488},[312,46371,1959],{"class":324},[312,46373,46374],{"class":314,"line":35612},[312,46375,35656],{"class":324},[140,46377,46378],{"start":274},[143,46379,42369],{},[303,46381,46383],{"className":32174,"code":46382,"language":32176,"meta":308,"style":308},"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",[119,46384,46385,46391,46401,46411,46415,46425,46436,46440,46444,46448,46456,46472,46482,46498,46508,46522,46526,46536,46546,46556,46562,46566,46570,46578,46582,46598,46606,46610,46614,46622,46630,46634,46638,46642,46646,46652,46656,46666,46674,46682,46686,46690,46694,46702,46706,46722,46726,46730,46734,46746,46750,46762,46766,46770,46782,46786,46796,46800,46804,46816,46820,46828,46832,46836,46844,46848,46856,46860,46864,46868,46872,46876,46892,46900,46904,46908,46956,46962,46966,46976,46984,46992,46996,47000,47004,47008,47016,47020,47036,47040,47048,47056],{"__ignoreMap":308},[312,46386,46387,46389],{"class":314,"line":315},[312,46388,32188],{"class":1436},[312,46390,32191],{"class":324},[312,46392,46393,46395,46397,46399],{"class":314,"line":171},[312,46394,32188],{"class":1436},[312,46396,33210],{"class":324},[312,46398,33178],{"class":1436},[312,46400,33215],{"class":324},[312,46402,46403,46405,46407,46409],{"class":314,"line":274},[312,46404,32533],{"class":1436},[312,46406,33193],{"class":324},[312,46408,32188],{"class":1436},[312,46410,33198],{"class":324},[312,46412,46413],{"class":314,"line":298},[312,46414,35717],{"class":318},[312,46416,46417,46419,46421,46423],{"class":314,"line":974},[312,46418,32533],{"class":1436},[312,46420,33163],{"class":324},[312,46422,32188],{"class":1436},[312,46424,33168],{"class":324},[312,46426,46427,46429,46431,46433],{"class":314,"line":980},[312,46428,32533],{"class":1436},[312,46430,33709],{"class":324},[312,46432,32188],{"class":1436},[312,46434,46435],{"class":324}," GoogLeNet,Inception\n",[312,46437,46438],{"class":314,"line":997},[312,46439,4205],{"emptyLinePlaceholder":1881},[312,46441,46442],{"class":314,"line":1003},[312,46443,4205],{"emptyLinePlaceholder":1881},[312,46445,46446],{"class":314,"line":1020},[312,46447,35746],{"class":318},[312,46449,46450,46452,46454],{"class":314,"line":1026},[312,46451,33742],{"class":1436},[312,46453,35753],{"class":332},[312,46455,33748],{"class":324},[312,46457,46458,46460,46462,46464,46466,46468,46470],{"class":314,"line":3418},[312,46459,35760],{"class":324},[312,46461,336],{"class":1436},[312,46463,33250],{"class":324},[312,46465,33253],{"class":1579},[312,46467,336],{"class":1436},[312,46469,33258],{"class":339},[312,46471,33261],{"class":324},[312,46473,46474,46476,46478,46480],{"class":314,"line":3423},[312,46475,35777],{"class":1579},[312,46477,336],{"class":1436},[312,46479,35782],{"class":488},[312,46481,33261],{"class":324},[312,46483,46484,46486,46488,46490,46492,46494,46496],{"class":314,"line":3429},[312,46485,35789],{"class":1579},[312,46487,336],{"class":1436},[312,46489,33288],{"class":324},[312,46491,33291],{"class":1579},[312,46493,336],{"class":1436},[312,46495,37244],{"class":488},[312,46497,33299],{"class":324},[312,46499,46500,46502,46504,46506],{"class":314,"line":3434},[312,46501,35806],{"class":1579},[312,46503,336],{"class":1436},[312,46505,33271],{"class":488},[312,46507,1959],{"class":324},[312,46509,46510,46512,46514,46516,46518,46520],{"class":314,"line":3448},[312,46511,35817],{"class":324},[312,46513,336],{"class":1436},[312,46515,33329],{"class":324},[312,46517,33332],{"class":1579},[312,46519,336],{"class":1436},[312,46521,35828],{"class":324},[312,46523,46524],{"class":314,"line":3453},[312,46525,35833],{"class":318},[312,46527,46528,46530,46532,46534],{"class":314,"line":3459},[312,46529,35838],{"class":1579},[312,46531,336],{"class":1436},[312,46533,1433],{"class":488},[312,46535,33261],{"class":324},[312,46537,46538,46540,46542,46544],{"class":314,"line":3480},[312,46539,35849],{"class":1579},[312,46541,336],{"class":1436},[312,46543,33271],{"class":488},[312,46545,33261],{"class":324},[312,46547,46548,46550,46552,46554],{"class":314,"line":3485},[312,46549,35860],{"class":1579},[312,46551,336],{"class":1436},[312,46553,858],{"class":488},[312,46555,1959],{"class":324},[312,46557,46558,46560],{"class":314,"line":3499},[312,46559,5895],{"class":1436},[312,46561,35873],{"class":324},[312,46563,46564],{"class":314,"line":3504},[312,46565,4205],{"emptyLinePlaceholder":1881},[312,46567,46568],{"class":314,"line":3533},[312,46569,35882],{"class":318},[312,46571,46572,46574,46576],{"class":314,"line":3538},[312,46573,33742],{"class":1436},[312,46575,35889],{"class":332},[312,46577,35892],{"class":324},[312,46579,46580],{"class":314,"line":3555},[312,46581,35897],{"class":318},[312,46583,46584,46586,46588,46590,46592,46594,46596],{"class":314,"line":3560},[312,46585,33032],{"class":324},[312,46587,336],{"class":1436},[312,46589,33039],{"class":339},[312,46591,3510],{"class":1436},[312,46593,33044],{"class":324},[312,46595,3507],{"class":1436},[312,46597,35914],{"class":339},[312,46599,46600,46602,46604],{"class":314,"line":3565},[312,46601,33084],{"class":324},[312,46603,336],{"class":1436},[312,46605,34084],{"class":324},[312,46607,46608],{"class":314,"line":3570},[312,46609,4205],{"emptyLinePlaceholder":1881},[312,46611,46612],{"class":314,"line":3584},[312,46613,35931],{"class":318},[312,46615,46616,46618,46620],{"class":314,"line":3589},[312,46617,35936],{"class":324},[312,46619,336],{"class":1436},[312,46621,34137],{"class":488},[312,46623,46624,46626,46628],{"class":314,"line":4382},[312,46625,35945],{"class":324},[312,46627,336],{"class":1436},[312,46629,4890],{"class":488},[312,46631,46632],{"class":314,"line":4396},[312,46633,4205],{"emptyLinePlaceholder":1881},[312,46635,46636],{"class":314,"line":4404},[312,46637,35958],{"class":318},[312,46639,46640],{"class":314,"line":4409},[312,46641,35963],{"class":318},[312,46643,46644],{"class":314,"line":4415},[312,46645,35968],{"class":318},[312,46647,46648,46650],{"class":314,"line":4421},[312,46649,35973],{"class":1436},[312,46651,34679],{"class":324},[312,46653,46654],{"class":314,"line":4426},[312,46655,35980],{"class":318},[312,46657,46658,46660,46662,46664],{"class":314,"line":9751},[312,46659,5208],{"class":1436},[312,46661,35987],{"class":324},[312,46663,27839],{"class":1436},[312,46665,35992],{"class":324},[312,46667,46668,46670,46672],{"class":314,"line":9775},[312,46669,35997],{"class":324},[312,46671,336],{"class":1436},[312,46673,36002],{"class":324},[312,46675,46676,46678,46680],{"class":314,"line":9780},[312,46677,36007],{"class":324},[312,46679,336],{"class":1436},[312,46681,36012],{"class":324},[312,46683,46684],{"class":314,"line":9786},[312,46685,36017],{"class":318},[312,46687,46688],{"class":314,"line":9813},[312,46689,34670],{"class":324},[312,46691,46692],{"class":314,"line":9818},[312,46693,36026],{"class":318},[312,46695,46696,46698,46700],{"class":314,"line":9824},[312,46697,34455],{"class":324},[312,46699,336],{"class":1436},[312,46701,36035],{"class":324},[312,46703,46704],{"class":314,"line":9836},[312,46705,36040],{"class":318},[312,46707,46708,46710,46712,46714,46716,46718,46720],{"class":314,"line":9848},[312,46709,34472],{"class":324},[312,46711,336],{"class":1436},[312,46713,34477],{"class":324},[312,46715,34480],{"class":1579},[312,46717,336],{"class":1436},[312,46719,1433],{"class":488},[312,46721,1959],{"class":324},[312,46723,46724],{"class":314,"line":9860},[312,46725,36061],{"class":318},[312,46727,46728],{"class":314,"line":11519},[312,46729,36066],{"class":318},[312,46731,46732],{"class":314,"line":11544},[312,46733,36071],{"class":318},[312,46735,46736,46738,46740,46742,46744],{"class":314,"line":11567},[312,46737,36076],{"class":324},[312,46739,11280],{"class":1436},[312,46741,34582],{"class":324},[312,46743,4754],{"class":1436},[312,46745,36085],{"class":324},[312,46747,46748],{"class":314,"line":11591},[312,46749,36090],{"class":318},[312,46751,46752,46754,46756,46758,46760],{"class":314,"line":11596},[312,46753,36095],{"class":324},[312,46755,11280],{"class":1436},[312,46757,36100],{"class":324},[312,46759,858],{"class":488},[312,46761,1959],{"class":324},[312,46763,46764],{"class":314,"line":11601},[312,46765,4205],{"emptyLinePlaceholder":1881},[312,46767,46768],{"class":314,"line":11606},[312,46769,36113],{"class":318},[312,46771,46772,46774,46776,46778,46780],{"class":314,"line":11615},[312,46773,36118],{"class":324},[312,46775,336],{"class":1436},[312,46777,36123],{"class":324},[312,46779,2529],{"class":1436},[312,46781,36128],{"class":324},[312,46783,46784],{"class":314,"line":11620},[312,46785,36133],{"class":318},[312,46787,46788,46790,46792,46794],{"class":314,"line":11626},[312,46789,34246],{"class":488},[312,46791,1576],{"class":324},[312,46793,36142],{"class":339},[312,46795,36145],{"class":324},[312,46797,46798],{"class":314,"line":11647},[312,46799,4205],{"emptyLinePlaceholder":1881},[312,46801,46802],{"class":314,"line":11653},[312,46803,36154],{"class":318},[312,46805,46806,46808,46810,46812,46814],{"class":314,"line":11667},[312,46807,3338],{"class":1436},[312,46809,33015],{"class":488},[312,46811,4754],{"class":1436},[312,46813,33020],{"class":339},[312,46815,5544],{"class":324},[312,46817,46818],{"class":314,"line":11673},[312,46819,36171],{"class":318},[312,46821,46822,46824,46826],{"class":314,"line":11700},[312,46823,33084],{"class":324},[312,46825,336],{"class":1436},[312,46827,46346],{"class":324},[312,46829,46830],{"class":314,"line":11709},[312,46831,36184],{"class":318},[312,46833,46834],{"class":314,"line":11715},[312,46835,36189],{"class":318},[312,46837,46838,46840,46842],{"class":314,"line":11723},[312,46839,36194],{"class":324},[312,46841,36197],{"class":339},[312,46843,32293],{"class":324},[312,46845,46846],{"class":314,"line":11728},[312,46847,36204],{"class":318},[312,46849,46850,46852,46854],{"class":314,"line":18404},[312,46851,35817],{"class":324},[312,46853,336],{"class":1436},[312,46855,36213],{"class":324},[312,46857,46858],{"class":314,"line":18410},[312,46859,36218],{"class":318},[312,46861,46862],{"class":314,"line":18433},[312,46863,36223],{"class":324},[312,46865,46866],{"class":314,"line":18439},[312,46867,4205],{"emptyLinePlaceholder":1881},[312,46869,46870],{"class":314,"line":18462},[312,46871,36232],{"class":318},[312,46873,46874],{"class":314,"line":18476},[312,46875,36237],{"class":318},[312,46877,46878,46880,46882,46884,46886,46888,46890],{"class":314,"line":18496},[312,46879,33032],{"class":324},[312,46881,336],{"class":1436},[312,46883,33039],{"class":339},[312,46885,3510],{"class":1436},[312,46887,33044],{"class":324},[312,46889,3507],{"class":1436},[312,46891,35914],{"class":339},[312,46893,46894,46896,46898],{"class":314,"line":18502},[312,46895,33084],{"class":324},[312,46897,336],{"class":1436},[312,46899,34084],{"class":324},[312,46901,46902],{"class":314,"line":18513},[312,46903,36266],{"class":318},[312,46905,46906],{"class":314,"line":18536},[312,46907,36271],{"class":318},[312,46909,46910,46912,46914,46916,46918,46920,46922,46924,46926,46928,46930,46932,46934,46936,46938,46940,46942,46944,46946,46948,46950,46952,46954],{"class":314,"line":18558},[312,46911,36276],{"class":324},[312,46913,336],{"class":1436},[312,46915,2834],{"class":324},[312,46917,36283],{"class":339},[312,46919,2323],{"class":324},[312,46921,36288],{"class":339},[312,46923,2323],{"class":324},[312,46925,36293],{"class":339},[312,46927,2323],{"class":324},[312,46929,36298],{"class":339},[312,46931,2323],{"class":324},[312,46933,36303],{"class":339},[312,46935,2323],{"class":324},[312,46937,36308],{"class":339},[312,46939,2323],{"class":324},[312,46941,36313],{"class":339},[312,46943,2323],{"class":324},[312,46945,36318],{"class":339},[312,46947,2323],{"class":324},[312,46949,36323],{"class":339},[312,46951,2323],{"class":324},[312,46953,36328],{"class":339},[312,46955,35041],{"class":324},[312,46957,46958,46960],{"class":314,"line":18563},[312,46959,35973],{"class":1436},[312,46961,34679],{"class":324},[312,46963,46964],{"class":314,"line":18569},[312,46965,36341],{"class":318},[312,46967,46968,46970,46972,46974],{"class":314,"line":18583},[312,46969,5208],{"class":1436},[312,46971,36348],{"class":324},[312,46973,27839],{"class":1436},[312,46975,35992],{"class":324},[312,46977,46978,46980,46982],{"class":314,"line":18596},[312,46979,34405],{"class":324},[312,46981,336],{"class":1436},[312,46983,34410],{"class":324},[312,46985,46986,46988,46990],{"class":314,"line":18601},[312,46987,34420],{"class":324},[312,46989,336],{"class":1436},[312,46991,34425],{"class":324},[312,46993,46994],{"class":314,"line":18615},[312,46995,4205],{"emptyLinePlaceholder":1881},[312,46997,46998],{"class":314,"line":18620},[312,46999,36377],{"class":318},[312,47001,47002],{"class":314,"line":18626},[312,47003,34670],{"class":324},[312,47005,47006],{"class":314,"line":18631},[312,47007,36386],{"class":318},[312,47009,47010,47012,47014],{"class":314,"line":18645},[312,47011,34455],{"class":324},[312,47013,336],{"class":1436},[312,47015,34460],{"class":324},[312,47017,47018],{"class":314,"line":18650},[312,47019,36399],{"class":318},[312,47021,47022,47024,47026,47028,47030,47032,47034],{"class":314,"line":18655},[312,47023,34472],{"class":324},[312,47025,336],{"class":1436},[312,47027,34477],{"class":324},[312,47029,34480],{"class":1579},[312,47031,336],{"class":1436},[312,47033,1433],{"class":488},[312,47035,1959],{"class":324},[312,47037,47038],{"class":314,"line":18669},[312,47039,36420],{"class":318},[312,47041,47042,47044,47046],{"class":314,"line":18681},[312,47043,36425],{"class":324},[312,47045,336],{"class":1436},[312,47047,36430],{"class":324},[312,47049,47050,47052,47054],{"class":314,"line":18686},[312,47051,36435],{"class":324},[312,47053,336],{"class":1436},[312,47055,36440],{"class":324},[312,47057,47058,47060,47062,47064,47066,47068,47070,47072],{"class":314,"line":18699},[312,47059,36445],{"class":488},[312,47061,1576],{"class":324},[312,47063,36450],{"class":339},[312,47065,36453],{"class":324},[312,47067,36456],{"class":339},[312,47069,2323],{"class":324},[312,47071,36461],{"class":339},[312,47073,36464],{"class":324},[69,47075,47077],{"id":47076},"_24训练自己的数据集","2.4.训练自己的数据集",[24,47079,47080],{},"猫狗分类任务",[24,47082,47083],{},"划分数据集和验证集",[303,47085,47087],{"className":32174,"code":47086,"language":32176,"meta":308,"style":308},"# 创建脚本，用于划分数据集和验证集\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",[119,47088,47089,47094,47101,47106,47117,47124,47128,47138,47152,47161,47165,47170,47180,47200,47204,47209,47219,47230,47243,47247,47252,47261,47271,47282,47286,47291,47301,47305,47310,47315,47320,47325,47330,47334,47344,47371,47384,47396,47423,47428,47433,47447,47452,47464,47479,47494,47502,47506,47511,47517,47529,47542,47547,47552,47557,47607,47613,47617],{"__ignoreMap":308},[312,47090,47091],{"class":314,"line":315},[312,47092,47093],{"class":318},"# 创建脚本，用于划分数据集和验证集\n",[312,47095,47096,47098],{"class":314,"line":171},[312,47097,32188],{"class":1436},[312,47099,47100],{"class":324}," os\n",[312,47102,47103],{"class":314,"line":274},[312,47104,47105],{"class":318},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[312,47107,47108,47110,47113,47115],{"class":314,"line":298},[312,47109,32533],{"class":1436},[312,47111,47112],{"class":324}," shutil ",[312,47114,32188],{"class":1436},[312,47116,33617],{"class":324},[312,47118,47119,47121],{"class":314,"line":974},[312,47120,32188],{"class":1436},[312,47122,47123],{"class":324}," random\n",[312,47125,47126],{"class":314,"line":980},[312,47127,4205],{"emptyLinePlaceholder":1881},[312,47129,47130,47132,47135],{"class":314,"line":997},[312,47131,33742],{"class":1436},[312,47133,47134],{"class":332}," mkfile",[312,47136,47137],{"class":324},"(file):\n",[312,47139,47140,47142,47144,47147,47150],{"class":314,"line":1003},[312,47141,4906],{"class":1436},[312,47143,40725],{"class":1436},[312,47145,47146],{"class":324}," os.path.exists(",[312,47148,47149],{"class":1579},"file",[312,47151,32582],{"class":324},[312,47153,47154,47157,47159],{"class":314,"line":1020},[312,47155,47156],{"class":324},"        os.makedirs(",[312,47158,47149],{"class":1579},[312,47160,1959],{"class":324},[312,47162,47163],{"class":314,"line":1026},[312,47164,4205],{"emptyLinePlaceholder":1881},[312,47166,47167],{"class":314,"line":3418},[312,47168,47169],{"class":318},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[312,47171,47172,47175,47177],{"class":314,"line":3423},[312,47173,47174],{"class":324},"file_path",[312,47176,336],{"class":1436},[312,47178,47179],{"class":339},"'data_cat_dog'\n",[312,47181,47182,47185,47187,47190,47192,47195,47197],{"class":314,"line":3429},[312,47183,47184],{"class":324},"flower_class",[312,47186,336],{"class":1436},[312,47188,47189],{"class":324},"[cla ",[312,47191,4830],{"class":1436},[312,47193,47194],{"class":324}," cla ",[312,47196,27839],{"class":1436},[312,47198,47199],{"class":324}," os.listdir(file_path)]\n",[312,47201,47202],{"class":314,"line":3434},[312,47203,4205],{"emptyLinePlaceholder":1881},[312,47205,47206],{"class":314,"line":3448},[312,47207,47208],{"class":318},"# 创建训练集train文件夹\n",[312,47210,47211,47214,47217],{"class":314,"line":3453},[312,47212,47213],{"class":324},"mkfile(",[312,47215,47216],{"class":339},"'data\u002Ftrain'",[312,47218,1959],{"class":324},[312,47220,47221,47223,47225,47227],{"class":314,"line":3459},[312,47222,4830],{"class":1436},[312,47224,47194],{"class":324},[312,47226,27839],{"class":1436},[312,47228,47229],{"class":324}," flower_class:\n",[312,47231,47232,47235,47238,47240],{"class":314,"line":3480},[312,47233,47234],{"class":324},"    mkfile(",[312,47236,47237],{"class":339},"'data\u002Ftrain\u002F'",[312,47239,2426],{"class":1436},[312,47241,47242],{"class":324},"cla)\n",[312,47244,47245],{"class":314,"line":3485},[312,47246,4205],{"emptyLinePlaceholder":1881},[312,47248,47249],{"class":314,"line":3499},[312,47250,47251],{"class":318},"# 创建验证集val文件夹\n",[312,47253,47254,47256,47259],{"class":314,"line":3504},[312,47255,47213],{"class":324},[312,47257,47258],{"class":339},"'data\u002Ftest'",[312,47260,1959],{"class":324},[312,47262,47263,47265,47267,47269],{"class":314,"line":3533},[312,47264,4830],{"class":1436},[312,47266,47194],{"class":324},[312,47268,27839],{"class":1436},[312,47270,47229],{"class":324},[312,47272,47273,47275,47278,47280],{"class":314,"line":3538},[312,47274,47234],{"class":324},[312,47276,47277],{"class":339},"'data\u002Ftest\u002F'",[312,47279,2426],{"class":1436},[312,47281,47242],{"class":324},[312,47283,47284],{"class":314,"line":3555},[312,47285,4205],{"emptyLinePlaceholder":1881},[312,47287,47288],{"class":314,"line":3560},[312,47289,47290],{"class":318},"# 划分比例，训练集：测试集=9：1\n",[312,47292,47293,47296,47298],{"class":314,"line":3565},[312,47294,47295],{"class":324},"split_rate",[312,47297,336],{"class":1436},[312,47299,47300],{"class":488},"0.1\n",[312,47302,47303],{"class":314,"line":3570},[312,47304,4205],{"emptyLinePlaceholder":1881},[312,47306,47307],{"class":314,"line":3584},[312,47308,47309],{"class":318},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[312,47311,47312],{"class":314,"line":3589},[312,47313,47314],{"class":318},"# cla_path：当前类别的原始图片路径\n",[312,47316,47317],{"class":314,"line":4382},[312,47318,47319],{"class":318},"# images：当前类别下所有图片的文件名列表\n",[312,47321,47322],{"class":314,"line":4396},[312,47323,47324],{"class":318},"# num：该类别图片总数\n",[312,47326,47327],{"class":314,"line":4404},[312,47328,47329],{"class":318},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[312,47331,47332],{"class":314,"line":4409},[312,47333,4205],{"emptyLinePlaceholder":1881},[312,47335,47336,47338,47340,47342],{"class":314,"line":4415},[312,47337,4830],{"class":1436},[312,47339,47194],{"class":324},[312,47341,27839],{"class":1436},[312,47343,47229],{"class":324},[312,47345,47346,47349,47351,47354,47356,47359,47362,47364,47366,47368],{"class":314,"line":4421},[312,47347,47348],{"class":324},"    cla_path ",[312,47350,336],{"class":1436},[312,47352,47353],{"class":324}," file_path ",[312,47355,2426],{"class":1436},[312,47357,47358],{"class":339}," '\u002F'",[312,47360,47361],{"class":1436}," +",[312,47363,47194],{"class":324},[312,47365,2426],{"class":1436},[312,47367,47358],{"class":339},[312,47369,47370],{"class":318},"  # 某一类别的子目录\n",[312,47372,47373,47376,47378,47381],{"class":314,"line":4426},[312,47374,47375],{"class":324},"    images ",[312,47377,336],{"class":1436},[312,47379,47380],{"class":324}," os.listdir(cla_path)  ",[312,47382,47383],{"class":318},"# iamges 列表存储了该目录下所有图像的名称\n",[312,47385,47386,47389,47391,47393],{"class":314,"line":9751},[312,47387,47388],{"class":324},"    num ",[312,47390,336],{"class":1436},[312,47392,9135],{"class":488},[312,47394,47395],{"class":324},"(images)\n",[312,47397,47398,47401,47403,47406,47408,47410,47412,47415,47417,47420],{"class":314,"line":9775},[312,47399,47400],{"class":324},"    eval_index ",[312,47402,336],{"class":1436},[312,47404,47405],{"class":324}," random.sample(images, ",[312,47407,2438],{"class":1579},[312,47409,336],{"class":1436},[312,47411,1956],{"class":488},[312,47413,47414],{"class":324},"(num ",[312,47416,2400],{"class":1436},[312,47418,47419],{"class":324}," split_rate))  ",[312,47421,47422],{"class":318},"# 从images列表中随机抽取 k 个图像名称\n",[312,47424,47425],{"class":314,"line":9780},[312,47426,47427],{"class":318},"    # 遍历该类别下的所有图片\n",[312,47429,47430],{"class":314,"line":9786},[312,47431,47432],{"class":318},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[312,47434,47435,47437,47440,47442,47444],{"class":314,"line":9813},[312,47436,5006],{"class":1436},[312,47438,47439],{"class":324}," index, image ",[312,47441,27839],{"class":1436},[312,47443,33401],{"class":488},[312,47445,47446],{"class":324},"(images):\n",[312,47448,47449],{"class":314,"line":9818},[312,47450,47451],{"class":318},"        # eval_index 中保存验证集val的图像名称\n",[312,47453,47454,47456,47459,47461],{"class":314,"line":9824},[312,47455,4302],{"class":1436},[312,47457,47458],{"class":324}," image ",[312,47460,27839],{"class":1436},[312,47462,47463],{"class":324}," eval_index:\n",[312,47465,47466,47469,47471,47474,47476],{"class":314,"line":9836},[312,47467,47468],{"class":324},"            image_path ",[312,47470,336],{"class":1436},[312,47472,47473],{"class":324}," cla_path ",[312,47475,2426],{"class":1436},[312,47477,47478],{"class":324}," image\n",[312,47480,47481,47484,47486,47489,47491],{"class":314,"line":9848},[312,47482,47483],{"class":324},"            new_path ",[312,47485,336],{"class":1436},[312,47487,47488],{"class":339}," 'data\u002Ftest\u002F'",[312,47490,47361],{"class":1436},[312,47492,47493],{"class":324}," cla\n",[312,47495,47496,47499],{"class":314,"line":9860},[312,47497,47498],{"class":324},"            copy(image_path, new_path)  ",[312,47500,47501],{"class":318},"# 将选中的图像复制到新路径\n",[312,47503,47504],{"class":314,"line":11519},[312,47505,4205],{"emptyLinePlaceholder":1881},[312,47507,47508],{"class":314,"line":11544},[312,47509,47510],{"class":318},"        # 其余的图像保存在训练集train中\n",[312,47512,47513,47515],{"class":314,"line":11567},[312,47514,4339],{"class":1436},[312,47516,5544],{"class":324},[312,47518,47519,47521,47523,47525,47527],{"class":314,"line":11591},[312,47520,47468],{"class":324},[312,47522,336],{"class":1436},[312,47524,47473],{"class":324},[312,47526,2426],{"class":1436},[312,47528,47478],{"class":324},[312,47530,47531,47533,47535,47538,47540],{"class":314,"line":11596},[312,47532,47483],{"class":324},[312,47534,336],{"class":1436},[312,47536,47537],{"class":339}," 'data\u002Ftrain\u002F'",[312,47539,47361],{"class":1436},[312,47541,47493],{"class":324},[312,47543,47544],{"class":314,"line":11601},[312,47545,47546],{"class":324},"            copy(image_path, new_path)\n",[312,47548,47549],{"class":314,"line":11606},[312,47550,47551],{"class":318},"            # 打印进度条信息\n",[312,47553,47554],{"class":314,"line":11615},[312,47555,47556],{"class":318},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[312,47558,47559,47561,47563,47565,47568,47570,47572,47575,47577,47579,47581,47584,47587,47589,47591,47594,47597,47599,47601,47604],{"class":314,"line":11620},[312,47560,34246],{"class":488},[312,47562,1576],{"class":324},[312,47564,2196],{"class":339},[312,47566,47567],{"class":488},"\\r",[312,47569,2834],{"class":339},[312,47571,34254],{"class":488},[312,47573,47574],{"class":339},"] processing [",[312,47576,34254],{"class":488},[312,47578,2529],{"class":339},[312,47580,34254],{"class":488},[312,47582,47583],{"class":339},"]\"",[312,47585,47586],{"class":324},".format(cla, index ",[312,47588,2426],{"class":1436},[312,47590,26914],{"class":488},[312,47592,47593],{"class":324},", num), ",[312,47595,47596],{"class":1579},"end",[312,47598,336],{"class":1436},[312,47600,495],{"class":339},[312,47602,47603],{"class":324},")  ",[312,47605,47606],{"class":318},"# processing bar\n",[312,47608,47609,47611],{"class":314,"line":11626},[312,47610,33094],{"class":488},[312,47612,3781],{"class":324},[312,47614,47615],{"class":314,"line":11647},[312,47616,4205],{"emptyLinePlaceholder":1881},[312,47618,47619,47621,47623,47626],{"class":314,"line":11653},[312,47620,32211],{"class":488},[312,47622,1576],{"class":324},[312,47624,47625],{"class":339},"\"processing done!\"",[312,47627,1959],{"class":324},[24,47629,47630],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[23796,47632,47634],{"id":47633},"_242模型代码","2.4.2.模型代码",[24,47636,47637],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[303,47639,47641],{"className":32174,"code":47640,"language":32176,"meta":308,"style":308},"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",[119,47642,47643,47649,47659,47669,47673,47689,47697,47711,47721,47725,47755,47759,47793,47839,47843,47877,47923,47927,47931,47965,47995,47999,48007,48021,48043,48065,48083,48087,48101,48105,48109,48125,48129,48137,48151,48161,48205,48209,48237,48241,48251,48279,48283,48319,48323,48351,48355,48365,48397,48429,48457,48461,48471,48503,48535,48567,48599,48631,48659,48663,48673,48705,48737,48749,48753,48765,48769,48773,48785,48793,48813,48817,48821,48825,48829,48833,48837,48851,48859,48867,48879,48893,48901,48905,48913,48923,48933,48943,48953,48963,48969,48973,48977,48989,49009,49017],{"__ignoreMap":308},[312,47644,47645,47647],{"class":314,"line":315},[312,47646,32188],{"class":1436},[312,47648,32191],{"class":324},[312,47650,47651,47653,47655,47657],{"class":314,"line":171},[312,47652,32533],{"class":1436},[312,47654,32536],{"class":324},[312,47656,32188],{"class":1436},[312,47658,32541],{"class":324},[312,47660,47661,47663,47665,47667],{"class":314,"line":274},[312,47662,32533],{"class":1436},[312,47664,32553],{"class":324},[312,47666,32188],{"class":1436},[312,47668,32558],{"class":324},[312,47670,47671],{"class":314,"line":298},[312,47672,4205],{"emptyLinePlaceholder":1881},[312,47674,47675,47677,47679,47681,47683,47685,47687],{"class":314,"line":974},[312,47676,16495],{"class":1436},[312,47678,43288],{"class":332},[312,47680,1576],{"class":324},[312,47682,32574],{"class":332},[312,47684,2503],{"class":324},[312,47686,32579],{"class":332},[312,47688,32582],{"class":324},[312,47690,47691,47693,47695],{"class":314,"line":980},[312,47692,32597],{"class":1436},[312,47694,32600],{"class":488},[312,47696,43307],{"class":324},[312,47698,47699,47701,47703,47705,47707,47709],{"class":314,"line":997},[312,47700,32613],{"class":488},[312,47702,43314],{"class":324},[312,47704,32619],{"class":488},[312,47706,32622],{"class":324},[312,47708,32625],{"class":488},[312,47710,3781],{"class":324},[312,47712,47713,47715,47717,47719],{"class":314,"line":1003},[312,47714,32641],{"class":488},[312,47716,36566],{"class":324},[312,47718,336],{"class":1436},[312,47720,36571],{"class":324},[312,47722,47723],{"class":314,"line":1020},[312,47724,43337],{"class":318},[312,47726,47727,47729,47731,47733,47735,47737,47739,47741,47743,47745,47747,47749,47751,47753],{"class":314,"line":1026},[312,47728,32641],{"class":488},[312,47730,43344],{"class":324},[312,47732,336],{"class":1436},[312,47734,32649],{"class":324},[312,47736,32652],{"class":1579},[312,47738,336],{"class":1436},[312,47740,43355],{"class":324},[312,47742,32661],{"class":1579},[312,47744,336],{"class":1436},[312,47746,43362],{"class":324},[312,47748,32670],{"class":1579},[312,47750,336],{"class":1436},[312,47752,1433],{"class":488},[312,47754,1959],{"class":324},[312,47756,47757],{"class":314,"line":3418},[312,47758,43375],{"class":318},[312,47760,47761,47763,47765,47767,47769,47771,47773,47775,47777,47779,47781,47783,47785,47787,47789,47791],{"class":314,"line":3423},[312,47762,32641],{"class":488},[312,47764,43382],{"class":324},[312,47766,336],{"class":1436},[312,47768,32649],{"class":324},[312,47770,32652],{"class":1579},[312,47772,336],{"class":1436},[312,47774,43355],{"class":324},[312,47776,32661],{"class":1579},[312,47778,336],{"class":1436},[312,47780,43399],{"class":324},[312,47782,858],{"class":488},[312,47784,43404],{"class":324},[312,47786,32670],{"class":1579},[312,47788,336],{"class":1436},[312,47790,1433],{"class":488},[312,47792,1959],{"class":324},[312,47794,47795,47797,47799,47801,47803,47805,47807,47809,47811,47813,47815,47817,47819,47821,47823,47825,47827,47829,47831,47833,47835,47837],{"class":314,"line":3429},[312,47796,32641],{"class":488},[312,47798,43419],{"class":324},[312,47800,336],{"class":1436},[312,47802,32649],{"class":324},[312,47804,32652],{"class":1579},[312,47806,336],{"class":1436},[312,47808,43399],{"class":324},[312,47810,858],{"class":488},[312,47812,43404],{"class":324},[312,47814,32661],{"class":1579},[312,47816,336],{"class":1436},[312,47818,43399],{"class":324},[312,47820,1433],{"class":488},[312,47822,43404],{"class":324},[312,47824,32670],{"class":1579},[312,47826,336],{"class":1436},[312,47828,2021],{"class":488},[312,47830,2323],{"class":324},[312,47832,1340],{"class":1579},[312,47834,336],{"class":1436},[312,47836,1433],{"class":488},[312,47838,1959],{"class":324},[312,47840,47841],{"class":314,"line":3434},[312,47842,43464],{"class":318},[312,47844,47845,47847,47849,47851,47853,47855,47857,47859,47861,47863,47865,47867,47869,47871,47873,47875],{"class":314,"line":3448},[312,47846,32641],{"class":488},[312,47848,43471],{"class":324},[312,47850,336],{"class":1436},[312,47852,32649],{"class":324},[312,47854,32652],{"class":1579},[312,47856,336],{"class":1436},[312,47858,43355],{"class":324},[312,47860,32661],{"class":1579},[312,47862,336],{"class":1436},[312,47864,43488],{"class":324},[312,47866,858],{"class":488},[312,47868,43404],{"class":324},[312,47870,32670],{"class":1579},[312,47872,336],{"class":1436},[312,47874,1433],{"class":488},[312,47876,1959],{"class":324},[312,47878,47879,47881,47883,47885,47887,47889,47891,47893,47895,47897,47899,47901,47903,47905,47907,47909,47911,47913,47915,47917,47919,47921],{"class":314,"line":3453},[312,47880,32641],{"class":488},[312,47882,43507],{"class":324},[312,47884,336],{"class":1436},[312,47886,32649],{"class":324},[312,47888,32652],{"class":1579},[312,47890,336],{"class":1436},[312,47892,43488],{"class":324},[312,47894,858],{"class":488},[312,47896,43404],{"class":324},[312,47898,32661],{"class":1579},[312,47900,336],{"class":1436},[312,47902,43488],{"class":324},[312,47904,1433],{"class":488},[312,47906,43404],{"class":324},[312,47908,32670],{"class":1579},[312,47910,336],{"class":1436},[312,47912,2264],{"class":488},[312,47914,2323],{"class":324},[312,47916,1340],{"class":1579},[312,47918,336],{"class":1436},[312,47920,2027],{"class":488},[312,47922,1959],{"class":324},[312,47924,47925],{"class":314,"line":3459},[312,47926,43552],{"class":318},[312,47928,47929],{"class":314,"line":3480},[312,47930,43557],{"class":318},[312,47932,47933,47935,47937,47939,47941,47943,47945,47947,47949,47951,47953,47955,47957,47959,47961,47963],{"class":314,"line":3485},[312,47934,32641],{"class":488},[312,47936,43564],{"class":324},[312,47938,336],{"class":1436},[312,47940,36624],{"class":324},[312,47942,32670],{"class":1579},[312,47944,336],{"class":1436},[312,47946,2021],{"class":488},[312,47948,2323],{"class":324},[312,47950,32724],{"class":1579},[312,47952,336],{"class":1436},[312,47954,1433],{"class":488},[312,47956,2323],{"class":324},[312,47958,1340],{"class":1579},[312,47960,336],{"class":1436},[312,47962,1433],{"class":488},[312,47964,1959],{"class":324},[312,47966,47967,47969,47971,47973,47975,47977,47979,47981,47983,47985,47987,47989,47991,47993],{"class":314,"line":3499},[312,47968,32641],{"class":488},[312,47970,43599],{"class":324},[312,47972,336],{"class":1436},[312,47974,32649],{"class":324},[312,47976,32652],{"class":1579},[312,47978,336],{"class":1436},[312,47980,43355],{"class":324},[312,47982,32661],{"class":1579},[312,47984,336],{"class":1436},[312,47986,43616],{"class":324},[312,47988,32670],{"class":1579},[312,47990,336],{"class":1436},[312,47992,1433],{"class":488},[312,47994,1959],{"class":324},[312,47996,47997],{"class":314,"line":3504},[312,47998,4205],{"emptyLinePlaceholder":1881},[312,48000,48001,48003,48005],{"class":314,"line":3533},[312,48002,32597],{"class":1436},[312,48004,32888],{"class":332},[312,48006,32891],{"class":324},[312,48008,48009,48011,48013,48015,48017,48019],{"class":314,"line":3538},[312,48010,43641],{"class":324},[312,48012,336],{"class":1436},[312,48014,32619],{"class":488},[312,48016,36979],{"class":324},[312,48018,32619],{"class":488},[312,48020,43652],{"class":324},[312,48022,48023,48025,48027,48029,48031,48033,48035,48037,48039,48041],{"class":314,"line":3555},[312,48024,8889],{"class":324},[312,48026,336],{"class":1436},[312,48028,32619],{"class":488},[312,48030,36979],{"class":324},[312,48032,32619],{"class":488},[312,48034,43667],{"class":324},[312,48036,32619],{"class":488},[312,48038,36979],{"class":324},[312,48040,32619],{"class":488},[312,48042,43676],{"class":324},[312,48044,48045,48047,48049,48051,48053,48055,48057,48059,48061,48063],{"class":314,"line":3560},[312,48046,43681],{"class":324},[312,48048,336],{"class":1436},[312,48050,32619],{"class":488},[312,48052,36979],{"class":324},[312,48054,32619],{"class":488},[312,48056,43692],{"class":324},[312,48058,32619],{"class":488},[312,48060,36979],{"class":324},[312,48062,32619],{"class":488},[312,48064,43701],{"class":324},[312,48066,48067,48069,48071,48073,48075,48077,48079,48081],{"class":314,"line":3565},[312,48068,43706],{"class":324},[312,48070,336],{"class":1436},[312,48072,32619],{"class":488},[312,48074,36979],{"class":324},[312,48076,32619],{"class":488},[312,48078,43717],{"class":324},[312,48080,32619],{"class":488},[312,48082,43722],{"class":324},[312,48084,48085],{"class":314,"line":3570},[312,48086,43727],{"class":318},[312,48088,48089,48091,48093,48095,48097,48099],{"class":314,"line":3584},[312,48090,16553],{"class":1436},[312,48092,43734],{"class":324},[312,48094,34480],{"class":1579},[312,48096,336],{"class":1436},[312,48098,1433],{"class":488},[312,48100,1959],{"class":324},[312,48102,48103],{"class":314,"line":3589},[312,48104,4205],{"emptyLinePlaceholder":1881},[312,48106,48107],{"class":314,"line":4382},[312,48108,43755],{"class":318},[312,48110,48111,48113,48115,48117,48119,48121,48123],{"class":314,"line":4396},[312,48112,16495],{"class":1436},[312,48114,43762],{"class":332},[312,48116,1576],{"class":324},[312,48118,32574],{"class":332},[312,48120,2503],{"class":324},[312,48122,32579],{"class":332},[312,48124,32582],{"class":324},[312,48126,48127],{"class":314,"line":4404},[312,48128,43777],{"class":318},[312,48130,48131,48133,48135],{"class":314,"line":4409},[312,48132,32597],{"class":1436},[312,48134,32600],{"class":488},[312,48136,43786],{"class":324},[312,48138,48139,48141,48143,48145,48147,48149],{"class":314,"line":4415},[312,48140,32613],{"class":488},[312,48142,43793],{"class":324},[312,48144,32619],{"class":488},[312,48146,32622],{"class":324},[312,48148,32625],{"class":488},[312,48150,3781],{"class":324},[312,48152,48153,48155,48157,48159],{"class":314,"line":4421},[312,48154,32641],{"class":488},[312,48156,43808],{"class":324},[312,48158,336],{"class":1436},[312,48160,39804],{"class":324},[312,48162,48163,48165,48167,48169,48171,48173,48175,48177,48179,48181,48183,48185,48187,48189,48191,48193,48195,48197,48199,48201,48203],{"class":314,"line":4426},[312,48164,39809],{"class":324},[312,48166,32652],{"class":1579},[312,48168,336],{"class":1436},[312,48170,2021],{"class":488},[312,48172,2323],{"class":324},[312,48174,32661],{"class":1579},[312,48176,336],{"class":1436},[312,48178,2150],{"class":488},[312,48180,2323],{"class":324},[312,48182,32670],{"class":1579},[312,48184,336],{"class":1436},[312,48186,2314],{"class":488},[312,48188,2323],{"class":324},[312,48190,32724],{"class":1579},[312,48192,336],{"class":1436},[312,48194,2027],{"class":488},[312,48196,2323],{"class":324},[312,48198,1340],{"class":1579},[312,48200,336],{"class":1436},[312,48202,2021],{"class":488},[312,48204,39842],{"class":324},[312,48206,48207],{"class":314,"line":9751},[312,48208,39847],{"class":324},[312,48210,48211,48213,48215,48217,48219,48221,48223,48225,48227,48229,48231,48233,48235],{"class":314,"line":9775},[312,48212,39892],{"class":324},[312,48214,32670],{"class":1579},[312,48216,336],{"class":1436},[312,48218,2021],{"class":488},[312,48220,2323],{"class":324},[312,48222,32724],{"class":1579},[312,48224,336],{"class":1436},[312,48226,2027],{"class":488},[312,48228,2323],{"class":324},[312,48230,1340],{"class":1579},[312,48232,336],{"class":1436},[312,48234,1433],{"class":488},[312,48236,1959],{"class":324},[312,48238,48239],{"class":314,"line":9780},[312,48240,39921],{"class":324},[312,48242,48243,48245,48247,48249],{"class":314,"line":9786},[312,48244,32641],{"class":488},[312,48246,43899],{"class":324},[312,48248,336],{"class":1436},[312,48250,39804],{"class":324},[312,48252,48253,48255,48257,48259,48261,48263,48265,48267,48269,48271,48273,48275,48277],{"class":314,"line":9813},[312,48254,39809],{"class":324},[312,48256,32652],{"class":1579},[312,48258,336],{"class":1436},[312,48260,2150],{"class":488},[312,48262,2323],{"class":324},[312,48264,32661],{"class":1579},[312,48266,336],{"class":1436},[312,48268,2150],{"class":488},[312,48270,2323],{"class":324},[312,48272,32670],{"class":1579},[312,48274,336],{"class":1436},[312,48276,1433],{"class":488},[312,48278,39842],{"class":324},[312,48280,48281],{"class":314,"line":9818},[312,48282,39847],{"class":324},[312,48284,48285,48287,48289,48291,48293,48295,48297,48299,48301,48303,48305,48307,48309,48311,48313,48315,48317],{"class":314,"line":9824},[312,48286,39809],{"class":324},[312,48288,32652],{"class":1579},[312,48290,336],{"class":1436},[312,48292,2150],{"class":488},[312,48294,2323],{"class":324},[312,48296,32661],{"class":1579},[312,48298,336],{"class":1436},[312,48300,43954],{"class":488},[312,48302,2323],{"class":324},[312,48304,32670],{"class":1579},[312,48306,336],{"class":1436},[312,48308,2021],{"class":488},[312,48310,2323],{"class":324},[312,48312,1340],{"class":1579},[312,48314,336],{"class":1436},[312,48316,1433],{"class":488},[312,48318,39842],{"class":324},[312,48320,48321],{"class":314,"line":9836},[312,48322,39847],{"class":324},[312,48324,48325,48327,48329,48331,48333,48335,48337,48339,48341,48343,48345,48347,48349],{"class":314,"line":9848},[312,48326,39892],{"class":324},[312,48328,32670],{"class":1579},[312,48330,336],{"class":1436},[312,48332,2021],{"class":488},[312,48334,2323],{"class":324},[312,48336,32724],{"class":1579},[312,48338,336],{"class":1436},[312,48340,2027],{"class":488},[312,48342,2323],{"class":324},[312,48344,1340],{"class":1579},[312,48346,336],{"class":1436},[312,48348,1433],{"class":488},[312,48350,1959],{"class":324},[312,48352,48353],{"class":314,"line":9860},[312,48354,39921],{"class":324},[312,48356,48357,48359,48361,48363],{"class":314,"line":11519},[312,48358,32641],{"class":488},[312,48360,44015],{"class":324},[312,48362,336],{"class":1436},[312,48364,39804],{"class":324},[312,48366,48367,48369,48371,48373,48375,48377,48379,48381,48383,48385,48387,48389,48391,48393,48395],{"class":314,"line":11544},[312,48368,44024],{"class":324},[312,48370,43954],{"class":488},[312,48372,2323],{"class":324},[312,48374,2150],{"class":488},[312,48376,44033],{"class":324},[312,48378,2156],{"class":488},[312,48380,2323],{"class":324},[312,48382,33865],{"class":488},[312,48384,44042],{"class":324},[312,48386,2546],{"class":488},[312,48388,2323],{"class":324},[312,48390,2144],{"class":488},[312,48392,44051],{"class":324},[312,48394,2144],{"class":488},[312,48396,39842],{"class":324},[312,48398,48399,48401,48403,48405,48407,48409,48411,48413,48415,48417,48419,48421,48423,48425,48427],{"class":314,"line":11567},[312,48400,44024],{"class":324},[312,48402,36665],{"class":488},[312,48404,2323],{"class":324},[312,48406,33865],{"class":488},[312,48408,44033],{"class":324},[312,48410,33865],{"class":488},[312,48412,2323],{"class":324},[312,48414,43954],{"class":488},[312,48416,44042],{"class":324},[312,48418,2144],{"class":488},[312,48420,2323],{"class":324},[312,48422,2156],{"class":488},[312,48424,44051],{"class":324},[312,48426,2150],{"class":488},[312,48428,39842],{"class":324},[312,48430,48431,48433,48435,48437,48439,48441,48443,48445,48447,48449,48451,48453,48455],{"class":314,"line":11591},[312,48432,39892],{"class":324},[312,48434,32670],{"class":1579},[312,48436,336],{"class":1436},[312,48438,2021],{"class":488},[312,48440,2323],{"class":324},[312,48442,32724],{"class":1579},[312,48444,336],{"class":1436},[312,48446,2027],{"class":488},[312,48448,2323],{"class":324},[312,48450,1340],{"class":1579},[312,48452,336],{"class":1436},[312,48454,1433],{"class":488},[312,48456,1959],{"class":324},[312,48458,48459],{"class":314,"line":11596},[312,48460,39921],{"class":324},[312,48462,48463,48465,48467,48469],{"class":314,"line":11601},[312,48464,32641],{"class":488},[312,48466,44126],{"class":324},[312,48468,336],{"class":1436},[312,48470,39804],{"class":324},[312,48472,48473,48475,48477,48479,48481,48483,48485,48487,48489,48491,48493,48495,48497,48499,48501],{"class":314,"line":11606},[312,48474,44024],{"class":324},[312,48476,44137],{"class":488},[312,48478,2323],{"class":324},[312,48480,43954],{"class":488},[312,48482,44033],{"class":324},[312,48484,2156],{"class":488},[312,48486,2323],{"class":324},[312,48488,44150],{"class":488},[312,48490,44042],{"class":324},[312,48492,2546],{"class":488},[312,48494,2323],{"class":324},[312,48496,2552],{"class":488},[312,48498,44051],{"class":324},[312,48500,2150],{"class":488},[312,48502,39842],{"class":324},[312,48504,48505,48507,48509,48511,48513,48515,48517,48519,48521,48523,48525,48527,48529,48531,48533],{"class":314,"line":11615},[312,48506,44024],{"class":324},[312,48508,40252],{"class":488},[312,48510,2323],{"class":324},[312,48512,22847],{"class":488},[312,48514,44033],{"class":324},[312,48516,2563],{"class":488},[312,48518,2323],{"class":324},[312,48520,33296],{"class":488},[312,48522,44042],{"class":324},[312,48524,2744],{"class":488},[312,48526,2323],{"class":324},[312,48528,2150],{"class":488},[312,48530,44051],{"class":324},[312,48532,2150],{"class":488},[312,48534,39842],{"class":324},[312,48536,48537,48539,48541,48543,48545,48547,48549,48551,48553,48555,48557,48559,48561,48563,48565],{"class":314,"line":11620},[312,48538,44024],{"class":324},[312,48540,40252],{"class":488},[312,48542,2323],{"class":324},[312,48544,33865],{"class":488},[312,48546,44033],{"class":324},[312,48548,33865],{"class":488},[312,48550,2323],{"class":324},[312,48552,36665],{"class":488},[312,48554,44042],{"class":324},[312,48556,2744],{"class":488},[312,48558,2323],{"class":324},[312,48560,2150],{"class":488},[312,48562,44051],{"class":324},[312,48564,2150],{"class":488},[312,48566,39842],{"class":324},[312,48568,48569,48571,48573,48575,48577,48579,48581,48583,48585,48587,48589,48591,48593,48595,48597],{"class":314,"line":11626},[312,48570,44024],{"class":324},[312,48572,40252],{"class":488},[312,48574,2323],{"class":324},[312,48576,2563],{"class":488},[312,48578,44033],{"class":324},[312,48580,33865],{"class":488},[312,48582,2323],{"class":324},[312,48584,44247],{"class":488},[312,48586,44042],{"class":324},[312,48588,2144],{"class":488},[312,48590,2323],{"class":324},[312,48592,2150],{"class":488},[312,48594,44051],{"class":324},[312,48596,2150],{"class":488},[312,48598,39842],{"class":324},[312,48600,48601,48603,48605,48607,48609,48611,48613,48615,48617,48619,48621,48623,48625,48627,48629],{"class":314,"line":11647},[312,48602,44024],{"class":324},[312,48604,44268],{"class":488},[312,48606,2323],{"class":324},[312,48608,36665],{"class":488},[312,48610,44033],{"class":324},[312,48612,22847],{"class":488},[312,48614,2323],{"class":324},[312,48616,44281],{"class":488},[312,48618,44042],{"class":324},[312,48620,2144],{"class":488},[312,48622,2323],{"class":324},[312,48624,33865],{"class":488},[312,48626,44051],{"class":324},[312,48628,33865],{"class":488},[312,48630,39842],{"class":324},[312,48632,48633,48635,48637,48639,48641,48643,48645,48647,48649,48651,48653,48655,48657],{"class":314,"line":11653},[312,48634,39892],{"class":324},[312,48636,32670],{"class":1579},[312,48638,336],{"class":1436},[312,48640,2021],{"class":488},[312,48642,2323],{"class":324},[312,48644,32724],{"class":1579},[312,48646,336],{"class":1436},[312,48648,2027],{"class":488},[312,48650,2323],{"class":324},[312,48652,1340],{"class":1579},[312,48654,336],{"class":1436},[312,48656,1433],{"class":488},[312,48658,1959],{"class":324},[312,48660,48661],{"class":314,"line":11667},[312,48662,39921],{"class":324},[312,48664,48665,48667,48669,48671],{"class":314,"line":11673},[312,48666,32641],{"class":488},[312,48668,44334],{"class":324},[312,48670,336],{"class":1436},[312,48672,39804],{"class":324},[312,48674,48675,48677,48679,48681,48683,48685,48687,48689,48691,48693,48695,48697,48699,48701,48703],{"class":314,"line":11700},[312,48676,44024],{"class":324},[312,48678,44345],{"class":488},[312,48680,2323],{"class":324},[312,48682,36665],{"class":488},[312,48684,44033],{"class":324},[312,48686,22847],{"class":488},[312,48688,2323],{"class":324},[312,48690,44281],{"class":488},[312,48692,44042],{"class":324},[312,48694,2144],{"class":488},[312,48696,2323],{"class":324},[312,48698,33865],{"class":488},[312,48700,44051],{"class":324},[312,48702,33865],{"class":488},[312,48704,39842],{"class":324},[312,48706,48707,48709,48711,48713,48715,48717,48719,48721,48723,48725,48727,48729,48731,48733,48735],{"class":314,"line":11709},[312,48708,44024],{"class":324},[312,48710,44345],{"class":488},[312,48712,2323],{"class":324},[312,48714,36735],{"class":488},[312,48716,44033],{"class":324},[312,48718,43954],{"class":488},[312,48720,2323],{"class":324},[312,48722,36735],{"class":488},[312,48724,44042],{"class":324},[312,48726,2552],{"class":488},[312,48728,2323],{"class":324},[312,48730,33865],{"class":488},[312,48732,44051],{"class":324},[312,48734,33865],{"class":488},[312,48736,39842],{"class":324},[312,48738,48739,48741,48743,48745,48747],{"class":314,"line":11715},[312,48740,44408],{"class":324},[312,48742,1433],{"class":488},[312,48744,2323],{"class":324},[312,48746,1433],{"class":488},[312,48748,44417],{"class":324},[312,48750,48751],{"class":314,"line":11723},[312,48752,40585],{"class":324},[312,48754,48755,48757,48759,48761,48763],{"class":314,"line":11728},[312,48756,40590],{"class":324},[312,48758,44428],{"class":488},[312,48760,2323],{"class":324},[312,48762,2027],{"class":488},[312,48764,1959],{"class":324},[312,48766,48767],{"class":314,"line":18404},[312,48768,39921],{"class":324},[312,48770,48771],{"class":314,"line":18410},[312,48772,44443],{"class":318},[312,48774,48775,48777,48779,48781,48783],{"class":314,"line":18433},[312,48776,5208],{"class":1436},[312,48778,40663],{"class":324},[312,48780,27839],{"class":1436},[312,48782,40668],{"class":488},[312,48784,40671],{"class":324},[312,48786,48787,48789,48791],{"class":314,"line":18439},[312,48788,6447],{"class":1436},[312,48790,40683],{"class":488},[312,48792,40686],{"class":324},[312,48794,48795,48797,48799,48801,48803,48805,48807,48809,48811],{"class":314,"line":18462},[312,48796,40696],{"class":324},[312,48798,44470],{"class":1579},[312,48800,336],{"class":1436},[312,48802,44475],{"class":339},[312,48804,2323],{"class":324},[312,48806,40699],{"class":1579},[312,48808,336],{"class":1436},[312,48810,40704],{"class":339},[312,48812,1959],{"class":324},[312,48814,48815],{"class":314,"line":18476},[312,48816,44490],{"class":318},[312,48818,48819],{"class":314,"line":18496},[312,48820,44495],{"class":318},[312,48822,48823],{"class":314,"line":18502},[312,48824,44500],{"class":318},[312,48826,48827],{"class":314,"line":18513},[312,48828,44505],{"class":318},[312,48830,48831],{"class":314,"line":18536},[312,48832,44510],{"class":318},[312,48834,48835],{"class":314,"line":18558},[312,48836,44515],{"class":318},[312,48838,48839,48841,48843,48845,48847,48849],{"class":314,"line":18563},[312,48840,40716],{"class":1436},[312,48842,40719],{"class":324},[312,48844,40722],{"class":1436},[312,48846,40725],{"class":1436},[312,48848,40728],{"class":488},[312,48850,5544],{"class":324},[312,48852,48853,48855,48857],{"class":314,"line":18569},[312,48854,40740],{"class":324},[312,48856,858],{"class":488},[312,48858,1959],{"class":324},[312,48860,48861,48863,48865],{"class":314,"line":18583},[312,48862,44542],{"class":1436},[312,48864,40683],{"class":488},[312,48866,40759],{"class":324},[312,48868,48869,48871,48873,48875,48877],{"class":314,"line":18596},[312,48870,44551],{"class":324},[312,48872,858],{"class":488},[312,48874,2323],{"class":324},[312,48876,40781],{"class":488},[312,48878,1959],{"class":324},[312,48880,48881,48883,48885,48887,48889,48891],{"class":314,"line":18601},[312,48882,44564],{"class":1436},[312,48884,40719],{"class":324},[312,48886,40722],{"class":1436},[312,48888,40725],{"class":1436},[312,48890,40728],{"class":488},[312,48892,5544],{"class":324},[312,48894,48895,48897,48899],{"class":314,"line":18615},[312,48896,44579],{"class":324},[312,48898,858],{"class":488},[312,48900,1959],{"class":324},[312,48902,48903],{"class":314,"line":18620},[312,48904,36960],{"class":318},[312,48906,48907,48909,48911],{"class":314,"line":18626},[312,48908,32597],{"class":1436},[312,48910,32888],{"class":332},[312,48912,32891],{"class":324},[312,48914,48915,48917,48919,48921],{"class":314,"line":18631},[312,48916,32896],{"class":324},[312,48918,336],{"class":1436},[312,48920,32619],{"class":488},[312,48922,44606],{"class":324},[312,48924,48925,48927,48929,48931],{"class":314,"line":18645},[312,48926,32896],{"class":324},[312,48928,336],{"class":1436},[312,48930,32619],{"class":488},[312,48932,44617],{"class":324},[312,48934,48935,48937,48939,48941],{"class":314,"line":18650},[312,48936,32896],{"class":324},[312,48938,336],{"class":1436},[312,48940,32619],{"class":488},[312,48942,44628],{"class":324},[312,48944,48945,48947,48949,48951],{"class":314,"line":18655},[312,48946,32896],{"class":324},[312,48948,336],{"class":1436},[312,48950,32619],{"class":488},[312,48952,44639],{"class":324},[312,48954,48955,48957,48959,48961],{"class":314,"line":18669},[312,48956,32896],{"class":324},[312,48958,336],{"class":1436},[312,48960,32619],{"class":488},[312,48962,44650],{"class":324},[312,48964,48965,48967],{"class":314,"line":18681},[312,48966,16553],{"class":1436},[312,48968,33004],{"class":324},[312,48970,48971],{"class":314,"line":18686},[312,48972,4205],{"emptyLinePlaceholder":1881},[312,48974,48975],{"class":314,"line":18699},[312,48976,44665],{"class":318},[312,48978,48979,48981,48983,48985,48987],{"class":314,"line":18704},[312,48980,3338],{"class":1436},[312,48982,33015],{"class":488},[312,48984,4754],{"class":1436},[312,48986,33020],{"class":339},[312,48988,5544],{"class":324},[312,48990,48991,48993,48995,48997,48999,49001,49003,49005,49007],{"class":314,"line":18709},[312,48992,33032],{"class":324},[312,48994,336],{"class":1436},[312,48996,32247],{"class":324},[312,48998,33039],{"class":339},[312,49000,3510],{"class":1436},[312,49002,33044],{"class":324},[312,49004,3507],{"class":1436},[312,49006,32272],{"class":339},[312,49008,1959],{"class":324},[312,49010,49011,49013,49015],{"class":314,"line":18714},[312,49012,33084],{"class":324},[312,49014,336],{"class":1436},[312,49016,44706],{"class":324},[312,49018,49019,49021,49023,49025,49027,49029,49031,49033],{"class":314,"line":18727},[312,49020,33094],{"class":488},[312,49022,33097],{"class":324},[312,49024,1433],{"class":488},[312,49026,2323],{"class":324},[312,49028,33296],{"class":488},[312,49030,2323],{"class":324},[312,49032,33296],{"class":488},[312,49034,33110],{"class":324},[23796,49036,49038],{"id":49037},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[24,49040,49041],{},"计算图片的均值与方差，用于训练中归一化处理操作",[303,49043,49045],{"className":32174,"code":49044,"language":32176,"meta":308,"style":308},"# 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",[119,49046,49047,49052,49065,49070,49076,49081,49091,49095,49100,49110,49114,49119,49129,49146,49150,49155,49167,49179,49210,49219,49229,49239,49243,49248,49263,49267,49272,49277,49282,49292,49297,49322,49326,49331,49346,49350,49363,49367,49372,49377,49382,49387,49392,49402,49412,49435,49443,49451,49459,49463,49475,49479,49484,49488,49492,49499,49519,49543,49550,49564,49569,49574,49578,49592,49596,49608],{"__ignoreMap":308},[312,49048,49049],{"class":314,"line":315},[312,49050,49051],{"class":318},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[312,49053,49054,49056,49059,49062],{"class":314,"line":171},[312,49055,32533],{"class":1436},[312,49057,49058],{"class":488}," PIL",[312,49060,49061],{"class":1436}," import",[312,49063,49064],{"class":324}," Image\n",[312,49066,49067],{"class":314,"line":274},[312,49068,49069],{"class":318},"# os 用来处理文件夹和文件路径\n",[312,49071,49072,49074],{"class":314,"line":298},[312,49073,32188],{"class":1436},[312,49075,47100],{"class":324},[312,49077,49078],{"class":314,"line":974},[312,49079,49080],{"class":318},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[312,49082,49083,49085,49087,49089],{"class":314,"line":980},[312,49084,32188],{"class":1436},[312,49086,33175],{"class":324},[312,49088,33178],{"class":1436},[312,49090,33181],{"class":324},[312,49092,49093],{"class":314,"line":997},[312,49094,4205],{"emptyLinePlaceholder":1881},[312,49096,49097],{"class":314,"line":1003},[312,49098,49099],{"class":318},"# 文件夹路径，包含所有图片文件\n",[312,49101,49102,49105,49107],{"class":314,"line":1020},[312,49103,49104],{"class":324},"folder_path ",[312,49106,336],{"class":1436},[312,49108,49109],{"class":339}," 'data_cat_dog'\n",[312,49111,49112],{"class":314,"line":1026},[312,49113,4205],{"emptyLinePlaceholder":1881},[312,49115,49116],{"class":314,"line":3418},[312,49117,49118],{"class":318},"# 初始化累积变量\n",[312,49120,49121,49124,49126],{"class":314,"line":3423},[312,49122,49123],{"class":324},"total_pixels ",[312,49125,336],{"class":1436},[312,49127,49128],{"class":488}," 0\n",[312,49130,49131,49134,49136,49139,49141,49143],{"class":314,"line":3429},[312,49132,49133],{"class":324},"sum_normalized_pixel_values ",[312,49135,336],{"class":1436},[312,49137,49138],{"class":324}," np.zeros(",[312,49140,2021],{"class":488},[312,49142,47603],{"class":324},[312,49144,49145],{"class":318},"# 如果是RGB图像，需要三个通道的均值和方差\n",[312,49147,49148],{"class":314,"line":3434},[312,49149,4205],{"emptyLinePlaceholder":1881},[312,49151,49152],{"class":314,"line":3448},[312,49153,49154],{"class":318},"# 遍历文件夹中的图片文件\n",[312,49156,49157,49159,49162,49164],{"class":314,"line":3453},[312,49158,4830],{"class":1436},[312,49160,49161],{"class":324}," root, dirs, files ",[312,49163,27839],{"class":1436},[312,49165,49166],{"class":324}," os.walk(folder_path):\n",[312,49168,49169,49171,49174,49176],{"class":314,"line":3459},[312,49170,5006],{"class":1436},[312,49172,49173],{"class":324}," filename ",[312,49175,27839],{"class":1436},[312,49177,49178],{"class":324}," files:\n",[312,49180,49181,49183,49186,49189,49191,49194,49196,49199,49201,49204,49207],{"class":314,"line":3480},[312,49182,4302],{"class":1436},[312,49184,49185],{"class":324}," filename.endswith((",[312,49187,49188],{"class":339},"'.jpg'",[312,49190,733],{"class":324},[312,49192,49193],{"class":339},"'.jpeg'",[312,49195,733],{"class":324},[312,49197,49198],{"class":339},"'.png'",[312,49200,733],{"class":324},[312,49202,49203],{"class":339},"'.bmp'",[312,49205,49206],{"class":324},")):  ",[312,49208,49209],{"class":318},"# 可根据实际情况添加其他格式\n",[312,49211,49212,49214,49216],{"class":314,"line":3485},[312,49213,47468],{"class":324},[312,49215,336],{"class":1436},[312,49217,49218],{"class":324}," os.path.join(root, filename)\n",[312,49220,49221,49224,49226],{"class":314,"line":3499},[312,49222,49223],{"class":324},"            image ",[312,49225,336],{"class":1436},[312,49227,49228],{"class":324}," Image.open(image_path)\n",[312,49230,49231,49234,49236],{"class":314,"line":3504},[312,49232,49233],{"class":324},"            image_array ",[312,49235,336],{"class":1436},[312,49237,49238],{"class":324}," np.array(image)\n",[312,49240,49241],{"class":314,"line":3533},[312,49242,4205],{"emptyLinePlaceholder":1881},[312,49244,49245],{"class":314,"line":3538},[312,49246,49247],{"class":318},"            # 归一化像素值到0-1之间\n",[312,49249,49250,49253,49255,49258,49260],{"class":314,"line":3555},[312,49251,49252],{"class":324},"            normalized_image_array ",[312,49254,336],{"class":1436},[312,49256,49257],{"class":324}," image_array ",[312,49259,2529],{"class":1436},[312,49261,49262],{"class":488}," 255.0\n",[312,49264,49265],{"class":314,"line":3560},[312,49266,4205],{"emptyLinePlaceholder":1881},[312,49268,49269],{"class":314,"line":3565},[312,49270,49271],{"class":318},"            # print(image_path)\n",[312,49273,49274],{"class":314,"line":3570},[312,49275,49276],{"class":318},"            # print(normalized_image_array.shape)\n",[312,49278,49279],{"class":314,"line":3584},[312,49280,49281],{"class":318},"            # 累积归一化后的像素值和像素数量\n",[312,49283,49284,49287,49289],{"class":314,"line":3589},[312,49285,49286],{"class":324},"            total_pixels ",[312,49288,11280],{"class":1436},[312,49290,49291],{"class":324}," normalized_image_array.size\n",[312,49293,49294],{"class":314,"line":4382},[312,49295,49296],{"class":318},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[312,49298,49299,49302,49304,49307,49310,49312,49314,49316,49318,49320],{"class":314,"line":4396},[312,49300,49301],{"class":324},"            sum_normalized_pixel_values ",[312,49303,11280],{"class":1436},[312,49305,49306],{"class":324}," np.sum(normalized_image_array, ",[312,49308,49309],{"class":1579},"axis",[312,49311,336],{"class":1436},[312,49313,1576],{"class":324},[312,49315,858],{"class":488},[312,49317,733],{"class":324},[312,49319,1433],{"class":488},[312,49321,32293],{"class":324},[312,49323,49324],{"class":314,"line":4404},[312,49325,4205],{"emptyLinePlaceholder":1881},[312,49327,49328],{"class":314,"line":4409},[312,49329,49330],{"class":318},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[312,49332,49333,49336,49338,49341,49343],{"class":314,"line":4415},[312,49334,49335],{"class":324},"mean ",[312,49337,336],{"class":1436},[312,49339,49340],{"class":324}," sum_normalized_pixel_values ",[312,49342,2529],{"class":1436},[312,49344,49345],{"class":324}," total_pixels\n",[312,49347,49348],{"class":314,"line":4421},[312,49349,4205],{"emptyLinePlaceholder":1881},[312,49351,49352,49355,49357,49359,49361],{"class":314,"line":4426},[312,49353,49354],{"class":324},"sum_squared_diff ",[312,49356,336],{"class":1436},[312,49358,49138],{"class":324},[312,49360,2021],{"class":488},[312,49362,1959],{"class":324},[312,49364,49365],{"class":314,"line":9751},[312,49366,4205],{"emptyLinePlaceholder":1881},[312,49368,49369],{"class":314,"line":9775},[312,49370,49371],{"class":318},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[312,49373,49374],{"class":314,"line":9780},[312,49375,49376],{"class":318},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[312,49378,49379],{"class":314,"line":9786},[312,49380,49381],{"class":318},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[312,49383,49384],{"class":314,"line":9813},[312,49385,49386],{"class":318},"# Image.open(image_path)：打开图片\n",[312,49388,49389],{"class":314,"line":9818},[312,49390,49391],{"class":318},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[312,49393,49394,49396,49398,49400],{"class":314,"line":9824},[312,49395,4830],{"class":1436},[312,49397,49161],{"class":324},[312,49399,27839],{"class":1436},[312,49401,49166],{"class":324},[312,49403,49404,49406,49408,49410],{"class":314,"line":9836},[312,49405,5006],{"class":1436},[312,49407,49173],{"class":324},[312,49409,27839],{"class":1436},[312,49411,49178],{"class":324},[312,49413,49414,49416,49418,49420,49422,49424,49426,49428,49430,49432],{"class":314,"line":9848},[312,49415,4302],{"class":1436},[312,49417,49185],{"class":324},[312,49419,49188],{"class":339},[312,49421,733],{"class":324},[312,49423,49193],{"class":339},[312,49425,733],{"class":324},[312,49427,49198],{"class":339},[312,49429,733],{"class":324},[312,49431,49203],{"class":339},[312,49433,49434],{"class":324},")):\n",[312,49436,49437,49439,49441],{"class":314,"line":9860},[312,49438,47468],{"class":324},[312,49440,336],{"class":1436},[312,49442,49218],{"class":324},[312,49444,49445,49447,49449],{"class":314,"line":11519},[312,49446,49223],{"class":324},[312,49448,336],{"class":1436},[312,49450,49228],{"class":324},[312,49452,49453,49455,49457],{"class":314,"line":11544},[312,49454,49233],{"class":324},[312,49456,336],{"class":1436},[312,49458,49238],{"class":324},[312,49460,49461],{"class":314,"line":11567},[312,49462,49247],{"class":318},[312,49464,49465,49467,49469,49471,49473],{"class":314,"line":11591},[312,49466,49252],{"class":324},[312,49468,336],{"class":1436},[312,49470,49257],{"class":324},[312,49472,2529],{"class":1436},[312,49474,49262],{"class":488},[312,49476,49477],{"class":314,"line":11596},[312,49478,49276],{"class":318},[312,49480,49481],{"class":314,"line":11601},[312,49482,49483],{"class":318},"            # print(mean.shape)\n",[312,49485,49486],{"class":314,"line":11606},[312,49487,49271],{"class":318},[312,49489,49490],{"class":314,"line":11615},[312,49491,4205],{"emptyLinePlaceholder":1881},[312,49493,49494,49497],{"class":314,"line":11620},[312,49495,49496],{"class":1436},"            try",[312,49498,5544],{"class":324},[312,49500,49501,49504,49506,49509,49511,49514,49516],{"class":314,"line":11626},[312,49502,49503],{"class":324},"                diff ",[312,49505,336],{"class":1436},[312,49507,49508],{"class":324}," (normalized_image_array ",[312,49510,2477],{"class":1436},[312,49512,49513],{"class":324}," mean) ",[312,49515,12464],{"class":1436},[312,49517,49518],{"class":488}," 2\n",[312,49520,49521,49524,49526,49529,49531,49533,49535,49537,49539,49541],{"class":314,"line":11647},[312,49522,49523],{"class":324},"                sum_squared_diff ",[312,49525,11280],{"class":1436},[312,49527,49528],{"class":324}," np.sum(diff, ",[312,49530,49309],{"class":1579},[312,49532,336],{"class":1436},[312,49534,1576],{"class":324},[312,49536,858],{"class":488},[312,49538,733],{"class":324},[312,49540,1433],{"class":488},[312,49542,32293],{"class":324},[312,49544,49545,49548],{"class":314,"line":11653},[312,49546,49547],{"class":1436},"            except",[312,49549,5544],{"class":324},[312,49551,49552,49555,49557,49559,49562],{"class":314,"line":11667},[312,49553,49554],{"class":488},"                print",[312,49556,1576],{"class":324},[312,49558,2003],{"class":1436},[312,49560,49561],{"class":339},"\"捕获到自定义异常\"",[312,49563,1959],{"class":324},[312,49565,49566],{"class":314,"line":11673},[312,49567,49568],{"class":318},"            # diff = (normalized_image_array - mean) ** 2\n",[312,49570,49571],{"class":314,"line":11700},[312,49572,49573],{"class":318},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[312,49575,49576],{"class":314,"line":11709},[312,49577,4205],{"emptyLinePlaceholder":1881},[312,49579,49580,49583,49585,49588,49590],{"class":314,"line":11715},[312,49581,49582],{"class":324},"variance ",[312,49584,336],{"class":1436},[312,49586,49587],{"class":324}," sum_squared_diff ",[312,49589,2529],{"class":1436},[312,49591,49345],{"class":324},[312,49593,49594],{"class":314,"line":11723},[312,49595,4205],{"emptyLinePlaceholder":1881},[312,49597,49598,49600,49602,49605],{"class":314,"line":11728},[312,49599,32211],{"class":488},[312,49601,1576],{"class":324},[312,49603,49604],{"class":339},"\"Mean:\"",[312,49606,49607],{"class":324},", mean)\n",[312,49609,49610,49612,49614,49617],{"class":314,"line":18404},[312,49611,32211],{"class":488},[312,49613,1576],{"class":324},[312,49615,49616],{"class":339},"\"Variance:\"",[312,49618,49619],{"class":324},", variance)\n",[303,49621,49623],{"className":32174,"code":49622,"language":32176,"meta":308,"style":308},"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",[119,49624,49625,49631,49637,49647,49653,49663,49677,49687,49697,49707,49711,49721,49731,49735,49739,49747,49752,49757,49776,49780,49785,49790,49795,49800,49841,49846,49856,49861,49874,49879,49884,49889,49894,49899,49903,49908,49913,49935,49939,49971,49985,49995,50005,50009,50019,50033,50043,50053,50063,50069,50073,50077,50081,50085,50089,50097,50117,50121,50125,50129,50133,50149,50153,50157,50165,50169,50173,50181,50185,50189,50193,50201,50205,50209,50213,50221,50225,50233,50237,50245,50249,50257,50261,50269,50273,50277,50285,50289,50293,50305,50329,50343,50347,50351,50355,50363,50367,50375,50379,50387,50391,50399,50403,50411,50415,50423,50427,50439,50443,50451,50455,50463,50467,50471,50475,50479,50487,50491,50507,50511,50519,50523,50527,50531,50535,50539,50543,50547,50563,50567,50579,50583,50595,50599,50611,50615,50623,50627,50635,50639,50643,50647,50653,50657,50665,50669,50685,50689,50697,50701,50717,50729,50733,50745,50749,50753,50761,50765,50769,50777,50781,50789,50793,50801,50805,50809,50851,50893,50897,50901,50917,50921,50937,50941,50945,50953,50957,50961,50973,51011,51015,51019,51027,51031,51045,51055,51061,51067,51073,51079,51083,51087,51093,51097,51101,51109,51113,51131,51135,51139,51143,51159,51163,51167,51171,51175,51179,51199,51219,51223,51227,51231,51239,51247,51251,51267,51287,51307,51311,51316,51325,51334,51339,51344,51349,51362,51367,51376,51385,51402],{"__ignoreMap":308},[312,49626,49627,49629],{"class":314,"line":315},[312,49628,32188],{"class":1436},[312,49630,33617],{"class":324},[312,49632,49633,49635],{"class":314,"line":171},[312,49634,32188],{"class":1436},[312,49636,33624],{"class":324},[312,49638,49639,49641,49643,49645],{"class":314,"line":274},[312,49640,32188],{"class":1436},[312,49642,33635],{"class":324},[312,49644,33178],{"class":1436},[312,49646,33640],{"class":324},[312,49648,49649,49651],{"class":314,"line":298},[312,49650,32188],{"class":1436},[312,49652,32191],{"class":324},[312,49654,49655,49657,49659,49661],{"class":314,"line":974},[312,49656,32533],{"class":1436},[312,49658,33210],{"class":324},[312,49660,32188],{"class":1436},[312,49662,33657],{"class":324},[312,49664,49665,49667,49669,49671,49674],{"class":314,"line":980},[312,49666,32533],{"class":1436},[312,49668,33163],{"class":324},[312,49670,32188],{"class":1436},[312,49672,49673],{"class":324}," ImageFolder ",[312,49675,49676],{"class":318},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[312,49678,49679,49681,49683,49685],{"class":314,"line":997},[312,49680,32533],{"class":1436},[312,49682,33193],{"class":324},[312,49684,32188],{"class":1436},[312,49686,33198],{"class":324},[312,49688,49689,49691,49693,49695],{"class":314,"line":1003},[312,49690,32188],{"class":1436},[312,49692,33210],{"class":324},[312,49694,33178],{"class":1436},[312,49696,33215],{"class":324},[312,49698,49699,49701,49703,49705],{"class":314,"line":1020},[312,49700,32188],{"class":1436},[312,49702,33227],{"class":324},[312,49704,33178],{"class":1436},[312,49706,33232],{"class":324},[312,49708,49709],{"class":314,"line":1026},[312,49710,33702],{"class":318},[312,49712,49713,49715,49717,49719],{"class":314,"line":3418},[312,49714,32533],{"class":1436},[312,49716,33709],{"class":324},[312,49718,32188],{"class":1436},[312,49720,44826],{"class":324},[312,49722,49723,49725,49727,49729],{"class":314,"line":3423},[312,49724,32533],{"class":1436},[312,49726,32536],{"class":324},[312,49728,32188],{"class":1436},[312,49730,32541],{"class":324},[312,49732,49733],{"class":314,"line":3429},[312,49734,4205],{"emptyLinePlaceholder":1881},[312,49736,49737],{"class":314,"line":3434},[312,49738,33737],{"class":318},[312,49740,49741,49743,49745],{"class":314,"line":3448},[312,49742,33742],{"class":1436},[312,49744,33745],{"class":332},[312,49746,33748],{"class":324},[312,49748,49749],{"class":314,"line":3453},[312,49750,49751],{"class":318},"    # 导入自己的数据集，并进行数据处理\n",[312,49753,49754],{"class":314,"line":3459},[312,49755,49756],{"class":318},"    # 定义数据集的路径\n",[312,49758,49759,49762,49764,49766,49768,49770,49774],{"class":314,"line":3480},[312,49760,49761],{"class":488},"    ROOT_PATH",[312,49763,336],{"class":1436},[312,49765,2615],{"class":1436},[312,49767,2196],{"class":339},[312,49769,2503],{"class":488},[312,49771,49773],{"class":49772},"sA_wV","\u002Fdata\u002Ftrain",[312,49775,26929],{"class":339},[312,49777,49778],{"class":314,"line":3485},[312,49779,4205],{"emptyLinePlaceholder":1881},[312,49781,49782],{"class":314,"line":3499},[312,49783,49784],{"class":318},"    # 定义归一化方法\n",[312,49786,49787],{"class":314,"line":3504},[312,49788,49789],{"class":318},"    # 这里需要先计算一下数据集的均值和方差\n",[312,49791,49792],{"class":314,"line":3533},[312,49793,49794],{"class":318},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[312,49796,49797],{"class":314,"line":3538},[312,49798,49799],{"class":318},"    # 第一个参数是均值，第二个参数是方差\n",[312,49801,49802,49805,49807,49810,49813,49815,49818,49820,49823,49826,49829,49831,49834,49836,49839],{"class":314,"line":3555},[312,49803,49804],{"class":324},"    normalize",[312,49806,336],{"class":1436},[312,49808,49809],{"class":324},"transforms.Normalize([",[312,49811,49812],{"class":488},"0.162",[312,49814,2323],{"class":324},[312,49816,49817],{"class":488},"0.151",[312,49819,2323],{"class":324},[312,49821,49822],{"class":488},"0.138",[312,49824,49825],{"class":324},"],[",[312,49827,49828],{"class":488},"0.058",[312,49830,2323],{"class":324},[312,49832,49833],{"class":488},"0.052",[312,49835,2323],{"class":324},[312,49837,49838],{"class":488},"0.048",[312,49840,6462],{"class":324},[312,49842,49843],{"class":314,"line":3560},[312,49844,49845],{"class":318},"    # 定义数据集处理方法变量\n",[312,49847,49848,49851,49853],{"class":314,"line":3565},[312,49849,49850],{"class":324},"    train_transform",[312,49852,336],{"class":1436},[312,49854,49855],{"class":324},"transforms.Compose([\n",[312,49857,49858],{"class":314,"line":3570},[312,49859,49860],{"class":318},"        # 调整图像大小为224*224\n",[312,49862,49863,49866,49868,49870,49872],{"class":314,"line":3584},[312,49864,49865],{"class":324},"        transforms.Resize((",[312,49867,33296],{"class":488},[312,49869,2323],{"class":324},[312,49871,33296],{"class":488},[312,49873,44417],{"class":324},[312,49875,49876],{"class":314,"line":3589},[312,49877,49878],{"class":318},"        # 将图像转换为张量\n",[312,49880,49881],{"class":314,"line":4382},[312,49882,49883],{"class":324},"        transforms.ToTensor(),\n",[312,49885,49886],{"class":314,"line":4396},[312,49887,49888],{"class":324},"        normalize])\n",[312,49890,49891],{"class":314,"line":4404},[312,49892,49893],{"class":318},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[312,49895,49896],{"class":314,"line":4409},[312,49897,49898],{"class":318},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[312,49900,49901],{"class":314,"line":4415},[312,49902,4205],{"emptyLinePlaceholder":1881},[312,49904,49905],{"class":314,"line":4421},[312,49906,49907],{"class":318},"    # 加载数据集\n",[312,49909,49910],{"class":314,"line":4426},[312,49911,49912],{"class":318},"    # 传入数据集路径与处理方法\n",[312,49914,49915,49917,49919,49922,49925,49927,49930,49932],{"class":314,"line":9751},[312,49916,33753],{"class":324},[312,49918,336],{"class":1436},[312,49920,49921],{"class":324},"ImageFolder(",[312,49923,49924],{"class":488},"ROOT_PATH",[312,49926,2323],{"class":324},[312,49928,49929],{"class":1579},"transform",[312,49931,336],{"class":1436},[312,49933,49934],{"class":324},"train_transform)\n",[312,49936,49937],{"class":314,"line":9775},[312,49938,4205],{"emptyLinePlaceholder":1881},[312,49940,49941,49943,49945,49947,49949,49951,49953,49955,49957,49959,49961,49963,49965,49967,49969],{"class":314,"line":9780},[312,49942,33805],{"class":324},[312,49944,336],{"class":1436},[312,49946,33810],{"class":324},[312,49948,33813],{"class":488},[312,49950,1576],{"class":324},[312,49952,33818],{"class":488},[312,49954,2400],{"class":1436},[312,49956,9162],{"class":488},[312,49958,33825],{"class":324},[312,49960,33813],{"class":488},[312,49962,1576],{"class":324},[312,49964,33832],{"class":488},[312,49966,2400],{"class":1436},[312,49968,9162],{"class":488},[312,49970,33839],{"class":324},[312,49972,49973,49975,49977,49979,49981,49983],{"class":314,"line":9786},[312,49974,33844],{"class":324},[312,49976,336],{"class":1436},[312,49978,33849],{"class":324},[312,49980,33332],{"class":1579},[312,49982,336],{"class":1436},[312,49984,33337],{"class":324},[312,49986,49987,49989,49991,49993],{"class":314,"line":9813},[312,49988,33860],{"class":1579},[312,49990,336],{"class":1436},[312,49992,2144],{"class":488},[312,49994,33261],{"class":324},[312,49996,49997,49999,50001,50003],{"class":314,"line":9818},[312,49998,33872],{"class":1579},[312,50000,336],{"class":1436},[312,50002,33271],{"class":488},[312,50004,33261],{"class":324},[312,50006,50007],{"class":314,"line":9824},[312,50008,33883],{"class":318},[312,50010,50011,50013,50015,50017],{"class":314,"line":9836},[312,50012,33888],{"class":1579},[312,50014,336],{"class":1436},[312,50016,2340],{"class":488},[312,50018,1959],{"class":324},[312,50020,50021,50023,50025,50027,50029,50031],{"class":314,"line":9848},[312,50022,33899],{"class":324},[312,50024,336],{"class":1436},[312,50026,33329],{"class":324},[312,50028,33332],{"class":1579},[312,50030,336],{"class":1436},[312,50032,33910],{"class":324},[312,50034,50035,50037,50039,50041],{"class":314,"line":9860},[312,50036,33915],{"class":1579},[312,50038,336],{"class":1436},[312,50040,2144],{"class":488},[312,50042,33261],{"class":324},[312,50044,50045,50047,50049,50051],{"class":314,"line":11519},[312,50046,33926],{"class":1579},[312,50048,336],{"class":1436},[312,50050,33271],{"class":488},[312,50052,33261],{"class":324},[312,50054,50055,50057,50059,50061],{"class":314,"line":11544},[312,50056,33937],{"class":1579},[312,50058,336],{"class":1436},[312,50060,2340],{"class":488},[312,50062,1959],{"class":324},[312,50064,50065,50067],{"class":314,"line":11567},[312,50066,5895],{"class":1436},[312,50068,33950],{"class":324},[312,50070,50071],{"class":314,"line":11591},[312,50072,4205],{"emptyLinePlaceholder":1881},[312,50074,50075],{"class":314,"line":11596},[312,50076,33959],{"class":318},[312,50078,50079],{"class":314,"line":11601},[312,50080,33964],{"class":318},[312,50082,50083],{"class":314,"line":11606},[312,50084,4205],{"emptyLinePlaceholder":1881},[312,50086,50087],{"class":314,"line":11615},[312,50088,33973],{"class":318},[312,50090,50091,50093,50095],{"class":314,"line":11620},[312,50092,33742],{"class":1436},[312,50094,33980],{"class":332},[312,50096,33983],{"class":324},[312,50098,50099,50101,50103,50105,50107,50109,50111,50113,50115],{"class":314,"line":11626},[312,50100,33032],{"class":324},[312,50102,336],{"class":1436},[312,50104,32247],{"class":324},[312,50106,33039],{"class":339},[312,50108,3510],{"class":1436},[312,50110,33044],{"class":324},[312,50112,3507],{"class":1436},[312,50114,34002],{"class":339},[312,50116,1959],{"class":324},[312,50118,50119],{"class":314,"line":11647},[312,50120,4205],{"emptyLinePlaceholder":1881},[312,50122,50123],{"class":314,"line":11653},[312,50124,34017],{"class":318},[312,50126,50127],{"class":314,"line":11667},[312,50128,34022],{"class":318},[312,50130,50131],{"class":314,"line":11673},[312,50132,34027],{"class":318},[312,50134,50135,50137,50139,50141,50143,50145,50147],{"class":314,"line":11700},[312,50136,34032],{"class":324},[312,50138,336],{"class":1436},[312,50140,34037],{"class":324},[312,50142,34040],{"class":1579},[312,50144,336],{"class":1436},[312,50146,34045],{"class":488},[312,50148,1959],{"class":324},[312,50150,50151],{"class":314,"line":11709},[312,50152,4205],{"emptyLinePlaceholder":1881},[312,50154,50155],{"class":314,"line":11715},[312,50156,34056],{"class":318},[312,50158,50159,50161,50163],{"class":314,"line":11723},[312,50160,34061],{"class":324},[312,50162,336],{"class":1436},[312,50164,34066],{"class":324},[312,50166,50167],{"class":314,"line":11728},[312,50168,4205],{"emptyLinePlaceholder":1881},[312,50170,50171],{"class":314,"line":18404},[312,50172,34075],{"class":318},[312,50174,50175,50177,50179],{"class":314,"line":18410},[312,50176,33084],{"class":324},[312,50178,336],{"class":1436},[312,50180,34084],{"class":324},[312,50182,50183],{"class":314,"line":18433},[312,50184,34089],{"class":318},[312,50186,50187],{"class":314,"line":18439},[312,50188,34094],{"class":318},[312,50190,50191],{"class":314,"line":18462},[312,50192,34099],{"class":318},[312,50194,50195,50197,50199],{"class":314,"line":18476},[312,50196,34104],{"class":324},[312,50198,336],{"class":1436},[312,50200,34109],{"class":324},[312,50202,50203],{"class":314,"line":18496},[312,50204,4205],{"emptyLinePlaceholder":1881},[312,50206,50207],{"class":314,"line":18502},[312,50208,34122],{"class":318},[312,50210,50211],{"class":314,"line":18513},[312,50212,34127],{"class":318},[312,50214,50215,50217,50219],{"class":314,"line":18536},[312,50216,34132],{"class":324},[312,50218,336],{"class":1436},[312,50220,34137],{"class":488},[312,50222,50223],{"class":314,"line":18558},[312,50224,34142],{"class":318},[312,50226,50227,50229,50231],{"class":314,"line":18563},[312,50228,34147],{"class":324},[312,50230,336],{"class":1436},[312,50232,34152],{"class":324},[312,50234,50235],{"class":314,"line":18569},[312,50236,34157],{"class":318},[312,50238,50239,50241,50243],{"class":314,"line":18583},[312,50240,34162],{"class":324},[312,50242,336],{"class":1436},[312,50244,34152],{"class":324},[312,50246,50247],{"class":314,"line":18596},[312,50248,34171],{"class":318},[312,50250,50251,50253,50255],{"class":314,"line":18601},[312,50252,34176],{"class":324},[312,50254,336],{"class":1436},[312,50256,34152],{"class":324},[312,50258,50259],{"class":314,"line":18615},[312,50260,34185],{"class":318},[312,50262,50263,50265,50267],{"class":314,"line":18620},[312,50264,34190],{"class":324},[312,50266,336],{"class":1436},[312,50268,34152],{"class":324},[312,50270,50271],{"class":314,"line":18626},[312,50272,4205],{"emptyLinePlaceholder":1881},[312,50274,50275],{"class":314,"line":18631},[312,50276,34203],{"class":318},[312,50278,50279,50281,50283],{"class":314,"line":18645},[312,50280,34208],{"class":324},[312,50282,336],{"class":1436},[312,50284,34213],{"class":324},[312,50286,50287],{"class":314,"line":18650},[312,50288,4205],{"emptyLinePlaceholder":1881},[312,50290,50291],{"class":314,"line":18655},[312,50292,34226],{"class":318},[312,50294,50295,50297,50299,50301,50303],{"class":314,"line":18669},[312,50296,5006],{"class":1436},[312,50298,34233],{"class":324},[312,50300,27839],{"class":1436},[312,50302,34238],{"class":488},[312,50304,34241],{"class":324},[312,50306,50307,50309,50311,50313,50315,50317,50319,50321,50323,50325,50327],{"class":314,"line":18681},[312,50308,34246],{"class":488},[312,50310,1576],{"class":324},[312,50312,34251],{"class":339},[312,50314,34254],{"class":488},[312,50316,2529],{"class":339},[312,50318,34254],{"class":488},[312,50320,2196],{"class":339},[312,50322,34263],{"class":324},[312,50324,2477],{"class":1436},[312,50326,1433],{"class":488},[312,50328,32293],{"class":324},[312,50330,50331,50333,50335,50337,50339,50341],{"class":314,"line":18686},[312,50332,34246],{"class":488},[312,50334,1576],{"class":324},[312,50336,34278],{"class":339},[312,50338,2400],{"class":1436},[312,50340,2391],{"class":488},[312,50342,1959],{"class":324},[312,50344,50345],{"class":314,"line":18699},[312,50346,4205],{"emptyLinePlaceholder":1881},[312,50348,50349],{"class":314,"line":18704},[312,50350,34293],{"class":318},[312,50352,50353],{"class":314,"line":18709},[312,50354,34298],{"class":318},[312,50356,50357,50359,50361],{"class":314,"line":18714},[312,50358,34303],{"class":324},[312,50360,336],{"class":1436},[312,50362,34137],{"class":488},[312,50364,50365],{"class":314,"line":18727},[312,50366,34312],{"class":318},[312,50368,50369,50371,50373],{"class":314,"line":18732},[312,50370,34317],{"class":324},[312,50372,336],{"class":1436},[312,50374,4890],{"class":488},[312,50376,50377],{"class":314,"line":34428},[312,50378,34326],{"class":318},[312,50380,50381,50383,50385],{"class":314,"line":34434},[312,50382,34331],{"class":324},[312,50384,336],{"class":1436},[312,50386,34137],{"class":488},[312,50388,50389],{"class":314,"line":34440},[312,50390,34340],{"class":318},[312,50392,50393,50395,50397],{"class":314,"line":34446},[312,50394,34345],{"class":324},[312,50396,336],{"class":1436},[312,50398,4890],{"class":488},[312,50400,50401],{"class":314,"line":34452},[312,50402,34354],{"class":318},[312,50404,50405,50407,50409],{"class":314,"line":34463},[312,50406,34359],{"class":324},[312,50408,336],{"class":1436},[312,50410,4890],{"class":488},[312,50412,50413],{"class":314,"line":34469},[312,50414,34368],{"class":318},[312,50416,50417,50419,50421],{"class":314,"line":34489},[312,50418,34373],{"class":324},[312,50420,336],{"class":1436},[312,50422,4890],{"class":488},[312,50424,50425],{"class":314,"line":34495},[312,50426,34382],{"class":318},[312,50428,50429,50431,50433,50435,50437],{"class":314,"line":34506},[312,50430,5208],{"class":1436},[312,50432,33396],{"class":324},[312,50434,27839],{"class":1436},[312,50436,33401],{"class":488},[312,50438,34395],{"class":324},[312,50440,50441],{"class":314,"line":34512},[312,50442,34400],{"class":318},[312,50444,50445,50447,50449],{"class":314,"line":34518},[312,50446,34405],{"class":324},[312,50448,336],{"class":1436},[312,50450,34410],{"class":324},[312,50452,50453],{"class":314,"line":34524},[312,50454,34415],{"class":318},[312,50456,50457,50459,50461],{"class":314,"line":34530},[312,50458,34420],{"class":324},[312,50460,336],{"class":1436},[312,50462,34425],{"class":324},[312,50464,50465],{"class":314,"line":34536},[312,50466,34431],{"class":318},[312,50468,50469],{"class":314,"line":34542},[312,50470,34437],{"class":324},[312,50472,50473],{"class":314,"line":34548},[312,50474,34443],{"class":318},[312,50476,50477],{"class":314,"line":34568},[312,50478,34449],{"class":318},[312,50480,50481,50483,50485],{"class":314,"line":34574},[312,50482,34455],{"class":324},[312,50484,336],{"class":1436},[312,50486,34460],{"class":324},[312,50488,50489],{"class":314,"line":34590},[312,50490,34466],{"class":318},[312,50492,50493,50495,50497,50499,50501,50503,50505],{"class":314,"line":34596},[312,50494,34472],{"class":324},[312,50496,336],{"class":1436},[312,50498,34477],{"class":324},[312,50500,34480],{"class":1579},[312,50502,336],{"class":1436},[312,50504,1433],{"class":488},[312,50506,1959],{"class":324},[312,50508,50509],{"class":314,"line":34610},[312,50510,34492],{"class":318},[312,50512,50513,50515,50517],{"class":314,"line":34616},[312,50514,34498],{"class":324},[312,50516,336],{"class":1436},[312,50518,34503],{"class":324},[312,50520,50521],{"class":314,"line":34631},[312,50522,34509],{"class":318},[312,50524,50525],{"class":314,"line":34637},[312,50526,34515],{"class":324},[312,50528,50529],{"class":314,"line":34646},[312,50530,34521],{"class":318},[312,50532,50533],{"class":314,"line":34652},[312,50534,34527],{"class":324},[312,50536,50537],{"class":314,"line":34661},[312,50538,34533],{"class":318},[312,50540,50541],{"class":314,"line":34667},[312,50542,34539],{"class":324},[312,50544,50545],{"class":314,"line":34673},[312,50546,34545],{"class":318},[312,50548,50549,50551,50553,50555,50557,50559,50561],{"class":314,"line":34682},[312,50550,34551],{"class":324},[312,50552,11280],{"class":1436},[312,50554,34556],{"class":324},[312,50556,2400],{"class":1436},[312,50558,34561],{"class":324},[312,50560,858],{"class":488},[312,50562,1959],{"class":324},[312,50564,50565],{"class":314,"line":34688},[312,50566,34571],{"class":318},[312,50568,50569,50571,50573,50575,50577],{"class":314,"line":34699},[312,50570,34577],{"class":324},[312,50572,11280],{"class":1436},[312,50574,34582],{"class":324},[312,50576,4754],{"class":1436},[312,50578,34587],{"class":324},[312,50580,50581],{"class":314,"line":34705},[312,50582,34593],{"class":318},[312,50584,50585,50587,50589,50591,50593],{"class":314,"line":34724},[312,50586,34599],{"class":324},[312,50588,11280],{"class":1436},[312,50590,34561],{"class":324},[312,50592,858],{"class":488},[312,50594,1959],{"class":324},[312,50596,50597],{"class":314,"line":34730},[312,50598,34613],{"class":318},[312,50600,50601,50603,50605,50607,50609],{"class":314,"line":34741},[312,50602,5208],{"class":1436},[312,50604,34621],{"class":324},[312,50606,27839],{"class":1436},[312,50608,33401],{"class":488},[312,50610,34628],{"class":324},[312,50612,50613],{"class":314,"line":34747},[312,50614,34634],{"class":318},[312,50616,50617,50619,50621],{"class":314,"line":34767},[312,50618,34405],{"class":324},[312,50620,336],{"class":1436},[312,50622,34410],{"class":324},[312,50624,50625],{"class":314,"line":34783},[312,50626,34649],{"class":318},[312,50628,50629,50631,50633],{"class":314,"line":34789},[312,50630,34420],{"class":324},[312,50632,336],{"class":1436},[312,50634,34425],{"class":324},[312,50636,50637],{"class":314,"line":34803},[312,50638,34664],{"class":318},[312,50640,50641],{"class":314,"line":34809},[312,50642,34670],{"class":324},[312,50644,50645],{"class":314,"line":34815},[312,50646,38151],{"class":318},[312,50648,50649,50651],{"class":314,"line":34826},[312,50650,34676],{"class":1436},[312,50652,34679],{"class":324},[312,50654,50655],{"class":314,"line":34832},[312,50656,34685],{"class":318},[312,50658,50659,50661,50663],{"class":314,"line":34838},[312,50660,38166],{"class":324},[312,50662,336],{"class":1436},[312,50664,34460],{"class":324},[312,50666,50667],{"class":314,"line":34848},[312,50668,34702],{"class":318},[312,50670,50671,50673,50675,50677,50679,50681,50683],{"class":314,"line":34854},[312,50672,38179],{"class":324},[312,50674,336],{"class":1436},[312,50676,34477],{"class":324},[312,50678,34480],{"class":1579},[312,50680,336],{"class":1436},[312,50682,1433],{"class":488},[312,50684,1959],{"class":324},[312,50686,50687],{"class":314,"line":34865},[312,50688,34727],{"class":318},[312,50690,50691,50693,50695],{"class":314,"line":34871},[312,50692,38200],{"class":324},[312,50694,336],{"class":1436},[312,50696,34503],{"class":324},[312,50698,50699],{"class":314,"line":34881},[312,50700,34744],{"class":318},[312,50702,50703,50705,50707,50709,50711,50713,50715],{"class":314,"line":34886},[312,50704,38213],{"class":324},[312,50706,11280],{"class":1436},[312,50708,38218],{"class":324},[312,50710,2400],{"class":1436},[312,50712,34561],{"class":324},[312,50714,858],{"class":488},[312,50716,1959],{"class":324},[312,50718,50719,50721,50723,50725,50727],{"class":314,"line":34892},[312,50720,38231],{"class":324},[312,50722,11280],{"class":1436},[312,50724,34582],{"class":324},[312,50726,4754],{"class":1436},[312,50728,34587],{"class":324},[312,50730,50731],{"class":314,"line":34941},[312,50732,38244],{"class":318},[312,50734,50735,50737,50739,50741,50743],{"class":314,"line":34988},[312,50736,38249],{"class":324},[312,50738,11280],{"class":1436},[312,50740,34561],{"class":324},[312,50742,858],{"class":488},[312,50744,1959],{"class":324},[312,50746,50747],{"class":314,"line":34993},[312,50748,34806],{"class":318},[312,50750,50751],{"class":314,"line":34999},[312,50752,34812],{"class":318},[312,50754,50755,50757,50759],{"class":314,"line":35018},[312,50756,34818],{"class":324},[312,50758,2529],{"class":1436},[312,50760,34823],{"class":324},[312,50762,50763],{"class":314,"line":35024},[312,50764,34829],{"class":318},[312,50766,50767],{"class":314,"line":35044},[312,50768,34835],{"class":318},[312,50770,50771,50773,50775],{"class":314,"line":35050},[312,50772,34841],{"class":324},[312,50774,2529],{"class":1436},[312,50776,34823],{"class":324},[312,50778,50779],{"class":314,"line":35056},[312,50780,34851],{"class":318},[312,50782,50783,50785,50787],{"class":314,"line":35066},[312,50784,34857],{"class":324},[312,50786,2529],{"class":1436},[312,50788,34862],{"class":324},[312,50790,50791],{"class":314,"line":35071},[312,50792,34868],{"class":318},[312,50794,50795,50797,50799],{"class":314,"line":35077},[312,50796,34874],{"class":324},[312,50798,2529],{"class":1436},[312,50800,34862],{"class":324},[312,50802,50803],{"class":314,"line":35093},[312,50804,4205],{"emptyLinePlaceholder":1881},[312,50806,50807],{"class":314,"line":35138},[312,50808,34889],{"class":318},[312,50810,50811,50813,50815,50817,50819,50821,50823,50825,50827,50829,50831,50833,50835,50837,50839,50841,50843,50845,50847,50849],{"class":314,"line":35144},[312,50812,34246],{"class":488},[312,50814,1576],{"class":324},[312,50816,5397],{"class":339},[312,50818,34254],{"class":488},[312,50820,34903],{"class":339},[312,50822,2840],{"class":488},[312,50824,34908],{"class":1436},[312,50826,2888],{"class":488},[312,50828,34913],{"class":339},[312,50830,2840],{"class":488},[312,50832,34908],{"class":1436},[312,50834,2888],{"class":488},[312,50836,5397],{"class":339},[312,50838,34924],{"class":324},[312,50840,2477],{"class":1436},[312,50842,1433],{"class":488},[312,50844,34931],{"class":324},[312,50846,2477],{"class":1436},[312,50848,1433],{"class":488},[312,50850,34938],{"class":324},[312,50852,50853,50855,50857,50859,50861,50863,50865,50867,50869,50871,50873,50875,50877,50879,50881,50883,50885,50887,50889,50891],{"class":314,"line":35150},[312,50854,34246],{"class":488},[312,50856,1576],{"class":324},[312,50858,5397],{"class":339},[312,50860,34254],{"class":488},[312,50862,34952],{"class":339},[312,50864,2840],{"class":488},[312,50866,34908],{"class":1436},[312,50868,2888],{"class":488},[312,50870,34961],{"class":339},[312,50872,2840],{"class":488},[312,50874,34908],{"class":1436},[312,50876,2888],{"class":488},[312,50878,5397],{"class":339},[312,50880,34972],{"class":324},[312,50882,2477],{"class":1436},[312,50884,1433],{"class":488},[312,50886,34979],{"class":324},[312,50888,2477],{"class":1436},[312,50890,1433],{"class":488},[312,50892,34938],{"class":324},[312,50894,50895],{"class":314,"line":35156},[312,50896,4205],{"emptyLinePlaceholder":1881},[312,50898,50899],{"class":314,"line":35167},[312,50900,34996],{"class":318},[312,50902,50903,50905,50907,50909,50911,50913,50915],{"class":314,"line":35173},[312,50904,4302],{"class":1436},[312,50906,35004],{"class":324},[312,50908,2477],{"class":1436},[312,50910,1433],{"class":488},[312,50912,2882],{"class":324},[312,50914,2902],{"class":1436},[312,50916,35015],{"class":324},[312,50918,50919],{"class":314,"line":35179},[312,50920,35021],{"class":318},[312,50922,50923,50925,50927,50929,50931,50933,50935],{"class":314,"line":35185},[312,50924,35027],{"class":324},[312,50926,1992],{"class":488},[312,50928,336],{"class":1436},[312,50930,35034],{"class":324},[312,50932,2477],{"class":1436},[312,50934,1433],{"class":488},[312,50936,35041],{"class":324},[312,50938,50939],{"class":314,"line":35203},[312,50940,35047],{"class":318},[312,50942,50943],{"class":314,"line":35217},[312,50944,35053],{"class":318},[312,50946,50947,50949,50951],{"class":314,"line":35226},[312,50948,35059],{"class":324},[312,50950,336],{"class":1436},[312,50952,34109],{"class":324},[312,50954,50955],{"class":314,"line":35235},[312,50956,4205],{"emptyLinePlaceholder":1881},[312,50958,50959],{"class":314,"line":35244},[312,50960,35074],{"class":318},[312,50962,50963,50965,50967,50969,50971],{"class":314,"line":35253},[312,50964,35080],{"class":324},[312,50966,336],{"class":1436},[312,50968,35085],{"class":324},[312,50970,2477],{"class":1436},[312,50972,35090],{"class":324},[312,50974,50975,50977,50979,50981,50983,50985,50987,50989,50991,50993,50995,50997,50999,51001,51003,51005,51007,51009],{"class":314,"line":35259},[312,50976,34246],{"class":488},[312,50978,1576],{"class":324},[312,50980,35100],{"class":339},[312,50982,2840],{"class":488},[312,50984,35105],{"class":1436},[312,50986,2888],{"class":488},[312,50988,2489],{"class":339},[312,50990,2840],{"class":488},[312,50992,35105],{"class":1436},[312,50994,2888],{"class":488},[312,50996,35118],{"class":339},[312,50998,35121],{"class":324},[312,51000,35124],{"class":1436},[312,51002,2851],{"class":488},[312,51004,35129],{"class":324},[312,51006,2273],{"class":1436},[312,51008,2851],{"class":488},[312,51010,32293],{"class":324},[312,51012,51013],{"class":314,"line":35265},[312,51014,38528],{"class":318},[312,51016,51017],{"class":314,"line":35273},[312,51018,38533],{"class":318},[312,51020,51021,51023,51025],{"class":314,"line":35278},[312,51022,38538],{"class":324},[312,51024,35162],{"class":339},[312,51026,1959],{"class":324},[312,51028,51029],{"class":314,"line":35284},[312,51030,35182],{"class":318},[312,51032,51033,51035,51037,51039,51041,51043],{"class":314,"line":35295},[312,51034,35188],{"class":324},[312,51036,336],{"class":1436},[312,51038,35193],{"class":324},[312,51040,35196],{"class":1579},[312,51042,336],{"class":1436},[312,51044,3353],{"class":324},[312,51046,51047,51049,51051,51053],{"class":314,"line":35301},[312,51048,35206],{"class":339},[312,51050,2803],{"class":324},[312,51052,35211],{"class":488},[312,51054,35214],{"class":324},[312,51056,51057,51059],{"class":314,"line":35321},[312,51058,35220],{"class":339},[312,51060,35223],{"class":324},[312,51062,51063,51065],{"class":314,"line":35327},[312,51064,35229],{"class":339},[312,51066,35232],{"class":324},[312,51068,51069,51071],{"class":314,"line":35333},[312,51070,35238],{"class":339},[312,51072,35241],{"class":324},[312,51074,51075,51077],{"class":314,"line":35339},[312,51076,35247],{"class":339},[312,51078,35250],{"class":324},[312,51080,51081],{"class":314,"line":35356},[312,51082,35256],{"class":324},[312,51084,51085],{"class":314,"line":35362},[312,51086,35262],{"class":318},[312,51088,51089,51091],{"class":314,"line":35368},[312,51090,5895],{"class":1436},[312,51092,35270],{"class":324},[312,51094,51095],{"class":314,"line":35374},[312,51096,4205],{"emptyLinePlaceholder":1881},[312,51098,51099],{"class":314,"line":35380},[312,51100,35281],{"class":318},[312,51102,51103,51105,51107],{"class":314,"line":35386},[312,51104,33742],{"class":1436},[312,51106,35289],{"class":332},[312,51108,35292],{"class":324},[312,51110,51111],{"class":314,"line":35413},[312,51112,35298],{"class":318},[312,51114,51115,51117,51119,51121,51123,51125,51127,51129],{"class":314,"line":35437},[312,51116,35304],{"class":324},[312,51118,33488],{"class":1579},[312,51120,336],{"class":1436},[312,51122,1576],{"class":324},[312,51124,2443],{"class":488},[312,51126,2323],{"class":324},[312,51128,2238],{"class":488},[312,51130,32293],{"class":324},[312,51132,51133],{"class":314,"line":35443},[312,51134,35324],{"class":318},[312,51136,51137],{"class":314,"line":35449},[312,51138,35330],{"class":318},[312,51140,51141],{"class":314,"line":35455},[312,51142,35336],{"class":318},[312,51144,51145,51147,51149,51151,51153,51155,51157],{"class":314,"line":35466},[312,51146,33522],{"class":324},[312,51148,1433],{"class":488},[312,51150,2323],{"class":324},[312,51152,2027],{"class":488},[312,51154,2323],{"class":324},[312,51156,1433],{"class":488},[312,51158,1959],{"class":324},[312,51160,51161],{"class":314,"line":35477},[312,51162,35359],{"class":318},[312,51164,51165],{"class":314,"line":35483},[312,51166,35365],{"class":318},[312,51168,51169],{"class":314,"line":35500},[312,51170,35371],{"class":318},[312,51172,51173],{"class":314,"line":35523},[312,51174,35377],{"class":318},[312,51176,51177],{"class":314,"line":35546},[312,51178,35383],{"class":318},[312,51180,51181,51183,51185,51187,51189,51191,51193,51195,51197],{"class":314,"line":35552},[312,51182,35389],{"class":324},[312,51184,35392],{"class":339},[312,51186,35395],{"class":324},[312,51188,35398],{"class":339},[312,51190,2323],{"class":324},[312,51192,35403],{"class":1579},[312,51194,336],{"class":1436},[312,51196,35408],{"class":339},[312,51198,1959],{"class":324},[312,51200,51201,51203,51205,51207,51209,51211,51213,51215,51217],{"class":314,"line":35557},[312,51202,35389],{"class":324},[312,51204,35392],{"class":339},[312,51206,35420],{"class":324},[312,51208,35423],{"class":339},[312,51210,2323],{"class":324},[312,51212,35403],{"class":1579},[312,51214,336],{"class":1436},[312,51216,35432],{"class":339},[312,51218,1959],{"class":324},[312,51220,51221],{"class":314,"line":35566},[312,51222,35440],{"class":318},[312,51224,51225],{"class":314,"line":35576},[312,51226,35446],{"class":324},[312,51228,51229],{"class":314,"line":35582},[312,51230,35452],{"class":318},[312,51232,51233,51235,51237],{"class":314,"line":35587},[312,51234,35458],{"class":324},[312,51236,35461],{"class":339},[312,51238,1959],{"class":324},[312,51240,51241,51243,51245],{"class":314,"line":35593},[312,51242,35469],{"class":324},[312,51244,35472],{"class":339},[312,51246,1959],{"class":324},[312,51248,51249],{"class":314,"line":35606},[312,51250,35480],{"class":318},[312,51252,51253,51255,51257,51259,51261,51263,51265],{"class":314,"line":35612},[312,51254,33522],{"class":324},[312,51256,1433],{"class":488},[312,51258,2323],{"class":324},[312,51260,2027],{"class":488},[312,51262,2323],{"class":324},[312,51264,2027],{"class":488},[312,51266,1959],{"class":324},[312,51268,51269,51271,51273,51275,51277,51279,51281,51283,51285],{"class":314,"line":35623},[312,51270,35389],{"class":324},[312,51272,35392],{"class":339},[312,51274,35507],{"class":324},[312,51276,35398],{"class":339},[312,51278,2323],{"class":324},[312,51280,35403],{"class":1579},[312,51282,336],{"class":1436},[312,51284,35518],{"class":339},[312,51286,1959],{"class":324},[312,51288,51289,51291,51293,51295,51297,51299,51301,51303,51305],{"class":314,"line":35634},[312,51290,35389],{"class":324},[312,51292,35392],{"class":339},[312,51294,35530],{"class":324},[312,51296,35423],{"class":339},[312,51298,2323],{"class":324},[312,51300,35403],{"class":1579},[312,51302,336],{"class":1436},[312,51304,35541],{"class":339},[312,51306,1959],{"class":324},[312,51308,51309],{"class":314,"line":35653},[312,51310,35549],{"class":318},[312,51312,51314],{"class":314,"line":51313},219,[312,51315,35446],{"class":324},[312,51317,51319,51321,51323],{"class":314,"line":51318},220,[312,51320,35458],{"class":324},[312,51322,35392],{"class":339},[312,51324,1959],{"class":324},[312,51326,51328,51330,51332],{"class":314,"line":51327},221,[312,51329,35469],{"class":324},[312,51331,35571],{"class":339},[312,51333,1959],{"class":324},[312,51335,51337],{"class":314,"line":51336},222,[312,51338,35579],{"class":324},[312,51340,51342],{"class":314,"line":51341},223,[312,51343,4205],{"emptyLinePlaceholder":1881},[312,51345,51347],{"class":314,"line":51346},224,[312,51348,35590],{"class":318},[312,51350,51352,51354,51356,51358,51360],{"class":314,"line":51351},225,[312,51353,3338],{"class":1436},[312,51355,33015],{"class":488},[312,51357,4754],{"class":1436},[312,51359,33020],{"class":339},[312,51361,5544],{"class":324},[312,51363,51365],{"class":314,"line":51364},226,[312,51366,35609],{"class":318},[312,51368,51370,51372,51374],{"class":314,"line":51369},227,[312,51371,46341],{"class":324},[312,51373,336],{"class":1436},[312,51375,46346],{"class":324},[312,51377,51379,51381,51383],{"class":314,"line":51378},228,[312,51380,35626],{"class":324},[312,51382,336],{"class":1436},[312,51384,35631],{"class":324},[312,51386,51388,51390,51392,51394,51396,51398,51400],{"class":314,"line":51387},229,[312,51389,35188],{"class":324},[312,51391,336],{"class":1436},[312,51393,46363],{"class":324},[312,51395,35644],{"class":1579},[312,51397,336],{"class":1436},[312,51399,2851],{"class":488},[312,51401,1959],{"class":324},[312,51403,51405],{"class":314,"line":51404},230,[312,51406,35656],{"class":324},[23796,51408,51410],{"id":51409},"_242测试代码","2.4.2.测试代码",[24,51412,51413],{},"使用测试集进行测试与推理",[303,51415,51417],{"className":32174,"code":51416,"language":32176,"meta":308,"style":308},"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",[119,51418,51419,51425,51435,51445,51456,51466,51470,51474,51482,51487,51491,51508,51512,51516,51520,51524,51528,51560,51564,51572,51576,51588,51592,51596,51600,51604,51608,51612,51616,51620,51638,51652,51656,51666,51676,51686,51692,51696,51700,51708,51712,51728,51736,51740,51744,51752,51760,51764,51768,51772,51776,51782,51786,51796,51804,51812,51816,51820,51824,51832,51836,51852,51856,51860,51864,51876,51880,51892,51896,51900,51912,51916,51926,51930,51934,51946,51950,51958,51962,51966,51974,51978,51986,51990,51994,51998,52002,52006,52022,52030,52034,52038,52056,52062,52066,52076,52084,52092,52096,52100,52104,52108,52116,52120,52136,52140,52148,52156],{"__ignoreMap":308},[312,51420,51421,51423],{"class":314,"line":315},[312,51422,32188],{"class":1436},[312,51424,32191],{"class":324},[312,51426,51427,51429,51431,51433],{"class":314,"line":171},[312,51428,32188],{"class":1436},[312,51430,33210],{"class":324},[312,51432,33178],{"class":1436},[312,51434,33215],{"class":324},[312,51436,51437,51439,51441,51443],{"class":314,"line":274},[312,51438,32533],{"class":1436},[312,51440,33193],{"class":324},[312,51442,32188],{"class":1436},[312,51444,33198],{"class":324},[312,51446,51447,51449,51451,51453],{"class":314,"line":298},[312,51448,32533],{"class":1436},[312,51450,33163],{"class":324},[312,51452,32188],{"class":1436},[312,51454,51455],{"class":324}," ImageFolder\n",[312,51457,51458,51460,51462,51464],{"class":314,"line":974},[312,51459,32533],{"class":1436},[312,51461,33709],{"class":324},[312,51463,32188],{"class":1436},[312,51465,46435],{"class":324},[312,51467,51468],{"class":314,"line":980},[312,51469,4205],{"emptyLinePlaceholder":1881},[312,51471,51472],{"class":314,"line":997},[312,51473,35746],{"class":318},[312,51475,51476,51478,51480],{"class":314,"line":1003},[312,51477,33742],{"class":1436},[312,51479,35753],{"class":332},[312,51481,33748],{"class":324},[312,51483,51484],{"class":314,"line":1020},[312,51485,51486],{"class":318},"   # 导入自己的数据集，并进行数据处理\n",[312,51488,51489],{"class":314,"line":1026},[312,51490,49756],{"class":318},[312,51492,51493,51495,51497,51499,51501,51503,51506],{"class":314,"line":3418},[312,51494,49761],{"class":488},[312,51496,336],{"class":1436},[312,51498,2615],{"class":1436},[312,51500,2196],{"class":339},[312,51502,2503],{"class":488},[312,51504,51505],{"class":49772},"\u002Fdata\u002Ftest",[312,51507,26929],{"class":339},[312,51509,51510],{"class":314,"line":3423},[312,51511,4205],{"emptyLinePlaceholder":1881},[312,51513,51514],{"class":314,"line":3429},[312,51515,49784],{"class":318},[312,51517,51518],{"class":314,"line":3434},[312,51519,49789],{"class":318},[312,51521,51522],{"class":314,"line":3448},[312,51523,49794],{"class":318},[312,51525,51526],{"class":314,"line":3453},[312,51527,49799],{"class":318},[312,51529,51530,51532,51534,51536,51538,51540,51542,51544,51546,51548,51550,51552,51554,51556,51558],{"class":314,"line":3459},[312,51531,49804],{"class":324},[312,51533,336],{"class":1436},[312,51535,49809],{"class":324},[312,51537,49812],{"class":488},[312,51539,2323],{"class":324},[312,51541,49817],{"class":488},[312,51543,2323],{"class":324},[312,51545,49822],{"class":488},[312,51547,49825],{"class":324},[312,51549,49828],{"class":488},[312,51551,2323],{"class":324},[312,51553,49833],{"class":488},[312,51555,2323],{"class":324},[312,51557,49838],{"class":488},[312,51559,6462],{"class":324},[312,51561,51562],{"class":314,"line":3480},[312,51563,49845],{"class":318},[312,51565,51566,51568,51570],{"class":314,"line":3485},[312,51567,49850],{"class":324},[312,51569,336],{"class":1436},[312,51571,49855],{"class":324},[312,51573,51574],{"class":314,"line":3499},[312,51575,49860],{"class":318},[312,51577,51578,51580,51582,51584,51586],{"class":314,"line":3504},[312,51579,49865],{"class":324},[312,51581,33296],{"class":488},[312,51583,2323],{"class":324},[312,51585,33296],{"class":488},[312,51587,44417],{"class":324},[312,51589,51590],{"class":314,"line":3533},[312,51591,49878],{"class":318},[312,51593,51594],{"class":314,"line":3538},[312,51595,49883],{"class":324},[312,51597,51598],{"class":314,"line":3555},[312,51599,49888],{"class":324},[312,51601,51602],{"class":314,"line":3560},[312,51603,49893],{"class":318},[312,51605,51606],{"class":314,"line":3565},[312,51607,49898],{"class":318},[312,51609,51610],{"class":314,"line":3570},[312,51611,4205],{"emptyLinePlaceholder":1881},[312,51613,51614],{"class":314,"line":3584},[312,51615,49907],{"class":318},[312,51617,51618],{"class":314,"line":3589},[312,51619,49912],{"class":318},[312,51621,51622,51624,51626,51628,51630,51632,51634,51636],{"class":314,"line":4382},[312,51623,35760],{"class":324},[312,51625,336],{"class":1436},[312,51627,49921],{"class":324},[312,51629,49924],{"class":488},[312,51631,2323],{"class":324},[312,51633,49929],{"class":1579},[312,51635,336],{"class":1436},[312,51637,49934],{"class":324},[312,51639,51640,51642,51644,51646,51648,51650],{"class":314,"line":4396},[312,51641,35817],{"class":324},[312,51643,336],{"class":1436},[312,51645,33329],{"class":324},[312,51647,33332],{"class":1579},[312,51649,336],{"class":1436},[312,51651,35828],{"class":324},[312,51653,51654],{"class":314,"line":4404},[312,51655,35833],{"class":318},[312,51657,51658,51660,51662,51664],{"class":314,"line":4409},[312,51659,35838],{"class":1579},[312,51661,336],{"class":1436},[312,51663,1433],{"class":488},[312,51665,33261],{"class":324},[312,51667,51668,51670,51672,51674],{"class":314,"line":4415},[312,51669,35849],{"class":1579},[312,51671,336],{"class":1436},[312,51673,33271],{"class":488},[312,51675,33261],{"class":324},[312,51677,51678,51680,51682,51684],{"class":314,"line":4421},[312,51679,35860],{"class":1579},[312,51681,336],{"class":1436},[312,51683,858],{"class":488},[312,51685,1959],{"class":324},[312,51687,51688,51690],{"class":314,"line":4426},[312,51689,5895],{"class":1436},[312,51691,35873],{"class":324},[312,51693,51694],{"class":314,"line":9751},[312,51695,4205],{"emptyLinePlaceholder":1881},[312,51697,51698],{"class":314,"line":9775},[312,51699,35882],{"class":318},[312,51701,51702,51704,51706],{"class":314,"line":9780},[312,51703,33742],{"class":1436},[312,51705,35889],{"class":332},[312,51707,35892],{"class":324},[312,51709,51710],{"class":314,"line":9786},[312,51711,35897],{"class":318},[312,51713,51714,51716,51718,51720,51722,51724,51726],{"class":314,"line":9813},[312,51715,33032],{"class":324},[312,51717,336],{"class":1436},[312,51719,33039],{"class":339},[312,51721,3510],{"class":1436},[312,51723,33044],{"class":324},[312,51725,3507],{"class":1436},[312,51727,35914],{"class":339},[312,51729,51730,51732,51734],{"class":314,"line":9818},[312,51731,33084],{"class":324},[312,51733,336],{"class":1436},[312,51735,34084],{"class":324},[312,51737,51738],{"class":314,"line":9824},[312,51739,4205],{"emptyLinePlaceholder":1881},[312,51741,51742],{"class":314,"line":9836},[312,51743,35931],{"class":318},[312,51745,51746,51748,51750],{"class":314,"line":9848},[312,51747,35936],{"class":324},[312,51749,336],{"class":1436},[312,51751,34137],{"class":488},[312,51753,51754,51756,51758],{"class":314,"line":9860},[312,51755,35945],{"class":324},[312,51757,336],{"class":1436},[312,51759,4890],{"class":488},[312,51761,51762],{"class":314,"line":11519},[312,51763,4205],{"emptyLinePlaceholder":1881},[312,51765,51766],{"class":314,"line":11544},[312,51767,35958],{"class":318},[312,51769,51770],{"class":314,"line":11567},[312,51771,35963],{"class":318},[312,51773,51774],{"class":314,"line":11591},[312,51775,35968],{"class":318},[312,51777,51778,51780],{"class":314,"line":11596},[312,51779,35973],{"class":1436},[312,51781,34679],{"class":324},[312,51783,51784],{"class":314,"line":11601},[312,51785,35980],{"class":318},[312,51787,51788,51790,51792,51794],{"class":314,"line":11606},[312,51789,5208],{"class":1436},[312,51791,35987],{"class":324},[312,51793,27839],{"class":1436},[312,51795,35992],{"class":324},[312,51797,51798,51800,51802],{"class":314,"line":11615},[312,51799,35997],{"class":324},[312,51801,336],{"class":1436},[312,51803,36002],{"class":324},[312,51805,51806,51808,51810],{"class":314,"line":11620},[312,51807,36007],{"class":324},[312,51809,336],{"class":1436},[312,51811,36012],{"class":324},[312,51813,51814],{"class":314,"line":11626},[312,51815,36017],{"class":318},[312,51817,51818],{"class":314,"line":11647},[312,51819,34670],{"class":324},[312,51821,51822],{"class":314,"line":11653},[312,51823,36026],{"class":318},[312,51825,51826,51828,51830],{"class":314,"line":11667},[312,51827,34455],{"class":324},[312,51829,336],{"class":1436},[312,51831,36035],{"class":324},[312,51833,51834],{"class":314,"line":11673},[312,51835,36040],{"class":318},[312,51837,51838,51840,51842,51844,51846,51848,51850],{"class":314,"line":11700},[312,51839,34472],{"class":324},[312,51841,336],{"class":1436},[312,51843,34477],{"class":324},[312,51845,34480],{"class":1579},[312,51847,336],{"class":1436},[312,51849,1433],{"class":488},[312,51851,1959],{"class":324},[312,51853,51854],{"class":314,"line":11709},[312,51855,36061],{"class":318},[312,51857,51858],{"class":314,"line":11715},[312,51859,36066],{"class":318},[312,51861,51862],{"class":314,"line":11723},[312,51863,36071],{"class":318},[312,51865,51866,51868,51870,51872,51874],{"class":314,"line":11728},[312,51867,36076],{"class":324},[312,51869,11280],{"class":1436},[312,51871,34582],{"class":324},[312,51873,4754],{"class":1436},[312,51875,36085],{"class":324},[312,51877,51878],{"class":314,"line":18404},[312,51879,36090],{"class":318},[312,51881,51882,51884,51886,51888,51890],{"class":314,"line":18410},[312,51883,36095],{"class":324},[312,51885,11280],{"class":1436},[312,51887,36100],{"class":324},[312,51889,858],{"class":488},[312,51891,1959],{"class":324},[312,51893,51894],{"class":314,"line":18433},[312,51895,4205],{"emptyLinePlaceholder":1881},[312,51897,51898],{"class":314,"line":18439},[312,51899,36113],{"class":318},[312,51901,51902,51904,51906,51908,51910],{"class":314,"line":18462},[312,51903,36118],{"class":324},[312,51905,336],{"class":1436},[312,51907,36123],{"class":324},[312,51909,2529],{"class":1436},[312,51911,36128],{"class":324},[312,51913,51914],{"class":314,"line":18476},[312,51915,36133],{"class":318},[312,51917,51918,51920,51922,51924],{"class":314,"line":18496},[312,51919,34246],{"class":488},[312,51921,1576],{"class":324},[312,51923,36142],{"class":339},[312,51925,36145],{"class":324},[312,51927,51928],{"class":314,"line":18502},[312,51929,4205],{"emptyLinePlaceholder":1881},[312,51931,51932],{"class":314,"line":18513},[312,51933,36154],{"class":318},[312,51935,51936,51938,51940,51942,51944],{"class":314,"line":18536},[312,51937,3338],{"class":1436},[312,51939,33015],{"class":488},[312,51941,4754],{"class":1436},[312,51943,33020],{"class":339},[312,51945,5544],{"class":324},[312,51947,51948],{"class":314,"line":18558},[312,51949,36171],{"class":318},[312,51951,51952,51954,51956],{"class":314,"line":18563},[312,51953,33084],{"class":324},[312,51955,336],{"class":1436},[312,51957,46346],{"class":324},[312,51959,51960],{"class":314,"line":18569},[312,51961,36184],{"class":318},[312,51963,51964],{"class":314,"line":18583},[312,51965,36189],{"class":318},[312,51967,51968,51970,51972],{"class":314,"line":18596},[312,51969,36194],{"class":324},[312,51971,36197],{"class":339},[312,51973,32293],{"class":324},[312,51975,51976],{"class":314,"line":18601},[312,51977,36204],{"class":318},[312,51979,51980,51982,51984],{"class":314,"line":18615},[312,51981,35817],{"class":324},[312,51983,336],{"class":1436},[312,51985,36213],{"class":324},[312,51987,51988],{"class":314,"line":18620},[312,51989,36218],{"class":318},[312,51991,51992],{"class":314,"line":18626},[312,51993,36223],{"class":324},[312,51995,51996],{"class":314,"line":18631},[312,51997,4205],{"emptyLinePlaceholder":1881},[312,51999,52000],{"class":314,"line":18645},[312,52001,36232],{"class":318},[312,52003,52004],{"class":314,"line":18650},[312,52005,36237],{"class":318},[312,52007,52008,52010,52012,52014,52016,52018,52020],{"class":314,"line":18655},[312,52009,33032],{"class":324},[312,52011,336],{"class":1436},[312,52013,33039],{"class":339},[312,52015,3510],{"class":1436},[312,52017,33044],{"class":324},[312,52019,3507],{"class":1436},[312,52021,35914],{"class":339},[312,52023,52024,52026,52028],{"class":314,"line":18669},[312,52025,33084],{"class":324},[312,52027,336],{"class":1436},[312,52029,34084],{"class":324},[312,52031,52032],{"class":314,"line":18681},[312,52033,36266],{"class":318},[312,52035,52036],{"class":314,"line":18686},[312,52037,36271],{"class":318},[312,52039,52040,52042,52044,52046,52049,52051,52054],{"class":314,"line":18699},[312,52041,36276],{"class":324},[312,52043,336],{"class":1436},[312,52045,2834],{"class":324},[312,52047,52048],{"class":339},"'猫'",[312,52050,2323],{"class":324},[312,52052,52053],{"class":339},"'狗'",[312,52055,35041],{"class":324},[312,52057,52058,52060],{"class":314,"line":18704},[312,52059,35973],{"class":1436},[312,52061,34679],{"class":324},[312,52063,52064],{"class":314,"line":18709},[312,52065,36341],{"class":318},[312,52067,52068,52070,52072,52074],{"class":314,"line":18714},[312,52069,5208],{"class":1436},[312,52071,36348],{"class":324},[312,52073,27839],{"class":1436},[312,52075,35992],{"class":324},[312,52077,52078,52080,52082],{"class":314,"line":18727},[312,52079,34405],{"class":324},[312,52081,336],{"class":1436},[312,52083,34410],{"class":324},[312,52085,52086,52088,52090],{"class":314,"line":18732},[312,52087,34420],{"class":324},[312,52089,336],{"class":1436},[312,52091,34425],{"class":324},[312,52093,52094],{"class":314,"line":34428},[312,52095,4205],{"emptyLinePlaceholder":1881},[312,52097,52098],{"class":314,"line":34434},[312,52099,36377],{"class":318},[312,52101,52102],{"class":314,"line":34440},[312,52103,34670],{"class":324},[312,52105,52106],{"class":314,"line":34446},[312,52107,36386],{"class":318},[312,52109,52110,52112,52114],{"class":314,"line":34452},[312,52111,34455],{"class":324},[312,52113,336],{"class":1436},[312,52115,34460],{"class":324},[312,52117,52118],{"class":314,"line":34463},[312,52119,36399],{"class":318},[312,52121,52122,52124,52126,52128,52130,52132,52134],{"class":314,"line":34469},[312,52123,34472],{"class":324},[312,52125,336],{"class":1436},[312,52127,34477],{"class":324},[312,52129,34480],{"class":1579},[312,52131,336],{"class":1436},[312,52133,1433],{"class":488},[312,52135,1959],{"class":324},[312,52137,52138],{"class":314,"line":34489},[312,52139,36420],{"class":318},[312,52141,52142,52144,52146],{"class":314,"line":34495},[312,52143,36425],{"class":324},[312,52145,336],{"class":1436},[312,52147,36430],{"class":324},[312,52149,52150,52152,52154],{"class":314,"line":34506},[312,52151,36435],{"class":324},[312,52153,336],{"class":1436},[312,52155,36440],{"class":324},[312,52157,52158,52160,52162,52164,52166,52168,52170,52172],{"class":314,"line":34512},[312,52159,36445],{"class":488},[312,52161,1576],{"class":324},[312,52163,36450],{"class":339},[312,52165,36453],{"class":324},[312,52167,36456],{"class":339},[312,52169,2323],{"class":324},[312,52171,36461],{"class":339},[312,52173,36464],{"class":324},[1856,52175,52176],{},"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":308,"searchDepth":171,"depth":171,"links":52178},[52179,52180,52181,52182],{"id":32387,"depth":274,"text":32388},{"id":39634,"depth":274,"text":39635},{"id":43067,"depth":274,"text":43068},{"id":47076,"depth":274,"text":47077},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32379,"description":1878},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":52189,"title":52190,"body":52191,"description":1878,"extension":1879,"meta":52198,"navigation":1881,"path":52199,"seo":52200,"stem":52201,"__hash__":52202},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":52192,"toc":52196},[52193],[10,52194,52190],{"id":52195},"_3yolo模型学习",{"title":308,"searchDepth":171,"depth":171,"links":52197},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":52190,"description":1878},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52204,"title":52205,"body":52206,"description":52213,"extension":1879,"meta":52214,"navigation":1881,"path":52216,"seo":52217,"stem":52218,"__hash__":52219},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52207,"toc":52211},[52208],[24,52209,52210],{},"yolo模型还未补充",{"title":308,"searchDepth":171,"depth":171,"links":52212},[],"深度学习学习",{"category":52215},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52205,"description":52213},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52221,"title":52222,"body":52223,"description":1878,"extension":1879,"meta":52248,"navigation":1881,"path":52249,"seo":52250,"stem":52251,"__hash__":52252},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52224,"toc":52246},[52225,52228,52231,52236,52243],[10,52226,52222],{"id":52227},"_1工具",[24,52229,52230],{},"提示错误插件：有问题会提前报错",[24,52232,52233],{},[19,52234],{"alt":308,"src":52235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[24,52237,52238],{},[164,52239,52242],{"href":52240,"rel":52241},"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",[168],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[24,52244,52245],{},"alt键加上下箭头可以实现语句的移动",{"title":308,"searchDepth":171,"depth":171,"links":52247},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52222,"description":1878},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52254,"title":52255,"body":52256,"description":1878,"extension":1879,"meta":55111,"navigation":1881,"path":55112,"seo":55113,"stem":55114,"__hash__":55115},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52257,"toc":55062},[52258,52261,52265,52269,52274,52277,52282,52286,52293,52298,52305,52310,52317,52322,52326,52331,52334,52338,52343,52347,52352,52355,52358,52361,52364,52367,52370,52373,52376,52381,52386,52391,52395,52398,52401,52405,52410,52413,52421,52426,52443,52451,52456,52461,52466,52471,52476,52479,52484,52489,52493,52502,52507,52512,52516,52521,52524,52528,52533,52541,52546,52551,52554,52559,52564,52569,52572,52575,52578,52583,52588,52591,52596,52599,52604,52607,52610,52613,52618,52621,52624,52639,52644,52649,52654,52657,52660,52663,52677,52680,52685,52690,52693,52696,52699,52702,52705,52708,52711,52715,52719,52724,52728,52731,52736,52741,52744,52749,52752,52756,52761,52764,52767,52770,52773,52776,52779,52782,52785,52788,52792,52797,52802,52807,52810,52813,52817,52822,52825,52829,52832,52835,52840,52843,52846,52850,52854,52857,52862,52867,52870,52899,52904,52909,52914,52919,52923,52928,52932,52937,52940,52944,52948,52953,52957,52962,52967,52971,52976,52979,52981,52984,52989,52993,52998,53002,53006,53011,53016,53021,53026,53030,53035,53040,53045,53048,53051,53056,53059,53064,53069,53074,53079,53083,53881,53885,54228,54233,54236,54239,54242,54245,54248,54251,54254,54257,54259,54262,54264,54267,54271,54276,54279,54282,54285,54289,54294,54299,54319,54322,54326,54331,54336,54353,54357,54386,54390,54412,54414,54453,54461,54467,54471,54474,54477,54482,54487,54490,54493,54496,54501,54506,54509,54512,54515,54518,54521,54524,54527,54530,54533,54536,54539,54541,54544,54547,54550,54553,54556,54559,54562,54565,54569,54574,54577,54582,54585,54588,54591,54594,54597,54600,54603,54605,54608,54611,54614,54617,54620,54623,54627,54630,54639,54642,54647,54650,54655,54658,54661,54664,54667,54670,54673,54676,54680,54684,54687,54690,54695,54700,54705,54709,54714,54719,54722,54725,54728,54731,54734,54739,54742,54747,54749,54754,54757,54761,54766,54769,54772,54777,54781,54784,54789,54792,54795,54824,54829,54832,54835,54838,54841,54844,54848,54851,54937,54941,54944,54949,54954,54961,54964,54967,54970,54973,54976,54981,54986,54989,54992,54995,54998,55001,55004,55007,55010,55013,55015,55018,55022,55027,55032,55037,55040,55045,55050,55053,55056,55059],[10,52259,52255],{"id":52260},"_2基础语法",[14,52262,52264],{"id":52263},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[69,52266,52268],{"id":52267},"_211-js组成","2.1.1 js组成",[140,52270,52271],{},[143,52272,52273],{},"js是编程语言，html和css不是编程语言，是标记语言",[24,52275,52276],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[140,52278,52279],{"start":171},[143,52280,52281],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[69,52283,52285],{"id":52284},"_212-js书写位置","2.1.2 js书写位置",[140,52287,52288],{},[143,52289,52290],{},[27,52291,52292],{},"内部 JavaScript",[24,52294,52295],{},[19,52296],{"alt":308,"src":52297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[140,52299,52300],{"start":171},[143,52301,52302],{},[27,52303,52304],{},"外部 JavaScript",[24,52306,52307],{},[19,52308],{"alt":308,"src":52309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[140,52311,52312],{"start":274},[143,52313,52314],{},[27,52315,52316],{},"内联 JavaScript",[24,52318,52319],{},[19,52320],{"alt":308,"src":52321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[69,52323,52325],{"id":52324},"_213-javascript注释","2.1.3 JavaScript注释",[24,52327,52328],{},[19,52329],{"alt":308,"src":52330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[24,52332,52333],{},"alt+shift+a一定要记住！",[69,52335,52337],{"id":52336},"_214-javascript结束符","2.1.4 JavaScript结束符",[24,52339,52340],{},[19,52341],{"alt":308,"src":52342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[69,52344,52346],{"id":52345},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[140,52348,52349],{},[143,52350,52351],{},"输出语法：",[24,52353,52354],{},"①document.write('要出的内容')",[24,52356,52357],{},"向body内输出内容；",[24,52359,52360],{},"如果输出的内容写的是标签，也会被解析cheng",[24,52362,52363],{},"②alert('要出的内容')",[24,52365,52366],{},"页面弹出警告对话框",[24,52368,52369],{},"③console.log('控制台打印')",[24,52371,52372],{},"控制台输出语法，程序员调试使用",[24,52374,52375],{},"输入log就行，自动生成：",[24,52377,52378],{},[19,52379],{"alt":308,"src":52380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[140,52382,52383],{"start":171},[143,52384,52385],{},"输入语法：",[24,52387,52388],{},[19,52389],{"alt":308,"src":52390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[69,52392,52394],{"id":52393},"_2116-字面量","21.1.6 字面量",[24,52396,52397],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[24,52399,52400],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,52402,52404],{"id":52403},"_22-变量","2.2 变量",[140,52406,52407],{},[143,52408,52409],{},"变量声明",[24,52411,52412],{},"let 变量名",[243,52414,52415,52418],{},[143,52416,52417],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[143,52419,52420],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[140,52422,52423],{"start":171},[143,52424,52425],{},"变量赋值",[303,52427,52431],{"className":52428,"code":52429,"language":52430,"meta":308,"style":308},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[119,52432,52433,52438],{"__ignoreMap":308},[312,52434,52435],{"class":314,"line":315},[312,52436,52437],{"class":324},"let age\n",[312,52439,52440],{"class":314,"line":171},[312,52441,52442],{"class":324},"age=18\n",[140,52444,52445,52448],{"start":274},[143,52446,52447],{},"连这些（变量的初始化）：let age=18",[143,52449,52450],{},"更新变量",[24,52452,52453],{},[19,52454],{"alt":308,"src":52455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[140,52457,52458],{"start":974},[143,52459,52460],{},"声明多个变量",[24,52462,52463],{},[19,52464],{"alt":308,"src":52465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[140,52467,52468],{"start":980},[143,52469,52470],{},"变量命名规则与规范",[24,52472,52473],{},[19,52474],{"alt":308,"src":52475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[24,52477,52478],{},"遵守小驼峰！",[140,52480,52481],{"start":997},[143,52482,52483],{},"变量拓展-let和var的区别",[24,52485,52486],{},[19,52487],{"alt":308,"src":52488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,52490,52492],{"id":52491},"_23-数组","2.3 数组",[303,52494,52496],{"className":52428,"code":52495,"language":52430,"meta":308,"style":308},"let arr = []\n",[119,52497,52498],{"__ignoreMap":308},[312,52499,52500],{"class":314,"line":315},[312,52501,52495],{"class":324},[24,52503,52504],{},[19,52505],{"alt":308,"src":52506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[24,52508,52509],{},[19,52510],{"alt":308,"src":52511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,52513,52515],{"id":52514},"_24-常量","2.4 常量",[24,52517,52518],{},[19,52519],{"alt":308,"src":52520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[24,52522,52523],{},"const — 类似于 let ，但是变量的值无法被修改",[14,52525,52527],{"id":52526},"_25-数据类型","2.5 数据类型",[24,52529,52530],{},[19,52531],{"alt":308,"src":52532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[140,52534,52535,52538],{},[143,52536,52537],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[143,52539,52540],{},"算数运算符：",[24,52542,52543],{},[19,52544],{"alt":308,"src":52545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[140,52547,52548],{"start":274},[143,52549,52550],{},"数字类型（Number）",[24,52552,52553],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[24,52555,52556],{},[19,52557],{"alt":308,"src":52558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[140,52560,52561],{"start":298},[143,52562,52563],{},"字符串类型（string）",[24,52565,52566],{},[19,52567],{"alt":308,"src":52568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[24,52570,52571],{},"反引号也是可以使用的",[24,52573,52574],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[24,52576,52577],{},"例如：document.write(\"我今年\"+age+\"岁\")",[140,52579,52580],{"start":974},[143,52581,52582],{},"模板字符串",[24,52584,52585],{},[19,52586],{"alt":308,"src":52587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[24,52589,52590],{},"类似于python的字符串格式化",[140,52592,52593],{"start":980},[143,52594,52595],{},"布尔类型",[24,52597,52598],{},"true 和 false",[140,52600,52601],{"start":997},[143,52602,52603],{},"未定义类型（underfined）",[24,52605,52606],{},"表示没有赋值",[24,52608,52609],{},"未定义类型是比较特殊的类型，只有一个值undefined",[24,52611,52612],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[140,52614,52615],{"start":1003},[143,52616,52617],{},"null（空类型）",[24,52619,52620],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[24,52622,52623],{},"赋值了，但是内容为空",[303,52625,52627],{"className":52428,"code":52626,"language":52430,"meta":308,"style":308},"typeof null\n输出的是'object'，是一个对象数据类型\n",[119,52628,52629,52634],{"__ignoreMap":308},[312,52630,52631],{"class":314,"line":315},[312,52632,52633],{"class":324},"typeof null\n",[312,52635,52636],{"class":314,"line":171},[312,52637,52638],{"class":324},"输出的是'object'，是一个对象数据类型\n",[140,52640,52641],{"start":1020},[143,52642,52643],{},"控制台检测数据类型",[24,52645,52646],{},[19,52647],{"alt":308,"src":52648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[140,52650,52651],{"start":1026},[143,52652,52653],{},"类型转换",[24,52655,52656],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[24,52658,52659],{},"转换方式：隐式转换和显示转换",[24,52661,52662],{},"①隐式转换",[243,52664,52665,52668,52671,52674],{},[143,52666,52667],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[143,52669,52670],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[143,52672,52673],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[143,52675,52676],{},"任何数据和字符串相加结果都是字符串",[24,52678,52679],{},"②显示转换",[24,52681,52682],{},[19,52683],{"alt":308,"src":52684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[24,52686,52687],{},[19,52688],{"alt":308,"src":52689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[24,52691,52692],{},"在输入的时候要用好隐式转换，简单写起来",[24,52694,52695],{},"let num = +prompt(’请输入数字：‘)",[24,52697,52698],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[24,52700,52701],{},"console.log(parseInt('12.333px'))",[24,52703,52704],{},"输出为：12",[24,52706,52707],{},"console.log(parseInt('a'a'a12.333px'))",[24,52709,52710],{},"输出：NaN",[14,52712,52714],{"id":52713},"_26-运算符","2.6 运算符",[69,52716,52718],{"id":52717},"_261-赋值运算符","2.6.1 赋值运算符",[24,52720,52721],{},[19,52722],{"alt":308,"src":52723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[69,52725,52727],{"id":52726},"_262-一元运算符","2.6.2 一元运算符",[24,52729,52730],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[24,52732,52733],{},[19,52734],{"alt":308,"src":52735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[24,52737,52738],{},[19,52739],{"alt":308,"src":52740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[24,52742,52743],{},"两者的区别：",[24,52745,52746],{},[19,52747],{"alt":308,"src":52748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[24,52750,52751],{},"前置先自加；后置后加，代码执行完之后再加",[69,52753,52755],{"id":52754},"_263-比较运算符","2.6.3 比较运算符",[24,52757,52758],{},[19,52759],{"alt":308,"src":52760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[24,52762,52763],{},"比较运算符也有隐式转换",[24,52765,52766],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[24,52768,52769],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[24,52771,52772],{},"要使用三等，开发的时候",[24,52774,52775],{},"NaN不等于任何人，包括它自己",[24,52777,52778],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[24,52780,52781],{},"7\u002F10=0.7",[24,52783,52784],{},"最后：0.5+0.2=0.7",[24,52786,52787],{},"字符串比较，比较的是字符对应的ASCII码",[69,52789,52791],{"id":52790},"_264-逻辑运算符","2.6.4 逻辑运算符",[24,52793,52794],{},[19,52795],{"alt":308,"src":52796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[24,52798,52799],{},[19,52800],{"alt":308,"src":52801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[24,52803,52804],{},[19,52805],{"alt":308,"src":52806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[24,52808,52809],{},"上述题目选D",[24,52811,52812],{},"与真2假1；或真1假2",[69,52814,52816],{"id":52815},"_265-运算符优先级","2.6.5 运算符优先级",[24,52818,52819],{},[19,52820],{"alt":308,"src":52821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[24,52823,52824],{},"先算逻辑与，后算逻辑或",[14,52826,52828],{"id":52827},"_27-语句","2.7 语句",[24,52830,52831],{},"表达式：是可以被求值的代码，会有结果给我们",[24,52833,52834],{},"语句：语句是可以被执行的代码，例如prompt()",[24,52836,52837],{},[19,52838],{"alt":308,"src":52839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[24,52841,52842],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[24,52844,52845],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[69,52847,52849],{"id":52848},"_271-分支语句","2.7.1 分支语句",[23796,52851,52853],{"id":52852},"_2711-if分支语句","2.7.1.1 if分支语句",[24,52855,52856],{},"if语句单行简单的话，可以不写{}，写在一行就行",[140,52858,52859],{},[143,52860,52861],{},"单分支语句",[24,52863,52864],{},[19,52865],{"alt":308,"src":52866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[24,52868,52869],{},"除了0，所有数字都为真",[303,52871,52873],{"className":52428,"code":52872,"language":52430,"meta":308,"style":308},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[119,52874,52875,52880,52885,52890,52894],{"__ignoreMap":308},[312,52876,52877],{"class":314,"line":315},[312,52878,52879],{"class":324},"if（0) {\n",[312,52881,52882],{"class":314,"line":171},[312,52883,52884],{"class":324},"    let a=1\n",[312,52886,52887],{"class":314,"line":274},[312,52888,52889],{"class":324},"    alert(typeof a)\n",[312,52891,52892],{"class":314,"line":298},[312,52893,515],{"class":324},[312,52895,52896],{"class":314,"line":974},[312,52897,52898],{"class":324},"不输出，括号为假\n",[140,52900,52901],{"start":171},[143,52902,52903],{},"双分支语句",[24,52905,52906],{},[19,52907],{"alt":308,"src":52908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[140,52910,52911],{"start":274},[143,52912,52913],{},"多分支语句",[24,52915,52916],{},[19,52917],{"alt":308,"src":52918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[23796,52920,52922],{"id":52921},"_2712-三元运算符","2.7.1.2 三元运算符",[24,52924,52925],{},[19,52926],{"alt":308,"src":52927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[23796,52929,52931],{"id":52930},"_2713-switch语句","2.7.1.3 switch语句",[24,52933,52934],{},[19,52935],{"alt":308,"src":52936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[24,52938,52939],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[69,52941,52943],{"id":52942},"_272-循环语句","2.7.2 循环语句",[23796,52945,52947],{"id":52946},"_2721-断点演示","2.7.2.1 断点演示",[24,52949,52950],{},[19,52951],{"alt":308,"src":52952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[23796,52954,52956],{"id":52955},"_2722-while循环","2.7.2.2 while循环",[24,52958,52959],{},[19,52960],{"alt":308,"src":52961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[24,52963,52964],{},[19,52965],{"alt":308,"src":52966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[23796,52968,52970],{"id":52969},"_2723-for循环","2.7.2.3 for循环",[24,52972,52973],{},[19,52974],{"alt":308,"src":52975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[24,52977,52978],{},"for(;;) {",[24,52980,2888],{},[24,52982,52983],{},"表示无限循环",[24,52985,52986],{},[19,52987],{"alt":308,"src":52988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[23796,52990,52992],{"id":52991},"_2724-循环的退出","2.7.2.4 循环的退出",[24,52994,52995],{},[19,52996],{"alt":308,"src":52997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52999,53001],{"id":53000},"_28-数组","2.8 数组",[69,53003,53005],{"id":53004},"_281-基础认识","2.8.1 基础认识",[24,53007,53008],{},[19,53009],{"alt":308,"src":53010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[24,53012,53013],{},[19,53014],{"alt":308,"src":53015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[24,53017,53018],{},[19,53019],{"alt":308,"src":53020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[24,53022,53023],{},[19,53024],{"alt":308,"src":53025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[69,53027,53029],{"id":53028},"_282-操作数组","2.8.2 操作数组",[24,53031,53032],{},[19,53033],{"alt":308,"src":53034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[140,53036,53037],{},[143,53038,53039],{},"添加元素",[24,53041,53042],{},[19,53043],{"alt":308,"src":53044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[24,53046,53047],{},"console.log(arr.push('green'))",[24,53049,53050],{},"输出结果：为新数组的长度",[24,53052,53053],{},[19,53054],{"alt":308,"src":53055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[24,53057,53058],{},"push用的非常多，一定要记住",[140,53060,53061],{},[143,53062,53063],{},"删除元素",[24,53065,53066],{},[19,53067],{"alt":308,"src":53068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[24,53070,53071],{},[19,53072],{"alt":308,"src":53073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[24,53075,53076],{},[19,53077],{"alt":308,"src":53078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[69,53080,53082],{"id":53081},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[303,53084,53086],{"className":52428,"code":53085,"language":52430,"meta":308,"style":308},"\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",[119,53087,53088,53101,53117,53121,53130,53148,53172,53194,53207,53215,53222,53233,53244,53248,53252,53259,53271,53285,53298,53316,53333,53347,53359,53371,53383,53387,53391,53401,53411,53423,53435,53447,53458,53462,53466,53478,53482,53496,53500,53504,53515,53529,53541,53555,53559,53568,53576,53580,53589,53593,53602,53607,53612,53625,53653,53658,53663,53688,53693,53697,53702,53707,53722,53726,53731,53761,53773,53789,53805,53819,53824,53831,53835,53840,53853,53861,53869,53873],{"__ignoreMap":308},[312,53089,53090,53093,53096,53099],{"class":314,"line":315},[312,53091,53092],{"class":324},"\u003C!",[312,53094,53095],{"class":328},"DOCTYPE",[312,53097,53098],{"class":332}," html",[312,53100,343],{"class":324},[312,53102,53103,53105,53107,53110,53112,53115],{"class":314,"line":171},[312,53104,325],{"class":324},[312,53106,52430],{"class":328},[312,53108,53109],{"class":332}," lang",[312,53111,336],{"class":324},[312,53113,53114],{"class":339},"\"en\"",[312,53116,343],{"class":324},[312,53118,53119],{"class":314,"line":274},[312,53120,4205],{"emptyLinePlaceholder":1881},[312,53122,53123,53125,53128],{"class":314,"line":298},[312,53124,325],{"class":324},[312,53126,53127],{"class":328},"head",[312,53129,343],{"class":324},[312,53131,53132,53135,53138,53141,53143,53146],{"class":314,"line":974},[312,53133,53134],{"class":324},"    \u003C",[312,53136,53137],{"class":328},"meta",[312,53139,53140],{"class":332}," charset",[312,53142,336],{"class":324},[312,53144,53145],{"class":339},"\"UTF-8\"",[312,53147,343],{"class":324},[312,53149,53150,53152,53154,53157,53159,53162,53165,53167,53170],{"class":314,"line":980},[312,53151,53134],{"class":324},[312,53153,53137],{"class":328},[312,53155,53156],{"class":332}," http-equiv",[312,53158,336],{"class":324},[312,53160,53161],{"class":339},"\"X-UA-Compatible\"",[312,53163,53164],{"class":332}," content",[312,53166,336],{"class":324},[312,53168,53169],{"class":339},"\"IE=edge\"",[312,53171,343],{"class":324},[312,53173,53174,53176,53178,53180,53182,53185,53187,53189,53192],{"class":314,"line":997},[312,53175,53134],{"class":324},[312,53177,53137],{"class":328},[312,53179,16721],{"class":332},[312,53181,336],{"class":324},[312,53183,53184],{"class":339},"\"viewport\"",[312,53186,53164],{"class":332},[312,53188,336],{"class":324},[312,53190,53191],{"class":339},"\"width=device-width, initial-scale=1.0\"",[312,53193,343],{"class":324},[312,53195,53196,53198,53200,53203,53205],{"class":314,"line":1003},[312,53197,53134],{"class":324},[312,53199,628],{"class":328},[312,53201,53202],{"class":324},">Document\u003C\u002F",[312,53204,628],{"class":328},[312,53206,343],{"class":324},[312,53208,53209,53211,53213],{"class":314,"line":1020},[312,53210,53134],{"class":324},[312,53212,1856],{"class":328},[312,53214,343],{"class":324},[312,53216,53217,53220],{"class":314,"line":1026},[312,53218,53219],{"class":328},"        *",[312,53221,483],{"class":324},[312,53223,53224,53227,53229,53231],{"class":314,"line":3418},[312,53225,53226],{"class":488},"            margin",[312,53228,492],{"class":324},[312,53230,858],{"class":488},[312,53232,498],{"class":324},[312,53234,53235,53238,53240,53242],{"class":314,"line":3423},[312,53236,53237],{"class":488},"            padding",[312,53239,492],{"class":324},[312,53241,858],{"class":488},[312,53243,498],{"class":324},[312,53245,53246],{"class":314,"line":3429},[312,53247,4334],{"class":324},[312,53249,53250],{"class":314,"line":3434},[312,53251,4205],{"emptyLinePlaceholder":1881},[312,53253,53254,53257],{"class":314,"line":3448},[312,53255,53256],{"class":332},"        .box",[312,53258,483],{"class":324},[312,53260,53261,53264,53266,53269],{"class":314,"line":3453},[312,53262,53263],{"class":488},"            display",[312,53265,492],{"class":324},[312,53267,53268],{"class":488},"flex",[312,53270,498],{"class":324},[312,53272,53273,53276,53278,53281,53283],{"class":314,"line":3459},[312,53274,53275],{"class":488},"            width",[312,53277,492],{"class":324},[312,53279,53280],{"class":488},"700",[312,53282,1437],{"class":1436},[312,53284,498],{"class":324},[312,53286,53287,53290,53292,53294,53296],{"class":314,"line":3480},[312,53288,53289],{"class":488},"            height",[312,53291,492],{"class":324},[312,53293,5778],{"class":488},[312,53295,1437],{"class":1436},[312,53297,498],{"class":324},[312,53299,53300,53303,53305,53307,53309,53311,53314],{"class":314,"line":3485},[312,53301,53302],{"class":488},"            border-left",[312,53304,492],{"class":324},[312,53306,1433],{"class":488},[312,53308,1437],{"class":1436},[312,53310,1440],{"class":488},[312,53312,53313],{"class":488}," pink",[312,53315,498],{"class":324},[312,53317,53318,53321,53323,53325,53327,53329,53331],{"class":314,"line":3499},[312,53319,53320],{"class":488},"            border-bottom",[312,53322,492],{"class":324},[312,53324,1433],{"class":488},[312,53326,1437],{"class":1436},[312,53328,1440],{"class":488},[312,53330,53313],{"class":488},[312,53332,498],{"class":324},[312,53334,53335,53337,53339,53341,53343,53345],{"class":314,"line":3504},[312,53336,53226],{"class":488},[312,53338,492],{"class":324},[312,53340,2601],{"class":488},[312,53342,1437],{"class":1436},[312,53344,861],{"class":488},[312,53346,498],{"class":324},[312,53348,53349,53352,53354,53357],{"class":314,"line":3533},[312,53350,53351],{"class":488},"            justify-content",[312,53353,492],{"class":324},[312,53355,53356],{"class":488},"space-around",[312,53358,498],{"class":324},[312,53360,53361,53364,53366,53369],{"class":314,"line":3538},[312,53362,53363],{"class":488},"            align-items",[312,53365,492],{"class":324},[312,53367,53368],{"class":488},"flex-end",[312,53370,498],{"class":324},[312,53372,53373,53376,53378,53381],{"class":314,"line":3555},[312,53374,53375],{"class":488},"            text-align",[312,53377,492],{"class":324},[312,53379,53380],{"class":488},"center",[312,53382,498],{"class":324},[312,53384,53385],{"class":314,"line":3560},[312,53386,4334],{"class":324},[312,53388,53389],{"class":314,"line":3565},[312,53390,4205],{"emptyLinePlaceholder":1881},[312,53392,53393,53395,53397,53399],{"class":314,"line":3570},[312,53394,53256],{"class":332},[312,53396,2902],{"class":1436},[312,53398,329],{"class":328},[312,53400,483],{"class":324},[312,53402,53403,53405,53407,53409],{"class":314,"line":3584},[312,53404,53263],{"class":488},[312,53406,492],{"class":324},[312,53408,53268],{"class":488},[312,53410,498],{"class":324},[312,53412,53413,53415,53417,53419,53421],{"class":314,"line":3589},[312,53414,53275],{"class":488},[312,53416,492],{"class":324},[312,53418,2601],{"class":488},[312,53420,1437],{"class":1436},[312,53422,498],{"class":324},[312,53424,53425,53428,53430,53433],{"class":314,"line":4382},[312,53426,53427],{"class":488},"            background-color",[312,53429,492],{"class":324},[312,53431,53432],{"class":488},"pink",[312,53434,498],{"class":324},[312,53436,53437,53440,53442,53445],{"class":314,"line":4396},[312,53438,53439],{"class":488},"            flex-direction",[312,53441,492],{"class":324},[312,53443,53444],{"class":488},"column",[312,53446,498],{"class":324},[312,53448,53449,53451,53453,53456],{"class":314,"line":4404},[312,53450,53351],{"class":488},[312,53452,492],{"class":324},[312,53454,53455],{"class":488},"space-between",[312,53457,498],{"class":324},[312,53459,53460],{"class":314,"line":4409},[312,53461,4334],{"class":324},[312,53463,53464],{"class":314,"line":4415},[312,53465,4205],{"emptyLinePlaceholder":1881},[312,53467,53468,53470,53473,53476],{"class":314,"line":4421},[312,53469,53256],{"class":332},[312,53471,53472],{"class":328}," div",[312,53474,53475],{"class":328}," span",[312,53477,483],{"class":324},[312,53479,53480],{"class":314,"line":4426},[312,53481,4205],{"emptyLinePlaceholder":1881},[312,53483,53484,53487,53489,53492,53494],{"class":314,"line":9751},[312,53485,53486],{"class":488},"            margin-top",[312,53488,492],{"class":324},[312,53490,53491],{"class":488},"-20",[312,53493,1437],{"class":1436},[312,53495,498],{"class":324},[312,53497,53498],{"class":314,"line":9775},[312,53499,4334],{"class":324},[312,53501,53502],{"class":314,"line":9780},[312,53503,4205],{"emptyLinePlaceholder":1881},[312,53505,53506,53508,53510,53513],{"class":314,"line":9786},[312,53507,53256],{"class":332},[312,53509,53472],{"class":328},[312,53511,53512],{"class":328}," h4",[312,53514,483],{"class":324},[312,53516,53517,53520,53522,53525,53527],{"class":314,"line":9813},[312,53518,53519],{"class":488},"            margin-bottom",[312,53521,492],{"class":324},[312,53523,53524],{"class":488},"-35",[312,53526,1437],{"class":1436},[312,53528,498],{"class":324},[312,53530,53531,53533,53535,53537,53539],{"class":314,"line":9818},[312,53532,53275],{"class":488},[312,53534,492],{"class":324},[312,53536,2301],{"class":488},[312,53538,1437],{"class":1436},[312,53540,498],{"class":324},[312,53542,53543,53546,53548,53551,53553],{"class":314,"line":9824},[312,53544,53545],{"class":488},"            margin-left",[312,53547,492],{"class":324},[312,53549,53550],{"class":488},"-10",[312,53552,1437],{"class":1436},[312,53554,498],{"class":324},[312,53556,53557],{"class":314,"line":9836},[312,53558,4334],{"class":324},[312,53560,53561,53564,53566],{"class":314,"line":9848},[312,53562,53563],{"class":324},"    \u003C\u002F",[312,53565,1856],{"class":328},[312,53567,343],{"class":324},[312,53569,53570,53572,53574],{"class":314,"line":9860},[312,53571,353],{"class":324},[312,53573,53127],{"class":328},[312,53575,343],{"class":324},[312,53577,53578],{"class":314,"line":11519},[312,53579,4205],{"emptyLinePlaceholder":1881},[312,53581,53582,53584,53587],{"class":314,"line":11544},[312,53583,325],{"class":324},[312,53585,53586],{"class":328},"body",[312,53588,343],{"class":324},[312,53590,53591],{"class":314,"line":11567},[312,53592,4205],{"emptyLinePlaceholder":1881},[312,53594,53595,53597,53600],{"class":314,"line":11591},[312,53596,53134],{"class":324},[312,53598,53599],{"class":328},"script",[312,53601,343],{"class":324},[312,53603,53604],{"class":314,"line":11596},[312,53605,53606],{"class":318},"        \u002F\u002F 1. 四次弹框效果\n",[312,53608,53609],{"class":314,"line":11601},[312,53610,53611],{"class":318},"        \u002F\u002F 声明一个新的数组\n",[312,53613,53614,53617,53620,53622],{"class":314,"line":11606},[312,53615,53616],{"class":1436},"        let",[312,53618,53619],{"class":324}," arr ",[312,53621,336],{"class":1436},[312,53623,53624],{"class":324}," []\n",[312,53626,53627,53629,53631,53634,53636,53638,53640,53642,53644,53647,53649,53651],{"class":314,"line":11615},[312,53628,5208],{"class":1436},[312,53630,3464],{"class":324},[312,53632,53633],{"class":1436},"let",[312,53635,11241],{"class":324},[312,53637,336],{"class":1436},[312,53639,26914],{"class":488},[312,53641,11248],{"class":324},[312,53643,3394],{"class":1436},[312,53645,53646],{"class":488}," 4",[312,53648,5019],{"class":324},[312,53650,4097],{"class":1436},[312,53652,14244],{"class":324},[312,53654,53655],{"class":314,"line":11620},[312,53656,53657],{"class":318},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[312,53659,53660],{"class":314,"line":11626},[312,53661,53662],{"class":318},"            \u002F\u002F arr.push(num)\n",[312,53664,53665,53668,53671,53673,53676,53678,53681,53683,53686],{"class":314,"line":11647},[312,53666,53667],{"class":324},"            arr.",[312,53669,53670],{"class":332},"push",[312,53672,1576],{"class":324},[312,53674,53675],{"class":332},"prompt",[312,53677,1576],{"class":324},[312,53679,53680],{"class":339},"`请输入第${",[312,53682,2386],{"class":324},[312,53684,53685],{"class":339},"}季度的数据:`",[312,53687,32293],{"class":324},[312,53689,53690],{"class":314,"line":11653},[312,53691,53692],{"class":318},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[312,53694,53695],{"class":314,"line":11667},[312,53696,4334],{"class":324},[312,53698,53699],{"class":314,"line":11673},[312,53700,53701],{"class":318},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[312,53703,53704],{"class":314,"line":11700},[312,53705,53706],{"class":318},"        \u002F\u002F 盒子开头\n",[312,53708,53709,53712,53715,53717,53720],{"class":314,"line":11709},[312,53710,53711],{"class":324},"        document.",[312,53713,53714],{"class":332},"write",[312,53716,1576],{"class":324},[312,53718,53719],{"class":339},"` \u003Cdiv class=\"box\">`",[312,53721,1959],{"class":324},[312,53723,53724],{"class":314,"line":11715},[312,53725,4205],{"emptyLinePlaceholder":1881},[312,53727,53728],{"class":314,"line":11723},[312,53729,53730],{"class":318},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[312,53732,53733,53735,53737,53739,53741,53743,53745,53747,53749,53752,53755,53757,53759],{"class":314,"line":11728},[312,53734,5208],{"class":1436},[312,53736,3464],{"class":324},[312,53738,53633],{"class":1436},[312,53740,11241],{"class":324},[312,53742,336],{"class":1436},[312,53744,5898],{"class":488},[312,53746,11248],{"class":324},[312,53748,325],{"class":1436},[312,53750,53751],{"class":324}," arr.",[312,53753,53754],{"class":488},"length",[312,53756,5019],{"class":324},[312,53758,4097],{"class":1436},[312,53760,14244],{"class":324},[312,53762,53763,53766,53768,53770],{"class":314,"line":18404},[312,53764,53765],{"class":324},"            document.",[312,53767,53714],{"class":332},[312,53769,1576],{"class":324},[312,53771,53772],{"class":339},"`\n",[312,53774,53775,53778,53780,53782,53784,53786],{"class":314,"line":18410},[312,53776,53777],{"class":339},"              \u003Cdiv style=\"height: ${",[312,53779,5685],{"class":324},[312,53781,2834],{"class":339},[312,53783,2386],{"class":324},[312,53785,2882],{"class":339},[312,53787,53788],{"class":339},"}px;\">\n",[312,53790,53791,53794,53796,53798,53800,53802],{"class":314,"line":18433},[312,53792,53793],{"class":339},"                \u003Cspan>${",[312,53795,5685],{"class":324},[312,53797,2834],{"class":339},[312,53799,2386],{"class":324},[312,53801,2882],{"class":339},[312,53803,53804],{"class":339},"}\u003C\u002Fspan>\n",[312,53806,53807,53810,53812,53814,53816],{"class":314,"line":18439},[312,53808,53809],{"class":339},"                \u003Ch4>第${",[312,53811,2386],{"class":324},[312,53813,47361],{"class":1436},[312,53815,26914],{"class":488},[312,53817,53818],{"class":339},"}季度\u003C\u002Fh4>\n",[312,53820,53821],{"class":314,"line":18462},[312,53822,53823],{"class":339},"              \u003C\u002Fdiv>          \n",[312,53825,53826,53829],{"class":314,"line":18476},[312,53827,53828],{"class":339},"            `",[312,53830,1959],{"class":324},[312,53832,53833],{"class":314,"line":18496},[312,53834,4334],{"class":324},[312,53836,53837],{"class":314,"line":18502},[312,53838,53839],{"class":318},"        \u002F\u002F 盒子结尾\n",[312,53841,53842,53844,53846,53848,53851],{"class":314,"line":18513},[312,53843,53711],{"class":324},[312,53845,53714],{"class":332},[312,53847,1576],{"class":324},[312,53849,53850],{"class":339},"` \u003C\u002Fdiv>`",[312,53852,1959],{"class":324},[312,53854,53855,53857,53859],{"class":314,"line":18536},[312,53856,53563],{"class":324},[312,53858,53599],{"class":328},[312,53860,343],{"class":324},[312,53862,53863,53865,53867],{"class":314,"line":18558},[312,53864,353],{"class":324},[312,53866,53586],{"class":328},[312,53868,343],{"class":324},[312,53870,53871],{"class":314,"line":18563},[312,53872,4205],{"emptyLinePlaceholder":1881},[312,53874,53875,53877,53879],{"class":314,"line":18569},[312,53876,353],{"class":324},[312,53878,52430],{"class":328},[312,53880,343],{"class":324},[69,53882,53884],{"id":53883},"_284-冒泡排序","2.8.4 冒泡排序",[303,53886,53888],{"className":52428,"code":53887,"language":52430,"meta":308,"style":308},"\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",[119,53889,53890,53900,53914,53918,53926,53941,53961,53973,53981,53985,53993,54001,54033,54066,54103,54108,54127,54132,54145,54160,54176,54180,54185,54189,54199,54208,54216,54220],{"__ignoreMap":308},[312,53891,53892,53894,53896,53898],{"class":314,"line":315},[312,53893,53092],{"class":324},[312,53895,53095],{"class":328},[312,53897,53098],{"class":332},[312,53899,343],{"class":324},[312,53901,53902,53904,53906,53908,53910,53912],{"class":314,"line":171},[312,53903,325],{"class":324},[312,53905,52430],{"class":328},[312,53907,53109],{"class":332},[312,53909,336],{"class":324},[312,53911,53114],{"class":339},[312,53913,343],{"class":324},[312,53915,53916],{"class":314,"line":274},[312,53917,4205],{"emptyLinePlaceholder":1881},[312,53919,53920,53922,53924],{"class":314,"line":298},[312,53921,325],{"class":324},[312,53923,53127],{"class":328},[312,53925,343],{"class":324},[312,53927,53928,53931,53933,53935,53937,53939],{"class":314,"line":974},[312,53929,53930],{"class":324},"  \u003C",[312,53932,53137],{"class":328},[312,53934,53140],{"class":332},[312,53936,336],{"class":324},[312,53938,53145],{"class":339},[312,53940,343],{"class":324},[312,53942,53943,53945,53947,53949,53951,53953,53955,53957,53959],{"class":314,"line":980},[312,53944,53930],{"class":324},[312,53946,53137],{"class":328},[312,53948,16721],{"class":332},[312,53950,336],{"class":324},[312,53952,53184],{"class":339},[312,53954,53164],{"class":332},[312,53956,336],{"class":324},[312,53958,53191],{"class":339},[312,53960,343],{"class":324},[312,53962,53963,53965,53967,53969,53971],{"class":314,"line":997},[312,53964,53930],{"class":324},[312,53966,628],{"class":328},[312,53968,53202],{"class":324},[312,53970,628],{"class":328},[312,53972,343],{"class":324},[312,53974,53975,53977,53979],{"class":314,"line":1003},[312,53976,353],{"class":324},[312,53978,53127],{"class":328},[312,53980,343],{"class":324},[312,53982,53983],{"class":314,"line":1020},[312,53984,4205],{"emptyLinePlaceholder":1881},[312,53986,53987,53989,53991],{"class":314,"line":1026},[312,53988,325],{"class":324},[312,53990,53586],{"class":328},[312,53992,343],{"class":324},[312,53994,53995,53997,53999],{"class":314,"line":3418},[312,53996,53930],{"class":324},[312,53998,53599],{"class":328},[312,54000,343],{"class":324},[312,54002,54003,54006,54008,54010,54013,54015,54017,54019,54021,54023,54025,54027,54029,54031],{"class":314,"line":3423},[312,54004,54005],{"class":1436},"    let",[312,54007,53619],{"class":324},[312,54009,336],{"class":1436},[312,54011,54012],{"class":324}," [",[312,54014,2264],{"class":488},[312,54016,733],{"class":324},[312,54018,2238],{"class":488},[312,54020,733],{"class":324},[312,54022,2021],{"class":488},[312,54024,733],{"class":324},[312,54026,2027],{"class":488},[312,54028,733],{"class":324},[312,54030,1433],{"class":488},[312,54032,35041],{"class":324},[312,54034,54035,54037,54039,54041,54043,54045,54047,54049,54051,54053,54055,54058,54060,54062,54064],{"class":314,"line":3429},[312,54036,5006],{"class":1436},[312,54038,3464],{"class":324},[312,54040,53633],{"class":1436},[312,54042,11241],{"class":324},[312,54044,336],{"class":1436},[312,54046,5898],{"class":488},[312,54048,11248],{"class":324},[312,54050,325],{"class":1436},[312,54052,53751],{"class":324},[312,54054,53754],{"class":488},[312,54056,54057],{"class":1436}," -",[312,54059,26914],{"class":488},[312,54061,5019],{"class":324},[312,54063,4097],{"class":1436},[312,54065,14244],{"class":324},[312,54067,54068,54071,54073,54075,54077,54079,54081,54083,54085,54087,54089,54091,54093,54095,54097,54099,54101],{"class":314,"line":3434},[312,54069,54070],{"class":1436},"      for",[312,54072,3464],{"class":324},[312,54074,53633],{"class":1436},[312,54076,11303],{"class":324},[312,54078,336],{"class":1436},[312,54080,5898],{"class":488},[312,54082,11310],{"class":324},[312,54084,325],{"class":1436},[312,54086,53751],{"class":324},[312,54088,53754],{"class":488},[312,54090,54057],{"class":1436},[312,54092,11241],{"class":324},[312,54094,2477],{"class":1436},[312,54096,26914],{"class":488},[312,54098,11317],{"class":324},[312,54100,4097],{"class":1436},[312,54102,14244],{"class":324},[312,54104,54105],{"class":314,"line":3448},[312,54106,54107],{"class":318},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[312,54109,54110,54112,54115,54117,54120,54122,54124],{"class":314,"line":3453},[312,54111,4302],{"class":1436},[312,54113,54114],{"class":324}," (arr[j] ",[312,54116,2902],{"class":1436},[312,54118,54119],{"class":324}," arr[j ",[312,54121,2426],{"class":1436},[312,54123,26914],{"class":488},[312,54125,54126],{"class":324},"]) {\n",[312,54128,54129],{"class":314,"line":3459},[312,54130,54131],{"class":318},"          \u002F\u002F 交换两个变量\n",[312,54133,54134,54137,54140,54142],{"class":314,"line":3480},[312,54135,54136],{"class":1436},"          let",[312,54138,54139],{"class":324}," tmp ",[312,54141,336],{"class":1436},[312,54143,54144],{"class":324}," arr[j]\n",[312,54146,54147,54150,54152,54154,54156,54158],{"class":314,"line":3485},[312,54148,54149],{"class":324},"          arr[j] ",[312,54151,336],{"class":1436},[312,54153,54119],{"class":324},[312,54155,2426],{"class":1436},[312,54157,26914],{"class":488},[312,54159,35041],{"class":324},[312,54161,54162,54165,54167,54169,54171,54173],{"class":314,"line":3499},[312,54163,54164],{"class":324},"          arr[j ",[312,54166,2426],{"class":1436},[312,54168,26914],{"class":488},[312,54170,6248],{"class":324},[312,54172,336],{"class":1436},[312,54174,54175],{"class":324}," tmp\n",[312,54177,54178],{"class":314,"line":3504},[312,54179,4334],{"class":324},[312,54181,54182],{"class":314,"line":3533},[312,54183,54184],{"class":324},"      }\n",[312,54186,54187],{"class":314,"line":3538},[312,54188,3992],{"class":324},[312,54190,54191,54194,54196],{"class":314,"line":3555},[312,54192,54193],{"class":324},"    document.",[312,54195,53714],{"class":332},[312,54197,54198],{"class":324},"(arr)\n",[312,54200,54201,54204,54206],{"class":314,"line":3560},[312,54202,54203],{"class":324},"  \u003C\u002F",[312,54205,53599],{"class":328},[312,54207,343],{"class":324},[312,54209,54210,54212,54214],{"class":314,"line":3565},[312,54211,353],{"class":324},[312,54213,53586],{"class":328},[312,54215,343],{"class":324},[312,54217,54218],{"class":314,"line":3570},[312,54219,4205],{"emptyLinePlaceholder":1881},[312,54221,54222,54224,54226],{"class":314,"line":3584},[312,54223,353],{"class":324},[312,54225,52430],{"class":328},[312,54227,343],{"class":324},[24,54229,54230],{},[19,54231],{"alt":308,"src":54232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[24,54234,54235],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[24,54237,54238],{},"let arr = [4, 2, 5, 1, 3]",[24,54240,54241],{},"\u002F\u002F 1.升序排列写法",[24,54243,54244],{},"arr.sort(function (a, b) {",[24,54246,54247],{},"return a - b",[24,54249,54250],{},"})",[24,54252,54253],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[24,54255,54256],{},"\u002F\u002F 降序排列写法",[24,54258,54244],{},[24,54260,54261],{},"return b - a",[24,54263,54250],{},[24,54265,54266],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54268,54270],{"id":54269},"_29-函数","2.9 函数",[24,54272,54273],{},[19,54274],{"alt":308,"src":54275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[24,54277,54278],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[24,54280,54281],{},"函数的声明用function",[24,54283,54284],{},"函数里边可以嵌套函数",[69,54286,54288],{"id":54287},"_291-函数传参","2.9.1 函数传参",[24,54290,54291],{},[19,54292],{"alt":308,"src":54293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[24,54295,54296],{},[19,54297],{"alt":308,"src":54298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[243,54300,54301,54304,54307,54310,54313,54316],{},[143,54302,54303],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[143,54305,54306],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[143,54308,54309],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[143,54311,54312],{},"开发中尽量保持形参和实参个数一致",[143,54314,54315],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[143,54317,54318],{},"形参只在函数中有用，所以不需要进行声明这个变量",[24,54320,54321],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[69,54323,54325],{"id":54324},"_292-函数的返回值","2.9.2 函数的返回值",[24,54327,54328],{},[19,54329],{"alt":308,"src":54330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[24,54332,54333],{},[19,54334],{"alt":308,"src":54335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[243,54337,54338,54341,54344,54347,54350],{},[143,54339,54340],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[143,54342,54343],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[143,54345,54346],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[143,54348,54349],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[143,54351,54352],{},"断点调试:进入函数内部看执行过程F11",[69,54354,54356],{"id":54355},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[303,54358,54360],{"className":52428,"code":54359,"language":52430,"meta":308,"style":308},"    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",[119,54361,54362,54367,54372,54376,54381],{"__ignoreMap":308},[312,54363,54364],{"class":314,"line":315},[312,54365,54366],{"class":324},"    function fn(a, b) {\n",[312,54368,54369],{"class":314,"line":171},[312,54370,54371],{"class":324},"      console.log(a + b);\n",[312,54373,54374],{"class":314,"line":274},[312,54375,3992],{"class":324},[312,54377,54378],{"class":314,"line":298},[312,54379,54380],{"class":324},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[312,54382,54383],{"class":314,"line":974},[312,54384,54385],{"class":324},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[69,54387,54389],{"id":54388},"_294-作用域","2.9.4 作用域",[243,54391,54392,54398,54403,54406,54409],{},[143,54393,54394,54395],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[27,54396,54397],{},"作用域",[143,54399,54400],{},[27,54401,54402],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[143,54404,54405],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[143,54407,54408],{},"函数内部可以直接所使用全局变量",[143,54410,54411],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[24,54413,16434],{},[303,54415,54417],{"className":52428,"code":54416,"language":52430,"meta":308,"style":308},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[119,54418,54419,54424,54429,54433,54438,54443,54448],{"__ignoreMap":308},[312,54420,54421],{"class":314,"line":315},[312,54422,54423],{"class":324},"    function fun() {\n",[312,54425,54426],{"class":314,"line":171},[312,54427,54428],{"class":324},"      num = 10\n",[312,54430,54431],{"class":314,"line":274},[312,54432,3992],{"class":324},[312,54434,54435],{"class":314,"line":298},[312,54436,54437],{"class":324},"    fun()\n",[312,54439,54440],{"class":314,"line":974},[312,54441,54442],{"class":324},"    console.log(num)\n",[312,54444,54445],{"class":314,"line":980},[312,54446,54447],{"class":324},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[312,54449,54450],{"class":314,"line":997},[312,54451,54452],{"class":324},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[243,54454,54455,54458],{},[143,54456,54457],{},"函数内部的形参可以看做是局部变量",[143,54459,54460],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[24,54462,54463,54464],{},"变量访问原则： ",[27,54465,54466],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[69,54468,54470],{"id":54469},"_295-匿名函数","2.9.5 匿名函数",[24,54472,54473],{},"函数可以分为具名函数和匿名函数",[24,54475,54476],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[140,54478,54479],{},[143,54480,54481],{},"函数表达式",[24,54483,54484],{},[19,54485],{"alt":308,"src":54486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[24,54488,54489],{},"里边也可以写参数",[24,54491,54492],{},"具名函数调用位置可以随意调整；",[24,54494,54495],{},"匿名函数函数表达式形式只能在声明后才可以使用",[140,54497,54498],{"start":171},[143,54499,54500],{},"立即执行函数",[24,54502,54503],{},[19,54504],{"alt":308,"src":54505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[24,54507,54508],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[24,54510,54511],{},"写法：两个小括号，然后在第一个小括号中写function",[24,54513,54514],{},"(function () {})();",[24,54516,54517],{},"不要落下最后的;",[24,54519,54520],{},"立即执行函数必须要加;",[24,54522,54523],{},"分号写前写后都没问题",[24,54525,54526],{},"写前：",[24,54528,54529],{},"(function() {})()",[24,54531,54532],{},";(function () {})();",[24,54534,54535],{},"写后:",[24,54537,54538],{},"(function() {})();",[24,54540,54514],{},[24,54542,54543],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[24,54545,54546],{},"还有一种写法：",[24,54548,54549],{},"(function(){}());",[24,54551,54552],{},"或者:",[24,54554,54555],{},"!function(){}();",[24,54557,54558],{},"立即执行函数有时候也是可以加名字的：",[24,54560,54561],{},"(function flexible(window,document) {}(window,document));",[24,54563,54564],{},"省一些调用方法",[69,54566,54568],{"id":54567},"_296-逻辑中断","2.9.6 逻辑中断!!!",[24,54570,54571],{},[19,54572],{"alt":308,"src":54573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[24,54575,54576],{},"这样就不用非得给x,y初始化了",[24,54578,54579],{},[19,54580],{"alt":308,"src":54581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[24,54583,54584],{},"代码执行时先看左边",[24,54586,54587],{},"例如：console.log(false && 3+5)",[24,54589,54590],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[24,54592,54593],{},"&&都是真时，就返回最后一个真值",[24,54595,54596],{},"console.log(11 && 22)",[24,54598,54599],{},"输出22",[24,54601,54602],{},"逻辑与：遇真则真",[24,54604,16434],{},[24,54606,54607],{},"let age=1",[24,54609,54610],{},"console.log(11 || age++)",[24,54612,54613],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[24,54615,54616],{},"console.log(11 || 22)",[24,54618,54619],{},"||逻辑或遇到真就直接输出，输出结果为11",[24,54621,54622],{},"||如果都是假的话，就取最后一个假的值了",[69,54624,54626],{"id":54625},"_297-转换为boolean型","2.9.7 转换为Boolean型",[24,54628,54629],{},"显示转换：",[24,54631,54632,54635,54636],{},[27,54633,54634],{},"记忆","： ",[27,54637,54638],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[24,54640,54641],{},"空字符串为假，其他字符串全为真",[24,54643,54644],{},[19,54645],{"alt":308,"src":54646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[24,54648,54649],{},"隐式转换：",[24,54651,54652],{},[19,54653],{"alt":308,"src":54654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[24,54656,54657],{},"隐式转换:",[24,54659,54660],{},"null+3=3",[24,54662,54663],{},"undefined+3=NaN",[24,54665,54666],{},"null==undefined 输出true,他两个都当0看",[24,54668,54669],{},"null===undefined 输出false",[24,54671,54672],{},"undefined做任何操作都是NaN",[24,54674,54675],{},"NaN不等于NaN，NaN表示计算错误",[14,54677,54679],{"id":54678},"_210-对象","2.10 对象",[69,54681,54683],{"id":54682},"_2101-对象的介绍","2.10.1 对象的介绍",[24,54685,54686],{},"对象也是一种数据类型，里边的数据是无序的",[24,54688,54689],{},"对象由属性和方法组成",[24,54691,54692],{},[19,54693],{"alt":308,"src":54694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[24,54696,54697],{},[19,54698],{"alt":308,"src":54699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[24,54701,54702],{},[19,54703],{"alt":308,"src":54704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[69,54706,54708],{"id":54707},"_2102-对象属性","2.10.2 对象属性",[24,54710,54711],{},[19,54712],{"alt":308,"src":54713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[140,54715,54716],{},[143,54717,54718],{},"查询对象",[24,54720,54721],{},"对象名.属性 goods.uname",[24,54723,54724],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[24,54726,54727],{},"不带字符串的属性名也可以使用 对象名['属性名']",[24,54729,54730],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[24,54732,54733],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[140,54735,54736],{"start":171},[143,54737,54738],{},"重新赋值",[24,54740,54741],{},"对象名.属性=新值",[140,54743,54744],{"start":274},[143,54745,54746],{},"增加新数据",[24,54748,54741],{},[140,54750,54751],{"start":298},[143,54752,54753],{},"删除对象中的属性",[24,54755,54756],{},"delete 对象名.属性",[69,54758,54760],{"id":54759},"_2103-对象方法","2.10.3 对象方法",[24,54762,54763],{},[19,54764],{"alt":308,"src":54765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[24,54767,54768],{},"后边跟的是匿名函数",[24,54770,54771],{},"对象外面的叫函数；对象内部的叫方法",[24,54773,54774],{},[19,54775],{"alt":308,"src":54776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[69,54778,54780],{"id":54779},"_2104-遍历对象","2.10.4 遍历对象",[24,54782,54783],{},"理解为加括号的python字典遍历",[24,54785,54786],{},[19,54787],{"alt":308,"src":54788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[24,54790,54791],{},"k是字符串类型",[24,54793,54794],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[303,54796,54798],{"className":52428,"code":54797,"language":52430,"meta":308,"style":308},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[119,54799,54800,54805,54810,54815,54820],{"__ignoreMap":308},[312,54801,54802],{"class":314,"line":315},[312,54803,54804],{"class":324},"   let arr = [1, 2, 3]\n",[312,54806,54807],{"class":314,"line":171},[312,54808,54809],{"class":324},"    for (let k in arr) {\n",[312,54811,54812],{"class":314,"line":274},[312,54813,54814],{"class":324},"      console.log(k)\n",[312,54816,54817],{"class":314,"line":298},[312,54818,54819],{"class":324},"      console.log(arr[k])\n",[312,54821,54822],{"class":314,"line":974},[312,54823,3992],{"class":324},[24,54825,54826],{},[19,54827],{"alt":308,"src":54828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[24,54830,54831],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[24,54833,54834],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[24,54836,54837],{},"for in 得到的k是属性名",[53599,54839,54840],{},"\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",[24,54842,54843],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[69,54845,54847],{"id":54846},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[24,54849,54850],{},"数组中放对象信息",[303,54852,54856],{"className":54853,"code":54854,"language":54855,"meta":308,"style":308},"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",[119,54857,54858,54866,54871,54876,54881,54886,54891,54896,54901,54906,54911,54916,54921,54925,54929],{"__ignoreMap":308},[312,54859,54860,54862,54864],{"class":314,"line":315},[312,54861,325],{"class":324},[312,54863,53599],{"class":328},[312,54865,343],{"class":324},[312,54867,54868],{"class":314,"line":171},[312,54869,54870],{"class":324},"    let students = [\n",[312,54872,54873],{"class":314,"line":274},[312,54874,54875],{"class":324},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[312,54877,54878],{"class":314,"line":298},[312,54879,54880],{"class":324},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[312,54882,54883],{"class":314,"line":974},[312,54884,54885],{"class":324},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[312,54887,54888],{"class":314,"line":980},[312,54889,54890],{"class":324},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[312,54892,54893],{"class":314,"line":997},[312,54894,54895],{"class":324},"    ]\n",[312,54897,54898],{"class":314,"line":1003},[312,54899,54900],{"class":324},"    for (let i = 0; i \u003C students.length; i++) {\n",[312,54902,54903],{"class":314,"line":1020},[312,54904,54905],{"class":324},"      for (let k in students[i]) {\n",[312,54907,54908],{"class":314,"line":1026},[312,54909,54910],{"class":324},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[312,54912,54913],{"class":314,"line":3418},[312,54914,54915],{"class":324},"        \u002F\u002F输出每个人的名字：\n",[312,54917,54918],{"class":314,"line":3423},[312,54919,54920],{"class":324},"        \u002F\u002Fconsole.log(students[i].name)\n",[312,54922,54923],{"class":314,"line":3429},[312,54924,54184],{"class":324},[312,54926,54927],{"class":314,"line":3434},[312,54928,3992],{"class":324},[312,54930,54931,54933,54935],{"class":314,"line":3448},[312,54932,54203],{"class":324},[312,54934,53599],{"class":328},[312,54936,343],{"class":324},[69,54938,54940],{"id":54939},"_2106-内置对象","2.10.6 内置对象",[24,54942,54943],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[140,54945,54946],{},[143,54947,54948],{},"数学对象Math",[24,54950,54951],{},[19,54952],{"alt":308,"src":54953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[24,54955,54956],{},[164,54957,54960],{"href":54958,"rel":54959},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[168],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[24,54962,54963],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[24,54965,54966],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[24,54968,54969],{},"数组不可以使用Math中的max,min来求最大值与最小值",[24,54971,54972],{},"null是一个空对象，可以认为：null类似于let obj={}",[24,54974,54975],{},"null属于对象数据类型",[140,54977,54978],{"start":171},[143,54979,54980],{},"生成任意范围随机数",[24,54982,54983],{},[19,54984],{"alt":308,"src":54985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[24,54987,54988],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[24,54990,54991],{},"乘以几就取不到几",[24,54993,54994],{},"取数组中的随机元素：",[24,54996,54997],{},"let arr = ['red', 'green', 'blue']",[24,54999,55000],{},"let random = Math.floor(Math.random() * arr.length)",[24,55002,55003],{},"console.log(arr[random])",[24,55005,55006],{},"这个函数得到的是全闭区间",[24,55008,55009],{},"function getRandom(N, M) {",[24,55011,55012],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[24,55014,2888],{},[24,55016,55017],{},"console.log(getRandom(4, 8))",[69,55019,55021],{"id":55020},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[24,55023,55024],{},[19,55025],{"alt":308,"src":55026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[24,55028,55029],{},[19,55030],{"alt":308,"src":55031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[24,55033,55034],{},[19,55035],{"alt":308,"src":55036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[24,55038,55039],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[24,55041,55042],{},[19,55043],{"alt":308,"src":55044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[24,55046,55047],{},[19,55048],{"alt":308,"src":55049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[24,55051,55052],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[24,55054,55055],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[24,55057,55058],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1856,55060,55061],{},"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":308,"searchDepth":171,"depth":171,"links":55063},[55064,55072,55073,55074,55075,55076,55083,55087,55093,55102],{"id":52263,"depth":171,"text":52264,"children":55065},[55066,55067,55068,55069,55070,55071],{"id":52267,"depth":274,"text":52268},{"id":52284,"depth":274,"text":52285},{"id":52324,"depth":274,"text":52325},{"id":52336,"depth":274,"text":52337},{"id":52345,"depth":274,"text":52346},{"id":52393,"depth":274,"text":52394},{"id":52403,"depth":171,"text":52404},{"id":52491,"depth":171,"text":52492},{"id":52514,"depth":171,"text":52515},{"id":52526,"depth":171,"text":52527},{"id":52713,"depth":171,"text":52714,"children":55077},[55078,55079,55080,55081,55082],{"id":52717,"depth":274,"text":52718},{"id":52726,"depth":274,"text":52727},{"id":52754,"depth":274,"text":52755},{"id":52790,"depth":274,"text":52791},{"id":52815,"depth":274,"text":52816},{"id":52827,"depth":171,"text":52828,"children":55084},[55085,55086],{"id":52848,"depth":274,"text":52849},{"id":52942,"depth":274,"text":52943},{"id":53000,"depth":171,"text":53001,"children":55088},[55089,55090,55091,55092],{"id":53004,"depth":274,"text":53005},{"id":53028,"depth":274,"text":53029},{"id":53081,"depth":274,"text":53082},{"id":53883,"depth":274,"text":53884},{"id":54269,"depth":171,"text":54270,"children":55094},[55095,55096,55097,55098,55099,55100,55101],{"id":54287,"depth":274,"text":54288},{"id":54324,"depth":274,"text":54325},{"id":54355,"depth":274,"text":54356},{"id":54388,"depth":274,"text":54389},{"id":54469,"depth":274,"text":54470},{"id":54567,"depth":274,"text":54568},{"id":54625,"depth":274,"text":54626},{"id":54678,"depth":171,"text":54679,"children":55103},[55104,55105,55106,55107,55108,55109,55110],{"id":54682,"depth":274,"text":54683},{"id":54707,"depth":274,"text":54708},{"id":54759,"depth":274,"text":54760},{"id":54779,"depth":274,"text":54780},{"id":54846,"depth":274,"text":54847},{"id":54939,"depth":274,"text":54940},{"id":55020,"depth":274,"text":55021},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52255,"description":1878},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":55117,"title":55118,"body":55119,"description":1878,"extension":1879,"meta":78445,"navigation":1881,"path":78446,"seo":78447,"stem":78448,"__hash__":78449},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":55120,"toc":78385},[55121,55124,55127,55130,55135,55138,55141,55144,55148,55152,55158,55163,55171,55178,55181,55185,55190,55195,55200,55203,55206,55217,55220,55224,55227,55230,55235,55240,55245,55248,55251,55342,55345,55350,55353,55358,55361,55364,55369,55372,55377,55381,55384,55398,55402,55407,55410,55413,55417,55422,55425,55429,55433,55438,55442,55447,55450,55453,55456,55459,55462,55465,55470,55475,55502,55505,55508,55511,55516,55519,55522,55525,55528,55532,55561,55565,55570,55575,55578,55581,55584,55589,55704,55709,55714,55875,55880,55883,55887,55892,55897,55900,55903,55906,55909,55912,55915,55918,55921,55924,55927,55930,55933,55936,55939,55941,55944,55947,55950,55955,55959,56356,56359,56365,56369,56374,57654,57659,57662,57665,57668,57673,58869,58873,58879,58884,58887,58892,58897,58901,58905,58910,58913,58918,58921,58924,58928,59836,59839,59843,60064,60067,60070,60073,60299,60302,60526,60529,60533,60538,60541,60544,60772,60775,60808,60811,60815,60820,60824,60827,60830,60833,60836,60839,60842,60845,60850,62130,62134,62137,63228,63232,63235,63238,63241,63244,63248,63251,63254,63256,63264,64743,64747,64750,64753,64756,64965,64968,64972,64976,64981,64986,64989,64992,64997,65001,65006,65009,65118,65122,65127,65132,65135,65138,65142,65147,65152,65157,65160,65163,65174,65177,65182,65187,65190,65193,65266,65270,65275,65278,65280,65291,65295,65300,66626,66629,66632,66635,66637,66640,66643,66646,66649,66652,66655,66658,66661,66664,66667,66670,66673,66675,66677,66680,66684,67778,67781,67784,67800,67814,67817,67822,67828,67833,67837,67841,67846,67850,67855,68297,68302,68305,68309,68314,68317,68320,68324,68329,68333,68338,68343,68347,68352,68357,68360,68365,68370,68374,68379,68384,68488,68491,68495,68500,68866,68869,68872,68875,68878,68881,68884,68887,68890,70186,70190,70195,70200,70203,70206,70209,70212,70214,70219,70224,70227,70231,70236,70241,70246,70249,70252,70255,70258,70261,70266,70269,70273,70278,70283,70287,70292,70295,70300,70303,70306,70309,70312,70315,70320,70323,70326,70329,70332,70336,70341,70344,70348,70353,70356,70359,70363,70392,70395,70399,70403,70408,70412,70417,70420,70423,70426,70429,70432,70435,70438,70441,70444,70447,70450,70453,70456,70459,70463,70468,70473,70476,70480,70484,70489,70492,70496,70499,70502,70507,70512,70517,70522,70527,70530,70533,70538,70543,70547,70552,70555,70560,70563,70566,70568,70571,70576,70579,70588,70592,70597,70600,70603,70607,70610,70615,70619,70622,70628,70634,70638,70664,70667,72228,72231,72722,72725,72730,72735,72740,72744,72749,72754,72759,72763,72768,72771,72774,72777,72780,72784,72787,72792,72795,72800,72804,72809,72812,72817,72822,72827,72830,72833,72838,72843,72846,72849,72853,72856,72861,72864,72869,72872,72877,72882,72887,72890,72895,72960,72963,72974,72978,72983,73155,73159,73164,73167,73170,73173,73177,73188,73192,73195,73200,73205,73208,73211,73214,73217,73220,73222,73225,73228,73231,73236,73239,73244,73247,73251,73254,73257,73271,73275,73278,73333,73338,73341,73344,73349,73352,73356,73361,73491,73495,73500,73505,73586,73591,73595,73598,73603,73608,73614,73617,73620,73623,73627,73632,73635,73646,73650,73667,76714,76718,76721,76724,76727,76748,76752,76755,76763,76766,76771,76774,76777,76782,76787,76791,76812,76816,76821,76824,76827,76830,76833,76837,76842,76845,76849,76854,76857,76862,76865,76870,76873,76878,78081,78085,78090,78093,78098,78382],[10,55122,55118],{"id":55123},"_3web-apis",[24,55125,55126],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[24,55128,55129],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[24,55131,55132],{},[19,55133],{"alt":308,"src":55134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[24,55136,55137],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[24,55139,55140],{},"建议数组和对象使用 const 来声明",[24,55142,55143],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,55145,55147],{"id":55146},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[69,55149,55151],{"id":55150},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[24,55153,55154,55157],{},[119,55155,55156],{},"document"," = HTML 文件解析后的对象化表示；",[24,55159,55160,55162],{},[119,55161,55156],{}," ≠ HTML 文件本身",[24,55164,55165,55170],{},[27,55166,55167],{},[119,55168,55169],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[24,55172,55173,55177],{},[27,55174,55175],{},[119,55176,55156],{}," ：容器里的内容，代表当前加载的网页（DOM）",[24,55179,55180],{},"document实际上为window.document的简写",[69,55182,55184],{"id":55183},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[24,55186,55187],{},[19,55188],{"alt":308,"src":55189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[24,55191,55192],{},[19,55193],{"alt":308,"src":55194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[24,55196,55197],{},[19,55198],{"alt":308,"src":55199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[24,55201,55202],{},"console.dir()",[24,55204,55205],{},"dir用来打印对象",[243,55207,55208,55211,55214],{},[143,55209,55210],{},"任何一个标签，都是一个对象",[143,55212,55213],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[143,55215,55216],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[24,55218,55219],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[69,55221,55223],{"id":55222},"_312-获取dom对象","3.1.2 获取DoM对象",[24,55225,55226],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[24,55228,55229],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[24,55231,55232],{},[27,55233,55234],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[140,55236,55237],{},[143,55238,55239],{},"利用CSS选择器来获取标签元素",[24,55241,55242],{},[19,55243],{"alt":308,"src":55244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[24,55246,55247],{},"里边的选择器必须必须加引号！！！",[24,55249,55250],{},"只选择第一个元素",[303,55252,55254],{"className":54853,"code":55253,"language":54855,"meta":308,"style":308},"\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",[119,55255,55256,55264,55284,55303,55311,55316,55321,55326,55334],{"__ignoreMap":308},[312,55257,55258,55260,55262],{"class":314,"line":315},[312,55259,325],{"class":324},[312,55261,53586],{"class":328},[312,55263,343],{"class":324},[312,55265,55266,55268,55270,55272,55274,55277,55280,55282],{"class":314,"line":171},[312,55267,53930],{"class":324},[312,55269,329],{"class":328},[312,55271,333],{"class":332},[312,55273,336],{"class":324},[312,55275,55276],{"class":339},"\"box\"",[312,55278,55279],{"class":324},">123\u003C\u002F",[312,55281,329],{"class":328},[312,55283,343],{"class":324},[312,55285,55286,55288,55290,55292,55294,55296,55299,55301],{"class":314,"line":274},[312,55287,53930],{"class":324},[312,55289,329],{"class":328},[312,55291,333],{"class":332},[312,55293,336],{"class":324},[312,55295,55276],{"class":339},[312,55297,55298],{"class":324},">456\u003C\u002F",[312,55300,329],{"class":328},[312,55302,343],{"class":324},[312,55304,55305,55307,55309],{"class":314,"line":298},[312,55306,53930],{"class":324},[312,55308,53599],{"class":328},[312,55310,343],{"class":324},[312,55312,55313],{"class":314,"line":974},[312,55314,55315],{"class":324},"    \u002F\u002F 1.获取匹配的第一个元素\n",[312,55317,55318],{"class":314,"line":980},[312,55319,55320],{"class":324},"    const box = document.querySelector('div')\n",[312,55322,55323],{"class":314,"line":997},[312,55324,55325],{"class":324},"    console.dir(box)\n",[312,55327,55328,55330,55332],{"class":314,"line":1003},[312,55329,54203],{"class":324},[312,55331,53599],{"class":328},[312,55333,343],{"class":324},[312,55335,55336,55338,55340],{"class":314,"line":1020},[312,55337,353],{"class":324},[312,55339,53586],{"class":328},[312,55341,343],{"class":324},[24,55343,55344],{},"只选123，不选456",[24,55346,55347],{},[19,55348],{"alt":308,"src":55349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[24,55351,55352],{},"返回的是一个数组的集合，不能对其进行直接修改",[24,55354,55355],{},[19,55356],{"alt":308,"src":55357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[24,55359,55360],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[24,55362,55363],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[140,55365,55366],{"start":171},[143,55367,55368],{},"其他方法来获取标签元素",[24,55370,55371],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[24,55373,55374],{},[19,55375],{"alt":308,"src":55376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[69,55378,55380],{"id":55379},"_313-操作元素的内容","3.1.3 操作元素的内容",[24,55382,55383],{},"设置修改DOM元素内容有两种方式：",[243,55385,55386,55389,55392,55395],{},[143,55387,55388],{},"元素.innerText=''",[143,55390,55391],{},"元素.innerHTML=''",[143,55393,55394],{},"不写字符串输出数字也是可以的",[143,55396,55397],{},"元素.innerHtml=1",[23796,55399,55401],{"id":55400},"_3131-innertext","3.1.3.1 innerText",[24,55403,55404],{},[19,55405],{"alt":308,"src":55406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[24,55408,55409],{},"思路：实现了修改盒子中的内容！",[24,55411,55412],{},"它只显示纯文本，不解析标签",[23796,55414,55416],{"id":55415},"_3132-innerhtml","3.1.3.2 innerHTML",[24,55418,55419],{},[19,55420],{"alt":308,"src":55421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[24,55423,55424],{},"相比于innerText，他的强大之处在于可以解析标签",[69,55426,55428],{"id":55427},"_314-操作元素属性","3.1.4 操作元素属性",[23796,55430,55432],{"id":55431},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[24,55434,55435],{},[19,55436],{"alt":308,"src":55437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[23796,55439,55441],{"id":55440},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[24,55443,55444],{},[19,55445],{"alt":308,"src":55446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[24,55448,55449],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[24,55451,55452],{},"div.style.backgroundColor = 'hotpink'",[24,55454,55455],{},"如果按照css的写法，-表示减，就会出错",[24,55457,55458],{},"body元素不需要再获取，直接用就行！！！！！！",[24,55460,55461],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[24,55463,55464],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[24,55466,55467],{},[19,55468],{"alt":308,"src":55469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[24,55471,55472],{},[19,55473],{"alt":308,"src":55474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[140,55476,55477,55480,55483,55486,55489,55492],{},[143,55478,55479],{},"className这个方式就是修改很多样式的时候来使用的！",[143,55481,55482],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[143,55484,55485],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[143,55487,55488],{},"className为属性名，如果还用class的话就导致与关键字冲突",[143,55490,55491],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[143,55493,55494,55495,55499],{},"解析标签的时候就变为了",[329,55496],{"className":55497},[1143,55498],"box",[55500,55501],"br",{},[24,55503,55504],{},"例子：",[329,55506],{"className":55507},[1143],[53599,55509,55510],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[24,55512,55513],{},[19,55514],{"alt":308,"src":55515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[24,55517,55518],{},"追加和删除类名用classList",[24,55520,55521],{},"常用于类似于开关的操作",[24,55523,55524],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[24,55526,55527],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[23796,55529,55531],{"id":55530},"_3143-牢记点","3.1.4.3 牢记点",[140,55533,55534,55537,55540,55543,55546,55549,55552,55555,55558],{},[143,55535,55536],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[143,55538,55539],{},"使用style属性操作css时不要忘记引号",[143,55541,55542],{},"使用className或者classList时也不要忘记引号",[143,55544,55545],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[143,55547,55548],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[143,55550,55551],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[143,55553,55554],{},"若： let arr=['1','2',3] arr[0]=1",[143,55556,55557],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[143,55559,55560],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[69,55562,55564],{"id":55563},"_315-操作表单元素","3.1.5 操作表单元素",[140,55566,55567],{},[143,55568,55569],{},"天生的属性",[24,55571,55572],{},[19,55573],{"alt":308,"src":55574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[24,55576,55577],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[24,55579,55580],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[24,55582,55583],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[24,55585,55586],{},[19,55587],{"alt":308,"src":55588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[303,55590,55592],{"className":52428,"code":55591,"language":52430,"meta":308,"style":308},"在复选框中如果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",[119,55593,55594,55599,55631,55636,55641,55646,55651,55655,55660,55665,55682,55694,55699],{"__ignoreMap":308},[312,55595,55596],{"class":314,"line":315},[312,55597,55598],{"class":324},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[312,55600,55601,55603,55606,55609,55611,55614,55616,55618,55620,55622,55624,55626,55629],{"class":314,"line":171},[312,55602,325],{"class":324},[312,55604,55605],{"class":328},"input",[312,55607,55608],{"class":332}," type",[312,55610,336],{"class":324},[312,55612,55613],{"class":339},"\"checkbox\"",[312,55615,16721],{"class":332},[312,55617,336],{"class":324},[312,55619,495],{"class":339},[312,55621,16760],{"class":332},[312,55623,336],{"class":324},[312,55625,495],{"class":339},[312,55627,55628],{"class":332}," checked",[312,55630,343],{"class":324},[312,55632,55633],{"class":314,"line":274},[312,55634,55635],{"class":324},"不选的话：\n",[312,55637,55638],{"class":314,"line":298},[312,55639,55640],{"class":324},"const input = document.querySelector('input')\n",[312,55642,55643],{"class":314,"line":974},[312,55644,55645],{"class":324},"input.checked=false\n",[312,55647,55648],{"class":314,"line":980},[312,55649,55650],{"class":324},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[312,55652,55653],{"class":314,"line":997},[312,55654,4205],{"emptyLinePlaceholder":1881},[312,55656,55657],{"class":314,"line":1003},[312,55658,55659],{"class":324},"禁用按钮：\n",[312,55661,55662],{"class":314,"line":1020},[312,55663,55664],{"class":324},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[312,55666,55667,55669,55672,55675,55678,55680],{"class":314,"line":1026},[312,55668,325],{"class":324},[312,55670,55671],{"class":328},"button",[312,55673,55674],{"class":332}," disabled",[312,55676,55677],{"class":324},">点击\u003C\u002F",[312,55679,55671],{"class":328},[312,55681,343],{"class":324},[312,55683,55684,55686,55688,55690,55692],{"class":314,"line":3418},[312,55685,325],{"class":324},[312,55687,55671],{"class":328},[312,55689,55677],{"class":324},[312,55691,55671],{"class":328},[312,55693,343],{"class":324},[312,55695,55696],{"class":314,"line":3423},[312,55697,55698],{"class":324},"const bt = document.querySelector('button')\n",[312,55700,55701],{"class":314,"line":3429},[312,55702,55703],{"class":324},"bt.disabled = false\n",[140,55705,55706],{"start":171},[143,55707,55708],{},"自定义属性",[24,55710,55711],{},[19,55712],{"alt":308,"src":55713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[303,55715,55717],{"className":54853,"code":55716,"language":54855,"meta":308,"style":308},"\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",[119,55718,55719,55727,55755,55774,55793,55812,55831,55839,55844,55849,55854,55859,55867],{"__ignoreMap":308},[312,55720,55721,55723,55725],{"class":314,"line":315},[312,55722,325],{"class":324},[312,55724,53586],{"class":328},[312,55726,343],{"class":324},[312,55728,55729,55731,55733,55736,55738,55740,55743,55745,55748,55751,55753],{"class":314,"line":171},[312,55730,53930],{"class":324},[312,55732,329],{"class":328},[312,55734,55735],{"class":332}," data-id",[312,55737,336],{"class":324},[312,55739,5483],{"class":339},[312,55741,55742],{"class":332}," data-spm",[312,55744,336],{"class":324},[312,55746,55747],{"class":339},"\"我不知道\"",[312,55749,55750],{"class":324},">1\u003C\u002F",[312,55752,329],{"class":328},[312,55754,343],{"class":324},[312,55756,55757,55759,55761,55763,55765,55767,55770,55772],{"class":314,"line":274},[312,55758,53930],{"class":324},[312,55760,329],{"class":328},[312,55762,55735],{"class":332},[312,55764,336],{"class":324},[312,55766,5506],{"class":339},[312,55768,55769],{"class":324},">2\u003C\u002F",[312,55771,329],{"class":328},[312,55773,343],{"class":324},[312,55775,55776,55778,55780,55782,55784,55786,55789,55791],{"class":314,"line":298},[312,55777,53930],{"class":324},[312,55779,329],{"class":328},[312,55781,55735],{"class":332},[312,55783,336],{"class":324},[312,55785,5519],{"class":339},[312,55787,55788],{"class":324},">3\u003C\u002F",[312,55790,329],{"class":328},[312,55792,343],{"class":324},[312,55794,55795,55797,55799,55801,55803,55805,55808,55810],{"class":314,"line":974},[312,55796,53930],{"class":324},[312,55798,329],{"class":328},[312,55800,55735],{"class":332},[312,55802,336],{"class":324},[312,55804,5532],{"class":339},[312,55806,55807],{"class":324},">4\u003C\u002F",[312,55809,329],{"class":328},[312,55811,343],{"class":324},[312,55813,55814,55816,55818,55820,55822,55824,55827,55829],{"class":314,"line":980},[312,55815,53930],{"class":324},[312,55817,329],{"class":328},[312,55819,55735],{"class":332},[312,55821,336],{"class":324},[312,55823,5553],{"class":339},[312,55825,55826],{"class":324},">5\u003C\u002F",[312,55828,329],{"class":328},[312,55830,343],{"class":324},[312,55832,55833,55835,55837],{"class":314,"line":997},[312,55834,53930],{"class":324},[312,55836,53599],{"class":328},[312,55838,343],{"class":324},[312,55840,55841],{"class":314,"line":1003},[312,55842,55843],{"class":324},"    const one = document.querySelector('div')\n",[312,55845,55846],{"class":314,"line":1020},[312,55847,55848],{"class":324},"    console.log(one.dataset)\n",[312,55850,55851],{"class":314,"line":1026},[312,55852,55853],{"class":324},"    console.log(one.dataset.id)\n",[312,55855,55856],{"class":314,"line":3418},[312,55857,55858],{"class":324},"    console.log(one.dataset.spm)\n",[312,55860,55861,55863,55865],{"class":314,"line":3423},[312,55862,54203],{"class":324},[312,55864,53599],{"class":328},[312,55866,343],{"class":324},[312,55868,55869,55871,55873],{"class":314,"line":3429},[312,55870,353],{"class":324},[312,55872,53586],{"class":328},[312,55874,343],{"class":324},[24,55876,55877],{},[19,55878],{"alt":308,"src":55879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[24,55881,55882],{},"document.querySelector选择的是第一个对象（元素）",[69,55884,55886],{"id":55885},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[24,55888,55889],{},[19,55890],{"alt":308,"src":55891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[24,55893,55894],{},[19,55895],{"alt":308,"src":55896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[24,55898,55899],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53599,55901,55902],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[24,55904,55905],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53599,55907,55908],{},"\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",[24,55910,55911],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[24,55913,55914],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[24,55916,55917],{},"单位为毫秒！！！",[24,55919,55920],{},"可以搭配匿名函数来用！！！",[24,55922,55923],{},"setInterval(function () {",[24,55925,55926],{},"alert('两秒执行一次')",[24,55928,55929],{},"}, 2000)",[24,55931,55932],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[24,55934,55935],{},"function fn() {",[24,55937,55938],{},"document.write(1)",[24,55940,2888],{},[24,55942,55943],{},"setInterval(fn, 1000)",[24,55945,55946],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[24,55948,55949],{},"setInterval('fn()', 1000)",[24,55951,55952],{},[19,55953],{"alt":308,"src":55954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[23796,55956,55958],{"id":55957},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[303,55960,55962],{"className":52428,"code":55961,"language":52430,"meta":308,"style":308},"\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",[119,55963,55964,55974,55988,55992,56000,56014,56034,56046,56054,56058,56066,56103,56108,56113,56118,56126,56134,56156,56164,56169,56191,56196,56201,56212,56217,56237,56245,56260,56275,56286,56291,56301,56311,56315,56324,56328,56336,56344,56348],{"__ignoreMap":308},[312,55965,55966,55968,55970,55972],{"class":314,"line":315},[312,55967,53092],{"class":324},[312,55969,53095],{"class":328},[312,55971,53098],{"class":332},[312,55973,343],{"class":324},[312,55975,55976,55978,55980,55982,55984,55986],{"class":314,"line":171},[312,55977,325],{"class":324},[312,55979,52430],{"class":328},[312,55981,53109],{"class":332},[312,55983,336],{"class":324},[312,55985,53114],{"class":339},[312,55987,343],{"class":324},[312,55989,55990],{"class":314,"line":274},[312,55991,4205],{"emptyLinePlaceholder":1881},[312,55993,55994,55996,55998],{"class":314,"line":298},[312,55995,325],{"class":324},[312,55997,53127],{"class":328},[312,55999,343],{"class":324},[312,56001,56002,56004,56006,56008,56010,56012],{"class":314,"line":974},[312,56003,53930],{"class":324},[312,56005,53137],{"class":328},[312,56007,53140],{"class":332},[312,56009,336],{"class":324},[312,56011,53145],{"class":339},[312,56013,343],{"class":324},[312,56015,56016,56018,56020,56022,56024,56026,56028,56030,56032],{"class":314,"line":980},[312,56017,53930],{"class":324},[312,56019,53137],{"class":328},[312,56021,16721],{"class":332},[312,56023,336],{"class":324},[312,56025,53184],{"class":339},[312,56027,53164],{"class":332},[312,56029,336],{"class":324},[312,56031,53191],{"class":339},[312,56033,343],{"class":324},[312,56035,56036,56038,56040,56042,56044],{"class":314,"line":997},[312,56037,53930],{"class":324},[312,56039,628],{"class":328},[312,56041,53202],{"class":324},[312,56043,628],{"class":328},[312,56045,343],{"class":324},[312,56047,56048,56050,56052],{"class":314,"line":1003},[312,56049,353],{"class":324},[312,56051,53127],{"class":328},[312,56053,343],{"class":324},[312,56055,56056],{"class":314,"line":1020},[312,56057,4205],{"emptyLinePlaceholder":1881},[312,56059,56060,56062,56064],{"class":314,"line":1026},[312,56061,325],{"class":324},[312,56063,53586],{"class":328},[312,56065,343],{"class":324},[312,56067,56068,56070,56073,56075,56077,56079,56081,56083,56085,56088,56090,56093,56096,56098,56101],{"class":314,"line":3418},[312,56069,53930],{"class":324},[312,56071,56072],{"class":328},"textarea",[312,56074,16721],{"class":332},[312,56076,336],{"class":324},[312,56078,495],{"class":339},[312,56080,16760],{"class":332},[312,56082,336],{"class":324},[312,56084,495],{"class":339},[312,56086,56087],{"class":332}," cols",[312,56089,336],{"class":324},[312,56091,56092],{"class":339},"\"30\"",[312,56094,56095],{"class":332}," rows",[312,56097,336],{"class":324},[312,56099,56100],{"class":339},"\"10\"",[312,56102,343],{"class":324},[312,56104,56105],{"class":314,"line":3423},[312,56106,56107],{"class":324},"        用户注册协议\n",[312,56109,56110],{"class":314,"line":3429},[312,56111,56112],{"class":324},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[312,56114,56115],{"class":314,"line":3434},[312,56116,56117],{"class":324},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[312,56119,56120,56122,56124],{"class":314,"line":3448},[312,56121,53563],{"class":324},[312,56123,56072],{"class":328},[312,56125,343],{"class":324},[312,56127,56128,56130,56132],{"class":314,"line":3453},[312,56129,53930],{"class":324},[312,56131,55500],{"class":328},[312,56133,343],{"class":324},[312,56135,56136,56138,56140,56142,56144,56147,56149,56152,56154],{"class":314,"line":3459},[312,56137,53930],{"class":324},[312,56139,55671],{"class":328},[312,56141,333],{"class":332},[312,56143,336],{"class":324},[312,56145,56146],{"class":339},"\"btn\"",[312,56148,55674],{"class":332},[312,56150,56151],{"class":324},">我已经阅读用户协议(5)\u003C\u002F",[312,56153,55671],{"class":328},[312,56155,343],{"class":324},[312,56157,56158,56160,56162],{"class":314,"line":3480},[312,56159,53930],{"class":324},[312,56161,53599],{"class":328},[312,56163,343],{"class":324},[312,56165,56166],{"class":314,"line":3485},[312,56167,56168],{"class":318},"    \u002F\u002F 1. 获取元素\n",[312,56170,56171,56173,56176,56178,56181,56184,56186,56189],{"class":314,"line":3499},[312,56172,13024],{"class":1436},[312,56174,56175],{"class":488}," btn",[312,56177,15366],{"class":1436},[312,56179,56180],{"class":324}," document.",[312,56182,56183],{"class":332},"querySelector",[312,56185,1576],{"class":324},[312,56187,56188],{"class":339},"'.btn'",[312,56190,1959],{"class":324},[312,56192,56193],{"class":314,"line":3504},[312,56194,56195],{"class":318},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[312,56197,56198],{"class":314,"line":3533},[312,56199,56200],{"class":318},"    \u002F\u002F 2. 倒计时\n",[312,56202,56203,56205,56207,56209],{"class":314,"line":3538},[312,56204,54005],{"class":1436},[312,56206,11241],{"class":324},[312,56208,336],{"class":1436},[312,56210,56211],{"class":488}," 5\n",[312,56213,56214],{"class":314,"line":3555},[312,56215,56216],{"class":318},"    \u002F\u002F 2.1 开启定时器\n",[312,56218,56219,56221,56224,56226,56229,56231,56234],{"class":314,"line":3560},[312,56220,54005],{"class":1436},[312,56222,56223],{"class":324}," n ",[312,56225,336],{"class":1436},[312,56227,56228],{"class":332}," setInterval",[312,56230,1576],{"class":324},[312,56232,56233],{"class":1436},"function",[312,56235,56236],{"class":324}," () {\n",[312,56238,56239,56242],{"class":314,"line":3565},[312,56240,56241],{"class":324},"      i",[312,56243,56244],{"class":1436},"--\n",[312,56246,56247,56250,56252,56255,56257],{"class":314,"line":3570},[312,56248,56249],{"class":324},"      btn.innerHTML ",[312,56251,336],{"class":1436},[312,56253,56254],{"class":339}," `我已经阅读用户协议(${",[312,56256,2386],{"class":324},[312,56258,56259],{"class":339},"})`\n",[312,56261,56262,56265,56268,56271,56273],{"class":314,"line":3584},[312,56263,56264],{"class":1436},"      if",[312,56266,56267],{"class":324}," (i ",[312,56269,56270],{"class":1436},"===",[312,56272,5898],{"class":488},[312,56274,14244],{"class":324},[312,56276,56277,56280,56283],{"class":314,"line":3589},[312,56278,56279],{"class":332},"        clearInterval",[312,56281,56282],{"class":324},"(n)  ",[312,56284,56285],{"class":318},"\u002F\u002F 关闭定时器\n",[312,56287,56288],{"class":314,"line":4382},[312,56289,56290],{"class":318},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[312,56292,56293,56296,56298],{"class":314,"line":4396},[312,56294,56295],{"class":324},"        btn.disabled ",[312,56297,336],{"class":1436},[312,56299,56300],{"class":488}," false\n",[312,56302,56303,56306,56308],{"class":314,"line":4404},[312,56304,56305],{"class":324},"        btn.innerHTML ",[312,56307,336],{"class":1436},[312,56309,56310],{"class":339}," '同意'\n",[312,56312,56313],{"class":314,"line":4409},[312,56314,54184],{"class":324},[312,56316,56317,56320,56322],{"class":314,"line":4415},[312,56318,56319],{"class":324},"    }, ",[312,56321,8214],{"class":488},[312,56323,1959],{"class":324},[312,56325,56326],{"class":314,"line":4421},[312,56327,4205],{"emptyLinePlaceholder":1881},[312,56329,56330,56332,56334],{"class":314,"line":4426},[312,56331,54203],{"class":324},[312,56333,53599],{"class":328},[312,56335,343],{"class":324},[312,56337,56338,56340,56342],{"class":314,"line":9751},[312,56339,353],{"class":324},[312,56341,53586],{"class":328},[312,56343,343],{"class":324},[312,56345,56346],{"class":314,"line":9775},[312,56347,4205],{"emptyLinePlaceholder":1881},[312,56349,56350,56352,56354],{"class":314,"line":9780},[312,56351,353],{"class":324},[312,56353,52430],{"class":328},[312,56355,343],{"class":324},[24,56357,56358],{},"不要一直想着用死循环,避免死循环",[24,56360,56361,56364],{},[119,56362,56363],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[23796,56366,56368],{"id":56367},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[140,56370,56371],{},[143,56372,56373],{},"法1",[303,56375,56377],{"className":52428,"code":56376,"language":52430,"meta":308,"style":308},"\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",[119,56378,56379,56389,56403,56407,56415,56429,56449,56461,56469,56475,56486,56497,56501,56505,56512,56524,56528,56532,56539,56550,56564,56577,56591,56595,56599,56606,56616,56627,56638,56650,56662,56674,56678,56682,56690,56700,56713,56725,56738,56742,56746,56753,56763,56775,56787,56798,56809,56819,56831,56843,56847,56851,56860,56872,56884,56912,56925,56929,56933,56940,56951,56955,56963,56971,56975,56983,56997,57012,57036,57044,57059,57072,57080,57101,57113,57125,57137,57149,57161,57173,57185,57194,57202,57210,57218,57230,57253,57272,57291,57310,57329,57348,57367,57387,57391,57411,57430,57450,57471,57482,57499,57509,57519,57529,57534,57539,57544,57549,57574,57587,57591,57614,57618,57626,57634,57642,57646],{"__ignoreMap":308},[312,56380,56381,56383,56385,56387],{"class":314,"line":315},[312,56382,53092],{"class":324},[312,56384,53095],{"class":328},[312,56386,53098],{"class":332},[312,56388,343],{"class":324},[312,56390,56391,56393,56395,56397,56399,56401],{"class":314,"line":171},[312,56392,325],{"class":324},[312,56394,52430],{"class":328},[312,56396,53109],{"class":332},[312,56398,336],{"class":324},[312,56400,53114],{"class":339},[312,56402,343],{"class":324},[312,56404,56405],{"class":314,"line":274},[312,56406,4205],{"emptyLinePlaceholder":1881},[312,56408,56409,56411,56413],{"class":314,"line":298},[312,56410,325],{"class":324},[312,56412,53127],{"class":328},[312,56414,343],{"class":324},[312,56416,56417,56419,56421,56423,56425,56427],{"class":314,"line":974},[312,56418,53930],{"class":324},[312,56420,53137],{"class":328},[312,56422,53140],{"class":332},[312,56424,336],{"class":324},[312,56426,53145],{"class":339},[312,56428,343],{"class":324},[312,56430,56431,56433,56435,56437,56439,56441,56443,56445,56447],{"class":314,"line":980},[312,56432,53930],{"class":324},[312,56434,53137],{"class":328},[312,56436,16721],{"class":332},[312,56438,336],{"class":324},[312,56440,53184],{"class":339},[312,56442,53164],{"class":332},[312,56444,336],{"class":324},[312,56446,53191],{"class":339},[312,56448,343],{"class":324},[312,56450,56451,56453,56455,56457,56459],{"class":314,"line":997},[312,56452,53930],{"class":324},[312,56454,628],{"class":328},[312,56456,53202],{"class":324},[312,56458,628],{"class":328},[312,56460,343],{"class":324},[312,56462,56463,56465,56467],{"class":314,"line":1003},[312,56464,53930],{"class":324},[312,56466,1856],{"class":328},[312,56468,343],{"class":324},[312,56470,56471,56473],{"class":314,"line":1020},[312,56472,8207],{"class":328},[312,56474,483],{"class":324},[312,56476,56477,56480,56482,56484],{"class":314,"line":1026},[312,56478,56479],{"class":488},"      padding",[312,56481,492],{"class":324},[312,56483,858],{"class":488},[312,56485,498],{"class":324},[312,56487,56488,56491,56493,56495],{"class":314,"line":3418},[312,56489,56490],{"class":488},"      margin",[312,56492,492],{"class":324},[312,56494,858],{"class":488},[312,56496,498],{"class":324},[312,56498,56499],{"class":314,"line":3423},[312,56500,3992],{"class":324},[312,56502,56503],{"class":314,"line":3429},[312,56504,4205],{"emptyLinePlaceholder":1881},[312,56506,56507,56510],{"class":314,"line":3434},[312,56508,56509],{"class":328},"    li",[312,56511,483],{"class":324},[312,56513,56514,56517,56519,56522],{"class":314,"line":3448},[312,56515,56516],{"class":488},"      list-style",[312,56518,492],{"class":324},[312,56520,56521],{"class":488},"none",[312,56523,498],{"class":324},[312,56525,56526],{"class":314,"line":3453},[312,56527,3992],{"class":324},[312,56529,56530],{"class":314,"line":3459},[312,56531,4205],{"emptyLinePlaceholder":1881},[312,56533,56534,56537],{"class":314,"line":3480},[312,56535,56536],{"class":332},"    .box",[312,56538,483],{"class":324},[312,56540,56541,56544,56546,56548],{"class":314,"line":3485},[312,56542,56543],{"class":488},"      position",[312,56545,492],{"class":324},[312,56547,969],{"class":488},[312,56549,498],{"class":324},[312,56551,56552,56555,56557,56560,56562],{"class":314,"line":3499},[312,56553,56554],{"class":488},"      width",[312,56556,492],{"class":324},[312,56558,56559],{"class":488},"976",[312,56561,1437],{"class":1436},[312,56563,498],{"class":324},[312,56565,56566,56569,56571,56573,56575],{"class":314,"line":3504},[312,56567,56568],{"class":488},"      height",[312,56570,492],{"class":324},[312,56572,3346],{"class":488},[312,56574,1437],{"class":1436},[312,56576,498],{"class":324},[312,56578,56579,56581,56583,56585,56587,56589],{"class":314,"line":3533},[312,56580,56490],{"class":488},[312,56582,492],{"class":324},[312,56584,2256],{"class":488},[312,56586,1437],{"class":1436},[312,56588,861],{"class":488},[312,56590,498],{"class":324},[312,56592,56593],{"class":314,"line":3538},[312,56594,3992],{"class":324},[312,56596,56597],{"class":314,"line":3555},[312,56598,4205],{"emptyLinePlaceholder":1881},[312,56600,56601,56604],{"class":314,"line":3560},[312,56602,56603],{"class":332},"    .slider-footer",[312,56605,483],{"class":324},[312,56607,56608,56610,56612,56614],{"class":314,"line":3565},[312,56609,56543],{"class":488},[312,56611,492],{"class":324},[312,56613,992],{"class":488},[312,56615,498],{"class":324},[312,56617,56618,56621,56623,56625],{"class":314,"line":3570},[312,56619,56620],{"class":488},"      left",[312,56622,492],{"class":324},[312,56624,858],{"class":488},[312,56626,498],{"class":324},[312,56628,56629,56632,56634,56636],{"class":314,"line":3584},[312,56630,56631],{"class":488},"      bottom",[312,56633,492],{"class":324},[312,56635,858],{"class":488},[312,56637,498],{"class":324},[312,56639,56640,56642,56644,56646,56648],{"class":314,"line":3589},[312,56641,56554],{"class":488},[312,56643,492],{"class":324},[312,56645,2256],{"class":488},[312,56647,2273],{"class":1436},[312,56649,498],{"class":324},[312,56651,56652,56654,56656,56658,56660],{"class":314,"line":4382},[312,56653,56568],{"class":488},[312,56655,492],{"class":324},[312,56657,2520],{"class":488},[312,56659,2273],{"class":1436},[312,56661,498],{"class":324},[312,56663,56664,56667,56669,56672],{"class":314,"line":4396},[312,56665,56666],{"class":488},"      background-color",[312,56668,492],{"class":324},[312,56670,56671],{"class":488},"skyblue",[312,56673,498],{"class":324},[312,56675,56676],{"class":314,"line":4404},[312,56677,3992],{"class":324},[312,56679,56680],{"class":314,"line":4409},[312,56681,4205],{"emptyLinePlaceholder":1881},[312,56683,56684,56686,56688],{"class":314,"line":4415},[312,56685,56603],{"class":332},[312,56687,8629],{"class":328},[312,56689,483],{"class":324},[312,56691,56692,56694,56696,56698],{"class":314,"line":4421},[312,56693,56543],{"class":488},[312,56695,492],{"class":324},[312,56697,992],{"class":488},[312,56699,498],{"class":324},[312,56701,56702,56705,56707,56709,56711],{"class":314,"line":4426},[312,56703,56704],{"class":488},"      font-size",[312,56706,492],{"class":324},[312,56708,2845],{"class":488},[312,56710,1437],{"class":1436},[312,56712,498],{"class":324},[312,56714,56715,56717,56719,56721,56723],{"class":314,"line":9751},[312,56716,56620],{"class":488},[312,56718,492],{"class":324},[312,56720,1546],{"class":488},[312,56722,1437],{"class":1436},[312,56724,498],{"class":324},[312,56726,56727,56730,56732,56734,56736],{"class":314,"line":9775},[312,56728,56729],{"class":488},"      top",[312,56731,492],{"class":324},[312,56733,2264],{"class":488},[312,56735,1437],{"class":1436},[312,56737,498],{"class":324},[312,56739,56740],{"class":314,"line":9780},[312,56741,3992],{"class":324},[312,56743,56744],{"class":314,"line":9786},[312,56745,4205],{"emptyLinePlaceholder":1881},[312,56747,56748,56751],{"class":314,"line":9813},[312,56749,56750],{"class":328},"    ul",[312,56752,483],{"class":324},[312,56754,56755,56757,56759,56761],{"class":314,"line":9818},[312,56756,56543],{"class":488},[312,56758,492],{"class":324},[312,56760,992],{"class":488},[312,56762,498],{"class":324},[312,56764,56765,56767,56769,56771,56773],{"class":314,"line":9824},[312,56766,56729],{"class":488},[312,56768,492],{"class":324},[312,56770,2725],{"class":488},[312,56772,1437],{"class":1436},[312,56774,498],{"class":324},[312,56776,56777,56779,56781,56783,56785],{"class":314,"line":9836},[312,56778,56620],{"class":488},[312,56780,492],{"class":324},[312,56782,1546],{"class":488},[312,56784,1437],{"class":1436},[312,56786,498],{"class":324},[312,56788,56789,56792,56794,56796],{"class":314,"line":9848},[312,56790,56791],{"class":488},"      display",[312,56793,492],{"class":324},[312,56795,53268],{"class":488},[312,56797,498],{"class":324},[312,56799,56800,56803,56805,56807],{"class":314,"line":9860},[312,56801,56802],{"class":488},"      justify-content",[312,56804,492],{"class":324},[312,56806,53455],{"class":488},[312,56808,498],{"class":324},[312,56810,56811,56813,56815,56817],{"class":314,"line":11519},[312,56812,56543],{"class":488},[312,56814,492],{"class":324},[312,56816,992],{"class":488},[312,56818,498],{"class":324},[312,56820,56821,56823,56825,56827,56829],{"class":314,"line":11544},[312,56822,56554],{"class":488},[312,56824,492],{"class":324},[312,56826,5797],{"class":488},[312,56828,1437],{"class":1436},[312,56830,498],{"class":324},[312,56832,56833,56835,56837,56839,56841],{"class":314,"line":11567},[312,56834,56568],{"class":488},[312,56836,492],{"class":324},[312,56838,1546],{"class":488},[312,56840,1437],{"class":1436},[312,56842,498],{"class":324},[312,56844,56845],{"class":314,"line":11591},[312,56846,3992],{"class":324},[312,56848,56849],{"class":314,"line":11596},[312,56850,4205],{"emptyLinePlaceholder":1881},[312,56852,56853,56855,56858],{"class":314,"line":11601},[312,56854,56750],{"class":328},[312,56856,56857],{"class":328}," li",[312,56859,483],{"class":324},[312,56861,56862,56864,56866,56868,56870],{"class":314,"line":11606},[312,56863,56554],{"class":488},[312,56865,492],{"class":324},[312,56867,1546],{"class":488},[312,56869,1437],{"class":1436},[312,56871,498],{"class":324},[312,56873,56874,56876,56878,56880,56882],{"class":314,"line":11615},[312,56875,56568],{"class":488},[312,56877,492],{"class":324},[312,56879,1546],{"class":488},[312,56881,1437],{"class":1436},[312,56883,498],{"class":324},[312,56885,56886,56888,56890,56893,56895,56897,56899,56901,56903,56905,56907,56910],{"class":314,"line":11620},[312,56887,56666],{"class":488},[312,56889,492],{"class":324},[312,56891,56892],{"class":488},"rgba",[312,56894,1576],{"class":324},[312,56896,858],{"class":488},[312,56898,733],{"class":324},[312,56900,858],{"class":488},[312,56902,733],{"class":324},[312,56904,858],{"class":488},[312,56906,733],{"class":324},[312,56908,56909],{"class":488},".4",[312,56911,4524],{"class":324},[312,56913,56914,56917,56919,56921,56923],{"class":314,"line":11626},[312,56915,56916],{"class":488},"      border-radius",[312,56918,492],{"class":324},[312,56920,2391],{"class":488},[312,56922,1437],{"class":1436},[312,56924,498],{"class":324},[312,56926,56927],{"class":314,"line":11647},[312,56928,3992],{"class":324},[312,56930,56931],{"class":314,"line":11653},[312,56932,4205],{"emptyLinePlaceholder":1881},[312,56934,56935,56938],{"class":314,"line":11667},[312,56936,56937],{"class":332},"    .activate",[312,56939,483],{"class":324},[312,56941,56942,56944,56946,56949],{"class":314,"line":11673},[312,56943,56666],{"class":488},[312,56945,492],{"class":324},[312,56947,56948],{"class":488},"#f7f7f7",[312,56950,498],{"class":324},[312,56952,56953],{"class":314,"line":11700},[312,56954,3992],{"class":324},[312,56956,56957,56959,56961],{"class":314,"line":11709},[312,56958,54203],{"class":324},[312,56960,1856],{"class":328},[312,56962,343],{"class":324},[312,56964,56965,56967,56969],{"class":314,"line":11715},[312,56966,353],{"class":324},[312,56968,53127],{"class":328},[312,56970,343],{"class":324},[312,56972,56973],{"class":314,"line":11723},[312,56974,4205],{"emptyLinePlaceholder":1881},[312,56976,56977,56979,56981],{"class":314,"line":11728},[312,56978,325],{"class":324},[312,56980,53586],{"class":328},[312,56982,343],{"class":324},[312,56984,56985,56987,56989,56991,56993,56995],{"class":314,"line":18404},[312,56986,53930],{"class":324},[312,56988,329],{"class":328},[312,56990,333],{"class":332},[312,56992,336],{"class":324},[312,56994,55276],{"class":339},[312,56996,343],{"class":324},[312,56998,56999,57001,57003,57005,57007,57010],{"class":314,"line":18410},[312,57000,53134],{"class":324},[312,57002,329],{"class":328},[312,57004,333],{"class":332},[312,57006,336],{"class":324},[312,57008,57009],{"class":339},"\"slider-wrapper\"",[312,57011,343],{"class":324},[312,57013,57014,57017,57019,57022,57024,57027,57030,57032,57034],{"class":314,"line":18433},[312,57015,57016],{"class":324},"      \u003C",[312,57018,19],{"class":328},[312,57020,57021],{"class":332}," src",[312,57023,336],{"class":324},[312,57025,57026],{"class":339},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[312,57028,57029],{"class":332}," alt",[312,57031,336],{"class":324},[312,57033,495],{"class":339},[312,57035,343],{"class":324},[312,57037,57038,57040,57042],{"class":314,"line":18439},[312,57039,53563],{"class":324},[312,57041,329],{"class":328},[312,57043,343],{"class":324},[312,57045,57046,57048,57050,57052,57054,57057],{"class":314,"line":18462},[312,57047,53134],{"class":324},[312,57049,329],{"class":328},[312,57051,333],{"class":332},[312,57053,336],{"class":324},[312,57055,57056],{"class":339},"\"slider-footer\"",[312,57058,343],{"class":324},[312,57060,57061,57063,57065,57068,57070],{"class":314,"line":18476},[312,57062,57016],{"class":324},[312,57064,24],{"class":328},[312,57066,57067],{"class":324},">对人类来说会不会太超前了?\u003C\u002F",[312,57069,24],{"class":328},[312,57071,343],{"class":324},[312,57073,57074,57076,57078],{"class":314,"line":18496},[312,57075,57016],{"class":324},[312,57077,243],{"class":328},[312,57079,343],{"class":324},[312,57081,57082,57085,57087,57089,57091,57094,57097,57099],{"class":314,"line":18502},[312,57083,57084],{"class":324},"        \u003C",[312,57086,143],{"class":328},[312,57088,333],{"class":332},[312,57090,336],{"class":324},[312,57092,57093],{"class":339},"\"activate\"",[312,57095,57096],{"class":324},">\u003C\u002F",[312,57098,143],{"class":328},[312,57100,343],{"class":324},[312,57102,57103,57105,57107,57109,57111],{"class":314,"line":18513},[312,57104,57084],{"class":324},[312,57106,143],{"class":328},[312,57108,57096],{"class":324},[312,57110,143],{"class":328},[312,57112,343],{"class":324},[312,57114,57115,57117,57119,57121,57123],{"class":314,"line":18536},[312,57116,57084],{"class":324},[312,57118,143],{"class":328},[312,57120,57096],{"class":324},[312,57122,143],{"class":328},[312,57124,343],{"class":324},[312,57126,57127,57129,57131,57133,57135],{"class":314,"line":18558},[312,57128,57084],{"class":324},[312,57130,143],{"class":328},[312,57132,57096],{"class":324},[312,57134,143],{"class":328},[312,57136,343],{"class":324},[312,57138,57139,57141,57143,57145,57147],{"class":314,"line":18563},[312,57140,57084],{"class":324},[312,57142,143],{"class":328},[312,57144,57096],{"class":324},[312,57146,143],{"class":328},[312,57148,343],{"class":324},[312,57150,57151,57153,57155,57157,57159],{"class":314,"line":18569},[312,57152,57084],{"class":324},[312,57154,143],{"class":328},[312,57156,57096],{"class":324},[312,57158,143],{"class":328},[312,57160,343],{"class":324},[312,57162,57163,57165,57167,57169,57171],{"class":314,"line":18583},[312,57164,57084],{"class":324},[312,57166,143],{"class":328},[312,57168,57096],{"class":324},[312,57170,143],{"class":328},[312,57172,343],{"class":324},[312,57174,57175,57177,57179,57181,57183],{"class":314,"line":18596},[312,57176,57084],{"class":324},[312,57178,143],{"class":328},[312,57180,57096],{"class":324},[312,57182,143],{"class":328},[312,57184,343],{"class":324},[312,57186,57187,57190,57192],{"class":314,"line":18601},[312,57188,57189],{"class":324},"      \u003C\u002F",[312,57191,243],{"class":328},[312,57193,343],{"class":324},[312,57195,57196,57198,57200],{"class":314,"line":18615},[312,57197,53563],{"class":324},[312,57199,329],{"class":328},[312,57201,343],{"class":324},[312,57203,57204,57206,57208],{"class":314,"line":18620},[312,57205,54203],{"class":324},[312,57207,329],{"class":328},[312,57209,343],{"class":324},[312,57211,57212,57214,57216],{"class":314,"line":18626},[312,57213,53930],{"class":324},[312,57215,53599],{"class":328},[312,57217,343],{"class":324},[312,57219,57220,57222,57225,57227],{"class":314,"line":18631},[312,57221,13024],{"class":1436},[312,57223,57224],{"class":488}," arrImage",[312,57226,15366],{"class":1436},[312,57228,57229],{"class":324}," [\n",[312,57231,57232,57235,57238,57241,57244,57247,57250],{"class":314,"line":18645},[312,57233,57234],{"class":324},"      { url: ",[312,57236,57237],{"class":339},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[312,57239,57240],{"class":324},", title: ",[312,57242,57243],{"class":339},"'对人类来说会不会太超前了?'",[312,57245,57246],{"class":324},", color: ",[312,57248,57249],{"class":339},"'rgba(100,67,68)'",[312,57251,57252],{"class":324}," },\n",[312,57254,57255,57257,57260,57262,57265,57267,57270],{"class":314,"line":18650},[312,57256,57234],{"class":324},[312,57258,57259],{"class":339},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[312,57261,57240],{"class":324},[312,57263,57264],{"class":339},"'开启剑与雪的黑暗传说!'",[312,57266,57246],{"class":324},[312,57268,57269],{"class":339},"'rgba(43,35,26)'",[312,57271,57252],{"class":324},[312,57273,57274,57276,57279,57281,57284,57286,57289],{"class":314,"line":18655},[312,57275,57234],{"class":324},[312,57277,57278],{"class":339},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[312,57280,57240],{"class":324},[312,57282,57283],{"class":339},"'真正的jo厨出现了!'",[312,57285,57246],{"class":324},[312,57287,57288],{"class":339},"'rgba(36,31,33)'",[312,57290,57252],{"class":324},[312,57292,57293,57295,57298,57300,57303,57305,57308],{"class":314,"line":18669},[312,57294,57234],{"class":324},[312,57296,57297],{"class":339},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[312,57299,57240],{"class":324},[312,57301,57302],{"class":339},"'李玉刚:让世界通过b站看到东方大国文化'",[312,57304,57246],{"class":324},[312,57306,57307],{"class":339},"'rgba(139,98,66)'",[312,57309,57252],{"class":324},[312,57311,57312,57314,57317,57319,57322,57324,57327],{"class":314,"line":18681},[312,57313,57234],{"class":324},[312,57315,57316],{"class":339},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[312,57318,57240],{"class":324},[312,57320,57321],{"class":339},"'快来分享你的寒假日常吧'",[312,57323,57246],{"class":324},[312,57325,57326],{"class":339},"'rgba(67,90,92)'",[312,57328,57252],{"class":324},[312,57330,57331,57333,57336,57338,57341,57343,57346],{"class":314,"line":18686},[312,57332,57234],{"class":324},[312,57334,57335],{"class":339},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[312,57337,57240],{"class":324},[312,57339,57340],{"class":339},"'哔哩哔哩小年YEAR'",[312,57342,57246],{"class":324},[312,57344,57345],{"class":339},"'rgba(166,131,143)'",[312,57347,57252],{"class":324},[312,57349,57350,57352,57355,57357,57360,57362,57365],{"class":314,"line":18699},[312,57351,57234],{"class":324},[312,57353,57354],{"class":339},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[312,57356,57240],{"class":324},[312,57358,57359],{"class":339},"'一站式解决你的电脑配置问题'",[312,57361,57246],{"class":324},[312,57363,57364],{"class":339},"'rgba(53,29,25)'",[312,57366,57252],{"class":324},[312,57368,57369,57371,57374,57376,57379,57381,57384],{"class":314,"line":18704},[312,57370,57234],{"class":324},[312,57372,57373],{"class":339},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[312,57375,57240],{"class":324},[312,57377,57378],{"class":339},"'谁不想和小猫咪贴贴呢?'",[312,57380,57246],{"class":324},[312,57382,57383],{"class":339},"'rgba(99,72,114)'",[312,57385,57386],{"class":324}," }\n",[312,57388,57389],{"class":314,"line":18709},[312,57390,54895],{"class":324},[312,57392,57393,57395,57398,57400,57402,57404,57406,57409],{"class":314,"line":18714},[312,57394,13024],{"class":1436},[312,57396,57397],{"class":488}," img",[312,57399,15366],{"class":1436},[312,57401,56180],{"class":324},[312,57403,56183],{"class":332},[312,57405,1576],{"class":324},[312,57407,57408],{"class":339},"'.slider-wrapper img'",[312,57410,1959],{"class":324},[312,57412,57413,57415,57417,57419,57421,57423,57425,57428],{"class":314,"line":18727},[312,57414,13024],{"class":1436},[312,57416,8629],{"class":488},[312,57418,15366],{"class":1436},[312,57420,56180],{"class":324},[312,57422,56183],{"class":332},[312,57424,1576],{"class":324},[312,57426,57427],{"class":339},"'.slider-footer p'",[312,57429,1959],{"class":324},[312,57431,57432,57434,57437,57439,57441,57443,57445,57448],{"class":314,"line":18732},[312,57433,13024],{"class":1436},[312,57435,57436],{"class":488}," color",[312,57438,15366],{"class":1436},[312,57440,56180],{"class":324},[312,57442,56183],{"class":332},[312,57444,1576],{"class":324},[312,57446,57447],{"class":339},"'.slider-footer'",[312,57449,1959],{"class":324},[312,57451,57452,57454,57457,57459,57461,57464,57466,57469],{"class":314,"line":34428},[312,57453,13024],{"class":1436},[312,57455,57456],{"class":488}," lis",[312,57458,15366],{"class":1436},[312,57460,56180],{"class":324},[312,57462,57463],{"class":332},"querySelectorAll",[312,57465,1576],{"class":324},[312,57467,57468],{"class":339},"'.slider-footer ul li'",[312,57470,1959],{"class":324},[312,57472,57473,57475,57477,57479],{"class":314,"line":34434},[312,57474,54005],{"class":1436},[312,57476,11241],{"class":324},[312,57478,336],{"class":1436},[312,57480,57481],{"class":488}," 1\n",[312,57483,57484,57486,57489,57491,57493,57495,57497],{"class":314,"line":34440},[312,57485,54005],{"class":1436},[312,57487,57488],{"class":324}," timer ",[312,57490,336],{"class":1436},[312,57492,56228],{"class":332},[312,57494,1576],{"class":324},[312,57496,56233],{"class":1436},[312,57498,56236],{"class":324},[312,57500,57501,57504,57506],{"class":314,"line":34446},[312,57502,57503],{"class":324},"      img.src ",[312,57505,336],{"class":1436},[312,57507,57508],{"class":324}," arrImage[i].url\n",[312,57510,57511,57514,57516],{"class":314,"line":34452},[312,57512,57513],{"class":324},"      p.innerHTML ",[312,57515,336],{"class":1436},[312,57517,57518],{"class":324}," arrImage[i].title\n",[312,57520,57521,57524,57526],{"class":314,"line":34463},[312,57522,57523],{"class":324},"      color.style.backgroundColor ",[312,57525,336],{"class":1436},[312,57527,57528],{"class":324}," arrImage[i].color\n",[312,57530,57531],{"class":314,"line":34469},[312,57532,57533],{"class":318},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[312,57535,57536],{"class":314,"line":34489},[312,57537,57538],{"class":318},"      \u002F\u002F li.classList.add('activate')\n",[312,57540,57541],{"class":314,"line":34495},[312,57542,57543],{"class":318},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[312,57545,57546],{"class":314,"line":34506},[312,57547,57548],{"class":318},"      \u002F\u002F lis[i].classList.remove('activate')\n",[312,57550,57551,57554,57556,57558,57561,57564,57567,57569,57572],{"class":314,"line":34512},[312,57552,57553],{"class":324},"      document.",[312,57555,56183],{"class":332},[312,57557,1576],{"class":324},[312,57559,57560],{"class":339},"'.activate'",[312,57562,57563],{"class":324},")?.classList.",[312,57565,57566],{"class":332},"toggle",[312,57568,1576],{"class":324},[312,57570,57571],{"class":339},"'activate'",[312,57573,1959],{"class":324},[312,57575,57576,57579,57581,57583,57585],{"class":314,"line":34518},[312,57577,57578],{"class":324},"      lis[i].classList.",[312,57580,7138],{"class":332},[312,57582,1576],{"class":324},[312,57584,57571],{"class":339},[312,57586,1959],{"class":324},[312,57588,57589],{"class":314,"line":34524},[312,57590,4205],{"emptyLinePlaceholder":1881},[312,57592,57593,57596,57598,57600,57602,57604,57606,57608,57611],{"class":314,"line":34530},[312,57594,57595],{"class":324},"      i ",[312,57597,336],{"class":1436},[312,57599,56267],{"class":324},[312,57601,2426],{"class":1436},[312,57603,26914],{"class":488},[312,57605,1583],{"class":324},[312,57607,2273],{"class":1436},[312,57609,57610],{"class":324}," arrImage.",[312,57612,57613],{"class":488},"length\n",[312,57615,57616],{"class":314,"line":34536},[312,57617,4205],{"emptyLinePlaceholder":1881},[312,57619,57620,57622,57624],{"class":314,"line":34542},[312,57621,56319],{"class":324},[312,57623,8214],{"class":488},[312,57625,1959],{"class":324},[312,57627,57628,57630,57632],{"class":314,"line":34548},[312,57629,54203],{"class":324},[312,57631,53599],{"class":328},[312,57633,343],{"class":324},[312,57635,57636,57638,57640],{"class":314,"line":34568},[312,57637,353],{"class":324},[312,57639,53586],{"class":328},[312,57641,343],{"class":324},[312,57643,57644],{"class":314,"line":34574},[312,57645,4205],{"emptyLinePlaceholder":1881},[312,57647,57648,57650,57652],{"class":314,"line":34590},[312,57649,353],{"class":324},[312,57651,52430],{"class":328},[312,57653,343],{"class":324},[24,57655,57656],{},[19,57657],{"alt":308,"src":57658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[24,57660,57661],{},"?.就是短路保护,确保输出正常进行",[24,57663,57664],{},"不要忘记取余%,有时候可以用",[24,57666,57667],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[140,57669,57670],{"start":171},[143,57671,57672],{},"法2",[303,57674,57676],{"className":52428,"code":57675,"language":52430,"meta":308,"style":308},"\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",[119,57677,57678,57688,57702,57706,57714,57728,57748,57760,57768,57774,57784,57794,57798,57802,57808,57818,57822,57826,57832,57842,57854,57866,57880,57884,57888,57894,57904,57914,57924,57936,57948,57958,57962,57966,57974,57984,57996,58008,58020,58024,58028,58034,58044,58056,58068,58078,58088,58098,58110,58122,58126,58130,58138,58150,58162,58188,58200,58204,58208,58214,58224,58228,58236,58244,58248,58256,58270,58284,58304,58312,58326,58338,58346,58364,58376,58388,58400,58412,58424,58436,58448,58456,58464,58472,58480,58491,58507,58523,58539,58555,58571,58587,58603,58619,58623,58628,58646,58664,58674,58679,58684,58695,58701,58716,58725,58729,58734,58743,58748,58757,58762,58767,58772,58795,58825,58829,58837,58841,58849,58857,58861],{"__ignoreMap":308},[312,57679,57680,57682,57684,57686],{"class":314,"line":315},[312,57681,53092],{"class":324},[312,57683,53095],{"class":328},[312,57685,53098],{"class":332},[312,57687,343],{"class":324},[312,57689,57690,57692,57694,57696,57698,57700],{"class":314,"line":171},[312,57691,325],{"class":324},[312,57693,52430],{"class":328},[312,57695,53109],{"class":332},[312,57697,336],{"class":324},[312,57699,53114],{"class":339},[312,57701,343],{"class":324},[312,57703,57704],{"class":314,"line":274},[312,57705,4205],{"emptyLinePlaceholder":1881},[312,57707,57708,57710,57712],{"class":314,"line":298},[312,57709,325],{"class":324},[312,57711,53127],{"class":328},[312,57713,343],{"class":324},[312,57715,57716,57718,57720,57722,57724,57726],{"class":314,"line":974},[312,57717,53930],{"class":324},[312,57719,53137],{"class":328},[312,57721,53140],{"class":332},[312,57723,336],{"class":324},[312,57725,53145],{"class":339},[312,57727,343],{"class":324},[312,57729,57730,57732,57734,57736,57738,57740,57742,57744,57746],{"class":314,"line":980},[312,57731,53930],{"class":324},[312,57733,53137],{"class":328},[312,57735,16721],{"class":332},[312,57737,336],{"class":324},[312,57739,53184],{"class":339},[312,57741,53164],{"class":332},[312,57743,336],{"class":324},[312,57745,53191],{"class":339},[312,57747,343],{"class":324},[312,57749,57750,57752,57754,57756,57758],{"class":314,"line":997},[312,57751,53930],{"class":324},[312,57753,628],{"class":328},[312,57755,53202],{"class":324},[312,57757,628],{"class":328},[312,57759,343],{"class":324},[312,57761,57762,57764,57766],{"class":314,"line":1003},[312,57763,53930],{"class":324},[312,57765,1856],{"class":328},[312,57767,343],{"class":324},[312,57769,57770,57772],{"class":314,"line":1020},[312,57771,8207],{"class":328},[312,57773,483],{"class":324},[312,57775,57776,57778,57780,57782],{"class":314,"line":1026},[312,57777,56479],{"class":488},[312,57779,492],{"class":324},[312,57781,858],{"class":488},[312,57783,498],{"class":324},[312,57785,57786,57788,57790,57792],{"class":314,"line":3418},[312,57787,56490],{"class":488},[312,57789,492],{"class":324},[312,57791,858],{"class":488},[312,57793,498],{"class":324},[312,57795,57796],{"class":314,"line":3423},[312,57797,3992],{"class":324},[312,57799,57800],{"class":314,"line":3429},[312,57801,4205],{"emptyLinePlaceholder":1881},[312,57803,57804,57806],{"class":314,"line":3434},[312,57805,56509],{"class":328},[312,57807,483],{"class":324},[312,57809,57810,57812,57814,57816],{"class":314,"line":3448},[312,57811,56516],{"class":488},[312,57813,492],{"class":324},[312,57815,56521],{"class":488},[312,57817,498],{"class":324},[312,57819,57820],{"class":314,"line":3453},[312,57821,3992],{"class":324},[312,57823,57824],{"class":314,"line":3459},[312,57825,4205],{"emptyLinePlaceholder":1881},[312,57827,57828,57830],{"class":314,"line":3480},[312,57829,56536],{"class":332},[312,57831,483],{"class":324},[312,57833,57834,57836,57838,57840],{"class":314,"line":3485},[312,57835,56543],{"class":488},[312,57837,492],{"class":324},[312,57839,969],{"class":488},[312,57841,498],{"class":324},[312,57843,57844,57846,57848,57850,57852],{"class":314,"line":3499},[312,57845,56554],{"class":488},[312,57847,492],{"class":324},[312,57849,56559],{"class":488},[312,57851,1437],{"class":1436},[312,57853,498],{"class":324},[312,57855,57856,57858,57860,57862,57864],{"class":314,"line":3504},[312,57857,56568],{"class":488},[312,57859,492],{"class":324},[312,57861,3346],{"class":488},[312,57863,1437],{"class":1436},[312,57865,498],{"class":324},[312,57867,57868,57870,57872,57874,57876,57878],{"class":314,"line":3533},[312,57869,56490],{"class":488},[312,57871,492],{"class":324},[312,57873,2256],{"class":488},[312,57875,1437],{"class":1436},[312,57877,861],{"class":488},[312,57879,498],{"class":324},[312,57881,57882],{"class":314,"line":3538},[312,57883,3992],{"class":324},[312,57885,57886],{"class":314,"line":3555},[312,57887,4205],{"emptyLinePlaceholder":1881},[312,57889,57890,57892],{"class":314,"line":3560},[312,57891,56603],{"class":332},[312,57893,483],{"class":324},[312,57895,57896,57898,57900,57902],{"class":314,"line":3565},[312,57897,56543],{"class":488},[312,57899,492],{"class":324},[312,57901,992],{"class":488},[312,57903,498],{"class":324},[312,57905,57906,57908,57910,57912],{"class":314,"line":3570},[312,57907,56620],{"class":488},[312,57909,492],{"class":324},[312,57911,858],{"class":488},[312,57913,498],{"class":324},[312,57915,57916,57918,57920,57922],{"class":314,"line":3584},[312,57917,56631],{"class":488},[312,57919,492],{"class":324},[312,57921,858],{"class":488},[312,57923,498],{"class":324},[312,57925,57926,57928,57930,57932,57934],{"class":314,"line":3589},[312,57927,56554],{"class":488},[312,57929,492],{"class":324},[312,57931,2256],{"class":488},[312,57933,2273],{"class":1436},[312,57935,498],{"class":324},[312,57937,57938,57940,57942,57944,57946],{"class":314,"line":4382},[312,57939,56568],{"class":488},[312,57941,492],{"class":324},[312,57943,2520],{"class":488},[312,57945,2273],{"class":1436},[312,57947,498],{"class":324},[312,57949,57950,57952,57954,57956],{"class":314,"line":4396},[312,57951,56666],{"class":488},[312,57953,492],{"class":324},[312,57955,56671],{"class":488},[312,57957,498],{"class":324},[312,57959,57960],{"class":314,"line":4404},[312,57961,3992],{"class":324},[312,57963,57964],{"class":314,"line":4409},[312,57965,4205],{"emptyLinePlaceholder":1881},[312,57967,57968,57970,57972],{"class":314,"line":4415},[312,57969,56603],{"class":332},[312,57971,8629],{"class":328},[312,57973,483],{"class":324},[312,57975,57976,57978,57980,57982],{"class":314,"line":4421},[312,57977,56543],{"class":488},[312,57979,492],{"class":324},[312,57981,992],{"class":488},[312,57983,498],{"class":324},[312,57985,57986,57988,57990,57992,57994],{"class":314,"line":4426},[312,57987,56704],{"class":488},[312,57989,492],{"class":324},[312,57991,2845],{"class":488},[312,57993,1437],{"class":1436},[312,57995,498],{"class":324},[312,57997,57998,58000,58002,58004,58006],{"class":314,"line":9751},[312,57999,56620],{"class":488},[312,58001,492],{"class":324},[312,58003,1546],{"class":488},[312,58005,1437],{"class":1436},[312,58007,498],{"class":324},[312,58009,58010,58012,58014,58016,58018],{"class":314,"line":9775},[312,58011,56729],{"class":488},[312,58013,492],{"class":324},[312,58015,2264],{"class":488},[312,58017,1437],{"class":1436},[312,58019,498],{"class":324},[312,58021,58022],{"class":314,"line":9780},[312,58023,3992],{"class":324},[312,58025,58026],{"class":314,"line":9786},[312,58027,4205],{"emptyLinePlaceholder":1881},[312,58029,58030,58032],{"class":314,"line":9813},[312,58031,56750],{"class":328},[312,58033,483],{"class":324},[312,58035,58036,58038,58040,58042],{"class":314,"line":9818},[312,58037,56543],{"class":488},[312,58039,492],{"class":324},[312,58041,992],{"class":488},[312,58043,498],{"class":324},[312,58045,58046,58048,58050,58052,58054],{"class":314,"line":9824},[312,58047,56729],{"class":488},[312,58049,492],{"class":324},[312,58051,2725],{"class":488},[312,58053,1437],{"class":1436},[312,58055,498],{"class":324},[312,58057,58058,58060,58062,58064,58066],{"class":314,"line":9836},[312,58059,56620],{"class":488},[312,58061,492],{"class":324},[312,58063,1546],{"class":488},[312,58065,1437],{"class":1436},[312,58067,498],{"class":324},[312,58069,58070,58072,58074,58076],{"class":314,"line":9848},[312,58071,56791],{"class":488},[312,58073,492],{"class":324},[312,58075,53268],{"class":488},[312,58077,498],{"class":324},[312,58079,58080,58082,58084,58086],{"class":314,"line":9860},[312,58081,56802],{"class":488},[312,58083,492],{"class":324},[312,58085,53455],{"class":488},[312,58087,498],{"class":324},[312,58089,58090,58092,58094,58096],{"class":314,"line":11519},[312,58091,56543],{"class":488},[312,58093,492],{"class":324},[312,58095,992],{"class":488},[312,58097,498],{"class":324},[312,58099,58100,58102,58104,58106,58108],{"class":314,"line":11544},[312,58101,56554],{"class":488},[312,58103,492],{"class":324},[312,58105,5797],{"class":488},[312,58107,1437],{"class":1436},[312,58109,498],{"class":324},[312,58111,58112,58114,58116,58118,58120],{"class":314,"line":11567},[312,58113,56568],{"class":488},[312,58115,492],{"class":324},[312,58117,1546],{"class":488},[312,58119,1437],{"class":1436},[312,58121,498],{"class":324},[312,58123,58124],{"class":314,"line":11591},[312,58125,3992],{"class":324},[312,58127,58128],{"class":314,"line":11596},[312,58129,4205],{"emptyLinePlaceholder":1881},[312,58131,58132,58134,58136],{"class":314,"line":11601},[312,58133,56750],{"class":328},[312,58135,56857],{"class":328},[312,58137,483],{"class":324},[312,58139,58140,58142,58144,58146,58148],{"class":314,"line":11606},[312,58141,56554],{"class":488},[312,58143,492],{"class":324},[312,58145,1546],{"class":488},[312,58147,1437],{"class":1436},[312,58149,498],{"class":324},[312,58151,58152,58154,58156,58158,58160],{"class":314,"line":11615},[312,58153,56568],{"class":488},[312,58155,492],{"class":324},[312,58157,1546],{"class":488},[312,58159,1437],{"class":1436},[312,58161,498],{"class":324},[312,58163,58164,58166,58168,58170,58172,58174,58176,58178,58180,58182,58184,58186],{"class":314,"line":11620},[312,58165,56666],{"class":488},[312,58167,492],{"class":324},[312,58169,56892],{"class":488},[312,58171,1576],{"class":324},[312,58173,858],{"class":488},[312,58175,733],{"class":324},[312,58177,858],{"class":488},[312,58179,733],{"class":324},[312,58181,858],{"class":488},[312,58183,733],{"class":324},[312,58185,56909],{"class":488},[312,58187,4524],{"class":324},[312,58189,58190,58192,58194,58196,58198],{"class":314,"line":11626},[312,58191,56916],{"class":488},[312,58193,492],{"class":324},[312,58195,2391],{"class":488},[312,58197,1437],{"class":1436},[312,58199,498],{"class":324},[312,58201,58202],{"class":314,"line":11647},[312,58203,3992],{"class":324},[312,58205,58206],{"class":314,"line":11653},[312,58207,4205],{"emptyLinePlaceholder":1881},[312,58209,58210,58212],{"class":314,"line":11667},[312,58211,56937],{"class":332},[312,58213,483],{"class":324},[312,58215,58216,58218,58220,58222],{"class":314,"line":11673},[312,58217,56666],{"class":488},[312,58219,492],{"class":324},[312,58221,56948],{"class":488},[312,58223,498],{"class":324},[312,58225,58226],{"class":314,"line":11700},[312,58227,3992],{"class":324},[312,58229,58230,58232,58234],{"class":314,"line":11709},[312,58231,54203],{"class":324},[312,58233,1856],{"class":328},[312,58235,343],{"class":324},[312,58237,58238,58240,58242],{"class":314,"line":11715},[312,58239,353],{"class":324},[312,58241,53127],{"class":328},[312,58243,343],{"class":324},[312,58245,58246],{"class":314,"line":11723},[312,58247,4205],{"emptyLinePlaceholder":1881},[312,58249,58250,58252,58254],{"class":314,"line":11728},[312,58251,325],{"class":324},[312,58253,53586],{"class":328},[312,58255,343],{"class":324},[312,58257,58258,58260,58262,58264,58266,58268],{"class":314,"line":18404},[312,58259,53930],{"class":324},[312,58261,329],{"class":328},[312,58263,333],{"class":332},[312,58265,336],{"class":324},[312,58267,55276],{"class":339},[312,58269,343],{"class":324},[312,58271,58272,58274,58276,58278,58280,58282],{"class":314,"line":18410},[312,58273,53134],{"class":324},[312,58275,329],{"class":328},[312,58277,333],{"class":332},[312,58279,336],{"class":324},[312,58281,57009],{"class":339},[312,58283,343],{"class":324},[312,58285,58286,58288,58290,58292,58294,58296,58298,58300,58302],{"class":314,"line":18433},[312,58287,57016],{"class":324},[312,58289,19],{"class":328},[312,58291,57021],{"class":332},[312,58293,336],{"class":324},[312,58295,57026],{"class":339},[312,58297,57029],{"class":332},[312,58299,336],{"class":324},[312,58301,495],{"class":339},[312,58303,343],{"class":324},[312,58305,58306,58308,58310],{"class":314,"line":18439},[312,58307,53563],{"class":324},[312,58309,329],{"class":328},[312,58311,343],{"class":324},[312,58313,58314,58316,58318,58320,58322,58324],{"class":314,"line":18462},[312,58315,53134],{"class":324},[312,58317,329],{"class":328},[312,58319,333],{"class":332},[312,58321,336],{"class":324},[312,58323,57056],{"class":339},[312,58325,343],{"class":324},[312,58327,58328,58330,58332,58334,58336],{"class":314,"line":18476},[312,58329,57016],{"class":324},[312,58331,24],{"class":328},[312,58333,57067],{"class":324},[312,58335,24],{"class":328},[312,58337,343],{"class":324},[312,58339,58340,58342,58344],{"class":314,"line":18496},[312,58341,57016],{"class":324},[312,58343,243],{"class":328},[312,58345,343],{"class":324},[312,58347,58348,58350,58352,58354,58356,58358,58360,58362],{"class":314,"line":18502},[312,58349,57084],{"class":324},[312,58351,143],{"class":328},[312,58353,333],{"class":332},[312,58355,336],{"class":324},[312,58357,57093],{"class":339},[312,58359,57096],{"class":324},[312,58361,143],{"class":328},[312,58363,343],{"class":324},[312,58365,58366,58368,58370,58372,58374],{"class":314,"line":18513},[312,58367,57084],{"class":324},[312,58369,143],{"class":328},[312,58371,57096],{"class":324},[312,58373,143],{"class":328},[312,58375,343],{"class":324},[312,58377,58378,58380,58382,58384,58386],{"class":314,"line":18536},[312,58379,57084],{"class":324},[312,58381,143],{"class":328},[312,58383,57096],{"class":324},[312,58385,143],{"class":328},[312,58387,343],{"class":324},[312,58389,58390,58392,58394,58396,58398],{"class":314,"line":18558},[312,58391,57084],{"class":324},[312,58393,143],{"class":328},[312,58395,57096],{"class":324},[312,58397,143],{"class":328},[312,58399,343],{"class":324},[312,58401,58402,58404,58406,58408,58410],{"class":314,"line":18563},[312,58403,57084],{"class":324},[312,58405,143],{"class":328},[312,58407,57096],{"class":324},[312,58409,143],{"class":328},[312,58411,343],{"class":324},[312,58413,58414,58416,58418,58420,58422],{"class":314,"line":18569},[312,58415,57084],{"class":324},[312,58417,143],{"class":328},[312,58419,57096],{"class":324},[312,58421,143],{"class":328},[312,58423,343],{"class":324},[312,58425,58426,58428,58430,58432,58434],{"class":314,"line":18583},[312,58427,57084],{"class":324},[312,58429,143],{"class":328},[312,58431,57096],{"class":324},[312,58433,143],{"class":328},[312,58435,343],{"class":324},[312,58437,58438,58440,58442,58444,58446],{"class":314,"line":18596},[312,58439,57084],{"class":324},[312,58441,143],{"class":328},[312,58443,57096],{"class":324},[312,58445,143],{"class":328},[312,58447,343],{"class":324},[312,58449,58450,58452,58454],{"class":314,"line":18601},[312,58451,57189],{"class":324},[312,58453,243],{"class":328},[312,58455,343],{"class":324},[312,58457,58458,58460,58462],{"class":314,"line":18615},[312,58459,53563],{"class":324},[312,58461,329],{"class":328},[312,58463,343],{"class":324},[312,58465,58466,58468,58470],{"class":314,"line":18620},[312,58467,54203],{"class":324},[312,58469,329],{"class":328},[312,58471,343],{"class":324},[312,58473,58474,58476,58478],{"class":314,"line":18626},[312,58475,53930],{"class":324},[312,58477,53599],{"class":328},[312,58479,343],{"class":324},[312,58481,58482,58484,58487,58489],{"class":314,"line":18631},[312,58483,13024],{"class":1436},[312,58485,58486],{"class":488}," sliderData",[312,58488,15366],{"class":1436},[312,58490,57229],{"class":324},[312,58492,58493,58495,58497,58499,58501,58503,58505],{"class":314,"line":18645},[312,58494,57234],{"class":324},[312,58496,57237],{"class":339},[312,58498,57240],{"class":324},[312,58500,57243],{"class":339},[312,58502,57246],{"class":324},[312,58504,57249],{"class":339},[312,58506,57252],{"class":324},[312,58508,58509,58511,58513,58515,58517,58519,58521],{"class":314,"line":18650},[312,58510,57234],{"class":324},[312,58512,57259],{"class":339},[312,58514,57240],{"class":324},[312,58516,57264],{"class":339},[312,58518,57246],{"class":324},[312,58520,57269],{"class":339},[312,58522,57252],{"class":324},[312,58524,58525,58527,58529,58531,58533,58535,58537],{"class":314,"line":18655},[312,58526,57234],{"class":324},[312,58528,57278],{"class":339},[312,58530,57240],{"class":324},[312,58532,57283],{"class":339},[312,58534,57246],{"class":324},[312,58536,57288],{"class":339},[312,58538,57252],{"class":324},[312,58540,58541,58543,58545,58547,58549,58551,58553],{"class":314,"line":18669},[312,58542,57234],{"class":324},[312,58544,57297],{"class":339},[312,58546,57240],{"class":324},[312,58548,57302],{"class":339},[312,58550,57246],{"class":324},[312,58552,57307],{"class":339},[312,58554,57252],{"class":324},[312,58556,58557,58559,58561,58563,58565,58567,58569],{"class":314,"line":18681},[312,58558,57234],{"class":324},[312,58560,57316],{"class":339},[312,58562,57240],{"class":324},[312,58564,57321],{"class":339},[312,58566,57246],{"class":324},[312,58568,57326],{"class":339},[312,58570,57252],{"class":324},[312,58572,58573,58575,58577,58579,58581,58583,58585],{"class":314,"line":18686},[312,58574,57234],{"class":324},[312,58576,57335],{"class":339},[312,58578,57240],{"class":324},[312,58580,57340],{"class":339},[312,58582,57246],{"class":324},[312,58584,57345],{"class":339},[312,58586,57252],{"class":324},[312,58588,58589,58591,58593,58595,58597,58599,58601],{"class":314,"line":18699},[312,58590,57234],{"class":324},[312,58592,57354],{"class":339},[312,58594,57240],{"class":324},[312,58596,57359],{"class":339},[312,58598,57246],{"class":324},[312,58600,57364],{"class":339},[312,58602,57252],{"class":324},[312,58604,58605,58607,58609,58611,58613,58615,58617],{"class":314,"line":18704},[312,58606,57234],{"class":324},[312,58608,57373],{"class":339},[312,58610,57240],{"class":324},[312,58612,57378],{"class":339},[312,58614,57246],{"class":324},[312,58616,57383],{"class":339},[312,58618,57386],{"class":324},[312,58620,58621],{"class":314,"line":18709},[312,58622,54895],{"class":324},[312,58624,58625],{"class":314,"line":18714},[312,58626,58627],{"class":318},"    \u002F\u002F 1.获取元素\n",[312,58629,58630,58632,58634,58636,58638,58640,58642,58644],{"class":314,"line":18727},[312,58631,13024],{"class":1436},[312,58633,57397],{"class":488},[312,58635,15366],{"class":1436},[312,58637,56180],{"class":324},[312,58639,56183],{"class":332},[312,58641,1576],{"class":324},[312,58643,57408],{"class":339},[312,58645,1959],{"class":324},[312,58647,58648,58650,58652,58654,58656,58658,58660,58662],{"class":314,"line":18732},[312,58649,13024],{"class":1436},[312,58651,8629],{"class":488},[312,58653,15366],{"class":1436},[312,58655,56180],{"class":324},[312,58657,56183],{"class":332},[312,58659,1576],{"class":324},[312,58661,57427],{"class":339},[312,58663,1959],{"class":324},[312,58665,58666,58668,58670,58672],{"class":314,"line":34428},[312,58667,54005],{"class":1436},[312,58669,11241],{"class":324},[312,58671,336],{"class":1436},[312,58673,49128],{"class":488},[312,58675,58676],{"class":314,"line":34434},[312,58677,58678],{"class":318},"    \u002F\u002F 2.开启定时器\n",[312,58680,58681],{"class":314,"line":34440},[312,58682,58683],{"class":318},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[312,58685,58686,58689,58691,58693],{"class":314,"line":34446},[312,58687,58688],{"class":332},"    setInterval",[312,58690,1576],{"class":324},[312,58692,56233],{"class":1436},[312,58694,56236],{"class":324},[312,58696,58697,58699],{"class":314,"line":34452},[312,58698,56241],{"class":324},[312,58700,4507],{"class":1436},[312,58702,58703,58705,58707,58709,58712,58714],{"class":314,"line":34463},[312,58704,56264],{"class":1436},[312,58706,56267],{"class":324},[312,58708,3516],{"class":1436},[312,58710,58711],{"class":324}," sliderData.",[312,58713,53754],{"class":488},[312,58715,14244],{"class":324},[312,58717,58718,58721,58723],{"class":314,"line":34469},[312,58719,58720],{"class":324},"        i ",[312,58722,336],{"class":1436},[312,58724,49128],{"class":488},[312,58726,58727],{"class":314,"line":34489},[312,58728,54184],{"class":324},[312,58730,58731],{"class":314,"line":34495},[312,58732,58733],{"class":318},"      \u002F\u002F 更换图片路径\n",[312,58735,58736,58738,58740],{"class":314,"line":34506},[312,58737,57503],{"class":324},[312,58739,336],{"class":1436},[312,58741,58742],{"class":324}," sliderData[i].url\n",[312,58744,58745],{"class":314,"line":34512},[312,58746,58747],{"class":318},"      \u002F\u002F 把文字写到p里面\n",[312,58749,58750,58752,58754],{"class":314,"line":34518},[312,58751,57513],{"class":324},[312,58753,336],{"class":1436},[312,58755,58756],{"class":324}," sliderData[i].title\n",[312,58758,58759],{"class":314,"line":34524},[312,58760,58761],{"class":318},"      \u002F\u002F 小圆点\n",[312,58763,58764],{"class":314,"line":34530},[312,58765,58766],{"class":318},"      \u002F\u002F 先删除以前的active\n",[312,58768,58769],{"class":314,"line":34536},[312,58770,58771],{"class":318},"      \u002F\u002F 只让当前li添加active\n",[312,58773,58774,58776,58778,58780,58783,58786,58789,58791,58793],{"class":314,"line":34542},[312,58775,57553],{"class":324},[312,58777,56183],{"class":332},[312,58779,1576],{"class":324},[312,58781,58782],{"class":339},"'.slider-footer .activate'",[312,58784,58785],{"class":324},").classList.",[312,58787,58788],{"class":332},"remove",[312,58790,1576],{"class":324},[312,58792,57571],{"class":339},[312,58794,1959],{"class":324},[312,58796,58797,58799,58801,58803,58806,58808,58810,58812,58815,58817,58819,58821,58823],{"class":314,"line":34548},[312,58798,57553],{"class":324},[312,58800,56183],{"class":332},[312,58802,1576],{"class":324},[312,58804,58805],{"class":339},"`.slider-footer ul li:nth-child(${",[312,58807,2386],{"class":324},[312,58809,47361],{"class":1436},[312,58811,26914],{"class":488},[312,58813,58814],{"class":339},"})`",[312,58816,58785],{"class":324},[312,58818,7138],{"class":332},[312,58820,1576],{"class":324},[312,58822,57571],{"class":339},[312,58824,1959],{"class":324},[312,58826,58827],{"class":314,"line":34568},[312,58828,4205],{"emptyLinePlaceholder":1881},[312,58830,58831,58833,58835],{"class":314,"line":34574},[312,58832,56319],{"class":324},[312,58834,8214],{"class":488},[312,58836,1959],{"class":324},[312,58838,58839],{"class":314,"line":34590},[312,58840,4205],{"emptyLinePlaceholder":1881},[312,58842,58843,58845,58847],{"class":314,"line":34596},[312,58844,54203],{"class":324},[312,58846,53599],{"class":328},[312,58848,343],{"class":324},[312,58850,58851,58853,58855],{"class":314,"line":34610},[312,58852,353],{"class":324},[312,58854,53586],{"class":328},[312,58856,343],{"class":324},[312,58858,58859],{"class":314,"line":34616},[312,58860,4205],{"emptyLinePlaceholder":1881},[312,58862,58863,58865,58867],{"class":314,"line":34631},[312,58864,353],{"class":324},[312,58866,52430],{"class":328},[312,58868,343],{"class":324},[69,58870,58872],{"id":58871},"_317-重要知识点","3.1.7 重要知识点",[24,58874,58875,58876],{},"浏览器在渲染文本时， ",[27,58877,58878],{},"没有空格或换行符就没有“断行点”",[24,58880,58881],{},[19,58882],{"alt":308,"src":58883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[24,58885,58886],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[24,58888,58889],{},[19,58890],{"alt":308,"src":58891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[24,58893,58894],{},[19,58895],{"alt":308,"src":58896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,58898,58900],{"id":58899},"_32-dom事件基础","3.2 DOM事件基础",[69,58902,58904],{"id":58903},"_321-事件监听","3.2.1 事件监听",[24,58906,58907],{},[19,58908],{"alt":308,"src":58909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[24,58911,58912],{},"事件监听有响应的发生",[24,58914,58915],{},[19,58916],{"alt":308,"src":58917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[24,58919,58920],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[24,58922,58923],{},"对于有名函数,要执行的函数名后边不要加()",[69,58925,58927],{"id":58926},"_322-随机点名案例","3.2.2 随机点名案例",[303,58929,58931],{"className":52428,"code":58930,"language":52430,"meta":308,"style":308},"\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",[119,58932,58933,58943,58957,58961,58969,58983,59003,59015,59023,59029,59039,59049,59053,59057,59064,59075,59079,59083,59089,59101,59115,59125,59137,59150,59154,59158,59165,59169,59182,59194,59206,59210,59214,59218,59225,59235,59239,59243,59252,59264,59276,59291,59295,59303,59311,59315,59323,59336,59350,59363,59383,59391,59406,59426,59446,59454,59458,59466,59471,59507,59527,59532,59551,59556,59567,59572,59583,59588,59607,59622,59627,59653,59663,59672,59677,59693,59698,59703,59708,59723,59727,59731,59736,59755,59772,59780,59785,59800,59804,59808,59816,59824,59828],{"__ignoreMap":308},[312,58934,58935,58937,58939,58941],{"class":314,"line":315},[312,58936,53092],{"class":324},[312,58938,53095],{"class":328},[312,58940,53098],{"class":332},[312,58942,343],{"class":324},[312,58944,58945,58947,58949,58951,58953,58955],{"class":314,"line":171},[312,58946,325],{"class":324},[312,58948,52430],{"class":328},[312,58950,53109],{"class":332},[312,58952,336],{"class":324},[312,58954,53114],{"class":339},[312,58956,343],{"class":324},[312,58958,58959],{"class":314,"line":274},[312,58960,4205],{"emptyLinePlaceholder":1881},[312,58962,58963,58965,58967],{"class":314,"line":298},[312,58964,325],{"class":324},[312,58966,53127],{"class":328},[312,58968,343],{"class":324},[312,58970,58971,58973,58975,58977,58979,58981],{"class":314,"line":974},[312,58972,53930],{"class":324},[312,58974,53137],{"class":328},[312,58976,53140],{"class":332},[312,58978,336],{"class":324},[312,58980,53145],{"class":339},[312,58982,343],{"class":324},[312,58984,58985,58987,58989,58991,58993,58995,58997,58999,59001],{"class":314,"line":980},[312,58986,53930],{"class":324},[312,58988,53137],{"class":328},[312,58990,16721],{"class":332},[312,58992,336],{"class":324},[312,58994,53184],{"class":339},[312,58996,53164],{"class":332},[312,58998,336],{"class":324},[312,59000,53191],{"class":339},[312,59002,343],{"class":324},[312,59004,59005,59007,59009,59011,59013],{"class":314,"line":997},[312,59006,53930],{"class":324},[312,59008,628],{"class":328},[312,59010,53202],{"class":324},[312,59012,628],{"class":328},[312,59014,343],{"class":324},[312,59016,59017,59019,59021],{"class":314,"line":1003},[312,59018,53930],{"class":324},[312,59020,1856],{"class":328},[312,59022,343],{"class":324},[312,59024,59025,59027],{"class":314,"line":1020},[312,59026,8207],{"class":328},[312,59028,483],{"class":324},[312,59030,59031,59033,59035,59037],{"class":314,"line":1026},[312,59032,56490],{"class":488},[312,59034,492],{"class":324},[312,59036,858],{"class":488},[312,59038,498],{"class":324},[312,59040,59041,59043,59045,59047],{"class":314,"line":3418},[312,59042,56479],{"class":488},[312,59044,492],{"class":324},[312,59046,858],{"class":488},[312,59048,498],{"class":324},[312,59050,59051],{"class":314,"line":3423},[312,59052,3992],{"class":324},[312,59054,59055],{"class":314,"line":3429},[312,59056,4205],{"emptyLinePlaceholder":1881},[312,59058,59059,59062],{"class":314,"line":3434},[312,59060,59061],{"class":328},"    h2",[312,59063,483],{"class":324},[312,59065,59066,59069,59071,59073],{"class":314,"line":3448},[312,59067,59068],{"class":488},"      text-align",[312,59070,492],{"class":324},[312,59072,53380],{"class":488},[312,59074,498],{"class":324},[312,59076,59077],{"class":314,"line":3453},[312,59078,3992],{"class":324},[312,59080,59081],{"class":314,"line":3459},[312,59082,4205],{"emptyLinePlaceholder":1881},[312,59084,59085,59087],{"class":314,"line":3480},[312,59086,56536],{"class":332},[312,59088,483],{"class":324},[312,59090,59091,59093,59095,59097,59099],{"class":314,"line":3485},[312,59092,56554],{"class":488},[312,59094,492],{"class":324},[312,59096,3346],{"class":488},[312,59098,1437],{"class":1436},[312,59100,498],{"class":324},[312,59102,59103,59105,59107,59109,59111,59113],{"class":314,"line":3499},[312,59104,56490],{"class":488},[312,59106,492],{"class":324},[312,59108,2601],{"class":488},[312,59110,1437],{"class":1436},[312,59112,861],{"class":488},[312,59114,498],{"class":324},[312,59116,59117,59119,59121,59123],{"class":314,"line":3504},[312,59118,56791],{"class":488},[312,59120,492],{"class":324},[312,59122,53268],{"class":488},[312,59124,498],{"class":324},[312,59126,59127,59129,59131,59133,59135],{"class":314,"line":3533},[312,59128,56704],{"class":488},[312,59130,492],{"class":324},[312,59132,2769],{"class":488},[312,59134,1437],{"class":1436},[312,59136,498],{"class":324},[312,59138,59139,59142,59144,59146,59148],{"class":314,"line":3538},[312,59140,59141],{"class":488},"      line-height",[312,59143,492],{"class":324},[312,59145,2346],{"class":488},[312,59147,1437],{"class":1436},[312,59149,498],{"class":324},[312,59151,59152],{"class":314,"line":3555},[312,59153,3992],{"class":324},[312,59155,59156],{"class":314,"line":3560},[312,59157,4205],{"emptyLinePlaceholder":1881},[312,59159,59160,59163],{"class":314,"line":3565},[312,59161,59162],{"class":332},"    .qs",[312,59164,483],{"class":324},[312,59166,59167],{"class":314,"line":3570},[312,59168,4205],{"emptyLinePlaceholder":1881},[312,59170,59171,59173,59175,59178,59180],{"class":314,"line":3584},[312,59172,56554],{"class":488},[312,59174,492],{"class":324},[312,59176,59177],{"class":488},"450",[312,59179,1437],{"class":1436},[312,59181,498],{"class":324},[312,59183,59184,59186,59188,59190,59192],{"class":314,"line":3589},[312,59185,56568],{"class":488},[312,59187,492],{"class":324},[312,59189,2346],{"class":488},[312,59191,1437],{"class":1436},[312,59193,498],{"class":324},[312,59195,59196,59199,59201,59204],{"class":314,"line":4382},[312,59197,59198],{"class":488},"      color",[312,59200,492],{"class":324},[312,59202,59203],{"class":488},"red",[312,59205,498],{"class":324},[312,59207,59208],{"class":314,"line":4396},[312,59209,4205],{"emptyLinePlaceholder":1881},[312,59211,59212],{"class":314,"line":4404},[312,59213,3992],{"class":324},[312,59215,59216],{"class":314,"line":4409},[312,59217,4205],{"emptyLinePlaceholder":1881},[312,59219,59220,59223],{"class":314,"line":4415},[312,59221,59222],{"class":332},"    .btns",[312,59224,483],{"class":324},[312,59226,59227,59229,59231,59233],{"class":314,"line":4421},[312,59228,59068],{"class":488},[312,59230,492],{"class":324},[312,59232,53380],{"class":488},[312,59234,498],{"class":324},[312,59236,59237],{"class":314,"line":4426},[312,59238,3992],{"class":324},[312,59240,59241],{"class":314,"line":9751},[312,59242,4205],{"emptyLinePlaceholder":1881},[312,59244,59245,59247,59250],{"class":314,"line":9775},[312,59246,59222],{"class":332},[312,59248,59249],{"class":328}," button",[312,59251,483],{"class":324},[312,59253,59254,59256,59258,59260,59262],{"class":314,"line":9780},[312,59255,56554],{"class":488},[312,59257,492],{"class":324},[312,59259,2761],{"class":488},[312,59261,1437],{"class":1436},[312,59263,498],{"class":324},[312,59265,59266,59268,59270,59272,59274],{"class":314,"line":9786},[312,59267,56568],{"class":488},[312,59269,492],{"class":324},[312,59271,2218],{"class":488},[312,59273,1437],{"class":1436},[312,59275,498],{"class":324},[312,59277,59278,59280,59282,59284,59287,59289],{"class":314,"line":9813},[312,59279,56490],{"class":488},[312,59281,492],{"class":324},[312,59283,858],{"class":488},[312,59285,59286],{"class":488}," 50",[312,59288,1437],{"class":1436},[312,59290,498],{"class":324},[312,59292,59293],{"class":314,"line":9818},[312,59294,3992],{"class":324},[312,59296,59297,59299,59301],{"class":314,"line":9824},[312,59298,54203],{"class":324},[312,59300,1856],{"class":328},[312,59302,343],{"class":324},[312,59304,59305,59307,59309],{"class":314,"line":9836},[312,59306,353],{"class":324},[312,59308,53127],{"class":328},[312,59310,343],{"class":324},[312,59312,59313],{"class":314,"line":9848},[312,59314,4205],{"emptyLinePlaceholder":1881},[312,59316,59317,59319,59321],{"class":314,"line":9860},[312,59318,325],{"class":324},[312,59320,53586],{"class":328},[312,59322,343],{"class":324},[312,59324,59325,59327,59329,59332,59334],{"class":314,"line":11519},[312,59326,53930],{"class":324},[312,59328,14],{"class":328},[312,59330,59331],{"class":324},">随机点名\u003C\u002F",[312,59333,14],{"class":328},[312,59335,343],{"class":324},[312,59337,59338,59340,59342,59344,59346,59348],{"class":314,"line":11544},[312,59339,53930],{"class":324},[312,59341,329],{"class":328},[312,59343,333],{"class":332},[312,59345,336],{"class":324},[312,59347,55276],{"class":339},[312,59349,343],{"class":324},[312,59351,59352,59354,59356,59359,59361],{"class":314,"line":11567},[312,59353,53134],{"class":324},[312,59355,312],{"class":328},[312,59357,59358],{"class":324},">名字是：\u003C\u002F",[312,59360,312],{"class":328},[312,59362,343],{"class":324},[312,59364,59365,59367,59369,59371,59373,59376,59379,59381],{"class":314,"line":11591},[312,59366,53134],{"class":324},[312,59368,329],{"class":328},[312,59370,333],{"class":332},[312,59372,336],{"class":324},[312,59374,59375],{"class":339},"\"qs\"",[312,59377,59378],{"class":324},">这里显示姓名\u003C\u002F",[312,59380,329],{"class":328},[312,59382,343],{"class":324},[312,59384,59385,59387,59389],{"class":314,"line":11596},[312,59386,54203],{"class":324},[312,59388,329],{"class":328},[312,59390,343],{"class":324},[312,59392,59393,59395,59397,59399,59401,59404],{"class":314,"line":11601},[312,59394,53930],{"class":324},[312,59396,329],{"class":328},[312,59398,333],{"class":332},[312,59400,336],{"class":324},[312,59402,59403],{"class":339},"\"btns\"",[312,59405,343],{"class":324},[312,59407,59408,59410,59412,59414,59416,59419,59422,59424],{"class":314,"line":11606},[312,59409,53134],{"class":324},[312,59411,55671],{"class":328},[312,59413,333],{"class":332},[312,59415,336],{"class":324},[312,59417,59418],{"class":339},"\"start\"",[312,59420,59421],{"class":324},">开始\u003C\u002F",[312,59423,55671],{"class":328},[312,59425,343],{"class":324},[312,59427,59428,59430,59432,59434,59436,59439,59442,59444],{"class":314,"line":11615},[312,59429,53134],{"class":324},[312,59431,55671],{"class":328},[312,59433,333],{"class":332},[312,59435,336],{"class":324},[312,59437,59438],{"class":339},"\"end\"",[312,59440,59441],{"class":324},">结束\u003C\u002F",[312,59443,55671],{"class":328},[312,59445,343],{"class":324},[312,59447,59448,59450,59452],{"class":314,"line":11620},[312,59449,54203],{"class":324},[312,59451,329],{"class":328},[312,59453,343],{"class":324},[312,59455,59456],{"class":314,"line":11626},[312,59457,4205],{"emptyLinePlaceholder":1881},[312,59459,59460,59462,59464],{"class":314,"line":11647},[312,59461,53930],{"class":324},[312,59463,53599],{"class":328},[312,59465,343],{"class":324},[312,59467,59468],{"class":314,"line":11653},[312,59469,59470],{"class":318},"    \u002F\u002F 数据数组\n",[312,59472,59473,59475,59478,59480,59482,59485,59487,59490,59492,59495,59497,59500,59502,59505],{"class":314,"line":11667},[312,59474,13024],{"class":1436},[312,59476,59477],{"class":488}," arr",[312,59479,15366],{"class":1436},[312,59481,54012],{"class":324},[312,59483,59484],{"class":339},"'马超'",[312,59486,733],{"class":324},[312,59488,59489],{"class":339},"'黄忠'",[312,59491,733],{"class":324},[312,59493,59494],{"class":339},"'赵云'",[312,59496,733],{"class":324},[312,59498,59499],{"class":339},"'关羽'",[312,59501,733],{"class":324},[312,59503,59504],{"class":339},"'张飞'",[312,59506,35041],{"class":324},[312,59508,59509,59511,59514,59516,59518,59520,59522,59525],{"class":314,"line":11673},[312,59510,13024],{"class":1436},[312,59512,59513],{"class":488}," qs",[312,59515,15366],{"class":1436},[312,59517,56180],{"class":324},[312,59519,56183],{"class":332},[312,59521,1576],{"class":324},[312,59523,59524],{"class":339},"'.qs'",[312,59526,1959],{"class":324},[312,59528,59529],{"class":314,"line":11700},[312,59530,59531],{"class":318},"    \u002F\u002F 1.业务1.开始按钮模块\n",[312,59533,59534,59536,59538,59540,59542,59544,59546,59549],{"class":314,"line":11709},[312,59535,13024],{"class":1436},[312,59537,5989],{"class":488},[312,59539,15366],{"class":1436},[312,59541,56180],{"class":324},[312,59543,56183],{"class":332},[312,59545,1576],{"class":324},[312,59547,59548],{"class":339},"'.start'",[312,59550,1959],{"class":324},[312,59552,59553],{"class":314,"line":11715},[312,59554,59555],{"class":318},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[312,59557,59558,59560,59563,59565],{"class":314,"line":11723},[312,59559,54005],{"class":1436},[312,59561,59562],{"class":324}," timerId ",[312,59564,336],{"class":1436},[312,59566,49128],{"class":488},[312,59568,59569],{"class":314,"line":11728},[312,59570,59571],{"class":318},"    \u002F\u002F 随机号要全局变量\n",[312,59573,59574,59576,59579,59581],{"class":314,"line":18404},[312,59575,54005],{"class":1436},[312,59577,59578],{"class":324}," random ",[312,59580,336],{"class":1436},[312,59582,49128],{"class":488},[312,59584,59585],{"class":314,"line":18410},[312,59586,59587],{"class":318},"    \u002F\u002F 1.1 添加点击事件\n",[312,59589,59590,59593,59596,59598,59601,59603,59605],{"class":314,"line":18433},[312,59591,59592],{"class":324},"    start.",[312,59594,59595],{"class":332},"addEventListener",[312,59597,1576],{"class":324},[312,59599,59600],{"class":339},"'click'",[312,59602,733],{"class":324},[312,59604,56233],{"class":1436},[312,59606,56236],{"class":324},[312,59608,59609,59612,59614,59616,59618,59620],{"class":314,"line":18439},[312,59610,59611],{"class":324},"      timerId ",[312,59613,336],{"class":1436},[312,59615,56228],{"class":332},[312,59617,1576],{"class":324},[312,59619,56233],{"class":1436},[312,59621,56236],{"class":324},[312,59623,59624],{"class":314,"line":18462},[312,59625,59626],{"class":318},"        \u002F\u002F 随机数\n",[312,59628,59629,59632,59634,59637,59640,59643,59645,59647,59649,59651],{"class":314,"line":18476},[312,59630,59631],{"class":324},"        random ",[312,59633,336],{"class":1436},[312,59635,59636],{"class":332}," parseInt",[312,59638,59639],{"class":324},"(Math.",[312,59641,59642],{"class":332},"random",[312,59644,14852],{"class":324},[312,59646,2400],{"class":1436},[312,59648,53751],{"class":324},[312,59650,53754],{"class":488},[312,59652,1959],{"class":324},[312,59654,59655,59658,59660],{"class":314,"line":18496},[312,59656,59657],{"class":324},"        qs.innerHTML ",[312,59659,336],{"class":1436},[312,59661,59662],{"class":324}," arr[random]\n",[312,59664,59665,59668,59670],{"class":314,"line":18502},[312,59666,59667],{"class":324},"      }, ",[312,59669,2218],{"class":488},[312,59671,1959],{"class":324},[312,59673,59674],{"class":314,"line":18513},[312,59675,59676],{"class":318},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[312,59678,59679,59681,59684,59686,59689,59691],{"class":314,"line":18536},[312,59680,56264],{"class":1436},[312,59682,59683],{"class":324}," (arr.",[312,59685,53754],{"class":488},[312,59687,59688],{"class":1436}," ===",[312,59690,26914],{"class":488},[312,59692,14244],{"class":324},[312,59694,59695],{"class":314,"line":18558},[312,59696,59697],{"class":318},"        \u002F\u002F start.disabled = true\n",[312,59699,59700],{"class":314,"line":18563},[312,59701,59702],{"class":318},"        \u002F\u002F end.disabled = true\n",[312,59704,59705],{"class":314,"line":18569},[312,59706,59707],{"class":318},"        \u002F\u002F 可以合起来写\n",[312,59709,59710,59713,59715,59718,59720],{"class":314,"line":18583},[312,59711,59712],{"class":324},"        start.disabled ",[312,59714,336],{"class":1436},[312,59716,59717],{"class":324}," end.disabled ",[312,59719,336],{"class":1436},[312,59721,59722],{"class":488}," true\n",[312,59724,59725],{"class":314,"line":18596},[312,59726,54184],{"class":324},[312,59728,59729],{"class":314,"line":18601},[312,59730,35256],{"class":324},[312,59732,59733],{"class":314,"line":18615},[312,59734,59735],{"class":318},"    \u002F\u002F 1.2 关闭按钮模块\n",[312,59737,59738,59740,59742,59744,59746,59748,59750,59753],{"class":314,"line":18620},[312,59739,13024],{"class":1436},[312,59741,6005],{"class":488},[312,59743,15366],{"class":1436},[312,59745,56180],{"class":324},[312,59747,56183],{"class":332},[312,59749,1576],{"class":324},[312,59751,59752],{"class":339},"'.end'",[312,59754,1959],{"class":324},[312,59756,59757,59760,59762,59764,59766,59768,59770],{"class":314,"line":18626},[312,59758,59759],{"class":324},"    end.",[312,59761,59595],{"class":332},[312,59763,1576],{"class":324},[312,59765,59600],{"class":339},[312,59767,733],{"class":324},[312,59769,56233],{"class":1436},[312,59771,56236],{"class":324},[312,59773,59774,59777],{"class":314,"line":18631},[312,59775,59776],{"class":332},"      clearInterval",[312,59778,59779],{"class":324},"(timerId)\n",[312,59781,59782],{"class":314,"line":18645},[312,59783,59784],{"class":318},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[312,59786,59787,59790,59793,59796,59798],{"class":314,"line":18650},[312,59788,59789],{"class":324},"      arr.",[312,59791,59792],{"class":332},"splice",[312,59794,59795],{"class":324},"(random, ",[312,59797,1433],{"class":488},[312,59799,1959],{"class":324},[312,59801,59802],{"class":314,"line":18655},[312,59803,35256],{"class":324},[312,59805,59806],{"class":314,"line":18669},[312,59807,4205],{"emptyLinePlaceholder":1881},[312,59809,59810,59812,59814],{"class":314,"line":18681},[312,59811,54203],{"class":324},[312,59813,53599],{"class":328},[312,59815,343],{"class":324},[312,59817,59818,59820,59822],{"class":314,"line":18686},[312,59819,353],{"class":324},[312,59821,53586],{"class":328},[312,59823,343],{"class":324},[312,59825,59826],{"class":314,"line":18699},[312,59827,4205],{"emptyLinePlaceholder":1881},[312,59829,59830,59832,59834],{"class":314,"line":18704},[312,59831,353],{"class":324},[312,59833,52430],{"class":328},[312,59835,343],{"class":324},[24,59837,59838],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[69,59840,59842],{"id":59841},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[303,59844,59846],{"className":52428,"code":59845,"language":52430,"meta":308,"style":308},"\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",[119,59847,59848,59858,59872,59876,59884,59898,59918,59930,59938,59942,59950,59962,59970,59989,60006,60022,60032,60036,60044,60052,60056],{"__ignoreMap":308},[312,59849,59850,59852,59854,59856],{"class":314,"line":315},[312,59851,53092],{"class":324},[312,59853,53095],{"class":328},[312,59855,53098],{"class":332},[312,59857,343],{"class":324},[312,59859,59860,59862,59864,59866,59868,59870],{"class":314,"line":171},[312,59861,325],{"class":324},[312,59863,52430],{"class":328},[312,59865,53109],{"class":332},[312,59867,336],{"class":324},[312,59869,53114],{"class":339},[312,59871,343],{"class":324},[312,59873,59874],{"class":314,"line":274},[312,59875,4205],{"emptyLinePlaceholder":1881},[312,59877,59878,59880,59882],{"class":314,"line":298},[312,59879,325],{"class":324},[312,59881,53127],{"class":328},[312,59883,343],{"class":324},[312,59885,59886,59888,59890,59892,59894,59896],{"class":314,"line":974},[312,59887,53930],{"class":324},[312,59889,53137],{"class":328},[312,59891,53140],{"class":332},[312,59893,336],{"class":324},[312,59895,53145],{"class":339},[312,59897,343],{"class":324},[312,59899,59900,59902,59904,59906,59908,59910,59912,59914,59916],{"class":314,"line":980},[312,59901,53930],{"class":324},[312,59903,53137],{"class":328},[312,59905,16721],{"class":332},[312,59907,336],{"class":324},[312,59909,53184],{"class":339},[312,59911,53164],{"class":332},[312,59913,336],{"class":324},[312,59915,53191],{"class":339},[312,59917,343],{"class":324},[312,59919,59920,59922,59924,59926,59928],{"class":314,"line":997},[312,59921,53930],{"class":324},[312,59923,628],{"class":328},[312,59925,53202],{"class":324},[312,59927,628],{"class":328},[312,59929,343],{"class":324},[312,59931,59932,59934,59936],{"class":314,"line":1003},[312,59933,353],{"class":324},[312,59935,53127],{"class":328},[312,59937,343],{"class":324},[312,59939,59940],{"class":314,"line":1020},[312,59941,4205],{"emptyLinePlaceholder":1881},[312,59943,59944,59946,59948],{"class":314,"line":1026},[312,59945,325],{"class":324},[312,59947,53586],{"class":328},[312,59949,343],{"class":324},[312,59951,59952,59954,59956,59958,59960],{"class":314,"line":3418},[312,59953,53930],{"class":324},[312,59955,55671],{"class":328},[312,59957,55677],{"class":324},[312,59959,55671],{"class":328},[312,59961,343],{"class":324},[312,59963,59964,59966,59968],{"class":314,"line":3423},[312,59965,53930],{"class":324},[312,59967,53599],{"class":328},[312,59969,343],{"class":324},[312,59971,59972,59974,59976,59978,59980,59982,59984,59987],{"class":314,"line":3429},[312,59973,13024],{"class":1436},[312,59975,56175],{"class":488},[312,59977,15366],{"class":1436},[312,59979,56180],{"class":324},[312,59981,56183],{"class":332},[312,59983,1576],{"class":324},[312,59985,59986],{"class":339},"'button'",[312,59988,1959],{"class":324},[312,59990,59991,59994,59996,59998,60000,60002,60004],{"class":314,"line":3434},[312,59992,59993],{"class":324},"    btn.",[312,59995,59595],{"class":332},[312,59997,1576],{"class":324},[312,59999,59600],{"class":339},[312,60001,733],{"class":324},[312,60003,56233],{"class":1436},[312,60005,56236],{"class":324},[312,60007,60008,60011,60013,60015,60018,60020],{"class":314,"line":3448},[312,60009,60010],{"class":1436},"      const",[312,60012,4045],{"class":488},[312,60014,15366],{"class":1436},[312,60016,60017],{"class":324}," Math.",[312,60019,59642],{"class":332},[312,60021,3781],{"class":324},[312,60023,60024,60027,60030],{"class":314,"line":3453},[312,60025,60026],{"class":324},"      console.",[312,60028,60029],{"class":332},"log",[312,60031,1966],{"class":324},[312,60033,60034],{"class":314,"line":3459},[312,60035,35256],{"class":324},[312,60037,60038,60040,60042],{"class":314,"line":3480},[312,60039,54203],{"class":324},[312,60041,53599],{"class":328},[312,60043,343],{"class":324},[312,60045,60046,60048,60050],{"class":314,"line":3485},[312,60047,353],{"class":324},[312,60049,53586],{"class":328},[312,60051,343],{"class":324},[312,60053,60054],{"class":314,"line":3499},[312,60055,4205],{"emptyLinePlaceholder":1881},[312,60057,60058,60060,60062],{"class":314,"line":3504},[312,60059,353],{"class":324},[312,60061,52430],{"class":328},[312,60063,343],{"class":324},[24,60065,60066],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[24,60068,60069],{},"常量不可以重新赋值",[24,60071,60072],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[303,60074,60076],{"className":52428,"code":60075,"language":52430,"meta":308,"style":308},"\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",[119,60077,60078,60088,60102,60106,60114,60128,60148,60160,60168,60172,60180,60192,60200,60211,60229,60245,60259,60267,60271,60279,60287,60291],{"__ignoreMap":308},[312,60079,60080,60082,60084,60086],{"class":314,"line":315},[312,60081,53092],{"class":324},[312,60083,53095],{"class":328},[312,60085,53098],{"class":332},[312,60087,343],{"class":324},[312,60089,60090,60092,60094,60096,60098,60100],{"class":314,"line":171},[312,60091,325],{"class":324},[312,60093,52430],{"class":328},[312,60095,53109],{"class":332},[312,60097,336],{"class":324},[312,60099,53114],{"class":339},[312,60101,343],{"class":324},[312,60103,60104],{"class":314,"line":274},[312,60105,4205],{"emptyLinePlaceholder":1881},[312,60107,60108,60110,60112],{"class":314,"line":298},[312,60109,325],{"class":324},[312,60111,53127],{"class":328},[312,60113,343],{"class":324},[312,60115,60116,60118,60120,60122,60124,60126],{"class":314,"line":974},[312,60117,53930],{"class":324},[312,60119,53137],{"class":328},[312,60121,53140],{"class":332},[312,60123,336],{"class":324},[312,60125,53145],{"class":339},[312,60127,343],{"class":324},[312,60129,60130,60132,60134,60136,60138,60140,60142,60144,60146],{"class":314,"line":980},[312,60131,53930],{"class":324},[312,60133,53137],{"class":328},[312,60135,16721],{"class":332},[312,60137,336],{"class":324},[312,60139,53184],{"class":339},[312,60141,53164],{"class":332},[312,60143,336],{"class":324},[312,60145,53191],{"class":339},[312,60147,343],{"class":324},[312,60149,60150,60152,60154,60156,60158],{"class":314,"line":997},[312,60151,53930],{"class":324},[312,60153,628],{"class":328},[312,60155,53202],{"class":324},[312,60157,628],{"class":328},[312,60159,343],{"class":324},[312,60161,60162,60164,60166],{"class":314,"line":1003},[312,60163,353],{"class":324},[312,60165,53127],{"class":328},[312,60167,343],{"class":324},[312,60169,60170],{"class":314,"line":1020},[312,60171,4205],{"emptyLinePlaceholder":1881},[312,60173,60174,60176,60178],{"class":314,"line":1026},[312,60175,325],{"class":324},[312,60177,53586],{"class":328},[312,60179,343],{"class":324},[312,60181,60182,60184,60186,60188,60190],{"class":314,"line":3418},[312,60183,53930],{"class":324},[312,60185,55671],{"class":328},[312,60187,55677],{"class":324},[312,60189,55671],{"class":328},[312,60191,343],{"class":324},[312,60193,60194,60196,60198],{"class":314,"line":3423},[312,60195,53930],{"class":324},[312,60197,53599],{"class":328},[312,60199,343],{"class":324},[312,60201,60202,60204,60206,60208],{"class":314,"line":3429},[312,60203,13024],{"class":1436},[312,60205,4045],{"class":488},[312,60207,15366],{"class":1436},[312,60209,60210],{"class":488}," 10\n",[312,60212,60213,60215,60217,60219,60221,60223,60225,60227],{"class":314,"line":3434},[312,60214,13024],{"class":1436},[312,60216,56175],{"class":488},[312,60218,15366],{"class":1436},[312,60220,56180],{"class":324},[312,60222,56183],{"class":332},[312,60224,1576],{"class":324},[312,60226,59986],{"class":339},[312,60228,1959],{"class":324},[312,60230,60231,60233,60235,60237,60239,60241,60243],{"class":314,"line":3448},[312,60232,59993],{"class":324},[312,60234,59595],{"class":332},[312,60236,1576],{"class":324},[312,60238,59600],{"class":339},[312,60240,733],{"class":324},[312,60242,56233],{"class":1436},[312,60244,56236],{"class":324},[312,60246,60247,60249,60251,60253,60255,60257],{"class":314,"line":3453},[312,60248,60010],{"class":1436},[312,60250,4045],{"class":488},[312,60252,15366],{"class":1436},[312,60254,60017],{"class":324},[312,60256,59642],{"class":332},[312,60258,3781],{"class":324},[312,60260,60261,60263,60265],{"class":314,"line":3459},[312,60262,60026],{"class":324},[312,60264,60029],{"class":332},[312,60266,1966],{"class":324},[312,60268,60269],{"class":314,"line":3480},[312,60270,35256],{"class":324},[312,60272,60273,60275,60277],{"class":314,"line":3485},[312,60274,54203],{"class":324},[312,60276,53599],{"class":328},[312,60278,343],{"class":324},[312,60280,60281,60283,60285],{"class":314,"line":3499},[312,60282,353],{"class":324},[312,60284,53586],{"class":328},[312,60286,343],{"class":324},[312,60288,60289],{"class":314,"line":3504},[312,60290,4205],{"emptyLinePlaceholder":1881},[312,60292,60293,60295,60297],{"class":314,"line":3533},[312,60294,353],{"class":324},[312,60296,52430],{"class":328},[312,60298,343],{"class":324},[24,60300,60301],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[303,60303,60305],{"className":52428,"code":60304,"language":52430,"meta":308,"style":308},"\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",[119,60306,60307,60317,60331,60335,60343,60357,60377,60389,60397,60401,60409,60421,60429,60439,60457,60473,60486,60494,60498,60506,60514,60518],{"__ignoreMap":308},[312,60308,60309,60311,60313,60315],{"class":314,"line":315},[312,60310,53092],{"class":324},[312,60312,53095],{"class":328},[312,60314,53098],{"class":332},[312,60316,343],{"class":324},[312,60318,60319,60321,60323,60325,60327,60329],{"class":314,"line":171},[312,60320,325],{"class":324},[312,60322,52430],{"class":328},[312,60324,53109],{"class":332},[312,60326,336],{"class":324},[312,60328,53114],{"class":339},[312,60330,343],{"class":324},[312,60332,60333],{"class":314,"line":274},[312,60334,4205],{"emptyLinePlaceholder":1881},[312,60336,60337,60339,60341],{"class":314,"line":298},[312,60338,325],{"class":324},[312,60340,53127],{"class":328},[312,60342,343],{"class":324},[312,60344,60345,60347,60349,60351,60353,60355],{"class":314,"line":974},[312,60346,53930],{"class":324},[312,60348,53137],{"class":328},[312,60350,53140],{"class":332},[312,60352,336],{"class":324},[312,60354,53145],{"class":339},[312,60356,343],{"class":324},[312,60358,60359,60361,60363,60365,60367,60369,60371,60373,60375],{"class":314,"line":980},[312,60360,53930],{"class":324},[312,60362,53137],{"class":328},[312,60364,16721],{"class":332},[312,60366,336],{"class":324},[312,60368,53184],{"class":339},[312,60370,53164],{"class":332},[312,60372,336],{"class":324},[312,60374,53191],{"class":339},[312,60376,343],{"class":324},[312,60378,60379,60381,60383,60385,60387],{"class":314,"line":997},[312,60380,53930],{"class":324},[312,60382,628],{"class":328},[312,60384,53202],{"class":324},[312,60386,628],{"class":328},[312,60388,343],{"class":324},[312,60390,60391,60393,60395],{"class":314,"line":1003},[312,60392,353],{"class":324},[312,60394,53127],{"class":328},[312,60396,343],{"class":324},[312,60398,60399],{"class":314,"line":1020},[312,60400,4205],{"emptyLinePlaceholder":1881},[312,60402,60403,60405,60407],{"class":314,"line":1026},[312,60404,325],{"class":324},[312,60406,53586],{"class":328},[312,60408,343],{"class":324},[312,60410,60411,60413,60415,60417,60419],{"class":314,"line":3418},[312,60412,53930],{"class":324},[312,60414,55671],{"class":328},[312,60416,55677],{"class":324},[312,60418,55671],{"class":328},[312,60420,343],{"class":324},[312,60422,60423,60425,60427],{"class":314,"line":3423},[312,60424,53930],{"class":324},[312,60426,53599],{"class":328},[312,60428,343],{"class":324},[312,60430,60431,60433,60435,60437],{"class":314,"line":3429},[312,60432,13024],{"class":1436},[312,60434,4045],{"class":488},[312,60436,15366],{"class":1436},[312,60438,60210],{"class":488},[312,60440,60441,60443,60445,60447,60449,60451,60453,60455],{"class":314,"line":3434},[312,60442,13024],{"class":1436},[312,60444,56175],{"class":488},[312,60446,15366],{"class":1436},[312,60448,56180],{"class":324},[312,60450,56183],{"class":332},[312,60452,1576],{"class":324},[312,60454,59986],{"class":339},[312,60456,1959],{"class":324},[312,60458,60459,60461,60463,60465,60467,60469,60471],{"class":314,"line":3448},[312,60460,59993],{"class":324},[312,60462,59595],{"class":332},[312,60464,1576],{"class":324},[312,60466,59600],{"class":339},[312,60468,733],{"class":324},[312,60470,56233],{"class":1436},[312,60472,56236],{"class":324},[312,60474,60475,60478,60480,60482,60484],{"class":314,"line":3453},[312,60476,60477],{"class":324},"      num ",[312,60479,336],{"class":1436},[312,60481,60017],{"class":324},[312,60483,59642],{"class":332},[312,60485,3781],{"class":324},[312,60487,60488,60490,60492],{"class":314,"line":3459},[312,60489,60026],{"class":324},[312,60491,60029],{"class":332},[312,60493,1966],{"class":324},[312,60495,60496],{"class":314,"line":3480},[312,60497,35256],{"class":324},[312,60499,60500,60502,60504],{"class":314,"line":3485},[312,60501,54203],{"class":324},[312,60503,53599],{"class":328},[312,60505,343],{"class":324},[312,60507,60508,60510,60512],{"class":314,"line":3499},[312,60509,353],{"class":324},[312,60511,53586],{"class":328},[312,60513,343],{"class":324},[312,60515,60516],{"class":314,"line":3504},[312,60517,4205],{"emptyLinePlaceholder":1881},[312,60519,60520,60522,60524],{"class":314,"line":3533},[312,60521,353],{"class":324},[312,60523,52430],{"class":328},[312,60525,343],{"class":324},[24,60527,60528],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[69,60530,60532],{"id":60531},"_324-事件监听版本","3.2.4 事件监听版本",[24,60534,60535],{},[19,60536],{"alt":308,"src":60537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[24,60539,60540],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[24,60542,60543],{},"这种方式会覆盖前边的事件监听:",[303,60545,60547],{"className":52428,"code":60546,"language":52430,"meta":308,"style":308},"\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",[119,60548,60549,60559,60573,60577,60585,60599,60619,60631,60639,60643,60651,60663,60671,60689,60703,60714,60718,60730,60740,60744,60752,60760,60764],{"__ignoreMap":308},[312,60550,60551,60553,60555,60557],{"class":314,"line":315},[312,60552,53092],{"class":324},[312,60554,53095],{"class":328},[312,60556,53098],{"class":332},[312,60558,343],{"class":324},[312,60560,60561,60563,60565,60567,60569,60571],{"class":314,"line":171},[312,60562,325],{"class":324},[312,60564,52430],{"class":328},[312,60566,53109],{"class":332},[312,60568,336],{"class":324},[312,60570,53114],{"class":339},[312,60572,343],{"class":324},[312,60574,60575],{"class":314,"line":274},[312,60576,4205],{"emptyLinePlaceholder":1881},[312,60578,60579,60581,60583],{"class":314,"line":298},[312,60580,325],{"class":324},[312,60582,53127],{"class":328},[312,60584,343],{"class":324},[312,60586,60587,60589,60591,60593,60595,60597],{"class":314,"line":974},[312,60588,53930],{"class":324},[312,60590,53137],{"class":328},[312,60592,53140],{"class":332},[312,60594,336],{"class":324},[312,60596,53145],{"class":339},[312,60598,343],{"class":324},[312,60600,60601,60603,60605,60607,60609,60611,60613,60615,60617],{"class":314,"line":980},[312,60602,53930],{"class":324},[312,60604,53137],{"class":328},[312,60606,16721],{"class":332},[312,60608,336],{"class":324},[312,60610,53184],{"class":339},[312,60612,53164],{"class":332},[312,60614,336],{"class":324},[312,60616,53191],{"class":339},[312,60618,343],{"class":324},[312,60620,60621,60623,60625,60627,60629],{"class":314,"line":997},[312,60622,53930],{"class":324},[312,60624,628],{"class":328},[312,60626,53202],{"class":324},[312,60628,628],{"class":328},[312,60630,343],{"class":324},[312,60632,60633,60635,60637],{"class":314,"line":1003},[312,60634,353],{"class":324},[312,60636,53127],{"class":328},[312,60638,343],{"class":324},[312,60640,60641],{"class":314,"line":1020},[312,60642,4205],{"emptyLinePlaceholder":1881},[312,60644,60645,60647,60649],{"class":314,"line":1026},[312,60646,325],{"class":324},[312,60648,53586],{"class":328},[312,60650,343],{"class":324},[312,60652,60653,60655,60657,60659,60661],{"class":314,"line":3418},[312,60654,53930],{"class":324},[312,60656,55671],{"class":328},[312,60658,55677],{"class":324},[312,60660,55671],{"class":328},[312,60662,343],{"class":324},[312,60664,60665,60667,60669],{"class":314,"line":3423},[312,60666,53930],{"class":324},[312,60668,53599],{"class":328},[312,60670,343],{"class":324},[312,60672,60673,60675,60677,60679,60681,60683,60685,60687],{"class":314,"line":3429},[312,60674,13024],{"class":1436},[312,60676,56175],{"class":488},[312,60678,15366],{"class":1436},[312,60680,56180],{"class":324},[312,60682,56183],{"class":332},[312,60684,1576],{"class":324},[312,60686,59986],{"class":339},[312,60688,1959],{"class":324},[312,60690,60691,60693,60696,60698,60701],{"class":314,"line":3434},[312,60692,59993],{"class":324},[312,60694,60695],{"class":332},"onclick",[312,60697,15366],{"class":1436},[312,60699,60700],{"class":1436}," function",[312,60702,56236],{"class":324},[312,60704,60705,60708,60710,60712],{"class":314,"line":3448},[312,60706,60707],{"class":332},"      alert",[312,60709,1576],{"class":324},[312,60711,2417],{"class":488},[312,60713,1959],{"class":324},[312,60715,60716],{"class":314,"line":3453},[312,60717,3992],{"class":324},[312,60719,60720,60722,60724,60726,60728],{"class":314,"line":3459},[312,60721,59993],{"class":324},[312,60723,60695],{"class":332},[312,60725,15366],{"class":1436},[312,60727,60700],{"class":1436},[312,60729,56236],{"class":324},[312,60731,60732,60734,60736,60738],{"class":314,"line":3480},[312,60733,60707],{"class":332},[312,60735,1576],{"class":324},[312,60737,2694],{"class":488},[312,60739,1959],{"class":324},[312,60741,60742],{"class":314,"line":3485},[312,60743,3992],{"class":324},[312,60745,60746,60748,60750],{"class":314,"line":3499},[312,60747,54203],{"class":324},[312,60749,53599],{"class":328},[312,60751,343],{"class":324},[312,60753,60754,60756,60758],{"class":314,"line":3504},[312,60755,353],{"class":324},[312,60757,53586],{"class":328},[312,60759,343],{"class":324},[312,60761,60762],{"class":314,"line":3533},[312,60763,4205],{"emptyLinePlaceholder":1881},[312,60765,60766,60768,60770],{"class":314,"line":3538},[312,60767,353],{"class":324},[312,60769,52430],{"class":328},[312,60771,343],{"class":324},[24,60773,60774],{},"只要点击就输出结果为22,前边11被覆盖了",[303,60776,60778],{"className":52428,"code":60777,"language":52430,"meta":308,"style":308},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[119,60779,60780,60785,60790,60794,60799,60804],{"__ignoreMap":308},[312,60781,60782],{"class":314,"line":315},[312,60783,60784],{"class":324},"  btn.addEventListener('click', function () {\n",[312,60786,60787],{"class":314,"line":171},[312,60788,60789],{"class":324},"      alert(11)\n",[312,60791,60792],{"class":314,"line":274},[312,60793,35256],{"class":324},[312,60795,60796],{"class":314,"line":298},[312,60797,60798],{"class":324},"    btn.addEventListener('click', function () {\n",[312,60800,60801],{"class":314,"line":974},[312,60802,60803],{"class":324},"      alert(22)\n",[312,60805,60806],{"class":314,"line":980},[312,60807,35256],{"class":324},[24,60809,60810],{},"点击第一次输出11,第二次点击为22",[69,60812,60814],{"id":60813},"_325-事件类型","3.2.5 事件类型",[24,60816,60817],{},[19,60818],{"alt":308,"src":60819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[23796,60821,60823],{"id":60822},"_3251-鼠标事件","3.2.5.1 鼠标事件",[24,60825,60826],{},"补充知识:",[24,60828,60829],{},"轮播图自动播放模块,可以使用",[24,60831,60832],{},"let timerId = setInterval(function () {",[24,60834,60835],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[24,60837,60838],{},"用js方法模拟进行点击事件,click必须加()",[24,60840,60841],{},"next.click()",[24,60843,60844],{},"}, 1000)",[24,60846,60847],{},[19,60848],{"alt":308,"src":60849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[303,60851,60853],{"className":54853,"code":60852,"language":54855,"meta":308,"style":308},"\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",[119,60854,60855,60859,60869,60883,60887,60895,60910,60930,60950,60963,60971,60976,60981,60985,60989,60994,60999,61004,61009,61013,61017,61022,61027,61032,61036,61040,61045,61049,61054,61059,61063,61067,61072,61077,61082,61087,61092,61096,61100,61105,61110,61115,61120,61125,61129,61133,61138,61143,61148,61153,61158,61163,61168,61173,61178,61183,61187,61191,61196,61201,61205,61209,61214,61219,61223,61228,61233,61237,61241,61246,61250,61255,61260,61264,61269,61273,61277,61282,61287,61292,61297,61302,61307,61312,61316,61320,61324,61329,61334,61339,61344,61348,61356,61364,61368,61376,61391,61405,61426,61434,61448,61461,61476,61495,61507,61519,61531,61543,61555,61567,61579,61587,61602,61626,61650,61658,61666,61674,61682,61687,61692,61697,61702,61707,61712,61717,61722,61727,61732,61736,61741,61746,61751,61756,61761,61766,61771,61776,61781,61785,61790,61795,61800,61805,61810,61815,61820,61825,61830,61835,61840,61845,61849,61853,61858,61863,61868,61872,61877,61882,61887,61892,61897,61901,61906,61910,61914,61918,61922,61926,61930,61935,61940,61945,61950,61955,61960,61965,61970,61975,61979,61983,61988,61993,61998,62003,62008,62012,62017,62022,62027,62032,62037,62042,62046,62050,62055,62059,62064,62068,62073,62078,62083,62088,62093,62098,62102,62110,62118,62122],{"__ignoreMap":308},[312,60856,60857],{"class":314,"line":315},[312,60858,4205],{"emptyLinePlaceholder":1881},[312,60860,60861,60863,60865,60867],{"class":314,"line":171},[312,60862,53092],{"class":324},[312,60864,53095],{"class":1436},[312,60866,53098],{"class":488},[312,60868,343],{"class":324},[312,60870,60871,60873,60875,60877,60879,60881],{"class":314,"line":274},[312,60872,325],{"class":324},[312,60874,52430],{"class":328},[312,60876,53109],{"class":332},[312,60878,336],{"class":324},[312,60880,53114],{"class":339},[312,60882,343],{"class":324},[312,60884,60885],{"class":314,"line":298},[312,60886,4205],{"emptyLinePlaceholder":1881},[312,60888,60889,60891,60893],{"class":314,"line":974},[312,60890,325],{"class":324},[312,60892,53127],{"class":328},[312,60894,343],{"class":324},[312,60896,60897,60899,60901,60903,60905,60907],{"class":314,"line":980},[312,60898,53930],{"class":324},[312,60900,53137],{"class":328},[312,60902,53140],{"class":332},[312,60904,336],{"class":324},[312,60906,53145],{"class":339},[312,60908,60909],{"class":324}," \u002F>\n",[312,60911,60912,60914,60916,60918,60920,60922,60924,60926,60928],{"class":314,"line":997},[312,60913,53930],{"class":324},[312,60915,53137],{"class":328},[312,60917,53156],{"class":332},[312,60919,336],{"class":324},[312,60921,53161],{"class":339},[312,60923,53164],{"class":332},[312,60925,336],{"class":324},[312,60927,53169],{"class":339},[312,60929,60909],{"class":324},[312,60931,60932,60934,60936,60938,60940,60942,60944,60946,60948],{"class":314,"line":1003},[312,60933,53930],{"class":324},[312,60935,53137],{"class":328},[312,60937,16721],{"class":332},[312,60939,336],{"class":324},[312,60941,53184],{"class":339},[312,60943,53164],{"class":332},[312,60945,336],{"class":324},[312,60947,53191],{"class":339},[312,60949,60909],{"class":324},[312,60951,60952,60954,60956,60959,60961],{"class":314,"line":1020},[312,60953,53930],{"class":324},[312,60955,628],{"class":328},[312,60957,60958],{"class":324},">轮播图点击切换\u003C\u002F",[312,60960,628],{"class":328},[312,60962,343],{"class":324},[312,60964,60965,60967,60969],{"class":314,"line":1026},[312,60966,53930],{"class":324},[312,60968,1856],{"class":328},[312,60970,343],{"class":324},[312,60972,60973],{"class":314,"line":3418},[312,60974,60975],{"class":324},"    * {\n",[312,60977,60978],{"class":314,"line":3423},[312,60979,60980],{"class":324},"      box-sizing: border-box;\n",[312,60982,60983],{"class":314,"line":3429},[312,60984,3992],{"class":324},[312,60986,60987],{"class":314,"line":3434},[312,60988,4205],{"emptyLinePlaceholder":1881},[312,60990,60991],{"class":314,"line":3448},[312,60992,60993],{"class":324},"    .slider {\n",[312,60995,60996],{"class":314,"line":3453},[312,60997,60998],{"class":324},"      width: 560px;\n",[312,61000,61001],{"class":314,"line":3459},[312,61002,61003],{"class":324},"      height: 400px;\n",[312,61005,61006],{"class":314,"line":3480},[312,61007,61008],{"class":324},"      overflow: hidden;\n",[312,61010,61011],{"class":314,"line":3485},[312,61012,3992],{"class":324},[312,61014,61015],{"class":314,"line":3499},[312,61016,4205],{"emptyLinePlaceholder":1881},[312,61018,61019],{"class":314,"line":3504},[312,61020,61021],{"class":324},"    .slider-wrapper {\n",[312,61023,61024],{"class":314,"line":3533},[312,61025,61026],{"class":324},"      width: 100%;\n",[312,61028,61029],{"class":314,"line":3538},[312,61030,61031],{"class":324},"      height: 320px;\n",[312,61033,61034],{"class":314,"line":3555},[312,61035,3992],{"class":324},[312,61037,61038],{"class":314,"line":3560},[312,61039,4205],{"emptyLinePlaceholder":1881},[312,61041,61042],{"class":314,"line":3565},[312,61043,61044],{"class":324},"    .slider-wrapper img {\n",[312,61046,61047],{"class":314,"line":3570},[312,61048,61026],{"class":324},[312,61050,61051],{"class":314,"line":3584},[312,61052,61053],{"class":324},"      height: 100%;\n",[312,61055,61056],{"class":314,"line":3589},[312,61057,61058],{"class":324},"      display: block;\n",[312,61060,61061],{"class":314,"line":4382},[312,61062,3992],{"class":324},[312,61064,61065],{"class":314,"line":4396},[312,61066,4205],{"emptyLinePlaceholder":1881},[312,61068,61069],{"class":314,"line":4404},[312,61070,61071],{"class":324},"    .slider-footer {\n",[312,61073,61074],{"class":314,"line":4409},[312,61075,61076],{"class":324},"      height: 80px;\n",[312,61078,61079],{"class":314,"line":4415},[312,61080,61081],{"class":324},"      background-color: rgb(100, 67, 68);\n",[312,61083,61084],{"class":314,"line":4421},[312,61085,61086],{"class":324},"      padding: 12px 12px 0 12px;\n",[312,61088,61089],{"class":314,"line":4426},[312,61090,61091],{"class":324},"      position: relative;\n",[312,61093,61094],{"class":314,"line":9751},[312,61095,3992],{"class":324},[312,61097,61098],{"class":314,"line":9775},[312,61099,4205],{"emptyLinePlaceholder":1881},[312,61101,61102],{"class":314,"line":9780},[312,61103,61104],{"class":324},"    .slider-footer .toggle {\n",[312,61106,61107],{"class":314,"line":9786},[312,61108,61109],{"class":324},"      position: absolute;\n",[312,61111,61112],{"class":314,"line":9813},[312,61113,61114],{"class":324},"      right: 0;\n",[312,61116,61117],{"class":314,"line":9818},[312,61118,61119],{"class":324},"      top: 12px;\n",[312,61121,61122],{"class":314,"line":9824},[312,61123,61124],{"class":324},"      display: flex;\n",[312,61126,61127],{"class":314,"line":9836},[312,61128,3992],{"class":324},[312,61130,61131],{"class":314,"line":9848},[312,61132,4205],{"emptyLinePlaceholder":1881},[312,61134,61135],{"class":314,"line":9860},[312,61136,61137],{"class":324},"    .slider-footer .toggle button {\n",[312,61139,61140],{"class":314,"line":11519},[312,61141,61142],{"class":324},"      margin-right: 12px;\n",[312,61144,61145],{"class":314,"line":11544},[312,61146,61147],{"class":324},"      width: 28px;\n",[312,61149,61150],{"class":314,"line":11567},[312,61151,61152],{"class":324},"      height: 28px;\n",[312,61154,61155],{"class":314,"line":11591},[312,61156,61157],{"class":324},"      appearance: none;\n",[312,61159,61160],{"class":314,"line":11596},[312,61161,61162],{"class":324},"      border: none;\n",[312,61164,61165],{"class":314,"line":11601},[312,61166,61167],{"class":324},"      background: rgba(255, 255, 255, 0.1);\n",[312,61169,61170],{"class":314,"line":11606},[312,61171,61172],{"class":324},"      color: #fff;\n",[312,61174,61175],{"class":314,"line":11615},[312,61176,61177],{"class":324},"      border-radius: 4px;\n",[312,61179,61180],{"class":314,"line":11620},[312,61181,61182],{"class":324},"      cursor: pointer;\n",[312,61184,61185],{"class":314,"line":11626},[312,61186,3992],{"class":324},[312,61188,61189],{"class":314,"line":11647},[312,61190,4205],{"emptyLinePlaceholder":1881},[312,61192,61193],{"class":314,"line":11653},[312,61194,61195],{"class":324},"    .slider-footer .toggle button:hover {\n",[312,61197,61198],{"class":314,"line":11667},[312,61199,61200],{"class":324},"      background: rgba(255, 255, 255, 0.2);\n",[312,61202,61203],{"class":314,"line":11673},[312,61204,3992],{"class":324},[312,61206,61207],{"class":314,"line":11700},[312,61208,4205],{"emptyLinePlaceholder":1881},[312,61210,61211],{"class":314,"line":11709},[312,61212,61213],{"class":324},"    .slider-footer p {\n",[312,61215,61216],{"class":314,"line":11715},[312,61217,61218],{"class":324},"      margin: 0;\n",[312,61220,61221],{"class":314,"line":11723},[312,61222,61172],{"class":324},[312,61224,61225],{"class":314,"line":11728},[312,61226,61227],{"class":324},"      font-size: 18px;\n",[312,61229,61230],{"class":314,"line":18404},[312,61231,61232],{"class":324},"      margin-bottom: 10px;\n",[312,61234,61235],{"class":314,"line":18410},[312,61236,3992],{"class":324},[312,61238,61239],{"class":314,"line":18433},[312,61240,4205],{"emptyLinePlaceholder":1881},[312,61242,61243],{"class":314,"line":18439},[312,61244,61245],{"class":324},"    .slider-indicator {\n",[312,61247,61248],{"class":314,"line":18462},[312,61249,61218],{"class":324},[312,61251,61252],{"class":314,"line":18476},[312,61253,61254],{"class":324},"      padding: 0;\n",[312,61256,61257],{"class":314,"line":18496},[312,61258,61259],{"class":324},"      list-style: none;\n",[312,61261,61262],{"class":314,"line":18502},[312,61263,61124],{"class":324},[312,61265,61266],{"class":314,"line":18513},[312,61267,61268],{"class":324},"      align-items: center;\n",[312,61270,61271],{"class":314,"line":18536},[312,61272,3992],{"class":324},[312,61274,61275],{"class":314,"line":18558},[312,61276,4205],{"emptyLinePlaceholder":1881},[312,61278,61279],{"class":314,"line":18563},[312,61280,61281],{"class":324},"    .slider-indicator li {\n",[312,61283,61284],{"class":314,"line":18569},[312,61285,61286],{"class":324},"      width: 8px;\n",[312,61288,61289],{"class":314,"line":18583},[312,61290,61291],{"class":324},"      height: 8px;\n",[312,61293,61294],{"class":314,"line":18596},[312,61295,61296],{"class":324},"      margin: 4px;\n",[312,61298,61299],{"class":314,"line":18601},[312,61300,61301],{"class":324},"      border-radius: 50%;\n",[312,61303,61304],{"class":314,"line":18615},[312,61305,61306],{"class":324},"      background: #fff;\n",[312,61308,61309],{"class":314,"line":18620},[312,61310,61311],{"class":324},"      opacity: 0.4;\n",[312,61313,61314],{"class":314,"line":18626},[312,61315,61182],{"class":324},[312,61317,61318],{"class":314,"line":18631},[312,61319,3992],{"class":324},[312,61321,61322],{"class":314,"line":18645},[312,61323,4205],{"emptyLinePlaceholder":1881},[312,61325,61326],{"class":314,"line":18650},[312,61327,61328],{"class":324},"    .slider-indicator li.active {\n",[312,61330,61331],{"class":314,"line":18655},[312,61332,61333],{"class":324},"      width: 12px;\n",[312,61335,61336],{"class":314,"line":18669},[312,61337,61338],{"class":324},"      height: 12px;\n",[312,61340,61341],{"class":314,"line":18681},[312,61342,61343],{"class":324},"      opacity: 1;\n",[312,61345,61346],{"class":314,"line":18686},[312,61347,3992],{"class":324},[312,61349,61350,61352,61354],{"class":314,"line":18699},[312,61351,54203],{"class":324},[312,61353,1856],{"class":328},[312,61355,343],{"class":324},[312,61357,61358,61360,61362],{"class":314,"line":18704},[312,61359,353],{"class":324},[312,61361,53127],{"class":328},[312,61363,343],{"class":324},[312,61365,61366],{"class":314,"line":18709},[312,61367,4205],{"emptyLinePlaceholder":1881},[312,61369,61370,61372,61374],{"class":314,"line":18714},[312,61371,325],{"class":324},[312,61373,53586],{"class":328},[312,61375,343],{"class":324},[312,61377,61378,61380,61382,61384,61386,61389],{"class":314,"line":18727},[312,61379,53930],{"class":324},[312,61381,329],{"class":328},[312,61383,333],{"class":332},[312,61385,336],{"class":324},[312,61387,61388],{"class":339},"\"slider\"",[312,61390,343],{"class":324},[312,61392,61393,61395,61397,61399,61401,61403],{"class":314,"line":18732},[312,61394,53134],{"class":324},[312,61396,329],{"class":328},[312,61398,333],{"class":332},[312,61400,336],{"class":324},[312,61402,57009],{"class":339},[312,61404,343],{"class":324},[312,61406,61407,61409,61411,61413,61415,61418,61420,61422,61424],{"class":314,"line":34428},[312,61408,57016],{"class":324},[312,61410,19],{"class":328},[312,61412,57021],{"class":332},[312,61414,336],{"class":324},[312,61416,61417],{"class":339},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[312,61419,57029],{"class":332},[312,61421,336],{"class":324},[312,61423,495],{"class":339},[312,61425,60909],{"class":324},[312,61427,61428,61430,61432],{"class":314,"line":34434},[312,61429,53563],{"class":324},[312,61431,329],{"class":328},[312,61433,343],{"class":324},[312,61435,61436,61438,61440,61442,61444,61446],{"class":314,"line":34440},[312,61437,53134],{"class":324},[312,61439,329],{"class":328},[312,61441,333],{"class":332},[312,61443,336],{"class":324},[312,61445,57056],{"class":339},[312,61447,343],{"class":324},[312,61449,61450,61452,61454,61457,61459],{"class":314,"line":34446},[312,61451,57016],{"class":324},[312,61453,24],{"class":328},[312,61455,61456],{"class":324},">对人类来说会不会太超前了？\u003C\u002F",[312,61458,24],{"class":328},[312,61460,343],{"class":324},[312,61462,61463,61465,61467,61469,61471,61474],{"class":314,"line":34452},[312,61464,57016],{"class":324},[312,61466,243],{"class":328},[312,61468,333],{"class":332},[312,61470,336],{"class":324},[312,61472,61473],{"class":339},"\"slider-indicator\"",[312,61475,343],{"class":324},[312,61477,61478,61480,61482,61484,61486,61489,61491,61493],{"class":314,"line":34463},[312,61479,57084],{"class":324},[312,61481,143],{"class":328},[312,61483,333],{"class":332},[312,61485,336],{"class":324},[312,61487,61488],{"class":339},"\"active\"",[312,61490,57096],{"class":324},[312,61492,143],{"class":328},[312,61494,343],{"class":324},[312,61496,61497,61499,61501,61503,61505],{"class":314,"line":34469},[312,61498,57084],{"class":324},[312,61500,143],{"class":328},[312,61502,57096],{"class":324},[312,61504,143],{"class":328},[312,61506,343],{"class":324},[312,61508,61509,61511,61513,61515,61517],{"class":314,"line":34489},[312,61510,57084],{"class":324},[312,61512,143],{"class":328},[312,61514,57096],{"class":324},[312,61516,143],{"class":328},[312,61518,343],{"class":324},[312,61520,61521,61523,61525,61527,61529],{"class":314,"line":34495},[312,61522,57084],{"class":324},[312,61524,143],{"class":328},[312,61526,57096],{"class":324},[312,61528,143],{"class":328},[312,61530,343],{"class":324},[312,61532,61533,61535,61537,61539,61541],{"class":314,"line":34506},[312,61534,57084],{"class":324},[312,61536,143],{"class":328},[312,61538,57096],{"class":324},[312,61540,143],{"class":328},[312,61542,343],{"class":324},[312,61544,61545,61547,61549,61551,61553],{"class":314,"line":34512},[312,61546,57084],{"class":324},[312,61548,143],{"class":328},[312,61550,57096],{"class":324},[312,61552,143],{"class":328},[312,61554,343],{"class":324},[312,61556,61557,61559,61561,61563,61565],{"class":314,"line":34518},[312,61558,57084],{"class":324},[312,61560,143],{"class":328},[312,61562,57096],{"class":324},[312,61564,143],{"class":328},[312,61566,343],{"class":324},[312,61568,61569,61571,61573,61575,61577],{"class":314,"line":34524},[312,61570,57084],{"class":324},[312,61572,143],{"class":328},[312,61574,57096],{"class":324},[312,61576,143],{"class":328},[312,61578,343],{"class":324},[312,61580,61581,61583,61585],{"class":314,"line":34530},[312,61582,57189],{"class":324},[312,61584,243],{"class":328},[312,61586,343],{"class":324},[312,61588,61589,61591,61593,61595,61597,61600],{"class":314,"line":34536},[312,61590,57016],{"class":324},[312,61592,329],{"class":328},[312,61594,333],{"class":332},[312,61596,336],{"class":324},[312,61598,61599],{"class":339},"\"toggle\"",[312,61601,343],{"class":324},[312,61603,61604,61606,61608,61610,61612,61615,61617,61620,61622,61624],{"class":314,"line":34542},[312,61605,57084],{"class":324},[312,61607,55671],{"class":328},[312,61609,333],{"class":332},[312,61611,336],{"class":324},[312,61613,61614],{"class":339},"\"prev\"",[312,61616,2902],{"class":324},[312,61618,61619],{"class":488},"&lt;",[312,61621,353],{"class":324},[312,61623,55671],{"class":328},[312,61625,343],{"class":324},[312,61627,61628,61630,61632,61634,61636,61639,61641,61644,61646,61648],{"class":314,"line":34548},[312,61629,57084],{"class":324},[312,61631,55671],{"class":328},[312,61633,333],{"class":332},[312,61635,336],{"class":324},[312,61637,61638],{"class":339},"\"next\"",[312,61640,2902],{"class":324},[312,61642,61643],{"class":488},"&gt;",[312,61645,353],{"class":324},[312,61647,55671],{"class":328},[312,61649,343],{"class":324},[312,61651,61652,61654,61656],{"class":314,"line":34568},[312,61653,57189],{"class":324},[312,61655,329],{"class":328},[312,61657,343],{"class":324},[312,61659,61660,61662,61664],{"class":314,"line":34574},[312,61661,53563],{"class":324},[312,61663,329],{"class":328},[312,61665,343],{"class":324},[312,61667,61668,61670,61672],{"class":314,"line":34590},[312,61669,54203],{"class":324},[312,61671,329],{"class":328},[312,61673,343],{"class":324},[312,61675,61676,61678,61680],{"class":314,"line":34596},[312,61677,53930],{"class":324},[312,61679,53599],{"class":328},[312,61681,343],{"class":324},[312,61683,61684],{"class":314,"line":34610},[312,61685,61686],{"class":324},"    \u002F\u002F 1. 初始数据\n",[312,61688,61689],{"class":314,"line":34616},[312,61690,61691],{"class":324},"    const data = [\n",[312,61693,61694],{"class":314,"line":34631},[312,61695,61696],{"class":324},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[312,61698,61699],{"class":314,"line":34637},[312,61700,61701],{"class":324},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[312,61703,61704],{"class":314,"line":34646},[312,61705,61706],{"class":324},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[312,61708,61709],{"class":314,"line":34652},[312,61710,61711],{"class":324},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[312,61713,61714],{"class":314,"line":34661},[312,61715,61716],{"class":324},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[312,61718,61719],{"class":314,"line":34667},[312,61720,61721],{"class":324},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[312,61723,61724],{"class":314,"line":34673},[312,61725,61726],{"class":324},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[312,61728,61729],{"class":314,"line":34682},[312,61730,61731],{"class":324},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[312,61733,61734],{"class":314,"line":34688},[312,61735,54895],{"class":324},[312,61737,61738],{"class":314,"line":34699},[312,61739,61740],{"class":324},"    \u002F\u002F 获取元素\n",[312,61742,61743],{"class":314,"line":34705},[312,61744,61745],{"class":324},"    const img = document.querySelector('.slider-wrapper img')\n",[312,61747,61748],{"class":314,"line":34724},[312,61749,61750],{"class":324},"    const p = document.querySelector('.slider-footer p')\n",[312,61752,61753],{"class":314,"line":34730},[312,61754,61755],{"class":324},"    const footer = document.querySelector('.slider-footer')\n",[312,61757,61758],{"class":314,"line":34741},[312,61759,61760],{"class":324},"    \u002F\u002F 1. 右按钮业务\n",[312,61762,61763],{"class":314,"line":34747},[312,61764,61765],{"class":324},"    \u002F\u002F 1.1 获取右侧按钮 \n",[312,61767,61768],{"class":314,"line":34767},[312,61769,61770],{"class":324},"    const next = document.querySelector('.next')\n",[312,61772,61773],{"class":314,"line":34783},[312,61774,61775],{"class":324},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[312,61777,61778],{"class":314,"line":34789},[312,61779,61780],{"class":324},"    \u002F\u002F 1.2 注册点击事件\n",[312,61782,61783],{"class":314,"line":34803},[312,61784,4205],{"emptyLinePlaceholder":1881},[312,61786,61787],{"class":314,"line":34809},[312,61788,61789],{"class":324},"    next.addEventListener('click', function () {\n",[312,61791,61792],{"class":314,"line":34815},[312,61793,61794],{"class":324},"      \u002F\u002F console.log(11)\n",[312,61796,61797],{"class":314,"line":34826},[312,61798,61799],{"class":324},"      i++\n",[312,61801,61802],{"class":314,"line":34832},[312,61803,61804],{"class":324},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[312,61806,61807],{"class":314,"line":34838},[312,61808,61809],{"class":324},"      \u002F\u002F if (i >= 8) {\n",[312,61811,61812],{"class":314,"line":34848},[312,61813,61814],{"class":324},"      \u002F\u002F   i = 0\n",[312,61816,61817],{"class":314,"line":34854},[312,61818,61819],{"class":324},"      \u002F\u002F }\n",[312,61821,61822],{"class":314,"line":34865},[312,61823,61824],{"class":324},"      i = i >= data.length ? 0 : i\n",[312,61826,61827],{"class":314,"line":34871},[312,61828,61829],{"class":324},"      \u002F\u002F 1.3 得到对应的对象\n",[312,61831,61832],{"class":314,"line":34881},[312,61833,61834],{"class":324},"      \u002F\u002F console.log(data[i])\n",[312,61836,61837],{"class":314,"line":34886},[312,61838,61839],{"class":324},"      \u002F\u002F 调用函数\n",[312,61841,61842],{"class":314,"line":34892},[312,61843,61844],{"class":324},"      toggle()\n",[312,61846,61847],{"class":314,"line":34941},[312,61848,35256],{"class":324},[312,61850,61851],{"class":314,"line":34988},[312,61852,4205],{"emptyLinePlaceholder":1881},[312,61854,61855],{"class":314,"line":34993},[312,61856,61857],{"class":324},"    \u002F\u002F 2. 左侧按钮业务\n",[312,61859,61860],{"class":314,"line":34999},[312,61861,61862],{"class":324},"    \u002F\u002F 2.1 获取左侧按钮 \n",[312,61864,61865],{"class":314,"line":35018},[312,61866,61867],{"class":324},"    const prev = document.querySelector('.prev')\n",[312,61869,61870],{"class":314,"line":35024},[312,61871,61780],{"class":324},[312,61873,61874],{"class":314,"line":35044},[312,61875,61876],{"class":324},"    prev.addEventListener('click', function () {\n",[312,61878,61879],{"class":314,"line":35050},[312,61880,61881],{"class":324},"      i--\n",[312,61883,61884],{"class":314,"line":35056},[312,61885,61886],{"class":324},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[312,61888,61889],{"class":314,"line":35066},[312,61890,61891],{"class":324},"      \u002F\u002F if (i \u003C 0) {\n",[312,61893,61894],{"class":314,"line":35071},[312,61895,61896],{"class":324},"      \u002F\u002F   i = 7\n",[312,61898,61899],{"class":314,"line":35077},[312,61900,61819],{"class":324},[312,61902,61903],{"class":314,"line":35093},[312,61904,61905],{"class":324},"      i = i \u003C 0 ? data.length - 1 : i\n",[312,61907,61908],{"class":314,"line":35138},[312,61909,61829],{"class":324},[312,61911,61912],{"class":314,"line":35144},[312,61913,61834],{"class":324},[312,61915,61916],{"class":314,"line":35150},[312,61917,61839],{"class":324},[312,61919,61920],{"class":314,"line":35156},[312,61921,61844],{"class":324},[312,61923,61924],{"class":314,"line":35167},[312,61925,35256],{"class":324},[312,61927,61928],{"class":314,"line":35173},[312,61929,4205],{"emptyLinePlaceholder":1881},[312,61931,61932],{"class":314,"line":35179},[312,61933,61934],{"class":324},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[312,61936,61937],{"class":314,"line":35185},[312,61938,61939],{"class":324},"    function toggle() {\n",[312,61941,61942],{"class":314,"line":35203},[312,61943,61944],{"class":324},"      \u002F\u002F 1.4 渲染对应的数据\n",[312,61946,61947],{"class":314,"line":35217},[312,61948,61949],{"class":324},"      img.src = data[i].url\n",[312,61951,61952],{"class":314,"line":35226},[312,61953,61954],{"class":324},"      p.innerHTML = data[i].title\n",[312,61956,61957],{"class":314,"line":35235},[312,61958,61959],{"class":324},"      footer.style.backgroundColor = data[i].color\n",[312,61961,61962],{"class":314,"line":35244},[312,61963,61964],{"class":324},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[312,61966,61967],{"class":314,"line":35253},[312,61968,61969],{"class":324},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[312,61971,61972],{"class":314,"line":35259},[312,61973,61974],{"class":324},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[312,61976,61977],{"class":314,"line":35265},[312,61978,3992],{"class":324},[312,61980,61981],{"class":314,"line":35273},[312,61982,4205],{"emptyLinePlaceholder":1881},[312,61984,61985],{"class":314,"line":35278},[312,61986,61987],{"class":324},"    \u002F\u002F 3. 自动播放模块\n",[312,61989,61990],{"class":314,"line":35284},[312,61991,61992],{"class":324},"    let timerId = setInterval(function () {\n",[312,61994,61995],{"class":314,"line":35295},[312,61996,61997],{"class":324},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[312,61999,62000],{"class":314,"line":35301},[312,62001,62002],{"class":324},"      next.click()\n",[312,62004,62005],{"class":314,"line":35321},[312,62006,62007],{"class":324},"    }, 1000)\n",[312,62009,62010],{"class":314,"line":35327},[312,62011,4205],{"emptyLinePlaceholder":1881},[312,62013,62014],{"class":314,"line":35333},[312,62015,62016],{"class":324},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[312,62018,62019],{"class":314,"line":35339},[312,62020,62021],{"class":324},"    const slider = document.querySelector('.slider')\n",[312,62023,62024],{"class":314,"line":35356},[312,62025,62026],{"class":324},"    \u002F\u002F 注册事件\n",[312,62028,62029],{"class":314,"line":35362},[312,62030,62031],{"class":324},"    slider.addEventListener('mouseenter', function () {\n",[312,62033,62034],{"class":314,"line":35368},[312,62035,62036],{"class":324},"      \u002F\u002F 停止定时器\n",[312,62038,62039],{"class":314,"line":35374},[312,62040,62041],{"class":324},"      clearInterval(timerId)\n",[312,62043,62044],{"class":314,"line":35380},[312,62045,35256],{"class":324},[312,62047,62048],{"class":314,"line":35386},[312,62049,4205],{"emptyLinePlaceholder":1881},[312,62051,62052],{"class":314,"line":35413},[312,62053,62054],{"class":324},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[312,62056,62057],{"class":314,"line":35437},[312,62058,62026],{"class":324},[312,62060,62061],{"class":314,"line":35443},[312,62062,62063],{"class":324},"    slider.addEventListener('mouseleave', function () {\n",[312,62065,62066],{"class":314,"line":35449},[312,62067,62036],{"class":324},[312,62069,62070],{"class":314,"line":35455},[312,62071,62072],{"class":324},"      if (timerId) clearInterval(timerId)\n",[312,62074,62075],{"class":314,"line":35466},[312,62076,62077],{"class":324},"      \u002F\u002F 开启定时器\n",[312,62079,62080],{"class":314,"line":35477},[312,62081,62082],{"class":324},"      timerId = setInterval(function () {\n",[312,62084,62085],{"class":314,"line":35483},[312,62086,62087],{"class":324},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[312,62089,62090],{"class":314,"line":35500},[312,62091,62092],{"class":324},"        next.click()\n",[312,62094,62095],{"class":314,"line":35523},[312,62096,62097],{"class":324},"      }, 1000)\n",[312,62099,62100],{"class":314,"line":35546},[312,62101,35256],{"class":324},[312,62103,62104,62106,62108],{"class":314,"line":35552},[312,62105,54203],{"class":324},[312,62107,53599],{"class":328},[312,62109,343],{"class":324},[312,62111,62112,62114,62116],{"class":314,"line":35557},[312,62113,353],{"class":324},[312,62115,53586],{"class":328},[312,62117,343],{"class":324},[312,62119,62120],{"class":314,"line":35566},[312,62121,4205],{"emptyLinePlaceholder":1881},[312,62123,62124,62126,62128],{"class":314,"line":35576},[312,62125,353],{"class":324},[312,62127,52430],{"class":328},[312,62129,343],{"class":324},[23796,62131,62133],{"id":62132},"_3252-焦点事件","3.2.5.2 焦点事件",[24,62135,62136],{},"小米搜索框案例：",[303,62138,62140],{"className":52428,"code":62139,"language":52430,"meta":308,"style":308},"\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",[119,62141,62142,62152,62166,62170,62178,62192,62212,62232,62244,62252,62258,62268,62278,62290,62294,62298,62305,62309,62320,62324,62328,62335,62346,62359,62373,62377,62381,62390,62402,62414,62428,62441,62454,62472,62483,62487,62491,62500,62517,62521,62525,62532,62542,62552,62563,62576,62588,62604,62615,62627,62631,62635,62643,62653,62670,62682,62694,62705,62709,62713,62724,62735,62739,62747,62751,62759,62763,62771,62786,62809,62824,62854,62881,62908,62935,62962,62989,63016,63025,63033,63041,63046,63066,63086,63091,63096,63114,63119,63129,63134,63148,63153,63158,63175,63184,63196,63200,63208,63216,63220],{"__ignoreMap":308},[312,62143,62144,62146,62148,62150],{"class":314,"line":315},[312,62145,53092],{"class":324},[312,62147,53095],{"class":328},[312,62149,53098],{"class":332},[312,62151,343],{"class":324},[312,62153,62154,62156,62158,62160,62162,62164],{"class":314,"line":171},[312,62155,325],{"class":324},[312,62157,52430],{"class":328},[312,62159,53109],{"class":332},[312,62161,336],{"class":324},[312,62163,53114],{"class":339},[312,62165,343],{"class":324},[312,62167,62168],{"class":314,"line":274},[312,62169,4205],{"emptyLinePlaceholder":1881},[312,62171,62172,62174,62176],{"class":314,"line":298},[312,62173,325],{"class":324},[312,62175,53127],{"class":328},[312,62177,343],{"class":324},[312,62179,62180,62182,62184,62186,62188,62190],{"class":314,"line":974},[312,62181,53134],{"class":324},[312,62183,53137],{"class":328},[312,62185,53140],{"class":332},[312,62187,336],{"class":324},[312,62189,53145],{"class":339},[312,62191,343],{"class":324},[312,62193,62194,62196,62198,62200,62202,62204,62206,62208,62210],{"class":314,"line":980},[312,62195,53134],{"class":324},[312,62197,53137],{"class":328},[312,62199,53156],{"class":332},[312,62201,336],{"class":324},[312,62203,53161],{"class":339},[312,62205,53164],{"class":332},[312,62207,336],{"class":324},[312,62209,53169],{"class":339},[312,62211,343],{"class":324},[312,62213,62214,62216,62218,62220,62222,62224,62226,62228,62230],{"class":314,"line":997},[312,62215,53134],{"class":324},[312,62217,53137],{"class":328},[312,62219,16721],{"class":332},[312,62221,336],{"class":324},[312,62223,53184],{"class":339},[312,62225,53164],{"class":332},[312,62227,336],{"class":324},[312,62229,53191],{"class":339},[312,62231,343],{"class":324},[312,62233,62234,62236,62238,62240,62242],{"class":314,"line":1003},[312,62235,53134],{"class":324},[312,62237,628],{"class":328},[312,62239,53202],{"class":324},[312,62241,628],{"class":328},[312,62243,343],{"class":324},[312,62245,62246,62248,62250],{"class":314,"line":1020},[312,62247,53134],{"class":324},[312,62249,1856],{"class":328},[312,62251,343],{"class":324},[312,62253,62254,62256],{"class":314,"line":1026},[312,62255,53219],{"class":328},[312,62257,483],{"class":324},[312,62259,62260,62262,62264,62266],{"class":314,"line":3418},[312,62261,53226],{"class":488},[312,62263,492],{"class":324},[312,62265,858],{"class":488},[312,62267,498],{"class":324},[312,62269,62270,62272,62274,62276],{"class":314,"line":3423},[312,62271,53237],{"class":488},[312,62273,492],{"class":324},[312,62275,858],{"class":488},[312,62277,498],{"class":324},[312,62279,62280,62283,62285,62288],{"class":314,"line":3429},[312,62281,62282],{"class":488},"            box-sizing",[312,62284,492],{"class":324},[312,62286,62287],{"class":488},"border-box",[312,62289,498],{"class":324},[312,62291,62292],{"class":314,"line":3434},[312,62293,4334],{"class":324},[312,62295,62296],{"class":314,"line":3448},[312,62297,4205],{"emptyLinePlaceholder":1881},[312,62299,62300,62303],{"class":314,"line":3453},[312,62301,62302],{"class":328},"        ul",[312,62304,483],{"class":324},[312,62306,62307],{"class":314,"line":3459},[312,62308,4205],{"emptyLinePlaceholder":1881},[312,62310,62311,62314,62316,62318],{"class":314,"line":3480},[312,62312,62313],{"class":488},"            list-style",[312,62315,492],{"class":324},[312,62317,56521],{"class":488},[312,62319,498],{"class":324},[312,62321,62322],{"class":314,"line":3485},[312,62323,4334],{"class":324},[312,62325,62326],{"class":314,"line":3499},[312,62327,4205],{"emptyLinePlaceholder":1881},[312,62329,62330,62333],{"class":314,"line":3504},[312,62331,62332],{"class":332},"        .mi",[312,62334,483],{"class":324},[312,62336,62337,62340,62342,62344],{"class":314,"line":3533},[312,62338,62339],{"class":488},"            position",[312,62341,492],{"class":324},[312,62343,969],{"class":488},[312,62345,498],{"class":324},[312,62347,62348,62350,62352,62355,62357],{"class":314,"line":3538},[312,62349,53275],{"class":488},[312,62351,492],{"class":324},[312,62353,62354],{"class":488},"223",[312,62356,1437],{"class":1436},[312,62358,498],{"class":324},[312,62360,62361,62363,62365,62367,62369,62371],{"class":314,"line":3555},[312,62362,53226],{"class":488},[312,62364,492],{"class":324},[312,62366,2256],{"class":488},[312,62368,1437],{"class":1436},[312,62370,861],{"class":488},[312,62372,498],{"class":324},[312,62374,62375],{"class":314,"line":3560},[312,62376,4334],{"class":324},[312,62378,62379],{"class":314,"line":3565},[312,62380,4205],{"emptyLinePlaceholder":1881},[312,62382,62383,62385,62388],{"class":314,"line":3570},[312,62384,62332],{"class":332},[312,62386,62387],{"class":328}," input",[312,62389,483],{"class":324},[312,62391,62392,62394,62396,62398,62400],{"class":314,"line":3584},[312,62393,53275],{"class":488},[312,62395,492],{"class":324},[312,62397,62354],{"class":488},[312,62399,1437],{"class":1436},[312,62401,498],{"class":324},[312,62403,62404,62406,62408,62410,62412],{"class":314,"line":3589},[312,62405,53289],{"class":488},[312,62407,492],{"class":324},[312,62409,2552],{"class":488},[312,62411,1437],{"class":1436},[312,62413,498],{"class":324},[312,62415,62416,62418,62420,62422,62424,62426],{"class":314,"line":4382},[312,62417,53237],{"class":488},[312,62419,492],{"class":324},[312,62421,858],{"class":488},[312,62423,3843],{"class":488},[312,62425,1437],{"class":1436},[312,62427,498],{"class":324},[312,62429,62430,62433,62435,62437,62439],{"class":314,"line":4396},[312,62431,62432],{"class":488},"            font-size",[312,62434,492],{"class":324},[312,62436,2494],{"class":488},[312,62438,1437],{"class":1436},[312,62440,498],{"class":324},[312,62442,62443,62446,62448,62450,62452],{"class":314,"line":4404},[312,62444,62445],{"class":488},"            line-height",[312,62447,492],{"class":324},[312,62449,2552],{"class":488},[312,62451,1437],{"class":1436},[312,62453,498],{"class":324},[312,62455,62456,62459,62461,62463,62465,62467,62470],{"class":314,"line":4409},[312,62457,62458],{"class":488},"            border",[312,62460,492],{"class":324},[312,62462,1433],{"class":488},[312,62464,1437],{"class":1436},[312,62466,1440],{"class":488},[312,62468,62469],{"class":488}," #e0e0e0",[312,62471,498],{"class":324},[312,62473,62474,62477,62479,62481],{"class":314,"line":4415},[312,62475,62476],{"class":488},"            outline",[312,62478,492],{"class":324},[312,62480,56521],{"class":488},[312,62482,498],{"class":324},[312,62484,62485],{"class":314,"line":4421},[312,62486,4334],{"class":324},[312,62488,62489],{"class":314,"line":4426},[312,62490,4205],{"emptyLinePlaceholder":1881},[312,62492,62493,62495,62498],{"class":314,"line":9751},[312,62494,62332],{"class":332},[312,62496,62497],{"class":332}," .search",[312,62499,483],{"class":324},[312,62501,62502,62504,62506,62508,62510,62512,62515],{"class":314,"line":9775},[312,62503,62458],{"class":488},[312,62505,492],{"class":324},[312,62507,1433],{"class":488},[312,62509,1437],{"class":1436},[312,62511,1440],{"class":488},[312,62513,62514],{"class":488}," #ff6700",[312,62516,498],{"class":324},[312,62518,62519],{"class":314,"line":9780},[312,62520,4334],{"class":324},[312,62522,62523],{"class":314,"line":9786},[312,62524,4205],{"emptyLinePlaceholder":1881},[312,62526,62527,62530],{"class":314,"line":9813},[312,62528,62529],{"class":332},"        .result-list",[312,62531,483],{"class":324},[312,62533,62534,62536,62538,62540],{"class":314,"line":9818},[312,62535,53263],{"class":488},[312,62537,492],{"class":324},[312,62539,56521],{"class":488},[312,62541,498],{"class":324},[312,62543,62544,62546,62548,62550],{"class":314,"line":9824},[312,62545,62339],{"class":488},[312,62547,492],{"class":324},[312,62549,992],{"class":488},[312,62551,498],{"class":324},[312,62553,62554,62557,62559,62561],{"class":314,"line":9836},[312,62555,62556],{"class":488},"            left",[312,62558,492],{"class":324},[312,62560,858],{"class":488},[312,62562,498],{"class":324},[312,62564,62565,62568,62570,62572,62574],{"class":314,"line":9848},[312,62566,62567],{"class":488},"            top",[312,62569,492],{"class":324},[312,62571,2552],{"class":488},[312,62573,1437],{"class":1436},[312,62575,498],{"class":324},[312,62577,62578,62580,62582,62584,62586],{"class":314,"line":9860},[312,62579,53275],{"class":488},[312,62581,492],{"class":324},[312,62583,62354],{"class":488},[312,62585,1437],{"class":1436},[312,62587,498],{"class":324},[312,62589,62590,62592,62594,62596,62598,62600,62602],{"class":314,"line":11519},[312,62591,62458],{"class":488},[312,62593,492],{"class":324},[312,62595,1433],{"class":488},[312,62597,1437],{"class":1436},[312,62599,1440],{"class":488},[312,62601,62514],{"class":488},[312,62603,498],{"class":324},[312,62605,62606,62609,62611,62613],{"class":314,"line":11544},[312,62607,62608],{"class":488},"            border-top",[312,62610,492],{"class":324},[312,62612,858],{"class":488},[312,62614,498],{"class":324},[312,62616,62617,62620,62622,62625],{"class":314,"line":11567},[312,62618,62619],{"class":488},"            background",[312,62621,492],{"class":324},[312,62623,62624],{"class":488},"#fff",[312,62626,498],{"class":324},[312,62628,62629],{"class":314,"line":11591},[312,62630,4334],{"class":324},[312,62632,62633],{"class":314,"line":11596},[312,62634,4205],{"emptyLinePlaceholder":1881},[312,62636,62637,62639,62641],{"class":314,"line":11601},[312,62638,62529],{"class":332},[312,62640,3206],{"class":328},[312,62642,483],{"class":324},[312,62644,62645,62647,62649,62651],{"class":314,"line":11606},[312,62646,53263],{"class":488},[312,62648,492],{"class":324},[312,62650,508],{"class":488},[312,62652,498],{"class":324},[312,62654,62655,62657,62659,62661,62663,62666,62668],{"class":314,"line":11615},[312,62656,53237],{"class":488},[312,62658,492],{"class":324},[312,62660,2289],{"class":488},[312,62662,1437],{"class":1436},[312,62664,62665],{"class":488}," 15",[312,62667,1437],{"class":1436},[312,62669,498],{"class":324},[312,62671,62672,62674,62676,62678,62680],{"class":314,"line":11620},[312,62673,62432],{"class":488},[312,62675,492],{"class":324},[312,62677,2443],{"class":488},[312,62679,1437],{"class":1436},[312,62681,498],{"class":324},[312,62683,62684,62687,62689,62692],{"class":314,"line":11626},[312,62685,62686],{"class":488},"            color",[312,62688,492],{"class":324},[312,62690,62691],{"class":488},"#424242",[312,62693,498],{"class":324},[312,62695,62696,62699,62701,62703],{"class":314,"line":11647},[312,62697,62698],{"class":488},"            text-decoration",[312,62700,492],{"class":324},[312,62702,56521],{"class":488},[312,62704,498],{"class":324},[312,62706,62707],{"class":314,"line":11653},[312,62708,4334],{"class":324},[312,62710,62711],{"class":314,"line":11667},[312,62712,4205],{"emptyLinePlaceholder":1881},[312,62714,62715,62717,62719,62722],{"class":314,"line":11673},[312,62716,62529],{"class":332},[312,62718,3206],{"class":328},[312,62720,62721],{"class":332},":hover",[312,62723,483],{"class":324},[312,62725,62726,62728,62730,62733],{"class":314,"line":11700},[312,62727,53427],{"class":488},[312,62729,492],{"class":324},[312,62731,62732],{"class":488},"#eee",[312,62734,498],{"class":324},[312,62736,62737],{"class":314,"line":11709},[312,62738,4334],{"class":324},[312,62740,62741,62743,62745],{"class":314,"line":11715},[312,62742,53563],{"class":324},[312,62744,1856],{"class":328},[312,62746,343],{"class":324},[312,62748,62749],{"class":314,"line":11723},[312,62750,4205],{"emptyLinePlaceholder":1881},[312,62752,62753,62755,62757],{"class":314,"line":11728},[312,62754,353],{"class":324},[312,62756,53127],{"class":328},[312,62758,343],{"class":324},[312,62760,62761],{"class":314,"line":18404},[312,62762,4205],{"emptyLinePlaceholder":1881},[312,62764,62765,62767,62769],{"class":314,"line":18410},[312,62766,325],{"class":324},[312,62768,53586],{"class":328},[312,62770,343],{"class":324},[312,62772,62773,62775,62777,62779,62781,62784],{"class":314,"line":18433},[312,62774,53134],{"class":324},[312,62776,329],{"class":328},[312,62778,333],{"class":332},[312,62780,336],{"class":324},[312,62782,62783],{"class":339},"\"mi\"",[312,62785,343],{"class":324},[312,62787,62788,62790,62792,62794,62796,62799,62802,62804,62807],{"class":314,"line":18439},[312,62789,57084],{"class":324},[312,62791,55605],{"class":328},[312,62793,55608],{"class":332},[312,62795,336],{"class":324},[312,62797,62798],{"class":339},"\"search\"",[312,62800,62801],{"class":332}," placeholder",[312,62803,336],{"class":324},[312,62805,62806],{"class":339},"\"小米笔记本\"",[312,62808,343],{"class":324},[312,62810,62811,62813,62815,62817,62819,62822],{"class":314,"line":18462},[312,62812,57084],{"class":324},[312,62814,243],{"class":328},[312,62816,333],{"class":332},[312,62818,336],{"class":324},[312,62820,62821],{"class":339},"\"result-list\"",[312,62823,343],{"class":324},[312,62825,62826,62829,62831,62834,62836,62838,62840,62843,62846,62848,62850,62852],{"class":314,"line":18476},[312,62827,62828],{"class":324},"            \u003C",[312,62830,143],{"class":328},[312,62832,62833],{"class":324},">\u003C",[312,62835,164],{"class":328},[312,62837,648],{"class":332},[312,62839,336],{"class":324},[312,62841,62842],{"class":339},"\"#\"",[312,62844,62845],{"class":324},">全部商品\u003C\u002F",[312,62847,164],{"class":328},[312,62849,57096],{"class":324},[312,62851,143],{"class":328},[312,62853,343],{"class":324},[312,62855,62856,62858,62860,62862,62864,62866,62868,62870,62873,62875,62877,62879],{"class":314,"line":18496},[312,62857,62828],{"class":324},[312,62859,143],{"class":328},[312,62861,62833],{"class":324},[312,62863,164],{"class":328},[312,62865,648],{"class":332},[312,62867,336],{"class":324},[312,62869,62842],{"class":339},[312,62871,62872],{"class":324},">小米11\u003C\u002F",[312,62874,164],{"class":328},[312,62876,57096],{"class":324},[312,62878,143],{"class":328},[312,62880,343],{"class":324},[312,62882,62883,62885,62887,62889,62891,62893,62895,62897,62900,62902,62904,62906],{"class":314,"line":18502},[312,62884,62828],{"class":324},[312,62886,143],{"class":328},[312,62888,62833],{"class":324},[312,62890,164],{"class":328},[312,62892,648],{"class":332},[312,62894,336],{"class":324},[312,62896,62842],{"class":339},[312,62898,62899],{"class":324},">小米10S\u003C\u002F",[312,62901,164],{"class":328},[312,62903,57096],{"class":324},[312,62905,143],{"class":328},[312,62907,343],{"class":324},[312,62909,62910,62912,62914,62916,62918,62920,62922,62924,62927,62929,62931,62933],{"class":314,"line":18513},[312,62911,62828],{"class":324},[312,62913,143],{"class":328},[312,62915,62833],{"class":324},[312,62917,164],{"class":328},[312,62919,648],{"class":332},[312,62921,336],{"class":324},[312,62923,62842],{"class":339},[312,62925,62926],{"class":324},">小米笔记本\u003C\u002F",[312,62928,164],{"class":328},[312,62930,57096],{"class":324},[312,62932,143],{"class":328},[312,62934,343],{"class":324},[312,62936,62937,62939,62941,62943,62945,62947,62949,62951,62954,62956,62958,62960],{"class":314,"line":18536},[312,62938,62828],{"class":324},[312,62940,143],{"class":328},[312,62942,62833],{"class":324},[312,62944,164],{"class":328},[312,62946,648],{"class":332},[312,62948,336],{"class":324},[312,62950,62842],{"class":339},[312,62952,62953],{"class":324},">小米手机\u003C\u002F",[312,62955,164],{"class":328},[312,62957,57096],{"class":324},[312,62959,143],{"class":328},[312,62961,343],{"class":324},[312,62963,62964,62966,62968,62970,62972,62974,62976,62978,62981,62983,62985,62987],{"class":314,"line":18558},[312,62965,62828],{"class":324},[312,62967,143],{"class":328},[312,62969,62833],{"class":324},[312,62971,164],{"class":328},[312,62973,648],{"class":332},[312,62975,336],{"class":324},[312,62977,62842],{"class":339},[312,62979,62980],{"class":324},">黑鲨4\u003C\u002F",[312,62982,164],{"class":328},[312,62984,57096],{"class":324},[312,62986,143],{"class":328},[312,62988,343],{"class":324},[312,62990,62991,62993,62995,62997,62999,63001,63003,63005,63008,63010,63012,63014],{"class":314,"line":18563},[312,62992,62828],{"class":324},[312,62994,143],{"class":328},[312,62996,62833],{"class":324},[312,62998,164],{"class":328},[312,63000,648],{"class":332},[312,63002,336],{"class":324},[312,63004,62842],{"class":339},[312,63006,63007],{"class":324},">空调\u003C\u002F",[312,63009,164],{"class":328},[312,63011,57096],{"class":324},[312,63013,143],{"class":328},[312,63015,343],{"class":324},[312,63017,63018,63021,63023],{"class":314,"line":18569},[312,63019,63020],{"class":324},"        \u003C\u002F",[312,63022,243],{"class":328},[312,63024,343],{"class":324},[312,63026,63027,63029,63031],{"class":314,"line":18583},[312,63028,53563],{"class":324},[312,63030,329],{"class":328},[312,63032,343],{"class":324},[312,63034,63035,63037,63039],{"class":314,"line":18596},[312,63036,53134],{"class":324},[312,63038,53599],{"class":328},[312,63040,343],{"class":324},[312,63042,63043],{"class":314,"line":18601},[312,63044,63045],{"class":318},"        \u002F\u002F 1. 获取元素\n",[312,63047,63048,63051,63053,63055,63057,63059,63061,63064],{"class":314,"line":18615},[312,63049,63050],{"class":1436},"        const",[312,63052,62387],{"class":488},[312,63054,15366],{"class":1436},[312,63056,56180],{"class":324},[312,63058,56183],{"class":332},[312,63060,1576],{"class":324},[312,63062,63063],{"class":339},"'[type=search]'",[312,63065,1959],{"class":324},[312,63067,63068,63070,63073,63075,63077,63079,63081,63084],{"class":314,"line":18620},[312,63069,63050],{"class":1436},[312,63071,63072],{"class":488}," ul",[312,63074,15366],{"class":1436},[312,63076,56180],{"class":324},[312,63078,56183],{"class":332},[312,63080,1576],{"class":324},[312,63082,63083],{"class":339},"'.result-list'",[312,63085,1959],{"class":324},[312,63087,63088],{"class":314,"line":18626},[312,63089,63090],{"class":318},"        \u002F\u002F console.log(input)\n",[312,63092,63093],{"class":314,"line":18631},[312,63094,63095],{"class":318},"        \u002F\u002F 2. 监听事件 获得焦点\n",[312,63097,63098,63101,63103,63105,63108,63110,63112],{"class":314,"line":18645},[312,63099,63100],{"class":324},"        input.",[312,63102,59595],{"class":332},[312,63104,1576],{"class":324},[312,63106,63107],{"class":339},"'focus'",[312,63109,733],{"class":324},[312,63111,56233],{"class":1436},[312,63113,56236],{"class":324},[312,63115,63116],{"class":314,"line":18650},[312,63117,63118],{"class":318},"            \u002F\u002F ul显示\n",[312,63120,63121,63124,63126],{"class":314,"line":18655},[312,63122,63123],{"class":324},"            ul.style.display ",[312,63125,336],{"class":1436},[312,63127,63128],{"class":339}," 'block'\n",[312,63130,63131],{"class":314,"line":18669},[312,63132,63133],{"class":318},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[312,63135,63136,63139,63141,63143,63146],{"class":314,"line":18681},[312,63137,63138],{"class":324},"            input.classList.",[312,63140,7138],{"class":332},[312,63142,1576],{"class":324},[312,63144,63145],{"class":339},"'search'",[312,63147,1959],{"class":324},[312,63149,63150],{"class":314,"line":18686},[312,63151,63152],{"class":324},"        })\n",[312,63154,63155],{"class":314,"line":18699},[312,63156,63157],{"class":318},"        \u002F\u002F 3. 监听事件 失去焦点\n",[312,63159,63160,63162,63164,63166,63169,63171,63173],{"class":314,"line":18704},[312,63161,63100],{"class":324},[312,63163,59595],{"class":332},[312,63165,1576],{"class":324},[312,63167,63168],{"class":339},"'blur'",[312,63170,733],{"class":324},[312,63172,56233],{"class":1436},[312,63174,56236],{"class":324},[312,63176,63177,63179,63181],{"class":314,"line":18709},[312,63178,63123],{"class":324},[312,63180,336],{"class":1436},[312,63182,63183],{"class":339}," 'none'\n",[312,63185,63186,63188,63190,63192,63194],{"class":314,"line":18714},[312,63187,63138],{"class":324},[312,63189,58788],{"class":332},[312,63191,1576],{"class":324},[312,63193,63145],{"class":339},[312,63195,1959],{"class":324},[312,63197,63198],{"class":314,"line":18727},[312,63199,63152],{"class":324},[312,63201,63202,63204,63206],{"class":314,"line":18732},[312,63203,53563],{"class":324},[312,63205,53599],{"class":328},[312,63207,343],{"class":324},[312,63209,63210,63212,63214],{"class":314,"line":34428},[312,63211,353],{"class":324},[312,63213,53586],{"class":328},[312,63215,343],{"class":324},[312,63217,63218],{"class":314,"line":34434},[312,63219,4205],{"emptyLinePlaceholder":1881},[312,63221,63222,63224,63226],{"class":314,"line":34440},[312,63223,353],{"class":324},[312,63225,52430],{"class":328},[312,63227,343],{"class":324},[23796,63229,63231],{"id":63230},"_3253-键盘事件","3.2.5.3 键盘事件",[24,63233,63234],{},"评论字数统计案例",[24,63236,63237],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[24,63239,63240],{},"牢记focus伪类选择器",[53137,63242],{"charSet":63243},"UTF-8",[53137,63245],{"name":63246,"content":63247},"viewport","width=device-width, initial-scale=1.0",[628,63249,63250],{},"Document",[1856,63252,63253],{},"\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",[55605,63255],{"type":6992},[243,63257,63258,63261],{},[143,63259,63260],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[143,63262,63263],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[303,63265,63267],{"className":52428,"code":63266,"language":52430,"meta":308,"style":308},"\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",[119,63268,63269,63279,63293,63297,63305,63319,63339,63359,63372,63380,63387,63400,63414,63424,63434,63438,63442,63449,63461,63473,63485,63497,63524,63537,63541,63545,63554,63565,63577,63588,63599,63611,63622,63634,63650,63662,63666,63670,63681,63692,63702,63714,63718,63722,63730,63741,63751,63762,63774,63787,63799,63811,63815,63819,63828,63840,63851,63864,63875,63889,63893,63897,63904,63916,63928,63938,63942,63946,63955,63967,63977,63981,63985,63996,64006,64025,64038,64042,64046,64056,64066,64070,64074,64085,64096,64108,64120,64124,64128,64139,64150,64164,64168,64172,64183,64193,64205,64209,64217,64225,64229,64237,64252,64271,64311,64324,64332,64346,64366,64374,64389,64412,64430,64445,64465,64485,64505,64513,64521,64529,64537,64557,64577,64582,64599,64608,64612,64617,64633,64641,64645,64650,64667,64672,64697,64701,64705,64710,64715,64723,64731,64735],{"__ignoreMap":308},[312,63270,63271,63273,63275,63277],{"class":314,"line":315},[312,63272,53092],{"class":324},[312,63274,53095],{"class":328},[312,63276,53098],{"class":332},[312,63278,343],{"class":324},[312,63280,63281,63283,63285,63287,63289,63291],{"class":314,"line":171},[312,63282,325],{"class":324},[312,63284,52430],{"class":328},[312,63286,53109],{"class":332},[312,63288,336],{"class":324},[312,63290,53114],{"class":339},[312,63292,343],{"class":324},[312,63294,63295],{"class":314,"line":274},[312,63296,4205],{"emptyLinePlaceholder":1881},[312,63298,63299,63301,63303],{"class":314,"line":298},[312,63300,325],{"class":324},[312,63302,53127],{"class":328},[312,63304,343],{"class":324},[312,63306,63307,63309,63311,63313,63315,63317],{"class":314,"line":974},[312,63308,53930],{"class":324},[312,63310,53137],{"class":328},[312,63312,53140],{"class":332},[312,63314,336],{"class":324},[312,63316,53145],{"class":339},[312,63318,343],{"class":324},[312,63320,63321,63323,63325,63327,63329,63331,63333,63335,63337],{"class":314,"line":980},[312,63322,53930],{"class":324},[312,63324,53137],{"class":328},[312,63326,53156],{"class":332},[312,63328,336],{"class":324},[312,63330,53161],{"class":339},[312,63332,53164],{"class":332},[312,63334,336],{"class":324},[312,63336,53169],{"class":339},[312,63338,343],{"class":324},[312,63340,63341,63343,63345,63347,63349,63351,63353,63355,63357],{"class":314,"line":997},[312,63342,53930],{"class":324},[312,63344,53137],{"class":328},[312,63346,16721],{"class":332},[312,63348,336],{"class":324},[312,63350,53184],{"class":339},[312,63352,53164],{"class":332},[312,63354,336],{"class":324},[312,63356,53191],{"class":339},[312,63358,343],{"class":324},[312,63360,63361,63363,63365,63368,63370],{"class":314,"line":1003},[312,63362,53930],{"class":324},[312,63364,628],{"class":328},[312,63366,63367],{"class":324},">评论回车发布\u003C\u002F",[312,63369,628],{"class":328},[312,63371,343],{"class":324},[312,63373,63374,63376,63378],{"class":314,"line":1020},[312,63375,53930],{"class":324},[312,63377,1856],{"class":328},[312,63379,343],{"class":324},[312,63381,63382,63385],{"class":314,"line":1026},[312,63383,63384],{"class":332},"    .wrapper",[312,63386,483],{"class":324},[312,63388,63389,63392,63394,63396,63398],{"class":314,"line":3418},[312,63390,63391],{"class":488},"      min-width",[312,63393,492],{"class":324},[312,63395,5792],{"class":488},[312,63397,1437],{"class":1436},[312,63399,498],{"class":324},[312,63401,63402,63405,63407,63410,63412],{"class":314,"line":3423},[312,63403,63404],{"class":488},"      max-width",[312,63406,492],{"class":324},[312,63408,63409],{"class":488},"800",[312,63411,1437],{"class":1436},[312,63413,498],{"class":324},[312,63415,63416,63418,63420,63422],{"class":314,"line":3429},[312,63417,56791],{"class":488},[312,63419,492],{"class":324},[312,63421,53268],{"class":488},[312,63423,498],{"class":324},[312,63425,63426,63428,63430,63432],{"class":314,"line":3434},[312,63427,56802],{"class":488},[312,63429,492],{"class":324},[312,63431,53368],{"class":488},[312,63433,498],{"class":324},[312,63435,63436],{"class":314,"line":3448},[312,63437,3992],{"class":324},[312,63439,63440],{"class":314,"line":3453},[312,63441,4205],{"emptyLinePlaceholder":1881},[312,63443,63444,63447],{"class":314,"line":3459},[312,63445,63446],{"class":332},"    .avatar",[312,63448,483],{"class":324},[312,63450,63451,63453,63455,63457,63459],{"class":314,"line":3480},[312,63452,56554],{"class":488},[312,63454,492],{"class":324},[312,63456,2552],{"class":488},[312,63458,1437],{"class":1436},[312,63460,498],{"class":324},[312,63462,63463,63465,63467,63469,63471],{"class":314,"line":3485},[312,63464,56568],{"class":488},[312,63466,492],{"class":324},[312,63468,2552],{"class":488},[312,63470,1437],{"class":1436},[312,63472,498],{"class":324},[312,63474,63475,63477,63479,63481,63483],{"class":314,"line":3499},[312,63476,56916],{"class":488},[312,63478,492],{"class":324},[312,63480,2601],{"class":488},[312,63482,2273],{"class":1436},[312,63484,498],{"class":324},[312,63486,63487,63490,63492,63495],{"class":314,"line":3504},[312,63488,63489],{"class":488},"      overflow",[312,63491,492],{"class":324},[312,63493,63494],{"class":488},"hidden",[312,63496,498],{"class":324},[312,63498,63499,63502,63504,63506,63508,63511,63513,63515,63517,63519,63522],{"class":314,"line":3533},[312,63500,63501],{"class":488},"      background",[312,63503,492],{"class":324},[312,63505,1573],{"class":488},[312,63507,1576],{"class":324},[312,63509,63510],{"class":1579},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[312,63512,1583],{"class":324},[312,63514,1586],{"class":488},[312,63516,18944],{"class":488},[312,63518,26774],{"class":324},[312,63520,63521],{"class":488},"cover",[312,63523,498],{"class":324},[312,63525,63526,63529,63531,63533,63535],{"class":314,"line":3538},[312,63527,63528],{"class":488},"      margin-right",[312,63530,492],{"class":324},[312,63532,1546],{"class":488},[312,63534,1437],{"class":1436},[312,63536,498],{"class":324},[312,63538,63539],{"class":314,"line":3555},[312,63540,3992],{"class":324},[312,63542,63543],{"class":314,"line":3560},[312,63544,4205],{"emptyLinePlaceholder":1881},[312,63546,63547,63549,63552],{"class":314,"line":3565},[312,63548,63384],{"class":332},[312,63550,63551],{"class":328}," textarea",[312,63553,483],{"class":324},[312,63555,63556,63559,63561,63563],{"class":314,"line":3570},[312,63557,63558],{"class":488},"      outline",[312,63560,492],{"class":324},[312,63562,56521],{"class":488},[312,63564,498],{"class":324},[312,63566,63567,63570,63572,63575],{"class":314,"line":3584},[312,63568,63569],{"class":488},"      border-color",[312,63571,492],{"class":324},[312,63573,63574],{"class":488},"transparent",[312,63576,498],{"class":324},[312,63578,63579,63582,63584,63586],{"class":314,"line":3589},[312,63580,63581],{"class":488},"      resize",[312,63583,492],{"class":324},[312,63585,56521],{"class":488},[312,63587,498],{"class":324},[312,63589,63590,63592,63594,63597],{"class":314,"line":4382},[312,63591,63501],{"class":488},[312,63593,492],{"class":324},[312,63595,63596],{"class":488},"#f5f5f5",[312,63598,498],{"class":324},[312,63600,63601,63603,63605,63607,63609],{"class":314,"line":4396},[312,63602,56916],{"class":488},[312,63604,492],{"class":324},[312,63606,2238],{"class":488},[312,63608,1437],{"class":1436},[312,63610,498],{"class":324},[312,63612,63613,63616,63618,63620],{"class":314,"line":4404},[312,63614,63615],{"class":488},"      flex",[312,63617,492],{"class":324},[312,63619,1433],{"class":488},[312,63621,498],{"class":324},[312,63623,63624,63626,63628,63630,63632],{"class":314,"line":4409},[312,63625,56479],{"class":488},[312,63627,492],{"class":324},[312,63629,2391],{"class":488},[312,63631,1437],{"class":1436},[312,63633,498],{"class":324},[312,63635,63636,63639,63641,63643,63646,63648],{"class":314,"line":4415},[312,63637,63638],{"class":488},"      transition",[312,63640,492],{"class":324},[312,63642,29917],{"class":488},[312,63644,63645],{"class":488}," 0.5",[312,63647,2640],{"class":1436},[312,63649,498],{"class":324},[312,63651,63652,63654,63656,63658,63660],{"class":314,"line":4421},[312,63653,56568],{"class":488},[312,63655,492],{"class":324},[312,63657,2893],{"class":488},[312,63659,1437],{"class":1436},[312,63661,498],{"class":324},[312,63663,63664],{"class":314,"line":4426},[312,63665,3992],{"class":324},[312,63667,63668],{"class":314,"line":9751},[312,63669,4205],{"emptyLinePlaceholder":1881},[312,63671,63672,63674,63676,63679],{"class":314,"line":9775},[312,63673,63384],{"class":332},[312,63675,63551],{"class":328},[312,63677,63678],{"class":332},":focus",[312,63680,483],{"class":324},[312,63682,63683,63685,63687,63690],{"class":314,"line":9780},[312,63684,63569],{"class":488},[312,63686,492],{"class":324},[312,63688,63689],{"class":488},"#e4e4e4",[312,63691,498],{"class":324},[312,63693,63694,63696,63698,63700],{"class":314,"line":9786},[312,63695,63501],{"class":488},[312,63697,492],{"class":324},[312,63699,62624],{"class":488},[312,63701,498],{"class":324},[312,63703,63704,63706,63708,63710,63712],{"class":314,"line":9813},[312,63705,56568],{"class":488},[312,63707,492],{"class":324},[312,63709,2601],{"class":488},[312,63711,1437],{"class":1436},[312,63713,498],{"class":324},[312,63715,63716],{"class":314,"line":9818},[312,63717,3992],{"class":324},[312,63719,63720],{"class":314,"line":9824},[312,63721,4205],{"emptyLinePlaceholder":1881},[312,63723,63724,63726,63728],{"class":314,"line":9836},[312,63725,63384],{"class":332},[312,63727,59249],{"class":328},[312,63729,483],{"class":324},[312,63731,63732,63734,63736,63739],{"class":314,"line":9848},[312,63733,63501],{"class":488},[312,63735,492],{"class":324},[312,63737,63738],{"class":488},"#00aeec",[312,63740,498],{"class":324},[312,63742,63743,63745,63747,63749],{"class":314,"line":9860},[312,63744,59198],{"class":488},[312,63746,492],{"class":324},[312,63748,62624],{"class":488},[312,63750,498],{"class":324},[312,63752,63753,63756,63758,63760],{"class":314,"line":11519},[312,63754,63755],{"class":488},"      border",[312,63757,492],{"class":324},[312,63759,56521],{"class":488},[312,63761,498],{"class":324},[312,63763,63764,63766,63768,63770,63772],{"class":314,"line":11544},[312,63765,56916],{"class":488},[312,63767,492],{"class":324},[312,63769,2238],{"class":488},[312,63771,1437],{"class":1436},[312,63773,498],{"class":324},[312,63775,63776,63779,63781,63783,63785],{"class":314,"line":11567},[312,63777,63778],{"class":488},"      margin-left",[312,63780,492],{"class":324},[312,63782,2391],{"class":488},[312,63784,1437],{"class":1436},[312,63786,498],{"class":324},[312,63788,63789,63791,63793,63795,63797],{"class":314,"line":11591},[312,63790,56554],{"class":488},[312,63792,492],{"class":324},[312,63794,2301],{"class":488},[312,63796,1437],{"class":1436},[312,63798,498],{"class":324},[312,63800,63801,63804,63806,63809],{"class":314,"line":11596},[312,63802,63803],{"class":488},"      cursor",[312,63805,492],{"class":324},[312,63807,63808],{"class":488},"pointer",[312,63810,498],{"class":324},[312,63812,63813],{"class":314,"line":11601},[312,63814,3992],{"class":324},[312,63816,63817],{"class":314,"line":11606},[312,63818,4205],{"emptyLinePlaceholder":1881},[312,63820,63821,63823,63826],{"class":314,"line":11615},[312,63822,63384],{"class":332},[312,63824,63825],{"class":332}," .total",[312,63827,483],{"class":324},[312,63829,63830,63832,63834,63836,63838],{"class":314,"line":11620},[312,63831,63528],{"class":488},[312,63833,492],{"class":324},[312,63835,2557],{"class":488},[312,63837,1437],{"class":1436},[312,63839,498],{"class":324},[312,63841,63842,63844,63846,63849],{"class":314,"line":11626},[312,63843,59198],{"class":488},[312,63845,492],{"class":324},[312,63847,63848],{"class":488},"#999",[312,63850,498],{"class":324},[312,63852,63853,63856,63858,63860,63862],{"class":314,"line":11647},[312,63854,63855],{"class":488},"      margin-top",[312,63857,492],{"class":324},[312,63859,2264],{"class":488},[312,63861,1437],{"class":1436},[312,63863,498],{"class":324},[312,63865,63866,63869,63871,63873],{"class":314,"line":11653},[312,63867,63868],{"class":488},"      opacity",[312,63870,492],{"class":324},[312,63872,858],{"class":488},[312,63874,498],{"class":324},[312,63876,63877,63879,63881,63883,63885,63887],{"class":314,"line":11667},[312,63878,63638],{"class":488},[312,63880,492],{"class":324},[312,63882,29917],{"class":488},[312,63884,63645],{"class":488},[312,63886,2640],{"class":1436},[312,63888,498],{"class":324},[312,63890,63891],{"class":314,"line":11673},[312,63892,3992],{"class":324},[312,63894,63895],{"class":314,"line":11700},[312,63896,4205],{"emptyLinePlaceholder":1881},[312,63898,63899,63902],{"class":314,"line":11709},[312,63900,63901],{"class":332},"    .list",[312,63903,483],{"class":324},[312,63905,63906,63908,63910,63912,63914],{"class":314,"line":11715},[312,63907,63391],{"class":488},[312,63909,492],{"class":324},[312,63911,5792],{"class":488},[312,63913,1437],{"class":1436},[312,63915,498],{"class":324},[312,63917,63918,63920,63922,63924,63926],{"class":314,"line":11723},[312,63919,63404],{"class":488},[312,63921,492],{"class":324},[312,63923,63409],{"class":488},[312,63925,1437],{"class":1436},[312,63927,498],{"class":324},[312,63929,63930,63932,63934,63936],{"class":314,"line":11728},[312,63931,56791],{"class":488},[312,63933,492],{"class":324},[312,63935,53268],{"class":488},[312,63937,498],{"class":324},[312,63939,63940],{"class":314,"line":18404},[312,63941,3992],{"class":324},[312,63943,63944],{"class":314,"line":18410},[312,63945,4205],{"emptyLinePlaceholder":1881},[312,63947,63948,63950,63953],{"class":314,"line":18433},[312,63949,63901],{"class":332},[312,63951,63952],{"class":332}," .item",[312,63954,483],{"class":324},[312,63956,63957,63959,63961,63963,63965],{"class":314,"line":18439},[312,63958,56554],{"class":488},[312,63960,492],{"class":324},[312,63962,2256],{"class":488},[312,63964,2273],{"class":1436},[312,63966,498],{"class":324},[312,63968,63969,63971,63973,63975],{"class":314,"line":18462},[312,63970,56791],{"class":488},[312,63972,492],{"class":324},[312,63974,53268],{"class":488},[312,63976,498],{"class":324},[312,63978,63979],{"class":314,"line":18476},[312,63980,3992],{"class":324},[312,63982,63983],{"class":314,"line":18496},[312,63984,4205],{"emptyLinePlaceholder":1881},[312,63986,63987,63989,63991,63994],{"class":314,"line":18502},[312,63988,63901],{"class":332},[312,63990,63952],{"class":332},[312,63992,63993],{"class":332}," .info",[312,63995,483],{"class":324},[312,63997,63998,64000,64002,64004],{"class":314,"line":18513},[312,63999,63615],{"class":488},[312,64001,492],{"class":324},[312,64003,1433],{"class":488},[312,64005,498],{"class":324},[312,64007,64008,64011,64013,64015,64017,64020,64023],{"class":314,"line":18536},[312,64009,64010],{"class":488},"      border-bottom",[312,64012,492],{"class":324},[312,64014,1433],{"class":488},[312,64016,1437],{"class":1436},[312,64018,64019],{"class":488}," dashed",[312,64021,64022],{"class":488}," #e4e4e4",[312,64024,498],{"class":324},[312,64026,64027,64030,64032,64034,64036],{"class":314,"line":18558},[312,64028,64029],{"class":488},"      padding-bottom",[312,64031,492],{"class":324},[312,64033,2391],{"class":488},[312,64035,1437],{"class":1436},[312,64037,498],{"class":324},[312,64039,64040],{"class":314,"line":18563},[312,64041,3992],{"class":324},[312,64043,64044],{"class":314,"line":18569},[312,64045,4205],{"emptyLinePlaceholder":1881},[312,64047,64048,64050,64052,64054],{"class":314,"line":18583},[312,64049,63901],{"class":332},[312,64051,63952],{"class":332},[312,64053,8629],{"class":328},[312,64055,483],{"class":324},[312,64057,64058,64060,64062,64064],{"class":314,"line":18596},[312,64059,56490],{"class":488},[312,64061,492],{"class":324},[312,64063,858],{"class":488},[312,64065,498],{"class":324},[312,64067,64068],{"class":314,"line":18601},[312,64069,3992],{"class":324},[312,64071,64072],{"class":314,"line":18615},[312,64073,4205],{"emptyLinePlaceholder":1881},[312,64075,64076,64078,64080,64083],{"class":314,"line":18620},[312,64077,63901],{"class":332},[312,64079,63952],{"class":332},[312,64081,64082],{"class":332}," .name",[312,64084,483],{"class":324},[312,64086,64087,64089,64091,64094],{"class":314,"line":18626},[312,64088,59198],{"class":488},[312,64090,492],{"class":324},[312,64092,64093],{"class":488},"#FB7299",[312,64095,498],{"class":324},[312,64097,64098,64100,64102,64104,64106],{"class":314,"line":18631},[312,64099,56704],{"class":488},[312,64101,492],{"class":324},[312,64103,2494],{"class":488},[312,64105,1437],{"class":1436},[312,64107,498],{"class":324},[312,64109,64110,64113,64115,64118],{"class":314,"line":18645},[312,64111,64112],{"class":488},"      font-weight",[312,64114,492],{"class":324},[312,64116,64117],{"class":488},"bold",[312,64119,498],{"class":324},[312,64121,64122],{"class":314,"line":18650},[312,64123,3992],{"class":324},[312,64125,64126],{"class":314,"line":18655},[312,64127,4205],{"emptyLinePlaceholder":1881},[312,64129,64130,64132,64134,64137],{"class":314,"line":18669},[312,64131,63901],{"class":332},[312,64133,63952],{"class":332},[312,64135,64136],{"class":332}," .text",[312,64138,483],{"class":324},[312,64140,64141,64143,64145,64148],{"class":314,"line":18681},[312,64142,59198],{"class":488},[312,64144,492],{"class":324},[312,64146,64147],{"class":488},"#333",[312,64149,498],{"class":324},[312,64151,64152,64154,64156,64158,64160,64162],{"class":314,"line":18686},[312,64153,56479],{"class":488},[312,64155,492],{"class":324},[312,64157,2391],{"class":488},[312,64159,1437],{"class":1436},[312,64161,5898],{"class":488},[312,64163,498],{"class":324},[312,64165,64166],{"class":314,"line":18699},[312,64167,3992],{"class":324},[312,64169,64170],{"class":314,"line":18704},[312,64171,4205],{"emptyLinePlaceholder":1881},[312,64173,64174,64176,64178,64181],{"class":314,"line":18709},[312,64175,63901],{"class":332},[312,64177,63952],{"class":332},[312,64179,64180],{"class":332}," .time",[312,64182,483],{"class":324},[312,64184,64185,64187,64189,64191],{"class":314,"line":18714},[312,64186,59198],{"class":488},[312,64188,492],{"class":324},[312,64190,63848],{"class":488},[312,64192,498],{"class":324},[312,64194,64195,64197,64199,64201,64203],{"class":314,"line":18727},[312,64196,56704],{"class":488},[312,64198,492],{"class":324},[312,64200,2443],{"class":488},[312,64202,1437],{"class":1436},[312,64204,498],{"class":324},[312,64206,64207],{"class":314,"line":18732},[312,64208,3992],{"class":324},[312,64210,64211,64213,64215],{"class":314,"line":34428},[312,64212,54203],{"class":324},[312,64214,1856],{"class":328},[312,64216,343],{"class":324},[312,64218,64219,64221,64223],{"class":314,"line":34434},[312,64220,353],{"class":324},[312,64222,53127],{"class":328},[312,64224,343],{"class":324},[312,64226,64227],{"class":314,"line":34440},[312,64228,4205],{"emptyLinePlaceholder":1881},[312,64230,64231,64233,64235],{"class":314,"line":34446},[312,64232,325],{"class":324},[312,64234,53586],{"class":328},[312,64236,343],{"class":324},[312,64238,64239,64241,64243,64245,64247,64250],{"class":314,"line":34452},[312,64240,53930],{"class":324},[312,64242,329],{"class":328},[312,64244,333],{"class":332},[312,64246,336],{"class":324},[312,64248,64249],{"class":339},"\"wrapper\"",[312,64251,343],{"class":324},[312,64253,64254,64256,64258,64260,64262,64265,64267,64269],{"class":314,"line":34463},[312,64255,53134],{"class":324},[312,64257,2386],{"class":328},[312,64259,333],{"class":332},[312,64261,336],{"class":324},[312,64263,64264],{"class":339},"\"avatar\"",[312,64266,57096],{"class":324},[312,64268,2386],{"class":328},[312,64270,343],{"class":324},[312,64272,64273,64275,64277,64279,64281,64284,64286,64288,64291,64293,64295,64297,64300,64302,64305,64307,64309],{"class":314,"line":34469},[312,64274,53134],{"class":324},[312,64276,56072],{"class":328},[312,64278,16760],{"class":332},[312,64280,336],{"class":324},[312,64282,64283],{"class":339},"\"tx\"",[312,64285,62801],{"class":332},[312,64287,336],{"class":324},[312,64289,64290],{"class":339},"\"发一条友善的评论\"",[312,64292,56095],{"class":332},[312,64294,336],{"class":324},[312,64296,5506],{"class":339},[312,64298,64299],{"class":332}," maxlength",[312,64301,336],{"class":324},[312,64303,64304],{"class":339},"\"200\"",[312,64306,57096],{"class":324},[312,64308,56072],{"class":328},[312,64310,343],{"class":324},[312,64312,64313,64315,64317,64320,64322],{"class":314,"line":34489},[312,64314,53134],{"class":324},[312,64316,55671],{"class":328},[312,64318,64319],{"class":324},">发布\u003C\u002F",[312,64321,55671],{"class":328},[312,64323,343],{"class":324},[312,64325,64326,64328,64330],{"class":314,"line":34495},[312,64327,54203],{"class":324},[312,64329,329],{"class":328},[312,64331,343],{"class":324},[312,64333,64334,64336,64338,64340,64342,64344],{"class":314,"line":34506},[312,64335,53930],{"class":324},[312,64337,329],{"class":328},[312,64339,333],{"class":332},[312,64341,336],{"class":324},[312,64343,64249],{"class":339},[312,64345,343],{"class":324},[312,64347,64348,64350,64352,64354,64356,64359,64362,64364],{"class":314,"line":34512},[312,64349,53134],{"class":324},[312,64351,312],{"class":328},[312,64353,333],{"class":332},[312,64355,336],{"class":324},[312,64357,64358],{"class":339},"\"total\"",[312,64360,64361],{"class":324},">0\u002F200字\u003C\u002F",[312,64363,312],{"class":328},[312,64365,343],{"class":324},[312,64367,64368,64370,64372],{"class":314,"line":34518},[312,64369,54203],{"class":324},[312,64371,329],{"class":328},[312,64373,343],{"class":324},[312,64375,64376,64378,64380,64382,64384,64387],{"class":314,"line":34524},[312,64377,53930],{"class":324},[312,64379,329],{"class":328},[312,64381,333],{"class":332},[312,64383,336],{"class":324},[312,64385,64386],{"class":339},"\"list\"",[312,64388,343],{"class":324},[312,64390,64391,64393,64395,64397,64399,64402,64405,64407,64410],{"class":314,"line":34530},[312,64392,53134],{"class":324},[312,64394,329],{"class":328},[312,64396,333],{"class":332},[312,64398,336],{"class":324},[312,64400,64401],{"class":339},"\"item\"",[312,64403,64404],{"class":332}," style",[312,64406,336],{"class":324},[312,64408,64409],{"class":339},"\"display: none;\"",[312,64411,343],{"class":324},[312,64413,64414,64416,64418,64420,64422,64424,64426,64428],{"class":314,"line":34536},[312,64415,57016],{"class":324},[312,64417,2386],{"class":328},[312,64419,333],{"class":332},[312,64421,336],{"class":324},[312,64423,64264],{"class":339},[312,64425,57096],{"class":324},[312,64427,2386],{"class":328},[312,64429,343],{"class":324},[312,64431,64432,64434,64436,64438,64440,64443],{"class":314,"line":34542},[312,64433,57016],{"class":324},[312,64435,329],{"class":328},[312,64437,333],{"class":332},[312,64439,336],{"class":324},[312,64441,64442],{"class":339},"\"info\"",[312,64444,343],{"class":324},[312,64446,64447,64449,64451,64453,64455,64458,64461,64463],{"class":314,"line":34548},[312,64448,57084],{"class":324},[312,64450,24],{"class":328},[312,64452,333],{"class":332},[312,64454,336],{"class":324},[312,64456,64457],{"class":339},"\"name\"",[312,64459,64460],{"class":324},">清风徐来\u003C\u002F",[312,64462,24],{"class":328},[312,64464,343],{"class":324},[312,64466,64467,64469,64471,64473,64475,64478,64481,64483],{"class":314,"line":34568},[312,64468,57084],{"class":324},[312,64470,24],{"class":328},[312,64472,333],{"class":332},[312,64474,336],{"class":324},[312,64476,64477],{"class":339},"\"text\"",[312,64479,64480],{"class":324},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[312,64482,24],{"class":328},[312,64484,343],{"class":324},[312,64486,64487,64489,64491,64493,64495,64498,64501,64503],{"class":314,"line":34574},[312,64488,57084],{"class":324},[312,64490,24],{"class":328},[312,64492,333],{"class":332},[312,64494,336],{"class":324},[312,64496,64497],{"class":339},"\"time\"",[312,64499,64500],{"class":324},">2022-10-10 20:29:21\u003C\u002F",[312,64502,24],{"class":328},[312,64504,343],{"class":324},[312,64506,64507,64509,64511],{"class":314,"line":34590},[312,64508,57189],{"class":324},[312,64510,329],{"class":328},[312,64512,343],{"class":324},[312,64514,64515,64517,64519],{"class":314,"line":34596},[312,64516,53563],{"class":324},[312,64518,329],{"class":328},[312,64520,343],{"class":324},[312,64522,64523,64525,64527],{"class":314,"line":34610},[312,64524,54203],{"class":324},[312,64526,329],{"class":328},[312,64528,343],{"class":324},[312,64530,64531,64533,64535],{"class":314,"line":34616},[312,64532,53930],{"class":324},[312,64534,53599],{"class":328},[312,64536,343],{"class":324},[312,64538,64539,64541,64544,64546,64548,64550,64552,64555],{"class":314,"line":34631},[312,64540,13024],{"class":1436},[312,64542,64543],{"class":488}," tx",[312,64545,15366],{"class":1436},[312,64547,56180],{"class":324},[312,64549,56183],{"class":332},[312,64551,1576],{"class":324},[312,64553,64554],{"class":339},"'#tx'",[312,64556,1959],{"class":324},[312,64558,64559,64561,64564,64566,64568,64570,64572,64575],{"class":314,"line":34637},[312,64560,13024],{"class":1436},[312,64562,64563],{"class":488}," total",[312,64565,15366],{"class":1436},[312,64567,56180],{"class":324},[312,64569,56183],{"class":332},[312,64571,1576],{"class":324},[312,64573,64574],{"class":339},"'.total'",[312,64576,1959],{"class":324},[312,64578,64579],{"class":314,"line":34646},[312,64580,64581],{"class":318},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[312,64583,64584,64587,64589,64591,64593,64595,64597],{"class":314,"line":34652},[312,64585,64586],{"class":324},"    tx.",[312,64588,59595],{"class":332},[312,64590,1576],{"class":324},[312,64592,63107],{"class":339},[312,64594,733],{"class":324},[312,64596,56233],{"class":1436},[312,64598,56236],{"class":324},[312,64600,64601,64604,64606],{"class":314,"line":34661},[312,64602,64603],{"class":324},"      total.style.opacity ",[312,64605,336],{"class":1436},[312,64607,57481],{"class":488},[312,64609,64610],{"class":314,"line":34667},[312,64611,35256],{"class":324},[312,64613,64614],{"class":314,"line":34673},[312,64615,64616],{"class":318},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[312,64618,64619,64621,64623,64625,64627,64629,64631],{"class":314,"line":34682},[312,64620,64586],{"class":324},[312,64622,59595],{"class":332},[312,64624,1576],{"class":324},[312,64626,63168],{"class":339},[312,64628,733],{"class":324},[312,64630,56233],{"class":1436},[312,64632,56236],{"class":324},[312,64634,64635,64637,64639],{"class":314,"line":34688},[312,64636,64603],{"class":324},[312,64638,336],{"class":1436},[312,64640,49128],{"class":488},[312,64642,64643],{"class":314,"line":34699},[312,64644,35256],{"class":324},[312,64646,64647],{"class":314,"line":34705},[312,64648,64649],{"class":318},"    \u002F\u002F 3. 检测用户输入\n",[312,64651,64652,64654,64656,64658,64661,64663,64665],{"class":314,"line":34724},[312,64653,64586],{"class":324},[312,64655,59595],{"class":332},[312,64657,1576],{"class":324},[312,64659,64660],{"class":339},"'input'",[312,64662,733],{"class":324},[312,64664,56233],{"class":1436},[312,64666,56236],{"class":324},[312,64668,64669],{"class":314,"line":34730},[312,64670,64671],{"class":318},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[312,64673,64674,64677,64679,64682,64685,64687,64690,64692,64694],{"class":314,"line":34741},[312,64675,64676],{"class":324},"      total.innerHTML ",[312,64678,336],{"class":1436},[312,64680,64681],{"class":339}," `${",[312,64683,64684],{"class":324},"tx",[312,64686,2503],{"class":339},[312,64688,64689],{"class":324},"value",[312,64691,2503],{"class":339},[312,64693,53754],{"class":488},[312,64695,64696],{"class":339},"}\u002F200字`\n",[312,64698,64699],{"class":314,"line":34747},[312,64700,35256],{"class":324},[312,64702,64703],{"class":314,"line":34767},[312,64704,4205],{"emptyLinePlaceholder":1881},[312,64706,64707],{"class":314,"line":34783},[312,64708,64709],{"class":318},"    \u002F\u002F const str = 'andy'\n",[312,64711,64712],{"class":314,"line":34789},[312,64713,64714],{"class":318},"    \u002F\u002F console.log(str.length)\n",[312,64716,64717,64719,64721],{"class":314,"line":34803},[312,64718,54203],{"class":324},[312,64720,53599],{"class":328},[312,64722,343],{"class":324},[312,64724,64725,64727,64729],{"class":314,"line":34809},[312,64726,353],{"class":324},[312,64728,53586],{"class":328},[312,64730,343],{"class":324},[312,64732,64733],{"class":314,"line":34815},[312,64734,4205],{"emptyLinePlaceholder":1881},[312,64736,64737,64739,64741],{"class":314,"line":34826},[312,64738,353],{"class":324},[312,64740,52430],{"class":328},[312,64742,343],{"class":324},[23796,64744,64746],{"id":64745},"_3254-change事件","3.2.5.4 change事件",[24,64748,64749],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[24,64751,64752],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[24,64754,64755],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[303,64757,64759],{"className":52428,"code":64758,"language":52430,"meta":308,"style":308},"\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",[119,64760,64761,64771,64785,64789,64797,64811,64831,64843,64851,64855,64863,64877,64885,64903,64921,64933,64937,64945,64953,64957],{"__ignoreMap":308},[312,64762,64763,64765,64767,64769],{"class":314,"line":315},[312,64764,53092],{"class":324},[312,64766,53095],{"class":328},[312,64768,53098],{"class":332},[312,64770,343],{"class":324},[312,64772,64773,64775,64777,64779,64781,64783],{"class":314,"line":171},[312,64774,325],{"class":324},[312,64776,52430],{"class":328},[312,64778,53109],{"class":332},[312,64780,336],{"class":324},[312,64782,53114],{"class":339},[312,64784,343],{"class":324},[312,64786,64787],{"class":314,"line":274},[312,64788,4205],{"emptyLinePlaceholder":1881},[312,64790,64791,64793,64795],{"class":314,"line":298},[312,64792,325],{"class":324},[312,64794,53127],{"class":328},[312,64796,343],{"class":324},[312,64798,64799,64801,64803,64805,64807,64809],{"class":314,"line":974},[312,64800,53930],{"class":324},[312,64802,53137],{"class":328},[312,64804,53140],{"class":332},[312,64806,336],{"class":324},[312,64808,53145],{"class":339},[312,64810,343],{"class":324},[312,64812,64813,64815,64817,64819,64821,64823,64825,64827,64829],{"class":314,"line":980},[312,64814,53930],{"class":324},[312,64816,53137],{"class":328},[312,64818,16721],{"class":332},[312,64820,336],{"class":324},[312,64822,53184],{"class":339},[312,64824,53164],{"class":332},[312,64826,336],{"class":324},[312,64828,53191],{"class":339},[312,64830,343],{"class":324},[312,64832,64833,64835,64837,64839,64841],{"class":314,"line":997},[312,64834,53930],{"class":324},[312,64836,628],{"class":328},[312,64838,53202],{"class":324},[312,64840,628],{"class":328},[312,64842,343],{"class":324},[312,64844,64845,64847,64849],{"class":314,"line":1003},[312,64846,353],{"class":324},[312,64848,53127],{"class":328},[312,64850,343],{"class":324},[312,64852,64853],{"class":314,"line":1020},[312,64854,4205],{"emptyLinePlaceholder":1881},[312,64856,64857,64859,64861],{"class":314,"line":1026},[312,64858,325],{"class":324},[312,64860,53586],{"class":328},[312,64862,343],{"class":324},[312,64864,64865,64867,64869,64871,64873,64875],{"class":314,"line":3418},[312,64866,53930],{"class":324},[312,64868,55605],{"class":328},[312,64870,55608],{"class":332},[312,64872,336],{"class":324},[312,64874,64477],{"class":339},[312,64876,343],{"class":324},[312,64878,64879,64881,64883],{"class":314,"line":3423},[312,64880,53930],{"class":324},[312,64882,53599],{"class":328},[312,64884,343],{"class":324},[312,64886,64887,64889,64891,64893,64895,64897,64899,64901],{"class":314,"line":3429},[312,64888,13024],{"class":1436},[312,64890,62387],{"class":488},[312,64892,15366],{"class":1436},[312,64894,56180],{"class":324},[312,64896,56183],{"class":332},[312,64898,1576],{"class":324},[312,64900,64660],{"class":339},[312,64902,1959],{"class":324},[312,64904,64905,64908,64910,64912,64915,64917,64919],{"class":314,"line":3434},[312,64906,64907],{"class":324},"    input.",[312,64909,59595],{"class":332},[312,64911,1576],{"class":324},[312,64913,64914],{"class":339},"'change'",[312,64916,733],{"class":324},[312,64918,56233],{"class":1436},[312,64920,56236],{"class":324},[312,64922,64923,64925,64927,64929,64931],{"class":314,"line":3448},[312,64924,60026],{"class":324},[312,64926,60029],{"class":332},[312,64928,1576],{"class":324},[312,64930,2538],{"class":488},[312,64932,1959],{"class":324},[312,64934,64935],{"class":314,"line":3453},[312,64936,35256],{"class":324},[312,64938,64939,64941,64943],{"class":314,"line":3459},[312,64940,54203],{"class":324},[312,64942,53599],{"class":328},[312,64944,343],{"class":324},[312,64946,64947,64949,64951],{"class":314,"line":3480},[312,64948,353],{"class":324},[312,64950,53586],{"class":328},[312,64952,343],{"class":324},[312,64954,64955],{"class":314,"line":3485},[312,64956,4205],{"emptyLinePlaceholder":1881},[312,64958,64959,64961,64963],{"class":314,"line":3499},[312,64960,353],{"class":324},[312,64962,52430],{"class":328},[312,64964,343],{"class":324},[24,64966,64967],{},"总结：内容发生改变才回去触发",[69,64969,64971],{"id":64970},"_326-事件对象","3.2.6 事件对象",[23796,64973,64975],{"id":64974},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[24,64977,64978],{},[19,64979],{"alt":308,"src":64980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[24,64982,64983],{},[19,64984],{"alt":308,"src":64985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[24,64987,64988],{},"点击一次，就输出了事件对象，它是个对象",[24,64990,64991],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[24,64993,64994],{},[19,64995],{"alt":308,"src":64996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[23796,64998,65000],{"id":64999},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[24,65002,65003],{},[19,65004],{"alt":308,"src":65005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[24,65007,65008],{},"实现按特殊字符才是实现打印输出效果：",[303,65010,65012],{"className":54853,"code":65011,"language":54855,"meta":308,"style":308},"\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",[119,65013,65014,65022,65027,65041,65049,65054,65059,65064,65069,65074,65079,65084,65089,65094,65098,65102,65110],{"__ignoreMap":308},[312,65015,65016,65018,65020],{"class":314,"line":315},[312,65017,325],{"class":324},[312,65019,53586],{"class":328},[312,65021,343],{"class":324},[312,65023,65024],{"class":314,"line":171},[312,65025,65026],{"class":318},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[312,65028,65029,65031,65033,65035,65037,65039],{"class":314,"line":274},[312,65030,53930],{"class":324},[312,65032,55605],{"class":328},[312,65034,55608],{"class":332},[312,65036,336],{"class":324},[312,65038,64477],{"class":339},[312,65040,343],{"class":324},[312,65042,65043,65045,65047],{"class":314,"line":298},[312,65044,53930],{"class":324},[312,65046,53599],{"class":328},[312,65048,343],{"class":324},[312,65050,65051],{"class":314,"line":974},[312,65052,65053],{"class":324},"    \u002F\u002F const btn = document.querySelector('button')\n",[312,65055,65056],{"class":314,"line":980},[312,65057,65058],{"class":324},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[312,65060,65061],{"class":314,"line":997},[312,65062,65063],{"class":324},"    \u002F\u002F   console.log(e);\n",[312,65065,65066],{"class":314,"line":1003},[312,65067,65068],{"class":324},"    \u002F\u002F })\n",[312,65070,65071],{"class":314,"line":1020},[312,65072,65073],{"class":324},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[312,65075,65076],{"class":314,"line":1026},[312,65077,65078],{"class":324},"    const input = document.querySelector('input')\n",[312,65080,65081],{"class":314,"line":3418},[312,65082,65083],{"class":324},"    input.addEventListener('keyup', function (e) {\n",[312,65085,65086],{"class":314,"line":3423},[312,65087,65088],{"class":324},"      if (e.key === 'Enter') {\n",[312,65090,65091],{"class":314,"line":3429},[312,65092,65093],{"class":324},"        console.log('我按下了回车键')\n",[312,65095,65096],{"class":314,"line":3434},[312,65097,54184],{"class":324},[312,65099,65100],{"class":314,"line":3448},[312,65101,35256],{"class":324},[312,65103,65104,65106,65108],{"class":314,"line":3453},[312,65105,54203],{"class":324},[312,65107,53599],{"class":328},[312,65109,343],{"class":324},[312,65111,65112,65114,65116],{"class":314,"line":3459},[312,65113,353],{"class":324},[312,65115,53586],{"class":328},[312,65117,343],{"class":324},[23796,65119,65121],{"id":65120},"_3263-trim方法","3.2.6.3 trim方法",[24,65123,65124],{},[19,65125],{"alt":308,"src":65126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[24,65128,65129],{},[19,65130],{"alt":308,"src":65131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[24,65133,65134],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[24,65136,65137],{},"str.trim()",[69,65139,65141],{"id":65140},"_327-环境对象","3.2.7 环境对象",[24,65143,65144],{},[19,65145],{"alt":308,"src":65146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[24,65148,65149],{},[19,65150],{"alt":308,"src":65151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[24,65153,65154],{},[19,65155],{"alt":308,"src":65156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[24,65158,65159],{},"实际函数调用是window.fn()",[24,65161,65162],{},"普通函数里面this指向的是window",[243,65164,65165,65168,65171],{},[143,65166,65167],{},"在普通函数下，this指向的是window",[143,65169,65170],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[143,65172,65173],{},"箭头函数没有this",[24,65175,65176],{},"粗略记法就是：谁调用，this就指向谁",[24,65178,65179],{},[19,65180],{"alt":308,"src":65181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[24,65183,65184],{},[19,65185],{"alt":308,"src":65186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[24,65188,65189],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[24,65191,65192],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[303,65194,65196],{"className":54853,"code":65195,"language":54855,"meta":308,"style":308},"\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",[119,65197,65198,65206,65218,65226,65231,65236,65241,65246,65250,65258],{"__ignoreMap":308},[312,65199,65200,65202,65204],{"class":314,"line":315},[312,65201,325],{"class":324},[312,65203,53586],{"class":328},[312,65205,343],{"class":324},[312,65207,65208,65210,65212,65214,65216],{"class":314,"line":171},[312,65209,53930],{"class":324},[312,65211,55671],{"class":328},[312,65213,55677],{"class":324},[312,65215,55671],{"class":328},[312,65217,343],{"class":324},[312,65219,65220,65222,65224],{"class":314,"line":274},[312,65221,53930],{"class":324},[312,65223,53599],{"class":328},[312,65225,343],{"class":324},[312,65227,65228],{"class":314,"line":298},[312,65229,65230],{"class":324},"    const button = document.querySelector('button')\n",[312,65232,65233],{"class":314,"line":974},[312,65234,65235],{"class":324},"    button.addEventListener('click', function () {\n",[312,65237,65238],{"class":314,"line":980},[312,65239,65240],{"class":324},"      \u002F\u002F console.log(this);\n",[312,65242,65243],{"class":314,"line":997},[312,65244,65245],{"class":324},"      this.style.color = 'pink'\n",[312,65247,65248],{"class":314,"line":1003},[312,65249,35256],{"class":324},[312,65251,65252,65254,65256],{"class":314,"line":1020},[312,65253,54203],{"class":324},[312,65255,53599],{"class":328},[312,65257,343],{"class":324},[312,65259,65260,65262,65264],{"class":314,"line":1026},[312,65261,353],{"class":324},[312,65263,53586],{"class":328},[312,65265,343],{"class":324},[69,65267,65269],{"id":65268},"_328-回调函数","3.2.8 回调函数",[24,65271,65272],{},[19,65273],{"alt":308,"src":65274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[24,65276,65277],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[24,65279,13135],{},[243,65281,65282,65285,65288],{},[143,65283,65284],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[143,65286,65287],{},"回调函数本质还是函数，只不过把它当成参数使用",[143,65289,65290],{},"使用匿名函数做为回调函数比较常见",[69,65292,65294],{"id":65293},"_329-tab栏切换","3.2.9 tab栏切换",[24,65296,65297],{},[19,65298],{"alt":308,"src":65299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[303,65301,65303],{"className":52428,"code":65302,"language":52430,"meta":308,"style":308},"\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",[119,65304,65305,65315,65329,65333,65341,65355,65375,65395,65408,65416,65422,65432,65442,65446,65450,65457,65470,65483,65495,65511,65515,65519,65526,65538,65550,65562,65572,65582,65586,65590,65599,65611,65622,65634,65638,65642,65650,65660,65670,65680,65684,65688,65698,65712,65724,65728,65732,65744,65755,65772,65782,65786,65790,65805,65816,65826,65830,65834,65841,65856,65860,65864,65872,65882,65886,65890,65899,65909,65913,65921,65929,65933,65941,65956,65971,65984,65992,66026,66053,66080,66107,66134,66142,66150,66165,66202,66237,66272,66307,66342,66350,66358,66366,66371,66376,66396,66401,66430,66435,66440,66458,66463,66468,66473,66495,66500,66516,66520,66525,66530,66551,66556,66585,66589,66594,66598,66606,66614,66618],{"__ignoreMap":308},[312,65306,65307,65309,65311,65313],{"class":314,"line":315},[312,65308,53092],{"class":324},[312,65310,53095],{"class":328},[312,65312,53098],{"class":332},[312,65314,343],{"class":324},[312,65316,65317,65319,65321,65323,65325,65327],{"class":314,"line":171},[312,65318,325],{"class":324},[312,65320,52430],{"class":328},[312,65322,53109],{"class":332},[312,65324,336],{"class":324},[312,65326,53114],{"class":339},[312,65328,343],{"class":324},[312,65330,65331],{"class":314,"line":274},[312,65332,4205],{"emptyLinePlaceholder":1881},[312,65334,65335,65337,65339],{"class":314,"line":298},[312,65336,325],{"class":324},[312,65338,53127],{"class":328},[312,65340,343],{"class":324},[312,65342,65343,65345,65347,65349,65351,65353],{"class":314,"line":974},[312,65344,53930],{"class":324},[312,65346,53137],{"class":328},[312,65348,53140],{"class":332},[312,65350,336],{"class":324},[312,65352,53145],{"class":339},[312,65354,60909],{"class":324},[312,65356,65357,65359,65361,65363,65365,65367,65369,65371,65373],{"class":314,"line":980},[312,65358,53930],{"class":324},[312,65360,53137],{"class":328},[312,65362,53156],{"class":332},[312,65364,336],{"class":324},[312,65366,53161],{"class":339},[312,65368,53164],{"class":332},[312,65370,336],{"class":324},[312,65372,53169],{"class":339},[312,65374,60909],{"class":324},[312,65376,65377,65379,65381,65383,65385,65387,65389,65391,65393],{"class":314,"line":997},[312,65378,53930],{"class":324},[312,65380,53137],{"class":328},[312,65382,16721],{"class":332},[312,65384,336],{"class":324},[312,65386,53184],{"class":339},[312,65388,53164],{"class":332},[312,65390,336],{"class":324},[312,65392,53191],{"class":339},[312,65394,60909],{"class":324},[312,65396,65397,65399,65401,65404,65406],{"class":314,"line":1003},[312,65398,53930],{"class":324},[312,65400,628],{"class":328},[312,65402,65403],{"class":324},">tab栏切换\u003C\u002F",[312,65405,628],{"class":328},[312,65407,343],{"class":324},[312,65409,65410,65412,65414],{"class":314,"line":1020},[312,65411,53930],{"class":324},[312,65413,1856],{"class":328},[312,65415,343],{"class":324},[312,65417,65418,65420],{"class":314,"line":1026},[312,65419,8207],{"class":328},[312,65421,483],{"class":324},[312,65423,65424,65426,65428,65430],{"class":314,"line":3418},[312,65425,56490],{"class":488},[312,65427,492],{"class":324},[312,65429,858],{"class":488},[312,65431,498],{"class":324},[312,65433,65434,65436,65438,65440],{"class":314,"line":3423},[312,65435,56479],{"class":488},[312,65437,492],{"class":324},[312,65439,858],{"class":488},[312,65441,498],{"class":324},[312,65443,65444],{"class":314,"line":3429},[312,65445,3992],{"class":324},[312,65447,65448],{"class":314,"line":3434},[312,65449,4205],{"emptyLinePlaceholder":1881},[312,65451,65452,65455],{"class":314,"line":3448},[312,65453,65454],{"class":332},"    .tab",[312,65456,483],{"class":324},[312,65458,65459,65461,65463,65466,65468],{"class":314,"line":3453},[312,65460,56554],{"class":488},[312,65462,492],{"class":324},[312,65464,65465],{"class":488},"590",[312,65467,1437],{"class":1436},[312,65469,498],{"class":324},[312,65471,65472,65474,65476,65479,65481],{"class":314,"line":3459},[312,65473,56568],{"class":488},[312,65475,492],{"class":324},[312,65477,65478],{"class":488},"340",[312,65480,1437],{"class":1436},[312,65482,498],{"class":324},[312,65484,65485,65487,65489,65491,65493],{"class":314,"line":3480},[312,65486,56490],{"class":488},[312,65488,492],{"class":324},[312,65490,1546],{"class":488},[312,65492,1437],{"class":1436},[312,65494,498],{"class":324},[312,65496,65497,65499,65501,65503,65505,65507,65509],{"class":314,"line":3485},[312,65498,63755],{"class":488},[312,65500,492],{"class":324},[312,65502,1433],{"class":488},[312,65504,1437],{"class":1436},[312,65506,1440],{"class":488},[312,65508,64022],{"class":488},[312,65510,498],{"class":324},[312,65512,65513],{"class":314,"line":3499},[312,65514,3992],{"class":324},[312,65516,65517],{"class":314,"line":3504},[312,65518,4205],{"emptyLinePlaceholder":1881},[312,65520,65521,65524],{"class":314,"line":3533},[312,65522,65523],{"class":332},"    .tab-nav",[312,65525,483],{"class":324},[312,65527,65528,65530,65532,65534,65536],{"class":314,"line":3538},[312,65529,56554],{"class":488},[312,65531,492],{"class":324},[312,65533,2256],{"class":488},[312,65535,2273],{"class":1436},[312,65537,498],{"class":324},[312,65539,65540,65542,65544,65546,65548],{"class":314,"line":3555},[312,65541,56568],{"class":488},[312,65543,492],{"class":324},[312,65545,2851],{"class":488},[312,65547,1437],{"class":1436},[312,65549,498],{"class":324},[312,65551,65552,65554,65556,65558,65560],{"class":314,"line":3560},[312,65553,59141],{"class":488},[312,65555,492],{"class":324},[312,65557,2851],{"class":488},[312,65559,1437],{"class":1436},[312,65561,498],{"class":324},[312,65563,65564,65566,65568,65570],{"class":314,"line":3565},[312,65565,56791],{"class":488},[312,65567,492],{"class":324},[312,65569,53268],{"class":488},[312,65571,498],{"class":324},[312,65573,65574,65576,65578,65580],{"class":314,"line":3570},[312,65575,56802],{"class":488},[312,65577,492],{"class":324},[312,65579,53455],{"class":488},[312,65581,498],{"class":324},[312,65583,65584],{"class":314,"line":3584},[312,65585,3992],{"class":324},[312,65587,65588],{"class":314,"line":3589},[312,65589,4205],{"emptyLinePlaceholder":1881},[312,65591,65592,65594,65597],{"class":314,"line":4382},[312,65593,65523],{"class":332},[312,65595,65596],{"class":328}," h3",[312,65598,483],{"class":324},[312,65600,65601,65603,65605,65607,65609],{"class":314,"line":4396},[312,65602,56704],{"class":488},[312,65604,492],{"class":324},[312,65606,2744],{"class":488},[312,65608,1437],{"class":1436},[312,65610,498],{"class":324},[312,65612,65613,65615,65617,65620],{"class":314,"line":4404},[312,65614,64112],{"class":488},[312,65616,492],{"class":324},[312,65618,65619],{"class":488},"normal",[312,65621,498],{"class":324},[312,65623,65624,65626,65628,65630,65632],{"class":314,"line":4409},[312,65625,63778],{"class":488},[312,65627,492],{"class":324},[312,65629,1546],{"class":488},[312,65631,1437],{"class":1436},[312,65633,498],{"class":324},[312,65635,65636],{"class":314,"line":4415},[312,65637,3992],{"class":324},[312,65639,65640],{"class":314,"line":4421},[312,65641,4205],{"emptyLinePlaceholder":1881},[312,65643,65644,65646,65648],{"class":314,"line":4426},[312,65645,65523],{"class":332},[312,65647,63072],{"class":328},[312,65649,483],{"class":324},[312,65651,65652,65654,65656,65658],{"class":314,"line":9751},[312,65653,56516],{"class":488},[312,65655,492],{"class":324},[312,65657,56521],{"class":488},[312,65659,498],{"class":324},[312,65661,65662,65664,65666,65668],{"class":314,"line":9775},[312,65663,56791],{"class":488},[312,65665,492],{"class":324},[312,65667,53268],{"class":488},[312,65669,498],{"class":324},[312,65671,65672,65674,65676,65678],{"class":314,"line":9780},[312,65673,56802],{"class":488},[312,65675,492],{"class":324},[312,65677,53368],{"class":488},[312,65679,498],{"class":324},[312,65681,65682],{"class":314,"line":9786},[312,65683,3992],{"class":324},[312,65685,65686],{"class":314,"line":9813},[312,65687,4205],{"emptyLinePlaceholder":1881},[312,65689,65690,65692,65694,65696],{"class":314,"line":9818},[312,65691,65523],{"class":332},[312,65693,63072],{"class":328},[312,65695,56857],{"class":328},[312,65697,483],{"class":324},[312,65699,65700,65702,65704,65706,65708,65710],{"class":314,"line":9824},[312,65701,56490],{"class":488},[312,65703,492],{"class":324},[312,65705,858],{"class":488},[312,65707,10753],{"class":488},[312,65709,1437],{"class":1436},[312,65711,498],{"class":324},[312,65713,65714,65716,65718,65720,65722],{"class":314,"line":9836},[312,65715,56704],{"class":488},[312,65717,492],{"class":324},[312,65719,2494],{"class":488},[312,65721,1437],{"class":1436},[312,65723,498],{"class":324},[312,65725,65726],{"class":314,"line":9848},[312,65727,3992],{"class":324},[312,65729,65730],{"class":314,"line":9860},[312,65731,4205],{"emptyLinePlaceholder":1881},[312,65733,65734,65736,65738,65740,65742],{"class":314,"line":11519},[312,65735,65523],{"class":332},[312,65737,63072],{"class":328},[312,65739,56857],{"class":328},[312,65741,3206],{"class":328},[312,65743,483],{"class":324},[312,65745,65746,65749,65751,65753],{"class":314,"line":11544},[312,65747,65748],{"class":488},"      text-decoration",[312,65750,492],{"class":324},[312,65752,56521],{"class":488},[312,65754,498],{"class":324},[312,65756,65757,65759,65761,65763,65765,65767,65770],{"class":314,"line":11567},[312,65758,64010],{"class":488},[312,65760,492],{"class":324},[312,65762,2027],{"class":488},[312,65764,1437],{"class":1436},[312,65766,1440],{"class":488},[312,65768,65769],{"class":488}," transparent",[312,65771,498],{"class":324},[312,65773,65774,65776,65778,65780],{"class":314,"line":11591},[312,65775,59198],{"class":488},[312,65777,492],{"class":324},[312,65779,64147],{"class":488},[312,65781,498],{"class":324},[312,65783,65784],{"class":314,"line":11596},[312,65785,3992],{"class":324},[312,65787,65788],{"class":314,"line":11601},[312,65789,4205],{"emptyLinePlaceholder":1881},[312,65791,65792,65794,65796,65798,65800,65803],{"class":314,"line":11606},[312,65793,65523],{"class":332},[312,65795,63072],{"class":328},[312,65797,56857],{"class":328},[312,65799,3206],{"class":328},[312,65801,65802],{"class":332},".active",[312,65804,483],{"class":324},[312,65806,65807,65809,65811,65814],{"class":314,"line":11615},[312,65808,63569],{"class":488},[312,65810,492],{"class":324},[312,65812,65813],{"class":488},"#e1251b",[312,65815,498],{"class":324},[312,65817,65818,65820,65822,65824],{"class":314,"line":11620},[312,65819,59198],{"class":488},[312,65821,492],{"class":324},[312,65823,65813],{"class":488},[312,65825,498],{"class":324},[312,65827,65828],{"class":314,"line":11626},[312,65829,3992],{"class":324},[312,65831,65832],{"class":314,"line":11647},[312,65833,4205],{"emptyLinePlaceholder":1881},[312,65835,65836,65839],{"class":314,"line":11653},[312,65837,65838],{"class":332},"    .tab-content",[312,65840,483],{"class":324},[312,65842,65843,65845,65847,65849,65852,65854],{"class":314,"line":11667},[312,65844,56479],{"class":488},[312,65846,492],{"class":324},[312,65848,858],{"class":488},[312,65850,65851],{"class":488}," 16",[312,65853,1437],{"class":1436},[312,65855,498],{"class":324},[312,65857,65858],{"class":314,"line":11673},[312,65859,3992],{"class":324},[312,65861,65862],{"class":314,"line":11700},[312,65863,4205],{"emptyLinePlaceholder":1881},[312,65865,65866,65868,65870],{"class":314,"line":11709},[312,65867,65838],{"class":332},[312,65869,63952],{"class":332},[312,65871,483],{"class":324},[312,65873,65874,65876,65878,65880],{"class":314,"line":11715},[312,65875,56791],{"class":488},[312,65877,492],{"class":324},[312,65879,56521],{"class":488},[312,65881,498],{"class":324},[312,65883,65884],{"class":314,"line":11723},[312,65885,3992],{"class":324},[312,65887,65888],{"class":314,"line":11728},[312,65889,4205],{"emptyLinePlaceholder":1881},[312,65891,65892,65894,65897],{"class":314,"line":18404},[312,65893,65838],{"class":332},[312,65895,65896],{"class":332}," .item.active",[312,65898,483],{"class":324},[312,65900,65901,65903,65905,65907],{"class":314,"line":18410},[312,65902,56791],{"class":488},[312,65904,492],{"class":324},[312,65906,508],{"class":488},[312,65908,498],{"class":324},[312,65910,65911],{"class":314,"line":18433},[312,65912,3992],{"class":324},[312,65914,65915,65917,65919],{"class":314,"line":18439},[312,65916,54203],{"class":324},[312,65918,1856],{"class":328},[312,65920,343],{"class":324},[312,65922,65923,65925,65927],{"class":314,"line":18462},[312,65924,353],{"class":324},[312,65926,53127],{"class":328},[312,65928,343],{"class":324},[312,65930,65931],{"class":314,"line":18476},[312,65932,4205],{"emptyLinePlaceholder":1881},[312,65934,65935,65937,65939],{"class":314,"line":18496},[312,65936,325],{"class":324},[312,65938,53586],{"class":328},[312,65940,343],{"class":324},[312,65942,65943,65945,65947,65949,65951,65954],{"class":314,"line":18502},[312,65944,53930],{"class":324},[312,65946,329],{"class":328},[312,65948,333],{"class":332},[312,65950,336],{"class":324},[312,65952,65953],{"class":339},"\"tab\"",[312,65955,343],{"class":324},[312,65957,65958,65960,65962,65964,65966,65969],{"class":314,"line":18513},[312,65959,53134],{"class":324},[312,65961,329],{"class":328},[312,65963,333],{"class":332},[312,65965,336],{"class":324},[312,65967,65968],{"class":339},"\"tab-nav\"",[312,65970,343],{"class":324},[312,65972,65973,65975,65977,65980,65982],{"class":314,"line":18536},[312,65974,57016],{"class":324},[312,65976,69],{"class":328},[312,65978,65979],{"class":324},">每日特价\u003C\u002F",[312,65981,69],{"class":328},[312,65983,343],{"class":324},[312,65985,65986,65988,65990],{"class":314,"line":18558},[312,65987,57016],{"class":324},[312,65989,243],{"class":328},[312,65991,343],{"class":324},[312,65993,65994,65996,65998,66000,66002,66004,66006,66008,66010,66012,66015,66018,66020,66022,66024],{"class":314,"line":18563},[312,65995,57084],{"class":324},[312,65997,143],{"class":328},[312,65999,62833],{"class":324},[312,66001,164],{"class":328},[312,66003,333],{"class":332},[312,66005,336],{"class":324},[312,66007,61488],{"class":339},[312,66009,648],{"class":332},[312,66011,336],{"class":324},[312,66013,66014],{"class":339},"\"javascript:;\"",[312,66016,66017],{"class":324},">精选\u003C\u002F",[312,66019,164],{"class":328},[312,66021,57096],{"class":324},[312,66023,143],{"class":328},[312,66025,343],{"class":324},[312,66027,66028,66030,66032,66034,66036,66038,66040,66042,66045,66047,66049,66051],{"class":314,"line":18569},[312,66029,57084],{"class":324},[312,66031,143],{"class":328},[312,66033,62833],{"class":324},[312,66035,164],{"class":328},[312,66037,648],{"class":332},[312,66039,336],{"class":324},[312,66041,66014],{"class":339},[312,66043,66044],{"class":324},">美食\u003C\u002F",[312,66046,164],{"class":328},[312,66048,57096],{"class":324},[312,66050,143],{"class":328},[312,66052,343],{"class":324},[312,66054,66055,66057,66059,66061,66063,66065,66067,66069,66072,66074,66076,66078],{"class":314,"line":18583},[312,66056,57084],{"class":324},[312,66058,143],{"class":328},[312,66060,62833],{"class":324},[312,66062,164],{"class":328},[312,66064,648],{"class":332},[312,66066,336],{"class":324},[312,66068,66014],{"class":339},[312,66070,66071],{"class":324},">百货\u003C\u002F",[312,66073,164],{"class":328},[312,66075,57096],{"class":324},[312,66077,143],{"class":328},[312,66079,343],{"class":324},[312,66081,66082,66084,66086,66088,66090,66092,66094,66096,66099,66101,66103,66105],{"class":314,"line":18596},[312,66083,57084],{"class":324},[312,66085,143],{"class":328},[312,66087,62833],{"class":324},[312,66089,164],{"class":328},[312,66091,648],{"class":332},[312,66093,336],{"class":324},[312,66095,66014],{"class":339},[312,66097,66098],{"class":324},">个护\u003C\u002F",[312,66100,164],{"class":328},[312,66102,57096],{"class":324},[312,66104,143],{"class":328},[312,66106,343],{"class":324},[312,66108,66109,66111,66113,66115,66117,66119,66121,66123,66126,66128,66130,66132],{"class":314,"line":18601},[312,66110,57084],{"class":324},[312,66112,143],{"class":328},[312,66114,62833],{"class":324},[312,66116,164],{"class":328},[312,66118,648],{"class":332},[312,66120,336],{"class":324},[312,66122,66014],{"class":339},[312,66124,66125],{"class":324},">预告\u003C\u002F",[312,66127,164],{"class":328},[312,66129,57096],{"class":324},[312,66131,143],{"class":328},[312,66133,343],{"class":324},[312,66135,66136,66138,66140],{"class":314,"line":18615},[312,66137,57189],{"class":324},[312,66139,243],{"class":328},[312,66141,343],{"class":324},[312,66143,66144,66146,66148],{"class":314,"line":18620},[312,66145,53563],{"class":324},[312,66147,329],{"class":328},[312,66149,343],{"class":324},[312,66151,66152,66154,66156,66158,66160,66163],{"class":314,"line":18626},[312,66153,53134],{"class":324},[312,66155,329],{"class":328},[312,66157,333],{"class":332},[312,66159,336],{"class":324},[312,66161,66162],{"class":339},"\"tab-content\"",[312,66164,343],{"class":324},[312,66166,66167,66169,66171,66173,66175,66178,66180,66182,66184,66186,66189,66191,66193,66195,66198,66200],{"class":314,"line":18631},[312,66168,57016],{"class":324},[312,66170,329],{"class":328},[312,66172,333],{"class":332},[312,66174,336],{"class":324},[312,66176,66177],{"class":339},"\"item active\"",[312,66179,62833],{"class":324},[312,66181,19],{"class":328},[312,66183,57021],{"class":332},[312,66185,336],{"class":324},[312,66187,66188],{"class":339},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[312,66190,57029],{"class":332},[312,66192,336],{"class":324},[312,66194,495],{"class":339},[312,66196,66197],{"class":324}," \u002F>\u003C\u002F",[312,66199,329],{"class":328},[312,66201,343],{"class":324},[312,66203,66204,66206,66208,66210,66212,66214,66216,66218,66220,66222,66225,66227,66229,66231,66233,66235],{"class":314,"line":18645},[312,66205,57016],{"class":324},[312,66207,329],{"class":328},[312,66209,333],{"class":332},[312,66211,336],{"class":324},[312,66213,64401],{"class":339},[312,66215,62833],{"class":324},[312,66217,19],{"class":328},[312,66219,57021],{"class":332},[312,66221,336],{"class":324},[312,66223,66224],{"class":339},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[312,66226,57029],{"class":332},[312,66228,336],{"class":324},[312,66230,495],{"class":339},[312,66232,66197],{"class":324},[312,66234,329],{"class":328},[312,66236,343],{"class":324},[312,66238,66239,66241,66243,66245,66247,66249,66251,66253,66255,66257,66260,66262,66264,66266,66268,66270],{"class":314,"line":18650},[312,66240,57016],{"class":324},[312,66242,329],{"class":328},[312,66244,333],{"class":332},[312,66246,336],{"class":324},[312,66248,64401],{"class":339},[312,66250,62833],{"class":324},[312,66252,19],{"class":328},[312,66254,57021],{"class":332},[312,66256,336],{"class":324},[312,66258,66259],{"class":339},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[312,66261,57029],{"class":332},[312,66263,336],{"class":324},[312,66265,495],{"class":339},[312,66267,66197],{"class":324},[312,66269,329],{"class":328},[312,66271,343],{"class":324},[312,66273,66274,66276,66278,66280,66282,66284,66286,66288,66290,66292,66295,66297,66299,66301,66303,66305],{"class":314,"line":18655},[312,66275,57016],{"class":324},[312,66277,329],{"class":328},[312,66279,333],{"class":332},[312,66281,336],{"class":324},[312,66283,64401],{"class":339},[312,66285,62833],{"class":324},[312,66287,19],{"class":328},[312,66289,57021],{"class":332},[312,66291,336],{"class":324},[312,66293,66294],{"class":339},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[312,66296,57029],{"class":332},[312,66298,336],{"class":324},[312,66300,495],{"class":339},[312,66302,66197],{"class":324},[312,66304,329],{"class":328},[312,66306,343],{"class":324},[312,66308,66309,66311,66313,66315,66317,66319,66321,66323,66325,66327,66330,66332,66334,66336,66338,66340],{"class":314,"line":18669},[312,66310,57016],{"class":324},[312,66312,329],{"class":328},[312,66314,333],{"class":332},[312,66316,336],{"class":324},[312,66318,64401],{"class":339},[312,66320,62833],{"class":324},[312,66322,19],{"class":328},[312,66324,57021],{"class":332},[312,66326,336],{"class":324},[312,66328,66329],{"class":339},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[312,66331,57029],{"class":332},[312,66333,336],{"class":324},[312,66335,495],{"class":339},[312,66337,66197],{"class":324},[312,66339,329],{"class":328},[312,66341,343],{"class":324},[312,66343,66344,66346,66348],{"class":314,"line":18681},[312,66345,53563],{"class":324},[312,66347,329],{"class":328},[312,66349,343],{"class":324},[312,66351,66352,66354,66356],{"class":314,"line":18686},[312,66353,54203],{"class":324},[312,66355,329],{"class":328},[312,66357,343],{"class":324},[312,66359,66360,66362,66364],{"class":314,"line":18699},[312,66361,53930],{"class":324},[312,66363,53599],{"class":328},[312,66365,343],{"class":324},[312,66367,66368],{"class":314,"line":18704},[312,66369,66370],{"class":318},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[312,66372,66373],{"class":314,"line":18709},[312,66374,66375],{"class":318},"    \u002F\u002F 1.1 获取 a 元素 \n",[312,66377,66378,66380,66383,66385,66387,66389,66391,66394],{"class":314,"line":18714},[312,66379,13024],{"class":1436},[312,66381,66382],{"class":488}," as",[312,66384,15366],{"class":1436},[312,66386,56180],{"class":324},[312,66388,57463],{"class":332},[312,66390,1576],{"class":324},[312,66392,66393],{"class":339},"'.tab-nav a'",[312,66395,1959],{"class":324},[312,66397,66398],{"class":314,"line":18727},[312,66399,66400],{"class":318},"    \u002F\u002F console.log(as) \n",[312,66402,66403,66405,66407,66409,66411,66413,66415,66417,66419,66422,66424,66426,66428],{"class":314,"line":18732},[312,66404,5006],{"class":1436},[312,66406,3464],{"class":324},[312,66408,53633],{"class":1436},[312,66410,11241],{"class":324},[312,66412,336],{"class":1436},[312,66414,5898],{"class":488},[312,66416,11248],{"class":324},[312,66418,325],{"class":1436},[312,66420,66421],{"class":324}," as.",[312,66423,53754],{"class":488},[312,66425,5019],{"class":324},[312,66427,4097],{"class":1436},[312,66429,14244],{"class":324},[312,66431,66432],{"class":314,"line":34428},[312,66433,66434],{"class":318},"      \u002F\u002F console.log(as[i])\n",[312,66436,66437],{"class":314,"line":34434},[312,66438,66439],{"class":318},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[312,66441,66442,66445,66447,66449,66452,66454,66456],{"class":314,"line":34440},[312,66443,66444],{"class":324},"      as[i].",[312,66446,59595],{"class":332},[312,66448,1576],{"class":324},[312,66450,66451],{"class":339},"'mouseenter'",[312,66453,733],{"class":324},[312,66455,56233],{"class":1436},[312,66457,56236],{"class":324},[312,66459,66460],{"class":314,"line":34446},[312,66461,66462],{"class":318},"        \u002F\u002F console.log('鼠标经过')\n",[312,66464,66465],{"class":314,"line":34452},[312,66466,66467],{"class":318},"        \u002F\u002F 排他思想  \n",[312,66469,66470],{"class":314,"line":34463},[312,66471,66472],{"class":318},"        \u002F\u002F 干掉别人 移除类active\n",[312,66474,66475,66477,66479,66481,66484,66486,66488,66490,66493],{"class":314,"line":34469},[312,66476,53711],{"class":324},[312,66478,56183],{"class":332},[312,66480,1576],{"class":324},[312,66482,66483],{"class":339},"'.tab-nav .active'",[312,66485,58785],{"class":324},[312,66487,58788],{"class":332},[312,66489,1576],{"class":324},[312,66491,66492],{"class":339},"'active'",[312,66494,1959],{"class":324},[312,66496,66497],{"class":314,"line":34489},[312,66498,66499],{"class":318},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[312,66501,66502,66505,66508,66510,66512,66514],{"class":314,"line":34495},[312,66503,66504],{"class":488},"        this",[312,66506,66507],{"class":324},".classList.",[312,66509,7138],{"class":332},[312,66511,1576],{"class":324},[312,66513,66492],{"class":339},[312,66515,1959],{"class":324},[312,66517,66518],{"class":314,"line":34506},[312,66519,4205],{"emptyLinePlaceholder":1881},[312,66521,66522],{"class":314,"line":34512},[312,66523,66524],{"class":318},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[312,66526,66527],{"class":314,"line":34518},[312,66528,66529],{"class":318},"        \u002F\u002F 干掉别人\n",[312,66531,66532,66534,66536,66538,66541,66543,66545,66547,66549],{"class":314,"line":34524},[312,66533,53711],{"class":324},[312,66535,56183],{"class":332},[312,66537,1576],{"class":324},[312,66539,66540],{"class":339},"'.tab-content .active'",[312,66542,58785],{"class":324},[312,66544,58788],{"class":332},[312,66546,1576],{"class":324},[312,66548,66492],{"class":339},[312,66550,1959],{"class":324},[312,66552,66553],{"class":314,"line":34530},[312,66554,66555],{"class":318},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[312,66557,66558,66560,66562,66564,66567,66569,66571,66573,66575,66577,66579,66581,66583],{"class":314,"line":34536},[312,66559,53711],{"class":324},[312,66561,56183],{"class":332},[312,66563,1576],{"class":324},[312,66565,66566],{"class":339},"`.tab-content .item:nth-child(${",[312,66568,2386],{"class":324},[312,66570,47361],{"class":1436},[312,66572,26914],{"class":488},[312,66574,58814],{"class":339},[312,66576,58785],{"class":324},[312,66578,7138],{"class":332},[312,66580,1576],{"class":324},[312,66582,66492],{"class":339},[312,66584,1959],{"class":324},[312,66586,66587],{"class":314,"line":34542},[312,66588,4205],{"emptyLinePlaceholder":1881},[312,66590,66591],{"class":314,"line":34548},[312,66592,66593],{"class":324},"      })\n",[312,66595,66596],{"class":314,"line":34568},[312,66597,3992],{"class":324},[312,66599,66600,66602,66604],{"class":314,"line":34574},[312,66601,54203],{"class":324},[312,66603,53599],{"class":328},[312,66605,343],{"class":324},[312,66607,66608,66610,66612],{"class":314,"line":34590},[312,66609,353],{"class":324},[312,66611,53586],{"class":328},[312,66613,343],{"class":324},[312,66615,66616],{"class":314,"line":34596},[312,66617,4205],{"emptyLinePlaceholder":1881},[312,66619,66620,66622,66624],{"class":314,"line":34610},[312,66621,353],{"class":324},[312,66623,52430],{"class":328},[312,66625,343],{"class":324},[24,66627,66628],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[24,66630,66631],{},"在监听事件中，this指向的就是他的调用者",[24,66633,66634],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[24,66636,55504],{},[24,66638,66639],{},"(function () {",[24,66641,66642],{},"const list = document.querySelector('.xtx-elevator-list')",[24,66644,66645],{},"list.addEventListener('click', function (e) {",[24,66647,66648],{},"if (e.target.tagName === 'A') {",[24,66650,66651],{},"\u002F\u002F 排他思想",[24,66653,66654],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[24,66656,66657],{},"const old = document.querySelector('.xtx-elevator-list .active')",[24,66659,66660],{},"\u002F\u002F console.log(old);",[24,66662,66663],{},"\u002F\u002F 判断",[24,66665,66666],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[24,66668,66669],{},"if (old) old.classList.remove('active')",[24,66671,66672],{},"e.target.classList.add('active')",[24,66674,2888],{},[24,66676,54250],{},[24,66678,66679],{},"})();",[69,66681,66683],{"id":66682},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[303,66685,66687],{"className":52428,"code":66686,"language":52430,"meta":308,"style":308},"\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",[119,66688,66689,66699,66703,66711,66715,66729,66743,66755,66763,66769,66779,66789,66793,66797,66804,66816,66827,66844,66857,66871,66881,66885,66889,66896,66907,66925,66935,66947,66951,66955,66962,66979,66990,67002,67006,67010,67017,67029,67033,67041,67049,67053,67061,67069,67077,67092,67136,67144,67157,67170,67183,67191,67199,67207,67235,67243,67255,67268,67281,67289,67297,67305,67331,67339,67352,67364,67377,67385,67393,67401,67427,67435,67448,67460,67473,67481,67489,67497,67502,67522,67527,67547,67552,67569,67574,67582,67587,67616,67629,67633,67637,67642,67646,67674,67679,67696,67701,67706,67711,67716,67742,67746,67750,67758,67766,67770],{"__ignoreMap":308},[312,66690,66691,66693,66695,66697],{"class":314,"line":315},[312,66692,53092],{"class":324},[312,66694,53095],{"class":328},[312,66696,53098],{"class":332},[312,66698,343],{"class":324},[312,66700,66701],{"class":314,"line":171},[312,66702,4205],{"emptyLinePlaceholder":1881},[312,66704,66705,66707,66709],{"class":314,"line":274},[312,66706,325],{"class":324},[312,66708,52430],{"class":328},[312,66710,343],{"class":324},[312,66712,66713],{"class":314,"line":298},[312,66714,4205],{"emptyLinePlaceholder":1881},[312,66716,66717,66719,66721,66723,66725,66727],{"class":314,"line":974},[312,66718,325],{"class":324},[312,66720,53127],{"class":328},[312,66722,53109],{"class":332},[312,66724,336],{"class":324},[312,66726,53114],{"class":339},[312,66728,343],{"class":324},[312,66730,66731,66733,66735,66737,66739,66741],{"class":314,"line":980},[312,66732,53930],{"class":324},[312,66734,53137],{"class":328},[312,66736,53140],{"class":332},[312,66738,336],{"class":324},[312,66740,53145],{"class":339},[312,66742,343],{"class":324},[312,66744,66745,66747,66749,66751,66753],{"class":314,"line":997},[312,66746,53930],{"class":324},[312,66748,628],{"class":328},[312,66750,57096],{"class":324},[312,66752,628],{"class":328},[312,66754,343],{"class":324},[312,66756,66757,66759,66761],{"class":314,"line":1003},[312,66758,53930],{"class":324},[312,66760,1856],{"class":328},[312,66762,343],{"class":324},[312,66764,66765,66767],{"class":314,"line":1020},[312,66766,8207],{"class":328},[312,66768,483],{"class":324},[312,66770,66771,66773,66775,66777],{"class":314,"line":1026},[312,66772,56490],{"class":488},[312,66774,492],{"class":324},[312,66776,858],{"class":488},[312,66778,498],{"class":324},[312,66780,66781,66783,66785,66787],{"class":314,"line":3418},[312,66782,56479],{"class":488},[312,66784,492],{"class":324},[312,66786,858],{"class":488},[312,66788,498],{"class":324},[312,66790,66791],{"class":314,"line":3423},[312,66792,3992],{"class":324},[312,66794,66795],{"class":314,"line":3429},[312,66796,4205],{"emptyLinePlaceholder":1881},[312,66798,66799,66802],{"class":314,"line":3434},[312,66800,66801],{"class":328},"    table",[312,66803,483],{"class":324},[312,66805,66806,66809,66811,66814],{"class":314,"line":3448},[312,66807,66808],{"class":488},"      border-collapse",[312,66810,492],{"class":324},[312,66812,66813],{"class":488},"collapse",[312,66815,498],{"class":324},[312,66817,66818,66821,66823,66825],{"class":314,"line":3453},[312,66819,66820],{"class":488},"      border-spacing",[312,66822,492],{"class":324},[312,66824,858],{"class":488},[312,66826,498],{"class":324},[312,66828,66829,66831,66833,66835,66837,66839,66842],{"class":314,"line":3459},[312,66830,63755],{"class":488},[312,66832,492],{"class":324},[312,66834,1433],{"class":488},[312,66836,1437],{"class":1436},[312,66838,1440],{"class":488},[312,66840,66841],{"class":488}," #c0c0c0",[312,66843,498],{"class":324},[312,66845,66846,66848,66850,66853,66855],{"class":314,"line":3480},[312,66847,56554],{"class":488},[312,66849,492],{"class":324},[312,66851,66852],{"class":488},"500",[312,66854,1437],{"class":1436},[312,66856,498],{"class":324},[312,66858,66859,66861,66863,66865,66867,66869],{"class":314,"line":3485},[312,66860,56490],{"class":488},[312,66862,492],{"class":324},[312,66864,2256],{"class":488},[312,66866,1437],{"class":1436},[312,66868,861],{"class":488},[312,66870,498],{"class":324},[312,66872,66873,66875,66877,66879],{"class":314,"line":3499},[312,66874,59068],{"class":488},[312,66876,492],{"class":324},[312,66878,53380],{"class":488},[312,66880,498],{"class":324},[312,66882,66883],{"class":314,"line":3504},[312,66884,3992],{"class":324},[312,66886,66887],{"class":314,"line":3533},[312,66888,4205],{"emptyLinePlaceholder":1881},[312,66890,66891,66894],{"class":314,"line":3538},[312,66892,66893],{"class":328},"    th",[312,66895,483],{"class":324},[312,66897,66898,66900,66902,66905],{"class":314,"line":3555},[312,66899,56666],{"class":488},[312,66901,492],{"class":324},[312,66903,66904],{"class":488},"#09c",[312,66906,498],{"class":324},[312,66908,66909,66912,66914,66916,66918,66920,66923],{"class":314,"line":3560},[312,66910,66911],{"class":488},"      font",[312,66913,492],{"class":324},[312,66915,64117],{"class":488},[312,66917,65851],{"class":488},[312,66919,1437],{"class":1436},[312,66921,66922],{"class":339}," \"微软雅黑\"",[312,66924,498],{"class":324},[312,66926,66927,66929,66931,66933],{"class":314,"line":3565},[312,66928,59198],{"class":488},[312,66930,492],{"class":324},[312,66932,62624],{"class":488},[312,66934,498],{"class":324},[312,66936,66937,66939,66941,66943,66945],{"class":314,"line":3570},[312,66938,56568],{"class":488},[312,66940,492],{"class":324},[312,66942,2744],{"class":488},[312,66944,1437],{"class":1436},[312,66946,498],{"class":324},[312,66948,66949],{"class":314,"line":3584},[312,66950,3992],{"class":324},[312,66952,66953],{"class":314,"line":3589},[312,66954,4205],{"emptyLinePlaceholder":1881},[312,66956,66957,66960],{"class":314,"line":4382},[312,66958,66959],{"class":328},"    td",[312,66961,483],{"class":324},[312,66963,66964,66966,66968,66970,66972,66974,66977],{"class":314,"line":4396},[312,66965,63755],{"class":488},[312,66967,492],{"class":324},[312,66969,1433],{"class":488},[312,66971,1437],{"class":1436},[312,66973,1440],{"class":488},[312,66975,66976],{"class":488}," #d0d0d0",[312,66978,498],{"class":324},[312,66980,66981,66983,66985,66988],{"class":314,"line":4404},[312,66982,59198],{"class":488},[312,66984,492],{"class":324},[312,66986,66987],{"class":488},"#404060",[312,66989,498],{"class":324},[312,66991,66992,66994,66996,66998,67000],{"class":314,"line":4409},[312,66993,56479],{"class":488},[312,66995,492],{"class":324},[312,66997,2391],{"class":488},[312,66999,1437],{"class":1436},[312,67001,498],{"class":324},[312,67003,67004],{"class":314,"line":4415},[312,67005,3992],{"class":324},[312,67007,67008],{"class":314,"line":4421},[312,67009,4205],{"emptyLinePlaceholder":1881},[312,67011,67012,67015],{"class":314,"line":4426},[312,67013,67014],{"class":332},"    .allCheck",[312,67016,483],{"class":324},[312,67018,67019,67021,67023,67025,67027],{"class":314,"line":9751},[312,67020,56554],{"class":488},[312,67022,492],{"class":324},[312,67024,2557],{"class":488},[312,67026,1437],{"class":1436},[312,67028,498],{"class":324},[312,67030,67031],{"class":314,"line":9775},[312,67032,3992],{"class":324},[312,67034,67035,67037,67039],{"class":314,"line":9780},[312,67036,54203],{"class":324},[312,67038,1856],{"class":328},[312,67040,343],{"class":324},[312,67042,67043,67045,67047],{"class":314,"line":9786},[312,67044,353],{"class":324},[312,67046,53127],{"class":328},[312,67048,343],{"class":324},[312,67050,67051],{"class":314,"line":9813},[312,67052,4205],{"emptyLinePlaceholder":1881},[312,67054,67055,67057,67059],{"class":314,"line":9818},[312,67056,325],{"class":324},[312,67058,53586],{"class":328},[312,67060,343],{"class":324},[312,67062,67063,67065,67067],{"class":314,"line":9824},[312,67064,53930],{"class":324},[312,67066,2086],{"class":328},[312,67068,343],{"class":324},[312,67070,67071,67073,67075],{"class":314,"line":9836},[312,67072,53134],{"class":324},[312,67074,2092],{"class":328},[312,67076,343],{"class":324},[312,67078,67079,67081,67083,67085,67087,67090],{"class":314,"line":9848},[312,67080,57016],{"class":324},[312,67082,2095],{"class":328},[312,67084,333],{"class":332},[312,67086,336],{"class":324},[312,67088,67089],{"class":339},"\"allCheck\"",[312,67091,343],{"class":324},[312,67093,67094,67096,67098,67100,67102,67104,67106,67108,67110,67112,67114,67117,67120,67122,67124,67126,67129,67132,67134],{"class":314,"line":9860},[312,67095,57084],{"class":324},[312,67097,55605],{"class":328},[312,67099,55608],{"class":332},[312,67101,336],{"class":324},[312,67103,55613],{"class":339},[312,67105,16721],{"class":332},[312,67107,336],{"class":324},[312,67109,495],{"class":339},[312,67111,16760],{"class":332},[312,67113,336],{"class":324},[312,67115,67116],{"class":339},"\"checkAll\"",[312,67118,67119],{"class":324},"> \u003C",[312,67121,312],{"class":328},[312,67123,333],{"class":332},[312,67125,336],{"class":324},[312,67127,67128],{"class":339},"\"all\"",[312,67130,67131],{"class":324},">全选\u003C\u002F",[312,67133,312],{"class":328},[312,67135,343],{"class":324},[312,67137,67138,67140,67142],{"class":314,"line":11519},[312,67139,57189],{"class":324},[312,67141,2095],{"class":328},[312,67143,343],{"class":324},[312,67145,67146,67148,67150,67153,67155],{"class":314,"line":11544},[312,67147,57016],{"class":324},[312,67149,2095],{"class":328},[312,67151,67152],{"class":324},">商品\u003C\u002F",[312,67154,2095],{"class":328},[312,67156,343],{"class":324},[312,67158,67159,67161,67163,67166,67168],{"class":314,"line":11567},[312,67160,57016],{"class":324},[312,67162,2095],{"class":328},[312,67164,67165],{"class":324},">商家\u003C\u002F",[312,67167,2095],{"class":328},[312,67169,343],{"class":324},[312,67171,67172,67174,67176,67179,67181],{"class":314,"line":11591},[312,67173,57016],{"class":324},[312,67175,2095],{"class":328},[312,67177,67178],{"class":324},">价格\u003C\u002F",[312,67180,2095],{"class":328},[312,67182,343],{"class":324},[312,67184,67185,67187,67189],{"class":314,"line":11596},[312,67186,53563],{"class":324},[312,67188,2092],{"class":328},[312,67190,343],{"class":324},[312,67192,67193,67195,67197],{"class":314,"line":11601},[312,67194,53134],{"class":324},[312,67196,2092],{"class":328},[312,67198,343],{"class":324},[312,67200,67201,67203,67205],{"class":314,"line":11606},[312,67202,57016],{"class":324},[312,67204,2137],{"class":328},[312,67206,343],{"class":324},[312,67208,67209,67211,67213,67215,67217,67219,67221,67223,67226,67228,67230,67233],{"class":314,"line":11615},[312,67210,57084],{"class":324},[312,67212,55605],{"class":328},[312,67214,55608],{"class":332},[312,67216,336],{"class":324},[312,67218,55613],{"class":339},[312,67220,16721],{"class":332},[312,67222,336],{"class":324},[312,67224,67225],{"class":339},"\"check\"",[312,67227,333],{"class":332},[312,67229,336],{"class":324},[312,67231,67232],{"class":339},"\"ck\"",[312,67234,343],{"class":324},[312,67236,67237,67239,67241],{"class":314,"line":11620},[312,67238,57189],{"class":324},[312,67240,2137],{"class":328},[312,67242,343],{"class":324},[312,67244,67245,67247,67249,67251,67253],{"class":314,"line":11626},[312,67246,57016],{"class":324},[312,67248,2137],{"class":328},[312,67250,62953],{"class":324},[312,67252,2137],{"class":328},[312,67254,343],{"class":324},[312,67256,67257,67259,67261,67264,67266],{"class":314,"line":11647},[312,67258,57016],{"class":324},[312,67260,2137],{"class":328},[312,67262,67263],{"class":324},">小米\u003C\u002F",[312,67265,2137],{"class":328},[312,67267,343],{"class":324},[312,67269,67270,67272,67274,67277,67279],{"class":314,"line":11653},[312,67271,57016],{"class":324},[312,67273,2137],{"class":328},[312,67275,67276],{"class":324},">￥1999\u003C\u002F",[312,67278,2137],{"class":328},[312,67280,343],{"class":324},[312,67282,67283,67285,67287],{"class":314,"line":11667},[312,67284,53563],{"class":324},[312,67286,2092],{"class":328},[312,67288,343],{"class":324},[312,67290,67291,67293,67295],{"class":314,"line":11673},[312,67292,53134],{"class":324},[312,67294,2092],{"class":328},[312,67296,343],{"class":324},[312,67298,67299,67301,67303],{"class":314,"line":11700},[312,67300,57016],{"class":324},[312,67302,2137],{"class":328},[312,67304,343],{"class":324},[312,67306,67307,67309,67311,67313,67315,67317,67319,67321,67323,67325,67327,67329],{"class":314,"line":11709},[312,67308,57084],{"class":324},[312,67310,55605],{"class":328},[312,67312,55608],{"class":332},[312,67314,336],{"class":324},[312,67316,55613],{"class":339},[312,67318,16721],{"class":332},[312,67320,336],{"class":324},[312,67322,67225],{"class":339},[312,67324,333],{"class":332},[312,67326,336],{"class":324},[312,67328,67232],{"class":339},[312,67330,343],{"class":324},[312,67332,67333,67335,67337],{"class":314,"line":11715},[312,67334,57189],{"class":324},[312,67336,2137],{"class":328},[312,67338,343],{"class":324},[312,67340,67341,67343,67345,67348,67350],{"class":314,"line":11723},[312,67342,57016],{"class":324},[312,67344,2137],{"class":328},[312,67346,67347],{"class":324},">小米净水器\u003C\u002F",[312,67349,2137],{"class":328},[312,67351,343],{"class":324},[312,67353,67354,67356,67358,67360,67362],{"class":314,"line":11728},[312,67355,57016],{"class":324},[312,67357,2137],{"class":328},[312,67359,67263],{"class":324},[312,67361,2137],{"class":328},[312,67363,343],{"class":324},[312,67365,67366,67368,67370,67373,67375],{"class":314,"line":18404},[312,67367,57016],{"class":324},[312,67369,2137],{"class":328},[312,67371,67372],{"class":324},">￥4999\u003C\u002F",[312,67374,2137],{"class":328},[312,67376,343],{"class":324},[312,67378,67379,67381,67383],{"class":314,"line":18410},[312,67380,53563],{"class":324},[312,67382,2092],{"class":328},[312,67384,343],{"class":324},[312,67386,67387,67389,67391],{"class":314,"line":18433},[312,67388,53134],{"class":324},[312,67390,2092],{"class":328},[312,67392,343],{"class":324},[312,67394,67395,67397,67399],{"class":314,"line":18439},[312,67396,57016],{"class":324},[312,67398,2137],{"class":328},[312,67400,343],{"class":324},[312,67402,67403,67405,67407,67409,67411,67413,67415,67417,67419,67421,67423,67425],{"class":314,"line":18462},[312,67404,57084],{"class":324},[312,67406,55605],{"class":328},[312,67408,55608],{"class":332},[312,67410,336],{"class":324},[312,67412,55613],{"class":339},[312,67414,16721],{"class":332},[312,67416,336],{"class":324},[312,67418,67225],{"class":339},[312,67420,333],{"class":332},[312,67422,336],{"class":324},[312,67424,67232],{"class":339},[312,67426,343],{"class":324},[312,67428,67429,67431,67433],{"class":314,"line":18476},[312,67430,57189],{"class":324},[312,67432,2137],{"class":328},[312,67434,343],{"class":324},[312,67436,67437,67439,67441,67444,67446],{"class":314,"line":18496},[312,67438,57016],{"class":324},[312,67440,2137],{"class":328},[312,67442,67443],{"class":324},">小米电视\u003C\u002F",[312,67445,2137],{"class":328},[312,67447,343],{"class":324},[312,67449,67450,67452,67454,67456,67458],{"class":314,"line":18502},[312,67451,57016],{"class":324},[312,67453,2137],{"class":328},[312,67455,67263],{"class":324},[312,67457,2137],{"class":328},[312,67459,343],{"class":324},[312,67461,67462,67464,67466,67469,67471],{"class":314,"line":18513},[312,67463,57016],{"class":324},[312,67465,2137],{"class":328},[312,67467,67468],{"class":324},">￥5999\u003C\u002F",[312,67470,2137],{"class":328},[312,67472,343],{"class":324},[312,67474,67475,67477,67479],{"class":314,"line":18536},[312,67476,53563],{"class":324},[312,67478,2092],{"class":328},[312,67480,343],{"class":324},[312,67482,67483,67485,67487],{"class":314,"line":18558},[312,67484,54203],{"class":324},[312,67486,2086],{"class":328},[312,67488,343],{"class":324},[312,67490,67491,67493,67495],{"class":314,"line":18563},[312,67492,53930],{"class":324},[312,67494,53599],{"class":328},[312,67496,343],{"class":324},[312,67498,67499],{"class":314,"line":18569},[312,67500,67501],{"class":318},"    \u002F\u002F 1. 获取大复选框\n",[312,67503,67504,67506,67509,67511,67513,67515,67517,67520],{"class":314,"line":18583},[312,67505,13024],{"class":1436},[312,67507,67508],{"class":488}," checkAll",[312,67510,15366],{"class":1436},[312,67512,56180],{"class":324},[312,67514,56183],{"class":332},[312,67516,1576],{"class":324},[312,67518,67519],{"class":339},"'#checkAll'",[312,67521,1959],{"class":324},[312,67523,67524],{"class":314,"line":18596},[312,67525,67526],{"class":318},"    \u002F\u002F 2. 获取所有的小复选框\n",[312,67528,67529,67531,67534,67536,67538,67540,67542,67545],{"class":314,"line":18601},[312,67530,13024],{"class":1436},[312,67532,67533],{"class":488}," cks",[312,67535,15366],{"class":1436},[312,67537,56180],{"class":324},[312,67539,57463],{"class":332},[312,67541,1576],{"class":324},[312,67543,67544],{"class":339},"'.ck'",[312,67546,1959],{"class":324},[312,67548,67549],{"class":314,"line":18615},[312,67550,67551],{"class":318},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[312,67553,67554,67557,67559,67561,67563,67565,67567],{"class":314,"line":18620},[312,67555,67556],{"class":324},"    checkAll.",[312,67558,59595],{"class":332},[312,67560,1576],{"class":324},[312,67562,59600],{"class":339},[312,67564,733],{"class":324},[312,67566,56233],{"class":1436},[312,67568,56236],{"class":324},[312,67570,67571],{"class":314,"line":18626},[312,67572,67573],{"class":318},"      \u002F\u002F 得到当前大复选框的选中状态\n",[312,67575,67576,67579],{"class":314,"line":18631},[312,67577,67578],{"class":318},"      \u002F\u002F console.log(checkAll.checked)",[312,67580,67581],{"class":318},"  \u002F\u002F 得到 是 true 或者是 false\n",[312,67583,67584],{"class":314,"line":18645},[312,67585,67586],{"class":318},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[312,67588,67589,67591,67593,67595,67597,67599,67601,67603,67605,67608,67610,67612,67614],{"class":314,"line":18650},[312,67590,54070],{"class":1436},[312,67592,3464],{"class":324},[312,67594,53633],{"class":1436},[312,67596,11241],{"class":324},[312,67598,336],{"class":1436},[312,67600,5898],{"class":488},[312,67602,11248],{"class":324},[312,67604,325],{"class":1436},[312,67606,67607],{"class":324}," cks.",[312,67609,53754],{"class":488},[312,67611,5019],{"class":324},[312,67613,4097],{"class":1436},[312,67615,14244],{"class":324},[312,67617,67618,67621,67623,67626],{"class":314,"line":18655},[312,67619,67620],{"class":324},"        cks[i].checked ",[312,67622,336],{"class":1436},[312,67624,67625],{"class":488}," this",[312,67627,67628],{"class":324},".checked\n",[312,67630,67631],{"class":314,"line":18669},[312,67632,54184],{"class":324},[312,67634,67635],{"class":314,"line":18681},[312,67636,35256],{"class":324},[312,67638,67639],{"class":314,"line":18686},[312,67640,67641],{"class":318},"    \u002F\u002F 5. 小复选框控制大复选框\n",[312,67643,67644],{"class":314,"line":18699},[312,67645,4205],{"emptyLinePlaceholder":1881},[312,67647,67648,67650,67652,67654,67656,67658,67660,67662,67664,67666,67668,67670,67672],{"class":314,"line":18704},[312,67649,5006],{"class":1436},[312,67651,3464],{"class":324},[312,67653,53633],{"class":1436},[312,67655,11241],{"class":324},[312,67657,336],{"class":1436},[312,67659,5898],{"class":488},[312,67661,11248],{"class":324},[312,67663,325],{"class":1436},[312,67665,67607],{"class":324},[312,67667,53754],{"class":488},[312,67669,5019],{"class":324},[312,67671,4097],{"class":1436},[312,67673,14244],{"class":324},[312,67675,67676],{"class":314,"line":18709},[312,67677,67678],{"class":318},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[312,67680,67681,67684,67686,67688,67690,67692,67694],{"class":314,"line":18714},[312,67682,67683],{"class":324},"      cks[i].",[312,67685,59595],{"class":332},[312,67687,1576],{"class":324},[312,67689,59600],{"class":339},[312,67691,733],{"class":324},[312,67693,56233],{"class":1436},[312,67695,56236],{"class":324},[312,67697,67698],{"class":314,"line":18727},[312,67699,67700],{"class":318},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[312,67702,67703],{"class":314,"line":18732},[312,67704,67705],{"class":318},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[312,67707,67708],{"class":314,"line":34428},[312,67709,67710],{"class":318},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[312,67712,67713],{"class":314,"line":34434},[312,67714,67715],{"class":318},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[312,67717,67718,67721,67723,67725,67727,67729,67732,67734,67736,67738,67740],{"class":314,"line":34440},[312,67719,67720],{"class":324},"        checkAll.checked ",[312,67722,336],{"class":1436},[312,67724,56180],{"class":324},[312,67726,57463],{"class":332},[312,67728,1576],{"class":324},[312,67730,67731],{"class":339},"'.ck:checked'",[312,67733,32622],{"class":324},[312,67735,53754],{"class":488},[312,67737,59688],{"class":1436},[312,67739,67607],{"class":324},[312,67741,57613],{"class":488},[312,67743,67744],{"class":314,"line":34446},[312,67745,66593],{"class":324},[312,67747,67748],{"class":314,"line":34452},[312,67749,3992],{"class":324},[312,67751,67752,67754,67756],{"class":314,"line":34463},[312,67753,54203],{"class":324},[312,67755,53599],{"class":328},[312,67757,343],{"class":324},[312,67759,67760,67762,67764],{"class":314,"line":34469},[312,67761,353],{"class":324},[312,67763,53586],{"class":328},[312,67765,343],{"class":324},[312,67767,67768],{"class":314,"line":34489},[312,67769,4205],{"emptyLinePlaceholder":1881},[312,67771,67772,67774,67776],{"class":314,"line":34495},[312,67773,353],{"class":324},[312,67775,52430],{"class":328},[312,67777,343],{"class":324},[24,67779,67780],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[24,67782,67783],{},"用好之间比较得到的布尔值！！！",[24,67785,67786,67787,67790,67791,3464,67794,2529,67796,67799],{},"在 JS 里访问的时候，",[119,67788,67789],{},"checkbox.checked"," 是一个 ",[27,67792,67793],{},"布尔值",[119,67795,3170],{},[119,67797,67798],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[24,67801,67802,67803,67806,67807],{},"HTML 的 ",[119,67804,67805],{},"checked=\"checked\""," 只是 ",[27,67808,67809,67810,67813],{},"初始值；JS 的 ",[119,67811,67812],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[24,67815,67816],{},"：checked是一个伪类选择器",[24,67818,67819],{},[19,67820],{"alt":308,"src":67821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[24,67823,67824,67827],{},[67825,67826],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[24,67829,67830],{},[19,67831],{"alt":308,"src":67832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,67834,67836],{"id":67835},"_33-dom事件进阶","3.3 DOM事件进阶",[69,67838,67840],{"id":67839},"_331-事件流","3.3.1 事件流",[24,67842,67843],{},[19,67844],{"alt":308,"src":67845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[23796,67847,67849],{"id":67848},"_3311-事件捕获","3.3.1.1 事件捕获",[24,67851,67852],{},[19,67853],{"alt":308,"src":67854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[303,67856,67858],{"className":52428,"code":67857,"language":52430,"meta":308,"style":308},"\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",[119,67859,67860,67870,67884,67888,67896,67910,67930,67942,67950,67957,67969,67981,67991,67995,67999,68006,68018,68030,68040,68044,68052,68060,68064,68072,68087,68106,68114,68122,68142,68162,68178,68189,68197,68214,68225,68233,68250,68261,68269,68277,68285,68289],{"__ignoreMap":308},[312,67861,67862,67864,67866,67868],{"class":314,"line":315},[312,67863,53092],{"class":324},[312,67865,53095],{"class":328},[312,67867,53098],{"class":332},[312,67869,343],{"class":324},[312,67871,67872,67874,67876,67878,67880,67882],{"class":314,"line":171},[312,67873,325],{"class":324},[312,67875,52430],{"class":328},[312,67877,53109],{"class":332},[312,67879,336],{"class":324},[312,67881,53114],{"class":339},[312,67883,343],{"class":324},[312,67885,67886],{"class":314,"line":274},[312,67887,4205],{"emptyLinePlaceholder":1881},[312,67889,67890,67892,67894],{"class":314,"line":298},[312,67891,325],{"class":324},[312,67893,53127],{"class":328},[312,67895,343],{"class":324},[312,67897,67898,67900,67902,67904,67906,67908],{"class":314,"line":974},[312,67899,53930],{"class":324},[312,67901,53137],{"class":328},[312,67903,53140],{"class":332},[312,67905,336],{"class":324},[312,67907,53145],{"class":339},[312,67909,343],{"class":324},[312,67911,67912,67914,67916,67918,67920,67922,67924,67926,67928],{"class":314,"line":980},[312,67913,53930],{"class":324},[312,67915,53137],{"class":328},[312,67917,16721],{"class":332},[312,67919,336],{"class":324},[312,67921,53184],{"class":339},[312,67923,53164],{"class":332},[312,67925,336],{"class":324},[312,67927,53191],{"class":339},[312,67929,343],{"class":324},[312,67931,67932,67934,67936,67938,67940],{"class":314,"line":997},[312,67933,53930],{"class":324},[312,67935,628],{"class":328},[312,67937,53202],{"class":324},[312,67939,628],{"class":328},[312,67941,343],{"class":324},[312,67943,67944,67946,67948],{"class":314,"line":1003},[312,67945,53930],{"class":324},[312,67947,1856],{"class":328},[312,67949,343],{"class":324},[312,67951,67952,67955],{"class":314,"line":1020},[312,67953,67954],{"class":332},"    .father",[312,67956,483],{"class":324},[312,67958,67959,67961,67963,67965,67967],{"class":314,"line":1026},[312,67960,56554],{"class":488},[312,67962,492],{"class":324},[312,67964,66852],{"class":488},[312,67966,1437],{"class":1436},[312,67968,498],{"class":324},[312,67970,67971,67973,67975,67977,67979],{"class":314,"line":3418},[312,67972,56568],{"class":488},[312,67974,492],{"class":324},[312,67976,66852],{"class":488},[312,67978,1437],{"class":1436},[312,67980,498],{"class":324},[312,67982,67983,67985,67987,67989],{"class":314,"line":3423},[312,67984,56666],{"class":488},[312,67986,492],{"class":324},[312,67988,53432],{"class":488},[312,67990,498],{"class":324},[312,67992,67993],{"class":314,"line":3429},[312,67994,3992],{"class":324},[312,67996,67997],{"class":314,"line":3434},[312,67998,4205],{"emptyLinePlaceholder":1881},[312,68000,68001,68004],{"class":314,"line":3448},[312,68002,68003],{"class":332},"    .son",[312,68005,483],{"class":324},[312,68007,68008,68010,68012,68014,68016],{"class":314,"line":3453},[312,68009,56554],{"class":488},[312,68011,492],{"class":324},[312,68013,3528],{"class":488},[312,68015,1437],{"class":1436},[312,68017,498],{"class":324},[312,68019,68020,68022,68024,68026,68028],{"class":314,"line":3459},[312,68021,56568],{"class":488},[312,68023,492],{"class":324},[312,68025,3528],{"class":488},[312,68027,1437],{"class":1436},[312,68029,498],{"class":324},[312,68031,68032,68034,68036,68038],{"class":314,"line":3480},[312,68033,56666],{"class":488},[312,68035,492],{"class":324},[312,68037,56671],{"class":488},[312,68039,498],{"class":324},[312,68041,68042],{"class":314,"line":3485},[312,68043,3992],{"class":324},[312,68045,68046,68048,68050],{"class":314,"line":3499},[312,68047,54203],{"class":324},[312,68049,1856],{"class":328},[312,68051,343],{"class":324},[312,68053,68054,68056,68058],{"class":314,"line":3504},[312,68055,353],{"class":324},[312,68057,53127],{"class":328},[312,68059,343],{"class":324},[312,68061,68062],{"class":314,"line":3533},[312,68063,4205],{"emptyLinePlaceholder":1881},[312,68065,68066,68068,68070],{"class":314,"line":3538},[312,68067,325],{"class":324},[312,68069,53586],{"class":328},[312,68071,343],{"class":324},[312,68073,68074,68076,68078,68080,68082,68085],{"class":314,"line":3555},[312,68075,53930],{"class":324},[312,68077,329],{"class":328},[312,68079,333],{"class":332},[312,68081,336],{"class":324},[312,68083,68084],{"class":339},"\"father\"",[312,68086,343],{"class":324},[312,68088,68089,68091,68093,68095,68097,68100,68102,68104],{"class":314,"line":3560},[312,68090,53134],{"class":324},[312,68092,329],{"class":328},[312,68094,333],{"class":332},[312,68096,336],{"class":324},[312,68098,68099],{"class":339},"\"son\"",[312,68101,57096],{"class":324},[312,68103,329],{"class":328},[312,68105,343],{"class":324},[312,68107,68108,68110,68112],{"class":314,"line":3565},[312,68109,54203],{"class":324},[312,68111,329],{"class":328},[312,68113,343],{"class":324},[312,68115,68116,68118,68120],{"class":314,"line":3570},[312,68117,53930],{"class":324},[312,68119,53599],{"class":328},[312,68121,343],{"class":324},[312,68123,68124,68126,68129,68131,68133,68135,68137,68140],{"class":314,"line":3584},[312,68125,13024],{"class":1436},[312,68127,68128],{"class":488}," fa",[312,68130,15366],{"class":1436},[312,68132,56180],{"class":324},[312,68134,56183],{"class":332},[312,68136,1576],{"class":324},[312,68138,68139],{"class":339},"'.father'",[312,68141,1959],{"class":324},[312,68143,68144,68146,68149,68151,68153,68155,68157,68160],{"class":314,"line":3589},[312,68145,13024],{"class":1436},[312,68147,68148],{"class":488}," son",[312,68150,15366],{"class":1436},[312,68152,56180],{"class":324},[312,68154,56183],{"class":332},[312,68156,1576],{"class":324},[312,68158,68159],{"class":339},"'.son'",[312,68161,1959],{"class":324},[312,68163,68164,68166,68168,68170,68172,68174,68176],{"class":314,"line":4382},[312,68165,54193],{"class":324},[312,68167,59595],{"class":332},[312,68169,1576],{"class":324},[312,68171,59600],{"class":339},[312,68173,733],{"class":324},[312,68175,56233],{"class":1436},[312,68177,56236],{"class":324},[312,68179,68180,68182,68184,68187],{"class":314,"line":4396},[312,68181,60707],{"class":332},[312,68183,1576],{"class":324},[312,68185,68186],{"class":339},"'woshiu1'",[312,68188,1959],{"class":324},[312,68190,68191,68193,68195],{"class":314,"line":4404},[312,68192,56319],{"class":324},[312,68194,3170],{"class":488},[312,68196,1959],{"class":324},[312,68198,68199,68202,68204,68206,68208,68210,68212],{"class":314,"line":4409},[312,68200,68201],{"class":324},"    fa.",[312,68203,59595],{"class":332},[312,68205,1576],{"class":324},[312,68207,59600],{"class":339},[312,68209,733],{"class":324},[312,68211,56233],{"class":1436},[312,68213,56236],{"class":324},[312,68215,68216,68218,68220,68223],{"class":314,"line":4415},[312,68217,60707],{"class":332},[312,68219,1576],{"class":324},[312,68221,68222],{"class":339},"'1'",[312,68224,1959],{"class":324},[312,68226,68227,68229,68231],{"class":314,"line":4421},[312,68228,56319],{"class":324},[312,68230,3170],{"class":488},[312,68232,1959],{"class":324},[312,68234,68235,68238,68240,68242,68244,68246,68248],{"class":314,"line":4426},[312,68236,68237],{"class":324},"    son.",[312,68239,59595],{"class":332},[312,68241,1576],{"class":324},[312,68243,59600],{"class":339},[312,68245,733],{"class":324},[312,68247,56233],{"class":1436},[312,68249,56236],{"class":324},[312,68251,68252,68254,68256,68259],{"class":314,"line":9751},[312,68253,60707],{"class":332},[312,68255,1576],{"class":324},[312,68257,68258],{"class":339},"'2'",[312,68260,1959],{"class":324},[312,68262,68263,68265,68267],{"class":314,"line":9775},[312,68264,56319],{"class":324},[312,68266,3170],{"class":488},[312,68268,1959],{"class":324},[312,68270,68271,68273,68275],{"class":314,"line":9780},[312,68272,54203],{"class":324},[312,68274,53599],{"class":328},[312,68276,343],{"class":324},[312,68278,68279,68281,68283],{"class":314,"line":9786},[312,68280,353],{"class":324},[312,68282,53586],{"class":328},[312,68284,343],{"class":324},[312,68286,68287],{"class":314,"line":9813},[312,68288,4205],{"emptyLinePlaceholder":1881},[312,68290,68291,68293,68295],{"class":314,"line":9818},[312,68292,353],{"class":324},[312,68294,52430],{"class":328},[312,68296,343],{"class":324},[24,68298,68299],{},[19,68300],{"alt":308,"src":68301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[24,68303,68304],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[23796,68306,68308],{"id":68307},"_3312-事件冒泡","3.3.1.2 事件冒泡",[24,68310,68311],{},[19,68312],{"alt":308,"src":68313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[24,68315,68316],{},"反着来",[24,68318,68319],{},"注意是同名事件，比如都是‘click’",[23796,68321,68323],{"id":68322},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[24,68325,68326],{},[19,68327],{"alt":308,"src":68328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[23796,68330,68332],{"id":68331},"_3314-解绑事件","3.3.1.4 解绑事件",[24,68334,68335],{},[19,68336],{"alt":308,"src":68337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[24,68339,68340],{},[19,68341],{"alt":308,"src":68342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[23796,68344,68346],{"id":68345},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[140,68348,68349],{},[143,68350,68351],{},"事件类型的区别",[24,68353,68354],{},[19,68355],{"alt":308,"src":68356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[24,68358,68359],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[140,68361,68362],{"start":171},[143,68363,68364],{},"注册事件的区别",[24,68366,68367],{},[19,68368],{"alt":308,"src":68369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[23796,68371,68373],{"id":68372},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[24,68375,68376],{},[19,68377],{"alt":308,"src":68378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[24,68380,68381],{},[19,68382],{"alt":308,"src":68383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[303,68385,68387],{"className":54853,"code":68386,"language":54855,"meta":308,"style":308},"\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",[119,68388,68389,68397,68414,68437,68445,68450,68455,68460,68464,68472,68480],{"__ignoreMap":308},[312,68390,68391,68393,68395],{"class":314,"line":315},[312,68392,325],{"class":324},[312,68394,53586],{"class":328},[312,68396,343],{"class":324},[312,68398,68399,68401,68404,68407,68409,68412],{"class":314,"line":171},[312,68400,53930],{"class":324},[312,68402,68403],{"class":328},"form",[312,68405,68406],{"class":332}," action",[312,68408,336],{"class":324},[312,68410,68411],{"class":339},"\"http:\u002F\u002Fwww.itcast.cn\"",[312,68413,343],{"class":324},[312,68415,68416,68418,68420,68422,68424,68427,68430,68432,68435],{"class":314,"line":274},[312,68417,53134],{"class":324},[312,68419,55605],{"class":328},[312,68421,55608],{"class":332},[312,68423,336],{"class":324},[312,68425,68426],{"class":339},"\"submit\"",[312,68428,68429],{"class":332}," value",[312,68431,336],{"class":324},[312,68433,68434],{"class":339},"\"免费注册\"",[312,68436,343],{"class":324},[312,68438,68439,68441,68443],{"class":314,"line":298},[312,68440,53134],{"class":324},[312,68442,53599],{"class":328},[312,68444,343],{"class":324},[312,68446,68447],{"class":314,"line":974},[312,68448,68449],{"class":324},"      const form = document.querySelector('form')\n",[312,68451,68452],{"class":314,"line":980},[312,68453,68454],{"class":324},"      form.addEventListener('submit', function (e) {\n",[312,68456,68457],{"class":314,"line":997},[312,68458,68459],{"class":324},"        e.preventDefault()\n",[312,68461,68462],{"class":314,"line":1003},[312,68463,66593],{"class":324},[312,68465,68466,68468,68470],{"class":314,"line":1020},[312,68467,53563],{"class":324},[312,68469,53599],{"class":328},[312,68471,343],{"class":324},[312,68473,68474,68476,68478],{"class":314,"line":1026},[312,68475,54203],{"class":324},[312,68477,68403],{"class":328},[312,68479,343],{"class":324},[312,68481,68482,68484,68486],{"class":314,"line":3418},[312,68483,353],{"class":324},[312,68485,53586],{"class":328},[312,68487,343],{"class":324},[24,68489,68490],{},"点击不在跳转！！！",[69,68492,68494],{"id":68493},"_332-事件委托","3.3.2 事件委托",[24,68496,68497],{},[19,68498],{"alt":308,"src":68499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[303,68501,68503],{"className":52428,"code":68502,"language":52430,"meta":308,"style":308},"\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",[119,68504,68505,68515,68529,68533,68541,68555,68575,68587,68595,68599,68607,68615,68627,68639,68651,68663,68675,68688,68696,68704,68709,68728,68749,68754,68759,68764,68769,68778,68782,68792,68796,68801,68806,68820,68830,68834,68838,68846,68854,68858],{"__ignoreMap":308},[312,68506,68507,68509,68511,68513],{"class":314,"line":315},[312,68508,53092],{"class":324},[312,68510,53095],{"class":328},[312,68512,53098],{"class":332},[312,68514,343],{"class":324},[312,68516,68517,68519,68521,68523,68525,68527],{"class":314,"line":171},[312,68518,325],{"class":324},[312,68520,52430],{"class":328},[312,68522,53109],{"class":332},[312,68524,336],{"class":324},[312,68526,53114],{"class":339},[312,68528,343],{"class":324},[312,68530,68531],{"class":314,"line":274},[312,68532,4205],{"emptyLinePlaceholder":1881},[312,68534,68535,68537,68539],{"class":314,"line":298},[312,68536,325],{"class":324},[312,68538,53127],{"class":328},[312,68540,343],{"class":324},[312,68542,68543,68545,68547,68549,68551,68553],{"class":314,"line":974},[312,68544,53930],{"class":324},[312,68546,53137],{"class":328},[312,68548,53140],{"class":332},[312,68550,336],{"class":324},[312,68552,53145],{"class":339},[312,68554,343],{"class":324},[312,68556,68557,68559,68561,68563,68565,68567,68569,68571,68573],{"class":314,"line":980},[312,68558,53930],{"class":324},[312,68560,53137],{"class":328},[312,68562,16721],{"class":332},[312,68564,336],{"class":324},[312,68566,53184],{"class":339},[312,68568,53164],{"class":332},[312,68570,336],{"class":324},[312,68572,53191],{"class":339},[312,68574,343],{"class":324},[312,68576,68577,68579,68581,68583,68585],{"class":314,"line":997},[312,68578,53930],{"class":324},[312,68580,628],{"class":328},[312,68582,53202],{"class":324},[312,68584,628],{"class":328},[312,68586,343],{"class":324},[312,68588,68589,68591,68593],{"class":314,"line":1003},[312,68590,353],{"class":324},[312,68592,53127],{"class":328},[312,68594,343],{"class":324},[312,68596,68597],{"class":314,"line":1020},[312,68598,4205],{"emptyLinePlaceholder":1881},[312,68600,68601,68603,68605],{"class":314,"line":1026},[312,68602,325],{"class":324},[312,68604,53586],{"class":328},[312,68606,343],{"class":324},[312,68608,68609,68611,68613],{"class":314,"line":3418},[312,68610,53930],{"class":324},[312,68612,243],{"class":328},[312,68614,343],{"class":324},[312,68616,68617,68619,68621,68623,68625],{"class":314,"line":3423},[312,68618,53134],{"class":324},[312,68620,143],{"class":328},[312,68622,55750],{"class":324},[312,68624,143],{"class":328},[312,68626,343],{"class":324},[312,68628,68629,68631,68633,68635,68637],{"class":314,"line":3429},[312,68630,53134],{"class":324},[312,68632,143],{"class":328},[312,68634,55769],{"class":324},[312,68636,143],{"class":328},[312,68638,343],{"class":324},[312,68640,68641,68643,68645,68647,68649],{"class":314,"line":3434},[312,68642,53134],{"class":324},[312,68644,143],{"class":328},[312,68646,55788],{"class":324},[312,68648,143],{"class":328},[312,68650,343],{"class":324},[312,68652,68653,68655,68657,68659,68661],{"class":314,"line":3448},[312,68654,53134],{"class":324},[312,68656,143],{"class":328},[312,68658,55807],{"class":324},[312,68660,143],{"class":328},[312,68662,343],{"class":324},[312,68664,68665,68667,68669,68671,68673],{"class":314,"line":3453},[312,68666,53134],{"class":324},[312,68668,143],{"class":328},[312,68670,55826],{"class":324},[312,68672,143],{"class":328},[312,68674,343],{"class":324},[312,68676,68677,68679,68681,68684,68686],{"class":314,"line":3459},[312,68678,53134],{"class":324},[312,68680,24],{"class":328},[312,68682,68683],{"class":324},">我不需要变色\u003C\u002F",[312,68685,24],{"class":328},[312,68687,343],{"class":324},[312,68689,68690,68692,68694],{"class":314,"line":3480},[312,68691,54203],{"class":324},[312,68693,243],{"class":328},[312,68695,343],{"class":324},[312,68697,68698,68700,68702],{"class":314,"line":3485},[312,68699,53930],{"class":324},[312,68701,53599],{"class":328},[312,68703,343],{"class":324},[312,68705,68706],{"class":314,"line":3499},[312,68707,68708],{"class":318},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[312,68710,68711,68713,68715,68717,68719,68721,68723,68726],{"class":314,"line":3504},[312,68712,13024],{"class":1436},[312,68714,63072],{"class":488},[312,68716,15366],{"class":1436},[312,68718,56180],{"class":324},[312,68720,56183],{"class":332},[312,68722,1576],{"class":324},[312,68724,68725],{"class":339},"'ul'",[312,68727,1959],{"class":324},[312,68729,68730,68733,68735,68737,68739,68741,68743,68745,68747],{"class":314,"line":3533},[312,68731,68732],{"class":324},"    ul.",[312,68734,59595],{"class":332},[312,68736,1576],{"class":324},[312,68738,59600],{"class":339},[312,68740,733],{"class":324},[312,68742,56233],{"class":1436},[312,68744,3464],{"class":324},[312,68746,2024],{"class":1579},[312,68748,14244],{"class":324},[312,68750,68751],{"class":314,"line":3538},[312,68752,68753],{"class":318},"      \u002F\u002F alert(1)\n",[312,68755,68756],{"class":314,"line":3555},[312,68757,68758],{"class":318},"      \u002F\u002F e.target就是我们点击的对象\n",[312,68760,68761],{"class":314,"line":3560},[312,68762,68763],{"class":318},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[312,68765,68766],{"class":314,"line":3565},[312,68767,68768],{"class":318},"      \u002F\u002F e.target.style.color = 'red'\n",[312,68770,68771,68773,68775],{"class":314,"line":3570},[312,68772,60026],{"class":324},[312,68774,60029],{"class":332},[312,68776,68777],{"class":324},"(e)\n",[312,68779,68780],{"class":314,"line":3584},[312,68781,4205],{"emptyLinePlaceholder":1881},[312,68783,68784,68786,68789],{"class":314,"line":3589},[312,68785,60026],{"class":324},[312,68787,68788],{"class":332},"dir",[312,68790,68791],{"class":324},"(e.target)\n",[312,68793,68794],{"class":314,"line":4382},[312,68795,4205],{"emptyLinePlaceholder":1881},[312,68797,68798],{"class":314,"line":4396},[312,68799,68800],{"class":318},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[312,68802,68803],{"class":314,"line":4404},[312,68804,68805],{"class":318},"      \u002F\u002F 通过tagName来进行判断\n",[312,68807,68808,68810,68813,68815,68818],{"class":314,"line":4409},[312,68809,56264],{"class":1436},[312,68811,68812],{"class":324}," (e.target.tagName ",[312,68814,56270],{"class":1436},[312,68816,68817],{"class":339}," 'LI'",[312,68819,14244],{"class":324},[312,68821,68822,68825,68827],{"class":314,"line":4415},[312,68823,68824],{"class":324},"        e.target.style.color ",[312,68826,336],{"class":1436},[312,68828,68829],{"class":339}," 'red'\n",[312,68831,68832],{"class":314,"line":4421},[312,68833,54184],{"class":324},[312,68835,68836],{"class":314,"line":4426},[312,68837,35256],{"class":324},[312,68839,68840,68842,68844],{"class":314,"line":9751},[312,68841,54203],{"class":324},[312,68843,53599],{"class":328},[312,68845,343],{"class":324},[312,68847,68848,68850,68852],{"class":314,"line":9775},[312,68849,353],{"class":324},[312,68851,53586],{"class":328},[312,68853,343],{"class":324},[312,68855,68856],{"class":314,"line":9780},[312,68857,4205],{"emptyLinePlaceholder":1881},[312,68859,68860,68862,68864],{"class":314,"line":9786},[312,68861,353],{"class":324},[312,68863,52430],{"class":328},[312,68865,343],{"class":324},[24,68867,68868],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[24,68870,68871],{},"if(e.target.ragName==='P') {}",[24,68873,68874],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[24,68876,68877],{},"通过事件委托的方式实现tab栏切换改造：",[24,68879,68880],{},"一定要记住自定义属性！！！！！！",[24,68882,68883],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[24,68885,68886],{},"id是自定义的属性名",[24,68888,68889],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[303,68891,68893],{"className":52428,"code":68892,"language":52430,"meta":308,"style":308},"\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",[119,68894,68895,68905,68919,68923,68931,68945,68965,68985,68997,69005,69011,69021,69031,69035,69039,69045,69057,69069,69081,69097,69101,69105,69111,69123,69135,69147,69157,69167,69171,69175,69183,69195,69205,69217,69221,69225,69233,69243,69253,69263,69267,69271,69281,69295,69307,69311,69315,69327,69337,69353,69363,69367,69371,69385,69395,69405,69409,69413,69419,69433,69437,69441,69449,69459,69463,69467,69476,69486,69490,69498,69506,69510,69518,69532,69546,69558,69566,69605,69637,69669,69701,69733,69741,69749,69763,69797,69831,69865,69899,69933,69941,69949,69957,69962,69967,69986,69991,70011,70019,70024,70037,70058,70071,70075,70080,70085,70098,70118,70146,70150,70154,70158,70166,70174,70178],{"__ignoreMap":308},[312,68896,68897,68899,68901,68903],{"class":314,"line":315},[312,68898,53092],{"class":324},[312,68900,53095],{"class":328},[312,68902,53098],{"class":332},[312,68904,343],{"class":324},[312,68906,68907,68909,68911,68913,68915,68917],{"class":314,"line":171},[312,68908,325],{"class":324},[312,68910,52430],{"class":328},[312,68912,53109],{"class":332},[312,68914,336],{"class":324},[312,68916,53114],{"class":339},[312,68918,343],{"class":324},[312,68920,68921],{"class":314,"line":274},[312,68922,4205],{"emptyLinePlaceholder":1881},[312,68924,68925,68927,68929],{"class":314,"line":298},[312,68926,325],{"class":324},[312,68928,53127],{"class":328},[312,68930,343],{"class":324},[312,68932,68933,68935,68937,68939,68941,68943],{"class":314,"line":974},[312,68934,53930],{"class":324},[312,68936,53137],{"class":328},[312,68938,53140],{"class":332},[312,68940,336],{"class":324},[312,68942,53145],{"class":339},[312,68944,60909],{"class":324},[312,68946,68947,68949,68951,68953,68955,68957,68959,68961,68963],{"class":314,"line":980},[312,68948,53930],{"class":324},[312,68950,53137],{"class":328},[312,68952,53156],{"class":332},[312,68954,336],{"class":324},[312,68956,53161],{"class":339},[312,68958,53164],{"class":332},[312,68960,336],{"class":324},[312,68962,53169],{"class":339},[312,68964,60909],{"class":324},[312,68966,68967,68969,68971,68973,68975,68977,68979,68981,68983],{"class":314,"line":997},[312,68968,53930],{"class":324},[312,68970,53137],{"class":328},[312,68972,16721],{"class":332},[312,68974,336],{"class":324},[312,68976,53184],{"class":339},[312,68978,53164],{"class":332},[312,68980,336],{"class":324},[312,68982,53191],{"class":339},[312,68984,60909],{"class":324},[312,68986,68987,68989,68991,68993,68995],{"class":314,"line":1003},[312,68988,53930],{"class":324},[312,68990,628],{"class":328},[312,68992,65403],{"class":324},[312,68994,628],{"class":328},[312,68996,343],{"class":324},[312,68998,68999,69001,69003],{"class":314,"line":1020},[312,69000,53930],{"class":324},[312,69002,1856],{"class":328},[312,69004,343],{"class":324},[312,69006,69007,69009],{"class":314,"line":1026},[312,69008,8207],{"class":328},[312,69010,483],{"class":324},[312,69012,69013,69015,69017,69019],{"class":314,"line":3418},[312,69014,56490],{"class":488},[312,69016,492],{"class":324},[312,69018,858],{"class":488},[312,69020,498],{"class":324},[312,69022,69023,69025,69027,69029],{"class":314,"line":3423},[312,69024,56479],{"class":488},[312,69026,492],{"class":324},[312,69028,858],{"class":488},[312,69030,498],{"class":324},[312,69032,69033],{"class":314,"line":3429},[312,69034,3992],{"class":324},[312,69036,69037],{"class":314,"line":3434},[312,69038,4205],{"emptyLinePlaceholder":1881},[312,69040,69041,69043],{"class":314,"line":3448},[312,69042,65454],{"class":332},[312,69044,483],{"class":324},[312,69046,69047,69049,69051,69053,69055],{"class":314,"line":3453},[312,69048,56554],{"class":488},[312,69050,492],{"class":324},[312,69052,65465],{"class":488},[312,69054,1437],{"class":1436},[312,69056,498],{"class":324},[312,69058,69059,69061,69063,69065,69067],{"class":314,"line":3459},[312,69060,56568],{"class":488},[312,69062,492],{"class":324},[312,69064,65478],{"class":488},[312,69066,1437],{"class":1436},[312,69068,498],{"class":324},[312,69070,69071,69073,69075,69077,69079],{"class":314,"line":3480},[312,69072,56490],{"class":488},[312,69074,492],{"class":324},[312,69076,1546],{"class":488},[312,69078,1437],{"class":1436},[312,69080,498],{"class":324},[312,69082,69083,69085,69087,69089,69091,69093,69095],{"class":314,"line":3485},[312,69084,63755],{"class":488},[312,69086,492],{"class":324},[312,69088,1433],{"class":488},[312,69090,1437],{"class":1436},[312,69092,1440],{"class":488},[312,69094,64022],{"class":488},[312,69096,498],{"class":324},[312,69098,69099],{"class":314,"line":3499},[312,69100,3992],{"class":324},[312,69102,69103],{"class":314,"line":3504},[312,69104,4205],{"emptyLinePlaceholder":1881},[312,69106,69107,69109],{"class":314,"line":3533},[312,69108,65523],{"class":332},[312,69110,483],{"class":324},[312,69112,69113,69115,69117,69119,69121],{"class":314,"line":3538},[312,69114,56554],{"class":488},[312,69116,492],{"class":324},[312,69118,2256],{"class":488},[312,69120,2273],{"class":1436},[312,69122,498],{"class":324},[312,69124,69125,69127,69129,69131,69133],{"class":314,"line":3555},[312,69126,56568],{"class":488},[312,69128,492],{"class":324},[312,69130,2851],{"class":488},[312,69132,1437],{"class":1436},[312,69134,498],{"class":324},[312,69136,69137,69139,69141,69143,69145],{"class":314,"line":3560},[312,69138,59141],{"class":488},[312,69140,492],{"class":324},[312,69142,2851],{"class":488},[312,69144,1437],{"class":1436},[312,69146,498],{"class":324},[312,69148,69149,69151,69153,69155],{"class":314,"line":3565},[312,69150,56791],{"class":488},[312,69152,492],{"class":324},[312,69154,53268],{"class":488},[312,69156,498],{"class":324},[312,69158,69159,69161,69163,69165],{"class":314,"line":3570},[312,69160,56802],{"class":488},[312,69162,492],{"class":324},[312,69164,53455],{"class":488},[312,69166,498],{"class":324},[312,69168,69169],{"class":314,"line":3584},[312,69170,3992],{"class":324},[312,69172,69173],{"class":314,"line":3589},[312,69174,4205],{"emptyLinePlaceholder":1881},[312,69176,69177,69179,69181],{"class":314,"line":4382},[312,69178,65523],{"class":332},[312,69180,65596],{"class":328},[312,69182,483],{"class":324},[312,69184,69185,69187,69189,69191,69193],{"class":314,"line":4396},[312,69186,56704],{"class":488},[312,69188,492],{"class":324},[312,69190,2744],{"class":488},[312,69192,1437],{"class":1436},[312,69194,498],{"class":324},[312,69196,69197,69199,69201,69203],{"class":314,"line":4404},[312,69198,64112],{"class":488},[312,69200,492],{"class":324},[312,69202,65619],{"class":488},[312,69204,498],{"class":324},[312,69206,69207,69209,69211,69213,69215],{"class":314,"line":4409},[312,69208,63778],{"class":488},[312,69210,492],{"class":324},[312,69212,1546],{"class":488},[312,69214,1437],{"class":1436},[312,69216,498],{"class":324},[312,69218,69219],{"class":314,"line":4415},[312,69220,3992],{"class":324},[312,69222,69223],{"class":314,"line":4421},[312,69224,4205],{"emptyLinePlaceholder":1881},[312,69226,69227,69229,69231],{"class":314,"line":4426},[312,69228,65523],{"class":332},[312,69230,63072],{"class":328},[312,69232,483],{"class":324},[312,69234,69235,69237,69239,69241],{"class":314,"line":9751},[312,69236,56516],{"class":488},[312,69238,492],{"class":324},[312,69240,56521],{"class":488},[312,69242,498],{"class":324},[312,69244,69245,69247,69249,69251],{"class":314,"line":9775},[312,69246,56791],{"class":488},[312,69248,492],{"class":324},[312,69250,53268],{"class":488},[312,69252,498],{"class":324},[312,69254,69255,69257,69259,69261],{"class":314,"line":9780},[312,69256,56802],{"class":488},[312,69258,492],{"class":324},[312,69260,53368],{"class":488},[312,69262,498],{"class":324},[312,69264,69265],{"class":314,"line":9786},[312,69266,3992],{"class":324},[312,69268,69269],{"class":314,"line":9813},[312,69270,4205],{"emptyLinePlaceholder":1881},[312,69272,69273,69275,69277,69279],{"class":314,"line":9818},[312,69274,65523],{"class":332},[312,69276,63072],{"class":328},[312,69278,56857],{"class":328},[312,69280,483],{"class":324},[312,69282,69283,69285,69287,69289,69291,69293],{"class":314,"line":9824},[312,69284,56490],{"class":488},[312,69286,492],{"class":324},[312,69288,858],{"class":488},[312,69290,10753],{"class":488},[312,69292,1437],{"class":1436},[312,69294,498],{"class":324},[312,69296,69297,69299,69301,69303,69305],{"class":314,"line":9836},[312,69298,56704],{"class":488},[312,69300,492],{"class":324},[312,69302,2494],{"class":488},[312,69304,1437],{"class":1436},[312,69306,498],{"class":324},[312,69308,69309],{"class":314,"line":9848},[312,69310,3992],{"class":324},[312,69312,69313],{"class":314,"line":9860},[312,69314,4205],{"emptyLinePlaceholder":1881},[312,69316,69317,69319,69321,69323,69325],{"class":314,"line":11519},[312,69318,65523],{"class":332},[312,69320,63072],{"class":328},[312,69322,56857],{"class":328},[312,69324,3206],{"class":328},[312,69326,483],{"class":324},[312,69328,69329,69331,69333,69335],{"class":314,"line":11544},[312,69330,65748],{"class":488},[312,69332,492],{"class":324},[312,69334,56521],{"class":488},[312,69336,498],{"class":324},[312,69338,69339,69341,69343,69345,69347,69349,69351],{"class":314,"line":11567},[312,69340,64010],{"class":488},[312,69342,492],{"class":324},[312,69344,2027],{"class":488},[312,69346,1437],{"class":1436},[312,69348,1440],{"class":488},[312,69350,65769],{"class":488},[312,69352,498],{"class":324},[312,69354,69355,69357,69359,69361],{"class":314,"line":11591},[312,69356,59198],{"class":488},[312,69358,492],{"class":324},[312,69360,64147],{"class":488},[312,69362,498],{"class":324},[312,69364,69365],{"class":314,"line":11596},[312,69366,3992],{"class":324},[312,69368,69369],{"class":314,"line":11601},[312,69370,4205],{"emptyLinePlaceholder":1881},[312,69372,69373,69375,69377,69379,69381,69383],{"class":314,"line":11606},[312,69374,65523],{"class":332},[312,69376,63072],{"class":328},[312,69378,56857],{"class":328},[312,69380,3206],{"class":328},[312,69382,65802],{"class":332},[312,69384,483],{"class":324},[312,69386,69387,69389,69391,69393],{"class":314,"line":11615},[312,69388,63569],{"class":488},[312,69390,492],{"class":324},[312,69392,65813],{"class":488},[312,69394,498],{"class":324},[312,69396,69397,69399,69401,69403],{"class":314,"line":11620},[312,69398,59198],{"class":488},[312,69400,492],{"class":324},[312,69402,65813],{"class":488},[312,69404,498],{"class":324},[312,69406,69407],{"class":314,"line":11626},[312,69408,3992],{"class":324},[312,69410,69411],{"class":314,"line":11647},[312,69412,4205],{"emptyLinePlaceholder":1881},[312,69414,69415,69417],{"class":314,"line":11653},[312,69416,65838],{"class":332},[312,69418,483],{"class":324},[312,69420,69421,69423,69425,69427,69429,69431],{"class":314,"line":11667},[312,69422,56479],{"class":488},[312,69424,492],{"class":324},[312,69426,858],{"class":488},[312,69428,65851],{"class":488},[312,69430,1437],{"class":1436},[312,69432,498],{"class":324},[312,69434,69435],{"class":314,"line":11673},[312,69436,3992],{"class":324},[312,69438,69439],{"class":314,"line":11700},[312,69440,4205],{"emptyLinePlaceholder":1881},[312,69442,69443,69445,69447],{"class":314,"line":11709},[312,69444,65838],{"class":332},[312,69446,63952],{"class":332},[312,69448,483],{"class":324},[312,69450,69451,69453,69455,69457],{"class":314,"line":11715},[312,69452,56791],{"class":488},[312,69454,492],{"class":324},[312,69456,56521],{"class":488},[312,69458,498],{"class":324},[312,69460,69461],{"class":314,"line":11723},[312,69462,3992],{"class":324},[312,69464,69465],{"class":314,"line":11728},[312,69466,4205],{"emptyLinePlaceholder":1881},[312,69468,69469,69471,69474],{"class":314,"line":18404},[312,69470,65838],{"class":332},[312,69472,69473],{"class":332}," .active",[312,69475,483],{"class":324},[312,69477,69478,69480,69482,69484],{"class":314,"line":18410},[312,69479,56791],{"class":488},[312,69481,492],{"class":324},[312,69483,508],{"class":488},[312,69485,498],{"class":324},[312,69487,69488],{"class":314,"line":18433},[312,69489,3992],{"class":324},[312,69491,69492,69494,69496],{"class":314,"line":18439},[312,69493,54203],{"class":324},[312,69495,1856],{"class":328},[312,69497,343],{"class":324},[312,69499,69500,69502,69504],{"class":314,"line":18462},[312,69501,353],{"class":324},[312,69503,53127],{"class":328},[312,69505,343],{"class":324},[312,69507,69508],{"class":314,"line":18476},[312,69509,4205],{"emptyLinePlaceholder":1881},[312,69511,69512,69514,69516],{"class":314,"line":18496},[312,69513,325],{"class":324},[312,69515,53586],{"class":328},[312,69517,343],{"class":324},[312,69519,69520,69522,69524,69526,69528,69530],{"class":314,"line":18502},[312,69521,53930],{"class":324},[312,69523,329],{"class":328},[312,69525,333],{"class":332},[312,69527,336],{"class":324},[312,69529,65953],{"class":339},[312,69531,343],{"class":324},[312,69533,69534,69536,69538,69540,69542,69544],{"class":314,"line":18513},[312,69535,53134],{"class":324},[312,69537,329],{"class":328},[312,69539,333],{"class":332},[312,69541,336],{"class":324},[312,69543,65968],{"class":339},[312,69545,343],{"class":324},[312,69547,69548,69550,69552,69554,69556],{"class":314,"line":18536},[312,69549,57016],{"class":324},[312,69551,69],{"class":328},[312,69553,65979],{"class":324},[312,69555,69],{"class":328},[312,69557,343],{"class":324},[312,69559,69560,69562,69564],{"class":314,"line":18558},[312,69561,57016],{"class":324},[312,69563,243],{"class":328},[312,69565,343],{"class":324},[312,69567,69568,69570,69572,69574,69576,69578,69580,69582,69584,69586,69588,69590,69592,69595,69597,69599,69601,69603],{"class":314,"line":18563},[312,69569,57084],{"class":324},[312,69571,143],{"class":328},[312,69573,62833],{"class":324},[312,69575,164],{"class":328},[312,69577,333],{"class":332},[312,69579,336],{"class":324},[312,69581,61488],{"class":339},[312,69583,648],{"class":332},[312,69585,336],{"class":324},[312,69587,66014],{"class":339},[312,69589,55735],{"class":332},[312,69591,336],{"class":324},[312,69593,69594],{"class":339},"\"0\"",[312,69596,66017],{"class":324},[312,69598,164],{"class":328},[312,69600,57096],{"class":324},[312,69602,143],{"class":328},[312,69604,343],{"class":324},[312,69606,69607,69609,69611,69613,69615,69617,69619,69621,69623,69625,69627,69629,69631,69633,69635],{"class":314,"line":18569},[312,69608,57084],{"class":324},[312,69610,143],{"class":328},[312,69612,62833],{"class":324},[312,69614,164],{"class":328},[312,69616,648],{"class":332},[312,69618,336],{"class":324},[312,69620,66014],{"class":339},[312,69622,55735],{"class":332},[312,69624,336],{"class":324},[312,69626,5483],{"class":339},[312,69628,66044],{"class":324},[312,69630,164],{"class":328},[312,69632,57096],{"class":324},[312,69634,143],{"class":328},[312,69636,343],{"class":324},[312,69638,69639,69641,69643,69645,69647,69649,69651,69653,69655,69657,69659,69661,69663,69665,69667],{"class":314,"line":18583},[312,69640,57084],{"class":324},[312,69642,143],{"class":328},[312,69644,62833],{"class":324},[312,69646,164],{"class":328},[312,69648,648],{"class":332},[312,69650,336],{"class":324},[312,69652,66014],{"class":339},[312,69654,55735],{"class":332},[312,69656,336],{"class":324},[312,69658,5506],{"class":339},[312,69660,66071],{"class":324},[312,69662,164],{"class":328},[312,69664,57096],{"class":324},[312,69666,143],{"class":328},[312,69668,343],{"class":324},[312,69670,69671,69673,69675,69677,69679,69681,69683,69685,69687,69689,69691,69693,69695,69697,69699],{"class":314,"line":18596},[312,69672,57084],{"class":324},[312,69674,143],{"class":328},[312,69676,62833],{"class":324},[312,69678,164],{"class":328},[312,69680,648],{"class":332},[312,69682,336],{"class":324},[312,69684,66014],{"class":339},[312,69686,55735],{"class":332},[312,69688,336],{"class":324},[312,69690,5519],{"class":339},[312,69692,66098],{"class":324},[312,69694,164],{"class":328},[312,69696,57096],{"class":324},[312,69698,143],{"class":328},[312,69700,343],{"class":324},[312,69702,69703,69705,69707,69709,69711,69713,69715,69717,69719,69721,69723,69725,69727,69729,69731],{"class":314,"line":18601},[312,69704,57084],{"class":324},[312,69706,143],{"class":328},[312,69708,62833],{"class":324},[312,69710,164],{"class":328},[312,69712,648],{"class":332},[312,69714,336],{"class":324},[312,69716,66014],{"class":339},[312,69718,55735],{"class":332},[312,69720,336],{"class":324},[312,69722,5532],{"class":339},[312,69724,66125],{"class":324},[312,69726,164],{"class":328},[312,69728,57096],{"class":324},[312,69730,143],{"class":328},[312,69732,343],{"class":324},[312,69734,69735,69737,69739],{"class":314,"line":18615},[312,69736,57189],{"class":324},[312,69738,243],{"class":328},[312,69740,343],{"class":324},[312,69742,69743,69745,69747],{"class":314,"line":18620},[312,69744,53563],{"class":324},[312,69746,329],{"class":328},[312,69748,343],{"class":324},[312,69750,69751,69753,69755,69757,69759,69761],{"class":314,"line":18626},[312,69752,53134],{"class":324},[312,69754,329],{"class":328},[312,69756,333],{"class":332},[312,69758,336],{"class":324},[312,69760,66162],{"class":339},[312,69762,343],{"class":324},[312,69764,69765,69767,69769,69771,69773,69775,69777,69779,69781,69783,69785,69787,69789,69791,69793,69795],{"class":314,"line":18631},[312,69766,57016],{"class":324},[312,69768,329],{"class":328},[312,69770,333],{"class":332},[312,69772,336],{"class":324},[312,69774,66177],{"class":339},[312,69776,62833],{"class":324},[312,69778,19],{"class":328},[312,69780,57021],{"class":332},[312,69782,336],{"class":324},[312,69784,66188],{"class":339},[312,69786,57029],{"class":332},[312,69788,336],{"class":324},[312,69790,495],{"class":339},[312,69792,66197],{"class":324},[312,69794,329],{"class":328},[312,69796,343],{"class":324},[312,69798,69799,69801,69803,69805,69807,69809,69811,69813,69815,69817,69819,69821,69823,69825,69827,69829],{"class":314,"line":18645},[312,69800,57016],{"class":324},[312,69802,329],{"class":328},[312,69804,333],{"class":332},[312,69806,336],{"class":324},[312,69808,64401],{"class":339},[312,69810,62833],{"class":324},[312,69812,19],{"class":328},[312,69814,57021],{"class":332},[312,69816,336],{"class":324},[312,69818,66224],{"class":339},[312,69820,57029],{"class":332},[312,69822,336],{"class":324},[312,69824,495],{"class":339},[312,69826,66197],{"class":324},[312,69828,329],{"class":328},[312,69830,343],{"class":324},[312,69832,69833,69835,69837,69839,69841,69843,69845,69847,69849,69851,69853,69855,69857,69859,69861,69863],{"class":314,"line":18650},[312,69834,57016],{"class":324},[312,69836,329],{"class":328},[312,69838,333],{"class":332},[312,69840,336],{"class":324},[312,69842,64401],{"class":339},[312,69844,62833],{"class":324},[312,69846,19],{"class":328},[312,69848,57021],{"class":332},[312,69850,336],{"class":324},[312,69852,66259],{"class":339},[312,69854,57029],{"class":332},[312,69856,336],{"class":324},[312,69858,495],{"class":339},[312,69860,66197],{"class":324},[312,69862,329],{"class":328},[312,69864,343],{"class":324},[312,69866,69867,69869,69871,69873,69875,69877,69879,69881,69883,69885,69887,69889,69891,69893,69895,69897],{"class":314,"line":18655},[312,69868,57016],{"class":324},[312,69870,329],{"class":328},[312,69872,333],{"class":332},[312,69874,336],{"class":324},[312,69876,64401],{"class":339},[312,69878,62833],{"class":324},[312,69880,19],{"class":328},[312,69882,57021],{"class":332},[312,69884,336],{"class":324},[312,69886,66294],{"class":339},[312,69888,57029],{"class":332},[312,69890,336],{"class":324},[312,69892,495],{"class":339},[312,69894,66197],{"class":324},[312,69896,329],{"class":328},[312,69898,343],{"class":324},[312,69900,69901,69903,69905,69907,69909,69911,69913,69915,69917,69919,69921,69923,69925,69927,69929,69931],{"class":314,"line":18669},[312,69902,57016],{"class":324},[312,69904,329],{"class":328},[312,69906,333],{"class":332},[312,69908,336],{"class":324},[312,69910,64401],{"class":339},[312,69912,62833],{"class":324},[312,69914,19],{"class":328},[312,69916,57021],{"class":332},[312,69918,336],{"class":324},[312,69920,66329],{"class":339},[312,69922,57029],{"class":332},[312,69924,336],{"class":324},[312,69926,495],{"class":339},[312,69928,66197],{"class":324},[312,69930,329],{"class":328},[312,69932,343],{"class":324},[312,69934,69935,69937,69939],{"class":314,"line":18681},[312,69936,53563],{"class":324},[312,69938,329],{"class":328},[312,69940,343],{"class":324},[312,69942,69943,69945,69947],{"class":314,"line":18686},[312,69944,54203],{"class":324},[312,69946,329],{"class":328},[312,69948,343],{"class":324},[312,69950,69951,69953,69955],{"class":314,"line":18699},[312,69952,53930],{"class":324},[312,69954,53599],{"class":328},[312,69956,343],{"class":324},[312,69958,69959],{"class":314,"line":18704},[312,69960,69961],{"class":318},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[312,69963,69964],{"class":314,"line":18709},[312,69965,69966],{"class":318},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[312,69968,69969,69971,69973,69975,69977,69979,69981,69984],{"class":314,"line":18714},[312,69970,13024],{"class":1436},[312,69972,63072],{"class":488},[312,69974,15366],{"class":1436},[312,69976,56180],{"class":324},[312,69978,56183],{"class":332},[312,69980,1576],{"class":324},[312,69982,69983],{"class":339},"'.tab-nav ul'",[312,69985,1959],{"class":324},[312,69987,69988],{"class":314,"line":18727},[312,69989,69990],{"class":318},"    \u002F\u002F 2.添加事件\n",[312,69992,69993,69995,69997,69999,70001,70003,70005,70007,70009],{"class":314,"line":18732},[312,69994,68732],{"class":324},[312,69996,59595],{"class":332},[312,69998,1576],{"class":324},[312,70000,59600],{"class":339},[312,70002,733],{"class":324},[312,70004,56233],{"class":1436},[312,70006,3464],{"class":324},[312,70008,2024],{"class":1579},[312,70010,14244],{"class":324},[312,70012,70013,70015,70017],{"class":314,"line":34428},[312,70014,60026],{"class":324},[312,70016,68788],{"class":332},[312,70018,68791],{"class":324},[312,70020,70021],{"class":314,"line":34434},[312,70022,70023],{"class":318},"      \u002F\u002Fe.targer是我们点击的对象\n",[312,70025,70026,70028,70030,70032,70035],{"class":314,"line":34440},[312,70027,56264],{"class":1436},[312,70029,68812],{"class":324},[312,70031,56270],{"class":1436},[312,70033,70034],{"class":339}," 'A'",[312,70036,14244],{"class":324},[312,70038,70039,70041,70043,70045,70048,70050,70052,70054,70056],{"class":314,"line":34446},[312,70040,53711],{"class":324},[312,70042,56183],{"class":332},[312,70044,1576],{"class":324},[312,70046,70047],{"class":339},"'.active'",[312,70049,58785],{"class":324},[312,70051,58788],{"class":332},[312,70053,1576],{"class":324},[312,70055,66492],{"class":339},[312,70057,1959],{"class":324},[312,70059,70060,70063,70065,70067,70069],{"class":314,"line":34452},[312,70061,70062],{"class":324},"        e.target.classList.",[312,70064,7138],{"class":332},[312,70066,1576],{"class":324},[312,70068,66492],{"class":339},[312,70070,1959],{"class":324},[312,70072,70073],{"class":314,"line":34463},[312,70074,4205],{"emptyLinePlaceholder":1881},[312,70076,70077],{"class":314,"line":34469},[312,70078,70079],{"class":318},"        \u002F\u002F 下面大盒子模块\n",[312,70081,70082],{"class":314,"line":34489},[312,70083,70084],{"class":318},"        \u002F\u002F console.log(e.target.dataset.id)\n",[312,70086,70087,70089,70091,70093,70095],{"class":314,"line":34495},[312,70088,63050],{"class":1436},[312,70090,4837],{"class":488},[312,70092,15366],{"class":1436},[312,70094,47361],{"class":1436},[312,70096,70097],{"class":324},"e.target.dataset.id\n",[312,70099,70100,70102,70104,70106,70108,70110,70112,70114,70116],{"class":314,"line":34506},[312,70101,53711],{"class":324},[312,70103,56183],{"class":332},[312,70105,1576],{"class":324},[312,70107,66540],{"class":339},[312,70109,58785],{"class":324},[312,70111,58788],{"class":332},[312,70113,1576],{"class":324},[312,70115,66492],{"class":339},[312,70117,1959],{"class":324},[312,70119,70120,70122,70124,70126,70128,70130,70132,70134,70136,70138,70140,70142,70144],{"class":314,"line":34512},[312,70121,53711],{"class":324},[312,70123,56183],{"class":332},[312,70125,1576],{"class":324},[312,70127,66566],{"class":339},[312,70129,2386],{"class":324},[312,70131,47361],{"class":1436},[312,70133,26914],{"class":488},[312,70135,58814],{"class":339},[312,70137,58785],{"class":324},[312,70139,7138],{"class":332},[312,70141,1576],{"class":324},[312,70143,66492],{"class":339},[312,70145,1959],{"class":324},[312,70147,70148],{"class":314,"line":34518},[312,70149,4205],{"emptyLinePlaceholder":1881},[312,70151,70152],{"class":314,"line":34524},[312,70153,54184],{"class":324},[312,70155,70156],{"class":314,"line":34530},[312,70157,35256],{"class":324},[312,70159,70160,70162,70164],{"class":314,"line":34536},[312,70161,54203],{"class":324},[312,70163,53599],{"class":328},[312,70165,343],{"class":324},[312,70167,70168,70170,70172],{"class":314,"line":34542},[312,70169,353],{"class":324},[312,70171,53586],{"class":328},[312,70173,343],{"class":324},[312,70175,70176],{"class":314,"line":34548},[312,70177,4205],{"emptyLinePlaceholder":1881},[312,70179,70180,70182,70184],{"class":314,"line":34568},[312,70181,353],{"class":324},[312,70183,52430],{"class":328},[312,70185,343],{"class":324},[69,70187,70189],{"id":70188},"_333-页面加载事件","3.3.3 页面加载事件",[140,70191,70192],{},[143,70193,70194],{},"load",[24,70196,70197],{},[19,70198],{"alt":308,"src":70199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[24,70201,70202],{},"window代表整个窗口，比document还要大",[24,70204,70205],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[24,70207,70208],{},"img.addEventListener('load', function () {",[24,70210,70211],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[24,70213,54250],{},[140,70215,70216],{"start":171},[143,70217,70218],{},"DOMContentLoaded",[24,70220,70221],{},[19,70222],{"alt":308,"src":70223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[24,70225,70226],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[69,70228,70230],{"id":70229},"_334-元素滚动事件","3.3.4 元素滚动事件",[24,70232,70233],{},[19,70234],{"alt":308,"src":70235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[24,70237,70238],{},[19,70239],{"alt":308,"src":70240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[24,70242,70243],{},[19,70244],{"alt":308,"src":70245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[24,70247,70248],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[24,70250,70251],{},"获得的是数字型数据，不带单位",[24,70253,70254],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[24,70256,70257],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[24,70259,70260],{},"它是通过document.documentElement来获取",[24,70262,70263],{},[19,70264],{"alt":308,"src":70265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[24,70267,70268],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[69,70270,70272],{"id":70271},"_335-页面缩放事件","3.3.5 页面缩放事件",[24,70274,70275],{},[19,70276],{"alt":308,"src":70277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[24,70279,70280],{},[19,70281],{"alt":308,"src":70282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[69,70284,70286],{"id":70285},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[24,70288,70289],{},[19,70290],{"alt":308,"src":70291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[24,70293,70294],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[24,70296,70297],{},[19,70298],{"alt":308,"src":70299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[24,70301,70302],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[24,70304,70305],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[24,70307,70308],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[24,70310,70311],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[24,70313,70314],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[24,70316,70317],{},[19,70318],{"alt":308,"src":70319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[24,70321,70322],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[24,70324,70325],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[24,70327,70328],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[24,70330,70331],{},"e.pageX-box.getBoundingClientRect()",[69,70333,70335],{"id":70334},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[24,70337,70338],{},[19,70339],{"alt":308,"src":70340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[24,70342,70343],{},"这个是相对于视口来说的，它是个方法，不是属性值",[69,70345,70347],{"id":70346},"_338-总结","3.3.8 总结",[24,70349,70350],{},[19,70351],{"alt":308,"src":70352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[24,70354,70355],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[24,70357,70358],{},"修改盒子的宽高只能通过width和height来实现",[69,70360,70362],{"id":70361},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[303,70364,70366],{"className":52428,"code":70365,"language":52430,"meta":308,"style":308},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[119,70367,70368,70373,70378,70383,70388],{"__ignoreMap":308},[312,70369,70370],{"class":314,"line":315},[312,70371,70372],{"class":324},"\u002F* 页面滑动 *\u002F\n",[312,70374,70375],{"class":314,"line":171},[312,70376,70377],{"class":324},"html {\n",[312,70379,70380],{"class":314,"line":274},[312,70381,70382],{"class":324},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[312,70384,70385],{"class":314,"line":298},[312,70386,70387],{"class":324},"  scroll-behavior: smooth;\n",[312,70389,70390],{"class":314,"line":974},[312,70391,515],{"class":324},[24,70393,70394],{},"默认是auto",[69,70396,70398],{"id":70397},"_3310-日期对象","3.3.10 日期对象",[23796,70400,70402],{"id":70401},"_33101-实例化","3.3.10.1 实例化",[24,70404,70405],{},[19,70406],{"alt":308,"src":70407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[23796,70409,70411],{"id":70410},"_33102-时期对象方法","3.3.10.2 时期对象方法",[24,70413,70414],{},[19,70415],{"alt":308,"src":70416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[24,70418,70419],{},"月份+1",[24,70421,70422],{},"老外认为第一天为0，星期天",[24,70424,70425],{},"方法使用的时候必须要跟括号",[24,70427,70428],{},"快速获得日期",[24,70430,70431],{},"\u002F\u002F 得到年月日",[24,70433,70434],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[24,70436,70437],{},"\u002F\u002F 得到当地日期",[24,70439,70440],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[24,70442,70443],{},"\u002F\u002F 得到当地时间",[24,70445,70446],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[24,70448,70449],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[24,70451,70452],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53599,70454,70455],{},"\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",[24,70457,70458],{},"学会去封装函数！",[23796,70460,70462],{"id":70461},"_33103-时间戳","3.3.10.3 时间戳",[24,70464,70465],{},[19,70466],{"alt":308,"src":70467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[24,70469,70470],{},[19,70471],{"alt":308,"src":70472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[24,70474,70475],{},"三种方法记住一个就可以",[69,70477,70479],{"id":70478},"_3311-节点操作","3.3.11 节点操作",[23796,70481,70483],{"id":70482},"_33111-dom节点","3.3.11.1 DOM节点",[24,70485,70486],{},[19,70487],{"alt":308,"src":70488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[24,70490,70491],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[23796,70493,70495],{"id":70494},"_33112-查找节点","3.3.11.2 查找节点",[24,70497,70498],{},"前边的document.querySelector()是获取的元素",[24,70500,70501],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[24,70503,70504],{},[19,70505],{"alt":308,"src":70506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[140,70508,70509],{},[143,70510,70511],{},"父节点",[24,70513,70514],{},[19,70515],{"alt":308,"src":70516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[140,70518,70519],{"start":171},[143,70520,70521],{},"子节点",[24,70523,70524],{},[19,70525],{"alt":308,"src":70526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[24,70528,70529],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[24,70531,70532],{},"children获得的是伪数组，是亲儿子",[140,70534,70535],{"start":274},[143,70536,70537],{},"兄弟节点",[24,70539,70540],{},[19,70541],{"alt":308,"src":70542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[23796,70544,70546],{"id":70545},"_33113-增加节点","3.3.11.3 增加节点",[24,70548,70549],{},[19,70550],{"alt":308,"src":70551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[24,70553,70554],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[24,70556,70557],{},[19,70558],{"alt":308,"src":70559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[24,70561,70562],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[24,70564,70565],{},"下面是写法的部分展示，就按照下边的格式来写",[24,70567,241],{},[53599,70569,70570],{},"\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",[24,70572,70573],{},[19,70574],{"alt":308,"src":70575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[24,70577,70578],{},"false只克隆标签，里边的内容不会克隆过来",[303,70580,70582],{"className":52428,"code":70581,"language":52430,"meta":308,"style":308},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[119,70583,70584],{"__ignoreMap":308},[312,70585,70586],{"class":314,"line":315},[312,70587,70581],{"class":324},[23796,70589,70591],{"id":70590},"_33114-删除节点","3.3.11.4 删除节点",[24,70593,70594],{},[19,70595],{"alt":308,"src":70596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[24,70598,70599],{},"父亲删儿子",[24,70601,70602],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[69,70604,70606],{"id":70605},"_3312-m端事件","3.3.12 M端事件",[24,70608,70609],{},"M端就是移动端",[24,70611,70612],{},[19,70613],{"alt":308,"src":70614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[69,70616,70618],{"id":70617},"_3313-插件","3.3.13 插件",[24,70620,70621],{},"要熟悉官网！！！",[24,70623,70624],{},[164,70625,70626],{"href":70626,"rel":70627},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[168],[24,70629,70630],{},[164,70631,70632],{"href":70632,"rel":70633},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[168],[69,70635,70637],{"id":70636},"_3314-学生信息表","3.3.14 学生信息表",[140,70639,70640,70643,70646,70649,70652,70655,70658,70661],{},[143,70641,70642],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[143,70644,70645],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[143,70647,70648],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[143,70650,70651],{},"用好表单元素自带的属性，value,name等",[143,70653,70654],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[143,70656,70657],{},"不要忘记事件对象",[143,70659,70660],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[143,70662,70663],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[24,70665,70666],{},"结构：",[303,70668,70670],{"className":52428,"code":70669,"language":52430,"meta":308,"style":308},"\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",[119,70671,70672,70682,70696,70700,70708,70722,70742,70763,70776,70800,70808,70812,70820,70833,70854,70882,70910,70915,70937,70957,70976,70984,71012,71034,71054,71074,71094,71114,71134,71142,71162,71170,71174,71187,71195,71203,71211,71224,71237,71250,71263,71276,71289,71302,71310,71318,71326,71331,71336,71341,71346,71351,71356,71361,71366,71371,71376,71381,71386,71391,71399,71407,71415,71419,71439,71458,71478,71498,71518,71538,71542,71547,71567,71572,71582,71587,71592,71612,71634,71639,71649,71653,71657,71662,71667,71696,71710,71725,71729,71733,71737,71742,71753,71766,71771,71776,71781,71786,71791,71795,71800,71805,71814,71819,71824,71836,71841,71848,71852,71857,71867,71872,71882,71887,71915,71936,71946,71966,71984,72001,72018,72035,72052,72056,72066,72071,72076,72081,72092,72096,72100,72104,72109,72114,72135,72147,72152,72157,72162,72176,72181,72188,72192,72196,72204,72208,72216,72220],{"__ignoreMap":308},[312,70673,70674,70676,70678,70680],{"class":314,"line":315},[312,70675,53092],{"class":324},[312,70677,53095],{"class":328},[312,70679,53098],{"class":332},[312,70681,343],{"class":324},[312,70683,70684,70686,70688,70690,70692,70694],{"class":314,"line":171},[312,70685,325],{"class":324},[312,70687,52430],{"class":328},[312,70689,53109],{"class":332},[312,70691,336],{"class":324},[312,70693,53114],{"class":339},[312,70695,343],{"class":324},[312,70697,70698],{"class":314,"line":274},[312,70699,4205],{"emptyLinePlaceholder":1881},[312,70701,70702,70704,70706],{"class":314,"line":298},[312,70703,325],{"class":324},[312,70705,53127],{"class":328},[312,70707,343],{"class":324},[312,70709,70710,70712,70714,70716,70718,70720],{"class":314,"line":974},[312,70711,53930],{"class":324},[312,70713,53137],{"class":328},[312,70715,53140],{"class":332},[312,70717,336],{"class":324},[312,70719,53145],{"class":339},[312,70721,60909],{"class":324},[312,70723,70724,70726,70728,70730,70732,70734,70736,70738,70740],{"class":314,"line":980},[312,70725,53930],{"class":324},[312,70727,53137],{"class":328},[312,70729,16721],{"class":332},[312,70731,336],{"class":324},[312,70733,53184],{"class":339},[312,70735,53164],{"class":332},[312,70737,336],{"class":324},[312,70739,53191],{"class":339},[312,70741,60909],{"class":324},[312,70743,70744,70746,70748,70750,70752,70754,70756,70758,70761],{"class":314,"line":997},[312,70745,53930],{"class":324},[312,70747,53137],{"class":328},[312,70749,53156],{"class":332},[312,70751,336],{"class":324},[312,70753,53161],{"class":339},[312,70755,53164],{"class":332},[312,70757,336],{"class":324},[312,70759,70760],{"class":339},"\"ie=edge\"",[312,70762,60909],{"class":324},[312,70764,70765,70767,70769,70772,70774],{"class":314,"line":1003},[312,70766,53930],{"class":324},[312,70768,628],{"class":328},[312,70770,70771],{"class":324},">学生信息管理\u003C\u002F",[312,70773,628],{"class":328},[312,70775,343],{"class":324},[312,70777,70778,70780,70783,70786,70788,70791,70793,70795,70798],{"class":314,"line":1020},[312,70779,53930],{"class":324},[312,70781,70782],{"class":328},"link",[312,70784,70785],{"class":332}," rel",[312,70787,336],{"class":324},[312,70789,70790],{"class":339},"\"stylesheet\"",[312,70792,648],{"class":332},[312,70794,336],{"class":324},[312,70796,70797],{"class":339},"\"css\u002Findex.css\"",[312,70799,60909],{"class":324},[312,70801,70802,70804,70806],{"class":314,"line":1026},[312,70803,353],{"class":324},[312,70805,53127],{"class":328},[312,70807,343],{"class":324},[312,70809,70810],{"class":314,"line":3418},[312,70811,4205],{"emptyLinePlaceholder":1881},[312,70813,70814,70816,70818],{"class":314,"line":3423},[312,70815,325],{"class":324},[312,70817,53586],{"class":328},[312,70819,343],{"class":324},[312,70821,70822,70824,70826,70829,70831],{"class":314,"line":3429},[312,70823,53930],{"class":324},[312,70825,10],{"class":328},[312,70827,70828],{"class":324},">新增学员\u003C\u002F",[312,70830,10],{"class":328},[312,70832,343],{"class":324},[312,70834,70835,70837,70839,70841,70843,70845,70848,70850,70852],{"class":314,"line":3434},[312,70836,53930],{"class":324},[312,70838,68403],{"class":328},[312,70840,333],{"class":332},[312,70842,336],{"class":324},[312,70844,64442],{"class":339},[312,70846,70847],{"class":332}," autocomplete",[312,70849,336],{"class":324},[312,70851,33571],{"class":339},[312,70853,343],{"class":324},[312,70855,70856,70859,70861,70863,70865,70867,70869,70871,70874,70876,70878,70880],{"class":314,"line":3448},[312,70857,70858],{"class":324},"    姓名：\u003C",[312,70860,55605],{"class":328},[312,70862,55608],{"class":332},[312,70864,336],{"class":324},[312,70866,64477],{"class":339},[312,70868,333],{"class":332},[312,70870,336],{"class":324},[312,70872,70873],{"class":339},"\"uname\"",[312,70875,16721],{"class":332},[312,70877,336],{"class":324},[312,70879,70873],{"class":339},[312,70881,60909],{"class":324},[312,70883,70884,70887,70889,70891,70893,70895,70897,70899,70902,70904,70906,70908],{"class":314,"line":3453},[312,70885,70886],{"class":324},"    年龄：\u003C",[312,70888,55605],{"class":328},[312,70890,55608],{"class":332},[312,70892,336],{"class":324},[312,70894,64477],{"class":339},[312,70896,333],{"class":332},[312,70898,336],{"class":324},[312,70900,70901],{"class":339},"\"age\"",[312,70903,16721],{"class":332},[312,70905,336],{"class":324},[312,70907,70901],{"class":339},[312,70909,60909],{"class":324},[312,70911,70912],{"class":314,"line":3459},[312,70913,70914],{"class":324},"    性别:\n",[312,70916,70917,70919,70922,70924,70926,70929,70931,70933,70935],{"class":314,"line":3480},[312,70918,53134],{"class":324},[312,70920,70921],{"class":328},"select",[312,70923,16721],{"class":332},[312,70925,336],{"class":324},[312,70927,70928],{"class":339},"\"gender\"",[312,70930,333],{"class":332},[312,70932,336],{"class":324},[312,70934,70928],{"class":339},[312,70936,343],{"class":324},[312,70938,70939,70941,70944,70946,70948,70950,70953,70955],{"class":314,"line":3485},[312,70940,57016],{"class":324},[312,70942,70943],{"class":328},"option",[312,70945,68429],{"class":332},[312,70947,336],{"class":324},[312,70949,11764],{"class":339},[312,70951,70952],{"class":324},">男\u003C\u002F",[312,70954,70943],{"class":328},[312,70956,343],{"class":324},[312,70958,70959,70961,70963,70965,70967,70969,70972,70974],{"class":314,"line":3499},[312,70960,57016],{"class":324},[312,70962,70943],{"class":328},[312,70964,68429],{"class":332},[312,70966,336],{"class":324},[312,70968,11833],{"class":339},[312,70970,70971],{"class":324},">女\u003C\u002F",[312,70973,70943],{"class":328},[312,70975,343],{"class":324},[312,70977,70978,70980,70982],{"class":314,"line":3504},[312,70979,53563],{"class":324},[312,70981,70921],{"class":328},[312,70983,343],{"class":324},[312,70985,70986,70989,70991,70993,70995,70997,70999,71001,71004,71006,71008,71010],{"class":314,"line":3533},[312,70987,70988],{"class":324},"    薪资：\u003C",[312,70990,55605],{"class":328},[312,70992,55608],{"class":332},[312,70994,336],{"class":324},[312,70996,64477],{"class":339},[312,70998,333],{"class":332},[312,71000,336],{"class":324},[312,71002,71003],{"class":339},"\"salary\"",[312,71005,16721],{"class":332},[312,71007,336],{"class":324},[312,71009,71003],{"class":339},[312,71011,60909],{"class":324},[312,71013,71014,71017,71019,71021,71023,71026,71028,71030,71032],{"class":314,"line":3538},[312,71015,71016],{"class":324},"    就业城市：\u003C",[312,71018,70921],{"class":328},[312,71020,16721],{"class":332},[312,71022,336],{"class":324},[312,71024,71025],{"class":339},"\"city\"",[312,71027,333],{"class":332},[312,71029,336],{"class":324},[312,71031,71025],{"class":339},[312,71033,343],{"class":324},[312,71035,71036,71038,71040,71042,71044,71047,71050,71052],{"class":314,"line":3555},[312,71037,57016],{"class":324},[312,71039,70943],{"class":328},[312,71041,68429],{"class":332},[312,71043,336],{"class":324},[312,71045,71046],{"class":339},"\"北京\"",[312,71048,71049],{"class":324},">北京\u003C\u002F",[312,71051,70943],{"class":328},[312,71053,343],{"class":324},[312,71055,71056,71058,71060,71062,71064,71067,71070,71072],{"class":314,"line":3560},[312,71057,57016],{"class":324},[312,71059,70943],{"class":328},[312,71061,68429],{"class":332},[312,71063,336],{"class":324},[312,71065,71066],{"class":339},"\"上海\"",[312,71068,71069],{"class":324},">上海\u003C\u002F",[312,71071,70943],{"class":328},[312,71073,343],{"class":324},[312,71075,71076,71078,71080,71082,71084,71087,71090,71092],{"class":314,"line":3565},[312,71077,57016],{"class":324},[312,71079,70943],{"class":328},[312,71081,68429],{"class":332},[312,71083,336],{"class":324},[312,71085,71086],{"class":339},"\"广州\"",[312,71088,71089],{"class":324},">广州\u003C\u002F",[312,71091,70943],{"class":328},[312,71093,343],{"class":324},[312,71095,71096,71098,71100,71102,71104,71107,71110,71112],{"class":314,"line":3570},[312,71097,57016],{"class":324},[312,71099,70943],{"class":328},[312,71101,68429],{"class":332},[312,71103,336],{"class":324},[312,71105,71106],{"class":339},"\"深圳\"",[312,71108,71109],{"class":324},">深圳\u003C\u002F",[312,71111,70943],{"class":328},[312,71113,343],{"class":324},[312,71115,71116,71118,71120,71122,71124,71127,71130,71132],{"class":314,"line":3584},[312,71117,57016],{"class":324},[312,71119,70943],{"class":328},[312,71121,68429],{"class":332},[312,71123,336],{"class":324},[312,71125,71126],{"class":339},"\"曹县\"",[312,71128,71129],{"class":324},">曹县\u003C\u002F",[312,71131,70943],{"class":328},[312,71133,343],{"class":324},[312,71135,71136,71138,71140],{"class":314,"line":3589},[312,71137,53563],{"class":324},[312,71139,70921],{"class":328},[312,71141,343],{"class":324},[312,71143,71144,71146,71148,71150,71152,71155,71158,71160],{"class":314,"line":4382},[312,71145,53134],{"class":324},[312,71147,55671],{"class":328},[312,71149,333],{"class":332},[312,71151,336],{"class":324},[312,71153,71154],{"class":339},"\"add\"",[312,71156,71157],{"class":324},">录入\u003C\u002F",[312,71159,55671],{"class":328},[312,71161,343],{"class":324},[312,71163,71164,71166,71168],{"class":314,"line":4396},[312,71165,54203],{"class":324},[312,71167,68403],{"class":328},[312,71169,343],{"class":324},[312,71171,71172],{"class":314,"line":4404},[312,71173,4205],{"emptyLinePlaceholder":1881},[312,71175,71176,71178,71180,71183,71185],{"class":314,"line":4409},[312,71177,53930],{"class":324},[312,71179,10],{"class":328},[312,71181,71182],{"class":324},">就业榜\u003C\u002F",[312,71184,10],{"class":328},[312,71186,343],{"class":324},[312,71188,71189,71191,71193],{"class":314,"line":4415},[312,71190,53930],{"class":324},[312,71192,2086],{"class":328},[312,71194,343],{"class":324},[312,71196,71197,71199,71201],{"class":314,"line":4421},[312,71198,53134],{"class":324},[312,71200,2089],{"class":328},[312,71202,343],{"class":324},[312,71204,71205,71207,71209],{"class":314,"line":4426},[312,71206,57016],{"class":324},[312,71208,2092],{"class":328},[312,71210,343],{"class":324},[312,71212,71213,71215,71217,71220,71222],{"class":314,"line":9751},[312,71214,57084],{"class":324},[312,71216,2095],{"class":328},[312,71218,71219],{"class":324},">序号\u003C\u002F",[312,71221,2095],{"class":328},[312,71223,343],{"class":324},[312,71225,71226,71228,71230,71233,71235],{"class":314,"line":9775},[312,71227,57084],{"class":324},[312,71229,2095],{"class":328},[312,71231,71232],{"class":324},">姓名\u003C\u002F",[312,71234,2095],{"class":328},[312,71236,343],{"class":324},[312,71238,71239,71241,71243,71246,71248],{"class":314,"line":9780},[312,71240,57084],{"class":324},[312,71242,2095],{"class":328},[312,71244,71245],{"class":324},">年龄\u003C\u002F",[312,71247,2095],{"class":328},[312,71249,343],{"class":324},[312,71251,71252,71254,71256,71259,71261],{"class":314,"line":9786},[312,71253,57084],{"class":324},[312,71255,2095],{"class":328},[312,71257,71258],{"class":324},">性别\u003C\u002F",[312,71260,2095],{"class":328},[312,71262,343],{"class":324},[312,71264,71265,71267,71269,71272,71274],{"class":314,"line":9813},[312,71266,57084],{"class":324},[312,71268,2095],{"class":328},[312,71270,71271],{"class":324},">薪资\u003C\u002F",[312,71273,2095],{"class":328},[312,71275,343],{"class":324},[312,71277,71278,71280,71282,71285,71287],{"class":314,"line":9818},[312,71279,57084],{"class":324},[312,71281,2095],{"class":328},[312,71283,71284],{"class":324},">就业城市\u003C\u002F",[312,71286,2095],{"class":328},[312,71288,343],{"class":324},[312,71290,71291,71293,71295,71298,71300],{"class":314,"line":9824},[312,71292,57084],{"class":324},[312,71294,2095],{"class":328},[312,71296,71297],{"class":324},">操作\u003C\u002F",[312,71299,2095],{"class":328},[312,71301,343],{"class":324},[312,71303,71304,71306,71308],{"class":314,"line":9836},[312,71305,57189],{"class":324},[312,71307,2092],{"class":328},[312,71309,343],{"class":324},[312,71311,71312,71314,71316],{"class":314,"line":9848},[312,71313,53563],{"class":324},[312,71315,2089],{"class":328},[312,71317,343],{"class":324},[312,71319,71320,71322,71324],{"class":314,"line":9860},[312,71321,53134],{"class":324},[312,71323,2132],{"class":328},[312,71325,343],{"class":324},[312,71327,71328],{"class":314,"line":11519},[312,71329,71330],{"class":318},"      \u003C!-- \n",[312,71332,71333],{"class":314,"line":11544},[312,71334,71335],{"class":318},"        \u003Ctr>\n",[312,71337,71338],{"class":314,"line":11567},[312,71339,71340],{"class":318},"          \u003Ctd>1001\u003C\u002Ftd>\n",[312,71342,71343],{"class":314,"line":11591},[312,71344,71345],{"class":318},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[312,71347,71348],{"class":314,"line":11596},[312,71349,71350],{"class":318},"          \u003Ctd>19\u003C\u002Ftd>\n",[312,71352,71353],{"class":314,"line":11601},[312,71354,71355],{"class":318},"          \u003Ctd>男\u003C\u002Ftd>\n",[312,71357,71358],{"class":314,"line":11606},[312,71359,71360],{"class":318},"          \u003Ctd>15000\u003C\u002Ftd>\n",[312,71362,71363],{"class":314,"line":11615},[312,71364,71365],{"class":318},"          \u003Ctd>上海\u003C\u002Ftd>\n",[312,71367,71368],{"class":314,"line":11620},[312,71369,71370],{"class":318},"          \u003Ctd>\n",[312,71372,71373],{"class":314,"line":11626},[312,71374,71375],{"class":318},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[312,71377,71378],{"class":314,"line":11647},[312,71379,71380],{"class":318},"          \u003C\u002Ftd>\n",[312,71382,71383],{"class":314,"line":11653},[312,71384,71385],{"class":318},"        \u003C\u002Ftr> \n",[312,71387,71388],{"class":314,"line":11667},[312,71389,71390],{"class":318},"        -->\n",[312,71392,71393,71395,71397],{"class":314,"line":11673},[312,71394,53563],{"class":324},[312,71396,2132],{"class":328},[312,71398,343],{"class":324},[312,71400,71401,71403,71405],{"class":314,"line":11700},[312,71402,54203],{"class":324},[312,71404,2086],{"class":328},[312,71406,343],{"class":324},[312,71408,71409,71411,71413],{"class":314,"line":11709},[312,71410,53930],{"class":324},[312,71412,53599],{"class":328},[312,71414,343],{"class":324},[312,71416,71417],{"class":314,"line":11715},[312,71418,61740],{"class":318},[312,71420,71421,71423,71426,71428,71430,71432,71434,71437],{"class":314,"line":11723},[312,71422,13024],{"class":1436},[312,71424,71425],{"class":488}," uname",[312,71427,15366],{"class":1436},[312,71429,56180],{"class":324},[312,71431,56183],{"class":332},[312,71433,1576],{"class":324},[312,71435,71436],{"class":339},"'.uname'",[312,71438,1959],{"class":324},[312,71440,71441,71443,71445,71447,71449,71451,71453,71456],{"class":314,"line":11728},[312,71442,13024],{"class":1436},[312,71444,17489],{"class":488},[312,71446,15366],{"class":1436},[312,71448,56180],{"class":324},[312,71450,56183],{"class":332},[312,71452,1576],{"class":324},[312,71454,71455],{"class":339},"'.age'",[312,71457,1959],{"class":324},[312,71459,71460,71462,71465,71467,71469,71471,71473,71476],{"class":314,"line":18404},[312,71461,13024],{"class":1436},[312,71463,71464],{"class":488}," gender",[312,71466,15366],{"class":1436},[312,71468,56180],{"class":324},[312,71470,56183],{"class":332},[312,71472,1576],{"class":324},[312,71474,71475],{"class":339},"'.gender'",[312,71477,1959],{"class":324},[312,71479,71480,71482,71485,71487,71489,71491,71493,71496],{"class":314,"line":18410},[312,71481,13024],{"class":1436},[312,71483,71484],{"class":488}," salary",[312,71486,15366],{"class":1436},[312,71488,56180],{"class":324},[312,71490,56183],{"class":332},[312,71492,1576],{"class":324},[312,71494,71495],{"class":339},"'.salary'",[312,71497,1959],{"class":324},[312,71499,71500,71502,71505,71507,71509,71511,71513,71516],{"class":314,"line":18433},[312,71501,13024],{"class":1436},[312,71503,71504],{"class":488}," city",[312,71506,15366],{"class":1436},[312,71508,56180],{"class":324},[312,71510,56183],{"class":332},[312,71512,1576],{"class":324},[312,71514,71515],{"class":339},"'.city'",[312,71517,1959],{"class":324},[312,71519,71520,71522,71525,71527,71529,71531,71533,71536],{"class":314,"line":18439},[312,71521,13024],{"class":1436},[312,71523,71524],{"class":488}," tbody",[312,71526,15366],{"class":1436},[312,71528,56180],{"class":324},[312,71530,56183],{"class":332},[312,71532,1576],{"class":324},[312,71534,71535],{"class":339},"'tbody'",[312,71537,1959],{"class":324},[312,71539,71540],{"class":314,"line":18462},[312,71541,4205],{"emptyLinePlaceholder":1881},[312,71543,71544],{"class":314,"line":18476},[312,71545,71546],{"class":318},"    \u002F\u002F 获取所有带有name属性的元素\n",[312,71548,71549,71551,71554,71556,71558,71560,71562,71565],{"class":314,"line":18496},[312,71550,13024],{"class":1436},[312,71552,71553],{"class":488}," items",[312,71555,15366],{"class":1436},[312,71557,56180],{"class":324},[312,71559,57463],{"class":332},[312,71561,1576],{"class":324},[312,71563,71564],{"class":339},"'[name]'",[312,71566,1959],{"class":324},[312,71568,71569],{"class":314,"line":18502},[312,71570,71571],{"class":318},"    \u002F\u002F 声明一个空的数组\n",[312,71573,71574,71576,71578,71580],{"class":314,"line":18513},[312,71575,13024],{"class":1436},[312,71577,59477],{"class":488},[312,71579,15366],{"class":1436},[312,71581,53624],{"class":324},[312,71583,71584],{"class":314,"line":18536},[312,71585,71586],{"class":318},"    \u002F\u002F 1.录入模块\n",[312,71588,71589],{"class":314,"line":18558},[312,71590,71591],{"class":318},"    \u002F\u002F 1.1这是一个表单提交事件\n",[312,71593,71594,71596,71599,71601,71603,71605,71607,71610],{"class":314,"line":18563},[312,71595,13024],{"class":1436},[312,71597,71598],{"class":488}," info",[312,71600,15366],{"class":1436},[312,71602,56180],{"class":324},[312,71604,56183],{"class":332},[312,71606,1576],{"class":324},[312,71608,71609],{"class":339},"'.info'",[312,71611,1959],{"class":324},[312,71613,71614,71617,71619,71621,71624,71626,71628,71630,71632],{"class":314,"line":18569},[312,71615,71616],{"class":324},"    info.",[312,71618,59595],{"class":332},[312,71620,1576],{"class":324},[312,71622,71623],{"class":339},"'submit'",[312,71625,733],{"class":324},[312,71627,56233],{"class":1436},[312,71629,3464],{"class":324},[312,71631,2024],{"class":1579},[312,71633,14244],{"class":324},[312,71635,71636],{"class":314,"line":18583},[312,71637,71638],{"class":318},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[312,71640,71641,71644,71647],{"class":314,"line":18596},[312,71642,71643],{"class":324},"      e.",[312,71645,71646],{"class":332},"preventDefault",[312,71648,3781],{"class":324},[312,71650,71651],{"class":314,"line":18601},[312,71652,61794],{"class":318},[312,71654,71655],{"class":314,"line":18615},[312,71656,4205],{"emptyLinePlaceholder":1881},[312,71658,71659],{"class":314,"line":18620},[312,71660,71661],{"class":318},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[312,71663,71664],{"class":314,"line":18626},[312,71665,71666],{"class":318},"      \u002F\u002F 先遍历循环\n",[312,71668,71669,71671,71673,71675,71677,71679,71681,71683,71685,71688,71690,71692,71694],{"class":314,"line":18631},[312,71670,54070],{"class":1436},[312,71672,3464],{"class":324},[312,71674,53633],{"class":1436},[312,71676,11241],{"class":324},[312,71678,336],{"class":1436},[312,71680,5898],{"class":488},[312,71682,11248],{"class":324},[312,71684,325],{"class":1436},[312,71686,71687],{"class":324}," items.",[312,71689,53754],{"class":488},[312,71691,5019],{"class":324},[312,71693,4097],{"class":1436},[312,71695,14244],{"class":324},[312,71697,71698,71700,71703,71705,71708],{"class":314,"line":18645},[312,71699,4302],{"class":1436},[312,71701,71702],{"class":324}," (items[i].value ",[312,71704,56270],{"class":1436},[312,71706,71707],{"class":339}," ''",[312,71709,14244],{"class":324},[312,71711,71712,71715,71718,71720,71723],{"class":314,"line":18650},[312,71713,71714],{"class":1436},"          return",[312,71716,71717],{"class":332}," alert",[312,71719,1576],{"class":324},[312,71721,71722],{"class":339},"'输入内容不能为空'",[312,71724,1959],{"class":324},[312,71726,71727],{"class":314,"line":18655},[312,71728,4334],{"class":324},[312,71730,71731],{"class":314,"line":18669},[312,71732,54184],{"class":324},[312,71734,71735],{"class":314,"line":18681},[312,71736,4205],{"emptyLinePlaceholder":1881},[312,71738,71739],{"class":314,"line":18686},[312,71740,71741],{"class":318},"      \u002F\u002F 创建新的对象\n",[312,71743,71744,71746,71749,71751],{"class":314,"line":18699},[312,71745,60010],{"class":1436},[312,71747,71748],{"class":488}," obj",[312,71750,15366],{"class":1436},[312,71752,483],{"class":324},[312,71754,71755,71758,71760,71762,71764],{"class":314,"line":18704},[312,71756,71757],{"class":324},"        stuID: arr.",[312,71759,53754],{"class":488},[312,71761,47361],{"class":1436},[312,71763,26914],{"class":488},[312,71765,33261],{"class":324},[312,71767,71768],{"class":314,"line":18709},[312,71769,71770],{"class":324},"        uname: uname.value,\n",[312,71772,71773],{"class":314,"line":18714},[312,71774,71775],{"class":324},"        age: age.value,\n",[312,71777,71778],{"class":314,"line":18727},[312,71779,71780],{"class":324},"        gender: gender.value,\n",[312,71782,71783],{"class":314,"line":18732},[312,71784,71785],{"class":324},"        salary: salary.value,\n",[312,71787,71788],{"class":314,"line":34428},[312,71789,71790],{"class":324},"        city: city.value\n",[312,71792,71793],{"class":314,"line":34434},[312,71794,54184],{"class":324},[312,71796,71797],{"class":314,"line":34440},[312,71798,71799],{"class":318},"      \u002F\u002F console.log(obj);\n",[312,71801,71802],{"class":314,"line":34446},[312,71803,71804],{"class":318},"      \u002F\u002F 追加到数组里面\n",[312,71806,71807,71809,71811],{"class":314,"line":34452},[312,71808,59789],{"class":324},[312,71810,53670],{"class":332},[312,71812,71813],{"class":324},"(obj)\n",[312,71815,71816],{"class":314,"line":34463},[312,71817,71818],{"class":318},"      \u002F\u002F console.log(arr);\n",[312,71820,71821],{"class":314,"line":34469},[312,71822,71823],{"class":318},"      \u002F\u002F 清空表单  reset重置表单\n",[312,71825,71826,71829,71831,71834],{"class":314,"line":34489},[312,71827,71828],{"class":488},"      this",[312,71830,2503],{"class":324},[312,71832,71833],{"class":332},"reset",[312,71835,3781],{"class":324},[312,71837,71838],{"class":314,"line":34495},[312,71839,71840],{"class":318},"      \u002F\u002F 调用渲染函数\n",[312,71842,71843,71846],{"class":314,"line":34506},[312,71844,71845],{"class":332},"      render",[312,71847,3781],{"class":324},[312,71849,71850],{"class":314,"line":34512},[312,71851,35256],{"class":324},[312,71853,71854],{"class":314,"line":34518},[312,71855,71856],{"class":318},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[312,71858,71859,71862,71865],{"class":314,"line":34524},[312,71860,71861],{"class":1436},"    function",[312,71863,71864],{"class":332}," render",[312,71866,12656],{"class":324},[312,71868,71869],{"class":314,"line":34530},[312,71870,71871],{"class":318},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[312,71873,71874,71877,71879],{"class":314,"line":34536},[312,71875,71876],{"class":324},"      tbody.innerHTML ",[312,71878,336],{"class":1436},[312,71880,71881],{"class":339}," ''\n",[312,71883,71884],{"class":314,"line":34542},[312,71885,71886],{"class":318},"      \u002F\u002F 遍历数组\n",[312,71888,71889,71891,71893,71895,71897,71899,71901,71903,71905,71907,71909,71911,71913],{"class":314,"line":34548},[312,71890,54070],{"class":1436},[312,71892,3464],{"class":324},[312,71894,53633],{"class":1436},[312,71896,11241],{"class":324},[312,71898,336],{"class":1436},[312,71900,5898],{"class":488},[312,71902,11248],{"class":324},[312,71904,325],{"class":1436},[312,71906,53751],{"class":324},[312,71908,53754],{"class":488},[312,71910,5019],{"class":324},[312,71912,4097],{"class":1436},[312,71914,14244],{"class":324},[312,71916,71917,71919,71922,71924,71926,71929,71931,71934],{"class":314,"line":34568},[312,71918,63050],{"class":1436},[312,71920,71921],{"class":488}," tr",[312,71923,15366],{"class":1436},[312,71925,56180],{"class":324},[312,71927,71928],{"class":332},"createElement",[312,71930,1576],{"class":324},[312,71932,71933],{"class":339},"'tr'",[312,71935,1959],{"class":324},[312,71937,71938,71941,71943],{"class":314,"line":34574},[312,71939,71940],{"class":324},"        tr.innerHTML ",[312,71942,336],{"class":1436},[312,71944,71945],{"class":339}," `\n",[312,71947,71948,71951,71953,71955,71957,71960,71963],{"class":314,"line":34590},[312,71949,71950],{"class":339},"        \u003Ctd>${",[312,71952,5685],{"class":324},[312,71954,2834],{"class":339},[312,71956,2386],{"class":324},[312,71958,71959],{"class":339},"].",[312,71961,71962],{"class":324},"stuID",[312,71964,71965],{"class":339},"}\u003C\u002Ftd>\n",[312,71967,71968,71971,71973,71975,71977,71979,71982],{"class":314,"line":34596},[312,71969,71970],{"class":339},"          \u003Ctd>${",[312,71972,5685],{"class":324},[312,71974,2834],{"class":339},[312,71976,2386],{"class":324},[312,71978,71959],{"class":339},[312,71980,71981],{"class":324},"uname",[312,71983,71965],{"class":339},[312,71985,71986,71988,71990,71992,71994,71996,71999],{"class":314,"line":34610},[312,71987,71970],{"class":339},[312,71989,5685],{"class":324},[312,71991,2834],{"class":339},[312,71993,2386],{"class":324},[312,71995,71959],{"class":339},[312,71997,71998],{"class":324},"age",[312,72000,71965],{"class":339},[312,72002,72003,72005,72007,72009,72011,72013,72016],{"class":314,"line":34616},[312,72004,71970],{"class":339},[312,72006,5685],{"class":324},[312,72008,2834],{"class":339},[312,72010,2386],{"class":324},[312,72012,71959],{"class":339},[312,72014,72015],{"class":324},"gender",[312,72017,71965],{"class":339},[312,72019,72020,72022,72024,72026,72028,72030,72033],{"class":314,"line":34631},[312,72021,71970],{"class":339},[312,72023,5685],{"class":324},[312,72025,2834],{"class":339},[312,72027,2386],{"class":324},[312,72029,71959],{"class":339},[312,72031,72032],{"class":324},"salary",[312,72034,71965],{"class":339},[312,72036,72037,72039,72041,72043,72045,72047,72050],{"class":314,"line":34637},[312,72038,71970],{"class":339},[312,72040,5685],{"class":324},[312,72042,2834],{"class":339},[312,72044,2386],{"class":324},[312,72046,71959],{"class":339},[312,72048,72049],{"class":324},"city",[312,72051,71965],{"class":339},[312,72053,72054],{"class":314,"line":34646},[312,72055,71370],{"class":339},[312,72057,72058,72061,72063],{"class":314,"line":34652},[312,72059,72060],{"class":339},"            \u003Ca href=\"javascript:\" data-id=${",[312,72062,2386],{"class":324},[312,72064,72065],{"class":339},"}>删除\u003C\u002Fa>\n",[312,72067,72068],{"class":314,"line":34661},[312,72069,72070],{"class":339},"          \u003C\u002Ftd> \n",[312,72072,72073],{"class":314,"line":34667},[312,72074,72075],{"class":339},"          `\n",[312,72077,72078],{"class":314,"line":34673},[312,72079,72080],{"class":318},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[312,72082,72083,72086,72089],{"class":314,"line":34682},[312,72084,72085],{"class":324},"        tbody.",[312,72087,72088],{"class":332},"appendChild",[312,72090,72091],{"class":324},"(tr)\n",[312,72093,72094],{"class":314,"line":34688},[312,72095,54184],{"class":324},[312,72097,72098],{"class":314,"line":34699},[312,72099,3992],{"class":324},[312,72101,72102],{"class":314,"line":34705},[312,72103,4205],{"emptyLinePlaceholder":1881},[312,72105,72106],{"class":314,"line":34724},[312,72107,72108],{"class":318},"    \u002F\u002F 3.删除委托\n",[312,72110,72111],{"class":314,"line":34730},[312,72112,72113],{"class":318},"    \u002F\u002F 3.1 事件委托 tbody\n",[312,72115,72116,72119,72121,72123,72125,72127,72129,72131,72133],{"class":314,"line":34741},[312,72117,72118],{"class":324},"    tbody.",[312,72120,59595],{"class":332},[312,72122,1576],{"class":324},[312,72124,59600],{"class":339},[312,72126,733],{"class":324},[312,72128,56233],{"class":1436},[312,72130,3464],{"class":324},[312,72132,2024],{"class":1579},[312,72134,14244],{"class":324},[312,72136,72137,72139,72141,72143,72145],{"class":314,"line":34747},[312,72138,56264],{"class":1436},[312,72140,68812],{"class":324},[312,72142,56270],{"class":1436},[312,72144,70034],{"class":339},[312,72146,14244],{"class":324},[312,72148,72149],{"class":314,"line":34767},[312,72150,72151],{"class":318},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[312,72153,72154],{"class":314,"line":34783},[312,72155,72156],{"class":318},"        \u002F\u002F console.log(e.target.dataset.id);\n",[312,72158,72159],{"class":314,"line":34789},[312,72160,72161],{"class":318},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[312,72163,72164,72167,72169,72172,72174],{"class":314,"line":34803},[312,72165,72166],{"class":324},"        arr.",[312,72168,59792],{"class":332},[312,72170,72171],{"class":324},"(e.target.dataset.id, ",[312,72173,1433],{"class":488},[312,72175,1959],{"class":324},[312,72177,72178],{"class":314,"line":34809},[312,72179,72180],{"class":318},"        \u002F\u002F 重新渲染一次\n",[312,72182,72183,72186],{"class":314,"line":34815},[312,72184,72185],{"class":332},"        render",[312,72187,3781],{"class":324},[312,72189,72190],{"class":314,"line":34826},[312,72191,54184],{"class":324},[312,72193,72194],{"class":314,"line":34832},[312,72195,35256],{"class":324},[312,72197,72198,72200,72202],{"class":314,"line":34838},[312,72199,54203],{"class":324},[312,72201,53599],{"class":328},[312,72203,343],{"class":324},[312,72205,72206],{"class":314,"line":34848},[312,72207,4205],{"emptyLinePlaceholder":1881},[312,72209,72210,72212,72214],{"class":314,"line":34854},[312,72211,353],{"class":324},[312,72213,53586],{"class":328},[312,72215,343],{"class":324},[312,72217,72218],{"class":314,"line":34865},[312,72219,4205],{"emptyLinePlaceholder":1881},[312,72221,72222,72224,72226],{"class":314,"line":34871},[312,72223,353],{"class":324},[312,72225,52430],{"class":328},[312,72227,343],{"class":324},[24,72229,72230],{},"样式：",[303,72232,72236],{"className":72233,"code":72234,"language":72235,"meta":308,"style":308},"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",[119,72237,72238,72243,72252,72261,72265,72269,72274,72284,72289,72293,72298,72308,72313,72322,72326,72330,72335,72340,72349,72359,72364,72368,72373,72382,72391,72396,72406,72416,72420,72425,72433,72437,72442,72447,72452,72460,72469,72473,72478,72487,72491,72496,72505,72509,72514,72523,72532,72540,72544,72549,72558,72567,72576,72586,72592,72601,72611,72621,72625,72630,72639,72647,72657,72665,72673,72682,72692,72700,72704,72709,72718],{"__ignoreMap":308},[312,72239,72240],{"class":314,"line":315},[312,72241,72242],{"class":324},"* {\n",[312,72244,72245,72247,72249],{"class":314,"line":171},[312,72246,853],{"class":328},[312,72248,492],{"class":324},[312,72250,72251],{"class":339},"0;\n",[312,72253,72254,72257,72259],{"class":314,"line":274},[312,72255,72256],{"class":339},"  padding",[312,72258,492],{"class":324},[312,72260,72251],{"class":339},[312,72262,72263],{"class":314,"line":298},[312,72264,515],{"class":324},[312,72266,72267],{"class":314,"line":974},[312,72268,4205],{"emptyLinePlaceholder":1881},[312,72270,72271],{"class":314,"line":980},[312,72272,72273],{"class":339},"a {\n",[312,72275,72276,72279,72281],{"class":314,"line":997},[312,72277,72278],{"class":328},"  text-decoration",[312,72280,492],{"class":324},[312,72282,72283],{"class":339},"none;\n",[312,72285,72286],{"class":314,"line":1003},[312,72287,72288],{"class":339},"  color:#721c24;\n",[312,72290,72291],{"class":314,"line":1020},[312,72292,515],{"class":324},[312,72294,72295],{"class":314,"line":1026},[312,72296,72297],{"class":339},"h1 {\n",[312,72299,72300,72303,72305],{"class":314,"line":3418},[312,72301,72302],{"class":328},"  text-align",[312,72304,492],{"class":324},[312,72306,72307],{"class":339},"center;\n",[312,72309,72310],{"class":314,"line":3423},[312,72311,72312],{"class":339},"  color:#333;\n",[312,72314,72315,72317,72319],{"class":314,"line":3429},[312,72316,853],{"class":328},[312,72318,492],{"class":324},[312,72320,72321],{"class":339},"20px 0;\n",[312,72323,72324],{"class":314,"line":3434},[312,72325,4479],{"class":324},[312,72327,72328],{"class":314,"line":3448},[312,72329,515],{"class":324},[312,72331,72332],{"class":314,"line":3453},[312,72333,72334],{"class":339},"table {\n",[312,72336,72337],{"class":314,"line":3459},[312,72338,72339],{"class":339},"  margin:0 auto;\n",[312,72341,72342,72344,72346],{"class":314,"line":3480},[312,72343,1541],{"class":328},[312,72345,492],{"class":324},[312,72347,72348],{"class":339},"800px;\n",[312,72350,72351,72354,72356],{"class":314,"line":3485},[312,72352,72353],{"class":328},"  border-collapse",[312,72355,492],{"class":324},[312,72357,72358],{"class":339},"collapse;\n",[312,72360,72361],{"class":314,"line":3499},[312,72362,72363],{"class":339},"  color:#004085;\n",[312,72365,72366],{"class":314,"line":3504},[312,72367,515],{"class":324},[312,72369,72370],{"class":314,"line":3533},[312,72371,72372],{"class":339},"th {\n",[312,72374,72375,72377,72379],{"class":314,"line":3538},[312,72376,72256],{"class":328},[312,72378,492],{"class":324},[312,72380,72381],{"class":339},"10px;\n",[312,72383,72384,72386,72388],{"class":314,"line":3555},[312,72385,1568],{"class":328},[312,72387,492],{"class":324},[312,72389,72390],{"class":318},"#cfe5ff;\n",[312,72392,72393],{"class":314,"line":3560},[312,72394,72395],{"class":324},"  \n",[312,72397,72398,72401,72403],{"class":314,"line":3565},[312,72399,72400],{"class":328},"  font-size",[312,72402,492],{"class":324},[312,72404,72405],{"class":339},"20px;\n",[312,72407,72408,72411,72413],{"class":314,"line":3570},[312,72409,72410],{"class":328},"  font-weight",[312,72412,492],{"class":324},[312,72414,72415],{"class":339},"400;\n",[312,72417,72418],{"class":314,"line":3584},[312,72419,515],{"class":324},[312,72421,72422],{"class":314,"line":3589},[312,72423,72424],{"class":339},"td,th {\n",[312,72426,72427,72430],{"class":314,"line":4382},[312,72428,72429],{"class":339},"  border:1px solid",[312,72431,72432],{"class":318}," #b8daff;\n",[312,72434,72435],{"class":314,"line":4396},[312,72436,515],{"class":324},[312,72438,72439],{"class":314,"line":4404},[312,72440,72441],{"class":339},"td {\n",[312,72443,72444],{"class":314,"line":4409},[312,72445,72446],{"class":339},"  padding:10px;\n",[312,72448,72449],{"class":314,"line":4415},[312,72450,72451],{"class":339},"  color:#666;\n",[312,72453,72454,72456,72458],{"class":314,"line":4421},[312,72455,72302],{"class":328},[312,72457,492],{"class":324},[312,72459,72307],{"class":339},[312,72461,72462,72464,72466],{"class":314,"line":4426},[312,72463,72400],{"class":328},[312,72465,492],{"class":324},[312,72467,72468],{"class":339},"16px;\n",[312,72470,72471],{"class":314,"line":9751},[312,72472,515],{"class":324},[312,72474,72475],{"class":314,"line":9775},[312,72476,72477],{"class":339},"tbody tr {\n",[312,72479,72480,72482,72484],{"class":314,"line":9780},[312,72481,1568],{"class":328},[312,72483,492],{"class":324},[312,72485,72486],{"class":318},"#fff;\n",[312,72488,72489],{"class":314,"line":9786},[312,72490,515],{"class":324},[312,72492,72493],{"class":314,"line":9813},[312,72494,72495],{"class":339},"tbody tr:hover {\n",[312,72497,72498,72500,72502],{"class":314,"line":9818},[312,72499,1568],{"class":328},[312,72501,492],{"class":324},[312,72503,72504],{"class":318},"#e1ecf8;\n",[312,72506,72507],{"class":314,"line":9824},[312,72508,515],{"class":324},[312,72510,72511],{"class":314,"line":9836},[312,72512,72513],{"class":339},".info {\n",[312,72515,72516,72518,72520],{"class":314,"line":9848},[312,72517,1541],{"class":328},[312,72519,492],{"class":324},[312,72521,72522],{"class":339},"900px;\n",[312,72524,72525,72527,72529],{"class":314,"line":9860},[312,72526,853],{"class":328},[312,72528,492],{"class":324},[312,72530,72531],{"class":339},"50px auto;\n",[312,72533,72534,72536,72538],{"class":314,"line":11519},[312,72535,72302],{"class":328},[312,72537,492],{"class":324},[312,72539,72307],{"class":339},[312,72541,72542],{"class":314,"line":11544},[312,72543,515],{"class":324},[312,72545,72546],{"class":314,"line":11567},[312,72547,72548],{"class":339},".info  input, .info select {\n",[312,72550,72551,72553,72555],{"class":314,"line":11591},[312,72552,1541],{"class":328},[312,72554,492],{"class":324},[312,72556,72557],{"class":339},"80px;\n",[312,72559,72560,72562,72564],{"class":314,"line":11596},[312,72561,1555],{"class":328},[312,72563,492],{"class":324},[312,72565,72566],{"class":339},"27px;\n",[312,72568,72569,72572,72574],{"class":314,"line":11601},[312,72570,72571],{"class":328},"  outline",[312,72573,492],{"class":324},[312,72575,72283],{"class":339},[312,72577,72578,72581,72583],{"class":314,"line":11606},[312,72579,72580],{"class":328},"  border-radius",[312,72582,492],{"class":324},[312,72584,72585],{"class":339},"5px;\n",[312,72587,72588,72590],{"class":314,"line":11615},[312,72589,72429],{"class":339},[312,72591,72432],{"class":318},[312,72593,72594,72597,72599],{"class":314,"line":11620},[312,72595,72596],{"class":328},"  padding-left",[312,72598,492],{"class":324},[312,72600,72585],{"class":339},[312,72602,72603,72606,72608],{"class":314,"line":11626},[312,72604,72605],{"class":328},"  box-sizing",[312,72607,492],{"class":324},[312,72609,72610],{"class":339},"border-box;\n",[312,72612,72613,72616,72618],{"class":314,"line":11647},[312,72614,72615],{"class":328},"  margin-right",[312,72617,492],{"class":324},[312,72619,72620],{"class":339},"15px;\n",[312,72622,72623],{"class":314,"line":11653},[312,72624,515],{"class":324},[312,72626,72627],{"class":314,"line":11667},[312,72628,72629],{"class":339},".info button {\n",[312,72631,72632,72634,72636],{"class":314,"line":11673},[312,72633,1541],{"class":328},[312,72635,492],{"class":324},[312,72637,72638],{"class":339},"60px;\n",[312,72640,72641,72643,72645],{"class":314,"line":11700},[312,72642,1555],{"class":328},[312,72644,492],{"class":324},[312,72646,72566],{"class":339},[312,72648,72649,72652,72654],{"class":314,"line":11709},[312,72650,72651],{"class":328},"  background-color",[312,72653,492],{"class":324},[312,72655,72656],{"class":318},"#004085;\n",[312,72658,72659,72661,72663],{"class":314,"line":11715},[312,72660,72571],{"class":328},[312,72662,492],{"class":324},[312,72664,72283],{"class":339},[312,72666,72667,72669,72671],{"class":314,"line":11723},[312,72668,1428],{"class":328},[312,72670,492],{"class":324},[312,72672,72251],{"class":339},[312,72674,72675,72678,72680],{"class":314,"line":11728},[312,72676,72677],{"class":328},"  color",[312,72679,492],{"class":324},[312,72681,72486],{"class":318},[312,72683,72684,72687,72689],{"class":314,"line":18404},[312,72685,72686],{"class":328},"  cursor",[312,72688,492],{"class":324},[312,72690,72691],{"class":339},"pointer;\n",[312,72693,72694,72696,72698],{"class":314,"line":18410},[312,72695,72580],{"class":328},[312,72697,492],{"class":324},[312,72699,72585],{"class":339},[312,72701,72702],{"class":314,"line":18433},[312,72703,515],{"class":324},[312,72705,72706],{"class":314,"line":18439},[312,72707,72708],{"class":339},".info .age {\n",[312,72710,72711,72713,72715],{"class":314,"line":18462},[312,72712,1541],{"class":328},[312,72714,492],{"class":324},[312,72716,72717],{"class":339},"50px;\n",[312,72719,72720],{"class":314,"line":18476},[312,72721,515],{"class":324},[24,72723,72724],{},"思路：",[24,72726,72727],{},[19,72728],{"alt":308,"src":72729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[24,72731,72732],{},[19,72733],{"alt":308,"src":72734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[24,72736,72737],{},[19,72738],{"alt":308,"src":72739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[69,72741,72743],{"id":72742},"_3315-重绘回流","3.3.15 重绘回流",[24,72745,72746],{},[19,72747],{"alt":308,"src":72748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[24,72750,72751],{},[19,72752],{"alt":308,"src":72753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[24,72755,72756],{},[19,72757],{"alt":308,"src":72758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72760,72762],{"id":72761},"_34-bom","3.4 BOM",[24,72764,72765],{},[19,72766],{"alt":308,"src":72767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[24,72769,72770],{},"平时写的document省略了window而已，实际上是window.document",[24,72772,72773],{},"函数也是这样，调用的时候实际为window.fn()",[24,72775,72776],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[24,72778,72779],{},"window大部分情况下可以省略",[69,72781,72783],{"id":72782},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[24,72785,72786],{},"只执行一次",[24,72788,72789],{},[19,72790],{"alt":308,"src":72791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[24,72793,72794],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[24,72796,72797],{},[19,72798],{"alt":308,"src":72799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[69,72801,72803],{"id":72802},"_342-js执行机制","3.4.2 JS执行机制",[24,72805,72806],{},[19,72807],{"alt":308,"src":72808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[24,72810,72811],{},"两个的结果都是1111 3333 2222",[24,72813,72814],{},[19,72815],{"alt":308,"src":72816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[24,72818,72819],{},[19,72820],{"alt":308,"src":72821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[24,72823,72824],{},[19,72825],{"alt":308,"src":72826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[24,72828,72829],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[24,72831,72832],{},"工作流程：",[24,72834,72835],{},[19,72836],{"alt":308,"src":72837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[24,72839,72840],{},[19,72841],{"alt":308,"src":72842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[24,72844,72845],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[24,72847,72848],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[69,72850,72852],{"id":72851},"_343-location对象","3.4.3 location对象",[24,72854,72855],{},"location对象属于window这个全局对象下的，可以 省略window",[24,72857,72858],{},[19,72859],{"alt":308,"src":72860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[24,72862,72863],{},"href可以跳转页面",[140,72865,72866],{},[143,72867,72868],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[24,72870,72871],{},"search得到提交信息之后网站后边的地址",[24,72873,72874],{},[19,72875],{"alt":308,"src":72876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[24,72878,72879],{},[19,72880],{"alt":308,"src":72881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[140,72883,72884],{"start":171},[143,72885,72886],{},"hash:这个获取单页面应用#后边的地址",[24,72888,72889],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[24,72891,72892],{},[19,72893],{"alt":308,"src":72894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[303,72896,72898],{"className":54853,"code":72897,"language":54855,"meta":308,"style":308},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[119,72899,72900,72920,72940],{"__ignoreMap":308},[312,72901,72902,72904,72906,72908,72910,72913,72916,72918],{"class":314,"line":315},[312,72903,53930],{"class":324},[312,72905,164],{"class":328},[312,72907,648],{"class":332},[312,72909,336],{"class":324},[312,72911,72912],{"class":339},"\"#\u002Fmy\"",[312,72914,72915],{"class":324},">我的\u003C\u002F",[312,72917,164],{"class":328},[312,72919,343],{"class":324},[312,72921,72922,72924,72926,72928,72930,72933,72936,72938],{"class":314,"line":171},[312,72923,53930],{"class":324},[312,72925,164],{"class":328},[312,72927,648],{"class":332},[312,72929,336],{"class":324},[312,72931,72932],{"class":339},"\"#\u002Ffriend\"",[312,72934,72935],{"class":324},">关注\u003C\u002F",[312,72937,164],{"class":328},[312,72939,343],{"class":324},[312,72941,72942,72944,72946,72948,72950,72953,72956,72958],{"class":314,"line":274},[312,72943,53930],{"class":324},[312,72945,164],{"class":328},[312,72947,648],{"class":332},[312,72949,336],{"class":324},[312,72951,72952],{"class":339},"\"#\u002Fdownload\"",[312,72954,72955],{"class":324},">下载\u003C\u002F",[312,72957,164],{"class":328},[312,72959,343],{"class":324},[24,72961,72962],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[140,72964,72965],{"start":274},[143,72966,72967,72968,72970,72971,72973],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[55500,72969],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[55500,72972],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[69,72975,72977],{"id":72976},"_345-navigator对象","3.4.5 navigator对象",[24,72979,72980],{},[19,72981],{"alt":308,"src":72982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[303,72984,72988],{"className":72985,"code":72986,"language":72987,"meta":308,"style":308},"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",[119,72989,72990,72995,73006,73018,73023,73074,73115,73120,73133,73145,73150],{"__ignoreMap":308},[312,72991,72992],{"class":314,"line":315},[312,72993,72994],{"class":318},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[312,72996,72997,72999,73001,73003],{"class":314,"line":171},[312,72998,2172],{"class":1436},[312,73000,1576],{"class":324},[312,73002,56233],{"class":1436},[312,73004,73005],{"class":324}," () { \n",[312,73007,73008,73010,73013,73015],{"class":314,"line":274},[312,73009,8596],{"class":1436},[312,73011,73012],{"class":488}," userAgent",[312,73014,15366],{"class":1436},[312,73016,73017],{"class":324}," navigator.userAgent \n",[312,73019,73020],{"class":314,"line":298},[312,73021,73022],{"class":318},"\u002F\u002F 验证是否为Android或iPhone \n",[312,73024,73025,73027,73030,73032,73035,73038,73040,73042,73045,73047,73050,73054,73056,73058,73060,73063,73065,73067,73069,73071],{"class":314,"line":974},[312,73026,8596],{"class":1436},[312,73028,73029],{"class":488}," android",[312,73031,15366],{"class":1436},[312,73033,73034],{"class":324}," userAgent.",[312,73036,73037],{"class":332},"match",[312,73039,1576],{"class":324},[312,73041,2529],{"class":339},[312,73043,73044],{"class":49772},"(Android);",[312,73046,2928],{"class":1436},[312,73048,73049],{"class":488},"[\\s",[312,73051,73053],{"class":73052},"snhLl","\\\u002F",[312,73055,2882],{"class":488},[312,73057,2426],{"class":1436},[312,73059,1576],{"class":49772},[312,73061,73062],{"class":488},"[\\d.]",[312,73064,2426],{"class":1436},[312,73066,2374],{"class":49772},[312,73068,2928],{"class":1436},[312,73070,2529],{"class":339},[312,73072,73073],{"class":324},") \n",[312,73075,73076,73078,73081,73083,73085,73087,73089,73091,73094,73097,73100,73102,73104,73107,73109,73111,73113],{"class":314,"line":980},[312,73077,8596],{"class":1436},[312,73079,73080],{"class":488}," iphone",[312,73082,15366],{"class":1436},[312,73084,73034],{"class":324},[312,73086,73037],{"class":332},[312,73088,1576],{"class":324},[312,73090,2529],{"class":339},[312,73092,73093],{"class":49772},"(iPhone",[312,73095,73096],{"class":488},"\\s",[312,73098,73099],{"class":49772},"OS)",[312,73101,73096],{"class":488},[312,73103,1576],{"class":49772},[312,73105,73106],{"class":488},"[\\d_]",[312,73108,2426],{"class":1436},[312,73110,2374],{"class":49772},[312,73112,2529],{"class":339},[312,73114,73073],{"class":324},[312,73116,73117],{"class":314,"line":997},[312,73118,73119],{"class":318},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[312,73121,73122,73124,73127,73130],{"class":314,"line":1003},[312,73123,3338],{"class":1436},[312,73125,73126],{"class":324}," (android ",[312,73128,73129],{"class":1436},"||",[312,73131,73132],{"class":324}," iphone) { \n",[312,73134,73135,73138,73140,73143],{"class":314,"line":1020},[312,73136,73137],{"class":324},"location.href ",[312,73139,336],{"class":1436},[312,73141,73142],{"class":339}," 'http:\u002F\u002Fm.itcast.cn'",[312,73144,4479],{"class":324},[312,73146,73147],{"class":314,"line":1026},[312,73148,73149],{"class":324},"} \n",[312,73151,73152],{"class":314,"line":3418},[312,73153,73154],{"class":324},"})()\n",[69,73156,73158],{"id":73157},"_346-histroy对象","3.4.6 histroy对象",[24,73160,73161],{},[19,73162],{"alt":308,"src":73163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[24,73165,73166],{},"浏览器地址的前进与后退!!!",[24,73168,73169],{},"history.back() 等效于 history.go(-1)",[24,73171,73172],{},"history.forward() 等效于 history.go(1)",[14,73174,73176],{"id":73175},"_35-本地存储","3.5 本地存储",[140,73178,73179,73182,73185],{},[143,73180,73181],{},"数据存储在用户浏览器中",[143,73183,73184],{},"设置、读取方便、甚至页面刷新不丢失数据",[143,73186,73187],{},"容量较大，sessionStorage和localStorage约 5M 左右",[69,73189,73191],{"id":73190},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[24,73193,73194],{},"只能存储字符串",[24,73196,73197],{},[19,73198],{"alt":308,"src":73199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[24,73201,73202],{},[19,73203],{"alt":308,"src":73204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[24,73206,73207],{},"键值对要加引号,不然就会当变量来看了",[24,73209,73210],{},"localStorage.setItem('uname', 'pink')",[24,73212,73213],{},"刷新之后信息不再丢失",[24,73215,73216],{},"操作key,value会跟着变",[24,73218,73219],{},"删除只删除键就可以,即名字",[24,73221,73210],{},[24,73223,73224],{},"改:",[24,73226,73227],{},"localStorage.setItem('uname','red')",[24,73229,73230],{},"有这个键就是改,没有这个键就是改",[24,73232,73233],{},[19,73234],{"alt":308,"src":73235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[24,73237,73238],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[24,73240,73241],{},[19,73242],{"alt":308,"src":73243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[24,73245,73246],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[69,73248,73250],{"id":73249},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[24,73252,73253],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[24,73255,73256],{},"特性:",[140,73258,73259,73262,73265,73268],{},[143,73260,73261],{},"生命周期为关闭浏览器窗口",[143,73263,73264],{},"在同一个窗口(页面)下数据可以共享",[143,73266,73267],{},"以键值对的形式存储使用",[143,73269,73270],{},"用法跟localStorage 基本相同",[69,73272,73274],{"id":73273},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[24,73276,73277],{},"本地只能存储字符串,无法直接存储复杂数据类型",[303,73279,73281],{"className":54853,"code":73280,"language":54855,"meta":308,"style":308},"\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",[119,73282,73283,73291,73296,73301,73306,73311,73315,73320,73325],{"__ignoreMap":308},[312,73284,73285,73287,73289],{"class":314,"line":315},[312,73286,325],{"class":324},[312,73288,53599],{"class":328},[312,73290,343],{"class":324},[312,73292,73293],{"class":314,"line":171},[312,73294,73295],{"class":324},"    const obj = {\n",[312,73297,73298],{"class":314,"line":274},[312,73299,73300],{"class":324},"      uname: 'pink老师',\n",[312,73302,73303],{"class":314,"line":298},[312,73304,73305],{"class":324},"      age: 18,\n",[312,73307,73308],{"class":314,"line":974},[312,73309,73310],{"class":324},"      gender: '女'\n",[312,73312,73313],{"class":314,"line":980},[312,73314,3992],{"class":324},[312,73316,73317],{"class":314,"line":997},[312,73318,73319],{"class":324},"    \u002F\u002F 存储复杂数据类型\n",[312,73321,73322],{"class":314,"line":1003},[312,73323,73324],{"class":324},"    localStorage.setItem('obj', obj)\n",[312,73326,73327,73329,73331],{"class":314,"line":1020},[312,73328,54203],{"class":324},[312,73330,53599],{"class":328},[312,73332,343],{"class":324},[24,73334,73335],{},[19,73336],{"alt":308,"src":73337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[24,73339,73340],{},"如果获取一下数据:",[24,73342,73343],{},"log(localStorage.getItem('obj'))",[24,73345,73346],{},[19,73347],{"alt":308,"src":73348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[24,73350,73351],{},"发现直接存对象是使用不了的!!!",[23796,73353,73355],{"id":73354},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[24,73357,73358],{},[19,73359],{"alt":308,"src":73360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[303,73362,73364],{"className":52428,"code":73363,"language":52430,"meta":308,"style":308},"\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",[119,73365,73366,73374,73384,73394,73403,73411,73415,73419,73445,73464,73472,73476,73481,73486],{"__ignoreMap":308},[312,73367,73368,73370,73372],{"class":314,"line":315},[312,73369,325],{"class":324},[312,73371,53599],{"class":328},[312,73373,343],{"class":324},[312,73375,73376,73378,73380,73382],{"class":314,"line":171},[312,73377,13024],{"class":1436},[312,73379,71748],{"class":488},[312,73381,15366],{"class":1436},[312,73383,483],{"class":324},[312,73385,73386,73389,73392],{"class":314,"line":274},[312,73387,73388],{"class":324},"      uname: ",[312,73390,73391],{"class":339},"'pink老师'",[312,73393,33261],{"class":324},[312,73395,73396,73399,73401],{"class":314,"line":298},[312,73397,73398],{"class":324},"      age: ",[312,73400,2595],{"class":488},[312,73402,33261],{"class":324},[312,73404,73405,73408],{"class":314,"line":974},[312,73406,73407],{"class":324},"      gender: ",[312,73409,73410],{"class":339},"'女'\n",[312,73412,73413],{"class":314,"line":980},[312,73414,3992],{"class":324},[312,73416,73417],{"class":314,"line":997},[312,73418,73319],{"class":318},[312,73420,73421,73424,73427,73429,73432,73434,73437,73439,73442],{"class":314,"line":1003},[312,73422,73423],{"class":324},"  localStorage.",[312,73425,73426],{"class":332},"setItem",[312,73428,1576],{"class":324},[312,73430,73431],{"class":339},"'obj'",[312,73433,733],{"class":324},[312,73435,73436],{"class":488},"JSON",[312,73438,2503],{"class":324},[312,73440,73441],{"class":332},"stringify",[312,73443,73444],{"class":324},"(obj))\n",[312,73446,73447,73450,73452,73455,73458,73460,73462],{"class":314,"line":1020},[312,73448,73449],{"class":324},"  console.",[312,73451,60029],{"class":332},[312,73453,73454],{"class":324},"(localStorage.",[312,73456,73457],{"class":332},"getItem",[312,73459,1576],{"class":324},[312,73461,73431],{"class":339},[312,73463,32293],{"class":324},[312,73465,73466,73468,73470],{"class":314,"line":1026},[312,73467,54203],{"class":324},[312,73469,53599],{"class":328},[312,73471,343],{"class":324},[312,73473,73474],{"class":314,"line":3418},[312,73475,72395],{"class":324},[312,73477,73478],{"class":314,"line":3423},[312,73479,73480],{"class":324},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[312,73482,73483],{"class":314,"line":3429},[312,73484,73485],{"class":324},"  类型是字符串的\n",[312,73487,73488],{"class":314,"line":3434},[312,73489,73490],{"class":324},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[23796,73492,73494],{"id":73493},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[24,73496,73497],{},[19,73498],{"alt":308,"src":73499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[24,73501,73502],{},[19,73503],{"alt":308,"src":73504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[303,73506,73508],{"className":54853,"code":73507,"language":54855,"meta":308,"style":308},"  \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",[119,73509,73510,73518,73522,73526,73530,73534,73538,73543,73548,73553,73558,73563,73568,73573,73578],{"__ignoreMap":308},[312,73511,73512,73514,73516],{"class":314,"line":315},[312,73513,53930],{"class":324},[312,73515,53599],{"class":328},[312,73517,343],{"class":324},[312,73519,73520],{"class":314,"line":171},[312,73521,73295],{"class":324},[312,73523,73524],{"class":314,"line":274},[312,73525,73300],{"class":324},[312,73527,73528],{"class":314,"line":298},[312,73529,73305],{"class":324},[312,73531,73532],{"class":314,"line":974},[312,73533,73310],{"class":324},[312,73535,73536],{"class":314,"line":980},[312,73537,3992],{"class":324},[312,73539,73540],{"class":314,"line":997},[312,73541,73542],{"class":324},"    \u002F\u002F 1.存储复杂数据类型\n",[312,73544,73545],{"class":314,"line":1003},[312,73546,73547],{"class":324},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[312,73549,73550],{"class":314,"line":1020},[312,73551,73552],{"class":324},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[312,73554,73555],{"class":314,"line":1026},[312,73556,73557],{"class":324},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[312,73559,73560],{"class":314,"line":3418},[312,73561,73562],{"class":324},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[312,73564,73565],{"class":314,"line":3423},[312,73566,73567],{"class":324},"    \u002F\u002F 取\n",[312,73569,73570],{"class":314,"line":3429},[312,73571,73572],{"class":324},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[312,73574,73575],{"class":314,"line":3434},[312,73576,73577],{"class":324},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[312,73579,73580,73582,73584],{"class":314,"line":3448},[312,73581,54203],{"class":324},[312,73583,53599],{"class":328},[312,73585,343],{"class":324},[24,73587,73588],{},[19,73589],{"alt":308,"src":73590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[69,73592,73594],{"id":73593},"_356-数组map方法","3.5.6 数组map方法",[24,73596,73597],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[24,73599,73600],{},[19,73601],{"alt":308,"src":73602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[24,73604,73605],{},[19,73606],{"alt":308,"src":73607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[24,73609,73610,73613],{},[27,73611,73612],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[24,73615,73616],{},"map有返回值，但是forEach没有返回值",[24,73618,73619],{},"map是个方法。用的时候要加 ()",[24,73621,73622],{},"map返回的是一个数组",[69,73624,73626],{"id":73625},"_357-数组中join方法","3.5.7 数组中join方法",[24,73628,73629],{},[19,73630],{"alt":308,"src":73631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[24,73633,73634],{},"类似于python中拼接字符串一样！",[140,73636,73637,73640,73643],{},[143,73638,73639],{},"小括号为空则逗号分开",[143,73641,73642],{},"小括号为空字符串 ''，则元素之间没有分隔符",[143,73644,73645],{},"小括号用啥符号就用进行分割",[69,73647,73649],{"id":73648},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[140,73651,73652,73655,73658,73661,73664],{},[143,73653,73654],{},"记住本地时间获取快速方式：new Date().toDateString()",[143,73656,73657],{},"尽量减少DOM操作，用好map+join的渲染方式",[143,73659,73660],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[143,73662,73663],{},"return可以实现函数的结束",[143,73665,73666],{},"禁止跳转是 preventDefault() 不要忘记",[303,73668,73670],{"className":52428,"code":73669,"language":52430,"meta":308,"style":308},"\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",[119,73671,73672,73682,73696,73700,73708,73722,73742,73754,73762,73768,73778,73788,73792,73796,73802,73812,73824,73828,73832,73839,73851,73865,73875,73879,73883,73890,73897,73904,73916,73928,73938,73950,73954,73958,73965,73972,73984,73996,74006,74018,74048,74052,74056,74063,74075,74087,74111,74121,74131,74135,74139,74147,74158,74170,74182,74194,74211,74223,74235,74239,74243,74250,74262,74274,74286,74297,74315,74328,74340,74364,74375,74379,74383,74391,74401,74405,74409,74415,74427,74438,74448,74452,74456,74462,74484,74488,74492,74498,74504,74516,74526,74538,74568,74581,74598,74602,74606,74617,74639,74649,74653,74657,74670,74680,74692,74704,74716,74728,74738,74748,74758,74769,74782,74786,74794,74802,74806,74814,74827,74847,74880,74913,74946,74972,74990,75008,75016,75042,75060,75078,75096,75114,75132,75140,75148,75166,75174,75203,75211,75219,75227,75240,75252,75264,75276,75288,75300,75313,75325,75333,75341,75349,75354,75359,75363,75367,75371,75375,75379,75383,75388,75393,75398,75403,75411,75419,75427,75432,75437,75442,75447,75452,75457,75462,75467,75472,75477,75482,75487,75492,75497,75501,75506,75511,75521,75530,75534,75539,75548,75564,75606,75646,75685,75750,75758,75762,75767,75785,75793,75798,75803,75833,75839,75844,75857,75869,75881,75893,75905,75917,75929,75933,75943,75947,75952,75957,75961,75970,75974,75979,75984,76003,76008,76028,76032,76037,76041,76046,76064,76082,76100,76119,76138,76157,76162,76168,76189,76195,76204,76210,76216,76222,76249,76262,76267,76277,76283,76289,76295,76301,76306,76312,76318,76324,76330,76363,76368,76373,76378,76383,76389,76395,76401,76412,76417,76423,76430,76444,76450,76474,76479,76484,76490,76496,76517,76523,76536,76542,76548,76554,76560,76565,76571,76577,76583,76601,76615,76621,76629,76635,76657,76662,76667,76672,76677,76682,76691,76700,76705],{"__ignoreMap":308},[312,73673,73674,73676,73678,73680],{"class":314,"line":315},[312,73675,53092],{"class":324},[312,73677,53095],{"class":328},[312,73679,53098],{"class":332},[312,73681,343],{"class":324},[312,73683,73684,73686,73688,73690,73692,73694],{"class":314,"line":171},[312,73685,325],{"class":324},[312,73687,52430],{"class":328},[312,73689,53109],{"class":332},[312,73691,336],{"class":324},[312,73693,53114],{"class":339},[312,73695,343],{"class":324},[312,73697,73698],{"class":314,"line":274},[312,73699,4205],{"emptyLinePlaceholder":1881},[312,73701,73702,73704,73706],{"class":314,"line":298},[312,73703,325],{"class":324},[312,73705,53127],{"class":328},[312,73707,343],{"class":324},[312,73709,73710,73712,73714,73716,73718,73720],{"class":314,"line":974},[312,73711,53930],{"class":324},[312,73713,53137],{"class":328},[312,73715,53140],{"class":332},[312,73717,336],{"class":324},[312,73719,53145],{"class":339},[312,73721,343],{"class":324},[312,73723,73724,73726,73728,73730,73732,73734,73736,73738,73740],{"class":314,"line":980},[312,73725,53930],{"class":324},[312,73727,53137],{"class":328},[312,73729,16721],{"class":332},[312,73731,336],{"class":324},[312,73733,53184],{"class":339},[312,73735,53164],{"class":332},[312,73737,336],{"class":324},[312,73739,53191],{"class":339},[312,73741,343],{"class":324},[312,73743,73744,73746,73748,73750,73752],{"class":314,"line":997},[312,73745,53930],{"class":324},[312,73747,628],{"class":328},[312,73749,53202],{"class":324},[312,73751,628],{"class":328},[312,73753,343],{"class":324},[312,73755,73756,73758,73760],{"class":314,"line":1003},[312,73757,53930],{"class":324},[312,73759,1856],{"class":328},[312,73761,343],{"class":324},[312,73763,73764,73766],{"class":314,"line":1020},[312,73765,8207],{"class":328},[312,73767,483],{"class":324},[312,73769,73770,73772,73774,73776],{"class":314,"line":1026},[312,73771,56479],{"class":488},[312,73773,492],{"class":324},[312,73775,858],{"class":488},[312,73777,498],{"class":324},[312,73779,73780,73782,73784,73786],{"class":314,"line":3418},[312,73781,56490],{"class":488},[312,73783,492],{"class":324},[312,73785,858],{"class":488},[312,73787,498],{"class":324},[312,73789,73790],{"class":314,"line":3423},[312,73791,3992],{"class":324},[312,73793,73794],{"class":314,"line":3429},[312,73795,4205],{"emptyLinePlaceholder":1881},[312,73797,73798,73800],{"class":314,"line":3434},[312,73799,59061],{"class":328},[312,73801,483],{"class":324},[312,73803,73804,73806,73808,73810],{"class":314,"line":3448},[312,73805,59068],{"class":488},[312,73807,492],{"class":324},[312,73809,53380],{"class":488},[312,73811,498],{"class":324},[312,73813,73814,73816,73818,73820,73822],{"class":314,"line":3453},[312,73815,63855],{"class":488},[312,73817,492],{"class":324},[312,73819,1546],{"class":488},[312,73821,1437],{"class":1436},[312,73823,498],{"class":324},[312,73825,73826],{"class":314,"line":3459},[312,73827,3992],{"class":324},[312,73829,73830],{"class":314,"line":3480},[312,73831,4205],{"emptyLinePlaceholder":1881},[312,73833,73834,73837],{"class":314,"line":3485},[312,73835,73836],{"class":332},"    .info",[312,73838,483],{"class":324},[312,73840,73841,73843,73845,73847,73849],{"class":314,"line":3499},[312,73842,56554],{"class":488},[312,73844,492],{"class":324},[312,73846,53280],{"class":488},[312,73848,1437],{"class":1436},[312,73850,498],{"class":324},[312,73852,73853,73855,73857,73859,73861,73863],{"class":314,"line":3504},[312,73854,56490],{"class":488},[312,73856,492],{"class":324},[312,73858,2391],{"class":488},[312,73860,1437],{"class":1436},[312,73862,861],{"class":488},[312,73864,498],{"class":324},[312,73866,73867,73869,73871,73873],{"class":314,"line":3533},[312,73868,59068],{"class":488},[312,73870,492],{"class":324},[312,73872,53380],{"class":488},[312,73874,498],{"class":324},[312,73876,73877],{"class":314,"line":3538},[312,73878,3992],{"class":324},[312,73880,73881],{"class":314,"line":3555},[312,73882,4205],{"emptyLinePlaceholder":1881},[312,73884,73885,73888],{"class":314,"line":3560},[312,73886,73887],{"class":332},"    .uname",[312,73889,33261],{"class":324},[312,73891,73892,73895],{"class":314,"line":3565},[312,73893,73894],{"class":332},"    .age",[312,73896,33261],{"class":324},[312,73898,73899,73902],{"class":314,"line":3570},[312,73900,73901],{"class":332},"    .salary",[312,73903,483],{"class":324},[312,73905,73906,73908,73910,73912,73914],{"class":314,"line":3584},[312,73907,56554],{"class":488},[312,73909,492],{"class":324},[312,73911,2256],{"class":488},[312,73913,1437],{"class":1436},[312,73915,498],{"class":324},[312,73917,73918,73920,73922,73924,73926],{"class":314,"line":3589},[312,73919,56568],{"class":488},[312,73921,492],{"class":324},[312,73923,1546],{"class":488},[312,73925,1437],{"class":1436},[312,73927,498],{"class":324},[312,73929,73930,73932,73934,73936],{"class":314,"line":4382},[312,73931,63558],{"class":488},[312,73933,492],{"class":324},[312,73935,56521],{"class":488},[312,73937,498],{"class":324},[312,73939,73940,73942,73944,73946,73948],{"class":314,"line":4396},[312,73941,63528],{"class":488},[312,73943,492],{"class":324},[312,73945,2520],{"class":488},[312,73947,1437],{"class":1436},[312,73949,498],{"class":324},[312,73951,73952],{"class":314,"line":4404},[312,73953,3992],{"class":324},[312,73955,73956],{"class":314,"line":4409},[312,73957,4205],{"emptyLinePlaceholder":1881},[312,73959,73960,73963],{"class":314,"line":4415},[312,73961,73962],{"class":332},"    .gender",[312,73964,33261],{"class":324},[312,73966,73967,73970],{"class":314,"line":4421},[312,73968,73969],{"class":332},"    .city",[312,73971,483],{"class":324},[312,73973,73974,73976,73978,73980,73982],{"class":314,"line":4426},[312,73975,56554],{"class":488},[312,73977,492],{"class":324},[312,73979,2256],{"class":488},[312,73981,1437],{"class":1436},[312,73983,498],{"class":324},[312,73985,73986,73988,73990,73992,73994],{"class":314,"line":9751},[312,73987,56568],{"class":488},[312,73989,492],{"class":324},[312,73991,2769],{"class":488},[312,73993,1437],{"class":1436},[312,73995,498],{"class":324},[312,73997,73998,74000,74002,74004],{"class":314,"line":9775},[312,73999,63558],{"class":488},[312,74001,492],{"class":324},[312,74003,56521],{"class":488},[312,74005,498],{"class":324},[312,74007,74008,74010,74012,74014,74016],{"class":314,"line":9780},[312,74009,63528],{"class":488},[312,74011,492],{"class":324},[312,74013,2520],{"class":488},[312,74015,1437],{"class":1436},[312,74017,498],{"class":324},[312,74019,74020,74022,74024,74026,74028,74030,74033,74035,74037,74039,74042,74044,74046],{"class":314,"line":9786},[312,74021,63755],{"class":488},[312,74023,492],{"class":324},[312,74025,1433],{"class":488},[312,74027,1437],{"class":1436},[312,74029,1440],{"class":488},[312,74031,74032],{"class":488}," rgb",[312,74034,1576],{"class":324},[312,74036,3528],{"class":488},[312,74038,733],{"class":324},[312,74040,74041],{"class":488},"197",[312,74043,733],{"class":324},[312,74045,74041],{"class":488},[312,74047,4524],{"class":324},[312,74049,74050],{"class":314,"line":9813},[312,74051,3992],{"class":324},[312,74053,74054],{"class":314,"line":9818},[312,74055,4205],{"emptyLinePlaceholder":1881},[312,74057,74058,74061],{"class":314,"line":9824},[312,74059,74060],{"class":328},"    button",[312,74062,483],{"class":324},[312,74064,74065,74067,74069,74071,74073],{"class":314,"line":9836},[312,74066,56568],{"class":488},[312,74068,492],{"class":324},[312,74070,2769],{"class":488},[312,74072,1437],{"class":1436},[312,74074,498],{"class":324},[312,74076,74077,74079,74081,74083,74085],{"class":314,"line":9848},[312,74078,56554],{"class":488},[312,74080,492],{"class":324},[312,74082,2429],{"class":488},[312,74084,1437],{"class":1436},[312,74086,498],{"class":324},[312,74088,74089,74091,74093,74096,74098,74100,74102,74105,74107,74109],{"class":314,"line":9860},[312,74090,56666],{"class":488},[312,74092,492],{"class":324},[312,74094,74095],{"class":488},"rgb",[312,74097,1576],{"class":324},[312,74099,2911],{"class":488},[312,74101,733],{"class":324},[312,74103,74104],{"class":488},"187",[312,74106,733],{"class":324},[312,74108,2244],{"class":488},[312,74110,4524],{"class":324},[312,74112,74113,74115,74117,74119],{"class":314,"line":11519},[312,74114,59198],{"class":488},[312,74116,492],{"class":324},[312,74118,62624],{"class":488},[312,74120,498],{"class":324},[312,74122,74123,74125,74127,74129],{"class":314,"line":11544},[312,74124,63755],{"class":488},[312,74126,492],{"class":324},[312,74128,858],{"class":488},[312,74130,498],{"class":324},[312,74132,74133],{"class":314,"line":11567},[312,74134,3992],{"class":324},[312,74136,74137],{"class":314,"line":11591},[312,74138,4205],{"emptyLinePlaceholder":1881},[312,74140,74141,74143,74145],{"class":314,"line":11596},[312,74142,74060],{"class":328},[312,74144,53475],{"class":328},[312,74146,483],{"class":324},[312,74148,74149,74151,74153,74156],{"class":314,"line":11601},[312,74150,56791],{"class":488},[312,74152,492],{"class":324},[312,74154,74155],{"class":488},"inline-block",[312,74157,498],{"class":324},[312,74159,74160,74162,74164,74166,74168],{"class":314,"line":11606},[312,74161,56554],{"class":488},[312,74163,492],{"class":324},[312,74165,2391],{"class":488},[312,74167,1437],{"class":1436},[312,74169,498],{"class":324},[312,74171,74172,74174,74176,74178,74180],{"class":314,"line":11615},[312,74173,56568],{"class":488},[312,74175,492],{"class":324},[312,74177,2391],{"class":488},[312,74179,1437],{"class":1436},[312,74181,498],{"class":324},[312,74183,74184,74186,74188,74190,74192],{"class":314,"line":11620},[312,74185,59141],{"class":488},[312,74187,492],{"class":324},[312,74189,2417],{"class":488},[312,74191,1437],{"class":1436},[312,74193,498],{"class":324},[312,74195,74196,74198,74200,74202,74204,74206,74209],{"class":314,"line":11626},[312,74197,63755],{"class":488},[312,74199,492],{"class":324},[312,74201,1433],{"class":488},[312,74203,1437],{"class":1436},[312,74205,1440],{"class":488},[312,74207,74208],{"class":488}," #fff",[312,74210,498],{"class":324},[312,74212,74213,74215,74217,74219,74221],{"class":314,"line":11647},[312,74214,56916],{"class":488},[312,74216,492],{"class":324},[312,74218,2264],{"class":488},[312,74220,1437],{"class":1436},[312,74222,498],{"class":324},[312,74224,74225,74227,74229,74231,74233],{"class":314,"line":11653},[312,74226,63528],{"class":488},[312,74228,492],{"class":324},[312,74230,1433],{"class":488},[312,74232,1437],{"class":1436},[312,74234,498],{"class":324},[312,74236,74237],{"class":314,"line":11667},[312,74238,3992],{"class":324},[312,74240,74241],{"class":314,"line":11673},[312,74242,4205],{"emptyLinePlaceholder":1881},[312,74244,74245,74248],{"class":314,"line":11700},[312,74246,74247],{"class":332},"    .total",[312,74249,483],{"class":324},[312,74251,74252,74254,74256,74258,74260],{"class":314,"line":11709},[312,74253,56554],{"class":488},[312,74255,492],{"class":324},[312,74257,63409],{"class":488},[312,74259,1437],{"class":1436},[312,74261,498],{"class":324},[312,74263,74264,74266,74268,74270,74272],{"class":314,"line":11715},[312,74265,56568],{"class":488},[312,74267,492],{"class":324},[312,74269,2346],{"class":488},[312,74271,1437],{"class":1436},[312,74273,498],{"class":324},[312,74275,74276,74278,74280,74282,74284],{"class":314,"line":11723},[312,74277,59141],{"class":488},[312,74279,492],{"class":324},[312,74281,2346],{"class":488},[312,74283,1437],{"class":1436},[312,74285,498],{"class":324},[312,74287,74288,74290,74292,74295],{"class":314,"line":11728},[312,74289,59068],{"class":488},[312,74291,492],{"class":324},[312,74293,74294],{"class":488},"right",[312,74296,498],{"class":324},[312,74298,74299,74301,74303,74305,74307,74309,74311,74313],{"class":314,"line":18404},[312,74300,56490],{"class":488},[312,74302,492],{"class":324},[312,74304,2346],{"class":488},[312,74306,1437],{"class":1436},[312,74308,861],{"class":488},[312,74310,3843],{"class":488},[312,74312,1437],{"class":1436},[312,74314,498],{"class":324},[312,74316,74317,74320,74322,74324,74326],{"class":314,"line":18410},[312,74318,74319],{"class":488},"      padding-right",[312,74321,492],{"class":324},[312,74323,2391],{"class":488},[312,74325,1437],{"class":1436},[312,74327,498],{"class":324},[312,74329,74330,74332,74334,74336,74338],{"class":314,"line":18433},[312,74331,56704],{"class":488},[312,74333,492],{"class":324},[312,74335,2468],{"class":488},[312,74337,1437],{"class":1436},[312,74339,498],{"class":324},[312,74341,74342,74344,74346,74348,74350,74353,74355,74358,74360,74362],{"class":314,"line":18439},[312,74343,56666],{"class":488},[312,74345,492],{"class":324},[312,74347,74095],{"class":488},[312,74349,1576],{"class":324},[312,74351,74352],{"class":488},"237",[312,74354,733],{"class":324},[312,74356,74357],{"class":488},"235",[312,74359,733],{"class":324},[312,74361,74357],{"class":488},[312,74363,4524],{"class":324},[312,74365,74366,74369,74371,74373],{"class":314,"line":18462},[312,74367,74368],{"class":488},"      box-sizing",[312,74370,492],{"class":324},[312,74372,62287],{"class":488},[312,74374,498],{"class":324},[312,74376,74377],{"class":314,"line":18476},[312,74378,3992],{"class":324},[312,74380,74381],{"class":314,"line":18496},[312,74382,4205],{"emptyLinePlaceholder":1881},[312,74384,74385,74387,74389],{"class":314,"line":18502},[312,74386,74247],{"class":332},[312,74388,53475],{"class":328},[312,74390,483],{"class":324},[312,74392,74393,74395,74397,74399],{"class":314,"line":18513},[312,74394,59198],{"class":488},[312,74396,492],{"class":324},[312,74398,59203],{"class":488},[312,74400,498],{"class":324},[312,74402,74403],{"class":314,"line":18536},[312,74404,3992],{"class":324},[312,74406,74407],{"class":314,"line":18558},[312,74408,4205],{"emptyLinePlaceholder":1881},[312,74410,74411,74413],{"class":314,"line":18563},[312,74412,66801],{"class":328},[312,74414,483],{"class":324},[312,74416,74417,74419,74421,74423,74425],{"class":314,"line":18569},[312,74418,56554],{"class":488},[312,74420,492],{"class":324},[312,74422,63409],{"class":488},[312,74424,1437],{"class":1436},[312,74426,498],{"class":324},[312,74428,74429,74431,74433,74436],{"class":314,"line":18583},[312,74430,56490],{"class":488},[312,74432,492],{"class":324},[312,74434,74435],{"class":488},"auto",[312,74437,498],{"class":324},[312,74439,74440,74442,74444,74446],{"class":314,"line":18596},[312,74441,66808],{"class":488},[312,74443,492],{"class":324},[312,74445,66813],{"class":488},[312,74447,498],{"class":324},[312,74449,74450],{"class":314,"line":18601},[312,74451,3992],{"class":324},[312,74453,74454],{"class":314,"line":18615},[312,74455,4205],{"emptyLinePlaceholder":1881},[312,74457,74458,74460],{"class":314,"line":18620},[312,74459,66893],{"class":328},[312,74461,483],{"class":324},[312,74463,74464,74466,74468,74470,74472,74474,74476,74478,74480,74482],{"class":314,"line":18626},[312,74465,56666],{"class":488},[312,74467,492],{"class":324},[312,74469,74095],{"class":488},[312,74471,1576],{"class":324},[312,74473,74352],{"class":488},[312,74475,733],{"class":324},[312,74477,74357],{"class":488},[312,74479,733],{"class":324},[312,74481,74357],{"class":488},[312,74483,4524],{"class":324},[312,74485,74486],{"class":314,"line":18631},[312,74487,3992],{"class":324},[312,74489,74490],{"class":314,"line":18645},[312,74491,4205],{"emptyLinePlaceholder":1881},[312,74493,74494,74496],{"class":314,"line":18650},[312,74495,66893],{"class":328},[312,74497,33261],{"class":324},[312,74499,74500,74502],{"class":314,"line":18655},[312,74501,66959],{"class":328},[312,74503,483],{"class":324},[312,74505,74506,74508,74510,74512,74514],{"class":314,"line":18669},[312,74507,56568],{"class":488},[312,74509,492],{"class":324},[312,74511,2218],{"class":488},[312,74513,1437],{"class":1436},[312,74515,498],{"class":324},[312,74517,74518,74520,74522,74524],{"class":314,"line":18681},[312,74519,59068],{"class":488},[312,74521,492],{"class":324},[312,74523,1374],{"class":488},[312,74525,498],{"class":324},[312,74527,74528,74530,74532,74534,74536],{"class":314,"line":18686},[312,74529,56704],{"class":488},[312,74531,492],{"class":324},[312,74533,2494],{"class":488},[312,74535,1437],{"class":1436},[312,74537,498],{"class":324},[312,74539,74540,74542,74544,74546,74548,74550,74552,74554,74557,74559,74562,74564,74566],{"class":314,"line":18699},[312,74541,63755],{"class":488},[312,74543,492],{"class":324},[312,74545,1433],{"class":488},[312,74547,1437],{"class":1436},[312,74549,1440],{"class":488},[312,74551,74032],{"class":488},[312,74553,1576],{"class":324},[312,74555,74556],{"class":488},"228",[312,74558,733],{"class":324},[312,74560,74561],{"class":488},"225",[312,74563,733],{"class":324},[312,74565,74561],{"class":488},[312,74567,4524],{"class":324},[312,74569,74570,74573,74575,74577,74579],{"class":314,"line":18704},[312,74571,74572],{"class":488},"      padding-left",[312,74574,492],{"class":324},[312,74576,2264],{"class":488},[312,74578,1437],{"class":1436},[312,74580,498],{"class":324},[312,74582,74583,74585,74587,74589,74592,74594,74596],{"class":314,"line":18709},[312,74584,63638],{"class":488},[312,74586,492],{"class":324},[312,74588,29917],{"class":488},[312,74590,74591],{"class":488}," linear",[312,74593,63645],{"class":488},[312,74595,2640],{"class":1436},[312,74597,498],{"class":324},[312,74599,74600],{"class":314,"line":18714},[312,74601,3992],{"class":324},[312,74603,74604],{"class":314,"line":18727},[312,74605,4205],{"emptyLinePlaceholder":1881},[312,74607,74608,74611,74613,74615],{"class":314,"line":18732},[312,74609,74610],{"class":328},"    tbody",[312,74612,71921],{"class":328},[312,74614,62721],{"class":332},[312,74616,483],{"class":324},[312,74618,74619,74621,74623,74625,74627,74629,74631,74633,74635,74637],{"class":314,"line":34428},[312,74620,56666],{"class":488},[312,74622,492],{"class":324},[312,74624,74095],{"class":488},[312,74626,1576],{"class":324},[312,74628,74352],{"class":488},[312,74630,733],{"class":324},[312,74632,74357],{"class":488},[312,74634,733],{"class":324},[312,74636,74357],{"class":488},[312,74638,4524],{"class":324},[312,74640,74641,74643,74645,74647],{"class":314,"line":34434},[312,74642,63803],{"class":488},[312,74644,492],{"class":324},[312,74646,63808],{"class":488},[312,74648,498],{"class":324},[312,74650,74651],{"class":314,"line":34440},[312,74652,3992],{"class":324},[312,74654,74655],{"class":314,"line":34446},[312,74656,4205],{"emptyLinePlaceholder":1881},[312,74658,74659,74661,74663,74666,74668],{"class":314,"line":34452},[312,74660,74610],{"class":328},[312,74662,71921],{"class":328},[312,74664,74665],{"class":328}," td",[312,74667,3206],{"class":328},[312,74669,483],{"class":324},[312,74671,74672,74674,74676,74678],{"class":314,"line":34463},[312,74673,56791],{"class":488},[312,74675,492],{"class":324},[312,74677,508],{"class":488},[312,74679,498],{"class":324},[312,74681,74682,74684,74686,74688,74690],{"class":314,"line":34469},[312,74683,56554],{"class":488},[312,74685,492],{"class":324},[312,74687,2851],{"class":488},[312,74689,1437],{"class":1436},[312,74691,498],{"class":324},[312,74693,74694,74696,74698,74700,74702],{"class":314,"line":34489},[312,74695,56568],{"class":488},[312,74697,492],{"class":324},[312,74699,2769],{"class":488},[312,74701,1437],{"class":1436},[312,74703,498],{"class":324},[312,74705,74706,74708,74710,74712,74714],{"class":314,"line":34495},[312,74707,59141],{"class":488},[312,74709,492],{"class":324},[312,74711,2769],{"class":488},[312,74713,1437],{"class":1436},[312,74715,498],{"class":324},[312,74717,74718,74720,74722,74724,74726],{"class":314,"line":34506},[312,74719,63855],{"class":488},[312,74721,492],{"class":324},[312,74723,2027],{"class":488},[312,74725,1437],{"class":1436},[312,74727,498],{"class":324},[312,74729,74730,74732,74734,74736],{"class":314,"line":34512},[312,74731,59198],{"class":488},[312,74733,492],{"class":324},[312,74735,62624],{"class":488},[312,74737,498],{"class":324},[312,74739,74740,74742,74744,74746],{"class":314,"line":34518},[312,74741,59068],{"class":488},[312,74743,492],{"class":324},[312,74745,53380],{"class":488},[312,74747,498],{"class":324},[312,74749,74750,74752,74754,74756],{"class":314,"line":34524},[312,74751,65748],{"class":488},[312,74753,492],{"class":324},[312,74755,56521],{"class":488},[312,74757,498],{"class":324},[312,74759,74760,74762,74764,74767],{"class":314,"line":34530},[312,74761,56666],{"class":488},[312,74763,492],{"class":324},[312,74765,74766],{"class":488},"orange",[312,74768,498],{"class":324},[312,74770,74771,74773,74775,74778,74780],{"class":314,"line":34536},[312,74772,56916],{"class":488},[312,74774,492],{"class":324},[312,74776,74777],{"class":488},"12.5",[312,74779,1437],{"class":1436},[312,74781,498],{"class":324},[312,74783,74784],{"class":314,"line":34542},[312,74785,3992],{"class":324},[312,74787,74788,74790,74792],{"class":314,"line":34548},[312,74789,54203],{"class":324},[312,74791,1856],{"class":328},[312,74793,343],{"class":324},[312,74795,74796,74798,74800],{"class":314,"line":34568},[312,74797,353],{"class":324},[312,74799,53127],{"class":328},[312,74801,343],{"class":324},[312,74803,74804],{"class":314,"line":34574},[312,74805,4205],{"emptyLinePlaceholder":1881},[312,74807,74808,74810,74812],{"class":314,"line":34590},[312,74809,325],{"class":324},[312,74811,53586],{"class":328},[312,74813,343],{"class":324},[312,74815,74816,74818,74820,74823,74825],{"class":314,"line":34596},[312,74817,53930],{"class":324},[312,74819,14],{"class":328},[312,74821,74822],{"class":324},">学生就业统计表\u003C\u002F",[312,74824,14],{"class":328},[312,74826,343],{"class":324},[312,74828,74829,74831,74833,74835,74837,74839,74841,74843,74845],{"class":314,"line":34610},[312,74830,53930],{"class":324},[312,74832,68403],{"class":328},[312,74834,333],{"class":332},[312,74836,336],{"class":324},[312,74838,64442],{"class":339},[312,74840,70847],{"class":332},[312,74842,336],{"class":324},[312,74844,33571],{"class":339},[312,74846,343],{"class":324},[312,74848,74849,74851,74853,74855,74857,74859,74861,74863,74865,74867,74869,74872,74874,74876,74878],{"class":314,"line":34616},[312,74850,53134],{"class":324},[312,74852,55605],{"class":328},[312,74854,55608],{"class":332},[312,74856,336],{"class":324},[312,74858,64477],{"class":339},[312,74860,16721],{"class":332},[312,74862,336],{"class":324},[312,74864,70873],{"class":339},[312,74866,62801],{"class":332},[312,74868,336],{"class":324},[312,74870,74871],{"class":339},"\"姓名\"",[312,74873,333],{"class":332},[312,74875,336],{"class":324},[312,74877,70873],{"class":339},[312,74879,343],{"class":324},[312,74881,74882,74884,74886,74888,74890,74892,74894,74896,74898,74900,74902,74905,74907,74909,74911],{"class":314,"line":34631},[312,74883,53134],{"class":324},[312,74885,55605],{"class":328},[312,74887,55608],{"class":332},[312,74889,336],{"class":324},[312,74891,64477],{"class":339},[312,74893,16721],{"class":332},[312,74895,336],{"class":324},[312,74897,70901],{"class":339},[312,74899,62801],{"class":332},[312,74901,336],{"class":324},[312,74903,74904],{"class":339},"\"年龄\"",[312,74906,333],{"class":332},[312,74908,336],{"class":324},[312,74910,70901],{"class":339},[312,74912,343],{"class":324},[312,74914,74915,74917,74919,74921,74923,74925,74927,74929,74931,74933,74935,74938,74940,74942,74944],{"class":314,"line":34637},[312,74916,53134],{"class":324},[312,74918,55605],{"class":328},[312,74920,55608],{"class":332},[312,74922,336],{"class":324},[312,74924,64477],{"class":339},[312,74926,16721],{"class":332},[312,74928,336],{"class":324},[312,74930,71003],{"class":339},[312,74932,62801],{"class":332},[312,74934,336],{"class":324},[312,74936,74937],{"class":339},"\"薪资\"",[312,74939,333],{"class":332},[312,74941,336],{"class":324},[312,74943,71003],{"class":339},[312,74945,343],{"class":324},[312,74947,74948,74950,74952,74954,74956,74958,74960,74962,74964,74966,74968,74970],{"class":314,"line":34646},[312,74949,53134],{"class":324},[312,74951,70921],{"class":328},[312,74953,16721],{"class":332},[312,74955,336],{"class":324},[312,74957,70928],{"class":339},[312,74959,16760],{"class":332},[312,74961,336],{"class":324},[312,74963,495],{"class":339},[312,74965,333],{"class":332},[312,74967,336],{"class":324},[312,74969,70928],{"class":339},[312,74971,343],{"class":324},[312,74973,74974,74976,74978,74980,74982,74984,74986,74988],{"class":314,"line":34652},[312,74975,57016],{"class":324},[312,74977,70943],{"class":328},[312,74979,68429],{"class":332},[312,74981,336],{"class":324},[312,74983,11764],{"class":339},[312,74985,70952],{"class":324},[312,74987,70943],{"class":328},[312,74989,343],{"class":324},[312,74991,74992,74994,74996,74998,75000,75002,75004,75006],{"class":314,"line":34661},[312,74993,57016],{"class":324},[312,74995,70943],{"class":328},[312,74997,68429],{"class":332},[312,74999,336],{"class":324},[312,75001,11833],{"class":339},[312,75003,70971],{"class":324},[312,75005,70943],{"class":328},[312,75007,343],{"class":324},[312,75009,75010,75012,75014],{"class":314,"line":34667},[312,75011,53563],{"class":324},[312,75013,70921],{"class":328},[312,75015,343],{"class":324},[312,75017,75018,75020,75022,75024,75026,75028,75030,75032,75034,75036,75038,75040],{"class":314,"line":34673},[312,75019,53134],{"class":324},[312,75021,70921],{"class":328},[312,75023,16721],{"class":332},[312,75025,336],{"class":324},[312,75027,71025],{"class":339},[312,75029,16760],{"class":332},[312,75031,336],{"class":324},[312,75033,495],{"class":339},[312,75035,333],{"class":332},[312,75037,336],{"class":324},[312,75039,71025],{"class":339},[312,75041,343],{"class":324},[312,75043,75044,75046,75048,75050,75052,75054,75056,75058],{"class":314,"line":34682},[312,75045,57016],{"class":324},[312,75047,70943],{"class":328},[312,75049,68429],{"class":332},[312,75051,336],{"class":324},[312,75053,71046],{"class":339},[312,75055,71049],{"class":324},[312,75057,70943],{"class":328},[312,75059,343],{"class":324},[312,75061,75062,75064,75066,75068,75070,75072,75074,75076],{"class":314,"line":34688},[312,75063,57016],{"class":324},[312,75065,70943],{"class":328},[312,75067,68429],{"class":332},[312,75069,336],{"class":324},[312,75071,71066],{"class":339},[312,75073,71069],{"class":324},[312,75075,70943],{"class":328},[312,75077,343],{"class":324},[312,75079,75080,75082,75084,75086,75088,75090,75092,75094],{"class":314,"line":34699},[312,75081,57016],{"class":324},[312,75083,70943],{"class":328},[312,75085,68429],{"class":332},[312,75087,336],{"class":324},[312,75089,71086],{"class":339},[312,75091,71089],{"class":324},[312,75093,70943],{"class":328},[312,75095,343],{"class":324},[312,75097,75098,75100,75102,75104,75106,75108,75110,75112],{"class":314,"line":34705},[312,75099,57016],{"class":324},[312,75101,70943],{"class":328},[312,75103,68429],{"class":332},[312,75105,336],{"class":324},[312,75107,71106],{"class":339},[312,75109,71109],{"class":324},[312,75111,70943],{"class":328},[312,75113,343],{"class":324},[312,75115,75116,75118,75120,75122,75124,75126,75128,75130],{"class":314,"line":34724},[312,75117,57016],{"class":324},[312,75119,70943],{"class":328},[312,75121,68429],{"class":332},[312,75123,336],{"class":324},[312,75125,71126],{"class":339},[312,75127,71129],{"class":324},[312,75129,70943],{"class":328},[312,75131,343],{"class":324},[312,75133,75134,75136,75138],{"class":314,"line":34730},[312,75135,53563],{"class":324},[312,75137,70921],{"class":328},[312,75139,343],{"class":324},[312,75141,75142,75144,75146],{"class":314,"line":34741},[312,75143,53134],{"class":324},[312,75145,55671],{"class":328},[312,75147,343],{"class":324},[312,75149,75150,75152,75154,75157,75159,75162,75164],{"class":314,"line":34747},[312,75151,57016],{"class":324},[312,75153,312],{"class":328},[312,75155,75156],{"class":324},">+\u003C\u002F",[312,75158,312],{"class":328},[312,75160,75161],{"class":324},">添加\u003C\u002F",[312,75163,55671],{"class":328},[312,75165,343],{"class":324},[312,75167,75168,75170,75172],{"class":314,"line":34767},[312,75169,54203],{"class":324},[312,75171,68403],{"class":328},[312,75173,343],{"class":324},[312,75175,75176,75178,75180,75182,75184,75186,75189,75191,75194,75196,75199,75201],{"class":314,"line":34783},[312,75177,53930],{"class":324},[312,75179,329],{"class":328},[312,75181,333],{"class":332},[312,75183,336],{"class":324},[312,75185,64358],{"class":339},[312,75187,75188],{"class":324},">共有数据 \u003C",[312,75190,312],{"class":328},[312,75192,75193],{"class":324},">0\u003C\u002F",[312,75195,312],{"class":328},[312,75197,75198],{"class":324},"> 条\u003C\u002F",[312,75200,329],{"class":328},[312,75202,343],{"class":324},[312,75204,75205,75207,75209],{"class":314,"line":34789},[312,75206,53930],{"class":324},[312,75208,2086],{"class":328},[312,75210,343],{"class":324},[312,75212,75213,75215,75217],{"class":314,"line":34803},[312,75214,53134],{"class":324},[312,75216,2089],{"class":328},[312,75218,343],{"class":324},[312,75220,75221,75223,75225],{"class":314,"line":34809},[312,75222,57016],{"class":324},[312,75224,2092],{"class":328},[312,75226,343],{"class":324},[312,75228,75229,75231,75233,75236,75238],{"class":314,"line":34815},[312,75230,57084],{"class":324},[312,75232,2095],{"class":328},[312,75234,75235],{"class":324},">ID\u003C\u002F",[312,75237,2095],{"class":328},[312,75239,343],{"class":324},[312,75241,75242,75244,75246,75248,75250],{"class":314,"line":34826},[312,75243,57084],{"class":324},[312,75245,2095],{"class":328},[312,75247,71232],{"class":324},[312,75249,2095],{"class":328},[312,75251,343],{"class":324},[312,75253,75254,75256,75258,75260,75262],{"class":314,"line":34832},[312,75255,57084],{"class":324},[312,75257,2095],{"class":328},[312,75259,71245],{"class":324},[312,75261,2095],{"class":328},[312,75263,343],{"class":324},[312,75265,75266,75268,75270,75272,75274],{"class":314,"line":34838},[312,75267,57084],{"class":324},[312,75269,2095],{"class":328},[312,75271,71258],{"class":324},[312,75273,2095],{"class":328},[312,75275,343],{"class":324},[312,75277,75278,75280,75282,75284,75286],{"class":314,"line":34848},[312,75279,57084],{"class":324},[312,75281,2095],{"class":328},[312,75283,71271],{"class":324},[312,75285,2095],{"class":328},[312,75287,343],{"class":324},[312,75289,75290,75292,75294,75296,75298],{"class":314,"line":34854},[312,75291,57084],{"class":324},[312,75293,2095],{"class":328},[312,75295,71284],{"class":324},[312,75297,2095],{"class":328},[312,75299,343],{"class":324},[312,75301,75302,75304,75306,75309,75311],{"class":314,"line":34865},[312,75303,57084],{"class":324},[312,75305,2095],{"class":328},[312,75307,75308],{"class":324},">录入时间\u003C\u002F",[312,75310,2095],{"class":328},[312,75312,343],{"class":324},[312,75314,75315,75317,75319,75321,75323],{"class":314,"line":34871},[312,75316,57084],{"class":324},[312,75318,2095],{"class":328},[312,75320,71297],{"class":324},[312,75322,2095],{"class":328},[312,75324,343],{"class":324},[312,75326,75327,75329,75331],{"class":314,"line":34881},[312,75328,57189],{"class":324},[312,75330,2092],{"class":328},[312,75332,343],{"class":324},[312,75334,75335,75337,75339],{"class":314,"line":34886},[312,75336,53563],{"class":324},[312,75338,2089],{"class":328},[312,75340,343],{"class":324},[312,75342,75343,75345,75347],{"class":314,"line":34892},[312,75344,53134],{"class":324},[312,75346,2132],{"class":328},[312,75348,343],{"class":324},[312,75350,75351],{"class":314,"line":34941},[312,75352,75353],{"class":318},"      \u003C!-- \u003Ctr>\n",[312,75355,75356],{"class":314,"line":34988},[312,75357,75358],{"class":318},"        \u003Ctd>1\u003C\u002Ftd>\n",[312,75360,75361],{"class":314,"line":34993},[312,75362,75358],{"class":318},[312,75364,75365],{"class":314,"line":34999},[312,75366,75358],{"class":318},[312,75368,75369],{"class":314,"line":35018},[312,75370,75358],{"class":318},[312,75372,75373],{"class":314,"line":35024},[312,75374,75358],{"class":318},[312,75376,75377],{"class":314,"line":35044},[312,75378,75358],{"class":318},[312,75380,75381],{"class":314,"line":35050},[312,75382,75358],{"class":318},[312,75384,75385],{"class":314,"line":35056},[312,75386,75387],{"class":318},"        \u003Ctd>\n",[312,75389,75390],{"class":314,"line":35066},[312,75391,75392],{"class":318},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[312,75394,75395],{"class":314,"line":35071},[312,75396,75397],{"class":318},"        \u003C\u002Ftd>\n",[312,75399,75400],{"class":314,"line":35077},[312,75401,75402],{"class":318},"      \u003C\u002Ftr> -->\n",[312,75404,75405,75407,75409],{"class":314,"line":35093},[312,75406,53563],{"class":324},[312,75408,2132],{"class":328},[312,75410,343],{"class":324},[312,75412,75413,75415,75417],{"class":314,"line":35138},[312,75414,54203],{"class":324},[312,75416,2086],{"class":328},[312,75418,343],{"class":324},[312,75420,75421,75423,75425],{"class":314,"line":35144},[312,75422,53930],{"class":324},[312,75424,53599],{"class":328},[312,75426,343],{"class":324},[312,75428,75429],{"class":314,"line":35150},[312,75430,75431],{"class":318},"    \u002F\u002F const initData = [{\n",[312,75433,75434],{"class":314,"line":35156},[312,75435,75436],{"class":318},"    \u002F\u002F   unameId: 1,\n",[312,75438,75439],{"class":314,"line":35167},[312,75440,75441],{"class":318},"    \u002F\u002F   uname: '华晨宇',\n",[312,75443,75444],{"class":314,"line":35173},[312,75445,75446],{"class":318},"    \u002F\u002F   age: 22,\n",[312,75448,75449],{"class":314,"line":35179},[312,75450,75451],{"class":318},"    \u002F\u002F   salary: 12000,\n",[312,75453,75454],{"class":314,"line":35185},[312,75455,75456],{"class":318},"    \u002F\u002F   gender: '男',\n",[312,75458,75459],{"class":314,"line":35203},[312,75460,75461],{"class":318},"    \u002F\u002F   city: '北京',\n",[312,75463,75464],{"class":314,"line":35217},[312,75465,75466],{"class":318},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[312,75468,75469],{"class":314,"line":35226},[312,75470,75471],{"class":318},"    \u002F\u002F }]\n",[312,75473,75474],{"class":314,"line":35235},[312,75475,75476],{"class":318},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[312,75478,75479],{"class":314,"line":35244},[312,75480,75481],{"class":318},"    \u002F\u002F 1.渲染业务\n",[312,75483,75484],{"class":314,"line":35253},[312,75485,75486],{"class":318},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[312,75488,75489],{"class":314,"line":35259},[312,75490,75491],{"class":318},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[312,75493,75494],{"class":314,"line":35265},[312,75495,75496],{"class":318},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[312,75498,75499],{"class":314,"line":35273},[312,75500,4205],{"emptyLinePlaceholder":1881},[312,75502,75503],{"class":314,"line":35278},[312,75504,75505],{"class":318},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[312,75507,75508],{"class":314,"line":35284},[312,75509,75510],{"class":318},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[312,75512,75513,75515,75517,75519],{"class":314,"line":35295},[312,75514,13024],{"class":1436},[312,75516,59477],{"class":488},[312,75518,15366],{"class":1436},[312,75520,53624],{"class":324},[312,75522,75523,75526,75528],{"class":314,"line":35301},[312,75524,75525],{"class":324},"    console.",[312,75527,60029],{"class":332},[312,75529,54198],{"class":324},[312,75531,75532],{"class":314,"line":35321},[312,75533,4205],{"emptyLinePlaceholder":1881},[312,75535,75536],{"class":314,"line":35327},[312,75537,75538],{"class":318},"    \u002F\u002F 时间函数\n",[312,75540,75541,75543,75546],{"class":314,"line":35333},[312,75542,71861],{"class":1436},[312,75544,75545],{"class":332}," getTime",[312,75547,12656],{"class":324},[312,75549,75550,75552,75555,75557,75559,75562],{"class":314,"line":35339},[312,75551,60010],{"class":1436},[312,75553,75554],{"class":488}," date",[312,75556,15366],{"class":1436},[312,75558,13381],{"class":1436},[312,75560,75561],{"class":332}," Date",[312,75563,3781],{"class":324},[312,75565,75566,75568,75570,75572,75575,75578,75580,75582,75584,75587,75590,75592,75594,75596,75598,75600,75602,75604],{"class":314,"line":35356},[312,75567,60010],{"class":1436},[312,75569,17891],{"class":488},[312,75571,15366],{"class":1436},[312,75573,75574],{"class":324}," date.",[312,75576,75577],{"class":332},"getHours",[312,75579,14852],{"class":324},[312,75581,325],{"class":1436},[312,75583,3843],{"class":488},[312,75585,75586],{"class":1436}," ?",[312,75588,75589],{"class":339}," '0'",[312,75591,47361],{"class":1436},[312,75593,75574],{"class":324},[312,75595,75577],{"class":332},[312,75597,14852],{"class":324},[312,75599,2803],{"class":1436},[312,75601,75574],{"class":324},[312,75603,75577],{"class":332},[312,75605,3781],{"class":324},[312,75607,75608,75610,75613,75615,75617,75620,75622,75624,75626,75628,75630,75632,75634,75636,75638,75640,75642,75644],{"class":314,"line":35362},[312,75609,60010],{"class":1436},[312,75611,75612],{"class":488}," m",[312,75614,15366],{"class":1436},[312,75616,75574],{"class":324},[312,75618,75619],{"class":332},"getMinutes",[312,75621,14852],{"class":324},[312,75623,325],{"class":1436},[312,75625,3843],{"class":488},[312,75627,75586],{"class":1436},[312,75629,75589],{"class":339},[312,75631,47361],{"class":1436},[312,75633,75574],{"class":324},[312,75635,75619],{"class":332},[312,75637,14852],{"class":324},[312,75639,2803],{"class":1436},[312,75641,75574],{"class":324},[312,75643,75619],{"class":332},[312,75645,3781],{"class":324},[312,75647,75648,75650,75652,75654,75656,75659,75661,75663,75665,75667,75669,75671,75673,75675,75677,75679,75681,75683],{"class":314,"line":35368},[312,75649,60010],{"class":1436},[312,75651,10231],{"class":488},[312,75653,15366],{"class":1436},[312,75655,75574],{"class":324},[312,75657,75658],{"class":332},"getSeconds",[312,75660,14852],{"class":324},[312,75662,325],{"class":1436},[312,75664,3843],{"class":488},[312,75666,75586],{"class":1436},[312,75668,75589],{"class":339},[312,75670,47361],{"class":1436},[312,75672,75574],{"class":324},[312,75674,75658],{"class":332},[312,75676,14852],{"class":324},[312,75678,2803],{"class":1436},[312,75680,75574],{"class":324},[312,75682,75658],{"class":332},[312,75684,3781],{"class":324},[312,75686,75687,75689,75692,75694,75696,75699,75701,75704,75706,75709,75711,75713,75716,75718,75720,75722,75724,75726,75728,75731,75733,75736,75738,75741,75743,75745,75747],{"class":314,"line":35374},[312,75688,60010],{"class":1436},[312,75690,75691],{"class":488}," str",[312,75693,15366],{"class":1436},[312,75695,64681],{"class":339},[312,75697,75698],{"class":324},"date",[312,75700,2503],{"class":339},[312,75702,75703],{"class":332},"getFullYear",[312,75705,4232],{"class":339},[312,75707,75708],{"class":339},"}\u002F${",[312,75710,75698],{"class":324},[312,75712,2503],{"class":339},[312,75714,75715],{"class":332},"getMonth",[312,75717,14852],{"class":339},[312,75719,2426],{"class":1436},[312,75721,26914],{"class":488},[312,75723,75708],{"class":339},[312,75725,75698],{"class":324},[312,75727,2503],{"class":339},[312,75729,75730],{"class":332},"getDate",[312,75732,4232],{"class":339},[312,75734,75735],{"class":339},"} ${",[312,75737,2360],{"class":324},[312,75739,75740],{"class":339},"}:${",[312,75742,2489],{"class":324},[312,75744,75740],{"class":339},[312,75746,2640],{"class":324},[312,75748,75749],{"class":339},"}`\n",[312,75751,75752,75755],{"class":314,"line":35380},[312,75753,75754],{"class":1436},"      return",[312,75756,75757],{"class":324}," str\n",[312,75759,75760],{"class":314,"line":35386},[312,75761,3992],{"class":324},[312,75763,75764],{"class":314,"line":35413},[312,75765,75766],{"class":318},"    \u002F\u002F 渲染函数\n",[312,75768,75769,75771,75773,75775,75777,75779,75781,75783],{"class":314,"line":35437},[312,75770,13024],{"class":1436},[312,75772,71524],{"class":488},[312,75774,15366],{"class":1436},[312,75776,56180],{"class":324},[312,75778,56183],{"class":332},[312,75780,1576],{"class":324},[312,75782,71535],{"class":339},[312,75784,1959],{"class":324},[312,75786,75787,75789,75791],{"class":314,"line":35443},[312,75788,71861],{"class":1436},[312,75790,71864],{"class":332},[312,75792,12656],{"class":324},[312,75794,75795],{"class":314,"line":35449},[312,75796,75797],{"class":318},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[312,75799,75800],{"class":314,"line":35455},[312,75801,75802],{"class":318},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[312,75804,75805,75807,75810,75812,75814,75817,75819,75821,75823,75826,75828,75831],{"class":314,"line":35466},[312,75806,60010],{"class":1436},[312,75808,75809],{"class":488}," trArr",[312,75811,15366],{"class":1436},[312,75813,53751],{"class":324},[312,75815,75816],{"class":332},"map",[312,75818,1576],{"class":324},[312,75820,56233],{"class":1436},[312,75822,3464],{"class":324},[312,75824,75825],{"class":1579},"ele",[312,75827,733],{"class":324},[312,75829,75830],{"class":1579},"index",[312,75832,14244],{"class":324},[312,75834,75835,75837],{"class":314,"line":35477},[312,75836,16553],{"class":1436},[312,75838,71945],{"class":339},[312,75840,75841],{"class":314,"line":35483},[312,75842,75843],{"class":339},"      \u003Ctr>\n",[312,75845,75846,75848,75850,75852,75855],{"class":314,"line":35500},[312,75847,71950],{"class":339},[312,75849,75825],{"class":324},[312,75851,2503],{"class":339},[312,75853,75854],{"class":324},"unameId",[312,75856,71965],{"class":339},[312,75858,75859,75861,75863,75865,75867],{"class":314,"line":35523},[312,75860,71950],{"class":339},[312,75862,75825],{"class":324},[312,75864,2503],{"class":339},[312,75866,71981],{"class":324},[312,75868,71965],{"class":339},[312,75870,75871,75873,75875,75877,75879],{"class":314,"line":35546},[312,75872,71950],{"class":339},[312,75874,75825],{"class":324},[312,75876,2503],{"class":339},[312,75878,71998],{"class":324},[312,75880,71965],{"class":339},[312,75882,75883,75885,75887,75889,75891],{"class":314,"line":35552},[312,75884,71950],{"class":339},[312,75886,75825],{"class":324},[312,75888,2503],{"class":339},[312,75890,72015],{"class":324},[312,75892,71965],{"class":339},[312,75894,75895,75897,75899,75901,75903],{"class":314,"line":35557},[312,75896,71950],{"class":339},[312,75898,75825],{"class":324},[312,75900,2503],{"class":339},[312,75902,72032],{"class":324},[312,75904,71965],{"class":339},[312,75906,75907,75909,75911,75913,75915],{"class":314,"line":35566},[312,75908,71950],{"class":339},[312,75910,75825],{"class":324},[312,75912,2503],{"class":339},[312,75914,72049],{"class":324},[312,75916,71965],{"class":339},[312,75918,75919,75921,75923,75925,75927],{"class":314,"line":35576},[312,75920,71950],{"class":339},[312,75922,75825],{"class":324},[312,75924,2503],{"class":339},[312,75926,4192],{"class":324},[312,75928,71965],{"class":339},[312,75930,75931],{"class":314,"line":35582},[312,75932,75387],{"class":339},[312,75934,75935,75938,75940],{"class":314,"line":35587},[312,75936,75937],{"class":339},"          \u003Ca href=\"#\" data-id=\"${",[312,75939,75830],{"class":324},[312,75941,75942],{"class":339},"}\">删除\u003C\u002Fa>\n",[312,75944,75945],{"class":314,"line":35593},[312,75946,75397],{"class":339},[312,75948,75949],{"class":314,"line":35606},[312,75950,75951],{"class":339},"      \u003C\u002Ftr>\n",[312,75953,75954],{"class":314,"line":35612},[312,75955,75956],{"class":339},"  `\n",[312,75958,75959],{"class":314,"line":35623},[312,75960,66593],{"class":324},[312,75962,75963,75965,75967],{"class":314,"line":35634},[312,75964,60026],{"class":324},[312,75966,60029],{"class":332},[312,75968,75969],{"class":324},"(trArr)\n",[312,75971,75972],{"class":314,"line":35653},[312,75973,4205],{"emptyLinePlaceholder":1881},[312,75975,75976],{"class":314,"line":51313},[312,75977,75978],{"class":318},"      \u002F\u002F (2) 把数组转换为字符串join\n",[312,75980,75981],{"class":314,"line":51318},[312,75982,75983],{"class":318},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[312,75985,75986,75988,75990,75993,75996,75998,76001],{"class":314,"line":51327},[312,75987,71876],{"class":324},[312,75989,336],{"class":1436},[312,75991,75992],{"class":324}," trArr.",[312,75994,75995],{"class":332},"join",[312,75997,1576],{"class":324},[312,75999,76000],{"class":339},"''",[312,76002,1959],{"class":324},[312,76004,76005],{"class":314,"line":51336},[312,76006,76007],{"class":318},"      \u002F\u002F 显示共有几条\n",[312,76009,76010,76012,76014,76016,76019,76022,76024,76026],{"class":314,"line":51341},[312,76011,57553],{"class":324},[312,76013,56183],{"class":332},[312,76015,1576],{"class":324},[312,76017,76018],{"class":339},"'.total span'",[312,76020,76021],{"class":324},").innerHTML ",[312,76023,336],{"class":1436},[312,76025,53751],{"class":324},[312,76027,57613],{"class":488},[312,76029,76030],{"class":314,"line":51346},[312,76031,3992],{"class":324},[312,76033,76034],{"class":314,"line":51351},[312,76035,76036],{"class":318},"    \u002F\u002F render()\n",[312,76038,76039],{"class":314,"line":51364},[312,76040,4205],{"emptyLinePlaceholder":1881},[312,76042,76043],{"class":314,"line":51369},[312,76044,76045],{"class":318},"    \u002F\u002F 获取DOM对象\n",[312,76047,76048,76050,76052,76054,76056,76058,76060,76062],{"class":314,"line":51378},[312,76049,13024],{"class":1436},[312,76051,71598],{"class":488},[312,76053,15366],{"class":1436},[312,76055,56180],{"class":324},[312,76057,56183],{"class":332},[312,76059,1576],{"class":324},[312,76061,71609],{"class":339},[312,76063,1959],{"class":324},[312,76065,76066,76068,76070,76072,76074,76076,76078,76080],{"class":314,"line":51387},[312,76067,13024],{"class":1436},[312,76069,71425],{"class":488},[312,76071,15366],{"class":1436},[312,76073,56180],{"class":324},[312,76075,56183],{"class":332},[312,76077,1576],{"class":324},[312,76079,71436],{"class":339},[312,76081,1959],{"class":324},[312,76083,76084,76086,76088,76090,76092,76094,76096,76098],{"class":314,"line":51404},[312,76085,13024],{"class":1436},[312,76087,17489],{"class":488},[312,76089,15366],{"class":1436},[312,76091,56180],{"class":324},[312,76093,56183],{"class":332},[312,76095,1576],{"class":324},[312,76097,71455],{"class":339},[312,76099,1959],{"class":324},[312,76101,76103,76105,76107,76109,76111,76113,76115,76117],{"class":314,"line":76102},231,[312,76104,13024],{"class":1436},[312,76106,71484],{"class":488},[312,76108,15366],{"class":1436},[312,76110,56180],{"class":324},[312,76112,56183],{"class":332},[312,76114,1576],{"class":324},[312,76116,71495],{"class":339},[312,76118,1959],{"class":324},[312,76120,76122,76124,76126,76128,76130,76132,76134,76136],{"class":314,"line":76121},232,[312,76123,13024],{"class":1436},[312,76125,71464],{"class":488},[312,76127,15366],{"class":1436},[312,76129,56180],{"class":324},[312,76131,56183],{"class":332},[312,76133,1576],{"class":324},[312,76135,71475],{"class":339},[312,76137,1959],{"class":324},[312,76139,76141,76143,76145,76147,76149,76151,76153,76155],{"class":314,"line":76140},233,[312,76142,13024],{"class":1436},[312,76144,71504],{"class":488},[312,76146,15366],{"class":1436},[312,76148,56180],{"class":324},[312,76150,56183],{"class":332},[312,76152,1576],{"class":324},[312,76154,71515],{"class":339},[312,76156,1959],{"class":324},[312,76158,76160],{"class":314,"line":76159},234,[312,76161,4205],{"emptyLinePlaceholder":1881},[312,76163,76165],{"class":314,"line":76164},235,[312,76166,76167],{"class":318},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[312,76169,76171,76173,76175,76177,76179,76181,76183,76185,76187],{"class":314,"line":76170},236,[312,76172,71616],{"class":324},[312,76174,59595],{"class":332},[312,76176,1576],{"class":324},[312,76178,71623],{"class":339},[312,76180,733],{"class":324},[312,76182,56233],{"class":1436},[312,76184,3464],{"class":324},[312,76186,2024],{"class":1579},[312,76188,14244],{"class":324},[312,76190,76192],{"class":314,"line":76191},237,[312,76193,76194],{"class":318},"      \u002F\u002F 禁止浏览器跳转\n",[312,76196,76198,76200,76202],{"class":314,"line":76197},238,[312,76199,71643],{"class":324},[312,76201,71646],{"class":332},[312,76203,3781],{"class":324},[312,76205,76207],{"class":314,"line":76206},239,[312,76208,76209],{"class":318},"      \u002F\u002F 非空判断\n",[312,76211,76213],{"class":314,"line":76212},240,[312,76214,76215],{"class":318},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[312,76217,76219],{"class":314,"line":76218},241,[312,76220,76221],{"class":318},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[312,76223,76225,76227,76229,76231,76234,76236,76239,76242,76244,76246],{"class":314,"line":76224},242,[312,76226,56264],{"class":1436},[312,76228,3464],{"class":324},[312,76230,2172],{"class":1436},[312,76232,76233],{"class":324},"uname.value ",[312,76235,73129],{"class":1436},[312,76237,76238],{"class":1436}," !",[312,76240,76241],{"class":324},"age.value ",[312,76243,73129],{"class":1436},[312,76245,76238],{"class":1436},[312,76247,76248],{"class":324},"salary.value) {\n",[312,76250,76252,76254,76256,76258,76260],{"class":314,"line":76251},243,[312,76253,16553],{"class":1436},[312,76255,71717],{"class":332},[312,76257,1576],{"class":324},[312,76259,71722],{"class":339},[312,76261,1959],{"class":324},[312,76263,76265],{"class":314,"line":76264},244,[312,76266,54184],{"class":324},[312,76268,76270,76272,76274],{"class":314,"line":76269},245,[312,76271,59789],{"class":324},[312,76273,53670],{"class":332},[312,76275,76276],{"class":324},"({\n",[312,76278,76280],{"class":314,"line":76279},246,[312,76281,76282],{"class":318},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[312,76284,76286],{"class":314,"line":76285},247,[312,76287,76288],{"class":318},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[312,76290,76292],{"class":314,"line":76291},248,[312,76293,76294],{"class":318},"        \u002F\u002F 对象的序号应为数组长度+1\n",[312,76296,76298],{"class":314,"line":76297},249,[312,76299,76300],{"class":318},"        \u002F\u002F unameId: arr.length + 1,\n",[312,76302,76304],{"class":314,"line":76303},250,[312,76305,4205],{"emptyLinePlaceholder":1881},[312,76307,76309],{"class":314,"line":76308},251,[312,76310,76311],{"class":318},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[312,76313,76315],{"class":314,"line":76314},252,[312,76316,76317],{"class":318},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[312,76319,76321],{"class":314,"line":76320},253,[312,76322,76323],{"class":318},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[312,76325,76327],{"class":314,"line":76326},254,[312,76328,76329],{"class":318},"        \u002F\u002F 0当假看\n",[312,76331,76333,76336,76338,76340,76343,76345,76347,76349,76352,76354,76356,76359,76361],{"class":314,"line":76332},255,[312,76334,76335],{"class":324},"        unameId: arr.",[312,76337,53754],{"class":488},[312,76339,75586],{"class":1436},[312,76341,76342],{"class":324}," arr[arr.",[312,76344,53754],{"class":488},[312,76346,54057],{"class":1436},[312,76348,26914],{"class":488},[312,76350,76351],{"class":324},"].unameId ",[312,76353,2426],{"class":1436},[312,76355,26914],{"class":488},[312,76357,76358],{"class":1436}," :",[312,76360,26914],{"class":488},[312,76362,33261],{"class":324},[312,76364,76366],{"class":314,"line":76365},256,[312,76367,71770],{"class":324},[312,76369,76371],{"class":314,"line":76370},257,[312,76372,71775],{"class":324},[312,76374,76376],{"class":314,"line":76375},258,[312,76377,71785],{"class":324},[312,76379,76381],{"class":314,"line":76380},259,[312,76382,71780],{"class":324},[312,76384,76386],{"class":314,"line":76385},260,[312,76387,76388],{"class":324},"        city: city.value,\n",[312,76390,76392],{"class":314,"line":76391},261,[312,76393,76394],{"class":318},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[312,76396,76398],{"class":314,"line":76397},262,[312,76399,76400],{"class":318},"        \u002F\u002F time: new Date().toDateString()\n",[312,76402,76404,76407,76410],{"class":314,"line":76403},263,[312,76405,76406],{"class":324},"        time: ",[312,76408,76409],{"class":332},"getTime",[312,76411,3781],{"class":324},[312,76413,76415],{"class":314,"line":76414},264,[312,76416,66593],{"class":324},[312,76418,76420],{"class":314,"line":76419},265,[312,76421,76422],{"class":318},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[312,76424,76426,76428],{"class":314,"line":76425},266,[312,76427,71845],{"class":332},[312,76429,3781],{"class":324},[312,76431,76433,76435,76437,76439,76441],{"class":314,"line":76432},267,[312,76434,71828],{"class":488},[312,76436,2503],{"class":324},[312,76438,71833],{"class":332},[312,76440,14852],{"class":324},[312,76442,76443],{"class":318},"\u002F\u002F重置表单\n",[312,76445,76447],{"class":314,"line":76446},268,[312,76448,76449],{"class":318},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[312,76451,76453,76456,76458,76460,76463,76465,76467,76469,76471],{"class":314,"line":76452},269,[312,76454,76455],{"class":324},"      localStorage.",[312,76457,73426],{"class":332},[312,76459,1576],{"class":324},[312,76461,76462],{"class":339},"'data'",[312,76464,733],{"class":324},[312,76466,73436],{"class":488},[312,76468,2503],{"class":324},[312,76470,73441],{"class":332},[312,76472,76473],{"class":324},"(arr))\n",[312,76475,76477],{"class":314,"line":76476},270,[312,76478,35256],{"class":324},[312,76480,76482],{"class":314,"line":76481},271,[312,76483,4205],{"emptyLinePlaceholder":1881},[312,76485,76487],{"class":314,"line":76486},272,[312,76488,76489],{"class":318},"    \u002F\u002F 3.删除业务\n",[312,76491,76493],{"class":314,"line":76492},273,[312,76494,76495],{"class":318},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[312,76497,76499,76501,76503,76505,76507,76509,76511,76513,76515],{"class":314,"line":76498},274,[312,76500,72118],{"class":324},[312,76502,59595],{"class":332},[312,76504,1576],{"class":324},[312,76506,59600],{"class":339},[312,76508,733],{"class":324},[312,76510,56233],{"class":1436},[312,76512,3464],{"class":324},[312,76514,2024],{"class":1579},[312,76516,14244],{"class":324},[312,76518,76520],{"class":314,"line":76519},275,[312,76521,76522],{"class":318},"      \u002F\u002F 判断是否点击的是删除按钮\n",[312,76524,76526,76528,76530,76532,76534],{"class":314,"line":76525},276,[312,76527,56264],{"class":1436},[312,76529,68812],{"class":324},[312,76531,56270],{"class":1436},[312,76533,70034],{"class":339},[312,76535,14244],{"class":324},[312,76537,76539],{"class":314,"line":76538},277,[312,76540,76541],{"class":318},"        \u002F\u002F alert(1)\n",[312,76543,76545],{"class":314,"line":76544},278,[312,76546,76547],{"class":318},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[312,76549,76551],{"class":314,"line":76550},279,[312,76552,76553],{"class":318},"        \u002F\u002F console.log(e.target)\n",[312,76555,76557],{"class":314,"line":76556},280,[312,76558,76559],{"class":318},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[312,76561,76563],{"class":314,"line":76562},281,[312,76564,4205],{"emptyLinePlaceholder":1881},[312,76566,76568],{"class":314,"line":76567},282,[312,76569,76570],{"class":318},"        \u002F\u002F 确认框，确然是否真的要删除\n",[312,76572,76574],{"class":314,"line":76573},283,[312,76575,76576],{"class":318},"        \u002F\u002F confirm()为确认框\n",[312,76578,76580],{"class":314,"line":76579},284,[312,76581,76582],{"class":318},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[312,76584,76586,76588,76590,76593,76595,76598],{"class":314,"line":76585},285,[312,76587,4302],{"class":1436},[312,76589,3464],{"class":324},[312,76591,76592],{"class":332},"confirm",[312,76594,1576],{"class":324},[312,76596,76597],{"class":339},"'您确定要删除这条数据吗？'",[312,76599,76600],{"class":324},")) {\n",[312,76602,76604,76607,76609,76611,76613],{"class":314,"line":76603},286,[312,76605,76606],{"class":324},"          arr.",[312,76608,59792],{"class":332},[312,76610,72171],{"class":324},[312,76612,1433],{"class":488},[312,76614,1959],{"class":324},[312,76616,76618],{"class":314,"line":76617},287,[312,76619,76620],{"class":318},"          \u002F\u002F 3.4 重新渲染页面\n",[312,76622,76624,76627],{"class":314,"line":76623},288,[312,76625,76626],{"class":332},"          render",[312,76628,3781],{"class":324},[312,76630,76632],{"class":314,"line":76631},289,[312,76633,76634],{"class":318},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[312,76636,76638,76641,76643,76645,76647,76649,76651,76653,76655],{"class":314,"line":76637},290,[312,76639,76640],{"class":324},"          localStorage.",[312,76642,73426],{"class":332},[312,76644,1576],{"class":324},[312,76646,76462],{"class":339},[312,76648,733],{"class":324},[312,76650,73436],{"class":488},[312,76652,2503],{"class":324},[312,76654,73441],{"class":332},[312,76656,76473],{"class":324},[312,76658,76660],{"class":314,"line":76659},291,[312,76661,4334],{"class":324},[312,76663,76665],{"class":314,"line":76664},292,[312,76666,54184],{"class":324},[312,76668,76670],{"class":314,"line":76669},293,[312,76671,4205],{"emptyLinePlaceholder":1881},[312,76673,76675],{"class":314,"line":76674},294,[312,76676,35256],{"class":324},[312,76678,76680],{"class":314,"line":76679},295,[312,76681,4205],{"emptyLinePlaceholder":1881},[312,76683,76685,76687,76689],{"class":314,"line":76684},296,[312,76686,54203],{"class":324},[312,76688,53599],{"class":328},[312,76690,343],{"class":324},[312,76692,76694,76696,76698],{"class":314,"line":76693},297,[312,76695,353],{"class":324},[312,76697,53586],{"class":328},[312,76699,343],{"class":324},[312,76701,76703],{"class":314,"line":76702},298,[312,76704,4205],{"emptyLinePlaceholder":1881},[312,76706,76708,76710,76712],{"class":314,"line":76707},299,[312,76709,353],{"class":324},[312,76711,52430],{"class":328},[312,76713,343],{"class":324},[14,76715,76717],{"id":76716},"_36-正则表达式","3.6 正则表达式",[24,76719,76720],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[24,76722,76723],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[24,76725,76726],{},"正则表达式的作用：",[243,76728,76729,76736,76742],{},[143,76730,76731,76732,76735],{},"表单验证（ ",[27,76733,76734],{},"匹配"," ）",[143,76737,76738,76739,76735],{},"过滤敏感词（ ",[27,76740,76741],{},"替换",[143,76743,76744,76745,76735],{},"字符串中提取我们想要的部分（ ",[27,76746,76747],{},"提取",[69,76749,76751],{"id":76750},"_361-语法","3.6.1 语法",[24,76753,76754],{},"正则表达式使用步骤：",[140,76756,76757,76760],{},[143,76758,76759],{},"定义规则",[143,76761,76762],{},"查找是否匹配",[24,76764,76765],{},"正则表达式里边不需要写引号",[24,76767,76768],{},[19,76769],{"alt":308,"src":76770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[24,76772,76773],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[24,76775,76776],{},"reg.test(str)",[24,76778,76779],{},[19,76780],{"alt":308,"src":76781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[24,76783,76784],{},[19,76785],{"alt":308,"src":76786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[69,76788,76790],{"id":76789},"_362-元字符","3.6.2 元字符",[140,76792,76793,76796,76799,76802,76809],{},[143,76794,76795],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[143,76797,76798],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[143,76800,76801],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[143,76803,76804,76805],{},"正则验证工具：",[164,76806,76807],{"href":76807,"rel":76808},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[168],[143,76810,76811],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[23796,76813,76815],{"id":76814},"_3621-边界符","3.6.2.1 边界符",[24,76817,76818],{},[19,76819],{"alt":308,"src":76820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[24,76822,76823],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[24,76825,76826],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[24,76828,76829],{},"只匹配一次",[24,76831,76832],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[23796,76834,76836],{"id":76835},"_3622-量词","3.6.2.2 量词",[24,76838,76839],{},[19,76840],{"alt":308,"src":76841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[24,76843,76844],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[23796,76846,76848],{"id":76847},"_3623-元字符","3.6.2.3 元字符",[24,76850,76851],{},[19,76852],{"alt":308,"src":76853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[24,76855,76856],{},"匹配的是a或b或c []只选一个",[24,76858,76859],{},[19,76860],{"alt":308,"src":76861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[24,76863,76864],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[24,76866,76867],{},[19,76868],{"alt":308,"src":76869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[24,76871,76872],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[24,76874,76875],{},[19,76876],{"alt":308,"src":76877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[303,76879,76881],{"className":52428,"code":76880,"language":52430,"meta":308,"style":308},"\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",[119,76882,76883,76893,76907,76911,76919,76933,76953,76965,76973,76977,76985,76993,76998,77029,77056,77084,77088,77093,77121,77152,77157,77162,77193,77225,77257,77261,77266,77297,77327,77357,77361,77366,77397,77428,77458,77488,77492,77497,77530,77534,77539,77570,77601,77605,77610,77641,77671,77702,77706,77711,77743,77774,77805,77832,77863,77895,77928,77959,77990,78022,78053,78061,78069,78073],{"__ignoreMap":308},[312,76884,76885,76887,76889,76891],{"class":314,"line":315},[312,76886,53092],{"class":324},[312,76888,53095],{"class":328},[312,76890,53098],{"class":332},[312,76892,343],{"class":324},[312,76894,76895,76897,76899,76901,76903,76905],{"class":314,"line":171},[312,76896,325],{"class":324},[312,76898,52430],{"class":328},[312,76900,53109],{"class":332},[312,76902,336],{"class":324},[312,76904,53114],{"class":339},[312,76906,343],{"class":324},[312,76908,76909],{"class":314,"line":274},[312,76910,4205],{"emptyLinePlaceholder":1881},[312,76912,76913,76915,76917],{"class":314,"line":298},[312,76914,325],{"class":324},[312,76916,53127],{"class":328},[312,76918,343],{"class":324},[312,76920,76921,76923,76925,76927,76929,76931],{"class":314,"line":974},[312,76922,53930],{"class":324},[312,76924,53137],{"class":328},[312,76926,53140],{"class":332},[312,76928,336],{"class":324},[312,76930,53145],{"class":339},[312,76932,343],{"class":324},[312,76934,76935,76937,76939,76941,76943,76945,76947,76949,76951],{"class":314,"line":980},[312,76936,53930],{"class":324},[312,76938,53137],{"class":328},[312,76940,16721],{"class":332},[312,76942,336],{"class":324},[312,76944,53184],{"class":339},[312,76946,53164],{"class":332},[312,76948,336],{"class":324},[312,76950,53191],{"class":339},[312,76952,343],{"class":324},[312,76954,76955,76957,76959,76961,76963],{"class":314,"line":997},[312,76956,53930],{"class":324},[312,76958,628],{"class":328},[312,76960,53202],{"class":324},[312,76962,628],{"class":328},[312,76964,343],{"class":324},[312,76966,76967,76969,76971],{"class":314,"line":1003},[312,76968,353],{"class":324},[312,76970,53127],{"class":328},[312,76972,343],{"class":324},[312,76974,76975],{"class":314,"line":1020},[312,76976,4205],{"emptyLinePlaceholder":1881},[312,76978,76979,76981,76983],{"class":314,"line":1026},[312,76980,325],{"class":324},[312,76982,53586],{"class":328},[312,76984,343],{"class":324},[312,76986,76987,76989,76991],{"class":314,"line":3418},[312,76988,53930],{"class":324},[312,76990,53599],{"class":328},[312,76992,343],{"class":324},[312,76994,76995],{"class":314,"line":3423},[312,76996,76997],{"class":318},"    \u002F\u002F 元字符中\n",[312,76999,77000,77002,77004,77006,77008,77011,77013,77015,77018,77020,77023,77026],{"class":314,"line":3429},[312,77001,75525],{"class":324},[312,77003,60029],{"class":332},[312,77005,1576],{"class":324},[312,77007,2529],{"class":339},[312,77009,77010],{"class":49772},"哈",[312,77012,2529],{"class":339},[312,77014,2503],{"class":324},[312,77016,77017],{"class":332},"test",[312,77019,1576],{"class":324},[312,77021,77022],{"class":339},"'哈'",[312,77024,77025],{"class":324},"))  ",[312,77027,77028],{"class":318},"\u002F\u002Ftrue\n",[312,77030,77031,77033,77035,77037,77039,77041,77043,77045,77047,77049,77052,77054],{"class":314,"line":3434},[312,77032,75525],{"class":324},[312,77034,60029],{"class":332},[312,77036,1576],{"class":324},[312,77038,2529],{"class":339},[312,77040,77010],{"class":49772},[312,77042,2529],{"class":339},[312,77044,2503],{"class":324},[312,77046,77017],{"class":332},[312,77048,1576],{"class":324},[312,77050,77051],{"class":339},"'哈哈'",[312,77053,77025],{"class":324},[312,77055,77028],{"class":318},[312,77057,77058,77060,77062,77064,77066,77068,77070,77072,77074,77076,77079,77082],{"class":314,"line":3448},[312,77059,75525],{"class":324},[312,77061,60029],{"class":332},[312,77063,1576],{"class":324},[312,77065,2529],{"class":339},[312,77067,77010],{"class":49772},[312,77069,2529],{"class":339},[312,77071,2503],{"class":324},[312,77073,77017],{"class":332},[312,77075,1576],{"class":324},[312,77077,77078],{"class":339},"'二哈'",[312,77080,77081],{"class":324},"))   ",[312,77083,77028],{"class":318},[312,77085,77086],{"class":314,"line":3453},[312,77087,4205],{"emptyLinePlaceholder":1881},[312,77089,77090],{"class":314,"line":3459},[312,77091,77092],{"class":318},"    \u002F\u002F 1.边界符\n",[312,77094,77095,77097,77099,77101,77103,77105,77107,77109,77111,77113,77115,77117,77119],{"class":314,"line":3480},[312,77096,75525],{"class":324},[312,77098,60029],{"class":332},[312,77100,1576],{"class":324},[312,77102,2529],{"class":339},[312,77104,2908],{"class":1436},[312,77106,77010],{"class":49772},[312,77108,2529],{"class":339},[312,77110,2503],{"class":324},[312,77112,77017],{"class":332},[312,77114,1576],{"class":324},[312,77116,77022],{"class":339},[312,77118,77025],{"class":324},[312,77120,77028],{"class":318},[312,77122,77123,77125,77127,77129,77131,77133,77135,77137,77139,77141,77143,77145,77147,77149],{"class":314,"line":3485},[312,77124,75525],{"class":324},[312,77126,60029],{"class":332},[312,77128,1576],{"class":324},[312,77130,2529],{"class":339},[312,77132,2908],{"class":1436},[312,77134,77010],{"class":49772},[312,77136,2247],{"class":1436},[312,77138,2529],{"class":339},[312,77140,2503],{"class":324},[312,77142,77017],{"class":332},[312,77144,1576],{"class":324},[312,77146,77051],{"class":339},[312,77148,77025],{"class":324},[312,77150,77151],{"class":318},"\u002F\u002Ffalse\n",[312,77153,77154],{"class":314,"line":3499},[312,77155,77156],{"class":318},"    \u002F\u002F 2.量词\n",[312,77158,77159],{"class":314,"line":3504},[312,77160,77161],{"class":318},"    \u002F\u002F 量词 * 类似于 >= 0\n",[312,77163,77164,77166,77168,77170,77172,77174,77176,77179,77181,77183,77185,77187,77189,77191],{"class":314,"line":3533},[312,77165,75525],{"class":324},[312,77167,60029],{"class":332},[312,77169,1576],{"class":324},[312,77171,2529],{"class":339},[312,77173,2908],{"class":1436},[312,77175,77010],{"class":49772},[312,77177,77178],{"class":1436},"*$",[312,77180,2529],{"class":339},[312,77182,2503],{"class":324},[312,77184,77017],{"class":332},[312,77186,1576],{"class":324},[312,77188,77051],{"class":339},[312,77190,77025],{"class":324},[312,77192,77028],{"class":318},[312,77194,77195,77197,77199,77201,77203,77205,77207,77209,77211,77213,77215,77217,77220,77222],{"class":314,"line":3538},[312,77196,75525],{"class":324},[312,77198,60029],{"class":332},[312,77200,1576],{"class":324},[312,77202,2529],{"class":339},[312,77204,2908],{"class":1436},[312,77206,77010],{"class":49772},[312,77208,77178],{"class":1436},[312,77210,2529],{"class":339},[312,77212,2503],{"class":324},[312,77214,77017],{"class":332},[312,77216,1576],{"class":324},[312,77218,77219],{"class":339},"'二哈好傻'",[312,77221,77025],{"class":324},[312,77223,77224],{"class":318},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[312,77226,77227,77229,77231,77233,77235,77237,77239,77241,77243,77245,77247,77249,77252,77254],{"class":314,"line":3555},[312,77228,75525],{"class":324},[312,77230,60029],{"class":332},[312,77232,1576],{"class":324},[312,77234,2529],{"class":339},[312,77236,2908],{"class":1436},[312,77238,77010],{"class":49772},[312,77240,77178],{"class":1436},[312,77242,2529],{"class":339},[312,77244,2503],{"class":324},[312,77246,77017],{"class":332},[312,77248,1576],{"class":324},[312,77250,77251],{"class":339},"'哈好哈'",[312,77253,77081],{"class":324},[312,77255,77256],{"class":318},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[312,77258,77259],{"class":314,"line":3560},[312,77260,4205],{"emptyLinePlaceholder":1881},[312,77262,77263],{"class":314,"line":3565},[312,77264,77265],{"class":318},"    \u002F\u002F +类似于>=1\n",[312,77267,77268,77270,77272,77274,77276,77278,77280,77283,77285,77287,77289,77291,77293,77295],{"class":314,"line":3570},[312,77269,75525],{"class":324},[312,77271,60029],{"class":332},[312,77273,1576],{"class":324},[312,77275,2529],{"class":339},[312,77277,2908],{"class":1436},[312,77279,77010],{"class":49772},[312,77281,77282],{"class":1436},"+$",[312,77284,2529],{"class":339},[312,77286,2503],{"class":324},[312,77288,77017],{"class":332},[312,77290,1576],{"class":324},[312,77292,77051],{"class":339},[312,77294,77025],{"class":324},[312,77296,77028],{"class":318},[312,77298,77299,77301,77303,77305,77307,77309,77311,77313,77315,77317,77319,77321,77323,77325],{"class":314,"line":3584},[312,77300,75525],{"class":324},[312,77302,60029],{"class":332},[312,77304,1576],{"class":324},[312,77306,2529],{"class":339},[312,77308,2908],{"class":1436},[312,77310,77010],{"class":49772},[312,77312,77282],{"class":1436},[312,77314,2529],{"class":339},[312,77316,2503],{"class":324},[312,77318,77017],{"class":332},[312,77320,1576],{"class":324},[312,77322,77219],{"class":339},[312,77324,77025],{"class":324},[312,77326,77224],{"class":318},[312,77328,77329,77331,77333,77335,77337,77339,77341,77343,77345,77347,77349,77351,77353,77355],{"class":314,"line":3589},[312,77330,75525],{"class":324},[312,77332,60029],{"class":332},[312,77334,1576],{"class":324},[312,77336,2529],{"class":339},[312,77338,2908],{"class":1436},[312,77340,77010],{"class":49772},[312,77342,77282],{"class":1436},[312,77344,2529],{"class":339},[312,77346,2503],{"class":324},[312,77348,77017],{"class":332},[312,77350,1576],{"class":324},[312,77352,77251],{"class":339},[312,77354,77081],{"class":324},[312,77356,77151],{"class":318},[312,77358,77359],{"class":314,"line":4382},[312,77360,4205],{"emptyLinePlaceholder":1881},[312,77362,77363],{"class":314,"line":4396},[312,77364,77365],{"class":318},"    \u002F\u002F ?类似于0次或一次\n",[312,77367,77368,77370,77372,77374,77376,77378,77381,77383,77385,77387,77389,77391,77393,77395],{"class":314,"line":4404},[312,77369,75525],{"class":324},[312,77371,60029],{"class":332},[312,77373,1576],{"class":324},[312,77375,2529],{"class":339},[312,77377,2908],{"class":1436},[312,77379,77380],{"class":49772},"哈？",[312,77382,2247],{"class":1436},[312,77384,2529],{"class":339},[312,77386,2503],{"class":324},[312,77388,77017],{"class":332},[312,77390,1576],{"class":324},[312,77392,76000],{"class":339},[312,77394,77081],{"class":324},[312,77396,77028],{"class":318},[312,77398,77399,77401,77403,77405,77407,77409,77411,77414,77416,77418,77420,77422,77424,77426],{"class":314,"line":4409},[312,77400,75525],{"class":324},[312,77402,60029],{"class":332},[312,77404,1576],{"class":324},[312,77406,2529],{"class":339},[312,77408,2908],{"class":1436},[312,77410,77010],{"class":49772},[312,77412,77413],{"class":1436},"?$",[312,77415,2529],{"class":339},[312,77417,2503],{"class":324},[312,77419,77017],{"class":332},[312,77421,1576],{"class":324},[312,77423,77051],{"class":339},[312,77425,77025],{"class":324},[312,77427,77151],{"class":318},[312,77429,77430,77432,77434,77436,77438,77440,77442,77444,77446,77448,77450,77452,77454,77456],{"class":314,"line":4415},[312,77431,75525],{"class":324},[312,77433,60029],{"class":332},[312,77435,1576],{"class":324},[312,77437,2529],{"class":339},[312,77439,2908],{"class":1436},[312,77441,77010],{"class":49772},[312,77443,77413],{"class":1436},[312,77445,2529],{"class":339},[312,77447,2503],{"class":324},[312,77449,77017],{"class":332},[312,77451,1576],{"class":324},[312,77453,77219],{"class":339},[312,77455,77025],{"class":324},[312,77457,77224],{"class":318},[312,77459,77460,77462,77464,77466,77468,77470,77472,77474,77476,77478,77480,77482,77484,77486],{"class":314,"line":4421},[312,77461,75525],{"class":324},[312,77463,60029],{"class":332},[312,77465,1576],{"class":324},[312,77467,2529],{"class":339},[312,77469,2908],{"class":1436},[312,77471,77010],{"class":49772},[312,77473,77413],{"class":1436},[312,77475,2529],{"class":339},[312,77477,2503],{"class":324},[312,77479,77017],{"class":332},[312,77481,1576],{"class":324},[312,77483,77251],{"class":339},[312,77485,77025],{"class":324},[312,77487,77151],{"class":318},[312,77489,77490],{"class":314,"line":4426},[312,77491,4205],{"emptyLinePlaceholder":1881},[312,77493,77494],{"class":314,"line":9751},[312,77495,77496],{"class":318},"    \u002F\u002F {n}写几，就必须出现几次\n",[312,77498,77499,77501,77503,77505,77507,77509,77511,77514,77516,77518,77520,77522,77525,77528],{"class":314,"line":9775},[312,77500,75525],{"class":324},[312,77502,60029],{"class":332},[312,77504,1576],{"class":324},[312,77506,2529],{"class":339},[312,77508,2908],{"class":1436},[312,77510,77010],{"class":49772},[312,77512,77513],{"class":1436},"{4}$",[312,77515,2529],{"class":339},[312,77517,2503],{"class":324},[312,77519,77017],{"class":332},[312,77521,1576],{"class":324},[312,77523,77524],{"class":339},"'哈哈哈哈'",[312,77526,77527],{"class":324},")) ",[312,77529,77028],{"class":318},[312,77531,77532],{"class":314,"line":9780},[312,77533,4205],{"emptyLinePlaceholder":1881},[312,77535,77536],{"class":314,"line":9786},[312,77537,77538],{"class":318},"    \u002F\u002F {n,}大于等于n次\n",[312,77540,77541,77543,77545,77547,77549,77551,77553,77556,77558,77560,77562,77564,77566,77568],{"class":314,"line":9813},[312,77542,75525],{"class":324},[312,77544,60029],{"class":332},[312,77546,1576],{"class":324},[312,77548,2529],{"class":339},[312,77550,2908],{"class":1436},[312,77552,77010],{"class":49772},[312,77554,77555],{"class":1436},"{4,}$",[312,77557,2529],{"class":339},[312,77559,2503],{"class":324},[312,77561,77017],{"class":332},[312,77563,1576],{"class":324},[312,77565,77524],{"class":339},[312,77567,77527],{"class":324},[312,77569,77028],{"class":318},[312,77571,77572,77574,77576,77578,77580,77582,77584,77586,77588,77590,77592,77594,77597,77599],{"class":314,"line":9818},[312,77573,75525],{"class":324},[312,77575,60029],{"class":332},[312,77577,1576],{"class":324},[312,77579,2529],{"class":339},[312,77581,2908],{"class":1436},[312,77583,77010],{"class":49772},[312,77585,77555],{"class":1436},[312,77587,2529],{"class":339},[312,77589,2503],{"class":324},[312,77591,77017],{"class":332},[312,77593,1576],{"class":324},[312,77595,77596],{"class":339},"'哈哈哈哈哈'",[312,77598,77527],{"class":324},[312,77600,77028],{"class":318},[312,77602,77603],{"class":314,"line":9824},[312,77604,4205],{"emptyLinePlaceholder":1881},[312,77606,77607],{"class":314,"line":9836},[312,77608,77609],{"class":318},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[312,77611,77612,77614,77616,77618,77620,77622,77624,77627,77629,77631,77633,77635,77637,77639],{"class":314,"line":9848},[312,77613,75525],{"class":324},[312,77615,60029],{"class":332},[312,77617,1576],{"class":324},[312,77619,2529],{"class":339},[312,77621,2908],{"class":1436},[312,77623,77010],{"class":49772},[312,77625,77626],{"class":1436},"{4,6}$",[312,77628,2529],{"class":339},[312,77630,2503],{"class":324},[312,77632,77017],{"class":332},[312,77634,1576],{"class":324},[312,77636,77524],{"class":339},[312,77638,77527],{"class":324},[312,77640,77028],{"class":318},[312,77642,77643,77645,77647,77649,77651,77653,77655,77657,77659,77661,77663,77665,77667,77669],{"class":314,"line":9860},[312,77644,75525],{"class":324},[312,77646,60029],{"class":332},[312,77648,1576],{"class":324},[312,77650,2529],{"class":339},[312,77652,2908],{"class":1436},[312,77654,77010],{"class":49772},[312,77656,77626],{"class":1436},[312,77658,2529],{"class":339},[312,77660,2503],{"class":324},[312,77662,77017],{"class":332},[312,77664,1576],{"class":324},[312,77666,77596],{"class":339},[312,77668,77527],{"class":324},[312,77670,77028],{"class":318},[312,77672,77673,77675,77677,77679,77681,77683,77685,77687,77689,77691,77693,77695,77698,77700],{"class":314,"line":11519},[312,77674,75525],{"class":324},[312,77676,60029],{"class":332},[312,77678,1576],{"class":324},[312,77680,2529],{"class":339},[312,77682,2908],{"class":1436},[312,77684,77010],{"class":49772},[312,77686,77626],{"class":1436},[312,77688,2529],{"class":339},[312,77690,2503],{"class":324},[312,77692,77017],{"class":332},[312,77694,1576],{"class":324},[312,77696,77697],{"class":339},"'哈哈哈哈哈哈哈'",[312,77699,77527],{"class":324},[312,77701,77151],{"class":318},[312,77703,77704],{"class":314,"line":11544},[312,77705,4205],{"emptyLinePlaceholder":1881},[312,77707,77708],{"class":314,"line":11567},[312,77709,77710],{"class":318},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[312,77712,77713,77715,77717,77719,77721,77723,77726,77728,77730,77732,77734,77736,77739,77741],{"class":314,"line":11591},[312,77714,75525],{"class":324},[312,77716,60029],{"class":332},[312,77718,1576],{"class":324},[312,77720,2529],{"class":339},[312,77722,2908],{"class":1436},[312,77724,77725],{"class":488},"[abc]",[312,77727,2247],{"class":1436},[312,77729,2529],{"class":339},[312,77731,2503],{"class":324},[312,77733,77017],{"class":332},[312,77735,1576],{"class":324},[312,77737,77738],{"class":339},"'a'",[312,77740,77025],{"class":324},[312,77742,77028],{"class":318},[312,77744,77745,77747,77749,77751,77753,77755,77757,77759,77761,77763,77765,77767,77770,77772],{"class":314,"line":11596},[312,77746,75525],{"class":324},[312,77748,60029],{"class":332},[312,77750,1576],{"class":324},[312,77752,2529],{"class":339},[312,77754,2908],{"class":1436},[312,77756,77725],{"class":488},[312,77758,2247],{"class":1436},[312,77760,2529],{"class":339},[312,77762,2503],{"class":324},[312,77764,77017],{"class":332},[312,77766,1576],{"class":324},[312,77768,77769],{"class":339},"'b'",[312,77771,77025],{"class":324},[312,77773,77028],{"class":318},[312,77775,77776,77778,77780,77782,77784,77786,77788,77790,77792,77794,77796,77798,77801,77803],{"class":314,"line":11601},[312,77777,75525],{"class":324},[312,77779,60029],{"class":332},[312,77781,1576],{"class":324},[312,77783,2529],{"class":339},[312,77785,2908],{"class":1436},[312,77787,77725],{"class":488},[312,77789,2247],{"class":1436},[312,77791,2529],{"class":339},[312,77793,2503],{"class":324},[312,77795,77017],{"class":332},[312,77797,1576],{"class":324},[312,77799,77800],{"class":339},"'c'",[312,77802,77025],{"class":324},[312,77804,77028],{"class":318},[312,77806,77807,77809,77811,77813,77815,77817,77819,77821,77823,77825,77828,77830],{"class":314,"line":11606},[312,77808,75525],{"class":324},[312,77810,60029],{"class":332},[312,77812,1576],{"class":324},[312,77814,2529],{"class":339},[312,77816,77725],{"class":488},[312,77818,2529],{"class":339},[312,77820,2503],{"class":324},[312,77822,77017],{"class":332},[312,77824,1576],{"class":324},[312,77826,77827],{"class":339},"'ab'",[312,77829,77025],{"class":324},[312,77831,77028],{"class":318},[312,77833,77834,77836,77838,77840,77842,77844,77846,77848,77850,77852,77854,77856,77858,77860],{"class":314,"line":11615},[312,77835,75525],{"class":324},[312,77837,60029],{"class":332},[312,77839,1576],{"class":324},[312,77841,2529],{"class":339},[312,77843,2908],{"class":1436},[312,77845,77725],{"class":488},[312,77847,2247],{"class":1436},[312,77849,2529],{"class":339},[312,77851,2503],{"class":324},[312,77853,77017],{"class":332},[312,77855,1576],{"class":324},[312,77857,77827],{"class":339},[312,77859,77025],{"class":324},[312,77861,77862],{"class":318},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[312,77864,77865,77867,77869,77871,77873,77875,77877,77880,77882,77884,77886,77888,77890,77892],{"class":314,"line":11620},[312,77866,75525],{"class":324},[312,77868,60029],{"class":332},[312,77870,1576],{"class":324},[312,77872,2529],{"class":339},[312,77874,2908],{"class":1436},[312,77876,77725],{"class":488},[312,77878,77879],{"class":1436},"{2}$",[312,77881,2529],{"class":339},[312,77883,2503],{"class":324},[312,77885,77017],{"class":332},[312,77887,1576],{"class":324},[312,77889,77827],{"class":339},[312,77891,77025],{"class":324},[312,77893,77894],{"class":318},"\u002F\u002Ftrue   可以选两个\n",[312,77896,77897,77899,77901,77903,77905,77907,77910,77912,77914,77916,77918,77920,77923,77925],{"class":314,"line":11626},[312,77898,75525],{"class":324},[312,77900,60029],{"class":332},[312,77902,1576],{"class":324},[312,77904,2529],{"class":339},[312,77906,2908],{"class":1436},[312,77908,77909],{"class":488},"[a-z]",[312,77911,2247],{"class":1436},[312,77913,2529],{"class":339},[312,77915,2503],{"class":324},[312,77917,77017],{"class":332},[312,77919,1576],{"class":324},[312,77921,77922],{"class":339},"'p'",[312,77924,77081],{"class":324},[312,77926,77927],{"class":318},"\u002F\u002Ftrue   依然只能选一个\n",[312,77929,77930,77932,77934,77936,77938,77940,77943,77945,77947,77949,77951,77953,77955,77957],{"class":314,"line":11647},[312,77931,75525],{"class":324},[312,77933,60029],{"class":332},[312,77935,1576],{"class":324},[312,77937,2529],{"class":339},[312,77939,2908],{"class":1436},[312,77941,77942],{"class":488},"[A-Z]",[312,77944,2247],{"class":1436},[312,77946,2529],{"class":339},[312,77948,2503],{"class":324},[312,77950,77017],{"class":332},[312,77952,1576],{"class":324},[312,77954,77922],{"class":339},[312,77956,77081],{"class":324},[312,77958,77151],{"class":318},[312,77960,77961,77963,77965,77967,77969,77971,77973,77975,77977,77979,77981,77983,77986,77988],{"class":314,"line":11653},[312,77962,75525],{"class":324},[312,77964,60029],{"class":332},[312,77966,1576],{"class":324},[312,77968,2529],{"class":339},[312,77970,2908],{"class":1436},[312,77972,77942],{"class":488},[312,77974,2247],{"class":1436},[312,77976,2529],{"class":339},[312,77978,2503],{"class":324},[312,77980,77017],{"class":332},[312,77982,1576],{"class":324},[312,77984,77985],{"class":339},"'P'",[312,77987,77081],{"class":324},[312,77989,77028],{"class":318},[312,77991,77992,77994,77996,77998,78000,78002,78005,78007,78009,78011,78013,78015,78018,78020],{"class":314,"line":11667},[312,77993,75525],{"class":324},[312,77995,60029],{"class":332},[312,77997,1576],{"class":324},[312,77999,2529],{"class":339},[312,78001,2908],{"class":1436},[312,78003,78004],{"class":488},"[0-9]",[312,78006,2247],{"class":1436},[312,78008,2529],{"class":339},[312,78010,2503],{"class":324},[312,78012,77017],{"class":332},[312,78014,1576],{"class":324},[312,78016,78017],{"class":339},"'0'",[312,78019,77081],{"class":324},[312,78021,77028],{"class":318},[312,78023,78024,78026,78028,78030,78032,78034,78037,78039,78041,78043,78045,78047,78049,78051],{"class":314,"line":11673},[312,78025,75525],{"class":324},[312,78027,60029],{"class":332},[312,78029,1576],{"class":324},[312,78031,2529],{"class":339},[312,78033,2908],{"class":1436},[312,78035,78036],{"class":488},"[a-zA-Z0-9]",[312,78038,2247],{"class":1436},[312,78040,2529],{"class":339},[312,78042,2503],{"class":324},[312,78044,77017],{"class":332},[312,78046,1576],{"class":324},[312,78048,77922],{"class":339},[312,78050,77025],{"class":324},[312,78052,77028],{"class":318},[312,78054,78055,78057,78059],{"class":314,"line":11700},[312,78056,54203],{"class":324},[312,78058,53599],{"class":328},[312,78060,343],{"class":324},[312,78062,78063,78065,78067],{"class":314,"line":11709},[312,78064,353],{"class":324},[312,78066,53586],{"class":328},[312,78068,343],{"class":324},[312,78070,78071],{"class":314,"line":11715},[312,78072,4205],{"emptyLinePlaceholder":1881},[312,78074,78075,78077,78079],{"class":314,"line":11723},[312,78076,353],{"class":324},[312,78078,52430],{"class":328},[312,78080,343],{"class":324},[23796,78082,78084],{"id":78083},"_3624-修饰符","3.6.2.4 修饰符",[24,78086,78087],{},[19,78088],{"alt":308,"src":78089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[24,78091,78092],{},"replace是个方法，使用的时候一定不要忘记括号()",[24,78094,78095],{},[19,78096],{"alt":308,"src":78097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[303,78099,78101],{"className":52428,"code":78100,"language":52430,"meta":308,"style":308},"\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",[119,78102,78103,78113,78127,78135,78149,78169,78181,78189,78197,78205,78237,78268,78273,78305,78316,78349,78358,78366,78374],{"__ignoreMap":308},[312,78104,78105,78107,78109,78111],{"class":314,"line":315},[312,78106,53092],{"class":324},[312,78108,53095],{"class":328},[312,78110,53098],{"class":332},[312,78112,343],{"class":324},[312,78114,78115,78117,78119,78121,78123,78125],{"class":314,"line":171},[312,78116,325],{"class":324},[312,78118,52430],{"class":328},[312,78120,53109],{"class":332},[312,78122,336],{"class":324},[312,78124,53114],{"class":339},[312,78126,343],{"class":324},[312,78128,78129,78131,78133],{"class":314,"line":274},[312,78130,325],{"class":324},[312,78132,53127],{"class":328},[312,78134,343],{"class":324},[312,78136,78137,78139,78141,78143,78145,78147],{"class":314,"line":298},[312,78138,53930],{"class":324},[312,78140,53137],{"class":328},[312,78142,53140],{"class":332},[312,78144,336],{"class":324},[312,78146,53145],{"class":339},[312,78148,343],{"class":324},[312,78150,78151,78153,78155,78157,78159,78161,78163,78165,78167],{"class":314,"line":974},[312,78152,53930],{"class":324},[312,78154,53137],{"class":328},[312,78156,16721],{"class":332},[312,78158,336],{"class":324},[312,78160,53184],{"class":339},[312,78162,53164],{"class":332},[312,78164,336],{"class":324},[312,78166,53191],{"class":339},[312,78168,343],{"class":324},[312,78170,78171,78173,78175,78177,78179],{"class":314,"line":980},[312,78172,53930],{"class":324},[312,78174,628],{"class":328},[312,78176,53202],{"class":324},[312,78178,628],{"class":328},[312,78180,343],{"class":324},[312,78182,78183,78185,78187],{"class":314,"line":997},[312,78184,353],{"class":324},[312,78186,53127],{"class":328},[312,78188,343],{"class":324},[312,78190,78191,78193,78195],{"class":314,"line":1003},[312,78192,325],{"class":324},[312,78194,53586],{"class":328},[312,78196,343],{"class":324},[312,78198,78199,78201,78203],{"class":314,"line":1020},[312,78200,53930],{"class":324},[312,78202,53599],{"class":328},[312,78204,343],{"class":324},[312,78206,78207,78209,78211,78213,78215,78217,78220,78222,78224,78226,78228,78230,78233,78235],{"class":314,"line":1026},[312,78208,75525],{"class":324},[312,78210,60029],{"class":332},[312,78212,1576],{"class":324},[312,78214,2529],{"class":339},[312,78216,2908],{"class":1436},[312,78218,78219],{"class":49772},"java",[312,78221,2247],{"class":1436},[312,78223,2529],{"class":339},[312,78225,2503],{"class":324},[312,78227,77017],{"class":332},[312,78229,1576],{"class":324},[312,78231,78232],{"class":339},"'java'",[312,78234,77527],{"class":324},[312,78236,77028],{"class":318},[312,78238,78239,78241,78243,78245,78247,78249,78251,78253,78255,78257,78259,78261,78264,78266],{"class":314,"line":3418},[312,78240,75525],{"class":324},[312,78242,60029],{"class":332},[312,78244,1576],{"class":324},[312,78246,2529],{"class":339},[312,78248,2908],{"class":1436},[312,78250,78219],{"class":49772},[312,78252,2247],{"class":1436},[312,78254,2529],{"class":339},[312,78256,2503],{"class":324},[312,78258,77017],{"class":332},[312,78260,1576],{"class":324},[312,78262,78263],{"class":339},"'Java'",[312,78265,77527],{"class":324},[312,78267,77151],{"class":318},[312,78269,78270],{"class":314,"line":3423},[312,78271,78272],{"class":318},"    \u002F\u002F 不区分大小写、\n",[312,78274,78275,78277,78279,78281,78283,78285,78287,78289,78291,78293,78295,78297,78299,78301,78303],{"class":314,"line":3429},[312,78276,75525],{"class":324},[312,78278,60029],{"class":332},[312,78280,1576],{"class":324},[312,78282,2529],{"class":339},[312,78284,2908],{"class":1436},[312,78286,78219],{"class":49772},[312,78288,2247],{"class":1436},[312,78290,2529],{"class":339},[312,78292,2386],{"class":1436},[312,78294,2503],{"class":324},[312,78296,77017],{"class":332},[312,78298,1576],{"class":324},[312,78300,78263],{"class":339},[312,78302,77527],{"class":324},[312,78304,77028],{"class":318},[312,78306,78307,78309,78311,78313],{"class":314,"line":3434},[312,78308,13024],{"class":1436},[312,78310,75691],{"class":488},[312,78312,15366],{"class":1436},[312,78314,78315],{"class":339}," 'java是一门编程语言，学完java工资很高'\n",[312,78317,78318,78320,78323,78325,78328,78331,78333,78335,78337,78339,78342,78344,78347],{"class":314,"line":3448},[312,78319,13024],{"class":1436},[312,78321,78322],{"class":488}," result",[312,78324,15366],{"class":1436},[312,78326,78327],{"class":324}," str.",[312,78329,78330],{"class":332},"replace",[312,78332,1576],{"class":324},[312,78334,2529],{"class":339},[312,78336,78219],{"class":49772},[312,78338,2529],{"class":339},[312,78340,78341],{"class":1436},"ig",[312,78343,733],{"class":324},[312,78345,78346],{"class":339},"'前端'",[312,78348,1959],{"class":324},[312,78350,78351,78353,78355],{"class":314,"line":3453},[312,78352,75525],{"class":324},[312,78354,60029],{"class":332},[312,78356,78357],{"class":324},"(result)\n",[312,78359,78360,78362,78364],{"class":314,"line":3459},[312,78361,54203],{"class":324},[312,78363,53599],{"class":328},[312,78365,343],{"class":324},[312,78367,78368,78370,78372],{"class":314,"line":3480},[312,78369,353],{"class":324},[312,78371,53586],{"class":328},[312,78373,343],{"class":324},[312,78375,78376,78378,78380],{"class":314,"line":3485},[312,78377,353],{"class":324},[312,78379,52430],{"class":328},[312,78381,343],{"class":324},[1856,78383,78384],{},"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":308,"searchDepth":171,"depth":171,"links":78386},[78387,78397,78409,78426,78433,78441],{"id":55146,"depth":171,"text":55147,"children":78388},[78389,78390,78391,78392,78393,78394,78395,78396],{"id":55150,"depth":274,"text":55151},{"id":55183,"depth":274,"text":55184},{"id":55222,"depth":274,"text":55223},{"id":55379,"depth":274,"text":55380},{"id":55427,"depth":274,"text":55428},{"id":55563,"depth":274,"text":55564},{"id":55885,"depth":274,"text":55886},{"id":58871,"depth":274,"text":58872},{"id":58899,"depth":171,"text":58900,"children":78398},[78399,78400,78401,78402,78403,78404,78405,78406,78407,78408],{"id":58903,"depth":274,"text":58904},{"id":58926,"depth":274,"text":58927},{"id":59841,"depth":274,"text":59842},{"id":60531,"depth":274,"text":60532},{"id":60813,"depth":274,"text":60814},{"id":64970,"depth":274,"text":64971},{"id":65140,"depth":274,"text":65141},{"id":65268,"depth":274,"text":65269},{"id":65293,"depth":274,"text":65294},{"id":66682,"depth":274,"text":66683},{"id":67835,"depth":171,"text":67836,"children":78410},[78411,78412,78413,78414,78415,78416,78417,78418,78419,78420,78421,78422,78423,78424,78425],{"id":67839,"depth":274,"text":67840},{"id":68493,"depth":274,"text":68494},{"id":70188,"depth":274,"text":70189},{"id":70229,"depth":274,"text":70230},{"id":70271,"depth":274,"text":70272},{"id":70285,"depth":274,"text":70286},{"id":70334,"depth":274,"text":70335},{"id":70346,"depth":274,"text":70347},{"id":70361,"depth":274,"text":70362},{"id":70397,"depth":274,"text":70398},{"id":70478,"depth":274,"text":70479},{"id":70605,"depth":274,"text":70606},{"id":70617,"depth":274,"text":70618},{"id":70636,"depth":274,"text":70637},{"id":72742,"depth":274,"text":72743},{"id":72761,"depth":171,"text":72762,"children":78427},[78428,78429,78430,78431,78432],{"id":72782,"depth":274,"text":72783},{"id":72802,"depth":274,"text":72803},{"id":72851,"depth":274,"text":72852},{"id":72976,"depth":274,"text":72977},{"id":73157,"depth":274,"text":73158},{"id":73175,"depth":171,"text":73176,"children":78434},[78435,78436,78437,78438,78439,78440],{"id":73190,"depth":274,"text":73191},{"id":73249,"depth":274,"text":73250},{"id":73273,"depth":274,"text":73274},{"id":73593,"depth":274,"text":73594},{"id":73625,"depth":274,"text":73626},{"id":73648,"depth":274,"text":73649},{"id":76716,"depth":171,"text":76717,"children":78442},[78443,78444],{"id":76750,"depth":274,"text":76751},{"id":76789,"depth":274,"text":76790},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":55118,"description":1878},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78451,"title":78452,"body":78453,"description":1878,"extension":1879,"meta":94588,"navigation":1881,"path":94589,"seo":94590,"stem":94591,"__hash__":94592},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78454,"toc":94524},[78455,78458,78461,78465,78469,78474,78479,78490,78494,78499,78502,78506,78509,78514,78518,78522,78525,78530,78533,78537,78540,78548,78551,78555,78560,78565,78568,78572,78577,78582,78585,78589,78594,78597,78602,78605,78610,78613,78618,78623,78626,78629,78633,78638,78643,78646,78650,78654,78657,78660,78663,78667,78671,78676,78681,78684,78688,78693,78698,78701,78704,78707,78710,78713,78716,78719,78722,78725,78730,78734,78739,78744,78747,78750,78753,78756,78759,78762,78765,78768,78772,78776,78779,78782,78785,78790,78792,78795,78798,78801,78804,78807,78810,78813,78816,78819,78822,78825,78828,78831,78836,78841,78846,78849,78853,78856,78861,78865,78867,78878,78883,78984,78987,78990,78993,78996,78999,79002,79005,79008,79010,79013,79016,79019,79022,79025,79027,79030,79033,79036,79039,79042,79045,79047,79050,79052,79054,79057,79061,79065,79068,79071,79074,79077,79080,79083,79086,79089,79092,79097,79217,79220,79223,79228,79231,79234,79237,79240,79245,79248,79251,79254,79257,79262,79265,79365,79430,79504,79508,79511,79514,79518,79521,79535,79564,79567,79570,79573,79576,79579,79582,79585,79587,79590,79593,79596,79599,79603,79608,79612,79617,79692,79695,79878,79881,79884,79887,79890,79893,79895,79898,79901,79904,79907,79910,79913,79915,79919,79922,79927,79930,79933,79936,79939,79941,79946,79949,79952,79955,79958,79960,79965,79968,79971,79973,79975,79978,79982,79985,79988,79993,79996,79999,80002,80052,80057,80061,80066,80069,80138,80141,80150,80154,80159,80162,80165,80173,80176,80193,81994,81998,82002,82007,82010,82014,82020,82026,82178,82183,82188,82191,82194,82197,82200,82203,82206,82209,82212,82215,82218,82221,82224,82229,82233,82236,82247,82251,82256,82259,82262,82265,82268,82271,82273,82276,82279,82282,82285,82287,82304,82307,82311,82314,82319,82324,82327,82330,82334,82337,82340,82349,82352,82356,82359,82364,82369,82436,82440,82443,82446,82451,82456,82542,82547,82551,82554,82557,82572,82575,82580,82584,82589,82698,82701,82712,82862,82866,82871,82980,82984,82989,82994,82999,83002,83009,83029,83065,83229,83234,83237,83242,83249,83252,83255,83258,83317,83373,83429,83433,83438,83753,83756,83760,83763,83768,83877,83882,83886,83891,83895,83966,83970,83972,83975,83978,84016,84292,84296,84313,84379,84413,84417,84420,84425,84454,84461,84470,84475,84490,84495,84504,84507,84644,84648,84710,84714,84719,84964,84968,84973,84976,84979,84982,84985,84989,84994,86575,86579,86583,86589,86592,86597,86601,86604,86609,86612,86623,86627,86632,86636,86641,86646,86649,86654,86658,86662,86665,86670,86675,86678,86681,86684,86806,86811,86913,86916,86919,86923,86928,87100,87105,87109,87112,87117,87183,87188,87191,87322,87325,87330,87333,87336,87427,87432,87435,87438,87441,87444,87449,87454,87457,87462,87467,87472,87476,87479,87482,87487,87492,87497,87502,87556,87559,87562,87567,87570,87573,87578,87583,87588,87592,87597,87611,87616,87619,87624,87628,87633,87638,87643,87648,87653,87658,87663,87668,87671,87675,87680,87683,87686,87689,87694,87699,87702,87705,87709,87712,87715,87720,87725,87730,87735,87738,87743,87748,87809,87814,87817,87822,89062,89067,89071,89075,89080,89083,89088,89093,89096,89101,89103,89108,89112,89115,89118,89129,89133,89138,89143,89198,89203,89208,89213,89424,89429,89433,89438,89441,89443,89446,89449,89896,89901,89908,89914,89917,89920,90184,90189,90193,90458,90463,90467,90472,90477,90482,90487,90818,90821,90826,90831,90834,90838,90842,90847,90852,90857,90862,90867,90872,90876,90879,90884,90889,90892,90966,90971,90976,90981,90983,90986,91356,91361,91366,91371,91374,91377,91479,91484,91489,91592,91596,91601,91605,91609,91614,91619,91622,91627,91630,91633,92026,92031,92034,92037,92040,92043,92563,92567,92572,92577,92582,92585,92590,92593,92596,92978,92983,92985,92987,92990,92993,93505,93509,93570,93573,93576,93579,93583,93586,93591,93596,94521],[10,78456,78452],{"id":78457},"_4js进阶",[24,78459,78460],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78462,78464],{"id":78463},"_41-作用域","4.1 作用域",[69,78466,78468],{"id":78467},"_411-局部作用域","4.1.1 局部作用域",[24,78470,78471],{},[19,78472],{"alt":308,"src":78473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[24,78475,78476],{},[19,78477],{"alt":308,"src":78478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[243,78480,78481,78484,78487],{},[143,78482,78483],{},"函数作用域在函数内部",[143,78485,78486],{},"块级作用域在{}",[143,78488,78489],{},"对象的那个{}不是作用域，不是块作用域",[69,78491,78493],{"id":78492},"_412-全局作用域","4.1.2 全局作用域",[24,78495,78496],{},[19,78497],{"alt":308,"src":78498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[24,78500,78501],{},"window.a=10不要这样写",[69,78503,78505],{"id":78504},"_413-作用域链","4.1.3 作用域链",[24,78507,78508],{},"变量查找机制",[24,78510,78511],{},[19,78512],{"alt":308,"src":78513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,78515,78517],{"id":78516},"_42-垃圾回收机制","4.2 垃圾回收机制",[69,78519,78521],{"id":78520},"_421-大体介绍","4.2.1 大体介绍",[24,78523,78524],{},"垃圾回收机制(Garbage Collection) 简称 GC",[24,78526,78527],{},[19,78528],{"alt":308,"src":78529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[24,78531,78532],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[69,78534,78536],{"id":78535},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[24,78538,78539],{},"堆栈空间分配区别：",[140,78541,78542,78545],{},[143,78543,78544],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[143,78546,78547],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[24,78549,78550],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[23796,78552,78554],{"id":78553},"_4221-引用计数","4.2.2.1 引用计数",[24,78556,78557],{},[19,78558],{"alt":308,"src":78559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[24,78561,78562],{},[19,78563],{"alt":308,"src":78564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[24,78566,78567],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[23796,78569,78571],{"id":78570},"_4222-标记清除法","4.2.2.2 标记清除法",[24,78573,78574],{},[19,78575],{"alt":308,"src":78576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[24,78578,78579],{},[19,78580],{"alt":308,"src":78581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[24,78583,78584],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,78586,78588],{"id":78587},"_43-闭包","4.3 闭包",[24,78590,78591],{},[19,78592],{"alt":308,"src":78593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[24,78595,78596],{},"闭包：内层函数+外层函数的变量",[24,78598,78599],{},[19,78600],{"alt":308,"src":78601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[24,78603,78604],{},"closure就是闭包",[24,78606,78607],{},[19,78608],{"alt":308,"src":78609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[24,78611,78612],{},"内层函数必须包含外层函数的变量才是闭包",[24,78614,78615],{},[19,78616],{"alt":308,"src":78617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[24,78619,78620],{},[19,78621],{"alt":308,"src":78622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[24,78624,78625],{},"闭包可能会引起内存泄漏",[24,78627,78628],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78630,78632],{"id":78631},"_44-变量提升","4.4 变量提升",[24,78634,78635],{},[19,78636],{"alt":308,"src":78637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[24,78639,78640],{},[19,78641],{"alt":308,"src":78642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[24,78644,78645],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78647,78649],{"id":78648},"_45-函数进阶","4.5 函数进阶",[69,78651,78653],{"id":78652},"_451-函数提升","4.5.1 函数提升",[24,78655,78656],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[24,78658,78659],{},"只提升函数声明，不提升函数调用",[53599,78661,78662],{},"\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",[69,78664,78666],{"id":78665},"_452-函数参数","4.5.2 函数参数",[23796,78668,78670],{"id":78669},"_4521-动态参数","4.5.2.1 动态参数",[24,78672,78673],{},[19,78674],{"alt":308,"src":78675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[24,78677,78678],{},[19,78679],{"alt":308,"src":78680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[24,78682,78683],{},"箭头函数里边没有arguments",[23796,78685,78687],{"id":78686},"_4522-剩余参数","4.5.2.2 剩余参数",[24,78689,78690],{},[19,78691],{"alt":308,"src":78692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[24,78694,78695],{},[19,78696],{"alt":308,"src":78697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[24,78699,78700],{},"剩余参数使用的时候不需要写...",[24,78702,78703],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[24,78705,78706],{},"  function getSum(a,b,...arr) {",[24,78708,78709],{},"  console.log(11)",[24,78711,78712],{},"  }",[24,78714,78715],{},"  getSum(1,2,3,4)",[24,78717,78718],{},"  将1传给a，2传给b，剩下的传给剩余参数",[24,78720,78721],{},"  getSum(1,2)",[24,78723,78724],{},"  将1传给a，2传给b，剩余参数为一个空数组",[24,78726,78727],{},[19,78728],{"alt":308,"src":78729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[23796,78731,78733],{"id":78732},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[24,78735,78736],{},[19,78737],{"alt":308,"src":78738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[24,78740,78741],{},[19,78742],{"alt":308,"src":78743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[24,78745,78746],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[24,78748,78749],{},"展开运算符可以用于数组之间的合并：",[24,78751,78752],{},"const arr1 = [1, 2, 3]",[24,78754,78755],{},"const arr2 = [3, 4, 5]",[24,78757,78758],{},"const arr = [...arr1, ...arr2]",[24,78760,78761],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[24,78763,78764],{},"剩余参数：函数参数使用，得到真数组",[24,78766,78767],{},"展开运算符：数组中使用，数组展开",[69,78769,78771],{"id":78770},"_453-箭头函数","4.5.3 箭头函数",[23796,78773,78775],{"id":78774},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[24,78777,78778],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[24,78780,78781],{},"它不是万能的！！！",[24,78783,78784],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[24,78786,78787],{},[19,78788],{"alt":308,"src":78789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[24,78791,1982],{},[24,78793,78794],{},"① 只有一个形参的时候，可以省略小括号：",[24,78796,78797],{},"const fn=x=>{console.log(x)}",[24,78799,78800],{},"② 只有一行代码时可以省略大括号：",[24,78802,78803],{},"const fn=x=>console.log(11)",[24,78805,78806],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[24,78808,78809],{},"const fn=x=>x+x",[24,78811,78812],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[24,78814,78815],{},"⑤ 阻止表单默认提交：",[24,78817,78818],{},"const form = document.querySelector('form')",[24,78820,78821],{},"form.addEventListener('click', ev => ev.preventDefault())",[24,78823,78824],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[24,78826,78827],{},"const fn=uname=>({uname:uname})",[24,78829,78830],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[24,78832,78833],{},[19,78834],{"alt":308,"src":78835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[24,78837,78838],{},[19,78839],{"alt":308,"src":78840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[24,78842,78843],{},[19,78844],{"alt":308,"src":78845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[24,78847,78848],{},"一定不要忘记用()，有()就理解为自带return",[23796,78850,78852],{"id":78851},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[24,78854,78855],{},"箭头函数是没有动态参数的arguments",[24,78857,78858],{},[19,78859],{"alt":308,"src":78860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[23796,78862,78864],{"id":78863},"_4533-箭头函数this","4.5.3.3 箭头函数this",[24,78866,13135],{},[140,78868,78869,78872,78875],{},[143,78870,78871],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[143,78873,78874],{},"事件回调函数使用箭头函数时，this 为全局的 window",[143,78876,78877],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[24,78879,78880],{},[19,78881],{"alt":308,"src":78882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[303,78884,78886],{"className":54853,"code":78885,"language":54855,"meta":308,"style":308},"  \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",[119,78887,78888,78896,78901,78906,78911,78916,78921,78925,78930,78934,78938,78943,78948,78953,78957,78961,78966,78971,78976],{"__ignoreMap":308},[312,78889,78890,78892,78894],{"class":314,"line":315},[312,78891,53930],{"class":324},[312,78893,53599],{"class":328},[312,78895,343],{"class":324},[312,78897,78898],{"class":314,"line":171},[312,78899,78900],{"class":324},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[312,78902,78903],{"class":314,"line":274},[312,78904,78905],{"class":324},"    console.log(this) \u002F\u002F指向window\n",[312,78907,78908],{"class":314,"line":298},[312,78909,78910],{"class":324},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[312,78912,78913],{"class":314,"line":974},[312,78914,78915],{"class":324},"    function fn() {\n",[312,78917,78918],{"class":314,"line":980},[312,78919,78920],{"class":324},"      console.log(this)  \u002F\u002F指向window\n",[312,78922,78923],{"class":314,"line":997},[312,78924,3992],{"class":324},[312,78926,78927],{"class":314,"line":1003},[312,78928,78929],{"class":324},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[312,78931,78932],{"class":314,"line":1020},[312,78933,4205],{"emptyLinePlaceholder":1881},[312,78935,78936],{"class":314,"line":1026},[312,78937,73295],{"class":324},[312,78939,78940],{"class":314,"line":3418},[312,78941,78942],{"class":324},"      name: 'andy',\n",[312,78944,78945],{"class":314,"line":3423},[312,78946,78947],{"class":324},"      sayHai: function () {\n",[312,78949,78950],{"class":314,"line":3429},[312,78951,78952],{"class":324},"        console.log(this)\n",[312,78954,78955],{"class":314,"line":3434},[312,78956,54184],{"class":324},[312,78958,78959],{"class":314,"line":3448},[312,78960,3992],{"class":324},[312,78962,78963],{"class":314,"line":3453},[312,78964,78965],{"class":324},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[312,78967,78968],{"class":314,"line":3459},[312,78969,78970],{"class":324},"    \u002F\u002F 2.箭头函数的this\n",[312,78972,78973],{"class":314,"line":3480},[312,78974,78975],{"class":324},"    const fn = () => console.log(this)\n",[312,78977,78978,78980,78982],{"class":314,"line":3485},[312,78979,54203],{"class":324},[312,78981,53599],{"class":328},[312,78983,343],{"class":324},[24,78985,78986],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[24,78988,78989],{},"const fn = () => console.log(this)",[24,78991,78992],{},"fn() \u002F\u002F指向window",[24,78994,78995],{},"\u002F\u002F 3.对象方法箭头函数 this",[24,78997,78998],{},"①",[24,79000,79001],{},"const obj = {",[24,79003,79004],{},"uname: 'pink老师',",[24,79006,79007],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[24,79009,2888],{},[24,79011,79012],{},"调用对象里边的函数",[24,79014,79015],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[24,79017,79018],{},"obj.sayHai()",[24,79020,79021],{},"②",[24,79023,79024],{},"const obj1 = {",[24,79026,79004],{},[24,79028,79029],{},"sayHai: function () {",[24,79031,79032],{},"let i = 10",[24,79034,79035],{},"const count = () => {",[24,79037,79038],{},"console.log(this)",[24,79040,79041],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[24,79043,79044],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[24,79046,2888],{},[24,79048,79049],{},"count()",[24,79051,2888],{},[24,79053,2888],{},[24,79055,79056],{},"obj1.sayHai()",[14,79058,79060],{"id":79059},"_46-解构赋值","4.6 解构赋值",[69,79062,79064],{"id":79063},"_461-数组解构","4.6.1 数组解构",[24,79066,79067],{},"以前要是使用数组中的值的话：",[24,79069,79070],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[24,79072,79073],{},"const arr=[100,60,80]",[24,79075,79076],{},"const max=arr[0]",[24,79078,79079],{},"const min=arr[1]",[24,79081,79082],{},"const avg=arr[2]",[24,79084,79085],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[24,79087,79088],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[24,79090,79091],{},"这个写法就类似于上边的那种用很多const的方法",[24,79093,79094],{},[19,79095],{"alt":308,"src":79096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[303,79098,79100],{"className":52428,"code":79099,"language":52430,"meta":308,"style":308},"①变量之间交换值:\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",[119,79101,79102,79107,79112,79117,79122,79127,79131,79135,79140,79144,79149,79154,79158,79163,79168,79179,79189,79194,79199,79204,79208,79212],{"__ignoreMap":308},[312,79103,79104],{"class":314,"line":315},[312,79105,79106],{"class":324},"①变量之间交换值:\n",[312,79108,79109],{"class":314,"line":171},[312,79110,79111],{"class":324},"let a=1\n",[312,79113,79114],{"class":314,"line":274},[312,79115,79116],{"class":324},"let b=2;\n",[312,79118,79119],{"class":314,"line":298},[312,79120,79121],{"class":324},"必须加这行代码，不然就会报错\n",[312,79123,79124],{"class":314,"line":974},[312,79125,79126],{"class":324},"[b,a]=[a,b]\n",[312,79128,79129],{"class":314,"line":980},[312,79130,4205],{"emptyLinePlaceholder":1881},[312,79132,79133],{"class":314,"line":997},[312,79134,4205],{"emptyLinePlaceholder":1881},[312,79136,79137],{"class":314,"line":1003},[312,79138,79139],{"class":324},"可以写成下面的方式：\n",[312,79141,79142],{"class":314,"line":1020},[312,79143,79111],{"class":324},[312,79145,79146],{"class":314,"line":1026},[312,79147,79148],{"class":324},"let b=2\n",[312,79150,79151],{"class":314,"line":3418},[312,79152,79153],{"class":324},";[b,a]=[a,b]\n",[312,79155,79156],{"class":314,"line":3423},[312,79157,4205],{"emptyLinePlaceholder":1881},[312,79159,79160],{"class":314,"line":3429},[312,79161,79162],{"class":324},"②排序\n",[312,79164,79165],{"class":314,"line":3434},[312,79166,79167],{"class":324},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[312,79169,79170,79173,79176],{"class":314,"line":3448},[312,79171,79172],{"class":324},"for (let i = 0; i ",[312,79174,325],{"class":79175},"s7hpK",[312,79177,79178],{"class":324}," arr1.length; i++) {\n",[312,79180,79181,79184,79186],{"class":314,"line":3453},[312,79182,79183],{"class":324},"   for (let j = 0; j ",[312,79185,325],{"class":79175},[312,79187,79188],{"class":324}," arr1.length - 1; j++) {\n",[312,79190,79191],{"class":314,"line":3459},[312,79192,79193],{"class":324},"      if (arr1[j] > arr1[j + 1]) {\n",[312,79195,79196],{"class":314,"line":3480},[312,79197,79198],{"class":324},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[312,79200,79201],{"class":314,"line":3485},[312,79202,79203],{"class":324},"       }\n",[312,79205,79206],{"class":314,"line":3499},[312,79207,6114],{"class":324},[312,79209,79210],{"class":314,"line":3504},[312,79211,515],{"class":324},[312,79213,79214],{"class":314,"line":3533},[312,79215,79216],{"class":324},"console.log(arr1)\n",[24,79218,79219],{},"数组解构的细节：",[24,79221,79222],{},"①变量多，单元值少",[24,79224,79225],{},[19,79226],{"alt":308,"src":79227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[24,79229,79230],{},"防止出现undefined的方法：",[24,79232,79233],{},"const [a=0,b=0] =[1]",[24,79235,79236],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[24,79238,79239],{},"②变量少，单元值多",[24,79241,79242],{},[19,79243],{"alt":308,"src":79244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[24,79246,79247],{},"此时可以使用剩余参数来接收多余的值",[24,79249,79250],{},"const [a,b,...c]=[1,2,3,4]",[24,79252,79253],{},"console.log(c) 输出[3,4]",[24,79255,79256],{},"③可以按需导入，忽略某些返回值",[24,79258,79259],{},[19,79260],{"alt":308,"src":79261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[24,79263,79264],{},"④支持多维数组的结构",[303,79266,79270],{"className":79267,"code":79268,"language":79269,"meta":308,"style":308},"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",[119,79271,79272,79300,79316,79331,79346],{"__ignoreMap":308},[312,79273,79274,79276,79278,79280,79282,79284,79286,79288,79291,79293,79295,79297],{"class":314,"line":315},[312,79275,8596],{"class":1436},[312,79277,53619],{"class":324},[312,79279,336],{"class":1436},[312,79281,54012],{"class":324},[312,79283,1433],{"class":488},[312,79285,733],{"class":324},[312,79287,2027],{"class":488},[312,79289,79290],{"class":324},", [",[312,79292,2021],{"class":488},[312,79294,733],{"class":324},[312,79296,2238],{"class":488},[312,79298,79299],{"class":324},"]]\n",[312,79301,79302,79305,79307,79309,79311,79313],{"class":314,"line":171},[312,79303,79304],{"class":324},"console.",[312,79306,60029],{"class":332},[312,79308,5656],{"class":324},[312,79310,858],{"class":488},[312,79312,6021],{"class":324},[312,79314,79315],{"class":318},"  \u002F\u002F1\n",[312,79317,79318,79320,79322,79324,79326,79328],{"class":314,"line":274},[312,79319,79304],{"class":324},[312,79321,60029],{"class":332},[312,79323,5656],{"class":324},[312,79325,1433],{"class":488},[312,79327,6021],{"class":324},[312,79329,79330],{"class":318},"  \u002F\u002F2\n",[312,79332,79333,79335,79337,79339,79341,79343],{"class":314,"line":298},[312,79334,79304],{"class":324},[312,79336,60029],{"class":332},[312,79338,5656],{"class":324},[312,79340,2027],{"class":488},[312,79342,6021],{"class":324},[312,79344,79345],{"class":318},"  \u002F\u002F[3,4]\n",[312,79347,79348,79350,79352,79354,79356,79358,79360,79362],{"class":314,"line":974},[312,79349,79304],{"class":324},[312,79351,60029],{"class":332},[312,79353,5656],{"class":324},[312,79355,2027],{"class":488},[312,79357,6706],{"class":324},[312,79359,858],{"class":488},[312,79361,6021],{"class":324},[312,79363,79364],{"class":318},"  \u002F\u002F3\n",[303,79366,79368],{"className":79267,"code":79367,"language":79269,"meta":308,"style":308},"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",[119,79369,79370,79397,79408,79419],{"__ignoreMap":308},[312,79371,79372,79374,79377,79379,79381,79383,79385,79387,79389,79391,79393,79395],{"class":314,"line":315},[312,79373,8596],{"class":1436},[312,79375,79376],{"class":324}," [a, b, c] ",[312,79378,336],{"class":1436},[312,79380,54012],{"class":324},[312,79382,1433],{"class":488},[312,79384,733],{"class":324},[312,79386,2027],{"class":488},[312,79388,79290],{"class":324},[312,79390,2021],{"class":488},[312,79392,733],{"class":324},[312,79394,2238],{"class":488},[312,79396,79299],{"class":324},[312,79398,79399,79401,79403,79406],{"class":314,"line":171},[312,79400,79304],{"class":324},[312,79402,60029],{"class":332},[312,79404,79405],{"class":324},"(a)",[312,79407,79315],{"class":318},[312,79409,79410,79412,79414,79417],{"class":314,"line":274},[312,79411,79304],{"class":324},[312,79413,60029],{"class":332},[312,79415,79416],{"class":324},"(b)",[312,79418,79330],{"class":318},[312,79420,79421,79423,79425,79428],{"class":314,"line":298},[312,79422,79304],{"class":324},[312,79424,60029],{"class":332},[312,79426,79427],{"class":324},"(c)",[312,79429,79345],{"class":318},[303,79431,79433],{"className":79267,"code":79432,"language":79269,"meta":308,"style":308},"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",[119,79434,79435,79462,79472,79482,79492],{"__ignoreMap":308},[312,79436,79437,79439,79442,79444,79446,79448,79450,79452,79454,79456,79458,79460],{"class":314,"line":315},[312,79438,8596],{"class":1436},[312,79440,79441],{"class":324}," [a, b, [c, d]] ",[312,79443,336],{"class":1436},[312,79445,54012],{"class":324},[312,79447,1433],{"class":488},[312,79449,733],{"class":324},[312,79451,2027],{"class":488},[312,79453,79290],{"class":324},[312,79455,2021],{"class":488},[312,79457,733],{"class":324},[312,79459,2238],{"class":488},[312,79461,79299],{"class":324},[312,79463,79464,79466,79468,79470],{"class":314,"line":171},[312,79465,79304],{"class":324},[312,79467,60029],{"class":332},[312,79469,79405],{"class":324},[312,79471,79315],{"class":318},[312,79473,79474,79476,79478,79480],{"class":314,"line":274},[312,79475,79304],{"class":324},[312,79477,60029],{"class":332},[312,79479,79416],{"class":324},[312,79481,79330],{"class":318},[312,79483,79484,79486,79488,79490],{"class":314,"line":298},[312,79485,79304],{"class":324},[312,79487,60029],{"class":332},[312,79489,79427],{"class":324},[312,79491,79364],{"class":318},[312,79493,79494,79496,79498,79501],{"class":314,"line":974},[312,79495,79304],{"class":324},[312,79497,60029],{"class":332},[312,79499,79500],{"class":324},"(d)",[312,79502,79503],{"class":318},"  \u002F\u002F4\n",[69,79505,79507],{"id":79506},"_462-对象解构","4.6.2 对象解构",[24,79509,79510],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[24,79512,79513],{},"用的非常非常多！！！！！！",[23796,79515,79517],{"id":79516},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[24,79519,79520],{},"基本语法：",[140,79522,79523,79526,79529,79532],{},[143,79524,79525],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[143,79527,79528],{},"对象属性的值将被赋值给与属性名相同的变量",[143,79530,79531],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[143,79533,79534],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[303,79536,79538],{"className":52428,"code":79537,"language":52430,"meta":308,"style":308},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[119,79539,79540,79545,79550,79555,79559],{"__ignoreMap":308},[312,79541,79542],{"class":314,"line":315},[312,79543,79544],{"class":324},"const obj = {\n",[312,79546,79547],{"class":314,"line":171},[312,79548,79549],{"class":324},"   uname: 'pink老师',\n",[312,79551,79552],{"class":314,"line":274},[312,79553,79554],{"class":324},"   age: 18,\n",[312,79556,79557],{"class":314,"line":298},[312,79558,515],{"class":324},[312,79560,79561],{"class":314,"line":974},[312,79562,79563],{"class":324},"const { uname, age } = obj\n",[24,79565,79566],{},"上方代码这样写等价于：",[24,79568,79569],{},"const uname等价于obj.uname",[24,79571,79572],{},"变量名可以重新改名：",[24,79574,79575],{},"const uname='red老师'",[24,79577,79578],{},"const user={",[24,79580,79581],{},"  uname:'pink老师',",[24,79583,79584],{},"  age:18",[24,79586,2888],{},[24,79588,79589],{},"const {uname,age}=user",[24,79591,79592],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[24,79594,79595],{},"const {旧变量名：新变量名}=对象",[24,79597,79598],{},"const {uname:username,age}=user",[23796,79600,79602],{"id":79601},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[24,79604,79605],{},[19,79606],{"alt":308,"src":79607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[23796,79609,79611],{"id":79610},"_4623-多级对象解构","4.6.2.3 多级对象解构",[24,79613,79614],{},[19,79615],{"alt":308,"src":79616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[303,79618,79620],{"className":54853,"code":79619,"language":54855,"meta":308,"style":308},"  \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",[119,79621,79622,79630,79635,79640,79645,79650,79655,79660,79665,79670,79674,79679,79684],{"__ignoreMap":308},[312,79623,79624,79626,79628],{"class":314,"line":315},[312,79625,53930],{"class":324},[312,79627,53599],{"class":328},[312,79629,343],{"class":324},[312,79631,79632],{"class":314,"line":171},[312,79633,79634],{"class":324},"    const pig = {\n",[312,79636,79637],{"class":314,"line":274},[312,79638,79639],{"class":324},"      name: '佩奇',\n",[312,79641,79642],{"class":314,"line":298},[312,79643,79644],{"class":324},"      family: {\n",[312,79646,79647],{"class":314,"line":974},[312,79648,79649],{"class":324},"        mother: '猪妈妈',\n",[312,79651,79652],{"class":314,"line":980},[312,79653,79654],{"class":324},"        father: '猪爸爸',\n",[312,79656,79657],{"class":314,"line":997},[312,79658,79659],{"class":324},"        sister: '乔治'\n",[312,79661,79662],{"class":314,"line":1003},[312,79663,79664],{"class":324},"      },\n",[312,79666,79667],{"class":314,"line":1020},[312,79668,79669],{"class":324},"      age: 6\n",[312,79671,79672],{"class":314,"line":1026},[312,79673,3992],{"class":324},[312,79675,79676],{"class":314,"line":3418},[312,79677,79678],{"class":324},"    \u002F\u002F 多级对象解构\n",[312,79680,79681],{"class":314,"line":3423},[312,79682,79683],{"class":324},"    const { name, family: { mother, father, sister }, age } = pig\n",[312,79685,79686,79688,79690],{"class":314,"line":3429},[312,79687,54203],{"class":324},[312,79689,53599],{"class":328},[312,79691,343],{"class":324},[24,79693,79694],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[303,79696,79699],{"className":79697,"code":79698,"language":78219,"meta":308,"style":308},"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",[119,79700,79701,79706,79717,79729,79741,79750,79754,79765,79777,79787,79792,79796,79806,79817,79826,79830,79834,79845,79856,79865,79869,79874],{"__ignoreMap":308},[312,79702,79703],{"class":314,"line":315},[312,79704,79705],{"class":318},"    \u002F\u002F 这是后台传递过来的数据\n",[312,79707,79708,79710,79713,79715],{"class":314,"line":171},[312,79709,13024],{"class":1436},[312,79711,79712],{"class":324}," msg ",[312,79714,336],{"class":1436},[312,79716,483],{"class":324},[312,79718,79719,79722,79724,79727],{"class":314,"line":274},[312,79720,79721],{"class":339},"      \"code\"",[312,79723,2803],{"class":1436},[312,79725,79726],{"class":488}," 200",[312,79728,33261],{"class":324},[312,79730,79731,79734,79736,79739],{"class":314,"line":298},[312,79732,79733],{"class":339},"      \"msg\"",[312,79735,2803],{"class":1436},[312,79737,79738],{"class":339}," \"获取新闻列表成功\"",[312,79740,33261],{"class":324},[312,79742,79743,79746,79748],{"class":314,"line":974},[312,79744,79745],{"class":339},"      \"data\"",[312,79747,2803],{"class":1436},[312,79749,57229],{"class":324},[312,79751,79752],{"class":314,"line":980},[312,79753,4315],{"class":324},[312,79755,79756,79759,79761,79763],{"class":314,"line":997},[312,79757,79758],{"class":339},"          \"id\"",[312,79760,2803],{"class":1436},[312,79762,26914],{"class":488},[312,79764,33261],{"class":324},[312,79766,79767,79770,79772,79775],{"class":314,"line":1003},[312,79768,79769],{"class":339},"          \"title\"",[312,79771,2803],{"class":1436},[312,79773,79774],{"class":339}," \"5G商用自己，三大运用商收入下降\"",[312,79776,33261],{"class":324},[312,79778,79779,79782,79784],{"class":314,"line":1020},[312,79780,79781],{"class":339},"          \"count\"",[312,79783,2803],{"class":1436},[312,79785,79786],{"class":488}," 58\n",[312,79788,79789],{"class":314,"line":1026},[312,79790,79791],{"class":324},"        },\n",[312,79793,79794],{"class":314,"line":3418},[312,79795,4315],{"class":324},[312,79797,79798,79800,79802,79804],{"class":314,"line":3423},[312,79799,79758],{"class":339},[312,79801,2803],{"class":1436},[312,79803,16556],{"class":488},[312,79805,33261],{"class":324},[312,79807,79808,79810,79812,79815],{"class":314,"line":3429},[312,79809,79769],{"class":339},[312,79811,2803],{"class":1436},[312,79813,79814],{"class":339}," \"国际媒体头条速览\"",[312,79816,33261],{"class":324},[312,79818,79819,79821,79823],{"class":314,"line":3434},[312,79820,79781],{"class":339},[312,79822,2803],{"class":1436},[312,79824,79825],{"class":488}," 56\n",[312,79827,79828],{"class":314,"line":3448},[312,79829,79791],{"class":324},[312,79831,79832],{"class":314,"line":3453},[312,79833,4315],{"class":324},[312,79835,79836,79838,79840,79843],{"class":314,"line":3459},[312,79837,79758],{"class":339},[312,79839,2803],{"class":1436},[312,79841,79842],{"class":488}," 3",[312,79844,33261],{"class":324},[312,79846,79847,79849,79851,79854],{"class":314,"line":3480},[312,79848,79769],{"class":339},[312,79850,2803],{"class":1436},[312,79852,79853],{"class":339}," \"乌克兰和俄罗斯持续冲突\"",[312,79855,33261],{"class":324},[312,79857,79858,79860,79862],{"class":314,"line":3485},[312,79859,79781],{"class":339},[312,79861,2803],{"class":1436},[312,79863,79864],{"class":488}," 1669\n",[312,79866,79867],{"class":314,"line":3499},[312,79868,79791],{"class":324},[312,79870,79871],{"class":314,"line":3504},[312,79872,79873],{"class":324},"      ]\n",[312,79875,79876],{"class":314,"line":3533},[312,79877,3992],{"class":324},[24,79879,79880],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[24,79882,79883],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[24,79885,79886],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[24,79888,79889],{},"function({data}) {",[24,79891,79892],{},"console.log(data)",[24,79894,2888],{},[24,79896,79897],{},"render(msg)",[24,79899,79900],{},"实参传递给形参的时候解构了",[24,79902,79903],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[24,79905,79906],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[24,79908,79909],{},"function render({data:mydata}) {",[24,79911,79912],{},"  console.log(data)",[24,79914,2888],{},[69,79916,79918],{"id":79917},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[24,79920,79921],{},"有两种情况：一个是数组结构，一个是立即执行函数",[140,79923,79924],{},[143,79925,79926],{},"如果对一个数组进行遍历，有两种方式：",[24,79928,79929],{},"①法1",[24,79931,79932],{},"const arr=[1,2,3]",[24,79934,79935],{},"arr.map(function(item,index) {",[24,79937,79938],{},"  console.log(item)",[24,79940,54250],{},[24,79942,79943],{},[19,79944],{"alt":308,"src":79945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[24,79947,79948],{},"②法2",[24,79950,79951],{},"const str='pink'",[24,79953,79954],{},"[1,2,3].map(function(item,index) {",[24,79956,79957],{},"console.log(item)",[24,79959,54250],{},[24,79961,79962],{},[19,79963],{"alt":308,"src":79964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[24,79966,79967],{},"此时会报错",[24,79969,79970],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[24,79972,79957],{},[24,79974,54250],{},[24,79976,79977],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79979,79981],{"id":79980},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[24,79983,79984],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[24,79986,79987],{},"可以理解为加强版的for循环",[24,79989,79990],{},[19,79991],{"alt":308,"src":79992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[24,79994,79995],{},"里边不写return，不返回数组，只遍历不返回",[24,79997,79998],{},"map是返回数组",[24,80000,80001],{},"forEach主要用于遍历数组对象",[303,80003,80005],{"className":54853,"code":80004,"language":54855,"meta":308,"style":308},"  \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",[119,80006,80007,80015,80020,80025,80030,80035,80039,80044],{"__ignoreMap":308},[312,80008,80009,80011,80013],{"class":314,"line":315},[312,80010,53930],{"class":324},[312,80012,53599],{"class":328},[312,80014,343],{"class":324},[312,80016,80017],{"class":314,"line":171},[312,80018,80019],{"class":324},"    const arr = ['red', 'green', 'pink']\n",[312,80021,80022],{"class":314,"line":274},[312,80023,80024],{"class":324},"    const result = arr.forEach(function (item, index) {\n",[312,80026,80027],{"class":314,"line":298},[312,80028,80029],{"class":324},"      console.log(item)\n",[312,80031,80032],{"class":314,"line":974},[312,80033,80034],{"class":324},"      console.log(index)\n",[312,80036,80037],{"class":314,"line":980},[312,80038,35256],{"class":324},[312,80040,80041],{"class":314,"line":997},[312,80042,80043],{"class":324},"    console.log(result)\n",[312,80045,80046,80048,80050],{"class":314,"line":1003},[312,80047,54203],{"class":324},[312,80049,53599],{"class":328},[312,80051,343],{"class":324},[24,80053,80054],{},[19,80055],{"alt":308,"src":80056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,80058,80060],{"id":80059},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[24,80062,80063],{},[19,80064],{"alt":308,"src":80065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[24,80067,80068],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[303,80070,80072],{"className":54853,"code":80071,"language":54855,"meta":308,"style":308},"\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",[119,80073,80074,80082,80090,80095,80100,80104,80108,80113,80117,80122,80130],{"__ignoreMap":308},[312,80075,80076,80078,80080],{"class":314,"line":315},[312,80077,325],{"class":324},[312,80079,53586],{"class":328},[312,80081,343],{"class":324},[312,80083,80084,80086,80088],{"class":314,"line":171},[312,80085,53930],{"class":324},[312,80087,53599],{"class":328},[312,80089,343],{"class":324},[312,80091,80092],{"class":314,"line":274},[312,80093,80094],{"class":324},"    const arr = [10, 20, 30]\n",[312,80096,80097],{"class":314,"line":298},[312,80098,80099],{"class":324},"    const newArr = arr.filter(function (item, index) {\n",[312,80101,80102],{"class":314,"line":974},[312,80103,80029],{"class":324},[312,80105,80106],{"class":314,"line":980},[312,80107,80034],{"class":324},[312,80109,80110],{"class":314,"line":997},[312,80111,80112],{"class":324},"      return item >= 20\n",[312,80114,80115],{"class":314,"line":1003},[312,80116,35256],{"class":324},[312,80118,80119],{"class":314,"line":1020},[312,80120,80121],{"class":324},"    console.log(newArr)\n",[312,80123,80124,80126,80128],{"class":314,"line":1026},[312,80125,54203],{"class":324},[312,80127,53599],{"class":328},[312,80129,343],{"class":324},[312,80131,80132,80134,80136],{"class":314,"line":3418},[312,80133,353],{"class":324},[312,80135,53586],{"class":328},[312,80137,343],{"class":324},[24,80139,80140],{},"这个也可以写成箭头函数：",[303,80142,80144],{"className":52428,"code":80143,"language":52430,"meta":308,"style":308},"const newArr = arr.filter(item => item >= 20)\n",[119,80145,80146],{"__ignoreMap":308},[312,80147,80148],{"class":314,"line":315},[312,80149,80143],{"class":324},[14,80151,80153],{"id":80152},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[24,80155,80156],{},[19,80157],{"alt":308,"src":80158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[24,80160,80161],{},"步骤：",[24,80163,80164],{},"①：渲染页面模块",[243,80166,80167,80170],{},[143,80168,80169],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[143,80171,80172],{},"用forEach+字符串的形式",[24,80174,80175],{},"②：点击不同需求，显示不同页面内容",[243,80177,80178,80181,80184,80187,80190],{},[143,80179,80180],{},"点击采取事件委托方式 .filter",[143,80182,80183],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[143,80185,80186],{},"筛选条件是根据点击的 data-index 来判断",[143,80188,80189],{},"可以使用对象解构，把事件对象解构",[143,80191,80192],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[303,80194,80196],{"className":52428,"code":80195,"language":52430,"meta":308,"style":308},"\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",[119,80197,80198,80208,80222,80226,80234,80248,80268,80280,80288,80294,80304,80314,80324,80328,80332,80338,80351,80363,80373,80385,80389,80393,80400,80413,80425,80442,80460,80473,80477,80481,80493,80503,80507,80511,80518,80559,80586,80596,80600,80604,80612,80624,80628,80632,80640,80652,80664,80675,80679,80683,80692,80704,80715,80719,80723,80732,80744,80756,80760,80764,80771,80781,80793,80805,80820,80824,80828,80836,80852,80862,80872,80882,80894,80898,80902,80912,80923,80933,80937,80945,80953,80957,80965,80980,81006,81031,81056,81075,81083,81097,81102,81107,81112,81117,81122,81130,81138,81143,81154,81159,81169,81179,81189,81199,81203,81207,81216,81225,81234,81243,81247,81251,81260,81269,81278,81287,81291,81295,81304,81313,81322,81331,81335,81339,81348,81357,81366,81375,81379,81383,81392,81401,81410,81419,81423,81427,81436,81445,81454,81463,81467,81471,81480,81489,81497,81506,81510,81514,81518,81523,81535,81540,81552,81556,81573,81600,81609,81614,81624,81634,81643,81648,81653,81657,81662,81679,81683,81688,81696,81701,81728,81733,81753,81758,81770,81775,81780,81785,81796,81810,81847,81865,81898,81915,81939,81943,81948,81954,81958,81962,81966,81974,81982,81986],{"__ignoreMap":308},[312,80199,80200,80202,80204,80206],{"class":314,"line":315},[312,80201,53092],{"class":324},[312,80203,53095],{"class":328},[312,80205,53098],{"class":332},[312,80207,343],{"class":324},[312,80209,80210,80212,80214,80216,80218,80220],{"class":314,"line":171},[312,80211,325],{"class":324},[312,80213,52430],{"class":328},[312,80215,53109],{"class":332},[312,80217,336],{"class":324},[312,80219,53114],{"class":339},[312,80221,343],{"class":324},[312,80223,80224],{"class":314,"line":274},[312,80225,4205],{"emptyLinePlaceholder":1881},[312,80227,80228,80230,80232],{"class":314,"line":298},[312,80229,325],{"class":324},[312,80231,53127],{"class":328},[312,80233,343],{"class":324},[312,80235,80236,80238,80240,80242,80244,80246],{"class":314,"line":974},[312,80237,53930],{"class":324},[312,80239,53137],{"class":328},[312,80241,53140],{"class":332},[312,80243,336],{"class":324},[312,80245,53145],{"class":339},[312,80247,343],{"class":324},[312,80249,80250,80252,80254,80256,80258,80260,80262,80264,80266],{"class":314,"line":980},[312,80251,53930],{"class":324},[312,80253,53137],{"class":328},[312,80255,16721],{"class":332},[312,80257,336],{"class":324},[312,80259,53184],{"class":339},[312,80261,53164],{"class":332},[312,80263,336],{"class":324},[312,80265,53191],{"class":339},[312,80267,343],{"class":324},[312,80269,80270,80272,80274,80276,80278],{"class":314,"line":997},[312,80271,53930],{"class":324},[312,80273,628],{"class":328},[312,80275,53202],{"class":324},[312,80277,628],{"class":328},[312,80279,343],{"class":324},[312,80281,80282,80284,80286],{"class":314,"line":1003},[312,80283,53930],{"class":324},[312,80285,1856],{"class":328},[312,80287,343],{"class":324},[312,80289,80290,80292],{"class":314,"line":1020},[312,80291,8207],{"class":328},[312,80293,483],{"class":324},[312,80295,80296,80298,80300,80302],{"class":314,"line":1026},[312,80297,56479],{"class":488},[312,80299,492],{"class":324},[312,80301,858],{"class":488},[312,80303,498],{"class":324},[312,80305,80306,80308,80310,80312],{"class":314,"line":3418},[312,80307,56490],{"class":488},[312,80309,492],{"class":324},[312,80311,858],{"class":488},[312,80313,498],{"class":324},[312,80315,80316,80318,80320,80322],{"class":314,"line":3423},[312,80317,74368],{"class":488},[312,80319,492],{"class":324},[312,80321,62287],{"class":488},[312,80323,498],{"class":324},[312,80325,80326],{"class":314,"line":3429},[312,80327,3992],{"class":324},[312,80329,80330],{"class":314,"line":3434},[312,80331,4205],{"emptyLinePlaceholder":1881},[312,80333,80334,80336],{"class":314,"line":3448},[312,80335,63901],{"class":332},[312,80337,483],{"class":324},[312,80339,80340,80342,80344,80347,80349],{"class":314,"line":3453},[312,80341,56554],{"class":488},[312,80343,492],{"class":324},[312,80345,80346],{"class":488},"990",[312,80348,1437],{"class":1436},[312,80350,498],{"class":324},[312,80352,80353,80355,80357,80359,80361],{"class":314,"line":3459},[312,80354,56490],{"class":488},[312,80356,492],{"class":324},[312,80358,858],{"class":488},[312,80360,861],{"class":488},[312,80362,498],{"class":324},[312,80364,80365,80367,80369,80371],{"class":314,"line":3480},[312,80366,56791],{"class":488},[312,80368,492],{"class":324},[312,80370,53268],{"class":488},[312,80372,498],{"class":324},[312,80374,80375,80378,80380,80383],{"class":314,"line":3485},[312,80376,80377],{"class":488},"      flex-wrap",[312,80379,492],{"class":324},[312,80381,80382],{"class":488},"wrap",[312,80384,498],{"class":324},[312,80386,80387],{"class":314,"line":3499},[312,80388,3992],{"class":324},[312,80390,80391],{"class":314,"line":3504},[312,80392,4205],{"emptyLinePlaceholder":1881},[312,80394,80395,80398],{"class":314,"line":3533},[312,80396,80397],{"class":332},"    .item",[312,80399,483],{"class":324},[312,80401,80402,80404,80406,80409,80411],{"class":314,"line":3538},[312,80403,56554],{"class":488},[312,80405,492],{"class":324},[312,80407,80408],{"class":488},"240",[312,80410,1437],{"class":1436},[312,80412,498],{"class":324},[312,80414,80415,80417,80419,80421,80423],{"class":314,"line":3555},[312,80416,63778],{"class":488},[312,80418,492],{"class":324},[312,80420,2391],{"class":488},[312,80422,1437],{"class":1436},[312,80424,498],{"class":324},[312,80426,80427,80429,80431,80433,80435,80438,80440],{"class":314,"line":3560},[312,80428,56479],{"class":488},[312,80430,492],{"class":324},[312,80432,1546],{"class":488},[312,80434,1437],{"class":1436},[312,80436,80437],{"class":488}," 30",[312,80439,1437],{"class":1436},[312,80441,498],{"class":324},[312,80443,80444,80446,80448,80450,80453,80456,80458],{"class":314,"line":3565},[312,80445,63638],{"class":488},[312,80447,492],{"class":324},[312,80449,29917],{"class":488},[312,80451,80452],{"class":488}," ease",[312,80454,80455],{"class":488}," .5",[312,80457,2640],{"class":1436},[312,80459,498],{"class":324},[312,80461,80462,80465,80467,80469,80471],{"class":314,"line":3570},[312,80463,80464],{"class":488},"      margin-bottom",[312,80466,492],{"class":324},[312,80468,1546],{"class":488},[312,80470,1437],{"class":1436},[312,80472,498],{"class":324},[312,80474,80475],{"class":314,"line":3584},[312,80476,3992],{"class":324},[312,80478,80479],{"class":314,"line":3589},[312,80480,4205],{"emptyLinePlaceholder":1881},[312,80482,80483,80486,80488,80491],{"class":314,"line":4382},[312,80484,80485],{"class":332},"    .item:nth-child",[312,80487,1576],{"class":324},[312,80489,80490],{"class":488},"4n",[312,80492,14244],{"class":324},[312,80494,80495,80497,80499,80501],{"class":314,"line":4396},[312,80496,63778],{"class":488},[312,80498,492],{"class":324},[312,80500,858],{"class":488},[312,80502,498],{"class":324},[312,80504,80505],{"class":314,"line":4404},[312,80506,3992],{"class":324},[312,80508,80509],{"class":314,"line":4409},[312,80510,4205],{"emptyLinePlaceholder":1881},[312,80512,80513,80516],{"class":314,"line":4415},[312,80514,80515],{"class":332},"    .item:hover",[312,80517,483],{"class":324},[312,80519,80520,80523,80525,80527,80529,80531,80533,80535,80537,80540,80542,80544,80546,80548,80550,80552,80554,80557],{"class":314,"line":4421},[312,80521,80522],{"class":488},"      box-shadow",[312,80524,492],{"class":324},[312,80526,858],{"class":488},[312,80528,1437],{"class":1436},[312,80530,5898],{"class":488},[312,80532,1437],{"class":1436},[312,80534,3953],{"class":488},[312,80536,1437],{"class":1436},[312,80538,80539],{"class":488}," rgba",[312,80541,1576],{"class":324},[312,80543,858],{"class":488},[312,80545,733],{"class":324},[312,80547,858],{"class":488},[312,80549,733],{"class":324},[312,80551,858],{"class":488},[312,80553,733],{"class":324},[312,80555,80556],{"class":488},".2",[312,80558,4524],{"class":324},[312,80560,80561,80564,80566,80569,80571,80573,80575,80578,80580,80582,80584],{"class":314,"line":4426},[312,80562,80563],{"class":488},"      transform",[312,80565,492],{"class":324},[312,80567,80568],{"class":488},"translate3d",[312,80570,1576],{"class":324},[312,80572,858],{"class":488},[312,80574,733],{"class":324},[312,80576,80577],{"class":488},"-4",[312,80579,1437],{"class":1436},[312,80581,733],{"class":324},[312,80583,858],{"class":488},[312,80585,4524],{"class":324},[312,80587,80588,80590,80592,80594],{"class":314,"line":9751},[312,80589,63803],{"class":488},[312,80591,492],{"class":324},[312,80593,63808],{"class":488},[312,80595,498],{"class":324},[312,80597,80598],{"class":314,"line":9775},[312,80599,3992],{"class":324},[312,80601,80602],{"class":314,"line":9780},[312,80603,4205],{"emptyLinePlaceholder":1881},[312,80605,80606,80608,80610],{"class":314,"line":9786},[312,80607,80397],{"class":332},[312,80609,57397],{"class":328},[312,80611,483],{"class":324},[312,80613,80614,80616,80618,80620,80622],{"class":314,"line":9813},[312,80615,56554],{"class":488},[312,80617,492],{"class":324},[312,80619,2256],{"class":488},[312,80621,2273],{"class":1436},[312,80623,498],{"class":324},[312,80625,80626],{"class":314,"line":9818},[312,80627,3992],{"class":324},[312,80629,80630],{"class":314,"line":9824},[312,80631,4205],{"emptyLinePlaceholder":1881},[312,80633,80634,80636,80638],{"class":314,"line":9836},[312,80635,80397],{"class":332},[312,80637,64082],{"class":332},[312,80639,483],{"class":324},[312,80641,80642,80644,80646,80648,80650],{"class":314,"line":9848},[312,80643,56704],{"class":488},[312,80645,492],{"class":324},[312,80647,2595],{"class":488},[312,80649,1437],{"class":1436},[312,80651,498],{"class":324},[312,80653,80654,80656,80658,80660,80662],{"class":314,"line":9860},[312,80655,80464],{"class":488},[312,80657,492],{"class":324},[312,80659,2391],{"class":488},[312,80661,1437],{"class":1436},[312,80663,498],{"class":324},[312,80665,80666,80668,80670,80673],{"class":314,"line":11519},[312,80667,59198],{"class":488},[312,80669,492],{"class":324},[312,80671,80672],{"class":488},"#666",[312,80674,498],{"class":324},[312,80676,80677],{"class":314,"line":11544},[312,80678,3992],{"class":324},[312,80680,80681],{"class":314,"line":11567},[312,80682,4205],{"emptyLinePlaceholder":1881},[312,80684,80685,80687,80690],{"class":314,"line":11591},[312,80686,80397],{"class":332},[312,80688,80689],{"class":332}," .price",[312,80691,483],{"class":324},[312,80693,80694,80696,80698,80700,80702],{"class":314,"line":11596},[312,80695,56704],{"class":488},[312,80697,492],{"class":324},[312,80699,2694],{"class":488},[312,80701,1437],{"class":1436},[312,80703,498],{"class":324},[312,80705,80706,80708,80710,80713],{"class":314,"line":11601},[312,80707,59198],{"class":488},[312,80709,492],{"class":324},[312,80711,80712],{"class":488},"firebrick",[312,80714,498],{"class":324},[312,80716,80717],{"class":314,"line":11606},[312,80718,3992],{"class":324},[312,80720,80721],{"class":314,"line":11615},[312,80722,4205],{"emptyLinePlaceholder":1881},[312,80724,80725,80727,80730],{"class":314,"line":11620},[312,80726,80397],{"class":332},[312,80728,80729],{"class":332}," .price::before",[312,80731,483],{"class":324},[312,80733,80734,80737,80739,80742],{"class":314,"line":11626},[312,80735,80736],{"class":488},"      content",[312,80738,492],{"class":324},[312,80740,80741],{"class":339},"'￥'",[312,80743,498],{"class":324},[312,80745,80746,80748,80750,80752,80754],{"class":314,"line":11647},[312,80747,56704],{"class":488},[312,80749,492],{"class":324},[312,80751,2494],{"class":488},[312,80753,1437],{"class":1436},[312,80755,498],{"class":324},[312,80757,80758],{"class":314,"line":11653},[312,80759,3992],{"class":324},[312,80761,80762],{"class":314,"line":11667},[312,80763,4205],{"emptyLinePlaceholder":1881},[312,80765,80766,80769],{"class":314,"line":11673},[312,80767,80768],{"class":332},"    .filter",[312,80770,483],{"class":324},[312,80772,80773,80775,80777,80779],{"class":314,"line":11700},[312,80774,56791],{"class":488},[312,80776,492],{"class":324},[312,80778,53268],{"class":488},[312,80780,498],{"class":324},[312,80782,80783,80785,80787,80789,80791],{"class":314,"line":11709},[312,80784,56554],{"class":488},[312,80786,492],{"class":324},[312,80788,80346],{"class":488},[312,80790,1437],{"class":1436},[312,80792,498],{"class":324},[312,80794,80795,80797,80799,80801,80803],{"class":314,"line":11715},[312,80796,56490],{"class":488},[312,80798,492],{"class":324},[312,80800,858],{"class":488},[312,80802,861],{"class":488},[312,80804,498],{"class":324},[312,80806,80807,80809,80811,80813,80815,80817],{"class":314,"line":11723},[312,80808,56479],{"class":488},[312,80810,492],{"class":324},[312,80812,2601],{"class":488},[312,80814,1437],{"class":1436},[312,80816,80437],{"class":488},[312,80818,80819],{"class":1436},"px\n",[312,80821,80822],{"class":314,"line":11728},[312,80823,3992],{"class":324},[312,80825,80826],{"class":314,"line":18404},[312,80827,4205],{"emptyLinePlaceholder":1881},[312,80829,80830,80832,80834],{"class":314,"line":18410},[312,80831,80768],{"class":332},[312,80833,3206],{"class":328},[312,80835,483],{"class":324},[312,80837,80838,80840,80842,80844,80846,80848,80850],{"class":314,"line":18433},[312,80839,56479],{"class":488},[312,80841,492],{"class":324},[312,80843,2391],{"class":488},[312,80845,1437],{"class":1436},[312,80847,10753],{"class":488},[312,80849,1437],{"class":1436},[312,80851,498],{"class":324},[312,80853,80854,80856,80858,80860],{"class":314,"line":18439},[312,80855,63501],{"class":488},[312,80857,492],{"class":324},[312,80859,63596],{"class":488},[312,80861,498],{"class":324},[312,80863,80864,80866,80868,80870],{"class":314,"line":18462},[312,80865,59198],{"class":488},[312,80867,492],{"class":324},[312,80869,80672],{"class":488},[312,80871,498],{"class":324},[312,80873,80874,80876,80878,80880],{"class":314,"line":18476},[312,80875,65748],{"class":488},[312,80877,492],{"class":324},[312,80879,56521],{"class":488},[312,80881,498],{"class":324},[312,80883,80884,80886,80888,80890,80892],{"class":314,"line":18496},[312,80885,63528],{"class":488},[312,80887,492],{"class":324},[312,80889,1546],{"class":488},[312,80891,1437],{"class":1436},[312,80893,498],{"class":324},[312,80895,80896],{"class":314,"line":18502},[312,80897,3992],{"class":324},[312,80899,80900],{"class":314,"line":18513},[312,80901,4205],{"emptyLinePlaceholder":1881},[312,80903,80904,80906,80908,80910],{"class":314,"line":18536},[312,80905,80768],{"class":332},[312,80907,3206],{"class":328},[312,80909,63678],{"class":332},[312,80911,483],{"class":324},[312,80913,80914,80916,80918,80921],{"class":314,"line":18558},[312,80915,56666],{"class":488},[312,80917,492],{"class":324},[312,80919,80920],{"class":488},"#05943c",[312,80922,498],{"class":324},[312,80924,80925,80927,80929,80931],{"class":314,"line":18563},[312,80926,59198],{"class":488},[312,80928,492],{"class":324},[312,80930,62624],{"class":488},[312,80932,498],{"class":324},[312,80934,80935],{"class":314,"line":18569},[312,80936,3992],{"class":324},[312,80938,80939,80941,80943],{"class":314,"line":18583},[312,80940,54203],{"class":324},[312,80942,1856],{"class":328},[312,80944,343],{"class":324},[312,80946,80947,80949,80951],{"class":314,"line":18596},[312,80948,353],{"class":324},[312,80950,53127],{"class":328},[312,80952,343],{"class":324},[312,80954,80955],{"class":314,"line":18601},[312,80956,4205],{"emptyLinePlaceholder":1881},[312,80958,80959,80961,80963],{"class":314,"line":18615},[312,80960,325],{"class":324},[312,80962,53586],{"class":328},[312,80964,343],{"class":324},[312,80966,80967,80969,80971,80973,80975,80978],{"class":314,"line":18620},[312,80968,53930],{"class":324},[312,80970,329],{"class":328},[312,80972,333],{"class":332},[312,80974,336],{"class":324},[312,80976,80977],{"class":339},"\"filter\"",[312,80979,343],{"class":324},[312,80981,80982,80984,80986,80988,80990,80992,80995,80997,80999,81002,81004],{"class":314,"line":18626},[312,80983,53134],{"class":324},[312,80985,164],{"class":328},[312,80987,648],{"class":332},[312,80989,336],{"class":324},[312,80991,62842],{"class":339},[312,80993,80994],{"class":332}," data-index",[312,80996,336],{"class":324},[312,80998,5483],{"class":339},[312,81000,81001],{"class":324},">0-100元\u003C\u002F",[312,81003,164],{"class":328},[312,81005,343],{"class":324},[312,81007,81008,81010,81012,81014,81016,81018,81020,81022,81024,81027,81029],{"class":314,"line":18631},[312,81009,53134],{"class":324},[312,81011,164],{"class":328},[312,81013,648],{"class":332},[312,81015,336],{"class":324},[312,81017,62842],{"class":339},[312,81019,80994],{"class":332},[312,81021,336],{"class":324},[312,81023,5506],{"class":339},[312,81025,81026],{"class":324},">100-300元\u003C\u002F",[312,81028,164],{"class":328},[312,81030,343],{"class":324},[312,81032,81033,81035,81037,81039,81041,81043,81045,81047,81049,81052,81054],{"class":314,"line":18645},[312,81034,53134],{"class":324},[312,81036,164],{"class":328},[312,81038,648],{"class":332},[312,81040,336],{"class":324},[312,81042,62842],{"class":339},[312,81044,80994],{"class":332},[312,81046,336],{"class":324},[312,81048,5519],{"class":339},[312,81050,81051],{"class":324},">300元以上\u003C\u002F",[312,81053,164],{"class":328},[312,81055,343],{"class":324},[312,81057,81058,81060,81062,81064,81066,81068,81071,81073],{"class":314,"line":18650},[312,81059,53134],{"class":324},[312,81061,164],{"class":328},[312,81063,648],{"class":332},[312,81065,336],{"class":324},[312,81067,62842],{"class":339},[312,81069,81070],{"class":324},">全部区间\u003C\u002F",[312,81072,164],{"class":328},[312,81074,343],{"class":324},[312,81076,81077,81079,81081],{"class":314,"line":18655},[312,81078,54203],{"class":324},[312,81080,329],{"class":328},[312,81082,343],{"class":324},[312,81084,81085,81087,81089,81091,81093,81095],{"class":314,"line":18669},[312,81086,53930],{"class":324},[312,81088,329],{"class":328},[312,81090,333],{"class":332},[312,81092,336],{"class":324},[312,81094,64386],{"class":339},[312,81096,343],{"class":324},[312,81098,81099],{"class":314,"line":18681},[312,81100,81101],{"class":318},"    \u003C!-- \u003Cdiv class=\"item\">\n",[312,81103,81104],{"class":314,"line":18686},[312,81105,81106],{"class":318},"      \u003Cimg src=\"\" alt=\"\">\n",[312,81108,81109],{"class":314,"line":18699},[312,81110,81111],{"class":318},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[312,81113,81114],{"class":314,"line":18704},[312,81115,81116],{"class":318},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[312,81118,81119],{"class":314,"line":18709},[312,81120,81121],{"class":318},"    \u003C\u002Fdiv> -->\n",[312,81123,81124,81126,81128],{"class":314,"line":18714},[312,81125,54203],{"class":324},[312,81127,329],{"class":328},[312,81129,343],{"class":324},[312,81131,81132,81134,81136],{"class":314,"line":18727},[312,81133,53930],{"class":324},[312,81135,53599],{"class":328},[312,81137,343],{"class":324},[312,81139,81140],{"class":314,"line":18732},[312,81141,81142],{"class":318},"    \u002F\u002F 2. 初始化数据\n",[312,81144,81145,81147,81150,81152],{"class":314,"line":34428},[312,81146,13024],{"class":1436},[312,81148,81149],{"class":488}," goodsList",[312,81151,15366],{"class":1436},[312,81153,57229],{"class":324},[312,81155,81156],{"class":314,"line":34434},[312,81157,81158],{"class":324},"      {\n",[312,81160,81161,81164,81167],{"class":314,"line":34440},[312,81162,81163],{"class":324},"        id: ",[312,81165,81166],{"class":339},"'4001172'",[312,81168,33261],{"class":324},[312,81170,81171,81174,81177],{"class":314,"line":34446},[312,81172,81173],{"class":324},"        name: ",[312,81175,81176],{"class":339},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[312,81178,33261],{"class":324},[312,81180,81181,81184,81187],{"class":314,"line":34452},[312,81182,81183],{"class":324},"        price: ",[312,81185,81186],{"class":339},"'289.00'",[312,81188,33261],{"class":324},[312,81190,81191,81194,81197],{"class":314,"line":34463},[312,81192,81193],{"class":324},"        picture: ",[312,81195,81196],{"class":339},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[312,81198,33261],{"class":324},[312,81200,81201],{"class":314,"line":34469},[312,81202,79664],{"class":324},[312,81204,81205],{"class":314,"line":34489},[312,81206,81158],{"class":324},[312,81208,81209,81211,81214],{"class":314,"line":34495},[312,81210,81163],{"class":324},[312,81212,81213],{"class":339},"'4001594'",[312,81215,33261],{"class":324},[312,81217,81218,81220,81223],{"class":314,"line":34506},[312,81219,81173],{"class":324},[312,81221,81222],{"class":339},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[312,81224,33261],{"class":324},[312,81226,81227,81229,81232],{"class":314,"line":34512},[312,81228,81183],{"class":324},[312,81230,81231],{"class":339},"'288.00'",[312,81233,33261],{"class":324},[312,81235,81236,81238,81241],{"class":314,"line":34518},[312,81237,81193],{"class":324},[312,81239,81240],{"class":339},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[312,81242,33261],{"class":324},[312,81244,81245],{"class":314,"line":34524},[312,81246,79664],{"class":324},[312,81248,81249],{"class":314,"line":34530},[312,81250,81158],{"class":324},[312,81252,81253,81255,81258],{"class":314,"line":34536},[312,81254,81163],{"class":324},[312,81256,81257],{"class":339},"'4001009'",[312,81259,33261],{"class":324},[312,81261,81262,81264,81267],{"class":314,"line":34542},[312,81263,81173],{"class":324},[312,81265,81266],{"class":339},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[312,81268,33261],{"class":324},[312,81270,81271,81273,81276],{"class":314,"line":34548},[312,81272,81183],{"class":324},[312,81274,81275],{"class":339},"'109.00'",[312,81277,33261],{"class":324},[312,81279,81280,81282,81285],{"class":314,"line":34568},[312,81281,81193],{"class":324},[312,81283,81284],{"class":339},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[312,81286,33261],{"class":324},[312,81288,81289],{"class":314,"line":34574},[312,81290,79664],{"class":324},[312,81292,81293],{"class":314,"line":34590},[312,81294,81158],{"class":324},[312,81296,81297,81299,81302],{"class":314,"line":34596},[312,81298,81163],{"class":324},[312,81300,81301],{"class":339},"'4001874'",[312,81303,33261],{"class":324},[312,81305,81306,81308,81311],{"class":314,"line":34610},[312,81307,81173],{"class":324},[312,81309,81310],{"class":339},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[312,81312,33261],{"class":324},[312,81314,81315,81317,81320],{"class":314,"line":34616},[312,81316,81183],{"class":324},[312,81318,81319],{"class":339},"'488.00'",[312,81321,33261],{"class":324},[312,81323,81324,81326,81329],{"class":314,"line":34631},[312,81325,81193],{"class":324},[312,81327,81328],{"class":339},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[312,81330,33261],{"class":324},[312,81332,81333],{"class":314,"line":34637},[312,81334,79664],{"class":324},[312,81336,81337],{"class":314,"line":34646},[312,81338,81158],{"class":324},[312,81340,81341,81343,81346],{"class":314,"line":34652},[312,81342,81163],{"class":324},[312,81344,81345],{"class":339},"'4001649'",[312,81347,33261],{"class":324},[312,81349,81350,81352,81355],{"class":314,"line":34661},[312,81351,81173],{"class":324},[312,81353,81354],{"class":339},"'大师监制龙泉青瓷茶叶罐'",[312,81356,33261],{"class":324},[312,81358,81359,81361,81364],{"class":314,"line":34667},[312,81360,81183],{"class":324},[312,81362,81363],{"class":339},"'139.00'",[312,81365,33261],{"class":324},[312,81367,81368,81370,81373],{"class":314,"line":34673},[312,81369,81193],{"class":324},[312,81371,81372],{"class":339},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[312,81374,33261],{"class":324},[312,81376,81377],{"class":314,"line":34682},[312,81378,79664],{"class":324},[312,81380,81381],{"class":314,"line":34688},[312,81382,81158],{"class":324},[312,81384,81385,81387,81390],{"class":314,"line":34699},[312,81386,81163],{"class":324},[312,81388,81389],{"class":339},"'3997185'",[312,81391,33261],{"class":324},[312,81393,81394,81396,81399],{"class":314,"line":34705},[312,81395,81173],{"class":324},[312,81397,81398],{"class":339},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[312,81400,33261],{"class":324},[312,81402,81403,81405,81408],{"class":314,"line":34724},[312,81404,81183],{"class":324},[312,81406,81407],{"class":339},"'108.00'",[312,81409,33261],{"class":324},[312,81411,81412,81414,81417],{"class":314,"line":34730},[312,81413,81193],{"class":324},[312,81415,81416],{"class":339},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[312,81418,33261],{"class":324},[312,81420,81421],{"class":314,"line":34741},[312,81422,79664],{"class":324},[312,81424,81425],{"class":314,"line":34747},[312,81426,81158],{"class":324},[312,81428,81429,81431,81434],{"class":314,"line":34767},[312,81430,81163],{"class":324},[312,81432,81433],{"class":339},"'3997403'",[312,81435,33261],{"class":324},[312,81437,81438,81440,81443],{"class":314,"line":34783},[312,81439,81173],{"class":324},[312,81441,81442],{"class":339},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[312,81444,33261],{"class":324},[312,81446,81447,81449,81452],{"class":314,"line":34789},[312,81448,81183],{"class":324},[312,81450,81451],{"class":339},"'100.00'",[312,81453,33261],{"class":324},[312,81455,81456,81458,81461],{"class":314,"line":34803},[312,81457,81193],{"class":324},[312,81459,81460],{"class":339},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[312,81462,33261],{"class":324},[312,81464,81465],{"class":314,"line":34809},[312,81466,79664],{"class":324},[312,81468,81469],{"class":314,"line":34815},[312,81470,81158],{"class":324},[312,81472,81473,81475,81478],{"class":314,"line":34826},[312,81474,81163],{"class":324},[312,81476,81477],{"class":339},"'3998274'",[312,81479,33261],{"class":324},[312,81481,81482,81484,81487],{"class":314,"line":34832},[312,81483,81173],{"class":324},[312,81485,81486],{"class":339},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[312,81488,33261],{"class":324},[312,81490,81491,81493,81495],{"class":314,"line":34838},[312,81492,81183],{"class":324},[312,81494,81363],{"class":339},[312,81496,33261],{"class":324},[312,81498,81499,81501,81504],{"class":314,"line":34848},[312,81500,81193],{"class":324},[312,81502,81503],{"class":339},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[312,81505,33261],{"class":324},[312,81507,81508],{"class":314,"line":34854},[312,81509,79664],{"class":324},[312,81511,81512],{"class":314,"line":34865},[312,81513,54895],{"class":324},[312,81515,81516],{"class":314,"line":34871},[312,81517,4205],{"emptyLinePlaceholder":1881},[312,81519,81520],{"class":314,"line":34881},[312,81521,81522],{"class":318},"    \u002F\u002F 1.渲染函数\n",[312,81524,81525,81527,81529,81531,81533],{"class":314,"line":34886},[312,81526,71861],{"class":1436},[312,81528,71864],{"class":332},[312,81530,1576],{"class":324},[312,81532,5685],{"class":1579},[312,81534,14244],{"class":324},[312,81536,81537],{"class":314,"line":34892},[312,81538,81539],{"class":318},"      \u002F\u002F 声明空字符串\n",[312,81541,81542,81545,81548,81550],{"class":314,"line":34941},[312,81543,81544],{"class":1436},"      let",[312,81546,81547],{"class":324}," str ",[312,81549,336],{"class":1436},[312,81551,71881],{"class":339},[312,81553,81554],{"class":314,"line":34988},[312,81555,71886],{"class":318},[312,81557,81558,81560,81563,81565,81568,81571],{"class":314,"line":34993},[312,81559,59789],{"class":324},[312,81561,81562],{"class":332},"forEach",[312,81564,1576],{"class":324},[312,81566,81567],{"class":1579},"item",[312,81569,81570],{"class":1436}," =>",[312,81572,483],{"class":324},[312,81574,81575,81577,81579,81582,81584,81587,81589,81592,81595,81597],{"class":314,"line":34999},[312,81576,63050],{"class":1436},[312,81578,939],{"class":324},[312,81580,81581],{"class":488},"name",[312,81583,733],{"class":324},[312,81585,81586],{"class":488},"price",[312,81588,733],{"class":324},[312,81590,81591],{"class":488},"picture",[312,81593,81594],{"class":324}," } ",[312,81596,336],{"class":1436},[312,81598,81599],{"class":324}," item\n",[312,81601,81602,81605,81607],{"class":314,"line":35018},[312,81603,81604],{"class":324},"        str ",[312,81606,11280],{"class":1436},[312,81608,71945],{"class":339},[312,81610,81611],{"class":314,"line":35024},[312,81612,81613],{"class":339},"          \u003Cdiv class=\"item\">\n",[312,81615,81616,81619,81621],{"class":314,"line":35044},[312,81617,81618],{"class":339},"            \u003Cimg src=\"${",[312,81620,81591],{"class":324},[312,81622,81623],{"class":339},"}\" alt=\"\">\n",[312,81625,81626,81629,81631],{"class":314,"line":35050},[312,81627,81628],{"class":339},"            \u003Cp class=\"name\">${",[312,81630,81581],{"class":324},[312,81632,81633],{"class":339},"}\u003C\u002Fp>\n",[312,81635,81636,81639,81641],{"class":314,"line":35056},[312,81637,81638],{"class":339},"            \u003Cp class=\"price\">${",[312,81640,81586],{"class":324},[312,81642,81633],{"class":339},[312,81644,81645],{"class":314,"line":35066},[312,81646,81647],{"class":339},"          \u003C\u002Fdiv>\n",[312,81649,81650],{"class":314,"line":35071},[312,81651,81652],{"class":339},"        `\n",[312,81654,81655],{"class":314,"line":35077},[312,81656,66593],{"class":324},[312,81658,81659],{"class":314,"line":35093},[312,81660,81661],{"class":318},"      \u002F\u002F 追加给List\n",[312,81663,81664,81666,81668,81670,81673,81675,81677],{"class":314,"line":35138},[312,81665,57553],{"class":324},[312,81667,56183],{"class":332},[312,81669,1576],{"class":324},[312,81671,81672],{"class":339},"'.list'",[312,81674,76021],{"class":324},[312,81676,336],{"class":1436},[312,81678,75757],{"class":324},[312,81680,81681],{"class":314,"line":35144},[312,81682,3992],{"class":324},[312,81684,81685],{"class":314,"line":35150},[312,81686,81687],{"class":318},"    \u002F\u002F 页面一打开就需要渲染\n",[312,81689,81690,81693],{"class":314,"line":35156},[312,81691,81692],{"class":332},"    render",[312,81694,81695],{"class":324},"(goodsList)\n",[312,81697,81698],{"class":314,"line":35167},[312,81699,81700],{"class":318},"    \u002F\u002F 2.过滤筛选\n",[312,81702,81703,81705,81707,81709,81712,81714,81716,81718,81720,81722,81724,81726],{"class":314,"line":35173},[312,81704,54193],{"class":324},[312,81706,56183],{"class":332},[312,81708,1576],{"class":324},[312,81710,81711],{"class":339},"'.filter'",[312,81713,32622],{"class":324},[312,81715,59595],{"class":332},[312,81717,1576],{"class":324},[312,81719,59600],{"class":339},[312,81721,733],{"class":324},[312,81723,2024],{"class":1579},[312,81725,81570],{"class":1436},[312,81727,483],{"class":324},[312,81729,81730],{"class":314,"line":35179},[312,81731,81732],{"class":318},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[312,81734,81735,81737,81739,81742,81744,81746,81748,81750],{"class":314,"line":35185},[312,81736,60010],{"class":1436},[312,81738,939],{"class":324},[312,81740,81741],{"class":488},"tagName",[312,81743,733],{"class":324},[312,81745,33332],{"class":488},[312,81747,81594],{"class":324},[312,81749,336],{"class":1436},[312,81751,81752],{"class":324}," e.target\n",[312,81754,81755],{"class":314,"line":35203},[312,81756,81757],{"class":318},"      \u002F\u002F 判断\n",[312,81759,81760,81762,81764,81766,81768],{"class":314,"line":35217},[312,81761,56264],{"class":1436},[312,81763,68812],{"class":324},[312,81765,56270],{"class":1436},[312,81767,70034],{"class":339},[312,81769,14244],{"class":324},[312,81771,81772],{"class":314,"line":35226},[312,81773,81774],{"class":318},"        \u002F\u002F console.log(11)\n",[312,81776,81777],{"class":314,"line":35235},[312,81778,81779],{"class":318},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[312,81781,81782],{"class":314,"line":35244},[312,81783,81784],{"class":318},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[312,81786,81787,81789,81791,81793],{"class":314,"line":35253},[312,81788,53616],{"class":1436},[312,81790,53619],{"class":324},[312,81792,336],{"class":1436},[312,81794,81795],{"class":324}," goodsList\n",[312,81797,81798,81800,81803,81805,81808],{"class":314,"line":35259},[312,81799,4302],{"class":1436},[312,81801,81802],{"class":324}," (dataset.index ",[312,81804,56270],{"class":1436},[312,81806,81807],{"class":339}," '1'",[312,81809,14244],{"class":324},[312,81811,81812,81815,81817,81820,81823,81825,81827,81829,81832,81834,81836,81839,81841,81843,81845],{"class":314,"line":35265},[312,81813,81814],{"class":324},"          arr ",[312,81816,336],{"class":1436},[312,81818,81819],{"class":324}," goodsList.",[312,81821,81822],{"class":332},"filter",[312,81824,1576],{"class":324},[312,81826,81567],{"class":1579},[312,81828,81570],{"class":1436},[312,81830,81831],{"class":324}," item.price ",[312,81833,3516],{"class":1436},[312,81835,5898],{"class":488},[312,81837,81838],{"class":1436}," &&",[312,81840,81831],{"class":324},[312,81842,3394],{"class":1436},[312,81844,7558],{"class":488},[312,81846,1959],{"class":324},[312,81848,81849,81852,81854,81856,81858,81860,81863],{"class":314,"line":35273},[312,81850,81851],{"class":324},"        } ",[312,81853,3507],{"class":1436},[312,81855,3510],{"class":1436},[312,81857,81802],{"class":324},[312,81859,56270],{"class":1436},[312,81861,81862],{"class":339}," '2'",[312,81864,14244],{"class":324},[312,81866,81867,81869,81871,81873,81875,81877,81879,81881,81883,81885,81887,81889,81891,81893,81896],{"class":314,"line":35278},[312,81868,81814],{"class":324},[312,81870,336],{"class":1436},[312,81872,81819],{"class":324},[312,81874,81822],{"class":332},[312,81876,1576],{"class":324},[312,81878,81567],{"class":1579},[312,81880,81570],{"class":1436},[312,81882,81831],{"class":324},[312,81884,3516],{"class":1436},[312,81886,7558],{"class":488},[312,81888,81838],{"class":1436},[312,81890,81831],{"class":324},[312,81892,3394],{"class":1436},[312,81894,81895],{"class":488}," 300",[312,81897,1959],{"class":324},[312,81899,81900,81902,81904,81906,81908,81910,81913],{"class":314,"line":35284},[312,81901,81851],{"class":324},[312,81903,3507],{"class":1436},[312,81905,3510],{"class":1436},[312,81907,81802],{"class":324},[312,81909,56270],{"class":1436},[312,81911,81912],{"class":339}," '3'",[312,81914,14244],{"class":324},[312,81916,81917,81919,81921,81923,81925,81927,81929,81931,81933,81935,81937],{"class":314,"line":35295},[312,81918,81814],{"class":324},[312,81920,336],{"class":1436},[312,81922,81819],{"class":324},[312,81924,81822],{"class":332},[312,81926,1576],{"class":324},[312,81928,81567],{"class":1579},[312,81930,81570],{"class":1436},[312,81932,81831],{"class":324},[312,81934,3516],{"class":1436},[312,81936,81895],{"class":488},[312,81938,1959],{"class":324},[312,81940,81941],{"class":314,"line":35301},[312,81942,4334],{"class":324},[312,81944,81945],{"class":314,"line":35321},[312,81946,81947],{"class":318},"        \u002F\u002F 渲染函数\n",[312,81949,81950,81952],{"class":314,"line":35327},[312,81951,72185],{"class":332},[312,81953,54198],{"class":324},[312,81955,81956],{"class":314,"line":35333},[312,81957,54184],{"class":324},[312,81959,81960],{"class":314,"line":35339},[312,81961,4205],{"emptyLinePlaceholder":1881},[312,81963,81964],{"class":314,"line":35356},[312,81965,35256],{"class":324},[312,81967,81968,81970,81972],{"class":314,"line":35362},[312,81969,54203],{"class":324},[312,81971,53599],{"class":328},[312,81973,343],{"class":324},[312,81975,81976,81978,81980],{"class":314,"line":35368},[312,81977,353],{"class":324},[312,81979,53586],{"class":328},[312,81981,343],{"class":324},[312,81983,81984],{"class":314,"line":35374},[312,81985,4205],{"emptyLinePlaceholder":1881},[312,81987,81988,81990,81992],{"class":314,"line":35380},[312,81989,353],{"class":324},[312,81991,52430],{"class":328},[312,81993,343],{"class":324},[14,81995,81997],{"id":81996},"_410-深入了解对象","4.10 深入了解对象",[69,81999,82001],{"id":82000},"_4101-创建对象","4.10.1 创建对象",[24,82003,82004],{},[19,82005],{"alt":308,"src":82006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[24,82008,82009],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[69,82011,82013],{"id":82012},"_4102-构造函数","4.10.2 构造函数",[24,82015,82016,82019],{},[27,82017,82018],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[24,82021,82022,82025],{},[27,82023,82024],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[303,82027,82029],{"className":52428,"code":82028,"language":52430,"meta":308,"style":308},"\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",[119,82030,82031,82039,82044,82065,82078,82090,82102,82106,82111,82138,82143,82170],{"__ignoreMap":308},[312,82032,82033,82035,82037],{"class":314,"line":315},[312,82034,325],{"class":324},[312,82036,53599],{"class":328},[312,82038,343],{"class":324},[312,82040,82041],{"class":314,"line":171},[312,82042,82043],{"class":318},"\u002F\u002F例：\n",[312,82045,82046,82048,82051,82053,82055,82057,82059,82061,82063],{"class":314,"line":274},[312,82047,56233],{"class":1436},[312,82049,82050],{"class":332}," Pig",[312,82052,1576],{"class":324},[312,82054,81581],{"class":1579},[312,82056,2323],{"class":324},[312,82058,71998],{"class":1579},[312,82060,2323],{"class":324},[312,82062,72015],{"class":1579},[312,82064,14244],{"class":324},[312,82066,82067,82070,82073,82075],{"class":314,"line":298},[312,82068,82069],{"class":488},"    this",[312,82071,82072],{"class":324},".name",[312,82074,336],{"class":1436},[312,82076,82077],{"class":324},"name\n",[312,82079,82080,82082,82085,82087],{"class":314,"line":974},[312,82081,82069],{"class":488},[312,82083,82084],{"class":324},".age",[312,82086,336],{"class":1436},[312,82088,82089],{"class":324},"age\n",[312,82091,82092,82094,82097,82099],{"class":314,"line":980},[312,82093,82069],{"class":488},[312,82095,82096],{"class":324},".gender",[312,82098,336],{"class":1436},[312,82100,82101],{"class":324},"gender    \n",[312,82103,82104],{"class":314,"line":997},[312,82105,515],{"class":324},[312,82107,82108],{"class":314,"line":1003},[312,82109,82110],{"class":318},"\u002F\u002F创建佩奇对象\n",[312,82112,82113,82115,82118,82120,82122,82124,82127,82129,82131,82133,82136],{"class":314,"line":1020},[312,82114,8596],{"class":1436},[312,82116,82117],{"class":488}," Peppa",[312,82119,13520],{"class":1436},[312,82121,82050],{"class":332},[312,82123,1576],{"class":324},[312,82125,82126],{"class":339},"'佩奇'",[312,82128,2323],{"class":324},[312,82130,2289],{"class":488},[312,82132,2323],{"class":324},[312,82134,82135],{"class":339},"'女'",[312,82137,1959],{"class":324},[312,82139,82140],{"class":314,"line":1026},[312,82141,82142],{"class":318},"\u002F\u002F创建乔治对象\n",[312,82144,82145,82147,82150,82152,82154,82156,82159,82161,82163,82165,82168],{"class":314,"line":3418},[312,82146,8596],{"class":1436},[312,82148,82149],{"class":488}," George",[312,82151,13520],{"class":1436},[312,82153,82050],{"class":332},[312,82155,1576],{"class":324},[312,82157,82158],{"class":339},"'乔治'",[312,82160,2323],{"class":324},[312,82162,2021],{"class":488},[312,82164,2323],{"class":324},[312,82166,82167],{"class":339},"'男'",[312,82169,1959],{"class":324},[312,82171,82172,82174,82176],{"class":314,"line":3423},[312,82173,353],{"class":324},[312,82175,53599],{"class":328},[312,82177,343],{"class":324},[24,82179,82180],{},[19,82181],{"alt":308,"src":82182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[24,82184,82185],{},[19,82186],{"alt":308,"src":82187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[24,82189,82190],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[24,82192,82193],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[24,82195,82196],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[24,82198,82199],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[24,82201,82202],{},"这里用等号是因为：对象.属性=值",[24,82204,82205],{},"①利用对象字面量创建对象",[24,82207,82208],{},"const o={",[24,82210,82211],{},"name:'pink'",[24,82213,82214],{},"} ②利用new Object创建对象",[24,82216,82217],{},"const o=new Object({name:'pink'})",[24,82219,82220],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[24,82222,82223],{},"构造函数创建对象的执行过程：",[24,82225,82226],{},[19,82227],{"alt":308,"src":82228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[69,82230,82232],{"id":82231},"_4103-实例成员","4.10.3 实例成员",[24,82234,82235],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[140,82237,82238,82241,82244],{},[143,82239,82240],{},"实例对象的属性和方法即为实例成员",[143,82242,82243],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[143,82245,82246],{},"构造函数创建的实例对象彼此独立互不影响",[69,82248,82250],{"id":82249},"_4104-静态成员","4.10.4 静态成员",[24,82252,82253],{},[19,82254],{"alt":308,"src":82255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[24,82257,82258],{},"静态成员有Date.now() Math.PI Math.random()",[24,82260,82261],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[24,82263,82264],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[24,82266,82267],{},"function Pig(name) n {",[24,82269,82270],{},"this.name=name",[24,82272,2888],{},[24,82274,82275],{},"Pig.eyes=2",[24,82277,82278],{},"Pig.sayHai=function () { console.log(this) }",[24,82280,82281],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[24,82283,82284],{},"console.log(Pig.eyes) \u002F\u002F2",[24,82286,13135],{},[140,82288,82289,82292,82295,82298,82301],{},[143,82290,82291],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[143,82293,82294],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[143,82296,82297],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[143,82299,82300],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[143,82302,82303],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[24,82305,82306],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[69,82308,82310],{"id":82309},"_4105-内置构造函数","4.10.5 内置构造函数",[24,82312,82313],{},"内置构造函数包含：",[24,82315,82316],{},[19,82317],{"alt":308,"src":82318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[24,82320,82321],{},[19,82322],{"alt":308,"src":82323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[24,82325,82326],{},"这些基本数据类型，js对他们进行了包装",[53599,82328,82329],{},"\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",[23796,82331,82333],{"id":82332},"_41051-object","4.10.5.1 Object",[24,82335,82336],{},"Object 是内置的构造函数，用于创建普通对象",[24,82338,82339],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[303,82341,82343],{"className":52428,"code":82342,"language":52430,"meta":308,"style":308},"const user=new Object({name:'小明',age:15})\n",[119,82344,82345],{"__ignoreMap":308},[312,82346,82347],{"class":314,"line":315},[312,82348,82342],{"class":324},[24,82350,82351],{},"三个常用的静态方法：",[1505,82353,82355],{"id":82354},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[24,82357,82358],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[24,82360,82361],{},[19,82362],{"alt":308,"src":82363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[24,82365,82366],{},[19,82367],{"alt":308,"src":82368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[303,82370,82372],{"className":54853,"code":82371,"language":54855,"meta":308,"style":308},"\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",[119,82373,82374,82382,82390,82395,82400,82405,82410,82415,82420,82428],{"__ignoreMap":308},[312,82375,82376,82378,82380],{"class":314,"line":315},[312,82377,325],{"class":324},[312,82379,53586],{"class":328},[312,82381,343],{"class":324},[312,82383,82384,82386,82388],{"class":314,"line":171},[312,82385,53930],{"class":324},[312,82387,53599],{"class":328},[312,82389,343],{"class":324},[312,82391,82392],{"class":314,"line":274},[312,82393,82394],{"class":324},"    const o = { name: 'pink', age: 6 }\n",[312,82396,82397],{"class":314,"line":298},[312,82398,82399],{"class":324},"    \u002F\u002F 获得所有属性名\n",[312,82401,82402],{"class":314,"line":974},[312,82403,82404],{"class":324},"    const arr = Object.keys(o)\n",[312,82406,82407],{"class":314,"line":980},[312,82408,82409],{"class":324},"    console.log(arr)\n",[312,82411,82412],{"class":314,"line":997},[312,82413,82414],{"class":324},"    \u002F\u002F 获得所有属性值\n",[312,82416,82417],{"class":314,"line":1003},[312,82418,82419],{"class":324},"    console.log(Object.values(o))\n",[312,82421,82422,82424,82426],{"class":314,"line":1020},[312,82423,54203],{"class":324},[312,82425,53599],{"class":328},[312,82427,343],{"class":324},[312,82429,82430,82432,82434],{"class":314,"line":1026},[312,82431,353],{"class":324},[312,82433,53586],{"class":328},[312,82435,343],{"class":324},[1505,82437,82439],{"id":82438},"_410512-object-assign","4.10.5.1.2 Object. assign",[24,82441,82442],{},"Object.assign(oo,o)",[24,82444,82445],{},"后的东西添加给前 是追加",[24,82447,82448],{},[19,82449],{"alt":308,"src":82450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[24,82452,82453],{},[19,82454],{"alt":308,"src":82455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[303,82457,82459],{"className":54853,"code":82458,"language":54855,"meta":308,"style":308},"\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",[119,82460,82461,82469,82477,82481,82485,82489,82493,82497,82501,82506,82511,82516,82521,82526,82534],{"__ignoreMap":308},[312,82462,82463,82465,82467],{"class":314,"line":315},[312,82464,325],{"class":324},[312,82466,53586],{"class":328},[312,82468,343],{"class":324},[312,82470,82471,82473,82475],{"class":314,"line":171},[312,82472,53930],{"class":324},[312,82474,53599],{"class":328},[312,82476,343],{"class":324},[312,82478,82479],{"class":314,"line":274},[312,82480,82394],{"class":324},[312,82482,82483],{"class":314,"line":298},[312,82484,82399],{"class":324},[312,82486,82487],{"class":314,"line":974},[312,82488,82404],{"class":324},[312,82490,82491],{"class":314,"line":980},[312,82492,82409],{"class":324},[312,82494,82495],{"class":314,"line":997},[312,82496,82414],{"class":324},[312,82498,82499],{"class":314,"line":1003},[312,82500,82419],{"class":324},[312,82502,82503],{"class":314,"line":1020},[312,82504,82505],{"class":324},"    const oo = {}\n",[312,82507,82508],{"class":314,"line":1026},[312,82509,82510],{"class":324},"    Object.assign(oo, o)\n",[312,82512,82513],{"class":314,"line":3418},[312,82514,82515],{"class":324},"    console.log(oo)\n",[312,82517,82518],{"class":314,"line":3423},[312,82519,82520],{"class":324},"    Object.assign(o, { gender: '女' })\n",[312,82522,82523],{"class":314,"line":3429},[312,82524,82525],{"class":324},"    console.log(o)\n",[312,82527,82528,82530,82532],{"class":314,"line":3434},[312,82529,54203],{"class":324},[312,82531,53599],{"class":328},[312,82533,343],{"class":324},[312,82535,82536,82538,82540],{"class":314,"line":3448},[312,82537,353],{"class":324},[312,82539,53586],{"class":328},[312,82541,343],{"class":324},[24,82543,82544],{},[19,82545],{"alt":308,"src":82546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[23796,82548,82550],{"id":82549},"_41052-array","4.10.5.2 Array",[24,82552,82553],{},"Array 是内置的构造函数，用于创建数组",[24,82555,82556],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[303,82558,82560],{"className":52428,"code":82559,"language":52430,"meta":308,"style":308},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[119,82561,82562,82567],{"__ignoreMap":308},[312,82563,82564],{"class":314,"line":315},[312,82565,82566],{"class":324},"const arr=new Array(3,5)\n",[312,82568,82569],{"class":314,"line":171},[312,82570,82571],{"class":324},"console.log(arr)  \u002F\u002F[3,5]\n",[24,82573,82574],{},"Array的实例方法，这个方法是实例成员",[24,82576,82577],{},[19,82578],{"alt":308,"src":82579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[1505,82581,82583],{"id":82582},"_410521-reduce","4.10.5.2.1 reduce",[24,82585,82586],{},[19,82587],{"alt":308,"src":82588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[303,82590,82592],{"className":54853,"code":82591,"language":54855,"meta":308,"style":308},"\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",[119,82593,82594,82602,82610,82615,82620,82625,82630,82634,82639,82644,82649,82653,82658,82663,82667,82672,82677,82682,82690],{"__ignoreMap":308},[312,82595,82596,82598,82600],{"class":314,"line":315},[312,82597,325],{"class":324},[312,82599,53586],{"class":328},[312,82601,343],{"class":324},[312,82603,82604,82606,82608],{"class":314,"line":171},[312,82605,53930],{"class":324},[312,82607,53599],{"class":328},[312,82609,343],{"class":324},[312,82611,82612],{"class":314,"line":274},[312,82613,82614],{"class":324},"    const arr = [1, 5, 8]\n",[312,82616,82617],{"class":314,"line":298},[312,82618,82619],{"class":324},"    \u002F\u002F 1.没有初始值\n",[312,82621,82622],{"class":314,"line":974},[312,82623,82624],{"class":324},"    const total = arr.reduce(function (prev, current) {\n",[312,82626,82627],{"class":314,"line":980},[312,82628,82629],{"class":324},"      return prev + current\n",[312,82631,82632],{"class":314,"line":997},[312,82633,35256],{"class":324},[312,82635,82636],{"class":314,"line":1003},[312,82637,82638],{"class":324},"    console.log(total)   \u002F\u002F14\n",[312,82640,82641],{"class":314,"line":1020},[312,82642,82643],{"class":324},"    \u002F\u002F 2.有初始值\n",[312,82645,82646],{"class":314,"line":1026},[312,82647,82648],{"class":324},"    const total1 = arr.reduce(function (prev, current) {\n",[312,82650,82651],{"class":314,"line":3418},[312,82652,82629],{"class":324},[312,82654,82655],{"class":314,"line":3423},[312,82656,82657],{"class":324},"    }, 10)\n",[312,82659,82660],{"class":314,"line":3429},[312,82661,82662],{"class":324},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[312,82664,82665],{"class":314,"line":3434},[312,82666,4205],{"emptyLinePlaceholder":1881},[312,82668,82669],{"class":314,"line":3448},[312,82670,82671],{"class":324},"    \u002F\u002F 3.箭头函数写法\n",[312,82673,82674],{"class":314,"line":3453},[312,82675,82676],{"class":324},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[312,82678,82679],{"class":314,"line":3459},[312,82680,82681],{"class":324},"    console.log(total2)   \u002F\u002F24\n",[312,82683,82684,82686,82688],{"class":314,"line":3480},[312,82685,54203],{"class":324},[312,82687,53599],{"class":328},[312,82689,343],{"class":324},[312,82691,82692,82694,82696],{"class":314,"line":3485},[312,82693,353],{"class":324},[312,82695,53586],{"class":328},[312,82697,343],{"class":324},[24,82699,82700],{},"执行过程：",[140,82702,82703,82706,82709],{},[143,82704,82705],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[143,82707,82708],{},"每一次循环，把返回值给作为下一次循环的上一次值",[143,82710,82711],{},"如果有起始值，则起始值作为上一次值",[303,82713,82715],{"className":54853,"code":82714,"language":54855,"meta":308,"style":308},"\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",[119,82716,82717,82725,82733,82737,82741,82745,82749,82753,82757,82762,82767,82772,82777,82782,82786,82790,82794,82798,82802,82806,82811,82815,82820,82824,82829,82834,82838,82842,82846,82854],{"__ignoreMap":308},[312,82718,82719,82721,82723],{"class":314,"line":315},[312,82720,325],{"class":324},[312,82722,53586],{"class":328},[312,82724,343],{"class":324},[312,82726,82727,82729,82731],{"class":314,"line":171},[312,82728,53930],{"class":324},[312,82730,53599],{"class":328},[312,82732,343],{"class":324},[312,82734,82735],{"class":314,"line":274},[312,82736,82614],{"class":324},[312,82738,82739],{"class":314,"line":298},[312,82740,82619],{"class":324},[312,82742,82743],{"class":314,"line":974},[312,82744,82624],{"class":324},[312,82746,82747],{"class":314,"line":980},[312,82748,82629],{"class":324},[312,82750,82751],{"class":314,"line":997},[312,82752,35256],{"class":324},[312,82754,82755],{"class":314,"line":1003},[312,82756,82638],{"class":324},[312,82758,82759],{"class":314,"line":1020},[312,82760,82761],{"class":324},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[312,82763,82764],{"class":314,"line":1026},[312,82765,82766],{"class":324},"    \u002F\u002F     1              5                    6\n",[312,82768,82769],{"class":314,"line":3418},[312,82770,82771],{"class":324},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[312,82773,82774],{"class":314,"line":3423},[312,82775,82776],{"class":324},"    \u002F\u002F     6              8                    14\n",[312,82778,82779],{"class":314,"line":3429},[312,82780,82781],{"class":324},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[312,82783,82784],{"class":314,"line":3434},[312,82785,82643],{"class":324},[312,82787,82788],{"class":314,"line":3448},[312,82789,82648],{"class":324},[312,82791,82792],{"class":314,"line":3453},[312,82793,82629],{"class":324},[312,82795,82796],{"class":314,"line":3459},[312,82797,82657],{"class":324},[312,82799,82800],{"class":314,"line":3480},[312,82801,82662],{"class":324},[312,82803,82804],{"class":314,"line":3485},[312,82805,82761],{"class":324},[312,82807,82808],{"class":314,"line":3499},[312,82809,82810],{"class":324},"    \u002F\u002F     10             1                     11\n",[312,82812,82813],{"class":314,"line":3504},[312,82814,82771],{"class":324},[312,82816,82817],{"class":314,"line":3533},[312,82818,82819],{"class":324},"    \u002F\u002F     11             5                    16\n",[312,82821,82822],{"class":314,"line":3538},[312,82823,82771],{"class":324},[312,82825,82826],{"class":314,"line":3555},[312,82827,82828],{"class":324},"    \u002F\u002F     16             8                    24\n",[312,82830,82831],{"class":314,"line":3560},[312,82832,82833],{"class":324},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[312,82835,82836],{"class":314,"line":3565},[312,82837,82671],{"class":324},[312,82839,82840],{"class":314,"line":3570},[312,82841,82676],{"class":324},[312,82843,82844],{"class":314,"line":3584},[312,82845,82681],{"class":324},[312,82847,82848,82850,82852],{"class":314,"line":3589},[312,82849,54203],{"class":324},[312,82851,53599],{"class":328},[312,82853,343],{"class":324},[312,82855,82856,82858,82860],{"class":314,"line":4382},[312,82857,353],{"class":324},[312,82859,53586],{"class":328},[312,82861,343],{"class":324},[1505,82863,82865],{"id":82864},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[24,82867,82868],{},[19,82869],{"alt":308,"src":82870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[303,82872,82874],{"className":54853,"code":82873,"language":54855,"meta":308,"style":308},"\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",[119,82875,82876,82884,82892,82897,82902,82907,82912,82916,82921,82926,82931,82936,82941,82946,82950,82955,82959,82964,82972],{"__ignoreMap":308},[312,82877,82878,82880,82882],{"class":314,"line":315},[312,82879,325],{"class":324},[312,82881,53586],{"class":328},[312,82883,343],{"class":324},[312,82885,82886,82888,82890],{"class":314,"line":171},[312,82887,53930],{"class":324},[312,82889,53599],{"class":328},[312,82891,343],{"class":324},[312,82893,82894],{"class":314,"line":274},[312,82895,82896],{"class":324},"    const arr = [\n",[312,82898,82899],{"class":314,"line":298},[312,82900,82901],{"class":324},"      { name: '张三', salary: 10000 },\n",[312,82903,82904],{"class":314,"line":974},[312,82905,82906],{"class":324},"      { name: '李四', salary: 10000 },\n",[312,82908,82909],{"class":314,"line":980},[312,82910,82911],{"class":324},"      { name: '王五', salary: 10000 }\n",[312,82913,82914],{"class":314,"line":997},[312,82915,54895],{"class":324},[312,82917,82918],{"class":314,"line":1003},[312,82919,82920],{"class":324},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[312,82922,82923],{"class":314,"line":1020},[312,82924,82925],{"class":324},"    \u002F\u002F prev是累计值\n",[312,82927,82928],{"class":314,"line":1026},[312,82929,82930],{"class":324},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[312,82932,82933],{"class":314,"line":3418},[312,82934,82935],{"class":324},"    console.log(total)\n",[312,82937,82938],{"class":314,"line":3423},[312,82939,82940],{"class":324},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[312,82942,82943],{"class":314,"line":3429},[312,82944,82945],{"class":324},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[312,82947,82948],{"class":314,"line":3434},[312,82949,82940],{"class":324},[312,82951,82952],{"class":314,"line":3448},[312,82953,82954],{"class":324},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[312,82956,82957],{"class":314,"line":3453},[312,82958,82940],{"class":324},[312,82960,82961],{"class":314,"line":3459},[312,82962,82963],{"class":324},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[312,82965,82966,82968,82970],{"class":314,"line":3480},[312,82967,54203],{"class":324},[312,82969,53599],{"class":328},[312,82971,343],{"class":324},[312,82973,82974,82976,82978],{"class":314,"line":3485},[312,82975,353],{"class":324},[312,82977,53586],{"class":328},[312,82979,343],{"class":324},[1505,82981,82983],{"id":82982},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[24,82985,82986],{},[19,82987],{"alt":308,"src":82988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[24,82990,82991],{},[19,82992],{"alt":308,"src":82993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[140,82995,82996],{},[143,82997,82998],{},"find()",[24,83000,83001],{},"循环查找，找到第一个就ok",[24,83003,83004],{},[164,83005,83008],{"href":83006,"rel":83007},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[168],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[303,83010,83012],{"className":52428,"code":83011,"language":52430,"meta":308,"style":308},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[119,83013,83014,83019,83024],{"__ignoreMap":308},[312,83015,83016],{"class":314,"line":315},[312,83017,83018],{"class":324},"const array1 = [5, 12, 8, 130, 44]\n",[312,83020,83021],{"class":314,"line":171},[312,83022,83023],{"class":324},"const found = array1.find((element) => element > 10)\n",[312,83025,83026],{"class":314,"line":274},[312,83027,83028],{"class":324},"console.log(found)  \u002F\u002F12\n",[24,83030,83031,83033,83034,83039,83040,83043,83044,83046,83047,83052,83053,83055,83056,83058,83059,83061,83062],{},[119,83032,82998],{}," 方法是一个",[164,83035,83038],{"href":83036,"rel":83037},"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",[168],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[119,83041,83042],{},"callbackFn"," 函数，直到 ",[119,83045,83042],{}," 返回一个",[164,83048,83051],{"href":83049,"rel":83050},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[168],"真值","。然后 ",[119,83054,82998],{}," 返回该元素并停止迭代数组。如果 ",[119,83057,83042],{}," 从未返回真值，则 ",[119,83060,82998],{}," 返回 ",[119,83063,83064],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[303,83066,83068],{"className":54853,"code":83067,"language":54855,"meta":308,"style":308},"\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",[119,83069,83070,83078,83086,83091,83096,83101,83105,83110,83115,83119,83124,83129,83133,83137,83142,83147,83151,83155,83160,83165,83170,83175,83180,83184,83189,83194,83199,83204,83208,83213,83221],{"__ignoreMap":308},[312,83071,83072,83074,83076],{"class":314,"line":315},[312,83073,325],{"class":324},[312,83075,53586],{"class":328},[312,83077,343],{"class":324},[312,83079,83080,83082,83084],{"class":314,"line":171},[312,83081,53930],{"class":324},[312,83083,53599],{"class":328},[312,83085,343],{"class":324},[312,83087,83088],{"class":314,"line":274},[312,83089,83090],{"class":324},"    const arr = ['red', 'blue', 'green']\n",[312,83092,83093],{"class":314,"line":298},[312,83094,83095],{"class":324},"    const found = arr.find(item => item === 'pink')\n",[312,83097,83098],{"class":314,"line":974},[312,83099,83100],{"class":324},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[312,83102,83103],{"class":314,"line":980},[312,83104,4205],{"emptyLinePlaceholder":1881},[312,83106,83107],{"class":314,"line":997},[312,83108,83109],{"class":324},"    \u002F\u002F 使用场景，用于查找数据\n",[312,83111,83112],{"class":314,"line":1003},[312,83113,83114],{"class":324},"    const arr1 = [\n",[312,83116,83117],{"class":314,"line":1020},[312,83118,81158],{"class":324},[312,83120,83121],{"class":314,"line":1026},[312,83122,83123],{"class":324},"        name: '小米',\n",[312,83125,83126],{"class":314,"line":3418},[312,83127,83128],{"class":324},"        price: 1999\n",[312,83130,83131],{"class":314,"line":3423},[312,83132,79664],{"class":324},[312,83134,83135],{"class":314,"line":3429},[312,83136,81158],{"class":324},[312,83138,83139],{"class":314,"line":3434},[312,83140,83141],{"class":324},"        name: '华为',\n",[312,83143,83144],{"class":314,"line":3448},[312,83145,83146],{"class":324},"        price: 3999\n",[312,83148,83149],{"class":314,"line":3453},[312,83150,54184],{"class":324},[312,83152,83153],{"class":314,"line":3459},[312,83154,54895],{"class":324},[312,83156,83157],{"class":314,"line":3480},[312,83158,83159],{"class":324},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[312,83161,83162],{"class":314,"line":3485},[312,83163,83164],{"class":324},"    \u002F\u002F const found1 = arr1.find(item => {\n",[312,83166,83167],{"class":314,"line":3499},[312,83168,83169],{"class":324},"    \u002F\u002F   if (item.name === '小米') {\n",[312,83171,83172],{"class":314,"line":3504},[312,83173,83174],{"class":324},"    \u002F\u002F     return item\n",[312,83176,83177],{"class":314,"line":3533},[312,83178,83179],{"class":324},"    \u002F\u002F   }\n",[312,83181,83182],{"class":314,"line":3538},[312,83183,65068],{"class":324},[312,83185,83186],{"class":314,"line":3555},[312,83187,83188],{"class":324},"    \u002F\u002F 另一种写法\n",[312,83190,83191],{"class":314,"line":3560},[312,83192,83193],{"class":324},"    const found1 = arr1.find(item => {\n",[312,83195,83196],{"class":314,"line":3565},[312,83197,83198],{"class":324},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[312,83200,83201],{"class":314,"line":3570},[312,83202,83203],{"class":324},"      return item.name = '小米'\n",[312,83205,83206],{"class":314,"line":3584},[312,83207,35256],{"class":324},[312,83209,83210],{"class":314,"line":3589},[312,83211,83212],{"class":324},"    console.log(found1)\n",[312,83214,83215,83217,83219],{"class":314,"line":4382},[312,83216,54203],{"class":324},[312,83218,53599],{"class":328},[312,83220,343],{"class":324},[312,83222,83223,83225,83227],{"class":314,"line":4396},[312,83224,353],{"class":324},[312,83226,53586],{"class":328},[312,83228,343],{"class":324},[24,83230,83231],{},[19,83232],{"alt":308,"src":83233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[24,83235,83236],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[140,83238,83239],{"start":171},[143,83240,83241],{},"every()返回的是布尔值",[24,83243,83244],{},[164,83245,83248],{"href":83246,"rel":83247},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[168],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[24,83250,83251],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[24,83253,83254],{},"some是只有有一个就没问题",[24,83256,83257],{},"every是必须全是才行",[303,83259,83263],{"className":83260,"code":83261,"language":83262,"meta":308,"style":308},"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",[119,83264,83265,83281,83295,83299,83308],{"__ignoreMap":308},[312,83266,83267,83269,83272,83274,83276,83279],{"class":314,"line":315},[312,83268,56233],{"class":1436},[312,83270,83271],{"class":324}," isBigEnough(element, ",[312,83273,75830],{"class":1436},[312,83275,733],{"class":324},[312,83277,83278],{"class":1436},"array",[312,83280,14244],{"class":324},[312,83282,83283,83286,83289,83291,83293],{"class":314,"line":171},[312,83284,83285],{"class":1436},"  return",[312,83287,83288],{"class":324}," element ",[312,83290,3516],{"class":1436},[312,83292,3843],{"class":488},[312,83294,498],{"class":324},[312,83296,83297],{"class":314,"line":274},[312,83298,515],{"class":324},[312,83300,83301,83304,83306],{"class":314,"line":298},[312,83302,83303],{"class":324},"[12, 5, 8, 130, 44].every(isBigEnough); ",[312,83305,35124],{"class":1436},[312,83307,56300],{"class":324},[312,83309,83310,83313,83315],{"class":314,"line":974},[312,83311,83312],{"class":324},"[12, 54, 18, 130, 44].every(isBigEnough); ",[312,83314,35124],{"class":1436},[312,83316,59722],{"class":324},[303,83318,83320],{"className":54853,"code":83319,"language":54855,"meta":308,"style":308},"\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",[119,83321,83322,83330,83338,83343,83347,83352,83357,83365],{"__ignoreMap":308},[312,83323,83324,83326,83328],{"class":314,"line":315},[312,83325,325],{"class":324},[312,83327,53586],{"class":328},[312,83329,343],{"class":324},[312,83331,83332,83334,83336],{"class":314,"line":171},[312,83333,53930],{"class":324},[312,83335,53599],{"class":328},[312,83337,343],{"class":324},[312,83339,83340],{"class":314,"line":274},[312,83341,83342],{"class":324},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[312,83344,83345],{"class":314,"line":298},[312,83346,80094],{"class":324},[312,83348,83349],{"class":314,"line":974},[312,83350,83351],{"class":324},"    const flag = arr.every(item => item >= 10)\n",[312,83353,83354],{"class":314,"line":980},[312,83355,83356],{"class":324},"    console.log(flag)    \u002F\u002Ftrue\n",[312,83358,83359,83361,83363],{"class":314,"line":997},[312,83360,54203],{"class":324},[312,83362,53599],{"class":328},[312,83364,343],{"class":324},[312,83366,83367,83369,83371],{"class":314,"line":1003},[312,83368,353],{"class":324},[312,83370,53586],{"class":328},[312,83372,343],{"class":324},[303,83374,83376],{"className":54853,"code":83375,"language":54855,"meta":308,"style":308},"\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",[119,83377,83378,83386,83394,83398,83403,83408,83413,83421],{"__ignoreMap":308},[312,83379,83380,83382,83384],{"class":314,"line":315},[312,83381,325],{"class":324},[312,83383,53586],{"class":328},[312,83385,343],{"class":324},[312,83387,83388,83390,83392],{"class":314,"line":171},[312,83389,53930],{"class":324},[312,83391,53599],{"class":328},[312,83393,343],{"class":324},[312,83395,83396],{"class":314,"line":274},[312,83397,83342],{"class":324},[312,83399,83400],{"class":314,"line":298},[312,83401,83402],{"class":324},"    const arr = [10, 0, 5]\n",[312,83404,83405],{"class":314,"line":974},[312,83406,83407],{"class":324},"    const flag = arr.some(item => item >= 10)\n",[312,83409,83410],{"class":314,"line":980},[312,83411,83412],{"class":324},"    console.log(flag)   \u002F\u002Ftrue\n",[312,83414,83415,83417,83419],{"class":314,"line":997},[312,83416,54203],{"class":324},[312,83418,53599],{"class":328},[312,83420,343],{"class":324},[312,83422,83423,83425,83427],{"class":314,"line":1003},[312,83424,353],{"class":324},[312,83426,53586],{"class":328},[312,83428,343],{"class":324},[1505,83430,83432],{"id":83431},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[24,83434,83435],{},[19,83436],{"alt":308,"src":83437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[303,83439,83441],{"className":52428,"code":83440,"language":52430,"meta":308,"style":308},"\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",[119,83442,83443,83453,83467,83471,83479,83493,83513,83525,83533,83540,83552,83564,83576,83588,83598,83608,83612,83620,83628,83632,83640,83652,83660,83682,83687,83692,83725,83733,83741,83745],{"__ignoreMap":308},[312,83444,83445,83447,83449,83451],{"class":314,"line":315},[312,83446,53092],{"class":324},[312,83448,53095],{"class":328},[312,83450,53098],{"class":332},[312,83452,343],{"class":324},[312,83454,83455,83457,83459,83461,83463,83465],{"class":314,"line":171},[312,83456,325],{"class":324},[312,83458,52430],{"class":328},[312,83460,53109],{"class":332},[312,83462,336],{"class":324},[312,83464,53114],{"class":339},[312,83466,343],{"class":324},[312,83468,83469],{"class":314,"line":274},[312,83470,4205],{"emptyLinePlaceholder":1881},[312,83472,83473,83475,83477],{"class":314,"line":298},[312,83474,325],{"class":324},[312,83476,53127],{"class":328},[312,83478,343],{"class":324},[312,83480,83481,83483,83485,83487,83489,83491],{"class":314,"line":974},[312,83482,53930],{"class":324},[312,83484,53137],{"class":328},[312,83486,53140],{"class":332},[312,83488,336],{"class":324},[312,83490,53145],{"class":339},[312,83492,343],{"class":324},[312,83494,83495,83497,83499,83501,83503,83505,83507,83509,83511],{"class":314,"line":980},[312,83496,53930],{"class":324},[312,83498,53137],{"class":328},[312,83500,16721],{"class":332},[312,83502,336],{"class":324},[312,83504,53184],{"class":339},[312,83506,53164],{"class":332},[312,83508,336],{"class":324},[312,83510,53191],{"class":339},[312,83512,343],{"class":324},[312,83514,83515,83517,83519,83521,83523],{"class":314,"line":997},[312,83516,53930],{"class":324},[312,83518,628],{"class":328},[312,83520,53202],{"class":324},[312,83522,628],{"class":328},[312,83524,343],{"class":324},[312,83526,83527,83529,83531],{"class":314,"line":1003},[312,83528,53930],{"class":324},[312,83530,1856],{"class":328},[312,83532,343],{"class":324},[312,83534,83535,83538],{"class":314,"line":1020},[312,83536,83537],{"class":328},"    div",[312,83539,483],{"class":324},[312,83541,83542,83544,83546,83548,83550],{"class":314,"line":1026},[312,83543,56554],{"class":488},[312,83545,492],{"class":324},[312,83547,3528],{"class":488},[312,83549,1437],{"class":1436},[312,83551,498],{"class":324},[312,83553,83554,83556,83558,83560,83562],{"class":314,"line":3418},[312,83555,56568],{"class":488},[312,83557,492],{"class":324},[312,83559,2346],{"class":488},[312,83561,1437],{"class":1436},[312,83563,498],{"class":324},[312,83565,83566,83568,83570,83572,83574],{"class":314,"line":3423},[312,83567,59141],{"class":488},[312,83569,492],{"class":324},[312,83571,2346],{"class":488},[312,83573,1437],{"class":1436},[312,83575,498],{"class":324},[312,83577,83578,83580,83582,83584,83586],{"class":314,"line":3429},[312,83579,66911],{"class":488},[312,83581,492],{"class":324},[312,83583,2443],{"class":488},[312,83585,1437],{"class":1436},[312,83587,498],{"class":324},[312,83589,83590,83592,83594,83596],{"class":314,"line":3434},[312,83591,59068],{"class":488},[312,83593,492],{"class":324},[312,83595,53380],{"class":488},[312,83597,498],{"class":324},[312,83599,83600,83602,83604,83606],{"class":314,"line":3448},[312,83601,56666],{"class":488},[312,83603,492],{"class":324},[312,83605,53432],{"class":488},[312,83607,498],{"class":324},[312,83609,83610],{"class":314,"line":3453},[312,83611,3992],{"class":324},[312,83613,83614,83616,83618],{"class":314,"line":3459},[312,83615,54203],{"class":324},[312,83617,1856],{"class":328},[312,83619,343],{"class":324},[312,83621,83622,83624,83626],{"class":314,"line":3480},[312,83623,353],{"class":324},[312,83625,53127],{"class":328},[312,83627,343],{"class":324},[312,83629,83630],{"class":314,"line":3485},[312,83631,4205],{"emptyLinePlaceholder":1881},[312,83633,83634,83636,83638],{"class":314,"line":3499},[312,83635,325],{"class":324},[312,83637,53586],{"class":328},[312,83639,343],{"class":324},[312,83641,83642,83644,83646,83648,83650],{"class":314,"line":3504},[312,83643,53930],{"class":324},[312,83645,329],{"class":328},[312,83647,57096],{"class":324},[312,83649,329],{"class":328},[312,83651,343],{"class":324},[312,83653,83654,83656,83658],{"class":314,"line":3533},[312,83655,53930],{"class":324},[312,83657,53599],{"class":328},[312,83659,343],{"class":324},[312,83661,83662,83664,83667,83669,83672,83675,83677,83680],{"class":314,"line":3538},[312,83663,13024],{"class":1436},[312,83665,83666],{"class":488}," spec",[312,83668,15366],{"class":1436},[312,83670,83671],{"class":324}," { size: ",[312,83673,83674],{"class":339},"'40cm*40cm'",[312,83676,57246],{"class":324},[312,83678,83679],{"class":339},"'黑色'",[312,83681,57386],{"class":324},[312,83683,83684],{"class":314,"line":3555},[312,83685,83686],{"class":318},"    \u002F\u002F const arr = Object.values(spec)\n",[312,83688,83689],{"class":314,"line":3560},[312,83690,83691],{"class":318},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[312,83693,83694,83696,83698,83700,83703,83705,83707,83710,83713,83716,83718,83720,83723],{"class":314,"line":3565},[312,83695,54193],{"class":324},[312,83697,56183],{"class":332},[312,83699,1576],{"class":324},[312,83701,83702],{"class":339},"'div'",[312,83704,76021],{"class":324},[312,83706,336],{"class":1436},[312,83708,83709],{"class":324}," Object.",[312,83711,83712],{"class":332},"values",[312,83714,83715],{"class":324},"(spec).",[312,83717,75995],{"class":332},[312,83719,1576],{"class":324},[312,83721,83722],{"class":339},"'\u002F'",[312,83724,1959],{"class":324},[312,83726,83727,83729,83731],{"class":314,"line":3570},[312,83728,54203],{"class":324},[312,83730,53599],{"class":328},[312,83732,343],{"class":324},[312,83734,83735,83737,83739],{"class":314,"line":3584},[312,83736,353],{"class":324},[312,83738,53586],{"class":328},[312,83740,343],{"class":324},[312,83742,83743],{"class":314,"line":3589},[312,83744,4205],{"emptyLinePlaceholder":1881},[312,83746,83747,83749,83751],{"class":314,"line":4382},[312,83748,353],{"class":324},[312,83750,52430],{"class":328},[312,83752,343],{"class":324},[24,83754,83755],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[1505,83757,83759],{"id":83758},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[24,83761,83762],{},"静态方法，将伪数组转换为真数组",[24,83764,83765],{},[19,83766],{"alt":308,"src":83767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[303,83769,83771],{"className":54853,"code":83770,"language":54855,"meta":308,"style":308},"\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",[119,83772,83773,83781,83789,83801,83813,83825,83833,83841,83846,83851,83856,83861,83869],{"__ignoreMap":308},[312,83774,83775,83777,83779],{"class":314,"line":315},[312,83776,325],{"class":324},[312,83778,53586],{"class":328},[312,83780,343],{"class":324},[312,83782,83783,83785,83787],{"class":314,"line":171},[312,83784,53930],{"class":324},[312,83786,243],{"class":328},[312,83788,343],{"class":324},[312,83790,83791,83793,83795,83797,83799],{"class":314,"line":274},[312,83792,53134],{"class":324},[312,83794,143],{"class":328},[312,83796,57096],{"class":324},[312,83798,143],{"class":328},[312,83800,343],{"class":324},[312,83802,83803,83805,83807,83809,83811],{"class":314,"line":298},[312,83804,53134],{"class":324},[312,83806,143],{"class":328},[312,83808,57096],{"class":324},[312,83810,143],{"class":328},[312,83812,343],{"class":324},[312,83814,83815,83817,83819,83821,83823],{"class":314,"line":974},[312,83816,53134],{"class":324},[312,83818,143],{"class":328},[312,83820,57096],{"class":324},[312,83822,143],{"class":328},[312,83824,343],{"class":324},[312,83826,83827,83829,83831],{"class":314,"line":980},[312,83828,54203],{"class":324},[312,83830,243],{"class":328},[312,83832,343],{"class":324},[312,83834,83835,83837,83839],{"class":314,"line":997},[312,83836,53930],{"class":324},[312,83838,53599],{"class":328},[312,83840,343],{"class":324},[312,83842,83843],{"class":314,"line":1003},[312,83844,83845],{"class":324},"    const lis = document.querySelectorAll('li')\n",[312,83847,83848],{"class":314,"line":1020},[312,83849,83850],{"class":324},"    const liss = Array.from(lis)\n",[312,83852,83853],{"class":314,"line":1026},[312,83854,83855],{"class":324},"    liss.pop()\n",[312,83857,83858],{"class":314,"line":3418},[312,83859,83860],{"class":324},"    console.log(liss)\n",[312,83862,83863,83865,83867],{"class":314,"line":3423},[312,83864,54203],{"class":324},[312,83866,53599],{"class":328},[312,83868,343],{"class":324},[312,83870,83871,83873,83875],{"class":314,"line":3429},[312,83872,353],{"class":324},[312,83874,53586],{"class":328},[312,83876,343],{"class":324},[24,83878,83879],{},[19,83880],{"alt":308,"src":83881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[23796,83883,83885],{"id":83884},"_41053-string","4.10.5.3 String",[24,83887,83888],{},[19,83889],{"alt":308,"src":83890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[1505,83892,83894],{"id":83893},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[303,83896,83898],{"className":54853,"code":83897,"language":54855,"meta":308,"style":308},"\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",[119,83899,83900,83908,83916,83921,83926,83931,83935,83940,83945,83950,83958],{"__ignoreMap":308},[312,83901,83902,83904,83906],{"class":314,"line":315},[312,83903,325],{"class":324},[312,83905,53586],{"class":328},[312,83907,343],{"class":324},[312,83909,83910,83912,83914],{"class":314,"line":171},[312,83911,53930],{"class":324},[312,83913,53599],{"class":328},[312,83915,343],{"class":324},[312,83917,83918],{"class":314,"line":274},[312,83919,83920],{"class":324},"    \u002F\u002F 把字符串转化为数组\n",[312,83922,83923],{"class":314,"line":298},[312,83924,83925],{"class":324},"    const str = 'pink,red'\n",[312,83927,83928],{"class":314,"line":974},[312,83929,83930],{"class":324},"    const arr = str.split(',')\n",[312,83932,83933],{"class":314,"line":980},[312,83934,82409],{"class":324},[312,83936,83937],{"class":314,"line":997},[312,83938,83939],{"class":324},"    const str1 = '2025-8-25'\n",[312,83941,83942],{"class":314,"line":1003},[312,83943,83944],{"class":324},"    const arr1 = str1.split('-')\n",[312,83946,83947],{"class":314,"line":1020},[312,83948,83949],{"class":324},"    console.log(arr1)\n",[312,83951,83952,83954,83956],{"class":314,"line":1026},[312,83953,54203],{"class":324},[312,83955,53599],{"class":328},[312,83957,343],{"class":324},[312,83959,83960,83962,83964],{"class":314,"line":3418},[312,83961,353],{"class":324},[312,83963,53586],{"class":328},[312,83965,343],{"class":324},[1505,83967,83969],{"id":83968},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[24,83971,6986],{},[24,83973,83974],{},"substring(indexStart)",[24,83976,83977],{},"substring(indexStart, indexEnd)",[243,83979,83980,83991,84003,84013],{},[143,83981,83982,83983,83986,83987,83990],{},"如果省略了 ",[119,83984,83985],{},"indexEnd","，则 ",[119,83988,83989],{},"substring()"," 提取字符直到字符串的末尾",[143,83992,83993,83994,83997,83998,83986,84000,84002],{},"如果 ",[119,83995,83996],{},"indexStart"," 等于 ",[119,83999,83985],{},[119,84001,83989],{}," 返回一个空字符串",[143,84004,83993,84005,84007,84008,83986,84010,84012],{},[119,84006,83996],{}," 大于 ",[119,84009,83985],{},[119,84011,83989],{}," 的效果就像交换了这两个参数一样",[143,84014,84015],{},"结束的索引号不包含想要截取的部分",[303,84017,84019],{"className":83260,"code":84018,"language":83262,"meta":308,"style":308},"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",[119,84020,84021,84033,84037,84071,84101,84105,84136,84140,84167,84197,84227,84231,84262],{"__ignoreMap":308},[312,84022,84023,84026,84028,84031],{"class":314,"line":315},[312,84024,84025],{"class":324},"const anyString ",[312,84027,336],{"class":1436},[312,84029,84030],{"class":339}," \"Mozilla\"",[312,84032,498],{"class":324},[312,84034,84035],{"class":314,"line":171},[312,84036,4205],{"emptyLinePlaceholder":1881},[312,84038,84039,84042,84044,84046,84048,84051,84053,84056,84058,84060,84062,84064,84066,84068],{"class":314,"line":274},[312,84040,84041],{"class":488},"console",[312,84043,2503],{"class":324},[312,84045,60029],{"class":488},[312,84047,1576],{"class":324},[312,84049,84050],{"class":488},"anyString",[312,84052,2503],{"class":324},[312,84054,84055],{"class":488},"substring",[312,84057,1576],{"class":324},[312,84059,858],{"class":488},[312,84061,733],{"class":324},[312,84063,1433],{"class":488},[312,84065,77025],{"class":324},[312,84067,35124],{"class":1436},[312,84069,84070],{"class":339}," 'M'\n",[312,84072,84073,84075,84077,84079,84081,84083,84085,84087,84089,84091,84093,84095,84097,84099],{"class":314,"line":298},[312,84074,84041],{"class":488},[312,84076,2503],{"class":324},[312,84078,60029],{"class":488},[312,84080,1576],{"class":324},[312,84082,84050],{"class":488},[312,84084,2503],{"class":324},[312,84086,84055],{"class":488},[312,84088,1576],{"class":324},[312,84090,1433],{"class":488},[312,84092,733],{"class":324},[312,84094,858],{"class":488},[312,84096,77025],{"class":324},[312,84098,35124],{"class":1436},[312,84100,84070],{"class":339},[312,84102,84103],{"class":314,"line":974},[312,84104,4205],{"emptyLinePlaceholder":1881},[312,84106,84107,84109,84111,84113,84115,84117,84119,84121,84123,84125,84127,84129,84131,84133],{"class":314,"line":980},[312,84108,84041],{"class":488},[312,84110,2503],{"class":324},[312,84112,60029],{"class":488},[312,84114,1576],{"class":324},[312,84116,84050],{"class":488},[312,84118,2503],{"class":324},[312,84120,84055],{"class":488},[312,84122,1576],{"class":324},[312,84124,858],{"class":488},[312,84126,733],{"class":324},[312,84128,2289],{"class":488},[312,84130,77025],{"class":324},[312,84132,35124],{"class":1436},[312,84134,84135],{"class":339}," 'Mozill'\n",[312,84137,84138],{"class":314,"line":997},[312,84139,4205],{"emptyLinePlaceholder":1881},[312,84141,84142,84144,84146,84148,84150,84152,84154,84156,84158,84160,84162,84164],{"class":314,"line":1003},[312,84143,84041],{"class":488},[312,84145,2503],{"class":324},[312,84147,60029],{"class":488},[312,84149,1576],{"class":324},[312,84151,84050],{"class":488},[312,84153,2503],{"class":324},[312,84155,84055],{"class":488},[312,84157,1576],{"class":324},[312,84159,2238],{"class":488},[312,84161,77025],{"class":324},[312,84163,35124],{"class":1436},[312,84165,84166],{"class":339}," 'lla'\n",[312,84168,84169,84171,84173,84175,84177,84179,84181,84183,84185,84187,84189,84191,84193,84195],{"class":314,"line":1020},[312,84170,84041],{"class":488},[312,84172,2503],{"class":324},[312,84174,60029],{"class":488},[312,84176,1576],{"class":324},[312,84178,84050],{"class":488},[312,84180,2503],{"class":324},[312,84182,84055],{"class":488},[312,84184,1576],{"class":324},[312,84186,2238],{"class":488},[312,84188,733],{"class":324},[312,84190,2314],{"class":488},[312,84192,77081],{"class":324},[312,84194,35124],{"class":1436},[312,84196,84166],{"class":339},[312,84198,84199,84201,84203,84205,84207,84209,84211,84213,84215,84217,84219,84221,84223,84225],{"class":314,"line":1026},[312,84200,84041],{"class":488},[312,84202,2503],{"class":324},[312,84204,60029],{"class":488},[312,84206,1576],{"class":324},[312,84208,84050],{"class":488},[312,84210,2503],{"class":324},[312,84212,84055],{"class":488},[312,84214,1576],{"class":324},[312,84216,2314],{"class":488},[312,84218,733],{"class":324},[312,84220,2238],{"class":488},[312,84222,77025],{"class":324},[312,84224,35124],{"class":1436},[312,84226,84166],{"class":339},[312,84228,84229],{"class":314,"line":3418},[312,84230,4205],{"emptyLinePlaceholder":1881},[312,84232,84233,84235,84237,84239,84241,84243,84245,84247,84249,84251,84253,84255,84257,84259],{"class":314,"line":3423},[312,84234,84041],{"class":488},[312,84236,2503],{"class":324},[312,84238,60029],{"class":488},[312,84240,1576],{"class":324},[312,84242,84050],{"class":488},[312,84244,2503],{"class":324},[312,84246,84055],{"class":488},[312,84248,1576],{"class":324},[312,84250,858],{"class":488},[312,84252,733],{"class":324},[312,84254,2314],{"class":488},[312,84256,77025],{"class":324},[312,84258,35124],{"class":1436},[312,84260,84261],{"class":339}," 'Mozilla'\n",[312,84263,84264,84266,84268,84270,84272,84274,84276,84278,84280,84282,84284,84286,84288,84290],{"class":314,"line":3429},[312,84265,84041],{"class":488},[312,84267,2503],{"class":324},[312,84269,60029],{"class":488},[312,84271,1576],{"class":324},[312,84273,84050],{"class":488},[312,84275,2503],{"class":324},[312,84277,84055],{"class":488},[312,84279,1576],{"class":324},[312,84281,858],{"class":488},[312,84283,733],{"class":324},[312,84285,2391],{"class":488},[312,84287,77025],{"class":324},[312,84289,35124],{"class":1436},[312,84291,84261],{"class":339},[1505,84293,84295],{"id":84294},"_410533-startswith","4.10.5.3.3 startsWith",[24,84297,84298,84301,84302,84307,84308,84310,84311],{},[119,84299,84300],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[27,84303,84304],{},[119,84305,84306],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[119,84309,3170],{}," 或 ",[119,84312,67798],{},[303,84314,84316],{"className":79267,"code":84315,"language":79269,"meta":308,"style":308},"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",[119,84317,84318,84330,84349,84354,84374],{"__ignoreMap":308},[312,84319,84320,84322,84325,84327],{"class":314,"line":315},[312,84321,8596],{"class":1436},[312,84323,84324],{"class":324}," str1 ",[312,84326,336],{"class":1436},[312,84328,84329],{"class":339}," \"Saturday night plans\"\n",[312,84331,84332,84334,84336,84339,84342,84344,84347],{"class":314,"line":171},[312,84333,79304],{"class":324},[312,84335,60029],{"class":332},[312,84337,84338],{"class":324},"(str1.",[312,84340,84341],{"class":332},"startsWith",[312,84343,1576],{"class":324},[312,84345,84346],{"class":339},"\"Sat\"",[312,84348,32293],{"class":324},[312,84350,84351],{"class":314,"line":274},[312,84352,84353],{"class":318},"\u002F\u002F Expected output: true\n",[312,84355,84356,84358,84360,84362,84364,84366,84368,84370,84372],{"class":314,"line":298},[312,84357,79304],{"class":324},[312,84359,60029],{"class":332},[312,84361,84338],{"class":324},[312,84363,84341],{"class":332},[312,84365,1576],{"class":324},[312,84367,84346],{"class":339},[312,84369,733],{"class":324},[312,84371,2021],{"class":488},[312,84373,32293],{"class":324},[312,84375,84376],{"class":314,"line":974},[312,84377,84378],{"class":318},"\u002F\u002F Expected output: false\n",[303,84380,84382],{"className":52428,"code":84381,"language":52430,"meta":308,"style":308},"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",[119,84383,84384,84389,84394,84398,84403,84408],{"__ignoreMap":308},[312,84385,84386],{"class":314,"line":315},[312,84387,84388],{"class":324},"startsWith(searchString)\n",[312,84390,84391],{"class":314,"line":171},[312,84392,84393],{"class":324},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[312,84395,84396],{"class":314,"line":274},[312,84397,4205],{"emptyLinePlaceholder":1881},[312,84399,84400],{"class":314,"line":298},[312,84401,84402],{"class":324},"const str3 = 'pink老师上课中'\n",[312,84404,84405],{"class":314,"line":974},[312,84406,84407],{"class":324},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[312,84409,84410],{"class":314,"line":980},[312,84411,84412],{"class":324},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[1505,84414,84416],{"id":84415},"_410534-includes","4.10.5.3.4 includes",[24,84418,84419],{},"includes(searchString) includes(searchString, position)",[140,84421,84422],{},[143,84423,84424],{},"searchString:",[24,84426,84427,84428,84430,84431,84436,84437,84442,84443,394,84446,84449,84450,84453],{},"一个要在 ",[119,84429,3110],{}," 中查找的字符串。",[164,84432,84435],{"href":84433,"rel":84434},"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",[168],"不能是正则表达式","。所有非正则表达式的值都会被",[164,84438,84441],{"href":84439,"rel":84440},"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",[168],"强制转换为字符串","，因此如果该参数被省略或传入 ",[119,84444,84445],{},"undefined",[119,84447,84448],{},"includes()"," 方法会在字符串中搜索 ",[119,84451,84452],{},"\"undefined\"","，这通常不是你想要的",[140,84455,84456],{"start":171},[143,84457,84458,2803],{},[119,84459,84460],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[24,84462,84463,84464,84467,84468],{},"在字符串中开始搜索 ",[119,84465,84466],{},"searchString"," 的位置。默认值为 ",[119,84469,858],{},[140,84471,84472],{"start":274},[143,84473,84474],{},"返回值：",[24,84476,84477,84478,84480,84481,84485,84486],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[119,84479,84466],{}," 为空字符串的情况），则返回 ",[27,84482,84483],{},[119,84484,3170],{}," ，否则返回 ",[27,84487,84488],{},[119,84489,67798],{},[140,84491,84492],{"start":298},[143,84493,84494],{},"异常：",[24,84496,83993,84497,15596,84499,84503],{},[119,84498,84466],{},[164,84500,84502],{"href":84433,"rel":84501},[168],"是一个正则表达式","，则会抛出",[24,84505,84506],{},"只要是有就是true，不需要非得以谁开头结尾",[303,84508,84510],{"className":79267,"code":84509,"language":79269,"meta":308,"style":308},"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",[119,84511,84512,84523,84546,84565,84585,84607,84626],{"__ignoreMap":308},[312,84513,84514,84516,84518,84520],{"class":314,"line":315},[312,84515,8596],{"class":1436},[312,84517,81547],{"class":324},[312,84519,336],{"class":1436},[312,84521,84522],{"class":339}," \"To be, or not to be, that is the question.\"\n",[312,84524,84525,84527,84529,84532,84535,84537,84540,84543],{"class":314,"line":171},[312,84526,79304],{"class":324},[312,84528,60029],{"class":332},[312,84530,84531],{"class":324},"(str.",[312,84533,84534],{"class":332},"includes",[312,84536,1576],{"class":324},[312,84538,84539],{"class":339},"\"To be\"",[312,84541,84542],{"class":324},"))",[312,84544,84545],{"class":318},"  \u002F\u002F true\n",[312,84547,84548,84550,84552,84554,84556,84558,84561,84563],{"class":314,"line":274},[312,84549,79304],{"class":324},[312,84551,60029],{"class":332},[312,84553,84531],{"class":324},[312,84555,84534],{"class":332},[312,84557,1576],{"class":324},[312,84559,84560],{"class":339},"\"question\"",[312,84562,84542],{"class":324},[312,84564,84545],{"class":318},[312,84566,84567,84569,84571,84573,84575,84577,84580,84582],{"class":314,"line":298},[312,84568,79304],{"class":324},[312,84570,60029],{"class":332},[312,84572,84531],{"class":324},[312,84574,84534],{"class":332},[312,84576,1576],{"class":324},[312,84578,84579],{"class":339},"\"nonexistent\"",[312,84581,84542],{"class":324},[312,84583,84584],{"class":318},"  \u002F\u002F false\n",[312,84586,84587,84589,84591,84593,84595,84597,84599,84601,84603,84605],{"class":314,"line":974},[312,84588,79304],{"class":324},[312,84590,60029],{"class":332},[312,84592,84531],{"class":324},[312,84594,84534],{"class":332},[312,84596,1576],{"class":324},[312,84598,84539],{"class":339},[312,84600,733],{"class":324},[312,84602,1433],{"class":488},[312,84604,84542],{"class":324},[312,84606,84584],{"class":318},[312,84608,84609,84611,84613,84615,84617,84619,84622,84624],{"class":314,"line":980},[312,84610,79304],{"class":324},[312,84612,60029],{"class":332},[312,84614,84531],{"class":324},[312,84616,84534],{"class":332},[312,84618,1576],{"class":324},[312,84620,84621],{"class":339},"\"TO BE\"",[312,84623,84542],{"class":324},[312,84625,84584],{"class":318},[312,84627,84628,84630,84632,84634,84636,84638,84640,84642],{"class":314,"line":997},[312,84629,79304],{"class":324},[312,84631,60029],{"class":332},[312,84633,84531],{"class":324},[312,84635,84534],{"class":332},[312,84637,1576],{"class":324},[312,84639,495],{"class":339},[312,84641,84542],{"class":324},[312,84643,84545],{"class":318},[1505,84645,84647],{"id":84646},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[303,84649,84651],{"className":54853,"code":84650,"language":54855,"meta":308,"style":308},"\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",[119,84652,84653,84661,84669,84674,84679,84684,84689,84694,84702],{"__ignoreMap":308},[312,84654,84655,84657,84659],{"class":314,"line":315},[312,84656,325],{"class":324},[312,84658,53586],{"class":328},[312,84660,343],{"class":324},[312,84662,84663,84665,84667],{"class":314,"line":171},[312,84664,53930],{"class":324},[312,84666,53599],{"class":328},[312,84668,343],{"class":324},[312,84670,84671],{"class":314,"line":274},[312,84672,84673],{"class":324},"    const num = 10\n",[312,84675,84676],{"class":314,"line":298},[312,84677,84678],{"class":324},"    \u002F\u002F 强制转换\n",[312,84680,84681],{"class":314,"line":974},[312,84682,84683],{"class":324},"    console.log(String(num))\n",[312,84685,84686],{"class":314,"line":980},[312,84687,84688],{"class":324},"    \u002F\u002F toString()方法转换\n",[312,84690,84691],{"class":314,"line":997},[312,84692,84693],{"class":324},"    console.log(num.toString())\n",[312,84695,84696,84698,84700],{"class":314,"line":1003},[312,84697,54203],{"class":324},[312,84699,53599],{"class":328},[312,84701,343],{"class":324},[312,84703,84704,84706,84708],{"class":314,"line":1020},[312,84705,353],{"class":324},[312,84707,53586],{"class":328},[312,84709,343],{"class":324},[1505,84711,84713],{"id":84712},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[24,84715,84716],{},[19,84717],{"alt":308,"src":84718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[303,84720,84722],{"className":52428,"code":84721,"language":52430,"meta":308,"style":308},"\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",[119,84723,84724,84734,84748,84752,84760,84774,84794,84806,84814,84818,84826,84838,84846,84858,84863,84868,84873,84920,84936,84944,84952,84956],{"__ignoreMap":308},[312,84725,84726,84728,84730,84732],{"class":314,"line":315},[312,84727,53092],{"class":324},[312,84729,53095],{"class":328},[312,84731,53098],{"class":332},[312,84733,343],{"class":324},[312,84735,84736,84738,84740,84742,84744,84746],{"class":314,"line":171},[312,84737,325],{"class":324},[312,84739,52430],{"class":328},[312,84741,53109],{"class":332},[312,84743,336],{"class":324},[312,84745,53114],{"class":339},[312,84747,343],{"class":324},[312,84749,84750],{"class":314,"line":274},[312,84751,4205],{"emptyLinePlaceholder":1881},[312,84753,84754,84756,84758],{"class":314,"line":298},[312,84755,325],{"class":324},[312,84757,53127],{"class":328},[312,84759,343],{"class":324},[312,84761,84762,84764,84766,84768,84770,84772],{"class":314,"line":974},[312,84763,53930],{"class":324},[312,84765,53137],{"class":328},[312,84767,53140],{"class":332},[312,84769,336],{"class":324},[312,84771,53145],{"class":339},[312,84773,343],{"class":324},[312,84775,84776,84778,84780,84782,84784,84786,84788,84790,84792],{"class":314,"line":980},[312,84777,53930],{"class":324},[312,84779,53137],{"class":328},[312,84781,16721],{"class":332},[312,84783,336],{"class":324},[312,84785,53184],{"class":339},[312,84787,53164],{"class":332},[312,84789,336],{"class":324},[312,84791,53191],{"class":339},[312,84793,343],{"class":324},[312,84795,84796,84798,84800,84802,84804],{"class":314,"line":997},[312,84797,53930],{"class":324},[312,84799,628],{"class":328},[312,84801,53202],{"class":324},[312,84803,628],{"class":328},[312,84805,343],{"class":324},[312,84807,84808,84810,84812],{"class":314,"line":1003},[312,84809,353],{"class":324},[312,84811,53127],{"class":328},[312,84813,343],{"class":324},[312,84815,84816],{"class":314,"line":1020},[312,84817,4205],{"emptyLinePlaceholder":1881},[312,84819,84820,84822,84824],{"class":314,"line":1026},[312,84821,325],{"class":324},[312,84823,53586],{"class":328},[312,84825,343],{"class":324},[312,84827,84828,84830,84832,84834,84836],{"class":314,"line":3418},[312,84829,53930],{"class":324},[312,84831,329],{"class":328},[312,84833,57096],{"class":324},[312,84835,329],{"class":328},[312,84837,343],{"class":324},[312,84839,84840,84842,84844],{"class":314,"line":3423},[312,84841,53930],{"class":324},[312,84843,53599],{"class":328},[312,84845,343],{"class":324},[312,84847,84848,84850,84853,84855],{"class":314,"line":3429},[312,84849,13024],{"class":1436},[312,84851,84852],{"class":488}," gift",[312,84854,15366],{"class":1436},[312,84856,84857],{"class":339}," '50g的茶叶，清洗球'\n",[312,84859,84860],{"class":314,"line":3434},[312,84861,84862],{"class":318},"    \u002F\u002F 1.把字符串拆分为数组\n",[312,84864,84865],{"class":314,"line":3448},[312,84866,84867],{"class":318},"    \u002F\u002F console.log(gift.split(','))\n",[312,84869,84870],{"class":314,"line":3453},[312,84871,84872],{"class":318},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[312,84874,84875,84877,84879,84881,84884,84887,84889,84892,84894,84896,84898,84900,84902,84905,84907,84910,84912,84914,84916,84918],{"class":314,"line":3459},[312,84876,13024],{"class":1436},[312,84878,75691],{"class":488},[312,84880,15366],{"class":1436},[312,84882,84883],{"class":324}," gift.",[312,84885,84886],{"class":332},"split",[312,84888,1576],{"class":324},[312,84890,84891],{"class":339},"'，'",[312,84893,32622],{"class":324},[312,84895,75816],{"class":332},[312,84897,1576],{"class":324},[312,84899,81567],{"class":1579},[312,84901,81570],{"class":1436},[312,84903,84904],{"class":339}," `\u003Cspan>【赠品】${",[312,84906,81567],{"class":324},[312,84908,84909],{"class":339},"}\u003C\u002Fspan>\u003Cbr>`",[312,84911,32622],{"class":324},[312,84913,75995],{"class":332},[312,84915,1576],{"class":324},[312,84917,76000],{"class":339},[312,84919,1959],{"class":324},[312,84921,84922,84924,84926,84928,84930,84932,84934],{"class":314,"line":3480},[312,84923,54193],{"class":324},[312,84925,56183],{"class":332},[312,84927,1576],{"class":324},[312,84929,83702],{"class":339},[312,84931,76021],{"class":324},[312,84933,336],{"class":1436},[312,84935,75757],{"class":324},[312,84937,84938,84940,84942],{"class":314,"line":3485},[312,84939,54203],{"class":324},[312,84941,53599],{"class":328},[312,84943,343],{"class":324},[312,84945,84946,84948,84950],{"class":314,"line":3499},[312,84947,353],{"class":324},[312,84949,53586],{"class":328},[312,84951,343],{"class":324},[312,84953,84954],{"class":314,"line":3504},[312,84955,4205],{"emptyLinePlaceholder":1881},[312,84957,84958,84960,84962],{"class":314,"line":3533},[312,84959,353],{"class":324},[312,84961,52430],{"class":328},[312,84963,343],{"class":324},[23796,84965,84967],{"id":84966},"_41054-number","4.10.5.4 Number",[24,84969,84970],{},[19,84971],{"alt":308,"src":84972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[24,84974,84975],{},"整数也可以进行toFixed来保留小数",[24,84977,84978],{},"比如：",[24,84980,84981],{},"const price=10",[24,84983,84984],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[23796,84986,84988],{"id":84987},"_41055-购物车展示","4.10.5.5 购物车展示",[24,84990,84991],{},[19,84992],{"alt":308,"src":84993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[303,84995,84997],{"className":52428,"code":84996,"language":52430,"meta":308,"style":308},"\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",[119,84998,84999,85009,85023,85027,85035,85049,85069,85081,85089,85095,85105,85115,85125,85129,85133,85139,85151,85165,85169,85173,85179,85191,85207,85217,85233,85237,85241,85247,85257,85267,85271,85275,85283,85295,85307,85319,85323,85327,85335,85347,85351,85355,85366,85376,85388,85400,85410,85414,85418,85426,85435,85447,85457,85467,85471,85475,85483,85492,85499,85509,85521,85525,85529,85538,85548,85559,85571,85583,85587,85591,85600,85610,85621,85625,85629,85635,85647,85659,85669,85679,85697,85709,85713,85717,85726,85738,85748,85758,85770,85774,85782,85790,85794,85802,85816,85824,85838,85866,85874,85882,85892,85896,85904,85912,85921,85929,85938,85948,85952,85956,85964,85972,85981,85989,85997,86010,86014,86018,86026,86034,86043,86051,86059,86074,86078,86082,86090,86098,86107,86115,86123,86137,86145,86149,86153,86158,86184,86189,86226,86231,86254,86259,86313,86318,86354,86358,86364,86369,86378,86392,86401,86420,86429,86439,86444,86449,86462,86467,86521,86547,86555,86563,86567],{"__ignoreMap":308},[312,85000,85001,85003,85005,85007],{"class":314,"line":315},[312,85002,53092],{"class":324},[312,85004,53095],{"class":328},[312,85006,53098],{"class":332},[312,85008,343],{"class":324},[312,85010,85011,85013,85015,85017,85019,85021],{"class":314,"line":171},[312,85012,325],{"class":324},[312,85014,52430],{"class":328},[312,85016,53109],{"class":332},[312,85018,336],{"class":324},[312,85020,53114],{"class":339},[312,85022,343],{"class":324},[312,85024,85025],{"class":314,"line":274},[312,85026,4205],{"emptyLinePlaceholder":1881},[312,85028,85029,85031,85033],{"class":314,"line":298},[312,85030,325],{"class":324},[312,85032,53127],{"class":328},[312,85034,343],{"class":324},[312,85036,85037,85039,85041,85043,85045,85047],{"class":314,"line":974},[312,85038,53930],{"class":324},[312,85040,53137],{"class":328},[312,85042,53140],{"class":332},[312,85044,336],{"class":324},[312,85046,53145],{"class":339},[312,85048,343],{"class":324},[312,85050,85051,85053,85055,85057,85059,85061,85063,85065,85067],{"class":314,"line":980},[312,85052,53930],{"class":324},[312,85054,53137],{"class":328},[312,85056,16721],{"class":332},[312,85058,336],{"class":324},[312,85060,53184],{"class":339},[312,85062,53164],{"class":332},[312,85064,336],{"class":324},[312,85066,53191],{"class":339},[312,85068,343],{"class":324},[312,85070,85071,85073,85075,85077,85079],{"class":314,"line":997},[312,85072,53930],{"class":324},[312,85074,628],{"class":328},[312,85076,53202],{"class":324},[312,85078,628],{"class":328},[312,85080,343],{"class":324},[312,85082,85083,85085,85087],{"class":314,"line":1003},[312,85084,53930],{"class":324},[312,85086,1856],{"class":328},[312,85088,343],{"class":324},[312,85090,85091,85093],{"class":314,"line":1020},[312,85092,8207],{"class":328},[312,85094,483],{"class":324},[312,85096,85097,85099,85101,85103],{"class":314,"line":1026},[312,85098,56479],{"class":488},[312,85100,492],{"class":324},[312,85102,858],{"class":488},[312,85104,498],{"class":324},[312,85106,85107,85109,85111,85113],{"class":314,"line":3418},[312,85108,56490],{"class":488},[312,85110,492],{"class":324},[312,85112,858],{"class":488},[312,85114,498],{"class":324},[312,85116,85117,85119,85121,85123],{"class":314,"line":3423},[312,85118,74368],{"class":488},[312,85120,492],{"class":324},[312,85122,62287],{"class":488},[312,85124,498],{"class":324},[312,85126,85127],{"class":314,"line":3429},[312,85128,3992],{"class":324},[312,85130,85131],{"class":314,"line":3434},[312,85132,4205],{"emptyLinePlaceholder":1881},[312,85134,85135,85137],{"class":314,"line":3448},[312,85136,63901],{"class":332},[312,85138,483],{"class":324},[312,85140,85141,85143,85145,85147,85149],{"class":314,"line":3453},[312,85142,56554],{"class":488},[312,85144,492],{"class":324},[312,85146,80346],{"class":488},[312,85148,1437],{"class":1436},[312,85150,498],{"class":324},[312,85152,85153,85155,85157,85159,85161,85163],{"class":314,"line":3459},[312,85154,56490],{"class":488},[312,85156,492],{"class":324},[312,85158,2256],{"class":488},[312,85160,1437],{"class":1436},[312,85162,861],{"class":488},[312,85164,498],{"class":324},[312,85166,85167],{"class":314,"line":3480},[312,85168,3992],{"class":324},[312,85170,85171],{"class":314,"line":3485},[312,85172,4205],{"emptyLinePlaceholder":1881},[312,85174,85175,85177],{"class":314,"line":3499},[312,85176,80397],{"class":332},[312,85178,483],{"class":324},[312,85180,85181,85183,85185,85187,85189],{"class":314,"line":3504},[312,85182,56479],{"class":488},[312,85184,492],{"class":324},[312,85186,2520],{"class":488},[312,85188,1437],{"class":1436},[312,85190,498],{"class":324},[312,85192,85193,85195,85197,85199,85201,85203,85205],{"class":314,"line":3533},[312,85194,63638],{"class":488},[312,85196,492],{"class":324},[312,85198,29917],{"class":488},[312,85200,80452],{"class":488},[312,85202,80455],{"class":488},[312,85204,2640],{"class":1436},[312,85206,498],{"class":324},[312,85208,85209,85211,85213,85215],{"class":314,"line":3538},[312,85210,56791],{"class":488},[312,85212,492],{"class":324},[312,85214,53268],{"class":488},[312,85216,498],{"class":324},[312,85218,85219,85221,85223,85225,85227,85229,85231],{"class":314,"line":3555},[312,85220,63755],{"class":488},[312,85222,492],{"class":324},[312,85224,1433],{"class":488},[312,85226,1437],{"class":1436},[312,85228,1440],{"class":488},[312,85230,64022],{"class":488},[312,85232,498],{"class":324},[312,85234,85235],{"class":314,"line":3560},[312,85236,3992],{"class":324},[312,85238,85239],{"class":314,"line":3565},[312,85240,4205],{"emptyLinePlaceholder":1881},[312,85242,85243,85245],{"class":314,"line":3570},[312,85244,80515],{"class":332},[312,85246,483],{"class":324},[312,85248,85249,85251,85253,85255],{"class":314,"line":3584},[312,85250,63803],{"class":488},[312,85252,492],{"class":324},[312,85254,63808],{"class":488},[312,85256,498],{"class":324},[312,85258,85259,85261,85263,85265],{"class":314,"line":3589},[312,85260,56666],{"class":488},[312,85262,492],{"class":324},[312,85264,63596],{"class":488},[312,85266,498],{"class":324},[312,85268,85269],{"class":314,"line":4382},[312,85270,3992],{"class":324},[312,85272,85273],{"class":314,"line":4396},[312,85274,4205],{"emptyLinePlaceholder":1881},[312,85276,85277,85279,85281],{"class":314,"line":4404},[312,85278,80397],{"class":332},[312,85280,57397],{"class":328},[312,85282,483],{"class":324},[312,85284,85285,85287,85289,85291,85293],{"class":314,"line":4409},[312,85286,56554],{"class":488},[312,85288,492],{"class":324},[312,85290,2557],{"class":488},[312,85292,1437],{"class":1436},[312,85294,498],{"class":324},[312,85296,85297,85299,85301,85303,85305],{"class":314,"line":4415},[312,85298,56568],{"class":488},[312,85300,492],{"class":324},[312,85302,2557],{"class":488},[312,85304,1437],{"class":1436},[312,85306,498],{"class":324},[312,85308,85309,85311,85313,85315,85317],{"class":314,"line":4421},[312,85310,63528],{"class":488},[312,85312,492],{"class":324},[312,85314,2264],{"class":488},[312,85316,1437],{"class":1436},[312,85318,498],{"class":324},[312,85320,85321],{"class":314,"line":4426},[312,85322,3992],{"class":324},[312,85324,85325],{"class":314,"line":9751},[312,85326,4205],{"emptyLinePlaceholder":1881},[312,85328,85329,85331,85333],{"class":314,"line":9775},[312,85330,80397],{"class":332},[312,85332,64082],{"class":332},[312,85334,483],{"class":324},[312,85336,85337,85339,85341,85343,85345],{"class":314,"line":9780},[312,85338,56554],{"class":488},[312,85340,492],{"class":324},[312,85342,3528],{"class":488},[312,85344,1437],{"class":1436},[312,85346,498],{"class":324},[312,85348,85349],{"class":314,"line":9786},[312,85350,3992],{"class":324},[312,85352,85353],{"class":314,"line":9813},[312,85354,4205],{"emptyLinePlaceholder":1881},[312,85356,85357,85359,85361,85364],{"class":314,"line":9818},[312,85358,80397],{"class":332},[312,85360,64082],{"class":332},[312,85362,85363],{"class":332}," .tag",[312,85365,483],{"class":324},[312,85367,85368,85370,85372,85374],{"class":314,"line":9824},[312,85369,56791],{"class":488},[312,85371,492],{"class":324},[312,85373,508],{"class":488},[312,85375,498],{"class":324},[312,85377,85378,85380,85382,85384,85386],{"class":314,"line":9836},[312,85379,56479],{"class":488},[312,85381,492],{"class":324},[312,85383,2027],{"class":488},[312,85385,1437],{"class":1436},[312,85387,498],{"class":324},[312,85389,85390,85392,85394,85396,85398],{"class":314,"line":9848},[312,85391,56704],{"class":488},[312,85393,492],{"class":324},[312,85395,2443],{"class":488},[312,85397,1437],{"class":1436},[312,85399,498],{"class":324},[312,85401,85402,85404,85406,85408],{"class":314,"line":9860},[312,85403,59198],{"class":488},[312,85405,492],{"class":324},[312,85407,63848],{"class":488},[312,85409,498],{"class":324},[312,85411,85412],{"class":314,"line":11519},[312,85413,3992],{"class":324},[312,85415,85416],{"class":314,"line":11544},[312,85417,4205],{"emptyLinePlaceholder":1881},[312,85419,85420,85422,85424],{"class":314,"line":11567},[312,85421,80397],{"class":332},[312,85423,80689],{"class":332},[312,85425,33261],{"class":324},[312,85427,85428,85430,85433],{"class":314,"line":11591},[312,85429,80397],{"class":332},[312,85431,85432],{"class":332}," .sub-total",[312,85434,483],{"class":324},[312,85436,85437,85439,85441,85443,85445],{"class":314,"line":11596},[312,85438,56704],{"class":488},[312,85440,492],{"class":324},[312,85442,2595],{"class":488},[312,85444,1437],{"class":1436},[312,85446,498],{"class":324},[312,85448,85449,85451,85453,85455],{"class":314,"line":11601},[312,85450,59198],{"class":488},[312,85452,492],{"class":324},[312,85454,80712],{"class":488},[312,85456,498],{"class":324},[312,85458,85459,85461,85463,85465],{"class":314,"line":11606},[312,85460,63615],{"class":488},[312,85462,492],{"class":324},[312,85464,1433],{"class":488},[312,85466,498],{"class":324},[312,85468,85469],{"class":314,"line":11615},[312,85470,3992],{"class":324},[312,85472,85473],{"class":314,"line":11620},[312,85474,4205],{"emptyLinePlaceholder":1881},[312,85476,85477,85479,85481],{"class":314,"line":11626},[312,85478,80397],{"class":332},[312,85480,80729],{"class":332},[312,85482,33261],{"class":324},[312,85484,85485,85487,85490],{"class":314,"line":11647},[312,85486,80397],{"class":332},[312,85488,85489],{"class":332}," .sub-total::before",[312,85491,33261],{"class":324},[312,85493,85494,85497],{"class":314,"line":11653},[312,85495,85496],{"class":332},"    .amount::before",[312,85498,483],{"class":324},[312,85500,85501,85503,85505,85507],{"class":314,"line":11667},[312,85502,80736],{"class":488},[312,85504,492],{"class":324},[312,85506,80741],{"class":339},[312,85508,498],{"class":324},[312,85510,85511,85513,85515,85517,85519],{"class":314,"line":11673},[312,85512,56704],{"class":488},[312,85514,492],{"class":324},[312,85516,2443],{"class":488},[312,85518,1437],{"class":1436},[312,85520,498],{"class":324},[312,85522,85523],{"class":314,"line":11700},[312,85524,3992],{"class":324},[312,85526,85527],{"class":314,"line":11709},[312,85528,4205],{"emptyLinePlaceholder":1881},[312,85530,85531,85533,85536],{"class":314,"line":11715},[312,85532,80397],{"class":332},[312,85534,85535],{"class":332}," .spec",[312,85537,483],{"class":324},[312,85539,85540,85542,85544,85546],{"class":314,"line":11723},[312,85541,63615],{"class":488},[312,85543,492],{"class":324},[312,85545,2027],{"class":488},[312,85547,498],{"class":324},[312,85549,85550,85552,85554,85557],{"class":314,"line":11728},[312,85551,59198],{"class":488},[312,85553,492],{"class":324},[312,85555,85556],{"class":488},"#888",[312,85558,498],{"class":324},[312,85560,85561,85563,85565,85567,85569],{"class":314,"line":18404},[312,85562,56704],{"class":488},[312,85564,492],{"class":324},[312,85566,2494],{"class":488},[312,85568,1437],{"class":1436},[312,85570,498],{"class":324},[312,85572,85573,85575,85577,85579,85581],{"class":314,"line":18410},[312,85574,63778],{"class":488},[312,85576,492],{"class":324},[312,85578,1546],{"class":488},[312,85580,1437],{"class":1436},[312,85582,498],{"class":324},[312,85584,85585],{"class":314,"line":18433},[312,85586,3992],{"class":324},[312,85588,85589],{"class":314,"line":18439},[312,85590,4205],{"emptyLinePlaceholder":1881},[312,85592,85593,85595,85598],{"class":314,"line":18462},[312,85594,80397],{"class":332},[312,85596,85597],{"class":332}," .count",[312,85599,483],{"class":324},[312,85601,85602,85604,85606,85608],{"class":314,"line":18476},[312,85603,63615],{"class":488},[312,85605,492],{"class":324},[312,85607,1433],{"class":488},[312,85609,498],{"class":324},[312,85611,85612,85614,85616,85619],{"class":314,"line":18496},[312,85613,59198],{"class":488},[312,85615,492],{"class":324},[312,85617,85618],{"class":488},"#aaa",[312,85620,498],{"class":324},[312,85622,85623],{"class":314,"line":18502},[312,85624,3992],{"class":324},[312,85626,85627],{"class":314,"line":18513},[312,85628,4205],{"emptyLinePlaceholder":1881},[312,85630,85631,85633],{"class":314,"line":18536},[312,85632,74247],{"class":332},[312,85634,483],{"class":324},[312,85636,85637,85639,85641,85643,85645],{"class":314,"line":18558},[312,85638,56554],{"class":488},[312,85640,492],{"class":324},[312,85642,80346],{"class":488},[312,85644,1437],{"class":1436},[312,85646,498],{"class":324},[312,85648,85649,85651,85653,85655,85657],{"class":314,"line":18563},[312,85650,56490],{"class":488},[312,85652,492],{"class":324},[312,85654,858],{"class":488},[312,85656,861],{"class":488},[312,85658,498],{"class":324},[312,85660,85661,85663,85665,85667],{"class":314,"line":18569},[312,85662,56791],{"class":488},[312,85664,492],{"class":324},[312,85666,53268],{"class":488},[312,85668,498],{"class":324},[312,85670,85671,85673,85675,85677],{"class":314,"line":18583},[312,85672,56802],{"class":488},[312,85674,492],{"class":324},[312,85676,53368],{"class":488},[312,85678,498],{"class":324},[312,85680,85681,85684,85686,85688,85690,85692,85695],{"class":314,"line":18596},[312,85682,85683],{"class":488},"      border-top",[312,85685,492],{"class":324},[312,85687,1433],{"class":488},[312,85689,1437],{"class":1436},[312,85691,1440],{"class":488},[312,85693,85694],{"class":488}," #4e4e4e",[312,85696,498],{"class":324},[312,85698,85699,85701,85703,85705,85707],{"class":314,"line":18601},[312,85700,56479],{"class":488},[312,85702,492],{"class":324},[312,85704,1546],{"class":488},[312,85706,1437],{"class":1436},[312,85708,498],{"class":324},[312,85710,85711],{"class":314,"line":18615},[312,85712,3992],{"class":324},[312,85714,85715],{"class":314,"line":18620},[312,85716,4205],{"emptyLinePlaceholder":1881},[312,85718,85719,85721,85724],{"class":314,"line":18626},[312,85720,74247],{"class":332},[312,85722,85723],{"class":332}," .amount",[312,85725,483],{"class":324},[312,85727,85728,85730,85732,85734,85736],{"class":314,"line":18631},[312,85729,56704],{"class":488},[312,85731,492],{"class":324},[312,85733,2595],{"class":488},[312,85735,1437],{"class":1436},[312,85737,498],{"class":324},[312,85739,85740,85742,85744,85746],{"class":314,"line":18645},[312,85741,59198],{"class":488},[312,85743,492],{"class":324},[312,85745,80712],{"class":488},[312,85747,498],{"class":324},[312,85749,85750,85752,85754,85756],{"class":314,"line":18650},[312,85751,64112],{"class":488},[312,85753,492],{"class":324},[312,85755,53280],{"class":488},[312,85757,498],{"class":324},[312,85759,85760,85762,85764,85766,85768],{"class":314,"line":18655},[312,85761,63528],{"class":488},[312,85763,492],{"class":324},[312,85765,2601],{"class":488},[312,85767,1437],{"class":1436},[312,85769,498],{"class":324},[312,85771,85772],{"class":314,"line":18669},[312,85773,3992],{"class":324},[312,85775,85776,85778,85780],{"class":314,"line":18681},[312,85777,54203],{"class":324},[312,85779,1856],{"class":328},[312,85781,343],{"class":324},[312,85783,85784,85786,85788],{"class":314,"line":18686},[312,85785,353],{"class":324},[312,85787,53127],{"class":328},[312,85789,343],{"class":324},[312,85791,85792],{"class":314,"line":18699},[312,85793,4205],{"emptyLinePlaceholder":1881},[312,85795,85796,85798,85800],{"class":314,"line":18704},[312,85797,325],{"class":324},[312,85799,53586],{"class":328},[312,85801,343],{"class":324},[312,85803,85804,85806,85808,85810,85812,85814],{"class":314,"line":18709},[312,85805,53930],{"class":324},[312,85807,329],{"class":328},[312,85809,333],{"class":332},[312,85811,336],{"class":324},[312,85813,64386],{"class":339},[312,85815,343],{"class":324},[312,85817,85818,85820,85822],{"class":314,"line":18714},[312,85819,54203],{"class":324},[312,85821,329],{"class":328},[312,85823,343],{"class":324},[312,85825,85826,85828,85830,85832,85834,85836],{"class":314,"line":18727},[312,85827,53930],{"class":324},[312,85829,329],{"class":328},[312,85831,333],{"class":332},[312,85833,336],{"class":324},[312,85835,64358],{"class":339},[312,85837,343],{"class":324},[312,85839,85840,85842,85844,85847,85849,85851,85853,85856,85858,85860,85862,85864],{"class":314,"line":18732},[312,85841,53134],{"class":324},[312,85843,329],{"class":328},[312,85845,85846],{"class":324},">合计：\u003C",[312,85848,312],{"class":328},[312,85850,333],{"class":332},[312,85852,336],{"class":324},[312,85854,85855],{"class":339},"\"amount\"",[312,85857,57096],{"class":324},[312,85859,312],{"class":328},[312,85861,57096],{"class":324},[312,85863,329],{"class":328},[312,85865,343],{"class":324},[312,85867,85868,85870,85872],{"class":314,"line":34428},[312,85869,54203],{"class":324},[312,85871,329],{"class":328},[312,85873,343],{"class":324},[312,85875,85876,85878,85880],{"class":314,"line":34434},[312,85877,53930],{"class":324},[312,85879,53599],{"class":328},[312,85881,343],{"class":324},[312,85883,85884,85886,85888,85890],{"class":314,"line":34440},[312,85885,13024],{"class":1436},[312,85887,81149],{"class":488},[312,85889,15366],{"class":1436},[312,85891,57229],{"class":324},[312,85893,85894],{"class":314,"line":34446},[312,85895,81158],{"class":324},[312,85897,85898,85900,85902],{"class":314,"line":34452},[312,85899,81163],{"class":324},[312,85901,81166],{"class":339},[312,85903,33261],{"class":324},[312,85905,85906,85908,85910],{"class":314,"line":34463},[312,85907,81173],{"class":324},[312,85909,81176],{"class":339},[312,85911,33261],{"class":324},[312,85913,85914,85916,85919],{"class":314,"line":34469},[312,85915,81183],{"class":324},[312,85917,85918],{"class":488},"289.9",[312,85920,33261],{"class":324},[312,85922,85923,85925,85927],{"class":314,"line":34489},[312,85924,81193],{"class":324},[312,85926,81196],{"class":339},[312,85928,33261],{"class":324},[312,85930,85931,85934,85936],{"class":314,"line":34495},[312,85932,85933],{"class":324},"        count: ",[312,85935,2027],{"class":488},[312,85937,33261],{"class":324},[312,85939,85940,85943,85946],{"class":314,"line":34506},[312,85941,85942],{"class":324},"        spec: { color: ",[312,85944,85945],{"class":339},"'白色'",[312,85947,57386],{"class":324},[312,85949,85950],{"class":314,"line":34512},[312,85951,79664],{"class":324},[312,85953,85954],{"class":314,"line":34518},[312,85955,81158],{"class":324},[312,85957,85958,85960,85962],{"class":314,"line":34524},[312,85959,81163],{"class":324},[312,85961,81257],{"class":339},[312,85963,33261],{"class":324},[312,85965,85966,85968,85970],{"class":314,"line":34530},[312,85967,81173],{"class":324},[312,85969,81266],{"class":339},[312,85971,33261],{"class":324},[312,85973,85974,85976,85979],{"class":314,"line":34536},[312,85975,81183],{"class":324},[312,85977,85978],{"class":488},"109.8",[312,85980,33261],{"class":324},[312,85982,85983,85985,85987],{"class":314,"line":34542},[312,85984,81193],{"class":324},[312,85986,81284],{"class":339},[312,85988,33261],{"class":324},[312,85990,85991,85993,85995],{"class":314,"line":34548},[312,85992,85933],{"class":324},[312,85994,2021],{"class":488},[312,85996,33261],{"class":324},[312,85998,85999,86002,86004,86006,86008],{"class":314,"line":34568},[312,86000,86001],{"class":324},"        spec: { size: ",[312,86003,83674],{"class":339},[312,86005,57246],{"class":324},[312,86007,83679],{"class":339},[312,86009,57386],{"class":324},[312,86011,86012],{"class":314,"line":34574},[312,86013,79664],{"class":324},[312,86015,86016],{"class":314,"line":34590},[312,86017,81158],{"class":324},[312,86019,86020,86022,86024],{"class":314,"line":34596},[312,86021,81163],{"class":324},[312,86023,81301],{"class":339},[312,86025,33261],{"class":324},[312,86027,86028,86030,86032],{"class":314,"line":34610},[312,86029,81173],{"class":324},[312,86031,81310],{"class":339},[312,86033,33261],{"class":324},[312,86035,86036,86038,86041],{"class":314,"line":34616},[312,86037,81183],{"class":324},[312,86039,86040],{"class":488},"488",[312,86042,33261],{"class":324},[312,86044,86045,86047,86049],{"class":314,"line":34631},[312,86046,81193],{"class":324},[312,86048,81328],{"class":339},[312,86050,33261],{"class":324},[312,86052,86053,86055,86057],{"class":314,"line":34637},[312,86054,85933],{"class":324},[312,86056,1433],{"class":488},[312,86058,33261],{"class":324},[312,86060,86061,86063,86066,86069,86072],{"class":314,"line":34646},[312,86062,85942],{"class":324},[312,86064,86065],{"class":339},"'青色'",[312,86067,86068],{"class":324},", sum: ",[312,86070,86071],{"class":339},"'一大四小'",[312,86073,57386],{"class":324},[312,86075,86076],{"class":314,"line":34652},[312,86077,79664],{"class":324},[312,86079,86080],{"class":314,"line":34661},[312,86081,81158],{"class":324},[312,86083,86084,86086,86088],{"class":314,"line":34667},[312,86085,81163],{"class":324},[312,86087,81345],{"class":339},[312,86089,33261],{"class":324},[312,86091,86092,86094,86096],{"class":314,"line":34673},[312,86093,81173],{"class":324},[312,86095,81354],{"class":339},[312,86097,33261],{"class":324},[312,86099,86100,86102,86105],{"class":314,"line":34682},[312,86101,81183],{"class":324},[312,86103,86104],{"class":488},"139",[312,86106,33261],{"class":324},[312,86108,86109,86111,86113],{"class":314,"line":34688},[312,86110,81193],{"class":324},[312,86112,81372],{"class":339},[312,86114,33261],{"class":324},[312,86116,86117,86119,86121],{"class":314,"line":34699},[312,86118,85933],{"class":324},[312,86120,1433],{"class":488},[312,86122,33261],{"class":324},[312,86124,86125,86127,86130,86132,86135],{"class":314,"line":34705},[312,86126,86001],{"class":324},[312,86128,86129],{"class":339},"'小号'",[312,86131,57246],{"class":324},[312,86133,86134],{"class":339},"'紫色'",[312,86136,57252],{"class":324},[312,86138,86139,86142],{"class":314,"line":34724},[312,86140,86141],{"class":324},"        gift: ",[312,86143,86144],{"class":339},"'50g茶叶,清洗球'\n",[312,86146,86147],{"class":314,"line":34730},[312,86148,54184],{"class":324},[312,86150,86151],{"class":314,"line":34741},[312,86152,54895],{"class":324},[312,86154,86155],{"class":314,"line":34747},[312,86156,86157],{"class":318},"    \u002F\u002F  1.根据数据渲染页面\n",[312,86159,86160,86162,86164,86166,86168,86170,86172,86174,86176,86178,86180,86182],{"class":314,"line":34767},[312,86161,54193],{"class":324},[312,86163,56183],{"class":332},[312,86165,1576],{"class":324},[312,86167,81672],{"class":339},[312,86169,76021],{"class":324},[312,86171,336],{"class":1436},[312,86173,81819],{"class":324},[312,86175,75816],{"class":332},[312,86177,1576],{"class":324},[312,86179,81567],{"class":1579},[312,86181,81570],{"class":1436},[312,86183,483],{"class":324},[312,86185,86186],{"class":314,"line":34783},[312,86187,86188],{"class":318},"      \u002F\u002F 对象解构\n",[312,86190,86191,86193,86195,86197,86199,86201,86203,86206,86208,86210,86212,86215,86217,86220,86222,86224],{"class":314,"line":34789},[312,86192,60010],{"class":1436},[312,86194,939],{"class":324},[312,86196,81591],{"class":488},[312,86198,733],{"class":324},[312,86200,81581],{"class":488},[312,86202,733],{"class":324},[312,86204,86205],{"class":488},"count",[312,86207,733],{"class":324},[312,86209,81586],{"class":488},[312,86211,733],{"class":324},[312,86213,86214],{"class":488},"spec",[312,86216,733],{"class":324},[312,86218,86219],{"class":488},"gift",[312,86221,81594],{"class":324},[312,86223,336],{"class":1436},[312,86225,81599],{"class":324},[312,86227,86228],{"class":314,"line":34803},[312,86229,86230],{"class":318},"      \u002F\u002F 规格文字模块处理\n",[312,86232,86233,86235,86238,86240,86242,86244,86246,86248,86250,86252],{"class":314,"line":34809},[312,86234,60010],{"class":1436},[312,86236,86237],{"class":488}," text",[312,86239,15366],{"class":1436},[312,86241,83709],{"class":324},[312,86243,83712],{"class":332},[312,86245,83715],{"class":324},[312,86247,75995],{"class":332},[312,86249,1576],{"class":324},[312,86251,83722],{"class":339},[312,86253,1959],{"class":324},[312,86255,86256],{"class":314,"line":34815},[312,86257,86258],{"class":318},"      \u002F\u002F 处理赠品模块\n",[312,86260,86261,86263,86265,86267,86270,86272,86274,86276,86278,86281,86283,86285,86287,86289,86291,86294,86296,86299,86301,86303,86305,86307,86309,86311],{"class":314,"line":34826},[312,86262,60010],{"class":1436},[312,86264,75691],{"class":488},[312,86266,15366],{"class":1436},[312,86268,86269],{"class":324}," gift ",[312,86271,2928],{"class":1436},[312,86273,84883],{"class":324},[312,86275,84886],{"class":332},[312,86277,1576],{"class":324},[312,86279,86280],{"class":339},"','",[312,86282,32622],{"class":324},[312,86284,75816],{"class":332},[312,86286,1576],{"class":324},[312,86288,81567],{"class":1579},[312,86290,81570],{"class":1436},[312,86292,86293],{"class":339}," `\u003Cspan class=\"tag\">【赠品】${",[312,86295,81567],{"class":324},[312,86297,86298],{"class":339},"}\u003C\u002Fspan>`",[312,86300,32622],{"class":324},[312,86302,75995],{"class":332},[312,86304,1576],{"class":324},[312,86306,76000],{"class":339},[312,86308,1583],{"class":324},[312,86310,2803],{"class":1436},[312,86312,71881],{"class":339},[312,86314,86315],{"class":314,"line":34832},[312,86316,86317],{"class":318},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[312,86319,86320,86322,86325,86327,86330,86332,86334,86336,86339,86341,86343,86345,86348,86350,86352],{"class":314,"line":34838},[312,86321,60010],{"class":1436},[312,86323,86324],{"class":488}," subtotal",[312,86326,15366],{"class":1436},[312,86328,86329],{"class":324}," ((price ",[312,86331,2400],{"class":1436},[312,86333,7558],{"class":488},[312,86335,8322],{"class":1436},[312,86337,86338],{"class":324}," count) ",[312,86340,2529],{"class":1436},[312,86342,7558],{"class":488},[312,86344,32622],{"class":324},[312,86346,86347],{"class":332},"toFixed",[312,86349,1576],{"class":324},[312,86351,2027],{"class":488},[312,86353,1959],{"class":324},[312,86355,86356],{"class":314,"line":34848},[312,86357,4205],{"emptyLinePlaceholder":1881},[312,86359,86360,86362],{"class":314,"line":34854},[312,86361,75754],{"class":1436},[312,86363,71945],{"class":339},[312,86365,86366],{"class":314,"line":34865},[312,86367,86368],{"class":339},"        \u003Cdiv class=\"item\">\n",[312,86370,86371,86374,86376],{"class":314,"line":34871},[312,86372,86373],{"class":339},"          \u003Cimg src=\"${",[312,86375,81591],{"class":324},[312,86377,81623],{"class":339},[312,86379,86380,86383,86385,86388,86390],{"class":314,"line":34881},[312,86381,86382],{"class":339},"          \u003Cp class=\"name\">${",[312,86384,81581],{"class":324},[312,86386,86387],{"class":339},"}${",[312,86389,3110],{"class":324},[312,86391,81633],{"class":339},[312,86393,86394,86397,86399],{"class":314,"line":34886},[312,86395,86396],{"class":339},"          \u003Cp class=\"spec\">${",[312,86398,6992],{"class":324},[312,86400,81633],{"class":339},[312,86402,86403,86406,86408,86410,86412,86414,86416,86418],{"class":314,"line":34892},[312,86404,86405],{"class":339},"          \u003Cp class=\"price\">${",[312,86407,81586],{"class":324},[312,86409,2503],{"class":339},[312,86411,86347],{"class":332},[312,86413,1576],{"class":339},[312,86415,2027],{"class":488},[312,86417,2374],{"class":339},[312,86419,81633],{"class":339},[312,86421,86422,86425,86427],{"class":314,"line":34941},[312,86423,86424],{"class":339},"          \u003Cp class=\"count\">x${",[312,86426,86205],{"class":324},[312,86428,81633],{"class":339},[312,86430,86431,86434,86437],{"class":314,"line":34988},[312,86432,86433],{"class":339},"          \u003Cp class=\"sub-total\">${",[312,86435,86436],{"class":324},"subtotal",[312,86438,81633],{"class":339},[312,86440,86441],{"class":314,"line":34993},[312,86442,86443],{"class":339},"        \u003C\u002Fdiv> \n",[312,86445,86446],{"class":314,"line":34999},[312,86447,86448],{"class":339},"             `\n",[312,86450,86451,86454,86456,86458,86460],{"class":314,"line":35018},[312,86452,86453],{"class":324},"    }).",[312,86455,75995],{"class":332},[312,86457,1576],{"class":324},[312,86459,76000],{"class":339},[312,86461,1959],{"class":324},[312,86463,86464],{"class":314,"line":35024},[312,86465,86466],{"class":318},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[312,86468,86469,86471,86473,86475,86477,86480,86482,86485,86487,86489,86491,86494,86497,86499,86502,86504,86506,86508,86511,86513,86515,86517,86519],{"class":314,"line":35044},[312,86470,13024],{"class":1436},[312,86472,64563],{"class":488},[312,86474,15366],{"class":1436},[312,86476,81819],{"class":324},[312,86478,86479],{"class":332},"reduce",[312,86481,4181],{"class":324},[312,86483,86484],{"class":1579},"prev",[312,86486,733],{"class":324},[312,86488,81567],{"class":1579},[312,86490,1583],{"class":324},[312,86492,86493],{"class":1436},"=>",[312,86495,86496],{"class":324}," prev ",[312,86498,2426],{"class":1436},[312,86500,86501],{"class":324}," (item.price ",[312,86503,2400],{"class":1436},[312,86505,7558],{"class":488},[312,86507,8322],{"class":1436},[312,86509,86510],{"class":324}," item.count) ",[312,86512,2529],{"class":1436},[312,86514,7558],{"class":488},[312,86516,733],{"class":324},[312,86518,858],{"class":488},[312,86520,1959],{"class":324},[312,86522,86523,86525,86527,86529,86532,86534,86536,86539,86541,86543,86545],{"class":314,"line":35050},[312,86524,54193],{"class":324},[312,86526,56183],{"class":332},[312,86528,1576],{"class":324},[312,86530,86531],{"class":339},"'.amount'",[312,86533,76021],{"class":324},[312,86535,336],{"class":1436},[312,86537,86538],{"class":324}," total.",[312,86540,86347],{"class":332},[312,86542,1576],{"class":324},[312,86544,2027],{"class":488},[312,86546,1959],{"class":324},[312,86548,86549,86551,86553],{"class":314,"line":35056},[312,86550,54203],{"class":324},[312,86552,53599],{"class":328},[312,86554,343],{"class":324},[312,86556,86557,86559,86561],{"class":314,"line":35066},[312,86558,353],{"class":324},[312,86560,53586],{"class":328},[312,86562,343],{"class":324},[312,86564,86565],{"class":314,"line":35071},[312,86566,4205],{"emptyLinePlaceholder":1881},[312,86568,86569,86571,86573],{"class":314,"line":35077},[312,86570,353],{"class":324},[312,86572,52430],{"class":328},[312,86574,343],{"class":324},[14,86576,86578],{"id":86577},"_411-编程思想","4.11 编程思想",[69,86580,86582],{"id":86581},"_4111-面向过程介绍","4.11.1 面向过程介绍",[24,86584,86585,86588],{},[27,86586,86587],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[24,86590,86591],{},"调用就可以了",[24,86593,86594],{},[19,86595],{"alt":308,"src":86596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[69,86598,86600],{"id":86599},"_4112-面向对象","4.11.2 面向对象",[24,86602,86603],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[24,86605,86606],{},[19,86607],{"alt":308,"src":86608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[24,86610,86611],{},"面向对象的特性：",[243,86613,86614,86617,86620],{},[143,86615,86616],{},"封装性",[143,86618,86619],{},"继承性",[143,86621,86622],{},"多态性",[69,86624,86626],{"id":86625},"_4113-两者比较","4.11.3 两者比较",[24,86628,86629],{},[19,86630],{"alt":308,"src":86631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86633,86635],{"id":86634},"_412-构造函数回顾","4.12 构造函数回顾",[24,86637,86638],{},[19,86639],{"alt":308,"src":86640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[24,86642,86643],{},[19,86644],{"alt":308,"src":86645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[24,86647,86648],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[24,86650,86651],{},[19,86652],{"alt":308,"src":86653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86655,86657],{"id":86656},"_413-原型","4.13 原型",[69,86659,86661],{"id":86660},"_4131-原型对象的认识","4.13.1 原型对象的认识",[24,86663,86664],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[24,86666,86667],{},[19,86668],{"alt":308,"src":86669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[24,86671,86672],{},[19,86673],{"alt":308,"src":86674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[24,86676,86677],{},"原型是构造函数的属性，它也是一个对象",[24,86679,86680],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[24,86682,86683],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[303,86685,86687],{"className":54853,"code":86686,"language":54855,"meta":308,"style":308},"\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",[119,86688,86689,86697,86702,86710,86715,86720,86725,86730,86735,86739,86743,86747,86752,86757,86761,86766,86771,86776,86781,86786,86790,86798],{"__ignoreMap":308},[312,86690,86691,86693,86695],{"class":314,"line":315},[312,86692,325],{"class":324},[312,86694,53586],{"class":328},[312,86696,343],{"class":324},[312,86698,86699],{"class":314,"line":171},[312,86700,86701],{"class":318},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[312,86703,86704,86706,86708],{"class":314,"line":274},[312,86705,53930],{"class":324},[312,86707,53599],{"class":328},[312,86709,343],{"class":324},[312,86711,86712],{"class":314,"line":298},[312,86713,86714],{"class":324},"    function Star(uname, age) {\n",[312,86716,86717],{"class":314,"line":974},[312,86718,86719],{"class":324},"      this.uname = uname,\n",[312,86721,86722],{"class":314,"line":980},[312,86723,86724],{"class":324},"        this.age = age\n",[312,86726,86727],{"class":314,"line":997},[312,86728,86729],{"class":324},"      \u002F\u002F this.sing = function () {\n",[312,86731,86732],{"class":314,"line":1003},[312,86733,86734],{"class":324},"      \u002F\u002F   console.log('唱歌')\n",[312,86736,86737],{"class":314,"line":1020},[312,86738,4205],{"emptyLinePlaceholder":1881},[312,86740,86741],{"class":314,"line":1026},[312,86742,61819],{"class":324},[312,86744,86745],{"class":314,"line":3418},[312,86746,3992],{"class":324},[312,86748,86749],{"class":314,"line":3423},[312,86750,86751],{"class":324},"    Star.prototype.sing = function () {\n",[312,86753,86754],{"class":314,"line":3429},[312,86755,86756],{"class":324},"      console.log('唱歌')\n",[312,86758,86759],{"class":314,"line":3434},[312,86760,3992],{"class":324},[312,86762,86763],{"class":314,"line":3448},[312,86764,86765],{"class":324},"    \u002F\u002F console.dir(Star.prototype)\n",[312,86767,86768],{"class":314,"line":3453},[312,86769,86770],{"class":324},"    const pink = new Star('pink', 18)\n",[312,86772,86773],{"class":314,"line":3459},[312,86774,86775],{"class":324},"    const red = new Star('red', 20)\n",[312,86777,86778],{"class":314,"line":3480},[312,86779,86780],{"class":324},"    pink.sing()\n",[312,86782,86783],{"class":314,"line":3485},[312,86784,86785],{"class":324},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[312,86787,86788],{"class":314,"line":3499},[312,86789,4205],{"emptyLinePlaceholder":1881},[312,86791,86792,86794,86796],{"class":314,"line":3504},[312,86793,54203],{"class":324},[312,86795,53599],{"class":328},[312,86797,343],{"class":324},[312,86799,86800,86802,86804],{"class":314,"line":3533},[312,86801,353],{"class":324},[312,86803,53586],{"class":328},[312,86805,343],{"class":324},[24,86807,86808],{},[19,86809],{"alt":308,"src":86810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[303,86812,86814],{"className":54853,"code":86813,"language":54855,"meta":308,"style":308},"\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",[119,86815,86816,86824,86832,86837,86842,86847,86852,86856,86861,86866,86871,86875,86880,86884,86888,86893,86897,86905],{"__ignoreMap":308},[312,86817,86818,86820,86822],{"class":314,"line":315},[312,86819,325],{"class":324},[312,86821,53586],{"class":328},[312,86823,343],{"class":324},[312,86825,86826,86828,86830],{"class":314,"line":171},[312,86827,53930],{"class":324},[312,86829,53599],{"class":328},[312,86831,343],{"class":324},[312,86833,86834],{"class":314,"line":274},[312,86835,86836],{"class":324},"    let that\n",[312,86838,86839],{"class":314,"line":298},[312,86840,86841],{"class":324},"    function Star(uname) {\n",[312,86843,86844],{"class":314,"line":974},[312,86845,86846],{"class":324},"      this.uname = uname\n",[312,86848,86849],{"class":314,"line":980},[312,86850,86851],{"class":324},"      that = this\n",[312,86853,86854],{"class":314,"line":997},[312,86855,3992],{"class":324},[312,86857,86858],{"class":314,"line":1003},[312,86859,86860],{"class":324},"    \u002F\u002F 实例对象是 ldh\n",[312,86862,86863],{"class":314,"line":1020},[312,86864,86865],{"class":324},"    const ldh = new Star('刘德华')\n",[312,86867,86868],{"class":314,"line":1026},[312,86869,86870],{"class":324},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[312,86872,86873],{"class":314,"line":3418},[312,86874,4205],{"emptyLinePlaceholder":1881},[312,86876,86877],{"class":314,"line":3423},[312,86878,86879],{"class":324},"    Star.sing = function () {\n",[312,86881,86882],{"class":314,"line":3429},[312,86883,86756],{"class":324},[312,86885,86886],{"class":314,"line":3434},[312,86887,3992],{"class":324},[312,86889,86890],{"class":314,"line":3448},[312,86891,86892],{"class":324},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[312,86894,86895],{"class":314,"line":3453},[312,86896,4205],{"emptyLinePlaceholder":1881},[312,86898,86899,86901,86903],{"class":314,"line":3459},[312,86900,54203],{"class":324},[312,86902,53599],{"class":328},[312,86904,343],{"class":324},[312,86906,86907,86909,86911],{"class":314,"line":3480},[312,86908,353],{"class":324},[312,86910,53586],{"class":328},[312,86912,343],{"class":324},[24,86914,86915],{},"构造函数的this指向的是实例对象；",[24,86917,86918],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[69,86920,86922],{"id":86921},"_4132-数组扩展方法","4.13.2 数组扩展方法",[24,86924,86925],{},[19,86926],{"alt":308,"src":86927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[303,86929,86931],{"className":54853,"code":86930,"language":54855,"meta":308,"style":308},"\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",[119,86932,86933,86941,86949,86954,86959,86964,86969,86974,86979,86984,86989,86994,86999,87003,87008,87013,87018,87023,87027,87032,87037,87042,87047,87051,87056,87061,87066,87071,87075,87080,87084,87092],{"__ignoreMap":308},[312,86934,86935,86937,86939],{"class":314,"line":315},[312,86936,325],{"class":324},[312,86938,53586],{"class":328},[312,86940,343],{"class":324},[312,86942,86943,86945,86947],{"class":314,"line":171},[312,86944,53930],{"class":324},[312,86946,53599],{"class":328},[312,86948,343],{"class":324},[312,86950,86951],{"class":314,"line":274},[312,86952,86953],{"class":324},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[312,86955,86956],{"class":314,"line":298},[312,86957,86958],{"class":324},"    const arr = [1, 2, 3]\n",[312,86960,86961],{"class":314,"line":974},[312,86962,86963],{"class":324},"    \u002F\u002F 自己定义数组的扩展方法\n",[312,86965,86966],{"class":314,"line":980},[312,86967,86968],{"class":324},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[312,86970,86971],{"class":314,"line":997},[312,86972,86973],{"class":324},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[312,86975,86976],{"class":314,"line":1003},[312,86977,86978],{"class":324},"    \u002F\u002F ①.最大值\n",[312,86980,86981],{"class":314,"line":1020},[312,86982,86983],{"class":324},"    Array.prototype.max = function () {\n",[312,86985,86986],{"class":314,"line":1026},[312,86987,86988],{"class":324},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[312,86990,86991],{"class":314,"line":3418},[312,86992,86993],{"class":324},"      return Math.max(...this)\n",[312,86995,86996],{"class":314,"line":3423},[312,86997,86998],{"class":324},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[312,87000,87001],{"class":314,"line":3429},[312,87002,3992],{"class":324},[312,87004,87005],{"class":314,"line":3434},[312,87006,87007],{"class":324},"    console.log(arr.max())\n",[312,87009,87010],{"class":314,"line":3448},[312,87011,87012],{"class":324},"    \u002F\u002F ②最小值\n",[312,87014,87015],{"class":314,"line":3453},[312,87016,87017],{"class":324},"    Array.prototype.min = function () {\n",[312,87019,87020],{"class":314,"line":3459},[312,87021,87022],{"class":324},"      return Math.min(...this)\n",[312,87024,87025],{"class":314,"line":3480},[312,87026,3992],{"class":324},[312,87028,87029],{"class":314,"line":3485},[312,87030,87031],{"class":324},"    console.log(arr.min())\n",[312,87033,87034],{"class":314,"line":3499},[312,87035,87036],{"class":324},"    \u002F\u002F③求和\n",[312,87038,87039],{"class":314,"line":3504},[312,87040,87041],{"class":324},"    Array.prototype.sum = function () {\n",[312,87043,87044],{"class":314,"line":3533},[312,87045,87046],{"class":324},"      return this.reduce((prev, current) => prev + current, 0)\n",[312,87048,87049],{"class":314,"line":3538},[312,87050,3992],{"class":324},[312,87052,87053],{"class":314,"line":3555},[312,87054,87055],{"class":324},"    console.log(arr.sum())\n",[312,87057,87058],{"class":314,"line":3560},[312,87059,87060],{"class":324},"    \u002F\u002F ③排序\n",[312,87062,87063],{"class":314,"line":3565},[312,87064,87065],{"class":324},"    Array.prototype.rever = function () {\n",[312,87067,87068],{"class":314,"line":3570},[312,87069,87070],{"class":324},"      return this.reverse()\n",[312,87072,87073],{"class":314,"line":3584},[312,87074,3992],{"class":324},[312,87076,87077],{"class":314,"line":3589},[312,87078,87079],{"class":324},"    console.log(arr.rever())\n",[312,87081,87082],{"class":314,"line":4382},[312,87083,4205],{"emptyLinePlaceholder":1881},[312,87085,87086,87088,87090],{"class":314,"line":4396},[312,87087,54203],{"class":324},[312,87089,53599],{"class":328},[312,87091,343],{"class":324},[312,87093,87094,87096,87098],{"class":314,"line":4404},[312,87095,353],{"class":324},[312,87097,53586],{"class":328},[312,87099,343],{"class":324},[24,87101,87102],{},[19,87103],{"alt":308,"src":87104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[69,87106,87108],{"id":87107},"_4133-constructor-属性","4.13.3 constructor 属性",[24,87110,87111],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[24,87113,87114],{},[19,87115],{"alt":308,"src":87116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[303,87118,87120],{"className":54853,"code":87119,"language":54855,"meta":308,"style":308},"\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",[119,87121,87122,87130,87138,87143,87148,87152,87157,87162,87167,87175],{"__ignoreMap":308},[312,87123,87124,87126,87128],{"class":314,"line":315},[312,87125,325],{"class":324},[312,87127,53586],{"class":328},[312,87129,343],{"class":324},[312,87131,87132,87134,87136],{"class":314,"line":171},[312,87133,53930],{"class":324},[312,87135,53599],{"class":328},[312,87137,343],{"class":324},[312,87139,87140],{"class":314,"line":274},[312,87141,87142],{"class":324},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[312,87144,87145],{"class":314,"line":298},[312,87146,87147],{"class":324},"    function Star() {\n",[312,87149,87150],{"class":314,"line":974},[312,87151,3992],{"class":324},[312,87153,87154],{"class":314,"line":980},[312,87155,87156],{"class":324},"    const ldh = new Star()\n",[312,87158,87159],{"class":314,"line":997},[312,87160,87161],{"class":324},"    console.log(Star.prototype)\n",[312,87163,87164],{"class":314,"line":1003},[312,87165,87166],{"class":324},"    console.log(Star.prototype.constructor === Star)\n",[312,87168,87169,87171,87173],{"class":314,"line":1020},[312,87170,54203],{"class":324},[312,87172,53599],{"class":328},[312,87174,343],{"class":324},[312,87176,87177,87179,87181],{"class":314,"line":1026},[312,87178,353],{"class":324},[312,87180,53586],{"class":328},[312,87182,343],{"class":324},[24,87184,87185],{},[19,87186],{"alt":308,"src":87187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[24,87189,87190],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[303,87192,87194],{"className":54853,"code":87193,"language":54855,"meta":308,"style":308},"  \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",[119,87195,87196,87204,87208,87212,87216,87221,87226,87231,87235,87240,87245,87250,87255,87260,87265,87269,87273,87278,87283,87288,87292,87297,87302,87306,87310,87314],{"__ignoreMap":308},[312,87197,87198,87200,87202],{"class":314,"line":315},[312,87199,53930],{"class":324},[312,87201,53599],{"class":328},[312,87203,343],{"class":324},[312,87205,87206],{"class":314,"line":171},[312,87207,87142],{"class":324},[312,87209,87210],{"class":314,"line":274},[312,87211,87147],{"class":324},[312,87213,87214],{"class":314,"line":298},[312,87215,3992],{"class":324},[312,87217,87218],{"class":314,"line":974},[312,87219,87220],{"class":324},"    \u002F\u002F const ldh = new Star()\n",[312,87222,87223],{"class":314,"line":980},[312,87224,87225],{"class":324},"    \u002F\u002F console.log(Star.prototype)\n",[312,87227,87228],{"class":314,"line":997},[312,87229,87230],{"class":324},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[312,87232,87233],{"class":314,"line":1003},[312,87234,4205],{"emptyLinePlaceholder":1881},[312,87236,87237],{"class":314,"line":1020},[312,87238,87239],{"class":324},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[312,87241,87242],{"class":314,"line":1026},[312,87243,87244],{"class":324},"    \u002F\u002F Star.prototype.sing = function () {\n",[312,87246,87247],{"class":314,"line":3418},[312,87248,87249],{"class":324},"    \u002F\u002F   console.log('唱歌')\n",[312,87251,87252],{"class":314,"line":3423},[312,87253,87254],{"class":324},"    \u002F\u002F }\n",[312,87256,87257],{"class":314,"line":3429},[312,87258,87259],{"class":324},"    \u002F\u002F Star.prototype.dance = function () {\n",[312,87261,87262],{"class":314,"line":3434},[312,87263,87264],{"class":324},"    \u002F\u002F   console.log('跳舞')\n",[312,87266,87267],{"class":314,"line":3448},[312,87268,87254],{"class":324},[312,87270,87271],{"class":314,"line":3453},[312,87272,87161],{"class":324},[312,87274,87275],{"class":314,"line":3459},[312,87276,87277],{"class":324},"    Star.prototype = {\n",[312,87279,87280],{"class":314,"line":3480},[312,87281,87282],{"class":324},"      sing: function () {\n",[312,87284,87285],{"class":314,"line":3485},[312,87286,87287],{"class":324},"        console.log('唱歌')\n",[312,87289,87290],{"class":314,"line":3499},[312,87291,79664],{"class":324},[312,87293,87294],{"class":314,"line":3504},[312,87295,87296],{"class":324},"      dance: function () {\n",[312,87298,87299],{"class":314,"line":3533},[312,87300,87301],{"class":324},"        console.log('跳舞')\n",[312,87303,87304],{"class":314,"line":3538},[312,87305,54184],{"class":324},[312,87307,87308],{"class":314,"line":3555},[312,87309,3992],{"class":324},[312,87311,87312],{"class":314,"line":3560},[312,87313,87161],{"class":324},[312,87315,87316,87318,87320],{"class":314,"line":3565},[312,87317,54203],{"class":324},[312,87319,53599],{"class":328},[312,87321,343],{"class":324},[24,87323,87324],{},"进行输出结果后会发现：",[24,87326,87327],{},[19,87328],{"alt":308,"src":87329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[24,87331,87332],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[24,87334,87335],{},"所以，要重新指回创造这个原型对象的构造函数",[303,87337,87339],{"className":72985,"code":87338,"language":72987,"meta":308,"style":308},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[119,87340,87341,87355,87360,87365,87376,87389,87394,87405,87419,87423],{"__ignoreMap":308},[312,87342,87343,87346,87348,87351,87353],{"class":314,"line":315},[312,87344,87345],{"class":488},"Star",[312,87347,2503],{"class":324},[312,87349,87350],{"class":488},"prototype",[312,87352,15366],{"class":1436},[312,87354,483],{"class":324},[312,87356,87357],{"class":314,"line":171},[312,87358,87359],{"class":318},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[312,87361,87362],{"class":314,"line":274},[312,87363,87364],{"class":324},"  constructor: Star,\n",[312,87366,87367,87370,87372,87374],{"class":314,"line":298},[312,87368,87369],{"class":332},"  sing",[312,87371,492],{"class":324},[312,87373,56233],{"class":1436},[312,87375,56236],{"class":324},[312,87377,87378,87380,87382,87384,87387],{"class":314,"line":974},[312,87379,75525],{"class":324},[312,87381,60029],{"class":332},[312,87383,1576],{"class":324},[312,87385,87386],{"class":339},"'唱歌'",[312,87388,1959],{"class":324},[312,87390,87391],{"class":314,"line":980},[312,87392,87393],{"class":324},"   },\n",[312,87395,87396,87399,87401,87403],{"class":314,"line":997},[312,87397,87398],{"class":332},"   dance",[312,87400,492],{"class":324},[312,87402,56233],{"class":1436},[312,87404,56236],{"class":324},[312,87406,87407,87410,87412,87414,87417],{"class":314,"line":1003},[312,87408,87409],{"class":324},"     console.",[312,87411,60029],{"class":332},[312,87413,1576],{"class":324},[312,87415,87416],{"class":339},"'跳舞'",[312,87418,1959],{"class":324},[312,87420,87421],{"class":314,"line":1020},[312,87422,6114],{"class":324},[312,87424,87425],{"class":314,"line":1026},[312,87426,515],{"class":324},[24,87428,87429],{},[19,87430],{"alt":308,"src":87431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[24,87433,87434],{},"总结1：",[24,87436,87437],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[24,87439,87440],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[24,87442,87443],{},"constructor指的是他的来源",[24,87445,87446],{},[19,87447],{"alt":308,"src":87448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[24,87450,87451],{},[19,87452],{"alt":308,"src":87453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[24,87455,87456],{},"总结2：",[24,87458,87459],{},[19,87460],{"alt":308,"src":87461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[24,87463,87464],{},[19,87465],{"alt":308,"src":87466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[24,87468,87469],{},[19,87470],{"alt":308,"src":87471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[69,87473,87475],{"id":87474},"_4134-对象原型","4.13.4 对象原型",[24,87477,87478],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[24,87480,87481],{},"对象原型就是__proto__这个属性",[24,87483,87484],{},[19,87485],{"alt":308,"src":87486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[24,87488,87489],{},[19,87490],{"alt":308,"src":87491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[24,87493,87494],{},[19,87495],{"alt":308,"src":87496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[24,87498,87499],{},[19,87500],{"alt":308,"src":87501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[303,87503,87505],{"className":54853,"code":87504,"language":54855,"meta":308,"style":308},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[119,87506,87507,87515,87523,87527,87531,87535,87540,87548],{"__ignoreMap":308},[312,87508,87509,87511,87513],{"class":314,"line":315},[312,87510,325],{"class":324},[312,87512,53586],{"class":328},[312,87514,343],{"class":324},[312,87516,87517,87519,87521],{"class":314,"line":171},[312,87518,53930],{"class":324},[312,87520,53599],{"class":328},[312,87522,343],{"class":324},[312,87524,87525],{"class":314,"line":274},[312,87526,87147],{"class":324},[312,87528,87529],{"class":314,"line":298},[312,87530,3992],{"class":324},[312,87532,87533],{"class":314,"line":974},[312,87534,87156],{"class":324},[312,87536,87537],{"class":314,"line":980},[312,87538,87539],{"class":324},"    console.log(ldh)\n",[312,87541,87542,87544,87546],{"class":314,"line":997},[312,87543,54203],{"class":324},[312,87545,53599],{"class":328},[312,87547,343],{"class":324},[312,87549,87550,87552,87554],{"class":314,"line":1003},[312,87551,353],{"class":324},[312,87553,53586],{"class":328},[312,87555,343],{"class":324},[24,87557,87558],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[24,87560,87561],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[24,87563,87564],{},[19,87565],{"alt":308,"src":87566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[24,87568,87569],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[24,87571,87572],{},"对象原型指向原型对象",[24,87574,87575],{},[19,87576],{"alt":308,"src":87577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[24,87579,87580],{},[19,87581],{"alt":308,"src":87582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[24,87584,87585],{},[19,87586],{"alt":308,"src":87587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[69,87589,87591],{"id":87590},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[24,87593,87594],{},[19,87595],{"alt":308,"src":87596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[140,87598,87599,87602,87605,87608],{},[143,87600,87601],{},"构造函数通过new的形式实例化得到实例对象",[143,87603,87604],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[143,87606,87607],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[143,87609,87610],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[24,87612,87613],{},[19,87614],{"alt":308,"src":87615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[24,87617,87618],{},"题目梳理：",[24,87620,87621],{},[19,87622],{"alt":308,"src":87623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[69,87625,87627],{"id":87626},"_4136-原型继承","4.13.6 原型继承",[24,87629,87630],{},[19,87631],{"alt":308,"src":87632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[24,87634,87635],{},[19,87636],{"alt":308,"src":87637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[24,87639,87640],{},[19,87641],{"alt":308,"src":87642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[24,87644,87645],{},[19,87646],{"alt":308,"src":87647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[24,87649,87650],{},[19,87651],{"alt":308,"src":87652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[24,87654,87655],{},[19,87656],{"alt":308,"src":87657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[24,87659,87660],{},[19,87661],{"alt":308,"src":87662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[24,87664,87665],{},[19,87666],{"alt":308,"src":87667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[24,87669,87670],{},"回顾：构造函数每次new得到对象都是不同的",[69,87672,87674],{"id":87673},"_4137-原型链","4.13.7 原型链",[24,87676,87677],{},[19,87678],{"alt":308,"src":87679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[24,87681,87682],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[24,87684,87685],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[24,87687,87688],{},"大哥是Object",[24,87690,87691],{},[19,87692],{"alt":308,"src":87693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[24,87695,87696],{},[19,87697],{"alt":308,"src":87698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[24,87700,87701],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[24,87703,87704],{},"万物皆对象",[69,87706,87708],{"id":87707},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[24,87710,87711],{},"模态框",[24,87713,87714],{},"以后遇见这个效果直接使用这个就行",[24,87716,87717],{},[19,87718],{"alt":308,"src":87719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[24,87721,87722],{},[19,87723],{"alt":308,"src":87724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[24,87726,87727],{},[19,87728],{"alt":308,"src":87729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[24,87731,87732],{},[19,87733],{"alt":308,"src":87734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[24,87736,87737],{},"补充知识点：",[140,87739,87740],{},[143,87741,87742],{},"append()",[24,87744,87745],{},[19,87746],{"alt":308,"src":87747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[303,87749,87751],{"className":52428,"code":87750,"language":52430,"meta":308,"style":308},"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",[119,87752,87753,87758,87763,87768,87772,87776,87780,87785,87790,87795,87799],{"__ignoreMap":308},[312,87754,87755],{"class":314,"line":315},[312,87756,87757],{"class":324},"append(param1)\n",[312,87759,87760],{"class":314,"line":171},[312,87761,87762],{"class":324},"append(param1, param2)\n",[312,87764,87765],{"class":314,"line":274},[312,87766,87767],{"class":324},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[312,87769,87770],{"class":314,"line":298},[312,87771,4205],{"emptyLinePlaceholder":1881},[312,87773,87774],{"class":314,"line":974},[312,87775,4205],{"emptyLinePlaceholder":1881},[312,87777,87778],{"class":314,"line":980},[312,87779,4205],{"emptyLinePlaceholder":1881},[312,87781,87782],{"class":314,"line":997},[312,87783,87784],{"class":324},"let div = document.createElement(\"div\");\n",[312,87786,87787],{"class":314,"line":1003},[312,87788,87789],{"class":324},"let p = document.createElement(\"p\");\n",[312,87791,87792],{"class":314,"line":1020},[312,87793,87794],{"class":324},"div.append(p);\n",[312,87796,87797],{"class":314,"line":1026},[312,87798,4205],{"emptyLinePlaceholder":1881},[312,87800,87801,87804,87806],{"class":314,"line":3418},[312,87802,87803],{"class":324},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[312,87805,24],{"class":328},[312,87807,87808],{"class":324},"> ]\n",[140,87810,87811],{"start":171},[143,87812,87813],{},"remove()",[24,87815,87816],{},"自己删自己",[24,87818,87819],{},[19,87820],{"alt":308,"src":87821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[303,87823,87825],{"className":52428,"code":87824,"language":52430,"meta":308,"style":308},"\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",[119,87826,87827,87837,87851,87855,87863,87877,87897,87909,87917,87924,87936,87949,87984,87996,88006,88018,88030,88042,88069,88079,88083,88087,88096,88108,88122,88132,88144,88148,88152,88162,88173,88183,88193,88206,88219,88229,88233,88237,88246,88256,88268,88272,88276,88285,88295,88305,88317,88321,88325,88335,88351,88362,88372,88382,88394,88406,88418,88422,88426,88439,88450,88454,88462,88470,88474,88482,88502,88522,88530,88535,88561,88566,88571,88590,88595,88607,88612,88623,88633,88643,88648,88653,88657,88662,88667,88672,88692,88697,88717,88722,88736,88741,88746,88751,88767,88771,88776,88805,88810,88815,88820,88831,88835,88839,88843,88848,88873,88878,88903,88908,88917,88921,88926,88951,88955,88980,88984,88993,88997,89002,89020,89030,89034,89042,89050,89054],{"__ignoreMap":308},[312,87828,87829,87831,87833,87835],{"class":314,"line":315},[312,87830,53092],{"class":324},[312,87832,53095],{"class":328},[312,87834,53098],{"class":332},[312,87836,343],{"class":324},[312,87838,87839,87841,87843,87845,87847,87849],{"class":314,"line":171},[312,87840,325],{"class":324},[312,87842,52430],{"class":328},[312,87844,53109],{"class":332},[312,87846,336],{"class":324},[312,87848,53114],{"class":339},[312,87850,343],{"class":324},[312,87852,87853],{"class":314,"line":274},[312,87854,4205],{"emptyLinePlaceholder":1881},[312,87856,87857,87859,87861],{"class":314,"line":298},[312,87858,325],{"class":324},[312,87860,53127],{"class":328},[312,87862,343],{"class":324},[312,87864,87865,87867,87869,87871,87873,87875],{"class":314,"line":974},[312,87866,53930],{"class":324},[312,87868,53137],{"class":328},[312,87870,53140],{"class":332},[312,87872,336],{"class":324},[312,87874,53145],{"class":339},[312,87876,343],{"class":324},[312,87878,87879,87881,87883,87885,87887,87889,87891,87893,87895],{"class":314,"line":980},[312,87880,53930],{"class":324},[312,87882,53137],{"class":328},[312,87884,16721],{"class":332},[312,87886,336],{"class":324},[312,87888,53184],{"class":339},[312,87890,53164],{"class":332},[312,87892,336],{"class":324},[312,87894,53191],{"class":339},[312,87896,343],{"class":324},[312,87898,87899,87901,87903,87905,87907],{"class":314,"line":997},[312,87900,53930],{"class":324},[312,87902,628],{"class":328},[312,87904,53202],{"class":324},[312,87906,628],{"class":328},[312,87908,343],{"class":324},[312,87910,87911,87913,87915],{"class":314,"line":1003},[312,87912,53930],{"class":324},[312,87914,1856],{"class":328},[312,87916,343],{"class":324},[312,87918,87919,87922],{"class":314,"line":1020},[312,87920,87921],{"class":332},"    .modal",[312,87923,483],{"class":324},[312,87925,87926,87928,87930,87932,87934],{"class":314,"line":1026},[312,87927,56554],{"class":488},[312,87929,492],{"class":324},[312,87931,5778],{"class":488},[312,87933,1437],{"class":1436},[312,87935,498],{"class":324},[312,87937,87938,87941,87943,87945,87947],{"class":314,"line":3418},[312,87939,87940],{"class":488},"      min-height",[312,87942,492],{"class":324},[312,87944,2256],{"class":488},[312,87946,1437],{"class":1436},[312,87948,498],{"class":324},[312,87950,87951,87953,87955,87957,87959,87961,87963,87965,87967,87969,87971,87973,87975,87977,87979,87982],{"class":314,"line":3423},[312,87952,80522],{"class":488},[312,87954,492],{"class":324},[312,87956,858],{"class":488},[312,87958,5898],{"class":488},[312,87960,3843],{"class":488},[312,87962,1437],{"class":1436},[312,87964,80539],{"class":488},[312,87966,1576],{"class":324},[312,87968,858],{"class":488},[312,87970,733],{"class":324},[312,87972,858],{"class":488},[312,87974,733],{"class":324},[312,87976,858],{"class":488},[312,87978,733],{"class":324},[312,87980,87981],{"class":488},"0.1",[312,87983,4524],{"class":324},[312,87985,87986,87988,87990,87992,87994],{"class":314,"line":3429},[312,87987,56916],{"class":488},[312,87989,492],{"class":324},[312,87991,2238],{"class":488},[312,87993,1437],{"class":1436},[312,87995,498],{"class":324},[312,87997,87998,88000,88002,88004],{"class":314,"line":3434},[312,87999,56543],{"class":488},[312,88001,492],{"class":324},[312,88003,1015],{"class":488},[312,88005,498],{"class":324},[312,88007,88008,88011,88013,88016],{"class":314,"line":3448},[312,88009,88010],{"class":488},"      z-index",[312,88012,492],{"class":324},[312,88014,88015],{"class":488},"999",[312,88017,498],{"class":324},[312,88019,88020,88022,88024,88026,88028],{"class":314,"line":3453},[312,88021,56620],{"class":488},[312,88023,492],{"class":324},[312,88025,2601],{"class":488},[312,88027,2273],{"class":1436},[312,88029,498],{"class":324},[312,88031,88032,88034,88036,88038,88040],{"class":314,"line":3459},[312,88033,56729],{"class":488},[312,88035,492],{"class":324},[312,88037,2601],{"class":488},[312,88039,2273],{"class":1436},[312,88041,498],{"class":324},[312,88043,88044,88046,88048,88050,88052,88055,88057,88059,88061,88063,88065,88067],{"class":314,"line":3480},[312,88045,80563],{"class":488},[312,88047,492],{"class":324},[312,88049,80568],{"class":488},[312,88051,1576],{"class":324},[312,88053,88054],{"class":488},"-50",[312,88056,2273],{"class":1436},[312,88058,733],{"class":324},[312,88060,88054],{"class":488},[312,88062,2273],{"class":1436},[312,88064,733],{"class":324},[312,88066,858],{"class":488},[312,88068,4524],{"class":324},[312,88070,88071,88073,88075,88077],{"class":314,"line":3485},[312,88072,56666],{"class":488},[312,88074,492],{"class":324},[312,88076,62624],{"class":488},[312,88078,498],{"class":324},[312,88080,88081],{"class":314,"line":3499},[312,88082,3992],{"class":324},[312,88084,88085],{"class":314,"line":3504},[312,88086,4205],{"emptyLinePlaceholder":1881},[312,88088,88089,88091,88094],{"class":314,"line":3533},[312,88090,87921],{"class":332},[312,88092,88093],{"class":332}," .header",[312,88095,483],{"class":324},[312,88097,88098,88100,88102,88104,88106],{"class":314,"line":3538},[312,88099,59141],{"class":488},[312,88101,492],{"class":324},[312,88103,2346],{"class":488},[312,88105,1437],{"class":1436},[312,88107,498],{"class":324},[312,88109,88110,88112,88114,88116,88118,88120],{"class":314,"line":3555},[312,88111,56479],{"class":488},[312,88113,492],{"class":324},[312,88115,858],{"class":488},[312,88117,3843],{"class":488},[312,88119,1437],{"class":1436},[312,88121,498],{"class":324},[312,88123,88124,88126,88128,88130],{"class":314,"line":3560},[312,88125,56543],{"class":488},[312,88127,492],{"class":324},[312,88129,969],{"class":488},[312,88131,498],{"class":324},[312,88133,88134,88136,88138,88140,88142],{"class":314,"line":3565},[312,88135,56704],{"class":488},[312,88137,492],{"class":324},[312,88139,1546],{"class":488},[312,88141,1437],{"class":1436},[312,88143,498],{"class":324},[312,88145,88146],{"class":314,"line":3570},[312,88147,3992],{"class":324},[312,88149,88150],{"class":314,"line":3584},[312,88151,4205],{"emptyLinePlaceholder":1881},[312,88153,88154,88156,88158,88160],{"class":314,"line":3589},[312,88155,87921],{"class":332},[312,88157,88093],{"class":332},[312,88159,4837],{"class":328},[312,88161,483],{"class":324},[312,88163,88164,88167,88169,88171],{"class":314,"line":4382},[312,88165,88166],{"class":488},"      font-style",[312,88168,492],{"class":324},[312,88170,65619],{"class":488},[312,88172,498],{"class":324},[312,88174,88175,88177,88179,88181],{"class":314,"line":4396},[312,88176,59198],{"class":488},[312,88178,492],{"class":324},[312,88180,63848],{"class":488},[312,88182,498],{"class":324},[312,88184,88185,88187,88189,88191],{"class":314,"line":4404},[312,88186,56543],{"class":488},[312,88188,492],{"class":324},[312,88190,992],{"class":488},[312,88192,498],{"class":324},[312,88194,88195,88198,88200,88202,88204],{"class":314,"line":4409},[312,88196,88197],{"class":488},"      right",[312,88199,492],{"class":324},[312,88201,2520],{"class":488},[312,88203,1437],{"class":1436},[312,88205,498],{"class":324},[312,88207,88208,88210,88212,88215,88217],{"class":314,"line":4415},[312,88209,56729],{"class":488},[312,88211,492],{"class":324},[312,88213,88214],{"class":488},"-2",[312,88216,1437],{"class":1436},[312,88218,498],{"class":324},[312,88220,88221,88223,88225,88227],{"class":314,"line":4421},[312,88222,63803],{"class":488},[312,88224,492],{"class":324},[312,88226,63808],{"class":488},[312,88228,498],{"class":324},[312,88230,88231],{"class":314,"line":4426},[312,88232,3992],{"class":324},[312,88234,88235],{"class":314,"line":9751},[312,88236,4205],{"emptyLinePlaceholder":1881},[312,88238,88239,88241,88244],{"class":314,"line":9775},[312,88240,87921],{"class":332},[312,88242,88243],{"class":332}," .body",[312,88245,483],{"class":324},[312,88247,88248,88250,88252,88254],{"class":314,"line":9780},[312,88249,59068],{"class":488},[312,88251,492],{"class":324},[312,88253,53380],{"class":488},[312,88255,498],{"class":324},[312,88257,88258,88260,88262,88264,88266],{"class":314,"line":9786},[312,88259,56479],{"class":488},[312,88261,492],{"class":324},[312,88263,2391],{"class":488},[312,88265,1437],{"class":1436},[312,88267,498],{"class":324},[312,88269,88270],{"class":314,"line":9813},[312,88271,3992],{"class":324},[312,88273,88274],{"class":314,"line":9818},[312,88275,4205],{"emptyLinePlaceholder":1881},[312,88277,88278,88280,88283],{"class":314,"line":9824},[312,88279,87921],{"class":332},[312,88281,88282],{"class":332}," .footer",[312,88284,483],{"class":324},[312,88286,88287,88289,88291,88293],{"class":314,"line":9836},[312,88288,56791],{"class":488},[312,88290,492],{"class":324},[312,88292,53268],{"class":488},[312,88294,498],{"class":324},[312,88296,88297,88299,88301,88303],{"class":314,"line":9848},[312,88298,56802],{"class":488},[312,88300,492],{"class":324},[312,88302,53368],{"class":488},[312,88304,498],{"class":324},[312,88306,88307,88309,88311,88313,88315],{"class":314,"line":9860},[312,88308,56479],{"class":488},[312,88310,492],{"class":324},[312,88312,2391],{"class":488},[312,88314,1437],{"class":1436},[312,88316,498],{"class":324},[312,88318,88319],{"class":314,"line":11519},[312,88320,3992],{"class":324},[312,88322,88323],{"class":314,"line":11544},[312,88324,4205],{"emptyLinePlaceholder":1881},[312,88326,88327,88329,88331,88333],{"class":314,"line":11567},[312,88328,87921],{"class":332},[312,88330,88282],{"class":332},[312,88332,3206],{"class":328},[312,88334,483],{"class":324},[312,88336,88337,88339,88341,88343,88345,88347,88349],{"class":314,"line":11591},[312,88338,56479],{"class":488},[312,88340,492],{"class":324},[312,88342,2021],{"class":488},[312,88344,1437],{"class":1436},[312,88346,3888],{"class":488},[312,88348,1437],{"class":1436},[312,88350,498],{"class":324},[312,88352,88353,88355,88357,88360],{"class":314,"line":11596},[312,88354,63501],{"class":488},[312,88356,492],{"class":324},[312,88358,88359],{"class":488},"#ccc",[312,88361,498],{"class":324},[312,88363,88364,88366,88368,88370],{"class":314,"line":11601},[312,88365,65748],{"class":488},[312,88367,492],{"class":324},[312,88369,56521],{"class":488},[312,88371,498],{"class":324},[312,88373,88374,88376,88378,88380],{"class":314,"line":11606},[312,88375,59198],{"class":488},[312,88377,492],{"class":324},[312,88379,62624],{"class":488},[312,88381,498],{"class":324},[312,88383,88384,88386,88388,88390,88392],{"class":314,"line":11615},[312,88385,56916],{"class":488},[312,88387,492],{"class":324},[312,88389,2027],{"class":488},[312,88391,1437],{"class":1436},[312,88393,498],{"class":324},[312,88395,88396,88398,88400,88402,88404],{"class":314,"line":11620},[312,88397,63528],{"class":488},[312,88399,492],{"class":324},[312,88401,2391],{"class":488},[312,88403,1437],{"class":1436},[312,88405,498],{"class":324},[312,88407,88408,88410,88412,88414,88416],{"class":314,"line":11626},[312,88409,56704],{"class":488},[312,88411,492],{"class":324},[312,88413,2494],{"class":488},[312,88415,1437],{"class":1436},[312,88417,498],{"class":324},[312,88419,88420],{"class":314,"line":11647},[312,88421,3992],{"class":324},[312,88423,88424],{"class":314,"line":11653},[312,88425,4205],{"emptyLinePlaceholder":1881},[312,88427,88428,88430,88432,88434,88437],{"class":314,"line":11667},[312,88429,87921],{"class":332},[312,88431,88282],{"class":332},[312,88433,3206],{"class":328},[312,88435,88436],{"class":332},".submit",[312,88438,483],{"class":324},[312,88440,88441,88443,88445,88448],{"class":314,"line":11673},[312,88442,56666],{"class":488},[312,88444,492],{"class":324},[312,88446,88447],{"class":488},"#369",[312,88449,498],{"class":324},[312,88451,88452],{"class":314,"line":11700},[312,88453,3992],{"class":324},[312,88455,88456,88458,88460],{"class":314,"line":11709},[312,88457,54203],{"class":324},[312,88459,1856],{"class":328},[312,88461,343],{"class":324},[312,88463,88464,88466,88468],{"class":314,"line":11715},[312,88465,353],{"class":324},[312,88467,53127],{"class":328},[312,88469,343],{"class":324},[312,88471,88472],{"class":314,"line":11723},[312,88473,4205],{"emptyLinePlaceholder":1881},[312,88475,88476,88478,88480],{"class":314,"line":11728},[312,88477,325],{"class":324},[312,88479,53586],{"class":328},[312,88481,343],{"class":324},[312,88483,88484,88486,88488,88490,88492,88495,88498,88500],{"class":314,"line":18404},[312,88485,53930],{"class":324},[312,88487,55671],{"class":328},[312,88489,16760],{"class":332},[312,88491,336],{"class":324},[312,88493,88494],{"class":339},"\"delete\"",[312,88496,88497],{"class":324},">删除\u003C\u002F",[312,88499,55671],{"class":328},[312,88501,343],{"class":324},[312,88503,88504,88506,88508,88510,88512,88515,88518,88520],{"class":314,"line":18410},[312,88505,53930],{"class":324},[312,88507,55671],{"class":328},[312,88509,16760],{"class":332},[312,88511,336],{"class":324},[312,88513,88514],{"class":339},"\"login\"",[312,88516,88517],{"class":324},">登录\u003C\u002F",[312,88519,55671],{"class":328},[312,88521,343],{"class":324},[312,88523,88524,88526,88528],{"class":314,"line":18433},[312,88525,53930],{"class":324},[312,88527,53599],{"class":328},[312,88529,343],{"class":324},[312,88531,88532],{"class":314,"line":18439},[312,88533,88534],{"class":318},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[312,88536,88537,88539,88542,88544,88546,88548,88550,88552,88555,88557,88559],{"class":314,"line":18462},[312,88538,71861],{"class":1436},[312,88540,88541],{"class":332}," Modal",[312,88543,1576],{"class":324},[312,88545,628],{"class":1579},[312,88547,15366],{"class":1436},[312,88549,71707],{"class":339},[312,88551,733],{"class":324},[312,88553,88554],{"class":1579},"message",[312,88556,15366],{"class":1436},[312,88558,71707],{"class":339},[312,88560,14244],{"class":324},[312,88562,88563],{"class":314,"line":18476},[312,88564,88565],{"class":318},"      \u002F\u002F 创建Model 模态框盒子\n",[312,88567,88568],{"class":314,"line":18496},[312,88569,88570],{"class":318},"      \u002F\u002F 1.1 创建div标签\n",[312,88572,88573,88575,88578,88580,88582,88584,88586,88588],{"class":314,"line":18502},[312,88574,71828],{"class":488},[312,88576,88577],{"class":324},".modalBox ",[312,88579,336],{"class":1436},[312,88581,56180],{"class":324},[312,88583,71928],{"class":332},[312,88585,1576],{"class":324},[312,88587,83702],{"class":339},[312,88589,1959],{"class":324},[312,88591,88592],{"class":314,"line":18513},[312,88593,88594],{"class":318},"      \u002F\u002F 1.2 给div 添加类名为model\n",[312,88596,88597,88599,88602,88604],{"class":314,"line":18536},[312,88598,71828],{"class":488},[312,88600,88601],{"class":324},".modalBox.className ",[312,88603,336],{"class":1436},[312,88605,88606],{"class":339}," 'modal'\n",[312,88608,88609],{"class":314,"line":18558},[312,88610,88611],{"class":318},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[312,88613,88614,88616,88619,88621],{"class":314,"line":18563},[312,88615,71828],{"class":488},[312,88617,88618],{"class":324},".modalBox.innerHTML ",[312,88620,336],{"class":1436},[312,88622,71945],{"class":339},[312,88624,88625,88628,88630],{"class":314,"line":18569},[312,88626,88627],{"class":339},"        \u003Cdiv class=\"header\">${",[312,88629,628],{"class":324},[312,88631,88632],{"class":339},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[312,88634,88635,88638,88640],{"class":314,"line":18583},[312,88636,88637],{"class":339},"        \u003Cdiv class=\"body\">${",[312,88639,88554],{"class":324},[312,88641,88642],{"class":339},"}\u003C\u002Fdiv>\n",[312,88644,88645],{"class":314,"line":18596},[312,88646,88647],{"class":339},"      `\n",[312,88649,88650],{"class":314,"line":18601},[312,88651,88652],{"class":318},"      \u002F\u002F console.log(this.modalBox)\n",[312,88654,88655],{"class":314,"line":18615},[312,88656,3992],{"class":324},[312,88658,88659],{"class":314,"line":18620},[312,88660,88661],{"class":318},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[312,88663,88664],{"class":314,"line":18626},[312,88665,88666],{"class":318},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[312,88668,88669],{"class":314,"line":18631},[312,88670,88671],{"class":318},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[312,88673,88674,88677,88679,88681,88683,88686,88688,88690],{"class":314,"line":18645},[312,88675,88676],{"class":488},"    Modal",[312,88678,2503],{"class":324},[312,88680,87350],{"class":488},[312,88682,2503],{"class":324},[312,88684,88685],{"class":332},"open",[312,88687,15366],{"class":1436},[312,88689,60700],{"class":1436},[312,88691,56236],{"class":324},[312,88693,88694],{"class":314,"line":18650},[312,88695,88696],{"class":318},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[312,88698,88699,88701,88704,88706,88708,88710,88712,88715],{"class":314,"line":18655},[312,88700,60010],{"class":1436},[312,88702,88703],{"class":488}," box",[312,88705,15366],{"class":1436},[312,88707,56180],{"class":324},[312,88709,56183],{"class":332},[312,88711,1576],{"class":324},[312,88713,88714],{"class":339},"'.modal'",[312,88716,1959],{"class":324},[312,88718,88719],{"class":314,"line":18669},[312,88720,88721],{"class":318},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[312,88723,88724,88727,88729,88732,88734],{"class":314,"line":18681},[312,88725,88726],{"class":324},"      box ",[312,88728,3521],{"class":1436},[312,88730,88731],{"class":324}," box.",[312,88733,58788],{"class":332},[312,88735,3781],{"class":324},[312,88737,88738],{"class":314,"line":18686},[312,88739,88740],{"class":318},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[312,88742,88743],{"class":314,"line":18699},[312,88744,88745],{"class":318},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[312,88747,88748],{"class":314,"line":18704},[312,88749,88750],{"class":318},"      \u002F\u002F append可以增加对象\n",[312,88752,88753,88756,88759,88761,88764],{"class":314,"line":18709},[312,88754,88755],{"class":324},"      document.body.",[312,88757,88758],{"class":332},"append",[312,88760,1576],{"class":324},[312,88762,88763],{"class":488},"this",[312,88765,88766],{"class":324},".modalBox)\n",[312,88768,88769],{"class":314,"line":18714},[312,88770,4205],{"emptyLinePlaceholder":1881},[312,88772,88773],{"class":314,"line":18727},[312,88774,88775],{"class":318},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[312,88777,88778,88780,88783,88785,88787,88790,88792,88794,88796,88798,88801,88803],{"class":314,"line":18732},[312,88779,71828],{"class":488},[312,88781,88782],{"class":324},".modalBox.",[312,88784,56183],{"class":332},[312,88786,1576],{"class":324},[312,88788,88789],{"class":339},"'i'",[312,88791,32622],{"class":324},[312,88793,59595],{"class":332},[312,88795,1576],{"class":324},[312,88797,59600],{"class":339},[312,88799,88800],{"class":324},", () ",[312,88802,86493],{"class":1436},[312,88804,483],{"class":324},[312,88806,88807],{"class":314,"line":34428},[312,88808,88809],{"class":318},"        \u002F\u002F 这个地方需要用到箭头函数\n",[312,88811,88812],{"class":314,"line":34434},[312,88813,88814],{"class":318},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[312,88816,88817],{"class":314,"line":34440},[312,88818,88819],{"class":318},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[312,88821,88822,88824,88826,88829],{"class":314,"line":34446},[312,88823,66504],{"class":488},[312,88825,2503],{"class":324},[312,88827,88828],{"class":332},"close",[312,88830,3781],{"class":324},[312,88832,88833],{"class":314,"line":34452},[312,88834,66593],{"class":324},[312,88836,88837],{"class":314,"line":34463},[312,88838,3992],{"class":324},[312,88840,88841],{"class":314,"line":34469},[312,88842,4205],{"emptyLinePlaceholder":1881},[312,88844,88845],{"class":314,"line":34489},[312,88846,88847],{"class":318},"    \u002F\u002F 测试一下 点击 删除按钮\n",[312,88849,88850,88852,88854,88856,88859,88861,88863,88865,88867,88869,88871],{"class":314,"line":34495},[312,88851,54193],{"class":324},[312,88853,56183],{"class":332},[312,88855,1576],{"class":324},[312,88857,88858],{"class":339},"'#delete'",[312,88860,32622],{"class":324},[312,88862,59595],{"class":332},[312,88864,1576],{"class":324},[312,88866,59600],{"class":339},[312,88868,88800],{"class":324},[312,88870,86493],{"class":1436},[312,88872,483],{"class":324},[312,88874,88875],{"class":314,"line":34506},[312,88876,88877],{"class":318},"      \u002F\u002F 先调用Model构造函数\n",[312,88879,88880,88882,88885,88887,88889,88891,88893,88896,88898,88901],{"class":314,"line":34512},[312,88881,60010],{"class":1436},[312,88883,88884],{"class":488}," del",[312,88886,15366],{"class":1436},[312,88888,13381],{"class":1436},[312,88890,88541],{"class":332},[312,88892,1576],{"class":324},[312,88894,88895],{"class":339},"'温馨的提示'",[312,88897,733],{"class":324},[312,88899,88900],{"class":339},"'您没有删除权限操作'",[312,88902,1959],{"class":324},[312,88904,88905],{"class":314,"line":34518},[312,88906,88907],{"class":318},"      \u002F\u002F 实例对象调用open方法\n",[312,88909,88910,88913,88915],{"class":314,"line":34524},[312,88911,88912],{"class":324},"      del.",[312,88914,88685],{"class":332},[312,88916,3781],{"class":324},[312,88918,88919],{"class":314,"line":34530},[312,88920,35256],{"class":324},[312,88922,88923],{"class":314,"line":34536},[312,88924,88925],{"class":318},"    \u002F\u002F 测试一下 点击 登录按钮\n",[312,88927,88928,88930,88932,88934,88937,88939,88941,88943,88945,88947,88949],{"class":314,"line":34542},[312,88929,54193],{"class":324},[312,88931,56183],{"class":332},[312,88933,1576],{"class":324},[312,88935,88936],{"class":339},"'#login'",[312,88938,32622],{"class":324},[312,88940,59595],{"class":332},[312,88942,1576],{"class":324},[312,88944,59600],{"class":339},[312,88946,88800],{"class":324},[312,88948,86493],{"class":1436},[312,88950,483],{"class":324},[312,88952,88953],{"class":314,"line":34548},[312,88954,88877],{"class":318},[312,88956,88957,88959,88962,88964,88966,88968,88970,88973,88975,88978],{"class":314,"line":34568},[312,88958,60010],{"class":1436},[312,88960,88961],{"class":488}," log",[312,88963,15366],{"class":1436},[312,88965,13381],{"class":1436},[312,88967,88541],{"class":332},[312,88969,1576],{"class":324},[312,88971,88972],{"class":339},"'友情提示'",[312,88974,733],{"class":324},[312,88976,88977],{"class":339},"'您还没有登录呢'",[312,88979,1959],{"class":324},[312,88981,88982],{"class":314,"line":34574},[312,88983,88907],{"class":318},[312,88985,88986,88989,88991],{"class":314,"line":34590},[312,88987,88988],{"class":324},"      log.",[312,88990,88685],{"class":332},[312,88992,3781],{"class":324},[312,88994,88995],{"class":314,"line":34596},[312,88996,35256],{"class":324},[312,88998,88999],{"class":314,"line":34610},[312,89000,89001],{"class":318},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[312,89003,89004,89006,89008,89010,89012,89014,89016,89018],{"class":314,"line":34616},[312,89005,88676],{"class":488},[312,89007,2503],{"class":324},[312,89009,87350],{"class":488},[312,89011,2503],{"class":324},[312,89013,88828],{"class":332},[312,89015,15366],{"class":1436},[312,89017,60700],{"class":1436},[312,89019,56236],{"class":324},[312,89021,89022,89024,89026,89028],{"class":314,"line":34631},[312,89023,71828],{"class":488},[312,89025,88782],{"class":324},[312,89027,58788],{"class":332},[312,89029,3781],{"class":324},[312,89031,89032],{"class":314,"line":34637},[312,89033,3992],{"class":324},[312,89035,89036,89038,89040],{"class":314,"line":34646},[312,89037,54203],{"class":324},[312,89039,53599],{"class":328},[312,89041,343],{"class":324},[312,89043,89044,89046,89048],{"class":314,"line":34652},[312,89045,353],{"class":324},[312,89047,53586],{"class":328},[312,89049,343],{"class":324},[312,89051,89052],{"class":314,"line":34661},[312,89053,4205],{"emptyLinePlaceholder":1881},[312,89055,89056,89058,89060],{"class":314,"line":34667},[312,89057,353],{"class":324},[312,89059,52430],{"class":328},[312,89061,343],{"class":324},[24,89063,89064],{},[19,89065],{"alt":308,"src":89066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,89068,89070],{"id":89069},"_414-深浅拷贝","4.14 深浅拷贝",[69,89072,89074],{"id":89073},"_4141-浅拷贝","4.14.1 浅拷贝",[24,89076,89077],{},[19,89078],{"alt":308,"src":89079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[24,89081,89082],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[24,89084,89085],{},[19,89086],{"alt":308,"src":89087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[24,89089,89090],{},[19,89091],{"alt":308,"src":89092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[24,89094,89095],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[24,89097,89098],{},[19,89099],{"alt":308,"src":89100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[24,89102,13135],{},[24,89104,89105],{},[19,89106],{"alt":308,"src":89107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[69,89109,89111],{"id":89110},"_4142-深拷贝","4.14.2 深拷贝",[24,89113,89114],{},"深拷贝：拷贝的是对象，不是地址",[24,89116,89117],{},"常用的三种方法：",[140,89119,89120,89123,89126],{},[143,89121,89122],{},"通过递归实现深拷贝",[143,89124,89125],{},"lodash\u002FcloneDeep",[143,89127,89128],{},"通过JSON.stringify()实现",[23796,89130,89132],{"id":89131},"_41421-递归函数","4.14.2.1 递归函数",[24,89134,89135],{},[19,89136],{"alt":308,"src":89137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[140,89139,89140],{},[143,89141,89142],{},"死递归占溢出：",[303,89144,89146],{"className":54853,"code":89145,"language":54855,"meta":308,"style":308},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[119,89147,89148,89156,89164,89168,89173,89177,89182,89190],{"__ignoreMap":308},[312,89149,89150,89152,89154],{"class":314,"line":315},[312,89151,325],{"class":324},[312,89153,53586],{"class":328},[312,89155,343],{"class":324},[312,89157,89158,89160,89162],{"class":314,"line":171},[312,89159,53930],{"class":324},[312,89161,53599],{"class":328},[312,89163,343],{"class":324},[312,89165,89166],{"class":314,"line":274},[312,89167,78915],{"class":324},[312,89169,89170],{"class":314,"line":298},[312,89171,89172],{"class":324},"      fn()\n",[312,89174,89175],{"class":314,"line":974},[312,89176,3992],{"class":324},[312,89178,89179],{"class":314,"line":980},[312,89180,89181],{"class":324},"    fn()\n",[312,89183,89184,89186,89188],{"class":314,"line":997},[312,89185,54203],{"class":324},[312,89187,53599],{"class":328},[312,89189,343],{"class":324},[312,89191,89192,89194,89196],{"class":314,"line":1003},[312,89193,353],{"class":324},[312,89195,53586],{"class":328},[312,89197,343],{"class":324},[140,89199,89200],{"start":171},[143,89201,89202],{},"递归函数要加判断条件：",[24,89204,89205],{},[19,89206],{"alt":308,"src":89207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[140,89209,89210],{"start":274},[143,89211,89212],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[303,89214,89216],{"className":52428,"code":89215,"language":52430,"meta":308,"style":308},"\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",[119,89217,89218,89228,89242,89246,89254,89268,89288,89300,89308,89312,89320,89332,89340,89348,89373,89385,89389,89396,89404,89412,89416],{"__ignoreMap":308},[312,89219,89220,89222,89224,89226],{"class":314,"line":315},[312,89221,53092],{"class":324},[312,89223,53095],{"class":328},[312,89225,53098],{"class":332},[312,89227,343],{"class":324},[312,89229,89230,89232,89234,89236,89238,89240],{"class":314,"line":171},[312,89231,325],{"class":324},[312,89233,52430],{"class":328},[312,89235,53109],{"class":332},[312,89237,336],{"class":324},[312,89239,53114],{"class":339},[312,89241,343],{"class":324},[312,89243,89244],{"class":314,"line":274},[312,89245,4205],{"emptyLinePlaceholder":1881},[312,89247,89248,89250,89252],{"class":314,"line":298},[312,89249,325],{"class":324},[312,89251,53127],{"class":328},[312,89253,343],{"class":324},[312,89255,89256,89258,89260,89262,89264,89266],{"class":314,"line":974},[312,89257,53930],{"class":324},[312,89259,53137],{"class":328},[312,89261,53140],{"class":332},[312,89263,336],{"class":324},[312,89265,53145],{"class":339},[312,89267,343],{"class":324},[312,89269,89270,89272,89274,89276,89278,89280,89282,89284,89286],{"class":314,"line":980},[312,89271,53930],{"class":324},[312,89273,53137],{"class":328},[312,89275,16721],{"class":332},[312,89277,336],{"class":324},[312,89279,53184],{"class":339},[312,89281,53164],{"class":332},[312,89283,336],{"class":324},[312,89285,53191],{"class":339},[312,89287,343],{"class":324},[312,89289,89290,89292,89294,89296,89298],{"class":314,"line":997},[312,89291,53930],{"class":324},[312,89293,628],{"class":328},[312,89295,53202],{"class":324},[312,89297,628],{"class":328},[312,89299,343],{"class":324},[312,89301,89302,89304,89306],{"class":314,"line":1003},[312,89303,353],{"class":324},[312,89305,53127],{"class":328},[312,89307,343],{"class":324},[312,89309,89310],{"class":314,"line":1020},[312,89311,4205],{"emptyLinePlaceholder":1881},[312,89313,89314,89316,89318],{"class":314,"line":1026},[312,89315,325],{"class":324},[312,89317,53586],{"class":328},[312,89319,343],{"class":324},[312,89321,89322,89324,89326,89328,89330],{"class":314,"line":3418},[312,89323,53930],{"class":324},[312,89325,329],{"class":328},[312,89327,57096],{"class":324},[312,89329,329],{"class":328},[312,89331,343],{"class":324},[312,89333,89334,89336,89338],{"class":314,"line":3423},[312,89335,53930],{"class":324},[312,89337,53599],{"class":328},[312,89339,343],{"class":324},[312,89341,89342,89344,89346],{"class":314,"line":3429},[312,89343,71861],{"class":1436},[312,89345,75545],{"class":332},[312,89347,12656],{"class":324},[312,89349,89350,89352,89354,89356,89358,89360,89362,89364,89366,89368,89371],{"class":314,"line":3434},[312,89351,57553],{"class":324},[312,89353,56183],{"class":332},[312,89355,1576],{"class":324},[312,89357,83702],{"class":339},[312,89359,76021],{"class":324},[312,89361,336],{"class":1436},[312,89363,13381],{"class":1436},[312,89365,75561],{"class":332},[312,89367,19061],{"class":324},[312,89369,89370],{"class":332},"toLocaleString",[312,89372,3781],{"class":324},[312,89374,89375,89378,89381,89383],{"class":314,"line":3448},[312,89376,89377],{"class":332},"      setTimeout",[312,89379,89380],{"class":324},"(getTime, ",[312,89382,8214],{"class":488},[312,89384,1959],{"class":324},[312,89386,89387],{"class":314,"line":3453},[312,89388,3992],{"class":324},[312,89390,89391,89394],{"class":314,"line":3459},[312,89392,89393],{"class":332},"    getTime",[312,89395,3781],{"class":324},[312,89397,89398,89400,89402],{"class":314,"line":3480},[312,89399,54203],{"class":324},[312,89401,53599],{"class":328},[312,89403,343],{"class":324},[312,89405,89406,89408,89410],{"class":314,"line":3485},[312,89407,353],{"class":324},[312,89409,53586],{"class":328},[312,89411,343],{"class":324},[312,89413,89414],{"class":314,"line":3499},[312,89415,4205],{"emptyLinePlaceholder":1881},[312,89417,89418,89420,89422],{"class":314,"line":3504},[312,89419,353],{"class":324},[312,89421,52430],{"class":328},[312,89423,343],{"class":324},[24,89425,89426],{},[19,89427],{"alt":308,"src":89428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[140,89430,89431],{"start":298},[143,89432,89122],{},[24,89434,89435],{},[19,89436],{"alt":308,"src":89437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[24,89439,89440],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[24,89442,40984],{},[24,89444,89445],{},"这个是简易版的递归函数深拷贝",[24,89447,89448],{},"一定要注意先数组再对象，因为万物皆可对象",[303,89450,89452],{"className":52428,"code":89451,"language":52430,"meta":308,"style":308},"\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",[119,89453,89454,89464,89478,89482,89490,89504,89524,89536,89544,89548,89556,89564,89574,89583,89591,89607,89611,89619,89623,89627,89639,89644,89663,89679,89684,89689,89694,89709,89714,89719,89728,89736,89753,89761,89767,89775,89780,89785,89794,89798,89802,89806,89817,89826,89836,89850,89860,89868,89876,89884,89888],{"__ignoreMap":308},[312,89455,89456,89458,89460,89462],{"class":314,"line":315},[312,89457,53092],{"class":324},[312,89459,53095],{"class":328},[312,89461,53098],{"class":332},[312,89463,343],{"class":324},[312,89465,89466,89468,89470,89472,89474,89476],{"class":314,"line":171},[312,89467,325],{"class":324},[312,89469,52430],{"class":328},[312,89471,53109],{"class":332},[312,89473,336],{"class":324},[312,89475,53114],{"class":339},[312,89477,343],{"class":324},[312,89479,89480],{"class":314,"line":274},[312,89481,4205],{"emptyLinePlaceholder":1881},[312,89483,89484,89486,89488],{"class":314,"line":298},[312,89485,325],{"class":324},[312,89487,53127],{"class":328},[312,89489,343],{"class":324},[312,89491,89492,89494,89496,89498,89500,89502],{"class":314,"line":974},[312,89493,53930],{"class":324},[312,89495,53137],{"class":328},[312,89497,53140],{"class":332},[312,89499,336],{"class":324},[312,89501,53145],{"class":339},[312,89503,343],{"class":324},[312,89505,89506,89508,89510,89512,89514,89516,89518,89520,89522],{"class":314,"line":980},[312,89507,53930],{"class":324},[312,89509,53137],{"class":328},[312,89511,16721],{"class":332},[312,89513,336],{"class":324},[312,89515,53184],{"class":339},[312,89517,53164],{"class":332},[312,89519,336],{"class":324},[312,89521,53191],{"class":339},[312,89523,343],{"class":324},[312,89525,89526,89528,89530,89532,89534],{"class":314,"line":997},[312,89527,53930],{"class":324},[312,89529,628],{"class":328},[312,89531,53202],{"class":324},[312,89533,628],{"class":328},[312,89535,343],{"class":324},[312,89537,89538,89540,89542],{"class":314,"line":1003},[312,89539,353],{"class":324},[312,89541,53127],{"class":328},[312,89543,343],{"class":324},[312,89545,89546],{"class":314,"line":1020},[312,89547,4205],{"emptyLinePlaceholder":1881},[312,89549,89550,89552,89554],{"class":314,"line":1026},[312,89551,325],{"class":324},[312,89553,53586],{"class":328},[312,89555,343],{"class":324},[312,89557,89558,89560,89562],{"class":314,"line":3418},[312,89559,53930],{"class":324},[312,89561,53599],{"class":328},[312,89563,343],{"class":324},[312,89565,89566,89568,89570,89572],{"class":314,"line":3423},[312,89567,13024],{"class":1436},[312,89569,71748],{"class":488},[312,89571,15366],{"class":1436},[312,89573,483],{"class":324},[312,89575,89576,89578,89581],{"class":314,"line":3429},[312,89577,73388],{"class":324},[312,89579,89580],{"class":339},"'pink'",[312,89582,33261],{"class":324},[312,89584,89585,89587,89589],{"class":314,"line":3434},[312,89586,73398],{"class":324},[312,89588,2595],{"class":488},[312,89590,33261],{"class":324},[312,89592,89593,89596,89599,89601,89604],{"class":314,"line":3448},[312,89594,89595],{"class":324},"      hobby: [",[312,89597,89598],{"class":339},"'乒乓球'",[312,89600,733],{"class":324},[312,89602,89603],{"class":339},"'足球'",[312,89605,89606],{"class":324},"],\n",[312,89608,89609],{"class":314,"line":3453},[312,89610,79644],{"class":324},[312,89612,89613,89616],{"class":314,"line":3459},[312,89614,89615],{"class":324},"        baby: ",[312,89617,89618],{"class":339},"'小pink'\n",[312,89620,89621],{"class":314,"line":3480},[312,89622,54184],{"class":324},[312,89624,89625],{"class":314,"line":3485},[312,89626,3992],{"class":324},[312,89628,89629,89631,89634,89636],{"class":314,"line":3499},[312,89630,13024],{"class":1436},[312,89632,89633],{"class":488}," o",[312,89635,15366],{"class":1436},[312,89637,89638],{"class":324}," {}\n",[312,89640,89641],{"class":314,"line":3504},[312,89642,89643],{"class":318},"    \u002F\u002F 拷贝函数\n",[312,89645,89646,89648,89651,89653,89656,89658,89661],{"class":314,"line":3533},[312,89647,71861],{"class":1436},[312,89649,89650],{"class":332}," deepCopy",[312,89652,1576],{"class":324},[312,89654,89655],{"class":1579},"newObj",[312,89657,733],{"class":324},[312,89659,89660],{"class":1579},"oldObj",[312,89662,14244],{"class":324},[312,89664,89665,89667,89669,89671,89674,89676],{"class":314,"line":3538},[312,89666,54070],{"class":1436},[312,89668,3464],{"class":324},[312,89670,53633],{"class":1436},[312,89672,89673],{"class":324}," k ",[312,89675,27839],{"class":1436},[312,89677,89678],{"class":324}," oldObj) {\n",[312,89680,89681],{"class":314,"line":3555},[312,89682,89683],{"class":318},"        \u002F\u002F 处理数组的问题\n",[312,89685,89686],{"class":314,"line":3560},[312,89687,89688],{"class":318},"        \u002F\u002F 判断是否属于数组\n",[312,89690,89691],{"class":314,"line":3565},[312,89692,89693],{"class":318},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[312,89695,89696,89698,89701,89704,89707],{"class":314,"line":3570},[312,89697,4302],{"class":1436},[312,89699,89700],{"class":324}," (oldObj[k] ",[312,89702,89703],{"class":1436},"instanceof",[312,89705,89706],{"class":332}," Array",[312,89708,14244],{"class":324},[312,89710,89711],{"class":314,"line":3584},[312,89712,89713],{"class":318},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[312,89715,89716],{"class":314,"line":3589},[312,89717,89718],{"class":318},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[312,89720,89721,89724,89726],{"class":314,"line":4382},[312,89722,89723],{"class":324},"          newObj[k] ",[312,89725,336],{"class":1436},[312,89727,53624],{"class":324},[312,89729,89730,89733],{"class":314,"line":4396},[312,89731,89732],{"class":332},"          deepCopy",[312,89734,89735],{"class":324},"(newObj[k], oldObj[k])\n",[312,89737,89738,89740,89742,89744,89746,89748,89751],{"class":314,"line":4404},[312,89739,81851],{"class":324},[312,89741,3507],{"class":1436},[312,89743,3510],{"class":1436},[312,89745,89700],{"class":324},[312,89747,89703],{"class":1436},[312,89749,89750],{"class":332}," Object",[312,89752,14244],{"class":324},[312,89754,89755,89757,89759],{"class":314,"line":4409},[312,89756,89723],{"class":324},[312,89758,336],{"class":1436},[312,89760,89638],{"class":324},[312,89762,89763,89765],{"class":314,"line":4415},[312,89764,89732],{"class":332},[312,89766,89735],{"class":324},[312,89768,89769,89771,89773],{"class":314,"line":4421},[312,89770,81851],{"class":324},[312,89772,3507],{"class":1436},[312,89774,483],{"class":324},[312,89776,89777],{"class":314,"line":4426},[312,89778,89779],{"class":318},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[312,89781,89782],{"class":314,"line":9751},[312,89783,89784],{"class":318},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[312,89786,89787,89789,89791],{"class":314,"line":9775},[312,89788,89723],{"class":324},[312,89790,336],{"class":1436},[312,89792,89793],{"class":324}," oldObj[k]\n",[312,89795,89796],{"class":314,"line":9780},[312,89797,4334],{"class":324},[312,89799,89800],{"class":314,"line":9786},[312,89801,54184],{"class":324},[312,89803,89804],{"class":314,"line":9813},[312,89805,3992],{"class":324},[312,89807,89808,89811,89814],{"class":314,"line":9818},[312,89809,89810],{"class":332},"    deepCopy",[312,89812,89813],{"class":324},"(o, obj) ",[312,89815,89816],{"class":318},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[312,89818,89819,89821,89823],{"class":314,"line":9824},[312,89820,75525],{"class":324},[312,89822,60029],{"class":332},[312,89824,89825],{"class":324},"(o)\n",[312,89827,89828,89831,89833],{"class":314,"line":9836},[312,89829,89830],{"class":324},"    o.age ",[312,89832,336],{"class":1436},[312,89834,89835],{"class":488}," 20\n",[312,89837,89838,89841,89843,89845,89847],{"class":314,"line":9848},[312,89839,89840],{"class":324},"    o.hobby[",[312,89842,858],{"class":488},[312,89844,6248],{"class":324},[312,89846,336],{"class":1436},[312,89848,89849],{"class":339}," '篮球'\n",[312,89851,89852,89855,89857],{"class":314,"line":9860},[312,89853,89854],{"class":324},"    o.family ",[312,89856,336],{"class":1436},[312,89858,89859],{"class":339}," '老pink'\n",[312,89861,89862,89864,89866],{"class":314,"line":11519},[312,89863,75525],{"class":324},[312,89865,60029],{"class":332},[312,89867,71813],{"class":324},[312,89869,89870,89872,89874],{"class":314,"line":11544},[312,89871,54203],{"class":324},[312,89873,53599],{"class":328},[312,89875,343],{"class":324},[312,89877,89878,89880,89882],{"class":314,"line":11567},[312,89879,353],{"class":324},[312,89881,53586],{"class":328},[312,89883,343],{"class":324},[312,89885,89886],{"class":314,"line":11591},[312,89887,4205],{"emptyLinePlaceholder":1881},[312,89889,89890,89892,89894],{"class":314,"line":11596},[312,89891,353],{"class":324},[312,89893,52430],{"class":328},[312,89895,343],{"class":324},[24,89897,89898],{},[19,89899],{"alt":308,"src":89900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[23796,89902,89904,89905],{"id":89903},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[27,89906,89907],{},"js库lodash里面cloneDeep内部实现了深拷贝",[24,89909,89910],{},[164,89911,89912],{"href":89912,"rel":89913},"https:\u002F\u002Fwww.lodashjs.com\u002F",[168],[24,89915,89916],{},"lodash里边的方法都要加上一个下划线_",[24,89918,89919],{},"_.cloneDeep()",[303,89921,89923],{"className":52428,"code":89922,"language":52430,"meta":308,"style":308},"\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",[119,89924,89925,89935,89949,89953,89961,89975,89995,90007,90015,90019,90027,90032,90051,90059,90069,90077,90085,90097,90101,90107,90111,90115,90131,90139,90148,90156,90164,90172,90176],{"__ignoreMap":308},[312,89926,89927,89929,89931,89933],{"class":314,"line":315},[312,89928,53092],{"class":324},[312,89930,53095],{"class":328},[312,89932,53098],{"class":332},[312,89934,343],{"class":324},[312,89936,89937,89939,89941,89943,89945,89947],{"class":314,"line":171},[312,89938,325],{"class":324},[312,89940,52430],{"class":328},[312,89942,53109],{"class":332},[312,89944,336],{"class":324},[312,89946,53114],{"class":339},[312,89948,343],{"class":324},[312,89950,89951],{"class":314,"line":274},[312,89952,4205],{"emptyLinePlaceholder":1881},[312,89954,89955,89957,89959],{"class":314,"line":298},[312,89956,325],{"class":324},[312,89958,53127],{"class":328},[312,89960,343],{"class":324},[312,89962,89963,89965,89967,89969,89971,89973],{"class":314,"line":974},[312,89964,53930],{"class":324},[312,89966,53137],{"class":328},[312,89968,53140],{"class":332},[312,89970,336],{"class":324},[312,89972,53145],{"class":339},[312,89974,343],{"class":324},[312,89976,89977,89979,89981,89983,89985,89987,89989,89991,89993],{"class":314,"line":980},[312,89978,53930],{"class":324},[312,89980,53137],{"class":328},[312,89982,16721],{"class":332},[312,89984,336],{"class":324},[312,89986,53184],{"class":339},[312,89988,53164],{"class":332},[312,89990,336],{"class":324},[312,89992,53191],{"class":339},[312,89994,343],{"class":324},[312,89996,89997,89999,90001,90003,90005],{"class":314,"line":997},[312,89998,53930],{"class":324},[312,90000,628],{"class":328},[312,90002,53202],{"class":324},[312,90004,628],{"class":328},[312,90006,343],{"class":324},[312,90008,90009,90011,90013],{"class":314,"line":1003},[312,90010,353],{"class":324},[312,90012,53127],{"class":328},[312,90014,343],{"class":324},[312,90016,90017],{"class":314,"line":1020},[312,90018,4205],{"emptyLinePlaceholder":1881},[312,90020,90021,90023,90025],{"class":314,"line":1026},[312,90022,325],{"class":324},[312,90024,53586],{"class":328},[312,90026,343],{"class":324},[312,90028,90029],{"class":314,"line":3418},[312,90030,90031],{"class":318},"  \u003C!-- 先引用这个库 -->\n",[312,90033,90034,90036,90038,90040,90042,90045,90047,90049],{"class":314,"line":3423},[312,90035,53930],{"class":324},[312,90037,53599],{"class":328},[312,90039,57021],{"class":332},[312,90041,336],{"class":324},[312,90043,90044],{"class":339},"\"lodash.min.js\"",[312,90046,57096],{"class":324},[312,90048,53599],{"class":328},[312,90050,343],{"class":324},[312,90052,90053,90055,90057],{"class":314,"line":3429},[312,90054,53930],{"class":324},[312,90056,53599],{"class":328},[312,90058,343],{"class":324},[312,90060,90061,90063,90065,90067],{"class":314,"line":3434},[312,90062,13024],{"class":1436},[312,90064,71748],{"class":488},[312,90066,15366],{"class":1436},[312,90068,483],{"class":324},[312,90070,90071,90073,90075],{"class":314,"line":3448},[312,90072,73388],{"class":324},[312,90074,89580],{"class":339},[312,90076,33261],{"class":324},[312,90078,90079,90081,90083],{"class":314,"line":3453},[312,90080,73398],{"class":324},[312,90082,2595],{"class":488},[312,90084,33261],{"class":324},[312,90086,90087,90089,90091,90093,90095],{"class":314,"line":3459},[312,90088,89595],{"class":324},[312,90090,89598],{"class":339},[312,90092,733],{"class":324},[312,90094,89603],{"class":339},[312,90096,89606],{"class":324},[312,90098,90099],{"class":314,"line":3480},[312,90100,79644],{"class":324},[312,90102,90103,90105],{"class":314,"line":3485},[312,90104,89615],{"class":324},[312,90106,89618],{"class":339},[312,90108,90109],{"class":314,"line":3499},[312,90110,54184],{"class":324},[312,90112,90113],{"class":314,"line":3504},[312,90114,3992],{"class":324},[312,90116,90117,90119,90121,90123,90126,90129],{"class":314,"line":3533},[312,90118,13024],{"class":1436},[312,90120,89633],{"class":488},[312,90122,15366],{"class":1436},[312,90124,90125],{"class":324}," _.",[312,90127,90128],{"class":332},"cloneDeep",[312,90130,71813],{"class":324},[312,90132,90133,90135,90137],{"class":314,"line":3538},[312,90134,75525],{"class":324},[312,90136,60029],{"class":332},[312,90138,89825],{"class":324},[312,90140,90141,90144,90146],{"class":314,"line":3555},[312,90142,90143],{"class":324},"    o.family.baby ",[312,90145,336],{"class":1436},[312,90147,89859],{"class":339},[312,90149,90150,90152,90154],{"class":314,"line":3560},[312,90151,75525],{"class":324},[312,90153,60029],{"class":332},[312,90155,71813],{"class":324},[312,90157,90158,90160,90162],{"class":314,"line":3565},[312,90159,54203],{"class":324},[312,90161,53599],{"class":328},[312,90163,343],{"class":324},[312,90165,90166,90168,90170],{"class":314,"line":3570},[312,90167,353],{"class":324},[312,90169,53586],{"class":328},[312,90171,343],{"class":324},[312,90173,90174],{"class":314,"line":3584},[312,90175,4205],{"emptyLinePlaceholder":1881},[312,90177,90178,90180,90182],{"class":314,"line":3589},[312,90179,353],{"class":324},[312,90181,52430],{"class":328},[312,90183,343],{"class":324},[24,90185,90186],{},[19,90187],{"alt":308,"src":90188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[23796,90190,90192],{"id":90191},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[303,90194,90196],{"className":52428,"code":90195,"language":52430,"meta":308,"style":308},"\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",[119,90197,90198,90208,90222,90226,90234,90248,90268,90280,90288,90292,90300,90308,90318,90326,90334,90346,90350,90356,90360,90364,90369,90374,90379,90405,90413,90422,90430,90438,90446,90450],{"__ignoreMap":308},[312,90199,90200,90202,90204,90206],{"class":314,"line":315},[312,90201,53092],{"class":324},[312,90203,53095],{"class":328},[312,90205,53098],{"class":332},[312,90207,343],{"class":324},[312,90209,90210,90212,90214,90216,90218,90220],{"class":314,"line":171},[312,90211,325],{"class":324},[312,90213,52430],{"class":328},[312,90215,53109],{"class":332},[312,90217,336],{"class":324},[312,90219,53114],{"class":339},[312,90221,343],{"class":324},[312,90223,90224],{"class":314,"line":274},[312,90225,4205],{"emptyLinePlaceholder":1881},[312,90227,90228,90230,90232],{"class":314,"line":298},[312,90229,325],{"class":324},[312,90231,53127],{"class":328},[312,90233,343],{"class":324},[312,90235,90236,90238,90240,90242,90244,90246],{"class":314,"line":974},[312,90237,53930],{"class":324},[312,90239,53137],{"class":328},[312,90241,53140],{"class":332},[312,90243,336],{"class":324},[312,90245,53145],{"class":339},[312,90247,343],{"class":324},[312,90249,90250,90252,90254,90256,90258,90260,90262,90264,90266],{"class":314,"line":980},[312,90251,53930],{"class":324},[312,90253,53137],{"class":328},[312,90255,16721],{"class":332},[312,90257,336],{"class":324},[312,90259,53184],{"class":339},[312,90261,53164],{"class":332},[312,90263,336],{"class":324},[312,90265,53191],{"class":339},[312,90267,343],{"class":324},[312,90269,90270,90272,90274,90276,90278],{"class":314,"line":997},[312,90271,53930],{"class":324},[312,90273,628],{"class":328},[312,90275,53202],{"class":324},[312,90277,628],{"class":328},[312,90279,343],{"class":324},[312,90281,90282,90284,90286],{"class":314,"line":1003},[312,90283,353],{"class":324},[312,90285,53127],{"class":328},[312,90287,343],{"class":324},[312,90289,90290],{"class":314,"line":1020},[312,90291,4205],{"emptyLinePlaceholder":1881},[312,90293,90294,90296,90298],{"class":314,"line":1026},[312,90295,325],{"class":324},[312,90297,53586],{"class":328},[312,90299,343],{"class":324},[312,90301,90302,90304,90306],{"class":314,"line":3418},[312,90303,53930],{"class":324},[312,90305,53599],{"class":328},[312,90307,343],{"class":324},[312,90309,90310,90312,90314,90316],{"class":314,"line":3423},[312,90311,13024],{"class":1436},[312,90313,71748],{"class":488},[312,90315,15366],{"class":1436},[312,90317,483],{"class":324},[312,90319,90320,90322,90324],{"class":314,"line":3429},[312,90321,73388],{"class":324},[312,90323,89580],{"class":339},[312,90325,33261],{"class":324},[312,90327,90328,90330,90332],{"class":314,"line":3434},[312,90329,73398],{"class":324},[312,90331,2595],{"class":488},[312,90333,33261],{"class":324},[312,90335,90336,90338,90340,90342,90344],{"class":314,"line":3448},[312,90337,89595],{"class":324},[312,90339,89598],{"class":339},[312,90341,733],{"class":324},[312,90343,89603],{"class":339},[312,90345,89606],{"class":324},[312,90347,90348],{"class":314,"line":3453},[312,90349,79644],{"class":324},[312,90351,90352,90354],{"class":314,"line":3459},[312,90353,89615],{"class":324},[312,90355,89618],{"class":339},[312,90357,90358],{"class":314,"line":3480},[312,90359,54184],{"class":324},[312,90361,90362],{"class":314,"line":3485},[312,90363,3992],{"class":324},[312,90365,90366],{"class":314,"line":3499},[312,90367,90368],{"class":318},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[312,90370,90371],{"class":314,"line":3504},[312,90372,90373],{"class":318},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[312,90375,90376],{"class":314,"line":3533},[312,90377,90378],{"class":318},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[312,90380,90381,90383,90385,90387,90390,90392,90395,90397,90399,90401,90403],{"class":314,"line":3538},[312,90382,13024],{"class":1436},[312,90384,89633],{"class":488},[312,90386,15366],{"class":1436},[312,90388,90389],{"class":488}," JSON",[312,90391,2503],{"class":324},[312,90393,90394],{"class":332},"parse",[312,90396,1576],{"class":324},[312,90398,73436],{"class":488},[312,90400,2503],{"class":324},[312,90402,73441],{"class":332},[312,90404,73444],{"class":324},[312,90406,90407,90409,90411],{"class":314,"line":3555},[312,90408,75525],{"class":324},[312,90410,60029],{"class":332},[312,90412,89825],{"class":324},[312,90414,90415,90417,90419],{"class":314,"line":3560},[312,90416,90143],{"class":324},[312,90418,336],{"class":1436},[312,90420,90421],{"class":339}," '123'\n",[312,90423,90424,90426,90428],{"class":314,"line":3565},[312,90425,75525],{"class":324},[312,90427,60029],{"class":332},[312,90429,71813],{"class":324},[312,90431,90432,90434,90436],{"class":314,"line":3570},[312,90433,54203],{"class":324},[312,90435,53599],{"class":328},[312,90437,343],{"class":324},[312,90439,90440,90442,90444],{"class":314,"line":3584},[312,90441,353],{"class":324},[312,90443,53586],{"class":328},[312,90445,343],{"class":324},[312,90447,90448],{"class":314,"line":3589},[312,90449,4205],{"emptyLinePlaceholder":1881},[312,90451,90452,90454,90456],{"class":314,"line":4382},[312,90453,353],{"class":324},[312,90455,52430],{"class":328},[312,90457,343],{"class":324},[24,90459,90460],{},[19,90461],{"alt":308,"src":90462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90464,90466],{"id":90465},"_415-异常处理","4.15 异常处理",[140,90468,90469],{},[143,90470,90471],{},"throw抛异常",[24,90473,90474],{},[19,90475],{"alt":308,"src":90476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[140,90478,90479],{"start":171},[143,90480,90481],{},"try\u002Fcatch 捕获错误信息",[24,90483,90484],{},[19,90485],{"alt":308,"src":90486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[303,90488,90490],{"className":52428,"code":90489,"language":52430,"meta":308,"style":308},"\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",[119,90491,90492,90502,90516,90520,90528,90542,90562,90574,90582,90586,90594,90606,90614,90623,90630,90635,90654,90663,90674,90679,90689,90694,90699,90704,90721,90725,90730,90737,90749,90753,90765,90769,90773,90778,90783,90790,90798,90806,90810],{"__ignoreMap":308},[312,90493,90494,90496,90498,90500],{"class":314,"line":315},[312,90495,53092],{"class":324},[312,90497,53095],{"class":328},[312,90499,53098],{"class":332},[312,90501,343],{"class":324},[312,90503,90504,90506,90508,90510,90512,90514],{"class":314,"line":171},[312,90505,325],{"class":324},[312,90507,52430],{"class":328},[312,90509,53109],{"class":332},[312,90511,336],{"class":324},[312,90513,53114],{"class":339},[312,90515,343],{"class":324},[312,90517,90518],{"class":314,"line":274},[312,90519,4205],{"emptyLinePlaceholder":1881},[312,90521,90522,90524,90526],{"class":314,"line":298},[312,90523,325],{"class":324},[312,90525,53127],{"class":328},[312,90527,343],{"class":324},[312,90529,90530,90532,90534,90536,90538,90540],{"class":314,"line":974},[312,90531,53930],{"class":324},[312,90533,53137],{"class":328},[312,90535,53140],{"class":332},[312,90537,336],{"class":324},[312,90539,53145],{"class":339},[312,90541,343],{"class":324},[312,90543,90544,90546,90548,90550,90552,90554,90556,90558,90560],{"class":314,"line":980},[312,90545,53930],{"class":324},[312,90547,53137],{"class":328},[312,90549,16721],{"class":332},[312,90551,336],{"class":324},[312,90553,53184],{"class":339},[312,90555,53164],{"class":332},[312,90557,336],{"class":324},[312,90559,53191],{"class":339},[312,90561,343],{"class":324},[312,90563,90564,90566,90568,90570,90572],{"class":314,"line":997},[312,90565,53930],{"class":324},[312,90567,628],{"class":328},[312,90569,53202],{"class":324},[312,90571,628],{"class":328},[312,90573,343],{"class":324},[312,90575,90576,90578,90580],{"class":314,"line":1003},[312,90577,353],{"class":324},[312,90579,53127],{"class":328},[312,90581,343],{"class":324},[312,90583,90584],{"class":314,"line":1020},[312,90585,4205],{"emptyLinePlaceholder":1881},[312,90587,90588,90590,90592],{"class":314,"line":1026},[312,90589,325],{"class":324},[312,90591,53586],{"class":328},[312,90593,343],{"class":324},[312,90595,90596,90598,90600,90602,90604],{"class":314,"line":3418},[312,90597,53930],{"class":324},[312,90599,24],{"class":328},[312,90601,55279],{"class":324},[312,90603,24],{"class":328},[312,90605,343],{"class":324},[312,90607,90608,90610,90612],{"class":314,"line":3423},[312,90609,53930],{"class":324},[312,90611,53599],{"class":328},[312,90613,343],{"class":324},[312,90615,90616,90618,90621],{"class":314,"line":3429},[312,90617,71861],{"class":1436},[312,90619,90620],{"class":332}," fn",[312,90622,12656],{"class":324},[312,90624,90625,90628],{"class":314,"line":3434},[312,90626,90627],{"class":1436},"      try",[312,90629,483],{"class":324},[312,90631,90632],{"class":314,"line":3448},[312,90633,90634],{"class":318},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[312,90636,90637,90639,90641,90643,90645,90647,90649,90652],{"class":314,"line":3453},[312,90638,63050],{"class":1436},[312,90640,8629],{"class":488},[312,90642,15366],{"class":1436},[312,90644,56180],{"class":324},[312,90646,56183],{"class":332},[312,90648,1576],{"class":324},[312,90650,90651],{"class":339},"'.p'",[312,90653,1959],{"class":324},[312,90655,90656,90659,90661],{"class":314,"line":3459},[312,90657,90658],{"class":324},"        p.style.color ",[312,90660,336],{"class":1436},[312,90662,68829],{"class":339},[312,90664,90665,90668,90671],{"class":314,"line":3480},[312,90666,90667],{"class":324},"      } ",[312,90669,90670],{"class":1436},"catch",[312,90672,90673],{"class":324}," (err) {\n",[312,90675,90676],{"class":314,"line":3485},[312,90677,90678],{"class":318},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[312,90680,90681,90684,90686],{"class":314,"line":3499},[312,90682,90683],{"class":324},"        console.",[312,90685,60029],{"class":332},[312,90687,90688],{"class":324},"(err.message)\n",[312,90690,90691],{"class":314,"line":3504},[312,90692,90693],{"class":318},"        \u002F\u002F 想要中断程序，需要加return\n",[312,90695,90696],{"class":314,"line":3533},[312,90697,90698],{"class":318},"        \u002F\u002F return\n",[312,90700,90701],{"class":314,"line":3538},[312,90702,90703],{"class":318},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[312,90705,90706,90709,90711,90714,90716,90719],{"class":314,"line":3555},[312,90707,90708],{"class":1436},"        throw",[312,90710,13381],{"class":1436},[312,90712,90713],{"class":332}," Error",[312,90715,1576],{"class":324},[312,90717,90718],{"class":339},"'你看看，选择器错误了吧'",[312,90720,1959],{"class":324},[312,90722,90723],{"class":314,"line":3560},[312,90724,54184],{"class":324},[312,90726,90727],{"class":314,"line":3565},[312,90728,90729],{"class":318},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[312,90731,90732,90735],{"class":314,"line":3570},[312,90733,90734],{"class":1436},"      finally",[312,90736,483],{"class":324},[312,90738,90739,90742,90744,90747],{"class":314,"line":3584},[312,90740,90741],{"class":332},"        alert",[312,90743,1576],{"class":324},[312,90745,90746],{"class":339},"'弹出对话框'",[312,90748,1959],{"class":324},[312,90750,90751],{"class":314,"line":3589},[312,90752,54184],{"class":324},[312,90754,90755,90757,90759,90761,90763],{"class":314,"line":4382},[312,90756,60026],{"class":324},[312,90758,60029],{"class":332},[312,90760,1576],{"class":324},[312,90762,2417],{"class":488},[312,90764,1959],{"class":324},[312,90766,90767],{"class":314,"line":4396},[312,90768,4205],{"emptyLinePlaceholder":1881},[312,90770,90771],{"class":314,"line":4404},[312,90772,3992],{"class":324},[312,90774,90775],{"class":314,"line":4409},[312,90776,90777],{"class":318},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[312,90779,90780],{"class":314,"line":4415},[312,90781,90782],{"class":318},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[312,90784,90785,90788],{"class":314,"line":4421},[312,90786,90787],{"class":332},"    fn",[312,90789,3781],{"class":324},[312,90791,90792,90794,90796],{"class":314,"line":4426},[312,90793,54203],{"class":324},[312,90795,53599],{"class":328},[312,90797,343],{"class":324},[312,90799,90800,90802,90804],{"class":314,"line":9751},[312,90801,353],{"class":324},[312,90803,53586],{"class":328},[312,90805,343],{"class":324},[312,90807,90808],{"class":314,"line":9775},[312,90809,4205],{"emptyLinePlaceholder":1881},[312,90811,90812,90814,90816],{"class":314,"line":9780},[312,90813,353],{"class":324},[312,90815,52430],{"class":328},[312,90817,343],{"class":324},[24,90819,90820],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[140,90822,90823],{"start":274},[143,90824,90825],{},"debugger",[24,90827,90828],{},[19,90829],{"alt":308,"src":90830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[24,90832,90833],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,90835,90837],{"id":90836},"_416-处理this","4.16 处理this",[69,90839,90841],{"id":90840},"_4161-this的指向","4.16.1 this的指向",[140,90843,90844],{},[143,90845,90846],{},"普通函数的this",[24,90848,90849],{},[19,90850],{"alt":308,"src":90851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[140,90853,90854],{"start":171},[143,90855,90856],{},"箭头函数的this",[24,90858,90859],{},[19,90860],{"alt":308,"src":90861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[24,90863,90864],{},[19,90865],{"alt":308,"src":90866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[24,90868,90869],{},[19,90870],{"alt":308,"src":90871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[69,90873,90875],{"id":90874},"_4162-this的改变","4.16.2 this的改变",[24,90877,90878],{},"call() apply() bind()",[140,90880,90881],{},[143,90882,90883],{},"call()",[24,90885,90886],{},[19,90887],{"alt":308,"src":90888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[24,90890,90891],{},"两个作用：①调用函数；②改变this指向",[303,90893,90895],{"className":54853,"code":90894,"language":54855,"meta":308,"style":308},"\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",[119,90896,90897,90905,90913,90917,90922,90926,90931,90936,90941,90945,90950,90958],{"__ignoreMap":308},[312,90898,90899,90901,90903],{"class":314,"line":315},[312,90900,325],{"class":324},[312,90902,53586],{"class":328},[312,90904,343],{"class":324},[312,90906,90907,90909,90911],{"class":314,"line":171},[312,90908,53930],{"class":324},[312,90910,53599],{"class":328},[312,90912,343],{"class":324},[312,90914,90915],{"class":314,"line":274},[312,90916,73295],{"class":324},[312,90918,90919],{"class":314,"line":298},[312,90920,90921],{"class":324},"      uname: 'pink'\n",[312,90923,90924],{"class":314,"line":974},[312,90925,3992],{"class":324},[312,90927,90928],{"class":314,"line":980},[312,90929,90930],{"class":324},"    function fn(x, y) {\n",[312,90932,90933],{"class":314,"line":997},[312,90934,90935],{"class":324},"      console.log(this)  \u002F\u002Fwindow\n",[312,90937,90938],{"class":314,"line":1003},[312,90939,90940],{"class":324},"      console.log(x + y)\n",[312,90942,90943],{"class":314,"line":1020},[312,90944,3992],{"class":324},[312,90946,90947],{"class":314,"line":1026},[312,90948,90949],{"class":324},"    fn.call(obj, 1, 2)\n",[312,90951,90952,90954,90956],{"class":314,"line":3418},[312,90953,54203],{"class":324},[312,90955,53599],{"class":328},[312,90957,343],{"class":324},[312,90959,90960,90962,90964],{"class":314,"line":3423},[312,90961,353],{"class":324},[312,90963,53586],{"class":328},[312,90965,343],{"class":324},[24,90967,90968],{},[19,90969],{"alt":308,"src":90970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[140,90972,90973],{"start":171},[143,90974,90975],{},"apply()",[24,90977,90978],{},[19,90979],{"alt":308,"src":90980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[24,90982,90891],{},[24,90984,90985],{},"call传递的是普通参数，而apply必须传递的是数组",[303,90987,90989],{"className":52428,"code":90988,"language":52430,"meta":308,"style":308},"\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",[119,90990,90991,91001,91015,91019,91027,91041,91061,91073,91081,91085,91093,91101,91111,91118,91122,91127,91143,91155,91169,91173,91178,91197,91202,91206,91211,91216,91224,91229,91251,91256,91272,91288,91300,91304,91309,91328,91336,91344,91348],{"__ignoreMap":308},[312,90992,90993,90995,90997,90999],{"class":314,"line":315},[312,90994,53092],{"class":324},[312,90996,53095],{"class":328},[312,90998,53098],{"class":332},[312,91000,343],{"class":324},[312,91002,91003,91005,91007,91009,91011,91013],{"class":314,"line":171},[312,91004,325],{"class":324},[312,91006,52430],{"class":328},[312,91008,53109],{"class":332},[312,91010,336],{"class":324},[312,91012,53114],{"class":339},[312,91014,343],{"class":324},[312,91016,91017],{"class":314,"line":274},[312,91018,4205],{"emptyLinePlaceholder":1881},[312,91020,91021,91023,91025],{"class":314,"line":298},[312,91022,325],{"class":324},[312,91024,53127],{"class":328},[312,91026,343],{"class":324},[312,91028,91029,91031,91033,91035,91037,91039],{"class":314,"line":974},[312,91030,53930],{"class":324},[312,91032,53137],{"class":328},[312,91034,53140],{"class":332},[312,91036,336],{"class":324},[312,91038,53145],{"class":339},[312,91040,343],{"class":324},[312,91042,91043,91045,91047,91049,91051,91053,91055,91057,91059],{"class":314,"line":980},[312,91044,53930],{"class":324},[312,91046,53137],{"class":328},[312,91048,16721],{"class":332},[312,91050,336],{"class":324},[312,91052,53184],{"class":339},[312,91054,53164],{"class":332},[312,91056,336],{"class":324},[312,91058,53191],{"class":339},[312,91060,343],{"class":324},[312,91062,91063,91065,91067,91069,91071],{"class":314,"line":997},[312,91064,53930],{"class":324},[312,91066,628],{"class":328},[312,91068,53202],{"class":324},[312,91070,628],{"class":328},[312,91072,343],{"class":324},[312,91074,91075,91077,91079],{"class":314,"line":1003},[312,91076,353],{"class":324},[312,91078,53127],{"class":328},[312,91080,343],{"class":324},[312,91082,91083],{"class":314,"line":1020},[312,91084,4205],{"emptyLinePlaceholder":1881},[312,91086,91087,91089,91091],{"class":314,"line":1026},[312,91088,325],{"class":324},[312,91090,53586],{"class":328},[312,91092,343],{"class":324},[312,91094,91095,91097,91099],{"class":314,"line":3418},[312,91096,53930],{"class":324},[312,91098,53599],{"class":328},[312,91100,343],{"class":324},[312,91102,91103,91105,91107,91109],{"class":314,"line":3423},[312,91104,13024],{"class":1436},[312,91106,71748],{"class":488},[312,91108,15366],{"class":1436},[312,91110,483],{"class":324},[312,91112,91113,91115],{"class":314,"line":3429},[312,91114,73398],{"class":324},[312,91116,91117],{"class":488},"18\n",[312,91119,91120],{"class":314,"line":3434},[312,91121,3992],{"class":324},[312,91123,91124],{"class":314,"line":3448},[312,91125,91126],{"class":318},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[312,91128,91129,91131,91133,91135,91137,91139,91141],{"class":314,"line":3453},[312,91130,71861],{"class":1436},[312,91132,90620],{"class":332},[312,91134,1576],{"class":324},[312,91136,2764],{"class":1579},[312,91138,733],{"class":324},[312,91140,2789],{"class":1579},[312,91142,14244],{"class":324},[312,91144,91145,91147,91149,91151,91153],{"class":314,"line":3459},[312,91146,60026],{"class":324},[312,91148,60029],{"class":332},[312,91150,1576],{"class":324},[312,91152,88763],{"class":488},[312,91154,1959],{"class":324},[312,91156,91157,91159,91161,91164,91166],{"class":314,"line":3480},[312,91158,60026],{"class":324},[312,91160,60029],{"class":332},[312,91162,91163],{"class":324},"(x ",[312,91165,2426],{"class":1436},[312,91167,91168],{"class":324}," y)\n",[312,91170,91171],{"class":314,"line":3485},[312,91172,3992],{"class":324},[312,91174,91175],{"class":314,"line":3499},[312,91176,91177],{"class":318},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[312,91179,91180,91183,91186,91189,91191,91193,91195],{"class":314,"line":3504},[312,91181,91182],{"class":324},"    fn.",[312,91184,91185],{"class":332},"apply",[312,91187,91188],{"class":324},"(obj, [",[312,91190,1433],{"class":488},[312,91192,733],{"class":324},[312,91194,2027],{"class":488},[312,91196,6462],{"class":324},[312,91198,91199],{"class":314,"line":3533},[312,91200,91201],{"class":318},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[312,91203,91204],{"class":314,"line":3538},[312,91205,4205],{"emptyLinePlaceholder":1881},[312,91207,91208],{"class":314,"line":3555},[312,91209,91210],{"class":318},"    \u002F\u002F 使用场景：求数组最大值\n",[312,91212,91213],{"class":314,"line":3560},[312,91214,91215],{"class":318},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[312,91217,91218,91221],{"class":314,"line":3565},[312,91219,91220],{"class":318},"    \u002F\u002F console.log(max)",[312,91222,91223],{"class":318},"   \u002F\u002F3\n",[312,91225,91226],{"class":314,"line":3570},[312,91227,91228],{"class":318},"    \u002F\u002F 指向空或者Math都是可以的\n",[312,91230,91231,91233,91235,91237,91239,91241,91243,91245,91247,91249],{"class":314,"line":3584},[312,91232,13024],{"class":1436},[312,91234,59477],{"class":488},[312,91236,15366],{"class":1436},[312,91238,54012],{"class":324},[312,91240,2256],{"class":488},[312,91242,733],{"class":324},[312,91244,2449],{"class":488},[312,91246,733],{"class":324},[312,91248,2480],{"class":488},[312,91250,35041],{"class":324},[312,91252,91253],{"class":314,"line":3589},[312,91254,91255],{"class":318},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[312,91257,91258,91260,91262,91264,91267,91269],{"class":314,"line":4382},[312,91259,13024],{"class":1436},[312,91261,7755],{"class":488},[312,91263,15366],{"class":1436},[312,91265,91266],{"class":324}," Math.max.",[312,91268,91185],{"class":332},[312,91270,91271],{"class":324},"(Math, arr)\n",[312,91273,91274,91276,91279,91281,91284,91286],{"class":314,"line":4396},[312,91275,13024],{"class":1436},[312,91277,91278],{"class":488}," min",[312,91280,15366],{"class":1436},[312,91282,91283],{"class":324}," Math.min.",[312,91285,91185],{"class":332},[312,91287,91271],{"class":324},[312,91289,91290,91292,91294,91297],{"class":314,"line":4404},[312,91291,75525],{"class":324},[312,91293,60029],{"class":332},[312,91295,91296],{"class":324},"(max, min)     ",[312,91298,91299],{"class":318},"\u002F\u002F100,4\n",[312,91301,91302],{"class":314,"line":4409},[312,91303,4205],{"emptyLinePlaceholder":1881},[312,91305,91306],{"class":314,"line":4415},[312,91307,91308],{"class":318},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[312,91310,91311,91313,91315,91318,91320,91322,91325],{"class":314,"line":4421},[312,91312,75525],{"class":324},[312,91314,60029],{"class":332},[312,91316,91317],{"class":324},"(Max.",[312,91319,7819],{"class":332},[312,91321,1576],{"class":324},[312,91323,91324],{"class":1436},"...",[312,91326,91327],{"class":324},"arr))\n",[312,91329,91330,91332,91334],{"class":314,"line":4426},[312,91331,54203],{"class":324},[312,91333,53599],{"class":328},[312,91335,343],{"class":324},[312,91337,91338,91340,91342],{"class":314,"line":9751},[312,91339,353],{"class":324},[312,91341,53586],{"class":328},[312,91343,343],{"class":324},[312,91345,91346],{"class":314,"line":9775},[312,91347,4205],{"emptyLinePlaceholder":1881},[312,91349,91350,91352,91354],{"class":314,"line":9780},[312,91351,353],{"class":324},[312,91353,52430],{"class":328},[312,91355,343],{"class":324},[24,91357,91358],{},[19,91359],{"alt":308,"src":91360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[140,91362,91363],{"start":274},[143,91364,91365],{},"bind()",[24,91367,91368],{},[19,91369],{"alt":308,"src":91370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[24,91372,91373],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[24,91375,91376],{},"bind的语法跟call很相似",[303,91378,91380],{"className":54853,"code":91379,"language":54855,"meta":308,"style":308},"\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",[119,91381,91382,91390,91398,91402,91407,91411,91415,91420,91424,91429,91434,91439,91444,91449,91454,91459,91463,91471],{"__ignoreMap":308},[312,91383,91384,91386,91388],{"class":314,"line":315},[312,91385,325],{"class":324},[312,91387,53586],{"class":328},[312,91389,343],{"class":324},[312,91391,91392,91394,91396],{"class":314,"line":171},[312,91393,53930],{"class":324},[312,91395,53599],{"class":328},[312,91397,343],{"class":324},[312,91399,91400],{"class":314,"line":274},[312,91401,73295],{"class":324},[312,91403,91404],{"class":314,"line":298},[312,91405,91406],{"class":324},"      age: 18\n",[312,91408,91409],{"class":314,"line":974},[312,91410,3992],{"class":324},[312,91412,91413],{"class":314,"line":980},[312,91414,78915],{"class":324},[312,91416,91417],{"class":314,"line":997},[312,91418,91419],{"class":324},"      console.log(this)\n",[312,91421,91422],{"class":314,"line":1003},[312,91423,3992],{"class":324},[312,91425,91426],{"class":314,"line":1020},[312,91427,91428],{"class":324},"    \u002F\u002F 1.bind 不会调用函数\n",[312,91430,91431],{"class":314,"line":1026},[312,91432,91433],{"class":324},"    \u002F\u002F 2.bind能改变this的指向\n",[312,91435,91436],{"class":314,"line":3418},[312,91437,91438],{"class":324},"    fn.bind()\n",[312,91440,91441],{"class":314,"line":3423},[312,91442,91443],{"class":324},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[312,91445,91446],{"class":314,"line":3429},[312,91447,91448],{"class":324},"    const fun = fn.bind(obj)\n",[312,91450,91451],{"class":314,"line":3434},[312,91452,91453],{"class":324},"    \u002F\u002F console.log(fun)\n",[312,91455,91456],{"class":314,"line":3448},[312,91457,91458],{"class":324},"    \u002F\u002F 调用,查看this的指向\n",[312,91460,91461],{"class":314,"line":3453},[312,91462,54437],{"class":324},[312,91464,91465,91467,91469],{"class":314,"line":3459},[312,91466,54203],{"class":324},[312,91468,53599],{"class":328},[312,91470,343],{"class":324},[312,91472,91473,91475,91477],{"class":314,"line":3480},[312,91474,353],{"class":324},[312,91476,53586],{"class":328},[312,91478,343],{"class":324},[24,91480,91481],{},[19,91482],{"alt":308,"src":91483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[140,91485,91486],{"start":298},[143,91487,91488],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[303,91490,91492],{"className":54853,"code":91491,"language":54855,"meta":308,"style":308},"\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",[119,91493,91494,91502,91515,91523,91528,91532,91537,91542,91547,91552,91557,91562,91567,91572,91576,91584],{"__ignoreMap":308},[312,91495,91496,91498,91500],{"class":314,"line":315},[312,91497,325],{"class":324},[312,91499,53586],{"class":328},[312,91501,343],{"class":324},[312,91503,91504,91506,91508,91511,91513],{"class":314,"line":171},[312,91505,53930],{"class":324},[312,91507,55671],{"class":328},[312,91509,91510],{"class":324},">禁用\u003C\u002F",[312,91512,55671],{"class":328},[312,91514,343],{"class":324},[312,91516,91517,91519,91521],{"class":314,"line":274},[312,91518,53930],{"class":324},[312,91520,53599],{"class":328},[312,91522,343],{"class":324},[312,91524,91525],{"class":314,"line":298},[312,91526,91527],{"class":324},"    const btn = document.querySelector('button')\n",[312,91529,91530],{"class":314,"line":974},[312,91531,60798],{"class":324},[312,91533,91534],{"class":314,"line":980},[312,91535,91536],{"class":324},"      this.disabled = true\n",[312,91538,91539],{"class":314,"line":997},[312,91540,91541],{"class":324},"      \u002F\u002F 定时器是window进行调用的\n",[312,91543,91544],{"class":314,"line":1003},[312,91545,91546],{"class":324},"      setTimeout(function () {\n",[312,91548,91549],{"class":314,"line":1020},[312,91550,91551],{"class":324},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[312,91553,91554],{"class":314,"line":1026},[312,91555,91556],{"class":324},"        this.disabled = false\n",[312,91558,91559],{"class":314,"line":3418},[312,91560,91561],{"class":324},"      }.bind(this), 2000)\n",[312,91563,91564],{"class":314,"line":3423},[312,91565,91566],{"class":324},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[312,91568,91569],{"class":314,"line":3429},[312,91570,91571],{"class":324},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[312,91573,91574],{"class":314,"line":3434},[312,91575,35256],{"class":324},[312,91577,91578,91580,91582],{"class":314,"line":3448},[312,91579,54203],{"class":324},[312,91581,53599],{"class":328},[312,91583,343],{"class":324},[312,91585,91586,91588,91590],{"class":314,"line":3453},[312,91587,353],{"class":324},[312,91589,53586],{"class":328},[312,91591,343],{"class":324},[140,91593,91594],{"start":974},[143,91595,23751],{},[24,91597,91598],{},[19,91599],{"alt":308,"src":91600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91602,91604],{"id":91603},"_417-性能优化","4.17 性能优化",[69,91606,91608],{"id":91607},"_4171-防抖","4.17.1 防抖",[24,91610,91611],{},[19,91612],{"alt":308,"src":91613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[24,91615,91616],{},[27,91617,91618],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[24,91620,91621],{},"防抖实现方式：",[243,91623,91624],{},[143,91625,91626],{},"lodash 提供了防抖处理",[24,91628,91629],{},"_.debounce(func,[wait=0],[options={}])",[24,91631,91632],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[303,91634,91636],{"className":52428,"code":91635,"language":52430,"meta":308,"style":308},"\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",[119,91637,91638,91648,91662,91666,91674,91688,91708,91720,91728,91734,91744,91756,91768,91779,91791,91801,91811,91824,91828,91836,91844,91848,91856,91874,91892,91900,91919,91929,91938,91949,91954,91958,91963,91968,91973,91998,92006,92014,92018],{"__ignoreMap":308},[312,91639,91640,91642,91644,91646],{"class":314,"line":315},[312,91641,53092],{"class":324},[312,91643,53095],{"class":328},[312,91645,53098],{"class":332},[312,91647,343],{"class":324},[312,91649,91650,91652,91654,91656,91658,91660],{"class":314,"line":171},[312,91651,325],{"class":324},[312,91653,52430],{"class":328},[312,91655,53109],{"class":332},[312,91657,336],{"class":324},[312,91659,53114],{"class":339},[312,91661,343],{"class":324},[312,91663,91664],{"class":314,"line":274},[312,91665,4205],{"emptyLinePlaceholder":1881},[312,91667,91668,91670,91672],{"class":314,"line":298},[312,91669,325],{"class":324},[312,91671,53127],{"class":328},[312,91673,343],{"class":324},[312,91675,91676,91678,91680,91682,91684,91686],{"class":314,"line":974},[312,91677,53930],{"class":324},[312,91679,53137],{"class":328},[312,91681,53140],{"class":332},[312,91683,336],{"class":324},[312,91685,53145],{"class":339},[312,91687,343],{"class":324},[312,91689,91690,91692,91694,91696,91698,91700,91702,91704,91706],{"class":314,"line":980},[312,91691,53930],{"class":324},[312,91693,53137],{"class":328},[312,91695,16721],{"class":332},[312,91697,336],{"class":324},[312,91699,53184],{"class":339},[312,91701,53164],{"class":332},[312,91703,336],{"class":324},[312,91705,53191],{"class":339},[312,91707,343],{"class":324},[312,91709,91710,91712,91714,91716,91718],{"class":314,"line":997},[312,91711,53930],{"class":324},[312,91713,628],{"class":328},[312,91715,53202],{"class":324},[312,91717,628],{"class":328},[312,91719,343],{"class":324},[312,91721,91722,91724,91726],{"class":314,"line":1003},[312,91723,53930],{"class":324},[312,91725,1856],{"class":328},[312,91727,343],{"class":324},[312,91729,91730,91732],{"class":314,"line":1020},[312,91731,56536],{"class":332},[312,91733,483],{"class":324},[312,91735,91736,91738,91740,91742],{"class":314,"line":1026},[312,91737,74368],{"class":488},[312,91739,492],{"class":324},[312,91741,62287],{"class":488},[312,91743,498],{"class":324},[312,91745,91746,91748,91750,91752,91754],{"class":314,"line":3418},[312,91747,56554],{"class":488},[312,91749,492],{"class":324},[312,91751,3528],{"class":488},[312,91753,1437],{"class":1436},[312,91755,498],{"class":324},[312,91757,91758,91760,91762,91764,91766],{"class":314,"line":3423},[312,91759,56568],{"class":488},[312,91761,492],{"class":324},[312,91763,3528],{"class":488},[312,91765,1437],{"class":1436},[312,91767,498],{"class":324},[312,91769,91770,91772,91774,91777],{"class":314,"line":3429},[312,91771,56666],{"class":488},[312,91773,492],{"class":324},[312,91775,91776],{"class":488},"gray",[312,91778,498],{"class":324},[312,91780,91781,91783,91785,91787,91789],{"class":314,"line":3434},[312,91782,56704],{"class":488},[312,91784,492],{"class":324},[312,91786,2769],{"class":488},[312,91788,1437],{"class":1436},[312,91790,498],{"class":324},[312,91792,91793,91795,91797,91799],{"class":314,"line":3448},[312,91794,59198],{"class":488},[312,91796,492],{"class":324},[312,91798,62624],{"class":488},[312,91800,498],{"class":324},[312,91802,91803,91805,91807,91809],{"class":314,"line":3453},[312,91804,59068],{"class":488},[312,91806,492],{"class":324},[312,91808,53380],{"class":488},[312,91810,498],{"class":324},[312,91812,91813,91816,91818,91820,91822],{"class":314,"line":3459},[312,91814,91815],{"class":488},"      padding-top",[312,91817,492],{"class":324},[312,91819,2264],{"class":488},[312,91821,1437],{"class":1436},[312,91823,498],{"class":324},[312,91825,91826],{"class":314,"line":3480},[312,91827,3992],{"class":324},[312,91829,91830,91832,91834],{"class":314,"line":3485},[312,91831,54203],{"class":324},[312,91833,1856],{"class":328},[312,91835,343],{"class":324},[312,91837,91838,91840,91842],{"class":314,"line":3499},[312,91839,353],{"class":324},[312,91841,53127],{"class":328},[312,91843,343],{"class":324},[312,91845,91846],{"class":314,"line":3504},[312,91847,4205],{"emptyLinePlaceholder":1881},[312,91849,91850,91852,91854],{"class":314,"line":3533},[312,91851,325],{"class":324},[312,91853,53586],{"class":328},[312,91855,343],{"class":324},[312,91857,91858,91860,91862,91864,91866,91868,91870,91872],{"class":314,"line":3538},[312,91859,53930],{"class":324},[312,91861,329],{"class":328},[312,91863,333],{"class":332},[312,91865,336],{"class":324},[312,91867,55276],{"class":339},[312,91869,57096],{"class":324},[312,91871,329],{"class":328},[312,91873,343],{"class":324},[312,91875,91876,91878,91880,91882,91884,91886,91888,91890],{"class":314,"line":3555},[312,91877,53930],{"class":324},[312,91879,53599],{"class":328},[312,91881,57021],{"class":332},[312,91883,336],{"class":324},[312,91885,90044],{"class":339},[312,91887,57096],{"class":324},[312,91889,53599],{"class":328},[312,91891,343],{"class":324},[312,91893,91894,91896,91898],{"class":314,"line":3560},[312,91895,53930],{"class":324},[312,91897,53599],{"class":328},[312,91899,343],{"class":324},[312,91901,91902,91904,91906,91908,91910,91912,91914,91917],{"class":314,"line":3565},[312,91903,13024],{"class":1436},[312,91905,88703],{"class":488},[312,91907,15366],{"class":1436},[312,91909,56180],{"class":324},[312,91911,56183],{"class":332},[312,91913,1576],{"class":324},[312,91915,91916],{"class":339},"'.box'",[312,91918,1959],{"class":324},[312,91920,91921,91923,91925,91927],{"class":314,"line":3570},[312,91922,54005],{"class":1436},[312,91924,11241],{"class":324},[312,91926,336],{"class":1436},[312,91928,49128],{"class":488},[312,91930,91931,91933,91936],{"class":314,"line":3584},[312,91932,71861],{"class":1436},[312,91934,91935],{"class":332}," mouseMove",[312,91937,12656],{"class":324},[312,91939,91940,91943,91945,91947],{"class":314,"line":3589},[312,91941,91942],{"class":324},"      box.innerHTML ",[312,91944,336],{"class":1436},[312,91946,4837],{"class":324},[312,91948,4507],{"class":1436},[312,91950,91951],{"class":314,"line":4382},[312,91952,91953],{"class":318},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[312,91955,91956],{"class":314,"line":4396},[312,91957,3992],{"class":324},[312,91959,91960],{"class":314,"line":4404},[312,91961,91962],{"class":318},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[312,91964,91965],{"class":314,"line":4409},[312,91966,91967],{"class":318},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[312,91969,91970],{"class":314,"line":4415},[312,91971,91972],{"class":318},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[312,91974,91975,91978,91980,91982,91985,91988,91991,91994,91996],{"class":314,"line":4421},[312,91976,91977],{"class":324},"    box.",[312,91979,59595],{"class":332},[312,91981,1576],{"class":324},[312,91983,91984],{"class":339},"'mousemove'",[312,91986,91987],{"class":324},", _.",[312,91989,91990],{"class":332},"debounce",[312,91992,91993],{"class":324},"(mouseMove, ",[312,91995,66852],{"class":488},[312,91997,32293],{"class":324},[312,91999,92000,92002,92004],{"class":314,"line":4426},[312,92001,54203],{"class":324},[312,92003,53599],{"class":328},[312,92005,343],{"class":324},[312,92007,92008,92010,92012],{"class":314,"line":9751},[312,92009,353],{"class":324},[312,92011,53586],{"class":328},[312,92013,343],{"class":324},[312,92015,92016],{"class":314,"line":9775},[312,92017,4205],{"emptyLinePlaceholder":1881},[312,92019,92020,92022,92024],{"class":314,"line":9780},[312,92021,353],{"class":324},[312,92023,52430],{"class":328},[312,92025,343],{"class":324},[243,92027,92028],{},[143,92029,92030],{},"手写一个防抖函数来处理",[24,92032,92033],{},"防抖的核心就是利用定时器来实现的：",[24,92035,92036],{},"①声明一个定时器变量",[24,92038,92039],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[24,92041,92042],{},"③如果没有定时器则开启定时器，记得存到变量里面",[303,92044,92046],{"className":52428,"code":92045,"language":52430,"meta":308,"style":308},"\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",[119,92047,92048,92058,92072,92076,92084,92098,92118,92130,92138,92144,92154,92166,92178,92188,92200,92210,92220,92232,92236,92244,92252,92256,92264,92282,92300,92308,92326,92336,92344,92354,92358,92362,92366,92371,92376,92381,92386,92391,92396,92414,92421,92426,92434,92439,92452,92468,92478,92483,92487,92491,92511,92515,92520,92525,92530,92535,92543,92551,92555],{"__ignoreMap":308},[312,92049,92050,92052,92054,92056],{"class":314,"line":315},[312,92051,53092],{"class":324},[312,92053,53095],{"class":328},[312,92055,53098],{"class":332},[312,92057,343],{"class":324},[312,92059,92060,92062,92064,92066,92068,92070],{"class":314,"line":171},[312,92061,325],{"class":324},[312,92063,52430],{"class":328},[312,92065,53109],{"class":332},[312,92067,336],{"class":324},[312,92069,53114],{"class":339},[312,92071,343],{"class":324},[312,92073,92074],{"class":314,"line":274},[312,92075,4205],{"emptyLinePlaceholder":1881},[312,92077,92078,92080,92082],{"class":314,"line":298},[312,92079,325],{"class":324},[312,92081,53127],{"class":328},[312,92083,343],{"class":324},[312,92085,92086,92088,92090,92092,92094,92096],{"class":314,"line":974},[312,92087,53930],{"class":324},[312,92089,53137],{"class":328},[312,92091,53140],{"class":332},[312,92093,336],{"class":324},[312,92095,53145],{"class":339},[312,92097,343],{"class":324},[312,92099,92100,92102,92104,92106,92108,92110,92112,92114,92116],{"class":314,"line":980},[312,92101,53930],{"class":324},[312,92103,53137],{"class":328},[312,92105,16721],{"class":332},[312,92107,336],{"class":324},[312,92109,53184],{"class":339},[312,92111,53164],{"class":332},[312,92113,336],{"class":324},[312,92115,53191],{"class":339},[312,92117,343],{"class":324},[312,92119,92120,92122,92124,92126,92128],{"class":314,"line":997},[312,92121,53930],{"class":324},[312,92123,628],{"class":328},[312,92125,53202],{"class":324},[312,92127,628],{"class":328},[312,92129,343],{"class":324},[312,92131,92132,92134,92136],{"class":314,"line":1003},[312,92133,53930],{"class":324},[312,92135,1856],{"class":328},[312,92137,343],{"class":324},[312,92139,92140,92142],{"class":314,"line":1020},[312,92141,56536],{"class":332},[312,92143,483],{"class":324},[312,92145,92146,92148,92150,92152],{"class":314,"line":1026},[312,92147,74368],{"class":488},[312,92149,492],{"class":324},[312,92151,62287],{"class":488},[312,92153,498],{"class":324},[312,92155,92156,92158,92160,92162,92164],{"class":314,"line":3418},[312,92157,56554],{"class":488},[312,92159,492],{"class":324},[312,92161,3528],{"class":488},[312,92163,1437],{"class":1436},[312,92165,498],{"class":324},[312,92167,92168,92170,92172,92174,92176],{"class":314,"line":3423},[312,92169,56568],{"class":488},[312,92171,492],{"class":324},[312,92173,3528],{"class":488},[312,92175,1437],{"class":1436},[312,92177,498],{"class":324},[312,92179,92180,92182,92184,92186],{"class":314,"line":3429},[312,92181,56666],{"class":488},[312,92183,492],{"class":324},[312,92185,91776],{"class":488},[312,92187,498],{"class":324},[312,92189,92190,92192,92194,92196,92198],{"class":314,"line":3434},[312,92191,56704],{"class":488},[312,92193,492],{"class":324},[312,92195,2769],{"class":488},[312,92197,1437],{"class":1436},[312,92199,498],{"class":324},[312,92201,92202,92204,92206,92208],{"class":314,"line":3448},[312,92203,59198],{"class":488},[312,92205,492],{"class":324},[312,92207,62624],{"class":488},[312,92209,498],{"class":324},[312,92211,92212,92214,92216,92218],{"class":314,"line":3453},[312,92213,59068],{"class":488},[312,92215,492],{"class":324},[312,92217,53380],{"class":488},[312,92219,498],{"class":324},[312,92221,92222,92224,92226,92228,92230],{"class":314,"line":3459},[312,92223,91815],{"class":488},[312,92225,492],{"class":324},[312,92227,2264],{"class":488},[312,92229,1437],{"class":1436},[312,92231,498],{"class":324},[312,92233,92234],{"class":314,"line":3480},[312,92235,3992],{"class":324},[312,92237,92238,92240,92242],{"class":314,"line":3485},[312,92239,54203],{"class":324},[312,92241,1856],{"class":328},[312,92243,343],{"class":324},[312,92245,92246,92248,92250],{"class":314,"line":3499},[312,92247,353],{"class":324},[312,92249,53127],{"class":328},[312,92251,343],{"class":324},[312,92253,92254],{"class":314,"line":3504},[312,92255,4205],{"emptyLinePlaceholder":1881},[312,92257,92258,92260,92262],{"class":314,"line":3533},[312,92259,325],{"class":324},[312,92261,53586],{"class":328},[312,92263,343],{"class":324},[312,92265,92266,92268,92270,92272,92274,92276,92278,92280],{"class":314,"line":3538},[312,92267,53930],{"class":324},[312,92269,329],{"class":328},[312,92271,333],{"class":332},[312,92273,336],{"class":324},[312,92275,55276],{"class":339},[312,92277,57096],{"class":324},[312,92279,329],{"class":328},[312,92281,343],{"class":324},[312,92283,92284,92286,92288,92290,92292,92294,92296,92298],{"class":314,"line":3555},[312,92285,53930],{"class":324},[312,92287,53599],{"class":328},[312,92289,57021],{"class":332},[312,92291,336],{"class":324},[312,92293,90044],{"class":339},[312,92295,57096],{"class":324},[312,92297,53599],{"class":328},[312,92299,343],{"class":324},[312,92301,92302,92304,92306],{"class":314,"line":3560},[312,92303,53930],{"class":324},[312,92305,53599],{"class":328},[312,92307,343],{"class":324},[312,92309,92310,92312,92314,92316,92318,92320,92322,92324],{"class":314,"line":3565},[312,92311,13024],{"class":1436},[312,92313,88703],{"class":488},[312,92315,15366],{"class":1436},[312,92317,56180],{"class":324},[312,92319,56183],{"class":332},[312,92321,1576],{"class":324},[312,92323,91916],{"class":339},[312,92325,1959],{"class":324},[312,92327,92328,92330,92332,92334],{"class":314,"line":3570},[312,92329,54005],{"class":1436},[312,92331,11241],{"class":324},[312,92333,336],{"class":1436},[312,92335,49128],{"class":488},[312,92337,92338,92340,92342],{"class":314,"line":3584},[312,92339,71861],{"class":1436},[312,92341,91935],{"class":332},[312,92343,12656],{"class":324},[312,92345,92346,92348,92350,92352],{"class":314,"line":3589},[312,92347,91942],{"class":324},[312,92349,336],{"class":1436},[312,92351,4837],{"class":324},[312,92353,4507],{"class":1436},[312,92355,92356],{"class":314,"line":4382},[312,92357,91953],{"class":318},[312,92359,92360],{"class":314,"line":4396},[312,92361,3992],{"class":324},[312,92363,92364],{"class":314,"line":4404},[312,92365,91962],{"class":318},[312,92367,92368],{"class":314,"line":4409},[312,92369,92370],{"class":318},"    \u002F\u002F 手写防抖函数\n",[312,92372,92373],{"class":314,"line":4415},[312,92374,92375],{"class":318},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[312,92377,92378],{"class":314,"line":4421},[312,92379,92380],{"class":318},"    \u002F\u002F 1.声明定时器变量\n",[312,92382,92383],{"class":314,"line":4426},[312,92384,92385],{"class":318},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[312,92387,92388],{"class":314,"line":9751},[312,92389,92390],{"class":318},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[312,92392,92393],{"class":314,"line":9775},[312,92394,92395],{"class":318},"    \u002F\u002F 4.定时器里面写函数调用\n",[312,92397,92398,92400,92403,92405,92408,92410,92412],{"class":314,"line":9780},[312,92399,71861],{"class":1436},[312,92401,92402],{"class":332}," debounce",[312,92404,1576],{"class":324},[312,92406,92407],{"class":1579},"fn",[312,92409,733],{"class":324},[312,92411,2664],{"class":1579},[312,92413,14244],{"class":324},[312,92415,92416,92418],{"class":314,"line":9786},[312,92417,81544],{"class":1436},[312,92419,92420],{"class":324}," timer\n",[312,92422,92423],{"class":314,"line":9813},[312,92424,92425],{"class":318},"      \u002F\u002F return 返回一个匿名函数\n",[312,92427,92428,92430,92432],{"class":314,"line":9818},[312,92429,75754],{"class":1436},[312,92431,60700],{"class":1436},[312,92433,56236],{"class":324},[312,92435,92436],{"class":314,"line":9824},[312,92437,92438],{"class":318},"        \u002F\u002F 这里边写第二三四步\n",[312,92440,92441,92443,92446,92449],{"class":314,"line":9836},[312,92442,4302],{"class":1436},[312,92444,92445],{"class":324}," (timer) ",[312,92447,92448],{"class":332},"clearTimeout",[312,92450,92451],{"class":324},"(timer)\n",[312,92453,92454,92457,92459,92462,92464,92466],{"class":314,"line":9848},[312,92455,92456],{"class":324},"        timer ",[312,92458,336],{"class":1436},[312,92460,92461],{"class":332}," setTimeout",[312,92463,1576],{"class":324},[312,92465,56233],{"class":1436},[312,92467,56236],{"class":324},[312,92469,92470,92473,92475],{"class":314,"line":9860},[312,92471,92472],{"class":332},"          fn",[312,92474,14852],{"class":324},[312,92476,92477],{"class":318},"\u002F\u002F加小括号调用fn }, t)\n",[312,92479,92480],{"class":314,"line":11519},[312,92481,92482],{"class":324},"        }, t)\n",[312,92484,92485],{"class":314,"line":11544},[312,92486,54184],{"class":324},[312,92488,92489],{"class":314,"line":11567},[312,92490,3992],{"class":324},[312,92492,92493,92495,92497,92499,92501,92503,92505,92507,92509],{"class":314,"line":11591},[312,92494,91977],{"class":324},[312,92496,59595],{"class":332},[312,92498,1576],{"class":324},[312,92500,91984],{"class":339},[312,92502,733],{"class":324},[312,92504,91990],{"class":332},[312,92506,91993],{"class":324},[312,92508,66852],{"class":488},[312,92510,32293],{"class":324},[312,92512,92513],{"class":314,"line":11596},[312,92514,4205],{"emptyLinePlaceholder":1881},[312,92516,92517],{"class":314,"line":11601},[312,92518,92519],{"class":318},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[312,92521,92522],{"class":314,"line":11606},[312,92523,92524],{"class":318},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[312,92526,92527],{"class":314,"line":11615},[312,92528,92529],{"class":318},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[312,92531,92532],{"class":314,"line":11620},[312,92533,92534],{"class":318},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[312,92536,92537,92539,92541],{"class":314,"line":11626},[312,92538,54203],{"class":324},[312,92540,53599],{"class":328},[312,92542,343],{"class":324},[312,92544,92545,92547,92549],{"class":314,"line":11647},[312,92546,353],{"class":324},[312,92548,53586],{"class":328},[312,92550,343],{"class":324},[312,92552,92553],{"class":314,"line":11653},[312,92554,4205],{"emptyLinePlaceholder":1881},[312,92556,92557,92559,92561],{"class":314,"line":11667},[312,92558,353],{"class":324},[312,92560,52430],{"class":328},[312,92562,343],{"class":324},[69,92564,92566],{"id":92565},"_4172-节流","4.17.2 节流",[24,92568,92569],{},[19,92570],{"alt":308,"src":92571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[24,92573,92574],{},[19,92575],{"alt":308,"src":92576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[24,92578,92579],{},[27,92580,92581],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[24,92583,92584],{},"实现方式：",[243,92586,92587],{},[143,92588,92589],{},"lodash 提供的节流函数来处理",[24,92591,92592],{},"_.throttle(func,[wait=0],[options=])",[24,92594,92595],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[303,92597,92599],{"className":52428,"code":92598,"language":52430,"meta":308,"style":308},"\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",[119,92600,92601,92611,92625,92629,92637,92651,92671,92683,92691,92697,92707,92719,92731,92741,92753,92763,92773,92785,92789,92797,92805,92809,92817,92835,92853,92861,92879,92889,92897,92907,92911,92915,92919,92924,92929,92950,92958,92966,92970],{"__ignoreMap":308},[312,92602,92603,92605,92607,92609],{"class":314,"line":315},[312,92604,53092],{"class":324},[312,92606,53095],{"class":328},[312,92608,53098],{"class":332},[312,92610,343],{"class":324},[312,92612,92613,92615,92617,92619,92621,92623],{"class":314,"line":171},[312,92614,325],{"class":324},[312,92616,52430],{"class":328},[312,92618,53109],{"class":332},[312,92620,336],{"class":324},[312,92622,53114],{"class":339},[312,92624,343],{"class":324},[312,92626,92627],{"class":314,"line":274},[312,92628,4205],{"emptyLinePlaceholder":1881},[312,92630,92631,92633,92635],{"class":314,"line":298},[312,92632,325],{"class":324},[312,92634,53127],{"class":328},[312,92636,343],{"class":324},[312,92638,92639,92641,92643,92645,92647,92649],{"class":314,"line":974},[312,92640,53930],{"class":324},[312,92642,53137],{"class":328},[312,92644,53140],{"class":332},[312,92646,336],{"class":324},[312,92648,53145],{"class":339},[312,92650,343],{"class":324},[312,92652,92653,92655,92657,92659,92661,92663,92665,92667,92669],{"class":314,"line":980},[312,92654,53930],{"class":324},[312,92656,53137],{"class":328},[312,92658,16721],{"class":332},[312,92660,336],{"class":324},[312,92662,53184],{"class":339},[312,92664,53164],{"class":332},[312,92666,336],{"class":324},[312,92668,53191],{"class":339},[312,92670,343],{"class":324},[312,92672,92673,92675,92677,92679,92681],{"class":314,"line":997},[312,92674,53930],{"class":324},[312,92676,628],{"class":328},[312,92678,53202],{"class":324},[312,92680,628],{"class":328},[312,92682,343],{"class":324},[312,92684,92685,92687,92689],{"class":314,"line":1003},[312,92686,53930],{"class":324},[312,92688,1856],{"class":328},[312,92690,343],{"class":324},[312,92692,92693,92695],{"class":314,"line":1020},[312,92694,56536],{"class":332},[312,92696,483],{"class":324},[312,92698,92699,92701,92703,92705],{"class":314,"line":1026},[312,92700,74368],{"class":488},[312,92702,492],{"class":324},[312,92704,62287],{"class":488},[312,92706,498],{"class":324},[312,92708,92709,92711,92713,92715,92717],{"class":314,"line":3418},[312,92710,56554],{"class":488},[312,92712,492],{"class":324},[312,92714,3528],{"class":488},[312,92716,1437],{"class":1436},[312,92718,498],{"class":324},[312,92720,92721,92723,92725,92727,92729],{"class":314,"line":3423},[312,92722,56568],{"class":488},[312,92724,492],{"class":324},[312,92726,3528],{"class":488},[312,92728,1437],{"class":1436},[312,92730,498],{"class":324},[312,92732,92733,92735,92737,92739],{"class":314,"line":3429},[312,92734,56666],{"class":488},[312,92736,492],{"class":324},[312,92738,91776],{"class":488},[312,92740,498],{"class":324},[312,92742,92743,92745,92747,92749,92751],{"class":314,"line":3434},[312,92744,56704],{"class":488},[312,92746,492],{"class":324},[312,92748,2769],{"class":488},[312,92750,1437],{"class":1436},[312,92752,498],{"class":324},[312,92754,92755,92757,92759,92761],{"class":314,"line":3448},[312,92756,59198],{"class":488},[312,92758,492],{"class":324},[312,92760,62624],{"class":488},[312,92762,498],{"class":324},[312,92764,92765,92767,92769,92771],{"class":314,"line":3453},[312,92766,59068],{"class":488},[312,92768,492],{"class":324},[312,92770,53380],{"class":488},[312,92772,498],{"class":324},[312,92774,92775,92777,92779,92781,92783],{"class":314,"line":3459},[312,92776,91815],{"class":488},[312,92778,492],{"class":324},[312,92780,2264],{"class":488},[312,92782,1437],{"class":1436},[312,92784,498],{"class":324},[312,92786,92787],{"class":314,"line":3480},[312,92788,3992],{"class":324},[312,92790,92791,92793,92795],{"class":314,"line":3485},[312,92792,54203],{"class":324},[312,92794,1856],{"class":328},[312,92796,343],{"class":324},[312,92798,92799,92801,92803],{"class":314,"line":3499},[312,92800,353],{"class":324},[312,92802,53127],{"class":328},[312,92804,343],{"class":324},[312,92806,92807],{"class":314,"line":3504},[312,92808,4205],{"emptyLinePlaceholder":1881},[312,92810,92811,92813,92815],{"class":314,"line":3533},[312,92812,325],{"class":324},[312,92814,53586],{"class":328},[312,92816,343],{"class":324},[312,92818,92819,92821,92823,92825,92827,92829,92831,92833],{"class":314,"line":3538},[312,92820,53930],{"class":324},[312,92822,329],{"class":328},[312,92824,333],{"class":332},[312,92826,336],{"class":324},[312,92828,55276],{"class":339},[312,92830,57096],{"class":324},[312,92832,329],{"class":328},[312,92834,343],{"class":324},[312,92836,92837,92839,92841,92843,92845,92847,92849,92851],{"class":314,"line":3555},[312,92838,53930],{"class":324},[312,92840,53599],{"class":328},[312,92842,57021],{"class":332},[312,92844,336],{"class":324},[312,92846,90044],{"class":339},[312,92848,57096],{"class":324},[312,92850,53599],{"class":328},[312,92852,343],{"class":324},[312,92854,92855,92857,92859],{"class":314,"line":3560},[312,92856,53930],{"class":324},[312,92858,53599],{"class":328},[312,92860,343],{"class":324},[312,92862,92863,92865,92867,92869,92871,92873,92875,92877],{"class":314,"line":3565},[312,92864,13024],{"class":1436},[312,92866,88703],{"class":488},[312,92868,15366],{"class":1436},[312,92870,56180],{"class":324},[312,92872,56183],{"class":332},[312,92874,1576],{"class":324},[312,92876,91916],{"class":339},[312,92878,1959],{"class":324},[312,92880,92881,92883,92885,92887],{"class":314,"line":3570},[312,92882,54005],{"class":1436},[312,92884,11241],{"class":324},[312,92886,336],{"class":1436},[312,92888,49128],{"class":488},[312,92890,92891,92893,92895],{"class":314,"line":3584},[312,92892,71861],{"class":1436},[312,92894,91935],{"class":332},[312,92896,12656],{"class":324},[312,92898,92899,92901,92903,92905],{"class":314,"line":3589},[312,92900,91942],{"class":324},[312,92902,336],{"class":1436},[312,92904,4837],{"class":324},[312,92906,4507],{"class":1436},[312,92908,92909],{"class":314,"line":4382},[312,92910,91953],{"class":318},[312,92912,92913],{"class":314,"line":4396},[312,92914,3992],{"class":324},[312,92916,92917],{"class":314,"line":4404},[312,92918,91962],{"class":318},[312,92920,92921],{"class":314,"line":4409},[312,92922,92923],{"class":318},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[312,92925,92926],{"class":314,"line":4415},[312,92927,92928],{"class":318},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[312,92930,92931,92933,92935,92937,92939,92941,92944,92946,92948],{"class":314,"line":4421},[312,92932,91977],{"class":324},[312,92934,59595],{"class":332},[312,92936,1576],{"class":324},[312,92938,91984],{"class":339},[312,92940,91987],{"class":324},[312,92942,92943],{"class":332},"throttle",[312,92945,91993],{"class":324},[312,92947,66852],{"class":488},[312,92949,32293],{"class":324},[312,92951,92952,92954,92956],{"class":314,"line":4426},[312,92953,54203],{"class":324},[312,92955,53599],{"class":328},[312,92957,343],{"class":324},[312,92959,92960,92962,92964],{"class":314,"line":9751},[312,92961,353],{"class":324},[312,92963,53586],{"class":328},[312,92965,343],{"class":324},[312,92967,92968],{"class":314,"line":9775},[312,92969,4205],{"emptyLinePlaceholder":1881},[312,92971,92972,92974,92976],{"class":314,"line":9780},[312,92973,353],{"class":324},[312,92975,52430],{"class":328},[312,92977,343],{"class":324},[243,92979,92980],{},[143,92981,92982],{},"手写一个节流函数来处理",[24,92984,72724],{},[24,92986,92036],{},[24,92988,92989],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[24,92991,92992],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[303,92994,92996],{"className":52428,"code":92995,"language":52430,"meta":308,"style":308},"\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",[119,92997,92998,93008,93022,93026,93034,93048,93068,93080,93088,93094,93104,93116,93128,93138,93150,93160,93170,93182,93186,93194,93202,93206,93214,93232,93250,93258,93276,93286,93294,93304,93308,93312,93316,93321,93326,93331,93336,93341,93346,93363,93369,93377,93388,93403,93410,93415,93420,93430,93435,93440,93445,93449,93453,93457,93477,93485,93493,93497],{"__ignoreMap":308},[312,92999,93000,93002,93004,93006],{"class":314,"line":315},[312,93001,53092],{"class":324},[312,93003,53095],{"class":328},[312,93005,53098],{"class":332},[312,93007,343],{"class":324},[312,93009,93010,93012,93014,93016,93018,93020],{"class":314,"line":171},[312,93011,325],{"class":324},[312,93013,52430],{"class":328},[312,93015,53109],{"class":332},[312,93017,336],{"class":324},[312,93019,53114],{"class":339},[312,93021,343],{"class":324},[312,93023,93024],{"class":314,"line":274},[312,93025,4205],{"emptyLinePlaceholder":1881},[312,93027,93028,93030,93032],{"class":314,"line":298},[312,93029,325],{"class":324},[312,93031,53127],{"class":328},[312,93033,343],{"class":324},[312,93035,93036,93038,93040,93042,93044,93046],{"class":314,"line":974},[312,93037,53930],{"class":324},[312,93039,53137],{"class":328},[312,93041,53140],{"class":332},[312,93043,336],{"class":324},[312,93045,53145],{"class":339},[312,93047,343],{"class":324},[312,93049,93050,93052,93054,93056,93058,93060,93062,93064,93066],{"class":314,"line":980},[312,93051,53930],{"class":324},[312,93053,53137],{"class":328},[312,93055,16721],{"class":332},[312,93057,336],{"class":324},[312,93059,53184],{"class":339},[312,93061,53164],{"class":332},[312,93063,336],{"class":324},[312,93065,53191],{"class":339},[312,93067,343],{"class":324},[312,93069,93070,93072,93074,93076,93078],{"class":314,"line":997},[312,93071,53930],{"class":324},[312,93073,628],{"class":328},[312,93075,53202],{"class":324},[312,93077,628],{"class":328},[312,93079,343],{"class":324},[312,93081,93082,93084,93086],{"class":314,"line":1003},[312,93083,53930],{"class":324},[312,93085,1856],{"class":328},[312,93087,343],{"class":324},[312,93089,93090,93092],{"class":314,"line":1020},[312,93091,56536],{"class":332},[312,93093,483],{"class":324},[312,93095,93096,93098,93100,93102],{"class":314,"line":1026},[312,93097,74368],{"class":488},[312,93099,492],{"class":324},[312,93101,62287],{"class":488},[312,93103,498],{"class":324},[312,93105,93106,93108,93110,93112,93114],{"class":314,"line":3418},[312,93107,56554],{"class":488},[312,93109,492],{"class":324},[312,93111,3528],{"class":488},[312,93113,1437],{"class":1436},[312,93115,498],{"class":324},[312,93117,93118,93120,93122,93124,93126],{"class":314,"line":3423},[312,93119,56568],{"class":488},[312,93121,492],{"class":324},[312,93123,3528],{"class":488},[312,93125,1437],{"class":1436},[312,93127,498],{"class":324},[312,93129,93130,93132,93134,93136],{"class":314,"line":3429},[312,93131,56666],{"class":488},[312,93133,492],{"class":324},[312,93135,91776],{"class":488},[312,93137,498],{"class":324},[312,93139,93140,93142,93144,93146,93148],{"class":314,"line":3434},[312,93141,56704],{"class":488},[312,93143,492],{"class":324},[312,93145,2769],{"class":488},[312,93147,1437],{"class":1436},[312,93149,498],{"class":324},[312,93151,93152,93154,93156,93158],{"class":314,"line":3448},[312,93153,59198],{"class":488},[312,93155,492],{"class":324},[312,93157,62624],{"class":488},[312,93159,498],{"class":324},[312,93161,93162,93164,93166,93168],{"class":314,"line":3453},[312,93163,59068],{"class":488},[312,93165,492],{"class":324},[312,93167,53380],{"class":488},[312,93169,498],{"class":324},[312,93171,93172,93174,93176,93178,93180],{"class":314,"line":3459},[312,93173,91815],{"class":488},[312,93175,492],{"class":324},[312,93177,2264],{"class":488},[312,93179,1437],{"class":1436},[312,93181,498],{"class":324},[312,93183,93184],{"class":314,"line":3480},[312,93185,3992],{"class":324},[312,93187,93188,93190,93192],{"class":314,"line":3485},[312,93189,54203],{"class":324},[312,93191,1856],{"class":328},[312,93193,343],{"class":324},[312,93195,93196,93198,93200],{"class":314,"line":3499},[312,93197,353],{"class":324},[312,93199,53127],{"class":328},[312,93201,343],{"class":324},[312,93203,93204],{"class":314,"line":3504},[312,93205,4205],{"emptyLinePlaceholder":1881},[312,93207,93208,93210,93212],{"class":314,"line":3533},[312,93209,325],{"class":324},[312,93211,53586],{"class":328},[312,93213,343],{"class":324},[312,93215,93216,93218,93220,93222,93224,93226,93228,93230],{"class":314,"line":3538},[312,93217,53930],{"class":324},[312,93219,329],{"class":328},[312,93221,333],{"class":332},[312,93223,336],{"class":324},[312,93225,55276],{"class":339},[312,93227,57096],{"class":324},[312,93229,329],{"class":328},[312,93231,343],{"class":324},[312,93233,93234,93236,93238,93240,93242,93244,93246,93248],{"class":314,"line":3555},[312,93235,53930],{"class":324},[312,93237,53599],{"class":328},[312,93239,57021],{"class":332},[312,93241,336],{"class":324},[312,93243,90044],{"class":339},[312,93245,57096],{"class":324},[312,93247,53599],{"class":328},[312,93249,343],{"class":324},[312,93251,93252,93254,93256],{"class":314,"line":3560},[312,93253,53930],{"class":324},[312,93255,53599],{"class":328},[312,93257,343],{"class":324},[312,93259,93260,93262,93264,93266,93268,93270,93272,93274],{"class":314,"line":3565},[312,93261,13024],{"class":1436},[312,93263,88703],{"class":488},[312,93265,15366],{"class":1436},[312,93267,56180],{"class":324},[312,93269,56183],{"class":332},[312,93271,1576],{"class":324},[312,93273,91916],{"class":339},[312,93275,1959],{"class":324},[312,93277,93278,93280,93282,93284],{"class":314,"line":3570},[312,93279,54005],{"class":1436},[312,93281,11241],{"class":324},[312,93283,336],{"class":1436},[312,93285,49128],{"class":488},[312,93287,93288,93290,93292],{"class":314,"line":3584},[312,93289,71861],{"class":1436},[312,93291,91935],{"class":332},[312,93293,12656],{"class":324},[312,93295,93296,93298,93300,93302],{"class":314,"line":3589},[312,93297,91942],{"class":324},[312,93299,336],{"class":1436},[312,93301,4837],{"class":324},[312,93303,4507],{"class":1436},[312,93305,93306],{"class":314,"line":4382},[312,93307,91953],{"class":318},[312,93309,93310],{"class":314,"line":4396},[312,93311,3992],{"class":324},[312,93313,93314],{"class":314,"line":4404},[312,93315,91962],{"class":318},[312,93317,93318],{"class":314,"line":4409},[312,93319,93320],{"class":318},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[312,93322,93323],{"class":314,"line":4415},[312,93324,93325],{"class":318},"    \u002F\u002F 1.声明一个定时器变量\n",[312,93327,93328],{"class":314,"line":4421},[312,93329,93330],{"class":318},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[312,93332,93333],{"class":314,"line":4426},[312,93334,93335],{"class":318},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[312,93337,93338],{"class":314,"line":9751},[312,93339,93340],{"class":318},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[312,93342,93343],{"class":314,"line":9775},[312,93344,93345],{"class":318},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[312,93347,93348,93350,93353,93355,93357,93359,93361],{"class":314,"line":9780},[312,93349,71861],{"class":1436},[312,93351,93352],{"class":332}," throttle",[312,93354,1576],{"class":324},[312,93356,92407],{"class":1579},[312,93358,733],{"class":324},[312,93360,2664],{"class":1579},[312,93362,14244],{"class":324},[312,93364,93365,93367],{"class":314,"line":9786},[312,93366,81544],{"class":1436},[312,93368,92420],{"class":324},[312,93370,93371,93373,93375],{"class":314,"line":9813},[312,93372,75754],{"class":1436},[312,93374,60700],{"class":1436},[312,93376,56236],{"class":324},[312,93378,93379,93381,93383,93385],{"class":314,"line":9818},[312,93380,4302],{"class":1436},[312,93382,3464],{"class":324},[312,93384,2172],{"class":1436},[312,93386,93387],{"class":324},"timer) {\n",[312,93389,93390,93393,93395,93397,93399,93401],{"class":314,"line":9824},[312,93391,93392],{"class":324},"          timer ",[312,93394,336],{"class":1436},[312,93396,92461],{"class":332},[312,93398,1576],{"class":324},[312,93400,56233],{"class":1436},[312,93402,56236],{"class":324},[312,93404,93405,93408],{"class":314,"line":9836},[312,93406,93407],{"class":332},"            fn",[312,93409,3781],{"class":324},[312,93411,93412],{"class":314,"line":9848},[312,93413,93414],{"class":318},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[312,93416,93417],{"class":314,"line":9860},[312,93418,93419],{"class":318},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[312,93421,93422,93425,93427],{"class":314,"line":11519},[312,93423,93424],{"class":324},"            timer ",[312,93426,336],{"class":1436},[312,93428,93429],{"class":488}," null\n",[312,93431,93432],{"class":314,"line":11544},[312,93433,93434],{"class":318},"            \u002F\u002F 不能用clearTimeout(timer)\n",[312,93436,93437],{"class":314,"line":11567},[312,93438,93439],{"class":318},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[312,93441,93442],{"class":314,"line":11591},[312,93443,93444],{"class":324},"          }, t)\n",[312,93446,93447],{"class":314,"line":11596},[312,93448,4334],{"class":324},[312,93450,93451],{"class":314,"line":11601},[312,93452,54184],{"class":324},[312,93454,93455],{"class":314,"line":11606},[312,93456,3992],{"class":324},[312,93458,93459,93461,93463,93465,93467,93469,93471,93473,93475],{"class":314,"line":11615},[312,93460,91977],{"class":324},[312,93462,59595],{"class":332},[312,93464,1576],{"class":324},[312,93466,91984],{"class":339},[312,93468,733],{"class":324},[312,93470,92943],{"class":332},[312,93472,91993],{"class":324},[312,93474,66852],{"class":488},[312,93476,32293],{"class":324},[312,93478,93479,93481,93483],{"class":314,"line":11620},[312,93480,54203],{"class":324},[312,93482,53599],{"class":328},[312,93484,343],{"class":324},[312,93486,93487,93489,93491],{"class":314,"line":11626},[312,93488,353],{"class":324},[312,93490,53586],{"class":328},[312,93492,343],{"class":324},[312,93494,93495],{"class":314,"line":11647},[312,93496,4205],{"emptyLinePlaceholder":1881},[312,93498,93499,93501,93503],{"class":314,"line":11653},[312,93500,353],{"class":324},[312,93502,52430],{"class":328},[312,93504,343],{"class":324},[69,93506,93508],{"id":93507},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[303,93510,93512],{"className":54853,"code":93511,"language":54855,"meta":308,"style":308},"\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",[119,93513,93514,93522,93530,93535,93540,93545,93550,93554,93562],{"__ignoreMap":308},[312,93515,93516,93518,93520],{"class":314,"line":315},[312,93517,325],{"class":324},[312,93519,53586],{"class":328},[312,93521,343],{"class":324},[312,93523,93524,93526,93528],{"class":314,"line":171},[312,93525,53930],{"class":324},[312,93527,53599],{"class":328},[312,93529,343],{"class":324},[312,93531,93532],{"class":314,"line":274},[312,93533,93534],{"class":324},"    let timer = null\n",[312,93536,93537],{"class":314,"line":298},[312,93538,93539],{"class":324},"    timer = setTimeout(() => {\n",[312,93541,93542],{"class":314,"line":974},[312,93543,93544],{"class":324},"      clearTimeout(timer)\n",[312,93546,93547],{"class":314,"line":980},[312,93548,93549],{"class":324},"      console.log(timer)\n",[312,93551,93552],{"class":314,"line":997},[312,93553,62007],{"class":324},[312,93555,93556,93558,93560],{"class":314,"line":1003},[312,93557,54203],{"class":324},[312,93559,53599],{"class":328},[312,93561,343],{"class":324},[312,93563,93564,93566,93568],{"class":314,"line":1020},[312,93565,353],{"class":324},[312,93567,53586],{"class":328},[312,93569,343],{"class":324},[24,93571,93572],{},"输出为1",[24,93574,93575],{},"在开启的定时器里边写清除定时器",[24,93577,93578],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[69,93580,93582],{"id":93581},"_4174-节流综合案例","4.17.4 节流综合案例",[24,93584,93585],{},"页面打开，可以记录上一次的视频播放位置",[24,93587,93588],{},[19,93589],{"alt":308,"src":93590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[24,93592,93593],{},[19,93594],{"alt":308,"src":93595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[303,93597,93599],{"className":52428,"code":93598,"language":52430,"meta":308,"style":308},"\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",[119,93600,93601,93611,93625,93629,93637,93651,93671,93691,93713,93726,93734,93740,93750,93760,93770,93774,93778,93785,93798,93810,93814,93818,93828,93840,93854,93858,93862,93869,93879,93892,93904,93914,93924,93940,93952,93956,93960,93968,93978,93990,94000,94010,94020,94024,94028,94038,94049,94053,94061,94069,94073,94081,94096,94111,94126,94147,94155,94163,94178,94200,94208,94223,94249,94275,94301,94309,94317,94336,94344,94349,94368,94373,94391,94396,94401,94409,94414,94428,94436,94441,94458,94462,94467,94489,94493,94501,94509,94513],{"__ignoreMap":308},[312,93602,93603,93605,93607,93609],{"class":314,"line":315},[312,93604,53092],{"class":324},[312,93606,53095],{"class":328},[312,93608,53098],{"class":332},[312,93610,343],{"class":324},[312,93612,93613,93615,93617,93619,93621,93623],{"class":314,"line":171},[312,93614,325],{"class":324},[312,93616,52430],{"class":328},[312,93618,53109],{"class":332},[312,93620,336],{"class":324},[312,93622,53114],{"class":339},[312,93624,343],{"class":324},[312,93626,93627],{"class":314,"line":274},[312,93628,4205],{"emptyLinePlaceholder":1881},[312,93630,93631,93633,93635],{"class":314,"line":298},[312,93632,325],{"class":324},[312,93634,53127],{"class":328},[312,93636,343],{"class":324},[312,93638,93639,93641,93643,93645,93647,93649],{"class":314,"line":974},[312,93640,53930],{"class":324},[312,93642,53137],{"class":328},[312,93644,53140],{"class":332},[312,93646,336],{"class":324},[312,93648,53145],{"class":339},[312,93650,60909],{"class":324},[312,93652,93653,93655,93657,93659,93661,93663,93665,93667,93669],{"class":314,"line":980},[312,93654,53930],{"class":324},[312,93656,53137],{"class":328},[312,93658,53156],{"class":332},[312,93660,336],{"class":324},[312,93662,53161],{"class":339},[312,93664,53164],{"class":332},[312,93666,336],{"class":324},[312,93668,53169],{"class":339},[312,93670,60909],{"class":324},[312,93672,93673,93675,93677,93679,93681,93683,93685,93687,93689],{"class":314,"line":997},[312,93674,53930],{"class":324},[312,93676,53137],{"class":328},[312,93678,16721],{"class":332},[312,93680,336],{"class":324},[312,93682,53184],{"class":339},[312,93684,53164],{"class":332},[312,93686,336],{"class":324},[312,93688,53191],{"class":339},[312,93690,60909],{"class":324},[312,93692,93693,93695,93697,93699,93701,93704,93706,93708,93711],{"class":314,"line":1003},[312,93694,53930],{"class":324},[312,93696,53137],{"class":328},[312,93698,16721],{"class":332},[312,93700,336],{"class":324},[312,93702,93703],{"class":339},"\"referrer\"",[312,93705,53164],{"class":332},[312,93707,336],{"class":324},[312,93709,93710],{"class":339},"\"never\"",[312,93712,60909],{"class":324},[312,93714,93715,93717,93719,93722,93724],{"class":314,"line":1020},[312,93716,53930],{"class":324},[312,93718,628],{"class":328},[312,93720,93721],{"class":324},">综合案例\u003C\u002F",[312,93723,628],{"class":328},[312,93725,343],{"class":324},[312,93727,93728,93730,93732],{"class":314,"line":1026},[312,93729,53930],{"class":324},[312,93731,1856],{"class":328},[312,93733,343],{"class":324},[312,93735,93736,93738],{"class":314,"line":3418},[312,93737,8207],{"class":328},[312,93739,483],{"class":324},[312,93741,93742,93744,93746,93748],{"class":314,"line":3423},[312,93743,56479],{"class":488},[312,93745,492],{"class":324},[312,93747,858],{"class":488},[312,93749,498],{"class":324},[312,93751,93752,93754,93756,93758],{"class":314,"line":3429},[312,93753,56490],{"class":488},[312,93755,492],{"class":324},[312,93757,858],{"class":488},[312,93759,498],{"class":324},[312,93761,93762,93764,93766,93768],{"class":314,"line":3434},[312,93763,74368],{"class":488},[312,93765,492],{"class":324},[312,93767,62287],{"class":488},[312,93769,498],{"class":324},[312,93771,93772],{"class":314,"line":3448},[312,93773,3992],{"class":324},[312,93775,93776],{"class":314,"line":3453},[312,93777,4205],{"emptyLinePlaceholder":1881},[312,93779,93780,93783],{"class":314,"line":3459},[312,93781,93782],{"class":332},"    .container",[312,93784,483],{"class":324},[312,93786,93787,93789,93791,93794,93796],{"class":314,"line":3480},[312,93788,56554],{"class":488},[312,93790,492],{"class":324},[312,93792,93793],{"class":488},"1200",[312,93795,1437],{"class":1436},[312,93797,498],{"class":324},[312,93799,93800,93802,93804,93806,93808],{"class":314,"line":3485},[312,93801,56490],{"class":488},[312,93803,492],{"class":324},[312,93805,858],{"class":488},[312,93807,861],{"class":488},[312,93809,498],{"class":324},[312,93811,93812],{"class":314,"line":3499},[312,93813,3992],{"class":324},[312,93815,93816],{"class":314,"line":3504},[312,93817,4205],{"emptyLinePlaceholder":1881},[312,93819,93820,93823,93826],{"class":314,"line":3533},[312,93821,93822],{"class":332},"    .video",[312,93824,93825],{"class":328}," video",[312,93827,483],{"class":324},[312,93829,93830,93832,93834,93836,93838],{"class":314,"line":3538},[312,93831,56554],{"class":488},[312,93833,492],{"class":324},[312,93835,2256],{"class":488},[312,93837,2273],{"class":1436},[312,93839,498],{"class":324},[312,93841,93842,93844,93846,93848,93850,93852],{"class":314,"line":3555},[312,93843,56479],{"class":488},[312,93845,492],{"class":324},[312,93847,1546],{"class":488},[312,93849,1437],{"class":1436},[312,93851,5898],{"class":488},[312,93853,498],{"class":324},[312,93855,93856],{"class":314,"line":3560},[312,93857,3992],{"class":324},[312,93859,93860],{"class":314,"line":3565},[312,93861,4205],{"emptyLinePlaceholder":1881},[312,93863,93864,93867],{"class":314,"line":3570},[312,93865,93866],{"class":332},"    .elevator",[312,93868,483],{"class":324},[312,93870,93871,93873,93875,93877],{"class":314,"line":3584},[312,93872,56543],{"class":488},[312,93874,492],{"class":324},[312,93876,1015],{"class":488},[312,93878,498],{"class":324},[312,93880,93881,93883,93885,93888,93890],{"class":314,"line":3589},[312,93882,56729],{"class":488},[312,93884,492],{"class":324},[312,93886,93887],{"class":488},"280",[312,93889,1437],{"class":1436},[312,93891,498],{"class":324},[312,93893,93894,93896,93898,93900,93902],{"class":314,"line":4382},[312,93895,88197],{"class":488},[312,93897,492],{"class":324},[312,93899,1546],{"class":488},[312,93901,1437],{"class":1436},[312,93903,498],{"class":324},[312,93905,93906,93908,93910,93912],{"class":314,"line":4396},[312,93907,88010],{"class":488},[312,93909,492],{"class":324},[312,93911,88015],{"class":488},[312,93913,498],{"class":324},[312,93915,93916,93918,93920,93922],{"class":314,"line":4404},[312,93917,63501],{"class":488},[312,93919,492],{"class":324},[312,93921,62624],{"class":488},[312,93923,498],{"class":324},[312,93925,93926,93928,93930,93932,93934,93936,93938],{"class":314,"line":4409},[312,93927,63755],{"class":488},[312,93929,492],{"class":324},[312,93931,1433],{"class":488},[312,93933,1437],{"class":1436},[312,93935,1440],{"class":488},[312,93937,64022],{"class":488},[312,93939,498],{"class":324},[312,93941,93942,93944,93946,93948,93950],{"class":314,"line":4415},[312,93943,56554],{"class":488},[312,93945,492],{"class":324},[312,93947,2851],{"class":488},[312,93949,1437],{"class":1436},[312,93951,498],{"class":324},[312,93953,93954],{"class":314,"line":4421},[312,93955,3992],{"class":324},[312,93957,93958],{"class":314,"line":4426},[312,93959,4205],{"emptyLinePlaceholder":1881},[312,93961,93962,93964,93966],{"class":314,"line":9751},[312,93963,93866],{"class":332},[312,93965,3206],{"class":328},[312,93967,483],{"class":324},[312,93969,93970,93972,93974,93976],{"class":314,"line":9775},[312,93971,56791],{"class":488},[312,93973,492],{"class":324},[312,93975,508],{"class":488},[312,93977,498],{"class":324},[312,93979,93980,93982,93984,93986,93988],{"class":314,"line":9780},[312,93981,56479],{"class":488},[312,93983,492],{"class":324},[312,93985,2391],{"class":488},[312,93987,1437],{"class":1436},[312,93989,498],{"class":324},[312,93991,93992,93994,93996,93998],{"class":314,"line":9786},[312,93993,65748],{"class":488},[312,93995,492],{"class":324},[312,93997,56521],{"class":488},[312,93999,498],{"class":324},[312,94001,94002,94004,94006,94008],{"class":314,"line":9813},[312,94003,59068],{"class":488},[312,94005,492],{"class":324},[312,94007,53380],{"class":488},[312,94009,498],{"class":324},[312,94011,94012,94014,94016,94018],{"class":314,"line":9818},[312,94013,59198],{"class":488},[312,94015,492],{"class":324},[312,94017,63848],{"class":488},[312,94019,498],{"class":324},[312,94021,94022],{"class":314,"line":9824},[312,94023,3992],{"class":324},[312,94025,94026],{"class":314,"line":9836},[312,94027,4205],{"emptyLinePlaceholder":1881},[312,94029,94030,94032,94034,94036],{"class":314,"line":9848},[312,94031,93866],{"class":332},[312,94033,3206],{"class":328},[312,94035,65802],{"class":332},[312,94037,483],{"class":324},[312,94039,94040,94042,94044,94047],{"class":314,"line":9860},[312,94041,59198],{"class":488},[312,94043,492],{"class":324},[312,94045,94046],{"class":488},"#1286ff",[312,94048,498],{"class":324},[312,94050,94051],{"class":314,"line":11519},[312,94052,3992],{"class":324},[312,94054,94055,94057,94059],{"class":314,"line":11544},[312,94056,54203],{"class":324},[312,94058,1856],{"class":328},[312,94060,343],{"class":324},[312,94062,94063,94065,94067],{"class":314,"line":11567},[312,94064,353],{"class":324},[312,94066,53127],{"class":328},[312,94068,343],{"class":324},[312,94070,94071],{"class":314,"line":11591},[312,94072,4205],{"emptyLinePlaceholder":1881},[312,94074,94075,94077,94079],{"class":314,"line":11596},[312,94076,325],{"class":324},[312,94078,53586],{"class":328},[312,94080,343],{"class":324},[312,94082,94083,94085,94087,94089,94091,94094],{"class":314,"line":11601},[312,94084,53930],{"class":324},[312,94086,329],{"class":328},[312,94088,333],{"class":332},[312,94090,336],{"class":324},[312,94092,94093],{"class":339},"\"container\"",[312,94095,343],{"class":324},[312,94097,94098,94100,94102,94104,94106,94109],{"class":314,"line":11606},[312,94099,53134],{"class":324},[312,94101,329],{"class":328},[312,94103,333],{"class":332},[312,94105,336],{"class":324},[312,94107,94108],{"class":339},"\"header\"",[312,94110,343],{"class":324},[312,94112,94113,94115,94117,94119,94121,94124],{"class":314,"line":11615},[312,94114,57016],{"class":324},[312,94116,164],{"class":328},[312,94118,648],{"class":332},[312,94120,336],{"class":324},[312,94122,94123],{"class":339},"\"http:\u002F\u002Fpip.itcast.cn\"",[312,94125,343],{"class":324},[312,94127,94128,94130,94132,94134,94136,94139,94141,94143,94145],{"class":314,"line":11620},[312,94129,57084],{"class":324},[312,94131,19],{"class":328},[312,94133,57021],{"class":332},[312,94135,336],{"class":324},[312,94137,94138],{"class":339},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[312,94140,57029],{"class":332},[312,94142,336],{"class":324},[312,94144,495],{"class":339},[312,94146,60909],{"class":324},[312,94148,94149,94151,94153],{"class":314,"line":11626},[312,94150,57189],{"class":324},[312,94152,164],{"class":328},[312,94154,343],{"class":324},[312,94156,94157,94159,94161],{"class":314,"line":11647},[312,94158,53563],{"class":324},[312,94160,329],{"class":328},[312,94162,343],{"class":324},[312,94164,94165,94167,94169,94171,94173,94176],{"class":314,"line":11653},[312,94166,53134],{"class":324},[312,94168,329],{"class":328},[312,94170,333],{"class":332},[312,94172,336],{"class":324},[312,94174,94175],{"class":339},"\"video\"",[312,94177,343],{"class":324},[312,94179,94180,94182,94184,94186,94188,94191,94194,94196,94198],{"class":314,"line":11667},[312,94181,57016],{"class":324},[312,94183,29979],{"class":328},[312,94185,57021],{"class":332},[312,94187,336],{"class":324},[312,94189,94190],{"class":339},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[312,94192,94193],{"class":332}," controls",[312,94195,57096],{"class":324},[312,94197,29979],{"class":328},[312,94199,343],{"class":324},[312,94201,94202,94204,94206],{"class":314,"line":11673},[312,94203,53563],{"class":324},[312,94205,329],{"class":328},[312,94207,343],{"class":324},[312,94209,94210,94212,94214,94216,94218,94221],{"class":314,"line":11700},[312,94211,53134],{"class":324},[312,94213,329],{"class":328},[312,94215,333],{"class":332},[312,94217,336],{"class":324},[312,94219,94220],{"class":339},"\"elevator\"",[312,94222,343],{"class":324},[312,94224,94225,94227,94229,94231,94233,94235,94238,94240,94242,94245,94247],{"class":314,"line":11709},[312,94226,57016],{"class":324},[312,94228,164],{"class":328},[312,94230,648],{"class":332},[312,94232,336],{"class":324},[312,94234,66014],{"class":339},[312,94236,94237],{"class":332}," data-ref",[312,94239,336],{"class":324},[312,94241,94175],{"class":339},[312,94243,94244],{"class":324},">视频介绍\u003C\u002F",[312,94246,164],{"class":328},[312,94248,343],{"class":324},[312,94250,94251,94253,94255,94257,94259,94261,94263,94265,94268,94271,94273],{"class":314,"line":11715},[312,94252,57016],{"class":324},[312,94254,164],{"class":328},[312,94256,648],{"class":332},[312,94258,336],{"class":324},[312,94260,66014],{"class":339},[312,94262,94237],{"class":332},[312,94264,336],{"class":324},[312,94266,94267],{"class":339},"\"intro\"",[312,94269,94270],{"class":324},">课程简介\u003C\u002F",[312,94272,164],{"class":328},[312,94274,343],{"class":324},[312,94276,94277,94279,94281,94283,94285,94287,94289,94291,94294,94297,94299],{"class":314,"line":11723},[312,94278,57016],{"class":324},[312,94280,164],{"class":328},[312,94282,648],{"class":332},[312,94284,336],{"class":324},[312,94286,66014],{"class":339},[312,94288,94237],{"class":332},[312,94290,336],{"class":324},[312,94292,94293],{"class":339},"\"outline\"",[312,94295,94296],{"class":324},">评论列表\u003C\u002F",[312,94298,164],{"class":328},[312,94300,343],{"class":324},[312,94302,94303,94305,94307],{"class":314,"line":11728},[312,94304,53563],{"class":324},[312,94306,329],{"class":328},[312,94308,343],{"class":324},[312,94310,94311,94313,94315],{"class":314,"line":18404},[312,94312,54203],{"class":324},[312,94314,329],{"class":328},[312,94316,343],{"class":324},[312,94318,94319,94321,94323,94325,94327,94330,94332,94334],{"class":314,"line":18410},[312,94320,53930],{"class":324},[312,94322,53599],{"class":328},[312,94324,57021],{"class":332},[312,94326,336],{"class":324},[312,94328,94329],{"class":339},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[312,94331,57096],{"class":324},[312,94333,53599],{"class":328},[312,94335,343],{"class":324},[312,94337,94338,94340,94342],{"class":314,"line":18433},[312,94339,53930],{"class":324},[312,94341,53599],{"class":328},[312,94343,343],{"class":324},[312,94345,94346],{"class":314,"line":18439},[312,94347,94348],{"class":318},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[312,94350,94351,94353,94355,94357,94359,94361,94363,94366],{"class":314,"line":18462},[312,94352,13024],{"class":1436},[312,94354,93825],{"class":488},[312,94356,15366],{"class":1436},[312,94358,56180],{"class":324},[312,94360,56183],{"class":332},[312,94362,1576],{"class":324},[312,94364,94365],{"class":339},"'video'",[312,94367,1959],{"class":324},[312,94369,94370],{"class":314,"line":18476},[312,94371,94372],{"class":318},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[312,94374,94375,94378,94380,94382,94384,94387,94389],{"class":314,"line":18496},[312,94376,94377],{"class":324},"    video.ontimeupdate ",[312,94379,336],{"class":1436},[312,94381,90125],{"class":324},[312,94383,92943],{"class":332},[312,94385,94386],{"class":324},"(() ",[312,94388,86493],{"class":1436},[312,94390,483],{"class":324},[312,94392,94393],{"class":314,"line":18502},[312,94394,94395],{"class":318},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[312,94397,94398],{"class":314,"line":18513},[312,94399,94400],{"class":318},"      \u002F\u002F 控制台输出当前的时间\n",[312,94402,94403,94406],{"class":314,"line":18536},[312,94404,94405],{"class":318},"      \u002F\u002F console.log(video.currentTime)",[312,94407,94408],{"class":318},"  \u002F\u002F获得当前的视频时间\n",[312,94410,94411],{"class":314,"line":18558},[312,94412,94413],{"class":318},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[312,94415,94416,94418,94420,94422,94425],{"class":314,"line":18563},[312,94417,76455],{"class":324},[312,94419,73426],{"class":332},[312,94421,1576],{"class":324},[312,94423,94424],{"class":339},"'currentTime'",[312,94426,94427],{"class":324},", video.currentTime)\n",[312,94429,94430,94432,94434],{"class":314,"line":18569},[312,94431,56319],{"class":324},[312,94433,8214],{"class":488},[312,94435,1959],{"class":324},[312,94437,94438],{"class":314,"line":18583},[312,94439,94440],{"class":318},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[312,94442,94443,94446,94449,94451,94454,94456],{"class":314,"line":18596},[312,94444,94445],{"class":324},"    video.",[312,94447,94448],{"class":332},"onloadeddata",[312,94450,15366],{"class":1436},[312,94452,94453],{"class":324}," () ",[312,94455,86493],{"class":1436},[312,94457,483],{"class":324},[312,94459,94460],{"class":314,"line":18601},[312,94461,61794],{"class":318},[312,94463,94464],{"class":314,"line":18615},[312,94465,94466],{"class":318},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[312,94468,94469,94472,94474,94477,94479,94481,94483,94485,94487],{"class":314,"line":18620},[312,94470,94471],{"class":324},"      video.currentTime ",[312,94473,336],{"class":1436},[312,94475,94476],{"class":324}," localStorage.",[312,94478,73457],{"class":332},[312,94480,1576],{"class":324},[312,94482,94424],{"class":339},[312,94484,1583],{"class":324},[312,94486,73129],{"class":1436},[312,94488,49128],{"class":488},[312,94490,94491],{"class":314,"line":18626},[312,94492,3992],{"class":324},[312,94494,94495,94497,94499],{"class":314,"line":18631},[312,94496,54203],{"class":324},[312,94498,53599],{"class":328},[312,94500,343],{"class":324},[312,94502,94503,94505,94507],{"class":314,"line":18645},[312,94504,353],{"class":324},[312,94506,53586],{"class":328},[312,94508,343],{"class":324},[312,94510,94511],{"class":314,"line":18650},[312,94512,4205],{"emptyLinePlaceholder":1881},[312,94514,94515,94517,94519],{"class":314,"line":18655},[312,94516,353],{"class":324},[312,94518,52430],{"class":328},[312,94520,343],{"class":324},[1856,94522,94523],{},"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":308,"searchDepth":171,"depth":171,"links":94525},[94526,94531,94535,94536,94537,94542,94547,94548,94549,94550,94557,94562,94563,94573,94577,94578,94582],{"id":78463,"depth":171,"text":78464,"children":94527},[94528,94529,94530],{"id":78467,"depth":274,"text":78468},{"id":78492,"depth":274,"text":78493},{"id":78504,"depth":274,"text":78505},{"id":78516,"depth":171,"text":78517,"children":94532},[94533,94534],{"id":78520,"depth":274,"text":78521},{"id":78535,"depth":274,"text":78536},{"id":78587,"depth":171,"text":78588},{"id":78631,"depth":171,"text":78632},{"id":78648,"depth":171,"text":78649,"children":94538},[94539,94540,94541],{"id":78652,"depth":274,"text":78653},{"id":78665,"depth":274,"text":78666},{"id":78770,"depth":274,"text":78771},{"id":79059,"depth":171,"text":79060,"children":94543},[94544,94545,94546],{"id":79063,"depth":274,"text":79064},{"id":79506,"depth":274,"text":79507},{"id":79917,"depth":274,"text":79918},{"id":79980,"depth":171,"text":79981},{"id":80059,"depth":171,"text":80060},{"id":80152,"depth":171,"text":80153},{"id":81996,"depth":171,"text":81997,"children":94551},[94552,94553,94554,94555,94556],{"id":82000,"depth":274,"text":82001},{"id":82012,"depth":274,"text":82013},{"id":82231,"depth":274,"text":82232},{"id":82249,"depth":274,"text":82250},{"id":82309,"depth":274,"text":82310},{"id":86577,"depth":171,"text":86578,"children":94558},[94559,94560,94561],{"id":86581,"depth":274,"text":86582},{"id":86599,"depth":274,"text":86600},{"id":86625,"depth":274,"text":86626},{"id":86634,"depth":171,"text":86635},{"id":86656,"depth":171,"text":86657,"children":94564},[94565,94566,94567,94568,94569,94570,94571,94572],{"id":86660,"depth":274,"text":86661},{"id":86921,"depth":274,"text":86922},{"id":87107,"depth":274,"text":87108},{"id":87474,"depth":274,"text":87475},{"id":87590,"depth":274,"text":87591},{"id":87626,"depth":274,"text":87627},{"id":87673,"depth":274,"text":87674},{"id":87707,"depth":274,"text":87708},{"id":89069,"depth":171,"text":89070,"children":94574},[94575,94576],{"id":89073,"depth":274,"text":89074},{"id":89110,"depth":274,"text":89111},{"id":90465,"depth":171,"text":90466},{"id":90836,"depth":171,"text":90837,"children":94579},[94580,94581],{"id":90840,"depth":274,"text":90841},{"id":90874,"depth":274,"text":90875},{"id":91603,"depth":171,"text":91604,"children":94583},[94584,94585,94586,94587],{"id":91607,"depth":274,"text":91608},{"id":92565,"depth":274,"text":92566},{"id":93507,"depth":274,"text":93508},{"id":93581,"depth":274,"text":93582},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78452,"description":1878},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94594,"title":94595,"body":94596,"description":94607,"extension":1879,"meta":94608,"navigation":1881,"path":94610,"seo":94611,"stem":94612,"__hash__":94613},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94597,"toc":94605},[94598],[24,94599,94600,94601],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[164,94602,94603],{"href":94603,"rel":94604},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[168],{"title":308,"searchDepth":171,"depth":171,"links":94606},[],"三件套第三套学习",{"category":94609},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94595,"description":94607},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94615,"title":94616,"body":94617,"description":1878,"extension":1879,"meta":94722,"navigation":1881,"path":94723,"seo":94724,"stem":94725,"__hash__":94726},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94618,"toc":94717},[94619,94626,94629,94632,94635,94639,94648,94651,94654,94658,94667,94670,94674,94677,94697,94700,94714],[24,94620,94621],{},[164,94622,94625],{"href":94623,"rel":94624},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[168],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94627,94616],{"id":94628},"_1安装",[24,94630,94631],{},"numpy是科学计算基础库,底层是C语言",[24,94633,94634],{},"三种方式：",[14,94636,94638],{"id":94637},"_11-通过pip安装","1.1 通过pip安装",[303,94640,94642],{"className":32174,"code":94641,"language":32176,"meta":308,"style":308},"pip install numpy\n",[119,94643,94644],{"__ignoreMap":308},[312,94645,94646],{"class":314,"line":315},[312,94647,94641],{"class":324},[24,94649,94650],{},"首选方式，自动处理依赖项",[24,94652,94653],{},"在提示系统命令符中使用cmd",[14,94655,94657],{"id":94656},"_12-通过anaconda安装","1.2 通过Anaconda安装",[303,94659,94661],{"className":32174,"code":94660,"language":32176,"meta":308,"style":308},"conda install numpy\n",[119,94662,94663],{"__ignoreMap":308},[312,94664,94665],{"class":314,"line":315},[312,94666,94660],{"class":324},[24,94668,94669],{},"自动解决环境依赖",[14,94671,94673],{"id":94672},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[24,94675,94676],{},"对于Debian\u002FUbuntu",[303,94678,94680],{"className":32174,"code":94679,"language":32176,"meta":308,"style":308},"sudo apt-get install python3-numpy\n",[119,94681,94682],{"__ignoreMap":308},[312,94683,94684,94687,94689,94692,94694],{"class":314,"line":315},[312,94685,94686],{"class":324},"sudo apt",[312,94688,2477],{"class":1436},[312,94690,94691],{"class":324},"get install python3",[312,94693,2477],{"class":1436},[312,94695,94696],{"class":324},"numpy\n",[24,94698,94699],{},"对于Fedora:",[303,94701,94703],{"className":32174,"code":94702,"language":32176,"meta":308,"style":308},"sudo dnf install python3-numpy\n",[119,94704,94705],{"__ignoreMap":308},[312,94706,94707,94710,94712],{"class":314,"line":315},[312,94708,94709],{"class":324},"sudo dnf install python3",[312,94711,2477],{"class":1436},[312,94713,94696],{"class":324},[1856,94715,94716],{},"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":308,"searchDepth":171,"depth":171,"links":94718},[94719,94720,94721],{"id":94637,"depth":171,"text":94638},{"id":94656,"depth":171,"text":94657},{"id":94672,"depth":171,"text":94673},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94616,"description":1878},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94728,"title":94729,"body":94730,"description":1878,"extension":1879,"meta":94843,"navigation":1881,"path":94844,"seo":94845,"stem":94846,"__hash__":94847},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94731,"toc":94841},[94732,94735,94738,94741,94744,94747,94750,94753,94756,94759,94835,94838],[10,94733,94729],{"id":94734},"_10算数函数",[24,94736,94737],{},"加减乘除运算跟python基础语法没区别",[24,94739,94740],{},"除了python那种方法外还可以使用函数",[24,94742,94743],{},"加：np.add(a,b)",[24,94745,94746],{},"减：np.subtract(a,b)",[24,94748,94749],{},"乘：np.multiply(a,b)",[24,94751,94752],{},"除：np.divide(a,b) == a\u002Fb",[24,94754,94755],{},"取余：np.mod(a,b) == a%b",[24,94757,94758],{},"必须会的用法：",[303,94760,94762],{"className":32174,"code":94761,"language":32176,"meta":308,"style":308},"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",[119,94763,94764,94786,94807,94817,94830],{"__ignoreMap":308},[312,94765,94766,94768,94770,94773,94775,94778,94780,94782,94784],{"class":314,"line":315},[312,94767,164],{"class":324},[312,94769,336],{"class":1436},[312,94771,94772],{"class":324},"np.arange(",[312,94774,2365],{"class":488},[312,94776,94777],{"class":324},").reshape(",[312,94779,2021],{"class":488},[312,94781,2323],{"class":324},[312,94783,2021],{"class":488},[312,94785,1959],{"class":324},[312,94787,94788,94790,94792,94795,94797,94799,94801,94803,94805],{"class":314,"line":171},[312,94789,2208],{"class":324},[312,94791,336],{"class":1436},[312,94793,94794],{"class":324},"np.array([",[312,94796,2391],{"class":488},[312,94798,2323],{"class":324},[312,94800,2391],{"class":488},[312,94802,2323],{"class":324},[312,94804,2391],{"class":488},[312,94806,6462],{"class":324},[312,94808,94809,94812,94814],{"class":314,"line":274},[312,94810,94811],{"class":324},"result",[312,94813,336],{"class":1436},[312,94815,94816],{"class":324},"np.empty_like(a)\n",[312,94818,94819,94822,94825,94827],{"class":314,"line":298},[312,94820,94821],{"class":324},"np.add(a,b,",[312,94823,94824],{"class":1579},"out",[312,94826,336],{"class":1436},[312,94828,94829],{"class":324},"result)\n",[312,94831,94832],{"class":314,"line":974},[312,94833,94834],{"class":324},"result\n",[24,94836,94837],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1856,94839,94840],{},"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":308,"searchDepth":171,"depth":171,"links":94842},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94729,"description":1878},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94849,"title":94850,"body":94851,"description":1878,"extension":1879,"meta":95613,"navigation":1881,"path":95614,"seo":95615,"stem":95616,"__hash__":95617},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94852,"toc":95600},[94853,94856,94859,94862,94866,94905,94909,94953,95013,95017,95020,95059,95062,95107,95111,95147,95151,95220,95224,95288,95292,95295,95298,95301,95304,95340,95344,95384,95388,95460,95463,95467,95530,95534,95597],[10,94854,94850],{"id":94855},"_11统计函数",[24,94857,94858],{},"sum max min mean",[24,94860,94861],{},"这些有axis参数，可以指定方向",[14,94863,94865],{"id":94864},"_111-sum求和函数","11.1 sum()求和函数",[303,94867,94869],{"className":32174,"code":94868,"language":32176,"meta":308,"style":308},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[119,94870,94871,94876,94897],{"__ignoreMap":308},[312,94872,94873],{"class":314,"line":315},[312,94874,94875],{"class":318},"#创建一维数组\n",[312,94877,94878,94880,94882,94885,94887,94889,94891,94893,94895],{"class":314,"line":171},[312,94879,164],{"class":324},[312,94881,336],{"class":1436},[312,94883,94884],{"class":324},"np.random.randint(",[312,94886,1433],{"class":488},[312,94888,2323],{"class":324},[312,94890,2256],{"class":488},[312,94892,2323],{"class":324},[312,94894,1546],{"class":488},[312,94896,1959],{"class":324},[312,94898,94899,94902],{"class":314,"line":274},[312,94900,94901],{"class":324},"np.sum(a)",[312,94903,94904],{"class":318},"#求和\n",[14,94906,94908],{"id":94907},"_112-max求最大值函数","11.2 max()求最大值函数",[303,94910,94912],{"className":32174,"code":94911,"language":32176,"meta":308,"style":308},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[119,94913,94914,94918,94938,94943,94948],{"__ignoreMap":308},[312,94915,94916],{"class":314,"line":315},[312,94917,94875],{"class":318},[312,94919,94920,94922,94924,94926,94928,94930,94932,94934,94936],{"class":314,"line":171},[312,94921,164],{"class":324},[312,94923,336],{"class":1436},[312,94925,94884],{"class":324},[312,94927,1433],{"class":488},[312,94929,2323],{"class":324},[312,94931,2256],{"class":488},[312,94933,2323],{"class":324},[312,94935,1546],{"class":488},[312,94937,1959],{"class":324},[312,94939,94940],{"class":314,"line":274},[312,94941,94942],{"class":324},"np.max(a)\n",[312,94944,94945],{"class":314,"line":298},[312,94946,94947],{"class":318},"#最大索引(求最大元素的索引)arg\n",[312,94949,94950],{"class":314,"line":974},[312,94951,94952],{"class":324},"np.argmax(a)\n",[303,94954,94956],{"className":32174,"code":94955,"language":32176,"meta":308,"style":308},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[119,94957,94958,94979,94999,95003],{"__ignoreMap":308},[312,94959,94960,94962,94964,94967,94969,94971,94973,94975,94977],{"class":314,"line":315},[312,94961,12722],{"class":324},[312,94963,336],{"class":1436},[312,94965,94966],{"class":324}," np.array([",[312,94968,1433],{"class":488},[312,94970,733],{"class":324},[312,94972,2264],{"class":488},[312,94974,733],{"class":324},[312,94976,2021],{"class":488},[312,94978,6462],{"class":324},[312,94980,94981,94983,94985,94987,94989,94991,94993,94995,94997],{"class":314,"line":171},[312,94982,12748],{"class":324},[312,94984,336],{"class":1436},[312,94986,94966],{"class":324},[312,94988,2021],{"class":488},[312,94990,733],{"class":324},[312,94992,2027],{"class":488},[312,94994,733],{"class":324},[312,94996,2238],{"class":488},[312,94998,6462],{"class":324},[312,95000,95001],{"class":314,"line":274},[312,95002,4205],{"emptyLinePlaceholder":1881},[312,95004,95005,95007,95010],{"class":314,"line":298},[312,95006,32211],{"class":488},[312,95008,95009],{"class":324},"(np.maximum(a, b))   ",[312,95011,95012],{"class":318},"# [3 5 4]，每个位置上取较大值\n",[14,95014,95016],{"id":95015},"_113-mean求平均值函数","11.3 mean()求平均值函数",[24,95018,95019],{},"①一维数组：",[303,95021,95023],{"className":32174,"code":95022,"language":32176,"meta":308,"style":308},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[119,95024,95025,95029,95049,95054],{"__ignoreMap":308},[312,95026,95027],{"class":314,"line":315},[312,95028,94875],{"class":318},[312,95030,95031,95033,95035,95037,95039,95041,95043,95045,95047],{"class":314,"line":171},[312,95032,164],{"class":324},[312,95034,336],{"class":1436},[312,95036,94884],{"class":324},[312,95038,1433],{"class":488},[312,95040,2323],{"class":324},[312,95042,2256],{"class":488},[312,95044,2323],{"class":324},[312,95046,1546],{"class":488},[312,95048,1959],{"class":324},[312,95050,95051],{"class":314,"line":274},[312,95052,95053],{"class":318},"#求平均值\n",[312,95055,95056],{"class":314,"line":298},[312,95057,95058],{"class":324},"np.mean(a)\n",[24,95060,95061],{},"②二维数组",[303,95063,95065],{"className":32174,"code":95064,"language":32176,"meta":308,"style":308},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[119,95066,95067,95072,95097,95102],{"__ignoreMap":308},[312,95068,95069],{"class":314,"line":315},[312,95070,95071],{"class":318},"#二维数组\n",[312,95073,95074,95077,95079,95081,95083,95085,95087,95089,95091,95093,95095],{"class":314,"line":171},[312,95075,95076],{"class":324},"aa",[312,95078,336],{"class":1436},[312,95080,94772],{"class":324},[312,95082,1433],{"class":488},[312,95084,2323],{"class":324},[312,95086,2468],{"class":488},[312,95088,94777],{"class":324},[312,95090,2021],{"class":488},[312,95092,2323],{"class":324},[312,95094,2238],{"class":488},[312,95096,1959],{"class":324},[312,95098,95099],{"class":314,"line":274},[312,95100,95101],{"class":318},"#对数组中的所有数求平均\n",[312,95103,95104],{"class":314,"line":298},[312,95105,95106],{"class":324},"np.mean(aa)\n",[14,95108,95110],{"id":95109},"_114-median求中位数函数","11.4 median()求中位数函数",[303,95112,95114],{"className":32174,"code":95113,"language":32176,"meta":308,"style":308},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[119,95115,95116,95121,95137,95142],{"__ignoreMap":308},[312,95117,95118],{"class":314,"line":315},[312,95119,95120],{"class":318},"#求中位数\n",[312,95122,95123,95125,95127,95129,95131,95133,95135],{"class":314,"line":171},[312,95124,2208],{"class":324},[312,95126,336],{"class":1436},[312,95128,94772],{"class":324},[312,95130,1433],{"class":488},[312,95132,2323],{"class":324},[312,95134,2391],{"class":488},[312,95136,1959],{"class":324},[312,95138,95139],{"class":314,"line":274},[312,95140,95141],{"class":324},"np.median(b)\n",[312,95143,95144],{"class":314,"line":298},[312,95145,95146],{"class":318},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95148,95150],{"id":95149},"_115-power求幂运算函数","11.5 power()求幂运算函数",[303,95152,95154],{"className":32174,"code":95153,"language":32176,"meta":308,"style":308},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[119,95155,95156,95172,95177,95182,95191,95196,95205],{"__ignoreMap":308},[312,95157,95158,95160,95162,95164,95166,95168,95170],{"class":314,"line":315},[312,95159,2208],{"class":324},[312,95161,336],{"class":1436},[312,95163,94772],{"class":324},[312,95165,1433],{"class":488},[312,95167,2323],{"class":324},[312,95169,2391],{"class":488},[312,95171,1959],{"class":324},[312,95173,95174],{"class":314,"line":171},[312,95175,95176],{"class":318},"#幂运算\n",[312,95178,95179],{"class":314,"line":274},[312,95180,95181],{"class":318},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[312,95183,95184,95187,95189],{"class":314,"line":298},[312,95185,95186],{"class":324},"np.power(b,",[312,95188,2027],{"class":488},[312,95190,1959],{"class":324},[312,95192,95193],{"class":314,"line":974},[312,95194,95195],{"class":318},"#或者以下代码，将数据存储起来\n",[312,95197,95198,95200,95202],{"class":314,"line":980},[312,95199,2789],{"class":324},[312,95201,336],{"class":1436},[312,95203,95204],{"class":324},"np.empty_like(b)\n",[312,95206,95207,95209,95211,95213,95215,95217],{"class":314,"line":997},[312,95208,95186],{"class":324},[312,95210,2027],{"class":488},[312,95212,2323],{"class":324},[312,95214,94824],{"class":1579},[312,95216,336],{"class":1436},[312,95218,95219],{"class":324},"y)\n",[14,95221,95223],{"id":95222},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[303,95225,95227],{"className":32174,"code":95226,"language":32176,"meta":308,"style":308},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[119,95228,95229,95245,95250,95255,95259,95277],{"__ignoreMap":308},[312,95230,95231,95233,95235,95237,95239,95241,95243],{"class":314,"line":315},[312,95232,2208],{"class":324},[312,95234,336],{"class":1436},[312,95236,94772],{"class":324},[312,95238,1433],{"class":488},[312,95240,2323],{"class":324},[312,95242,2391],{"class":488},[312,95244,1959],{"class":324},[312,95246,95247],{"class":314,"line":171},[312,95248,95249],{"class":318},"#开方\n",[312,95251,95252],{"class":314,"line":274},[312,95253,95254],{"class":324},"np.sqrt(b)\n",[312,95256,95257],{"class":314,"line":298},[312,95258,95195],{"class":318},[312,95260,95261,95263,95265,95268,95271,95273,95275],{"class":314,"line":974},[312,95262,2789],{"class":324},[312,95264,336],{"class":1436},[312,95266,95267],{"class":324},"np.empty_like(b,",[312,95269,95270],{"class":1579},"dtype",[312,95272,336],{"class":1436},[312,95274,1992],{"class":488},[312,95276,1959],{"class":324},[312,95278,95279,95282,95284,95286],{"class":314,"line":980},[312,95280,95281],{"class":324},"np.sqrt(b,",[312,95283,94824],{"class":1579},[312,95285,336],{"class":1436},[312,95287,95219],{"class":324},[14,95289,95291],{"id":95290},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[24,95293,95294],{},"对数组中的元素累计求和，可指定轴",[24,95296,95297],{},"#累计求和的意思是：",[24,95299,95300],{},"a = np.array([1, 2, 3, 4])",[24,95302,95303],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[303,95305,95307],{"className":32174,"code":95306,"language":32176,"meta":308,"style":308},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[119,95308,95309,95325,95330,95335],{"__ignoreMap":308},[312,95310,95311,95313,95315,95317,95319,95321,95323],{"class":314,"line":315},[312,95312,2208],{"class":324},[312,95314,336],{"class":1436},[312,95316,94772],{"class":324},[312,95318,1433],{"class":488},[312,95320,2323],{"class":324},[312,95322,2391],{"class":488},[312,95324,1959],{"class":324},[312,95326,95327],{"class":314,"line":171},[312,95328,95329],{"class":324},"np.cumsum(b)\n",[312,95331,95332],{"class":314,"line":274},[312,95333,95334],{"class":318},"#结果：\n",[312,95336,95337],{"class":314,"line":298},[312,95338,95339],{"class":318},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95341,95343],{"id":95342},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[303,95345,95347],{"className":32174,"code":95346,"language":32176,"meta":308,"style":308},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[119,95348,95349,95365,95370,95375,95379],{"__ignoreMap":308},[312,95350,95351,95353,95355,95357,95359,95361,95363],{"class":314,"line":315},[312,95352,2208],{"class":324},[312,95354,336],{"class":1436},[312,95356,94772],{"class":324},[312,95358,1433],{"class":488},[312,95360,2323],{"class":324},[312,95362,2391],{"class":488},[312,95364,1959],{"class":324},[312,95366,95367],{"class":314,"line":171},[312,95368,95369],{"class":318},"#对数组中的元素累计求积，可指定轴\n",[312,95371,95372],{"class":314,"line":274},[312,95373,95374],{"class":324},"np.cumprod(b)\n",[312,95376,95377],{"class":314,"line":298},[312,95378,95334],{"class":318},[312,95380,95381],{"class":314,"line":974},[312,95382,95383],{"class":318},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95385,95387],{"id":95386},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[303,95389,95391],{"className":32174,"code":95390,"language":32176,"meta":308,"style":308},"#删除数组中的重复数据，并对数据进行排序\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",[119,95392,95393,95398,95446,95451,95455],{"__ignoreMap":308},[312,95394,95395],{"class":314,"line":315},[312,95396,95397],{"class":318},"#删除数组中的重复数据，并对数据进行排序\n",[312,95399,95400,95402,95404,95406,95408,95410,95412,95414,95416,95418,95420,95422,95424,95426,95428,95430,95432,95434,95436,95438,95440,95442,95444],{"class":314,"line":171},[312,95401,164],{"class":324},[312,95403,336],{"class":1436},[312,95405,94794],{"class":324},[312,95407,1433],{"class":488},[312,95409,2323],{"class":324},[312,95411,2027],{"class":488},[312,95413,2323],{"class":324},[312,95415,2021],{"class":488},[312,95417,2323],{"class":324},[312,95419,2443],{"class":488},[312,95421,2323],{"class":324},[312,95423,2021],{"class":488},[312,95425,2323],{"class":324},[312,95427,2391],{"class":488},[312,95429,2323],{"class":324},[312,95431,2144],{"class":488},[312,95433,2323],{"class":324},[312,95435,858],{"class":488},[312,95437,2323],{"class":324},[312,95439,2719],{"class":488},[312,95441,2323],{"class":324},[312,95443,2238],{"class":488},[312,95445,6462],{"class":324},[312,95447,95448],{"class":314,"line":274},[312,95449,95450],{"class":324},"np.unique(a)\n",[312,95452,95453],{"class":314,"line":298},[312,95454,95334],{"class":318},[312,95456,95457],{"class":314,"line":974},[312,95458,95459],{"class":318},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[24,95461,95462],{},"升序形式排序",[14,95464,95466],{"id":95465},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[303,95468,95470],{"className":32174,"code":95469,"language":32176,"meta":308,"style":308},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[119,95471,95472,95520,95525],{"__ignoreMap":308},[312,95473,95474,95476,95478,95480,95482,95484,95486,95488,95490,95492,95494,95496,95498,95500,95502,95504,95506,95508,95510,95512,95514,95516,95518],{"class":314,"line":315},[312,95475,164],{"class":324},[312,95477,336],{"class":1436},[312,95479,94794],{"class":324},[312,95481,1433],{"class":488},[312,95483,2323],{"class":324},[312,95485,2027],{"class":488},[312,95487,2323],{"class":324},[312,95489,2021],{"class":488},[312,95491,2323],{"class":324},[312,95493,2443],{"class":488},[312,95495,2323],{"class":324},[312,95497,2021],{"class":488},[312,95499,2323],{"class":324},[312,95501,2391],{"class":488},[312,95503,2323],{"class":324},[312,95505,2144],{"class":488},[312,95507,2323],{"class":324},[312,95509,858],{"class":488},[312,95511,2323],{"class":324},[312,95513,2719],{"class":488},[312,95515,2323],{"class":324},[312,95517,2238],{"class":488},[312,95519,6462],{"class":324},[312,95521,95522],{"class":314,"line":171},[312,95523,95524],{"class":318},"#返回数组中非零元素的索引\n",[312,95526,95527],{"class":314,"line":274},[312,95528,95529],{"class":324},"np.nonzero(a)\n",[14,95531,95533],{"id":95532},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[303,95535,95537],{"className":32174,"code":95536,"language":32176,"meta":308,"style":308},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[119,95538,95539,95587,95592],{"__ignoreMap":308},[312,95540,95541,95543,95545,95547,95549,95551,95553,95555,95557,95559,95561,95563,95565,95567,95569,95571,95573,95575,95577,95579,95581,95583,95585],{"class":314,"line":315},[312,95542,164],{"class":324},[312,95544,336],{"class":1436},[312,95546,94794],{"class":324},[312,95548,1433],{"class":488},[312,95550,2323],{"class":324},[312,95552,2027],{"class":488},[312,95554,2323],{"class":324},[312,95556,2021],{"class":488},[312,95558,2323],{"class":324},[312,95560,2443],{"class":488},[312,95562,2323],{"class":324},[312,95564,2021],{"class":488},[312,95566,2323],{"class":324},[312,95568,2391],{"class":488},[312,95570,2323],{"class":324},[312,95572,2144],{"class":488},[312,95574,2323],{"class":324},[312,95576,858],{"class":488},[312,95578,2323],{"class":324},[312,95580,2719],{"class":488},[312,95582,2323],{"class":324},[312,95584,2238],{"class":488},[312,95586,6462],{"class":324},[312,95588,95589],{"class":314,"line":171},[312,95590,95591],{"class":318},"#计算一组数中最大值与最小值的差，可指定轴\n",[312,95593,95594],{"class":314,"line":274},[312,95595,95596],{"class":324},"np.ptp(a)\n",[1856,95598,95599],{},"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":308,"searchDepth":171,"depth":171,"links":95601},[95602,95603,95604,95605,95606,95607,95608,95609,95610,95611,95612],{"id":94864,"depth":171,"text":94865},{"id":94907,"depth":171,"text":94908},{"id":95015,"depth":171,"text":95016},{"id":95109,"depth":171,"text":95110},{"id":95149,"depth":171,"text":95150},{"id":95222,"depth":171,"text":95223},{"id":95290,"depth":171,"text":95291},{"id":95342,"depth":171,"text":95343},{"id":95386,"depth":171,"text":95387},{"id":95465,"depth":171,"text":95466},{"id":95532,"depth":171,"text":95533},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94850,"description":1878},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95619,"title":95620,"body":95621,"description":1878,"extension":1879,"meta":96276,"navigation":1881,"path":96277,"seo":96278,"stem":96279,"__hash__":96280},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95622,"toc":96264},[95623,95626,95630,95633,95849,95853,95856,96065,96069,96135,96140,96144,96147,96150,96188,96192,96195,96200,96204,96207,96210,96215,96219,96222,96226,96229,96232,96237,96241,96244,96247,96252,96256,96261],[10,95624,95620],{"id":95625},"_12其他常用函数",[14,95627,95629],{"id":95628},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[24,95631,95632],{},"将数组的数据按照行列复制扩展",[303,95634,95636],{"className":32174,"code":95635,"language":32176,"meta":308,"style":308},"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",[119,95637,95638,95654,95663,95667,95672,95677,95690,95694,95699,95704,95709,95713,95718,95742,95754,95758,95762,95767,95772,95777,95782,95786,95799,95803,95807,95812,95817,95822,95827,95832,95836,95840,95845],{"__ignoreMap":308},[312,95639,95640,95642,95644,95646,95648,95650,95652],{"class":314,"line":315},[312,95641,164],{"class":324},[312,95643,336],{"class":1436},[312,95645,94772],{"class":324},[312,95647,1433],{"class":488},[312,95649,2323],{"class":324},[312,95651,2264],{"class":488},[312,95653,1959],{"class":324},[312,95655,95656,95659,95661],{"class":314,"line":171},[312,95657,95658],{"class":324},"np.tile(a,",[312,95660,2027],{"class":488},[312,95662,1959],{"class":324},[312,95664,95665],{"class":314,"line":274},[312,95666,95334],{"class":318},[312,95668,95669],{"class":314,"line":298},[312,95670,95671],{"class":318},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[312,95673,95674],{"class":314,"line":974},[312,95675,95676],{"class":318},"#行复制两次，列复制三次\n",[312,95678,95679,95682,95684,95686,95688],{"class":314,"line":980},[312,95680,95681],{"class":324},"np.tile(a,(",[312,95683,2027],{"class":488},[312,95685,2323],{"class":324},[312,95687,2021],{"class":488},[312,95689,32293],{"class":324},[312,95691,95692],{"class":314,"line":997},[312,95693,95334],{"class":318},[312,95695,95696],{"class":314,"line":1003},[312,95697,95698],{"class":339},"'''\n",[312,95700,95701],{"class":314,"line":1020},[312,95702,95703],{"class":339},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[312,95705,95706],{"class":314,"line":1026},[312,95707,95708],{"class":339},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[312,95710,95711],{"class":314,"line":3418},[312,95712,95698],{"class":339},[312,95714,95715],{"class":314,"line":3423},[312,95716,95717],{"class":318},"#创建二维数组\n",[312,95719,95720,95722,95724,95726,95728,95730,95732,95734,95736,95738,95740],{"class":314,"line":3429},[312,95721,95076],{"class":324},[312,95723,336],{"class":1436},[312,95725,94772],{"class":324},[312,95727,1433],{"class":488},[312,95729,2323],{"class":324},[312,95731,2468],{"class":488},[312,95733,94777],{"class":324},[312,95735,2238],{"class":488},[312,95737,2323],{"class":324},[312,95739,2021],{"class":488},[312,95741,1959],{"class":324},[312,95743,95744,95747,95749,95751],{"class":314,"line":3434},[312,95745,95746],{"class":324},"np.tile(aa,",[312,95748,2027],{"class":488},[312,95750,2374],{"class":324},[312,95752,95753],{"class":318},"#一个数的时候就是行\n",[312,95755,95756],{"class":314,"line":3448},[312,95757,95334],{"class":318},[312,95759,95760],{"class":314,"line":3453},[312,95761,95698],{"class":339},[312,95763,95764],{"class":314,"line":3459},[312,95765,95766],{"class":339},"array([[ 1,  2,  3,  1,  2,  3],\n",[312,95768,95769],{"class":314,"line":3480},[312,95770,95771],{"class":339},"       [ 4,  5,  6,  4,  5,  6],\n",[312,95773,95774],{"class":314,"line":3485},[312,95775,95776],{"class":339},"       [ 7,  8,  9,  7,  8,  9],\n",[312,95778,95779],{"class":314,"line":3499},[312,95780,95781],{"class":339},"       [10, 11, 12, 10, 11, 12]])\n",[312,95783,95784],{"class":314,"line":3504},[312,95785,95698],{"class":339},[312,95787,95788,95791,95793,95795,95797],{"class":314,"line":3533},[312,95789,95790],{"class":324},"np.tile(aa,(",[312,95792,2027],{"class":488},[312,95794,2323],{"class":324},[312,95796,2021],{"class":488},[312,95798,32293],{"class":324},[312,95800,95801],{"class":314,"line":3538},[312,95802,95334],{"class":318},[312,95804,95805],{"class":314,"line":3555},[312,95806,95698],{"class":339},[312,95808,95809],{"class":314,"line":3560},[312,95810,95811],{"class":339},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[312,95813,95814],{"class":314,"line":3565},[312,95815,95816],{"class":339},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[312,95818,95819],{"class":314,"line":3570},[312,95820,95821],{"class":339},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[312,95823,95824],{"class":314,"line":3584},[312,95825,95826],{"class":339},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[312,95828,95829],{"class":314,"line":3589},[312,95830,95831],{"class":339},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[312,95833,95834],{"class":314,"line":4382},[312,95835,95816],{"class":339},[312,95837,95838],{"class":314,"line":4396},[312,95839,95821],{"class":339},[312,95841,95842],{"class":314,"line":4404},[312,95843,95844],{"class":339},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[312,95846,95847],{"class":314,"line":4409},[312,95848,95698],{"class":339},[14,95850,95852],{"id":95851},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[24,95854,95855],{},"repeat()将数组中的每个元素重复若干次",[303,95857,95859],{"className":32174,"code":95858,"language":32176,"meta":308,"style":308},"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",[119,95860,95861,95877,95886,95890,95895,95919,95924,95933,95937,95942,95946,95951,95967,95971,95975,95980,95985,95990,95994,95999,96003,96008,96013,96017,96033,96037,96041,96046,96051,96056,96061],{"__ignoreMap":308},[312,95862,95863,95865,95867,95869,95871,95873,95875],{"class":314,"line":315},[312,95864,164],{"class":324},[312,95866,336],{"class":1436},[312,95868,94772],{"class":324},[312,95870,1433],{"class":488},[312,95872,2323],{"class":324},[312,95874,2264],{"class":488},[312,95876,1959],{"class":324},[312,95878,95879,95882,95884],{"class":314,"line":171},[312,95880,95881],{"class":324},"np.repeat(a,",[312,95883,2021],{"class":488},[312,95885,1959],{"class":324},[312,95887,95888],{"class":314,"line":274},[312,95889,95334],{"class":318},[312,95891,95892],{"class":314,"line":298},[312,95893,95894],{"class":318},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[312,95896,95897,95899,95901,95903,95905,95907,95909,95911,95913,95915,95917],{"class":314,"line":974},[312,95898,95076],{"class":324},[312,95900,336],{"class":1436},[312,95902,94772],{"class":324},[312,95904,1433],{"class":488},[312,95906,2323],{"class":324},[312,95908,2468],{"class":488},[312,95910,94777],{"class":324},[312,95912,2238],{"class":488},[312,95914,2323],{"class":324},[312,95916,2021],{"class":488},[312,95918,1959],{"class":324},[312,95920,95921],{"class":314,"line":980},[312,95922,95923],{"class":318},"#这个重复之后二维变成一维\n",[312,95925,95926,95929,95931],{"class":314,"line":997},[312,95927,95928],{"class":324},"np.repeat(aa,",[312,95930,2027],{"class":488},[312,95932,1959],{"class":324},[312,95934,95935],{"class":314,"line":1003},[312,95936,95698],{"class":339},[312,95938,95939],{"class":314,"line":1020},[312,95940,95941],{"class":339},"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",[312,95943,95944],{"class":314,"line":1026},[312,95945,95698],{"class":339},[312,95947,95948],{"class":314,"line":3418},[312,95949,95950],{"class":318},"#指定axis\n",[312,95952,95953,95955,95957,95959,95961,95963,95965],{"class":314,"line":3423},[312,95954,95928],{"class":324},[312,95956,2027],{"class":488},[312,95958,2323],{"class":324},[312,95960,49309],{"class":1579},[312,95962,336],{"class":1436},[312,95964,858],{"class":488},[312,95966,1959],{"class":324},[312,95968,95969],{"class":314,"line":3429},[312,95970,95334],{"class":318},[312,95972,95973],{"class":314,"line":3434},[312,95974,95698],{"class":339},[312,95976,95977],{"class":314,"line":3448},[312,95978,95979],{"class":339},"array([[ 1,  2,  3],\n",[312,95981,95982],{"class":314,"line":3453},[312,95983,95984],{"class":339},"       [ 1,  2,  3],\n",[312,95986,95987],{"class":314,"line":3459},[312,95988,95989],{"class":339},"       [ 4,  5,  6],\n",[312,95991,95992],{"class":314,"line":3480},[312,95993,95989],{"class":339},[312,95995,95996],{"class":314,"line":3485},[312,95997,95998],{"class":339},"       [ 7,  8,  9],\n",[312,96000,96001],{"class":314,"line":3499},[312,96002,95998],{"class":339},[312,96004,96005],{"class":314,"line":3504},[312,96006,96007],{"class":339},"       [10, 11, 12],\n",[312,96009,96010],{"class":314,"line":3533},[312,96011,96012],{"class":339},"       [10, 11, 12]])\n",[312,96014,96015],{"class":314,"line":3538},[312,96016,95698],{"class":339},[312,96018,96019,96021,96023,96025,96027,96029,96031],{"class":314,"line":3555},[312,96020,95928],{"class":324},[312,96022,2027],{"class":488},[312,96024,2323],{"class":324},[312,96026,49309],{"class":1579},[312,96028,336],{"class":1436},[312,96030,1433],{"class":488},[312,96032,1959],{"class":324},[312,96034,96035],{"class":314,"line":3560},[312,96036,95334],{"class":318},[312,96038,96039],{"class":314,"line":3565},[312,96040,95698],{"class":339},[312,96042,96043],{"class":314,"line":3570},[312,96044,96045],{"class":339},"array([[ 1,  1,  2,  2,  3,  3],\n",[312,96047,96048],{"class":314,"line":3584},[312,96049,96050],{"class":339},"       [ 4,  4,  5,  5,  6,  6],\n",[312,96052,96053],{"class":314,"line":3589},[312,96054,96055],{"class":339},"       [ 7,  7,  8,  8,  9,  9],\n",[312,96057,96058],{"class":314,"line":4382},[312,96059,96060],{"class":339},"       [10, 10, 11, 11, 12, 12]])\n",[312,96062,96063],{"class":314,"line":4396},[312,96064,95698],{"class":339},[14,96066,96068],{"id":96067},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[303,96070,96072],{"className":32174,"code":96071,"language":32176,"meta":308,"style":308},"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",[119,96073,96074,96090,96095,96107,96111,96116,96126,96130],{"__ignoreMap":308},[312,96075,96076,96078,96080,96082,96084,96086,96088],{"class":314,"line":315},[312,96077,164],{"class":324},[312,96079,336],{"class":1436},[312,96081,94772],{"class":324},[312,96083,1433],{"class":488},[312,96085,2323],{"class":324},[312,96087,2264],{"class":488},[312,96089,1959],{"class":324},[312,96091,96092],{"class":314,"line":171},[312,96093,96094],{"class":318},"#array([，2，3，4])\n",[312,96096,96097,96100,96102,96104],{"class":314,"line":274},[312,96098,96099],{"class":324},"np.roll(a,",[312,96101,2027],{"class":488},[312,96103,2374],{"class":324},[312,96105,96106],{"class":318},"#传正数向后调多少位，传负数向前调多少位\n",[312,96108,96109],{"class":314,"line":298},[312,96110,95334],{"class":318},[312,96112,96113],{"class":314,"line":974},[312,96114,96115],{"class":318},"#array([3, 4, 1, 2])\n",[312,96117,96118,96120,96122,96124],{"class":314,"line":980},[312,96119,96099],{"class":324},[312,96121,2477],{"class":1436},[312,96123,1433],{"class":488},[312,96125,1959],{"class":324},[312,96127,96128],{"class":314,"line":997},[312,96129,95334],{"class":318},[312,96131,96132],{"class":314,"line":1003},[312,96133,96134],{"class":318},"#array([2, 3, 4, 1])\n",[24,96136,96137],{},[19,96138],{"alt":308,"src":96139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,96141,96143],{"id":96142},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[24,96145,96146],{},"resize()重新调整数组的大小",[24,96148,96149],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[303,96151,96153],{"className":32174,"code":96152,"language":32176,"meta":308,"style":308},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[119,96154,96155,96160,96173],{"__ignoreMap":308},[312,96156,96157],{"class":314,"line":315},[312,96158,96159],{"class":318},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[312,96161,96162,96165,96167,96169,96171],{"class":314,"line":171},[312,96163,96164],{"class":324},"np.resize(aa,(",[312,96166,2027],{"class":488},[312,96168,2323],{"class":324},[312,96170,2289],{"class":488},[312,96172,32293],{"class":324},[312,96174,96175,96177,96179,96181,96183,96185],{"class":314,"line":274},[312,96176,96164],{"class":324},[312,96178,2027],{"class":488},[312,96180,2323],{"class":324},[312,96182,2365],{"class":488},[312,96184,84542],{"class":324},[312,96186,96187],{"class":318},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96189,96191],{"id":96190},"_125-placeput函数","12.5 place()\u002Fput()函数",[24,96193,96194],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[24,96196,96197],{},[19,96198],{"alt":308,"src":96199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96201,96203],{"id":96202},"_126-保存加载文件","12.6 保存加载文件",[24,96205,96206],{},"savetxt():将数据保存到txt文件中",[24,96208,96209],{},"loadtxt():从文件加载数据",[24,96211,96212],{},[19,96213],{"alt":308,"src":96214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96216,96218],{"id":96217},"_127-genfromtxt函数","12.7 genfromtxt()函数",[24,96220,96221],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96223,96225],{"id":96224},"_128-anyall函数","12.8 any()\u002Fall()函数",[24,96227,96228],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[24,96230,96231],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[24,96233,96234],{},[19,96235],{"alt":308,"src":96236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96238,96240],{"id":96239},"_129-where语句","12.9 where语句",[24,96242,96243],{},"np.where(条件,x,y)",[24,96245,96246],{},"如果条件为True,对应值为x,否则对应值为y",[24,96248,96249],{},[19,96250],{"alt":308,"src":96251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96253,96255],{"id":96254},"_1210-dot矩阵","12.10 dot()矩阵",[24,96257,96258],{},[19,96259],{"alt":308,"src":96260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1856,96262,96263],{},"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":308,"searchDepth":171,"depth":171,"links":96265},[96266,96267,96268,96269,96270,96271,96272,96273,96274,96275],{"id":95628,"depth":171,"text":95629},{"id":95851,"depth":171,"text":95852},{"id":96067,"depth":171,"text":96068},{"id":96142,"depth":171,"text":96143},{"id":96190,"depth":171,"text":96191},{"id":96202,"depth":171,"text":96203},{"id":96217,"depth":171,"text":96218},{"id":96224,"depth":171,"text":96225},{"id":96239,"depth":171,"text":96240},{"id":96254,"depth":171,"text":96255},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95620,"description":1878},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96282,"title":96283,"body":96284,"description":1878,"extension":1879,"meta":96637,"navigation":1881,"path":96638,"seo":96639,"stem":96640,"__hash__":96641},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96285,"toc":96635},[96286,96289,96292,96295,96298,96301,96366,96368,96632],[10,96287,96283],{"id":96288},"_13数组排序",[24,96290,96291],{},"排序主要用到的方法是np.sort和np.argsort",[24,96293,96294],{},"其中np.sort()对数组直接排序",[24,96296,96297],{},"而np.argsort()是返回排序后的原始索引",[24,96299,96300],{},"①一维数组",[303,96302,96304],{"className":32174,"code":96303,"language":32176,"meta":308,"style":308},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[119,96305,96306,96310,96350,96358],{"__ignoreMap":308},[312,96307,96308],{"class":314,"line":315},[312,96309,94875],{"class":318},[312,96311,96312,96314,96316,96318,96320,96322,96324,96326,96328,96330,96332,96334,96336,96338,96340,96342,96344,96346,96348],{"class":314,"line":171},[312,96313,164],{"class":324},[312,96315,336],{"class":1436},[312,96317,94794],{"class":324},[312,96319,2021],{"class":488},[312,96321,2323],{"class":324},[312,96323,2443],{"class":488},[312,96325,2323],{"class":324},[312,96327,2340],{"class":488},[312,96329,2323],{"class":324},[312,96331,2719],{"class":488},[312,96333,2323],{"class":324},[312,96335,2224],{"class":488},[312,96337,2323],{"class":324},[312,96339,2837],{"class":488},[312,96341,2323],{"class":324},[312,96343,2289],{"class":488},[312,96345,2323],{"class":324},[312,96347,2391],{"class":488},[312,96349,6462],{"class":324},[312,96351,96352,96355],{"class":314,"line":274},[312,96353,96354],{"class":324},"np.sort(a)",[312,96356,96357],{"class":318},"#升序排序\n",[312,96359,96360,96363],{"class":314,"line":298},[312,96361,96362],{"class":324},"np.argsort(a)",[312,96364,96365],{"class":318},"#按照元素大小来索引排序\n",[24,96367,95061],{},[303,96369,96371],{"className":32174,"code":96370,"language":32176,"meta":308,"style":308},"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",[119,96372,96373,96385,96411,96416,96420,96425,96430,96435,96440,96444,96452,96456,96461,96466,96471,96476,96480,96485,96498,96502,96507,96512,96517,96522,96526,96531,96543,96547,96551,96555,96559,96563,96567,96572,96587,96592,96601,96606,96610,96614,96619,96623,96628],{"__ignoreMap":308},[312,96374,96375,96378,96380,96382],{"class":314,"line":315},[312,96376,96377],{"class":324},"np.random.seed(",[312,96379,858],{"class":488},[312,96381,2374],{"class":324},[312,96383,96384],{"class":318},"#保证每次值一样\n",[312,96386,96387,96389,96391,96393,96395,96397,96399,96401,96403,96405,96407,96409],{"class":314,"line":171},[312,96388,95076],{"class":324},[312,96390,336],{"class":1436},[312,96392,94884],{"class":324},[312,96394,2256],{"class":488},[312,96396,2323],{"class":324},[312,96398,33291],{"class":1579},[312,96400,336],{"class":1436},[312,96402,1576],{"class":324},[312,96404,2238],{"class":488},[312,96406,2323],{"class":324},[312,96408,2289],{"class":488},[312,96410,32293],{"class":324},[312,96412,96413],{"class":314,"line":274},[312,96414,96415],{"class":318},"#原数组：\n",[312,96417,96418],{"class":314,"line":298},[312,96419,95698],{"class":339},[312,96421,96422],{"class":314,"line":974},[312,96423,96424],{"class":339},"array([[44, 47, 64, 67, 67,  9],\n",[312,96426,96427],{"class":314,"line":980},[312,96428,96429],{"class":339},"       [83, 21, 36, 87, 70, 88],\n",[312,96431,96432],{"class":314,"line":997},[312,96433,96434],{"class":339},"       [88, 12, 58, 65, 39, 87],\n",[312,96436,96437],{"class":314,"line":1003},[312,96438,96439],{"class":339},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[312,96441,96442],{"class":314,"line":1020},[312,96443,95698],{"class":339},[312,96445,96446,96449],{"class":314,"line":1026},[312,96447,96448],{"class":324},"np.sort(aa)",[312,96450,96451],{"class":318},"#每行进行了排序\n",[312,96453,96454],{"class":314,"line":3418},[312,96455,95698],{"class":339},[312,96457,96458],{"class":314,"line":3423},[312,96459,96460],{"class":339},"array([[ 9, 44, 47, 64, 67, 67],\n",[312,96462,96463],{"class":314,"line":3429},[312,96464,96465],{"class":339},"       [21, 36, 70, 83, 87, 88],\n",[312,96467,96468],{"class":314,"line":3434},[312,96469,96470],{"class":339},"       [12, 39, 58, 65, 87, 88],\n",[312,96472,96473],{"class":314,"line":3448},[312,96474,96475],{"class":339},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[312,96477,96478],{"class":314,"line":3453},[312,96479,95698],{"class":339},[312,96481,96482],{"class":314,"line":3459},[312,96483,96484],{"class":318},"#axis=0时\n",[312,96486,96487,96490,96492,96494,96496],{"class":314,"line":3480},[312,96488,96489],{"class":324},"np.sort(aa,",[312,96491,49309],{"class":1579},[312,96493,336],{"class":1436},[312,96495,858],{"class":488},[312,96497,1959],{"class":324},[312,96499,96500],{"class":314,"line":3485},[312,96501,95698],{"class":339},[312,96503,96504],{"class":314,"line":3499},[312,96505,96506],{"class":339},"array([[44, 12, 36, 37, 25,  9],\n",[312,96508,96509],{"class":314,"line":3504},[312,96510,96511],{"class":339},"       [46, 21, 58, 65, 39, 77],\n",[312,96513,96514],{"class":314,"line":3533},[312,96515,96516],{"class":339},"       [83, 47, 64, 67, 67, 87],\n",[312,96518,96519],{"class":314,"line":3538},[312,96520,96521],{"class":339},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[312,96523,96524],{"class":314,"line":3555},[312,96525,95698],{"class":339},[312,96527,96528],{"class":314,"line":3560},[312,96529,96530],{"class":318},"#axis=1时,为默认值\n",[312,96532,96533,96535,96537,96539,96541],{"class":314,"line":3565},[312,96534,96489],{"class":324},[312,96536,49309],{"class":1579},[312,96538,336],{"class":1436},[312,96540,1433],{"class":488},[312,96542,1959],{"class":324},[312,96544,96545],{"class":314,"line":3570},[312,96546,95698],{"class":339},[312,96548,96549],{"class":314,"line":3584},[312,96550,96460],{"class":339},[312,96552,96553],{"class":314,"line":3589},[312,96554,96465],{"class":339},[312,96556,96557],{"class":314,"line":4382},[312,96558,96470],{"class":339},[312,96560,96561],{"class":314,"line":4396},[312,96562,96475],{"class":339},[312,96564,96565],{"class":314,"line":4404},[312,96566,95698],{"class":339},[312,96568,96569],{"class":314,"line":4409},[312,96570,96571],{"class":318},"#按最后一列排序\n",[312,96573,96574,96576,96578,96581,96583,96585],{"class":314,"line":4415},[312,96575,2208],{"class":324},[312,96577,336],{"class":1436},[312,96579,96580],{"class":324},"aa[:,",[312,96582,2477],{"class":1436},[312,96584,1433],{"class":488},[312,96586,35041],{"class":324},[312,96588,96589],{"class":314,"line":4421},[312,96590,96591],{"class":318},"#获取最后一列排好序的索引\n",[312,96593,96594,96596,96598],{"class":314,"line":4426},[312,96595,75830],{"class":324},[312,96597,336],{"class":1436},[312,96599,96600],{"class":324},"np.argsort(b)\n",[312,96602,96603],{"class":314,"line":9751},[312,96604,96605],{"class":324},"aa[index]\n",[312,96607,96608],{"class":314,"line":9775},[312,96609,95698],{"class":339},[312,96611,96612],{"class":314,"line":9780},[312,96613,96424],{"class":339},[312,96615,96616],{"class":314,"line":9786},[312,96617,96618],{"class":339},"       [46, 88, 81, 37, 25, 77],\n",[312,96620,96621],{"class":314,"line":9813},[312,96622,96434],{"class":339},[312,96624,96625],{"class":314,"line":9818},[312,96626,96627],{"class":339},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[312,96629,96630],{"class":314,"line":9824},[312,96631,95698],{"class":339},[1856,96633,96634],{},"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":308,"searchDepth":171,"depth":171,"links":96636},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96283,"description":1878},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96643,"title":96644,"body":96645,"description":1878,"extension":1879,"meta":96675,"navigation":1881,"path":96676,"seo":96677,"stem":96678,"__hash__":96679},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96646,"toc":96673},[96647,96650,96653,96656,96659,96662,96665,96668],[10,96648,96644],{"id":96649},"_14广播机制",[24,96651,96652],{},"广播的规则：",[24,96654,96655],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[24,96657,96658],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[24,96660,96661],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[24,96663,96664],{},"3.如果没有维度形状为1，则会引发异常",[24,96666,96667],{},"也就是只有维度或者个数为1才可以进行广播操作",[24,96669,96670],{},[19,96671],{"alt":308,"src":96672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":308,"searchDepth":171,"depth":171,"links":96674},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96644,"description":1878},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96681,"title":96682,"body":96683,"description":1878,"extension":1879,"meta":96781,"navigation":1881,"path":96782,"seo":96783,"stem":96784,"__hash__":96785},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96684,"toc":96779},[96685,96688,96691,96776],[10,96686,96682],{"id":96687},"_15比较掩码",[24,96689,96690],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[303,96692,96694],{"className":32174,"code":96693,"language":32176,"meta":308,"style":308},"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",[119,96695,96696,96742,96753,96767,96771],{"__ignoreMap":308},[312,96697,96698,96700,96702,96705,96707,96709,96711,96713,96715,96717,96719,96721,96723,96725,96727,96729,96731,96733,96735,96737,96739],{"class":314,"line":315},[312,96699,164],{"class":324},[312,96701,336],{"class":1436},[312,96703,96704],{"class":324},"np.array([[",[312,96706,1433],{"class":488},[312,96708,2323],{"class":324},[312,96710,2027],{"class":488},[312,96712,2323],{"class":324},[312,96714,2021],{"class":488},[312,96716,49825],{"class":324},[312,96718,2417],{"class":488},[312,96720,2323],{"class":324},[312,96722,2443],{"class":488},[312,96724,2323],{"class":324},[312,96726,2468],{"class":488},[312,96728,49825],{"class":324},[312,96730,2669],{"class":488},[312,96732,2323],{"class":324},[312,96734,2694],{"class":488},[312,96736,2323],{"class":324},[312,96738,2719],{"class":488},[312,96740,96741],{"class":324},"]])\n",[312,96743,96744,96746,96748,96750],{"class":314,"line":171},[312,96745,164],{"class":324},[312,96747,325],{"class":1436},[312,96749,1546],{"class":488},[312,96751,96752],{"class":318},"#结果是一个由True,False组成的数组\n",[312,96754,96755,96758,96760,96762,96764],{"class":314,"line":274},[312,96756,96757],{"class":324},"a[a",[312,96759,325],{"class":1436},[312,96761,1546],{"class":488},[312,96763,2882],{"class":324},[312,96765,96766],{"class":318},"#小于20的元素会存到这个数组中\n",[312,96768,96769],{"class":314,"line":298},[312,96770,95334],{"class":318},[312,96772,96773],{"class":314,"line":974},[312,96774,96775],{"class":318},"#array([ 1,  2,  3, 11, 12, 13])\n",[1856,96777,96778],{},"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":308,"searchDepth":171,"depth":171,"links":96780},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96682,"description":1878},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96787,"title":96788,"body":96789,"description":1878,"extension":1879,"meta":96881,"navigation":1881,"path":96882,"seo":96883,"stem":96884,"__hash__":96885},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96790,"toc":96879},[96791,96794,96797,96800,96803,96806,96871,96876],[10,96792,96788],{"id":96793},"_16魔法命令time",[24,96795,96796],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[24,96798,96799],{},"%:行模式",[24,96801,96802],{},"%%:单元格模式",[24,96804,96805],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[303,96807,96809],{"className":32174,"code":96808,"language":32176,"meta":308,"style":308},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[119,96810,96811,96816,96823,96828,96837,96850,96854,96862],{"__ignoreMap":308},[312,96812,96813],{"class":314,"line":315},[312,96814,96815],{"class":318},"#程序执行时间\n",[312,96817,96818,96820],{"class":314,"line":171},[312,96819,32188],{"class":1436},[312,96821,96822],{"class":324}," time \n",[312,96824,96825],{"class":314,"line":274},[312,96826,96827],{"class":318},"#获取时间\n",[312,96829,96830,96833,96835],{"class":314,"line":298},[312,96831,96832],{"class":324},"start",[312,96834,336],{"class":1436},[312,96836,34213],{"class":324},[312,96838,96839,96842,96845,96847],{"class":314,"line":974},[312,96840,96841],{"class":324},"time.sleep(",[312,96843,96844],{"class":488},"0.4",[312,96846,2374],{"class":324},[312,96848,96849],{"class":318},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[312,96851,96852],{"class":314,"line":980},[312,96853,96827],{"class":318},[312,96855,96856,96858,96860],{"class":314,"line":997},[312,96857,47596],{"class":324},[312,96859,336],{"class":1436},[312,96861,34213],{"class":324},[312,96863,96864,96866,96868],{"class":314,"line":1003},[312,96865,47596],{"class":324},[312,96867,2477],{"class":1436},[312,96869,96870],{"class":324},"start\n",[24,96872,96873],{},[19,96874],{"alt":308,"src":96875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1856,96877,96878],{},"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":308,"searchDepth":171,"depth":171,"links":96880},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96788,"description":1878},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96887,"title":96888,"body":96889,"description":1878,"extension":1879,"meta":96924,"navigation":1881,"path":96925,"seo":96926,"stem":96927,"__hash__":96928},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96890,"toc":96922},[96891,96894,96897,96900,96903,96906,96909,96912,96917],[10,96892,96888],{"id":96893},"_17魔法命令timeit",[24,96895,96896],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[24,96898,96899],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[24,96901,96902],{},"单元格模式：",[24,96904,96905],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[24,96907,96908],{},"初始化语句执行次数由轮数来决定",[24,96910,96911],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[24,96913,96914],{},[19,96915],{"alt":308,"src":96916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[24,96918,96919],{},[19,96920],{"alt":308,"src":96921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":308,"searchDepth":171,"depth":171,"links":96923},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96888,"description":1878},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96930,"title":96931,"body":96932,"description":1878,"extension":1879,"meta":96950,"navigation":1881,"path":96951,"seo":96952,"stem":96953,"__hash__":96954},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96933,"toc":96948},[96934,96937,96940,96943],[10,96935,96931],{"id":96936},"_18魔法命令writefile和run",[24,96938,96939],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[24,96941,96942],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[24,96944,96945],{},[19,96946],{"alt":308,"src":96947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":308,"searchDepth":171,"depth":171,"links":96949},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96931,"description":1878},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96956,"title":96957,"body":96958,"description":1878,"extension":1879,"meta":97011,"navigation":1881,"path":97012,"seo":97013,"stem":97014,"__hash__":97015},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96959,"toc":97009},[96960,96963,96966,96968,96971,96974,96979,96982,96985,96988,96991,96994,96997,97000,97003,97006],[10,96961,96957],{"id":96962},"_19魔法命令memit",[24,96964,96965],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[24,96967,26395],{},[24,96969,96970],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[24,96972,96973],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[24,96975,96976],{},[19,96977],{"alt":308,"src":96978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[24,96980,96981],{},"补充：",[24,96983,96984],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[24,96986,96987],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[24,96989,96990],{},"解决方法：",[24,96992,96993],{},"1.cmd",[24,96995,96996],{},"2.依次输入以下代码：",[24,96998,96999],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[24,97001,97002],{},"pip install --upgrade ipython",[24,97004,97005],{},"#升级 memory_profiler 和 setuptools",[24,97007,97008],{},"pip install --upgrade memory_profiler setuptools",{"title":308,"searchDepth":171,"depth":171,"links":97010},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96957,"description":1878},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":97017,"title":97018,"body":97019,"description":1878,"extension":1879,"meta":98665,"navigation":1881,"path":98666,"seo":98667,"stem":98668,"__hash__":98669},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":97020,"toc":98635},[97021,97024,97028,97032,97093,97096,97101,97105,97110,97115,97120,97125,97128,97133,97137,97141,97174,97177,97180,97183,97235,97238,97274,97277,97319,97323,97344,97346,97383,97385,97390,97392,97397,97401,97404,97432,97436,97440,97493,97497,97589,97593,97597,97600,97605,97609,97634,97639,97643,97646,97649,97652,97655,97658,97661,97664,97676,97680,97684,97687,97719,97722,97745,97748,97774,97777,97803,97806,97840,97843,97905,97909,97912,97916,97919,97945,97948,97951,97956,97959,98028,98030,98035,98096,98099,98110,98116,98121,98125,98128,98141,98145,98160,98162,98185,98187,98213,98216,98219,98222,98270,98272,98277,98281,98285,98312,98316,98343,98346,98351,98356,98446,98450,98508,98513,98516,98519,98561,98565,98621,98626,98629,98632],[10,97022,97018],{"id":97023},"_2创建数组",[14,97025,97027],{"id":97026},"_21-array函数创建数组","2.1 array()函数创建数组",[69,97029,97031],{"id":97030},"_221-函数语句","2.2.1 函数语句",[303,97033,97035],{"className":32174,"code":97034,"language":32176,"meta":308,"style":308},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[119,97036,97037],{"__ignoreMap":308},[312,97038,97039,97042,97045,97047,97049,97051,97053,97055,97058,97060,97063,97065,97068,97070,97072,97074,97077,97079,97082,97084,97087,97089,97091],{"class":314,"line":315},[312,97040,97041],{"class":324},"numpy.array(",[312,97043,97044],{"class":488},"object",[312,97046,733],{"class":324},[312,97048,95270],{"class":1579},[312,97050,15366],{"class":1436},[312,97052,40728],{"class":488},[312,97054,733],{"class":324},[312,97056,97057],{"class":1579},"copy",[312,97059,15366],{"class":1436},[312,97061,97062],{"class":488}," True",[312,97064,733],{"class":324},[312,97066,97067],{"class":1579},"order",[312,97069,15366],{"class":1436},[312,97071,40728],{"class":488},[312,97073,733],{"class":324},[312,97075,97076],{"class":1579},"subok",[312,97078,15366],{"class":1436},[312,97080,97081],{"class":488}," False",[312,97083,733],{"class":324},[312,97085,97086],{"class":1579},"ndmin",[312,97088,15366],{"class":1436},[312,97090,5898],{"class":488},[312,97092,1959],{"class":324},[24,97094,97095],{},"参数：",[24,97097,97098],{},[19,97099],{"alt":308,"src":97100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[69,97102,97104],{"id":97103},"_222-实例","2.2.2 实例",[24,97106,97107],{},[19,97108],{"alt":308,"src":97109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[24,97111,97112],{},[19,97113],{"alt":308,"src":97114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[24,97116,97117],{},[19,97118],{"alt":308,"src":97119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[24,97121,97122],{},[19,97123],{"alt":308,"src":97124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[24,97126,97127],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[24,97129,97130],{},[19,97131],{"alt":308,"src":97132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,97134,97136],{"id":97135},"_22-随机数创建数组","2.2 随机数创建数组",[69,97138,97140],{"id":97139},"_221-random语句","2.2.1 random语句",[303,97142,97144],{"className":32174,"code":97143,"language":32176,"meta":308,"style":308},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[119,97145,97146,97151,97156,97164,97169],{"__ignoreMap":308},[312,97147,97148],{"class":314,"line":315},[312,97149,97150],{"class":318},"#random.random()\n",[312,97152,97153],{"class":314,"line":171},[312,97154,97155],{"class":318},"#确定随机种子,就是每次运行结果是相同的\n",[312,97157,97158,97160,97162],{"class":314,"line":274},[312,97159,96377],{"class":324},[312,97161,858],{"class":488},[312,97163,1959],{"class":324},[312,97165,97166],{"class":314,"line":298},[312,97167,97168],{"class":324},"np.random.random()\n",[312,97170,97171],{"class":314,"line":974},[312,97172,97173],{"class":318},"#生成一个随机的数目\n",[24,97175,97176],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[24,97178,97179],{},"可以指定数组形状 size",[24,97181,97182],{},"①生成一维数组",[303,97184,97186],{"className":32174,"code":97185,"language":32176,"meta":308,"style":308},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[119,97187,97188,97193,97206,97211,97227],{"__ignoreMap":308},[312,97189,97190],{"class":314,"line":315},[312,97191,97192],{"class":318},"#random.random(size())\n",[312,97194,97195,97198,97200,97202,97204],{"class":314,"line":171},[312,97196,97197],{"class":324},"np.random.random(",[312,97199,33291],{"class":1579},[312,97201,336],{"class":1436},[312,97203,2264],{"class":488},[312,97205,1959],{"class":324},[312,97207,97208],{"class":314,"line":274},[312,97209,97210],{"class":318},"#生成一位的五个元素\n",[312,97212,97213,97215,97217,97219,97221,97223,97225],{"class":314,"line":298},[312,97214,164],{"class":324},[312,97216,336],{"class":1436},[312,97218,97197],{"class":324},[312,97220,33291],{"class":1579},[312,97222,336],{"class":1436},[312,97224,2238],{"class":488},[312,97226,1959],{"class":324},[312,97228,97229,97232],{"class":314,"line":974},[312,97230,97231],{"class":324},"a.shape ",[312,97233,97234],{"class":318},"#输出数组形状\n",[24,97236,97237],{},"②生成二维数组",[303,97239,97241],{"className":32174,"code":97240,"language":32176,"meta":308,"style":308},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[119,97242,97243,97247,97269],{"__ignoreMap":308},[312,97244,97245],{"class":314,"line":315},[312,97246,95071],{"class":318},[312,97248,97249,97251,97253,97255,97257,97259,97261,97263,97265,97267],{"class":314,"line":171},[312,97250,95076],{"class":324},[312,97252,336],{"class":1436},[312,97254,97197],{"class":324},[312,97256,33291],{"class":1579},[312,97258,336],{"class":1436},[312,97260,1576],{"class":324},[312,97262,2238],{"class":488},[312,97264,2323],{"class":324},[312,97266,2264],{"class":488},[312,97268,32293],{"class":324},[312,97270,97271],{"class":314,"line":274},[312,97272,97273],{"class":318},"#生成四行五列的数组\n",[24,97275,97276],{},"③生成三维数组",[303,97278,97280],{"className":32174,"code":97279,"language":32176,"meta":308,"style":308},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[119,97281,97282,97287,97314],{"__ignoreMap":308},[312,97283,97284],{"class":314,"line":315},[312,97285,97286],{"class":318},"#三维数组\n",[312,97288,97289,97292,97294,97296,97298,97300,97302,97304,97306,97308,97310,97312],{"class":314,"line":171},[312,97290,97291],{"class":324},"aaa",[312,97293,336],{"class":1436},[312,97295,97197],{"class":324},[312,97297,33291],{"class":1579},[312,97299,336],{"class":1436},[312,97301,1576],{"class":324},[312,97303,2027],{"class":488},[312,97305,2323],{"class":324},[312,97307,2021],{"class":488},[312,97309,2323],{"class":324},[312,97311,2238],{"class":488},[312,97313,32293],{"class":324},[312,97315,97316],{"class":314,"line":274},[312,97317,97318],{"class":324},"aaa.shape\n",[69,97320,97322],{"id":97321},"_222-randint语句","2.2.2 randint语句",[303,97324,97326],{"className":32174,"code":97325,"language":32176,"meta":308,"style":308},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[119,97327,97328,97333],{"__ignoreMap":308},[312,97329,97330],{"class":314,"line":315},[312,97331,97332],{"class":318},"#生成随机的整数 random.randint(low,high,size)\n",[312,97334,97335,97337,97339,97341],{"class":314,"line":171},[312,97336,94884],{"class":324},[312,97338,2264],{"class":488},[312,97340,1583],{"class":324},[312,97342,97343],{"class":318},"#0~5中的随机一个数\n",[24,97345,97182],{},[303,97347,97349],{"className":32174,"code":97348,"language":32176,"meta":308,"style":308},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[119,97350,97351,97356,97378],{"__ignoreMap":308},[312,97352,97353],{"class":314,"line":315},[312,97354,97355],{"class":318},"#一维\n",[312,97357,97358,97360,97362,97364,97366,97368,97370,97372,97374,97376],{"class":314,"line":171},[312,97359,94884],{"class":324},[312,97361,1433],{"class":488},[312,97363,2323],{"class":324},[312,97365,2417],{"class":488},[312,97367,2323],{"class":324},[312,97369,33291],{"class":1579},[312,97371,336],{"class":1436},[312,97373,1576],{"class":324},[312,97375,2391],{"class":488},[312,97377,32293],{"class":324},[312,97379,97380],{"class":314,"line":274},[312,97381,97382],{"class":318},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[24,97384,97237],{},[24,97386,97387],{},[19,97388],{"alt":308,"src":97389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[24,97391,97276],{},[24,97393,97394],{},[19,97395],{"alt":308,"src":97396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[69,97398,97400],{"id":97399},"_222-rand语句","2.2.2 rand语句",[24,97402,97403],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[303,97405,97407],{"className":32174,"code":97406,"language":32176,"meta":308,"style":308},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[119,97408,97409,97422,97427],{"__ignoreMap":308},[312,97410,97411,97414,97416,97418,97420],{"class":314,"line":315},[312,97412,97413],{"class":324},"np.random.rand(",[312,97415,2256],{"class":488},[312,97417,2323],{"class":324},[312,97419,2391],{"class":488},[312,97421,1959],{"class":324},[312,97423,97424],{"class":314,"line":171},[312,97425,97426],{"class":318},"#第一个参数100：行数，表示有100个样本\n",[312,97428,97429],{"class":314,"line":274},[312,97430,97431],{"class":318},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,97433,97435],{"id":97434},"_23-arange创建数组","2.3 arange()创建数组",[69,97437,97439],{"id":97438},"_231-函数语句","2.3.1 函数语句",[303,97441,97443],{"className":32174,"code":97442,"language":32176,"meta":308,"style":308},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[119,97444,97445,97459,97464,97469,97474,97479,97484,97489],{"__ignoreMap":308},[312,97446,97447,97450,97452,97454,97457],{"class":314,"line":315},[312,97448,97449],{"class":324},"numpy.arange([start,] stop[, step], ",[312,97451,95270],{"class":1579},[312,97453,336],{"class":1436},[312,97455,97456],{"class":488},"None",[312,97458,1959],{"class":324},[312,97460,97461],{"class":314,"line":171},[312,97462,97463],{"class":318},"#参数\n",[312,97465,97466],{"class":314,"line":274},[312,97467,97468],{"class":339},"\"\"\"\n",[312,97470,97471],{"class":314,"line":298},[312,97472,97473],{"class":339},"start:起始值，可选，默认从 0 开始。\n",[312,97475,97476],{"class":314,"line":974},[312,97477,97478],{"class":339},"stop:结束值（不包含该值）。\n",[312,97480,97481],{"class":314,"line":980},[312,97482,97483],{"class":339},"step:步长，可选，默认是 1。可以为浮点数。\n",[312,97485,97486],{"class":314,"line":997},[312,97487,97488],{"class":339},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[312,97490,97491],{"class":314,"line":1003},[312,97492,97468],{"class":339},[69,97494,97496],{"id":97495},"_232-实例","2.3.2 实例",[303,97498,97500],{"className":32174,"code":97499,"language":32176,"meta":308,"style":308},"#创建一维数组\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",[119,97501,97502,97506,97530,97535,97540,97544,97567,97571,97575,97580,97585],{"__ignoreMap":308},[312,97503,97504],{"class":314,"line":315},[312,97505,94875],{"class":318},[312,97507,97508,97510,97512,97514,97516,97518,97520,97522,97524,97526,97528],{"class":314,"line":171},[312,97509,94772],{"class":324},[312,97511,1433],{"class":488},[312,97513,2323],{"class":324},[312,97515,2669],{"class":488},[312,97517,2323],{"class":324},[312,97519,1433],{"class":488},[312,97521,2323],{"class":324},[312,97523,95270],{"class":1579},[312,97525,336],{"class":1436},[312,97527,1956],{"class":488},[312,97529,1959],{"class":324},[312,97531,97532],{"class":314,"line":274},[312,97533,97534],{"class":318},"#输出结果：\n",[312,97536,97537],{"class":314,"line":298},[312,97538,97539],{"class":318},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[312,97541,97542],{"class":314,"line":974},[312,97543,95717],{"class":318},[312,97545,97546,97549,97551,97553,97555,97558,97560,97562,97564],{"class":314,"line":980},[312,97547,97548],{"class":324},"np.array([np.arange(",[312,97550,1433],{"class":488},[312,97552,2323],{"class":324},[312,97554,2238],{"class":488},[312,97556,97557],{"class":324},"),np.arange(",[312,97559,2238],{"class":488},[312,97561,2323],{"class":324},[312,97563,2314],{"class":488},[312,97565,97566],{"class":324},")])\n",[312,97568,97569],{"class":314,"line":997},[312,97570,95334],{"class":318},[312,97572,97573],{"class":314,"line":1003},[312,97574,97468],{"class":339},[312,97576,97577],{"class":314,"line":1020},[312,97578,97579],{"class":339},"array([[1, 2, 3],\n",[312,97581,97582],{"class":314,"line":1026},[312,97583,97584],{"class":339},"       [4, 5, 6]])\n",[312,97586,97587],{"class":314,"line":3418},[312,97588,97468],{"class":339},[14,97590,97592],{"id":97591},"_24-生态分布","2.4 生态分布",[69,97594,97596],{"id":97595},"_241-标准正态分布","2.4.1 标准正态分布",[24,97598,97599],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[24,97601,97602],{},[19,97603],{"alt":308,"src":97604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[69,97606,97608],{"id":97607},"_242-常规正态分布","2.4.2 常规正态分布",[303,97610,97612],{"className":32174,"code":97611,"language":32176,"meta":308,"style":308},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[119,97613,97614,97619,97624,97629],{"__ignoreMap":308},[312,97615,97616],{"class":314,"line":315},[312,97617,97618],{"class":324},"random.normal(loc,scale,size)也可以生成正态分布\n",[312,97620,97621],{"class":314,"line":171},[312,97622,97623],{"class":318},"#loc:期望\n",[312,97625,97626],{"class":314,"line":274},[312,97627,97628],{"class":318},"#scale:方差\n",[312,97630,97631],{"class":314,"line":298},[312,97632,97633],{"class":318},"#size:用于确定是几维的数列\n",[24,97635,97636],{},[19,97637],{"alt":308,"src":97638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97640,97642],{"id":97641},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[24,97644,97645],{},"ndim:秩，维度个数",[24,97647,97648],{},"size:数组元素的个数",[24,97650,97651],{},"shape:数组的形状",[24,97653,97654],{},"dtype:数组元素的类型",[24,97656,97657],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[24,97659,97660],{},"他们都是属性，通过数组.属性的形式来确定",[24,97662,97663],{},"如果需要输出多个可以通过以下方式：",[303,97665,97667],{"className":32174,"code":97666,"language":32176,"meta":308,"style":308},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[119,97668,97669],{"__ignoreMap":308},[312,97670,97671,97673],{"class":314,"line":315},[312,97672,32211],{"class":488},[312,97674,97675],{"class":324},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,97677,97679],{"id":97678},"_26-其他方式创建数组","2.6 其他方式创建数组",[69,97681,97683],{"id":97682},"_261-zeros创建数组","2.6.1 zeros()创建数组",[24,97685,97686],{},"①创建一维数组",[303,97688,97690],{"className":32174,"code":97689,"language":32176,"meta":308,"style":308},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[119,97691,97692,97701,97705,97710,97715],{"__ignoreMap":308},[312,97693,97694,97697,97699],{"class":314,"line":315},[312,97695,97696],{"class":324},"np.zeros(",[312,97698,2391],{"class":488},[312,97700,1959],{"class":324},[312,97702,97703],{"class":314,"line":171},[312,97704,97468],{"class":339},[312,97706,97707],{"class":314,"line":274},[312,97708,97709],{"class":339},"输出结果：\n",[312,97711,97712],{"class":314,"line":298},[312,97713,97714],{"class":339},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[312,97716,97717],{"class":314,"line":974},[312,97718,97468],{"class":339},[24,97720,97721],{},"上方代码等价于：",[303,97723,97725],{"className":32174,"code":97724,"language":32176,"meta":308,"style":308},"np.zeros(shape=(10))#创建10个元素的0数组\n",[119,97726,97727],{"__ignoreMap":308},[312,97728,97729,97731,97734,97736,97738,97740,97742],{"class":314,"line":315},[312,97730,97696],{"class":324},[312,97732,97733],{"class":1579},"shape",[312,97735,336],{"class":1436},[312,97737,1576],{"class":324},[312,97739,2391],{"class":488},[312,97741,84542],{"class":324},[312,97743,97744],{"class":318},"#创建10个元素的0数组\n",[24,97746,97747],{},"也可以指定类型",[303,97749,97751],{"className":32174,"code":97750,"language":32176,"meta":308,"style":308},"#指定类型\nnp.zeros(5,dtype=int)\n",[119,97752,97753,97758],{"__ignoreMap":308},[312,97754,97755],{"class":314,"line":315},[312,97756,97757],{"class":318},"#指定类型\n",[312,97759,97760,97762,97764,97766,97768,97770,97772],{"class":314,"line":171},[312,97761,97696],{"class":324},[312,97763,2264],{"class":488},[312,97765,2323],{"class":324},[312,97767,95270],{"class":1579},[312,97769,336],{"class":1436},[312,97771,1956],{"class":488},[312,97773,1959],{"class":324},[24,97775,97776],{},"②创建二维数组",[303,97778,97780],{"className":32174,"code":97779,"language":32176,"meta":308,"style":308},"np.zeros((3,4),dtype=int)\n",[119,97781,97782],{"__ignoreMap":308},[312,97783,97784,97787,97789,97791,97793,97795,97797,97799,97801],{"class":314,"line":315},[312,97785,97786],{"class":324},"np.zeros((",[312,97788,2021],{"class":488},[312,97790,2323],{"class":324},[312,97792,2238],{"class":488},[312,97794,44051],{"class":324},[312,97796,95270],{"class":1579},[312,97798,336],{"class":1436},[312,97800,1956],{"class":488},[312,97802,1959],{"class":324},[24,97804,97805],{},"③创建三维数组",[303,97807,97809],{"className":32174,"code":97808,"language":32176,"meta":308,"style":308},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[119,97810,97811,97816],{"__ignoreMap":308},[312,97812,97813],{"class":314,"line":315},[312,97814,97815],{"class":318},"#创建三维数组\n",[312,97817,97818,97820,97822,97824,97826,97828,97830,97832,97834,97836,97838],{"class":314,"line":171},[312,97819,97786],{"class":324},[312,97821,2021],{"class":488},[312,97823,2323],{"class":324},[312,97825,2238],{"class":488},[312,97827,2323],{"class":324},[312,97829,2264],{"class":488},[312,97831,44051],{"class":324},[312,97833,95270],{"class":1579},[312,97835,336],{"class":1436},[312,97837,1956],{"class":488},[312,97839,1959],{"class":324},[24,97841,97842],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[303,97844,97846],{"className":32174,"code":97845,"language":32176,"meta":308,"style":308},"#使用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",[119,97847,97848,97853,97868,97873,97878,97900],{"__ignoreMap":308},[312,97849,97850],{"class":314,"line":315},[312,97851,97852],{"class":318},"#使用zeros_like将创建的一维数组变成全0的数组\n",[312,97854,97855,97857,97859,97861,97863,97865],{"class":314,"line":171},[312,97856,164],{"class":324},[312,97858,336],{"class":1436},[312,97860,94772],{"class":324},[312,97862,2238],{"class":488},[312,97864,2374],{"class":324},[312,97866,97867],{"class":318},"#这个得到的结果：一维数组0，1，2，3\n",[312,97869,97870],{"class":314,"line":274},[312,97871,97872],{"class":324},"np.zeros_like(a)\n",[312,97874,97875],{"class":314,"line":298},[312,97876,97877],{"class":318},"#使用zeros_like将创建的二维数组变成全0的数组\n",[312,97879,97880,97882,97884,97886,97888,97890,97892,97894,97896,97898],{"class":314,"line":974},[312,97881,95076],{"class":324},[312,97883,336],{"class":1436},[312,97885,97197],{"class":324},[312,97887,33291],{"class":1579},[312,97889,336],{"class":1436},[312,97891,1576],{"class":324},[312,97893,2238],{"class":488},[312,97895,2323],{"class":324},[312,97897,2264],{"class":488},[312,97899,32293],{"class":324},[312,97901,97902],{"class":314,"line":980},[312,97903,97904],{"class":324},"np.zeros_like(aa)\n",[69,97906,97908],{"id":97907},"_262-ones创建数组","2.6.2 ones()创建数组",[24,97910,97911],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[69,97913,97915],{"id":97914},"_263-empty创建数组","2.6.3 empty()创建数组",[24,97917,97918],{},"①empty()用法",[303,97920,97922],{"className":32174,"code":97921,"language":32176,"meta":308,"style":308},"numpy.empty(shape,dtype=float,order='c')\n",[119,97923,97924],{"__ignoreMap":308},[312,97925,97926,97929,97931,97933,97935,97937,97939,97941,97943],{"class":314,"line":315},[312,97927,97928],{"class":324},"numpy.empty(shape,",[312,97930,95270],{"class":1579},[312,97932,336],{"class":1436},[312,97934,1992],{"class":488},[312,97936,2323],{"class":324},[312,97938,97067],{"class":1579},[312,97940,336],{"class":1436},[312,97942,77800],{"class":339},[312,97944,1959],{"class":324},[24,97946,97947],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[24,97949,97950],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[24,97952,97953],{},[19,97954],{"alt":308,"src":97955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[24,97957,97958],{},"②empty()用法",[303,97960,97962],{"className":32174,"code":97961,"language":32176,"meta":308,"style":308},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[119,97963,97964,97985,97997,98018,98023],{"__ignoreMap":308},[312,97965,97966,97968,97970,97973,97975,97977,97979,97981,97983],{"class":314,"line":315},[312,97967,2789],{"class":324},[312,97969,336],{"class":1436},[312,97971,97972],{"class":324},"np.empty(",[312,97974,2391],{"class":488},[312,97976,2323],{"class":324},[312,97978,95270],{"class":1579},[312,97980,336],{"class":1436},[312,97982,1956],{"class":488},[312,97984,1959],{"class":324},[312,97986,97987,97989,97991,97993,97995],{"class":314,"line":171},[312,97988,2764],{"class":324},[312,97990,336],{"class":1436},[312,97992,94772],{"class":324},[312,97994,2264],{"class":488},[312,97996,1959],{"class":324},[312,97998,97999,98002,98004,98007,98009,98011,98014,98016],{"class":314,"line":274},[312,98000,98001],{"class":324},"np.add(",[312,98003,2027],{"class":488},[312,98005,98006],{"class":324},",x,",[312,98008,94824],{"class":1579},[312,98010,336],{"class":1436},[312,98012,98013],{"class":324},"y[:",[312,98015,2264],{"class":488},[312,98017,6462],{"class":324},[312,98019,98020],{"class":314,"line":298},[312,98021,98022],{"class":318},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[312,98024,98025],{"class":314,"line":974},[312,98026,98027],{"class":324},"y\n",[24,98029,13317],{},[24,98031,98032],{},[19,98033],{"alt":308,"src":98034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[303,98036,98038],{"className":32174,"code":98037,"language":32176,"meta":308,"style":308},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[119,98039,98040,98056,98076,98091],{"__ignoreMap":308},[312,98041,98042,98044,98046,98048,98050,98052,98054],{"class":314,"line":315},[312,98043,2764],{"class":324},[312,98045,336],{"class":1436},[312,98047,94772],{"class":324},[312,98049,1433],{"class":488},[312,98051,2323],{"class":324},[312,98053,2289],{"class":488},[312,98055,1959],{"class":324},[312,98057,98058,98060,98062,98064,98066,98068,98070,98072,98074],{"class":314,"line":171},[312,98059,2789],{"class":324},[312,98061,336],{"class":1436},[312,98063,97972],{"class":324},[312,98065,2264],{"class":488},[312,98067,2323],{"class":324},[312,98069,95270],{"class":1579},[312,98071,336],{"class":1436},[312,98073,1956],{"class":488},[312,98075,1959],{"class":324},[312,98077,98078,98081,98083,98085,98087,98089],{"class":314,"line":274},[312,98079,98080],{"class":324},"np.add(x,",[312,98082,2027],{"class":488},[312,98084,2323],{"class":324},[312,98086,94824],{"class":1579},[312,98088,336],{"class":1436},[312,98090,95219],{"class":324},[312,98092,98093],{"class":314,"line":298},[312,98094,98095],{"class":318},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[24,98097,98098],{},"③empty_like()",[24,98100,98101],{},[27,98102,98103,98104,98109],{},"创建一个",[27,98105,98106],{},[27,98107,98108],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[24,98111,98112,98115],{},[119,98113,98114],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[24,98117,98118],{},[19,98119],{"alt":308,"src":98120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[69,98122,98124],{"id":98123},"_264-用法","2.6.4 ？？用法",[24,98126,98127],{},"当想查看一个函数的参数时，可以通过？？来实现",[303,98129,98131],{"className":32174,"code":98130,"language":32176,"meta":308,"style":308},"np.full??\n",[119,98132,98133],{"__ignoreMap":308},[312,98134,98135,98138],{"class":314,"line":315},[312,98136,98137],{"class":324},"np.full",[312,98139,98140],{"class":79175},"??\n",[69,98142,98144],{"id":98143},"_265-full创建数组","2.6.5 full()创建数组",[303,98146,98148],{"className":32174,"code":98147,"language":32176,"meta":308,"style":308},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[119,98149,98150,98155],{"__ignoreMap":308},[312,98151,98152],{"class":314,"line":315},[312,98153,98154],{"class":324},"full(shape,fill_value)\n",[312,98156,98157],{"class":314,"line":171},[312,98158,98159],{"class":324},"创建全为某个指定值的数组\n",[24,98161,96300],{},[303,98163,98165],{"className":32174,"code":98164,"language":32176,"meta":308,"style":308},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[119,98166,98167,98172],{"__ignoreMap":308},[312,98168,98169],{"class":314,"line":315},[312,98170,98171],{"class":318},"#创建一个一维数组,以20进行填充\n",[312,98173,98174,98177,98179,98181,98183],{"class":314,"line":171},[312,98175,98176],{"class":324},"np.full(",[312,98178,2391],{"class":488},[312,98180,2323],{"class":324},[312,98182,1546],{"class":488},[312,98184,1959],{"class":324},[24,98186,95061],{},[303,98188,98190],{"className":32174,"code":98189,"language":32176,"meta":308,"style":308},"#创建二维数组\nnp.full((3,5),11)\n",[119,98191,98192,98196],{"__ignoreMap":308},[312,98193,98194],{"class":314,"line":315},[312,98195,95717],{"class":318},[312,98197,98198,98201,98203,98205,98207,98209,98211],{"class":314,"line":171},[312,98199,98200],{"class":324},"np.full((",[312,98202,2021],{"class":488},[312,98204,2323],{"class":324},[312,98206,2264],{"class":488},[312,98208,44051],{"class":324},[312,98210,2417],{"class":488},[312,98212,1959],{"class":324},[24,98214,98215],{},"③full_like用法",[24,98217,98218],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[24,98220,98221],{},"这里是指定填充而已",[303,98223,98225],{"className":32174,"code":98224,"language":32176,"meta":308,"style":308},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[119,98226,98227,98232,98256,98261],{"__ignoreMap":308},[312,98228,98229],{"class":314,"line":315},[312,98230,98231],{"class":318},"#创建一个指定形状数组\n",[312,98233,98234,98236,98238,98240,98242,98244,98246,98248,98250,98252,98254],{"class":314,"line":171},[312,98235,164],{"class":324},[312,98237,336],{"class":1436},[312,98239,94772],{"class":324},[312,98241,1433],{"class":488},[312,98243,2323],{"class":324},[312,98245,2270],{"class":488},[312,98247,94777],{"class":324},[312,98249,2238],{"class":488},[312,98251,2323],{"class":324},[312,98253,2365],{"class":488},[312,98255,1959],{"class":324},[312,98257,98258],{"class":314,"line":274},[312,98259,98260],{"class":318},"#进行指定填充\n",[312,98262,98263,98266,98268],{"class":314,"line":298},[312,98264,98265],{"class":324},"np.full_like(a,",[312,98267,2391],{"class":488},[312,98269,1959],{"class":324},[24,98271,13317],{},[24,98273,98274],{},[19,98275],{"alt":308,"src":98276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[69,98278,98280],{"id":98279},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[23796,98282,98284],{"id":98283},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[303,98286,98288],{"className":32174,"code":98287,"language":32176,"meta":308,"style":308},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[119,98289,98290,98307],{"__ignoreMap":308},[312,98291,98292,98295,98297,98299,98301,98303,98305],{"class":314,"line":315},[312,98293,98294],{"class":324},"np.eye(",[312,98296,2238],{"class":488},[312,98298,2323],{"class":324},[312,98300,95270],{"class":1579},[312,98302,336],{"class":1436},[312,98304,1956],{"class":488},[312,98306,1959],{"class":324},[312,98308,98309],{"class":314,"line":171},[312,98310,98311],{"class":318},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[23796,98313,98315],{"id":98314},"_2662-法2identity","2.6.6.2 法2：identity()",[303,98317,98319],{"className":32174,"code":98318,"language":32176,"meta":308,"style":308},"#identity()\nnp.identity(5,dtype=int)\n",[119,98320,98321,98326],{"__ignoreMap":308},[312,98322,98323],{"class":314,"line":315},[312,98324,98325],{"class":318},"#identity()\n",[312,98327,98328,98331,98333,98335,98337,98339,98341],{"class":314,"line":171},[312,98329,98330],{"class":324},"np.identity(",[312,98332,2264],{"class":488},[312,98334,2323],{"class":324},[312,98336,95270],{"class":1579},[312,98338,336],{"class":1436},[312,98340,1956],{"class":488},[312,98342,1959],{"class":324},[24,98344,98345],{},"两个函数是有区别的",[24,98347,98348],{},[19,98349],{"alt":308,"src":98350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[24,98352,98353],{},[19,98354],{"alt":308,"src":98355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[303,98357,98359],{"className":32174,"code":98358,"language":32176,"meta":308,"style":308},"# 创建一个 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",[119,98360,98361,98366,98378,98383,98388,98393,98398,98402,98407,98427,98431,98436,98441],{"__ignoreMap":308},[312,98362,98363],{"class":314,"line":315},[312,98364,98365],{"class":318},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[312,98367,98368,98370,98372,98374,98376],{"class":314,"line":171},[312,98369,98294],{"class":324},[312,98371,2021],{"class":488},[312,98373,733],{"class":324},[312,98375,2238],{"class":488},[312,98377,1959],{"class":324},[312,98379,98380],{"class":314,"line":274},[312,98381,98382],{"class":318},"# 输出:\n",[312,98384,98385],{"class":314,"line":298},[312,98386,98387],{"class":318},"# [[1. 0. 0. 0.]\n",[312,98389,98390],{"class":314,"line":974},[312,98391,98392],{"class":318},"#  [0. 1. 0. 0.]\n",[312,98394,98395],{"class":314,"line":980},[312,98396,98397],{"class":318},"#  [0. 0. 1. 0.]]\n",[312,98399,98400],{"class":314,"line":997},[312,98401,4205],{"emptyLinePlaceholder":1881},[312,98403,98404],{"class":314,"line":1003},[312,98405,98406],{"class":318},"# 对角线向上偏移1\n",[312,98408,98409,98411,98413,98415,98417,98419,98421,98423,98425],{"class":314,"line":1020},[312,98410,98294],{"class":324},[312,98412,2021],{"class":488},[312,98414,733],{"class":324},[312,98416,2238],{"class":488},[312,98418,733],{"class":324},[312,98420,2438],{"class":1579},[312,98422,336],{"class":1436},[312,98424,1433],{"class":488},[312,98426,1959],{"class":324},[312,98428,98429],{"class":314,"line":1026},[312,98430,98382],{"class":318},[312,98432,98433],{"class":314,"line":3418},[312,98434,98435],{"class":318},"# [[0. 1. 0. 0.]\n",[312,98437,98438],{"class":314,"line":3423},[312,98439,98440],{"class":318},"#  [0. 0. 1. 0.]\n",[312,98442,98443],{"class":314,"line":3429},[312,98444,98445],{"class":318},"#  [0. 0. 0. 1.]]\n",[69,98447,98449],{"id":98448},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[303,98451,98453],{"className":32174,"code":98452,"language":32176,"meta":308,"style":308},"#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",[119,98454,98455,98460,98464,98469,98474,98479,98484,98489,98494,98499,98504],{"__ignoreMap":308},[312,98456,98457],{"class":314,"line":315},[312,98458,98459],{"class":318},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[312,98461,98462],{"class":314,"line":171},[312,98463,97468],{"class":339},[312,98465,98466],{"class":314,"line":274},[312,98467,98468],{"class":339},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[312,98470,98471],{"class":314,"line":298},[312,98472,98473],{"class":339},"参数介绍：\n",[312,98475,98476],{"class":314,"line":974},[312,98477,98478],{"class":339},"start：序列的起始值\n",[312,98480,98481],{"class":314,"line":980},[312,98482,98483],{"class":339},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[312,98485,98486],{"class":314,"line":997},[312,98487,98488],{"class":339},"num：要生长的等步长的样本数量，默认为50\n",[312,98490,98491],{"class":314,"line":1003},[312,98492,98493],{"class":339},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[312,98495,98496],{"class":314,"line":1020},[312,98497,98498],{"class":339},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[312,98500,98501],{"class":314,"line":1026},[312,98502,98503],{"class":339},"dtype：ndarry的数据类型\n",[312,98505,98506],{"class":314,"line":3418},[312,98507,97468],{"class":339},[24,98509,98510],{},[19,98511],{"alt":308,"src":98512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[24,98514,98515],{},"这里num=是可以省略的",[24,98517,98518],{},"也就是下方两行代码结果是一模一样的",[303,98520,98522],{"className":32174,"code":98521,"language":32176,"meta":308,"style":308},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[119,98523,98524,98541],{"__ignoreMap":308},[312,98525,98526,98529,98531,98533,98535,98537,98539],{"class":314,"line":315},[312,98527,98528],{"class":324},"np.linspace(",[312,98530,1433],{"class":488},[312,98532,2323],{"class":324},[312,98534,2264],{"class":488},[312,98536,2323],{"class":324},[312,98538,2264],{"class":488},[312,98540,1959],{"class":324},[312,98542,98543,98545,98547,98549,98551,98553,98555,98557,98559],{"class":314,"line":171},[312,98544,98528],{"class":324},[312,98546,1433],{"class":488},[312,98548,2323],{"class":324},[312,98550,2264],{"class":488},[312,98552,2323],{"class":324},[312,98554,3471],{"class":1579},[312,98556,336],{"class":1436},[312,98558,2264],{"class":488},[312,98560,1959],{"class":324},[69,98562,98564],{"id":98563},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[303,98566,98568],{"className":32174,"code":98567,"language":32176,"meta":308,"style":308},"#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",[119,98569,98570,98575,98579,98584,98589,98594,98599,98603,98608,98613,98617],{"__ignoreMap":308},[312,98571,98572],{"class":314,"line":315},[312,98573,98574],{"class":318},"#logspace函数用于创建一个等比数列，格式如下：\n",[312,98576,98577],{"class":314,"line":171},[312,98578,97468],{"class":339},[312,98580,98581],{"class":314,"line":274},[312,98582,98583],{"class":339},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[312,98585,98586],{"class":314,"line":298},[312,98587,98588],{"class":339},"参数为：\n",[312,98590,98591],{"class":314,"line":974},[312,98592,98593],{"class":339},"start:序列的起始位置为：base**start\n",[312,98595,98596],{"class":314,"line":980},[312,98597,98598],{"class":339},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[312,98600,98601],{"class":314,"line":997},[312,98602,98488],{"class":339},[312,98604,98605],{"class":314,"line":1003},[312,98606,98607],{"class":339},"endpoint：是否包含 stop 这个值，默认是 True\n",[312,98609,98610],{"class":314,"line":1020},[312,98611,98612],{"class":339},"base：对数的底数，默认是 10（常见对数）\n",[312,98614,98615],{"class":314,"line":1026},[312,98616,98503],{"class":339},[312,98618,98619],{"class":314,"line":3418},[312,98620,97468],{"class":339},[24,98622,98623],{},[19,98624],{"alt":308,"src":98625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[24,98627,98628],{},"logspace()函数中的num参数也是可以不写num=的",[24,98630,98631],{},"endpoint是不可以省略的",[1856,98633,98634],{},"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":308,"searchDepth":171,"depth":171,"links":98636},[98637,98641,98646,98650,98654,98655],{"id":97026,"depth":171,"text":97027,"children":98638},[98639,98640],{"id":97030,"depth":274,"text":97031},{"id":97103,"depth":274,"text":97104},{"id":97135,"depth":171,"text":97136,"children":98642},[98643,98644,98645],{"id":97139,"depth":274,"text":97140},{"id":97321,"depth":274,"text":97322},{"id":97399,"depth":274,"text":97400},{"id":97434,"depth":171,"text":97435,"children":98647},[98648,98649],{"id":97438,"depth":274,"text":97439},{"id":97495,"depth":274,"text":97496},{"id":97591,"depth":171,"text":97592,"children":98651},[98652,98653],{"id":97595,"depth":274,"text":97596},{"id":97607,"depth":274,"text":97608},{"id":97641,"depth":171,"text":97642},{"id":97678,"depth":171,"text":97679,"children":98656},[98657,98658,98659,98660,98661,98662,98663,98664],{"id":97682,"depth":274,"text":97683},{"id":97907,"depth":274,"text":97908},{"id":97914,"depth":274,"text":97915},{"id":98123,"depth":274,"text":98124},{"id":98143,"depth":274,"text":98144},{"id":98279,"depth":274,"text":98280},{"id":98448,"depth":274,"text":98449},{"id":98563,"depth":274,"text":98564},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":97018,"description":1878},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98671,"title":98672,"body":98673,"description":1878,"extension":1879,"meta":98766,"navigation":1881,"path":98767,"seo":98768,"stem":98769,"__hash__":98770},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98674,"toc":98764},[98675,98678,98681,98684,98687,98690,98693,98696,98699,98702,98705,98708,98710,98713,98716,98721,98724,98727,98761],[10,98676,98672],{"id":98677},"_20魔法命令mprun",[24,98679,98680],{},"逐行分析数据内存的使用情况",[24,98682,98683],{},"语法格式：",[24,98685,98686],{},"%mprun -f 模块名.函数名 模块名.函数名()",[24,98688,98689],{},"分析结果列如下：",[24,98691,98692],{},"Line行号",[24,98694,98695],{},"Mem usage内存使用大小",[24,98697,98698],{},"increment内存增量",[24,98700,98701],{},"Line content代码内容",[24,98703,98704],{},"补充说明：",[24,98706,98707],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[24,98709,96973],{},[24,98711,98712],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[24,98714,98715],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[24,98717,98718],{},[19,98719],{"alt":308,"src":98720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[24,98722,98723],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[24,98725,98726],{},"这时候需要重新加载模块",[303,98728,98730],{"className":32174,"code":98729,"language":32176,"meta":308,"style":308},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[119,98731,98732,98737,98744,98749],{"__ignoreMap":308},[312,98733,98734],{"class":314,"line":315},[312,98735,98736],{"class":318},"#重新加载模块\n",[312,98738,98739,98741],{"class":314,"line":171},[312,98740,32188],{"class":1436},[312,98742,98743],{"class":324}," importlib\n",[312,98745,98746],{"class":314,"line":274},[312,98747,98748],{"class":324},"importlib.reload(mprun_test)\n",[312,98750,98751,98753,98756,98758],{"class":314,"line":298},[312,98752,2273],{"class":1436},[312,98754,98755],{"class":324},"mprun ",[312,98757,2477],{"class":1436},[312,98759,98760],{"class":324},"f mprun_test.fun_test mprun_test.fun_test()\n",[1856,98762,98763],{},"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":308,"searchDepth":171,"depth":171,"links":98765},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98672,"description":1878},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98772,"title":98773,"body":98774,"description":1878,"extension":1879,"meta":98791,"navigation":1881,"path":98792,"seo":98793,"stem":98794,"__hash__":98795},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98775,"toc":98789},[98776,98779,98784],[10,98777,98773],{"id":98778},"_3一维数组的索引和切片",[24,98780,98781],{},[19,98782],{"alt":308,"src":98783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[24,98785,98786],{},[19,98787],{"alt":308,"src":98788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":308,"searchDepth":171,"depth":171,"links":98790},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98773,"description":1878},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98797,"title":98798,"body":98799,"description":1878,"extension":1879,"meta":99282,"navigation":1881,"path":99283,"seo":99284,"stem":99285,"__hash__":99286},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98800,"toc":99280},[98801,98804,98807,98812,98845,98848,98886,98889,98923,98926,99031,99034,99071,99074,99175,99178,99229,99232,99274,99277],[10,98802,98798],{"id":98803},"_4二维数组的索引与切片",[24,98805,98806],{},"①获取指定单个元素",[24,98808,98809],{},[19,98810],{"alt":308,"src":98811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[303,98813,98815],{"className":32174,"code":98814,"language":32176,"meta":308,"style":308},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[119,98816,98817,98822,98827,98832],{"__ignoreMap":308},[312,98818,98819],{"class":314,"line":315},[312,98820,98821],{"class":318},"#获取元素9\n",[312,98823,98824],{"class":314,"line":171},[312,98825,98826],{"class":318},"#先获取所在行，再获取所在列\n",[312,98828,98829],{"class":314,"line":274},[312,98830,98831],{"class":318},"#数组[行索引号，列索引号]\n",[312,98833,98834,98837,98839,98841,98843],{"class":314,"line":298},[312,98835,98836],{"class":324},"a[",[312,98838,1433],{"class":488},[312,98840,2323],{"class":324},[312,98842,2027],{"class":488},[312,98844,35041],{"class":324},[24,98846,98847],{},"②获取整行元素",[303,98849,98851],{"className":32174,"code":98850,"language":32176,"meta":308,"style":308},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[119,98852,98853,98858,98863,98871,98876],{"__ignoreMap":308},[312,98854,98855],{"class":314,"line":315},[312,98856,98857],{"class":318},"#获取整行 数组[行索引号]\n",[312,98859,98860],{"class":314,"line":171},[312,98861,98862],{"class":318},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[312,98864,98865,98867,98869],{"class":314,"line":274},[312,98866,98836],{"class":324},[312,98868,2027],{"class":488},[312,98870,35041],{"class":324},[312,98872,98873],{"class":314,"line":298},[312,98874,98875],{"class":318},"#也可以负索引获取一行\n",[312,98877,98878,98880,98882,98884],{"class":314,"line":974},[312,98879,98836],{"class":324},[312,98881,2477],{"class":1436},[312,98883,1433],{"class":488},[312,98885,35041],{"class":324},[24,98887,98888],{},"③获取整列元素",[303,98890,98892],{"className":32174,"code":98891,"language":32176,"meta":308,"style":308},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[119,98893,98894,98899,98908,98913],{"__ignoreMap":308},[312,98895,98896],{"class":314,"line":315},[312,98897,98898],{"class":318},"#获取整列 数组名[:,列索引]\n",[312,98900,98901,98904,98906],{"class":314,"line":171},[312,98902,98903],{"class":324},"a[:,",[312,98905,2027],{"class":488},[312,98907,35041],{"class":324},[312,98909,98910],{"class":314,"line":274},[312,98911,98912],{"class":318},"#也可以负索引获取一列\n",[312,98914,98915,98917,98919,98921],{"class":314,"line":298},[312,98916,98903],{"class":324},[312,98918,2477],{"class":1436},[312,98920,1433],{"class":488},[312,98922,35041],{"class":324},[24,98924,98925],{},"④部分行部分列的元素",[303,98927,98929],{"className":32174,"code":98928,"language":32176,"meta":308,"style":308},"#部分行部分列 数组名[行切片，列切片]\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",[119,98930,98931,98936,98946,98950,98954,98959,98964,98968,98980,98984,98988,98993,98998,99003,99008,99012,99017],{"__ignoreMap":308},[312,98932,98933],{"class":314,"line":315},[312,98934,98935],{"class":318},"#部分行部分列 数组名[行切片，列切片]\n",[312,98937,98938,98941,98943],{"class":314,"line":171},[312,98939,98940],{"class":324},"a[:",[312,98942,2027],{"class":488},[312,98944,98945],{"class":324},",:]\n",[312,98947,98948],{"class":314,"line":274},[312,98949,95334],{"class":318},[312,98951,98952],{"class":314,"line":298},[312,98953,95698],{"class":339},[312,98955,98956],{"class":314,"line":974},[312,98957,98958],{"class":339},"array([[ 1,  2,  3,  4,  5,  6],\n",[312,98960,98961],{"class":314,"line":980},[312,98962,98963],{"class":339},"       [ 7,  8,  9, 10, 11, 12]])\n",[312,98965,98966],{"class":314,"line":997},[312,98967,95698],{"class":339},[312,98969,98970,98972,98974,98976,98978],{"class":314,"line":1003},[312,98971,98903],{"class":324},[312,98973,1433],{"class":488},[312,98975,2803],{"class":324},[312,98977,2238],{"class":488},[312,98979,35041],{"class":324},[312,98981,98982],{"class":314,"line":1020},[312,98983,95334],{"class":318},[312,98985,98986],{"class":314,"line":1026},[312,98987,95698],{"class":339},[312,98989,98990],{"class":314,"line":3418},[312,98991,98992],{"class":339},"array([[ 2,  3,  4],\n",[312,98994,98995],{"class":314,"line":3423},[312,98996,98997],{"class":339},"       [ 8,  9, 10],\n",[312,98999,99000],{"class":314,"line":3429},[312,99001,99002],{"class":339},"       [14, 15, 16],\n",[312,99004,99005],{"class":314,"line":3434},[312,99006,99007],{"class":339},"       [20, 21, 22]])\n",[312,99009,99010],{"class":314,"line":3448},[312,99011,95698],{"class":339},[312,99013,99014],{"class":314,"line":3453},[312,99015,99016],{"class":318},"#对列行同时进行切片，使用了step参数\n",[312,99018,99019,99022,99024,99027,99029],{"class":314,"line":3459},[312,99020,99021],{"class":324},"a[::",[312,99023,2027],{"class":488},[312,99025,99026],{"class":324},",::",[312,99028,2027],{"class":488},[312,99030,35041],{"class":324},[24,99032,99033],{},"⑤同时获取两个元素",[303,99035,99037],{"className":32174,"code":99036,"language":32176,"meta":308,"style":308},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[119,99038,99039,99044,99049],{"__ignoreMap":308},[312,99040,99041],{"class":314,"line":315},[312,99042,99043],{"class":318},"#同时获取第三行第二列，第四行第一列\n",[312,99045,99046],{"class":314,"line":171},[312,99047,99048],{"class":318},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[312,99050,99051,99054,99056,99058,99060,99062,99064,99066,99068],{"class":314,"line":274},[312,99052,99053],{"class":324},"a[(",[312,99055,2027],{"class":488},[312,99057,2323],{"class":324},[312,99059,2021],{"class":488},[312,99061,44042],{"class":324},[312,99063,1433],{"class":488},[312,99065,2323],{"class":324},[312,99067,858],{"class":488},[312,99069,99070],{"class":324},")]\n",[24,99072,99073],{},"⑥切片，对行进行反向获取",[303,99075,99077],{"className":32174,"code":99076,"language":32176,"meta":308,"style":308},"#切片 对所有行进行反向获取\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",[119,99078,99079,99084,99094,99098,99102,99107,99112,99117,99122,99126,99131,99147,99151,99156,99161,99166,99171],{"__ignoreMap":308},[312,99080,99081],{"class":314,"line":315},[312,99082,99083],{"class":318},"#切片 对所有行进行反向获取\n",[312,99085,99086,99088,99090,99092],{"class":314,"line":171},[312,99087,99021],{"class":324},[312,99089,2477],{"class":1436},[312,99091,1433],{"class":488},[312,99093,35041],{"class":324},[312,99095,99096],{"class":314,"line":274},[312,99097,95334],{"class":318},[312,99099,99100],{"class":314,"line":298},[312,99101,95698],{"class":339},[312,99103,99104],{"class":314,"line":974},[312,99105,99106],{"class":339},"array([[19, 20, 21, 22, 23, 24],\n",[312,99108,99109],{"class":314,"line":980},[312,99110,99111],{"class":339},"       [13, 14, 15, 16, 17, 18],\n",[312,99113,99114],{"class":314,"line":997},[312,99115,99116],{"class":339},"       [ 7,  8,  9, 10, 11, 12],\n",[312,99118,99119],{"class":314,"line":1003},[312,99120,99121],{"class":339},"       [ 1,  2,  3,  4,  5,  6]])\n",[312,99123,99124],{"class":314,"line":1020},[312,99125,95698],{"class":339},[312,99127,99128],{"class":314,"line":1026},[312,99129,99130],{"class":318},"#对行列都进行反向切片获取\n",[312,99132,99133,99135,99137,99139,99141,99143,99145],{"class":314,"line":3418},[312,99134,99021],{"class":324},[312,99136,2477],{"class":1436},[312,99138,1433],{"class":488},[312,99140,99026],{"class":324},[312,99142,2477],{"class":1436},[312,99144,1433],{"class":488},[312,99146,35041],{"class":324},[312,99148,99149],{"class":314,"line":3423},[312,99150,95698],{"class":339},[312,99152,99153],{"class":314,"line":3429},[312,99154,99155],{"class":339},"array([[24, 23, 22, 21, 20, 19],\n",[312,99157,99158],{"class":314,"line":3434},[312,99159,99160],{"class":339},"       [18, 17, 16, 15, 14, 13],\n",[312,99162,99163],{"class":314,"line":3448},[312,99164,99165],{"class":339},"       [12, 11, 10,  9,  8,  7],\n",[312,99167,99168],{"class":314,"line":3453},[312,99169,99170],{"class":339},"       [ 6,  5,  4,  3,  2,  1]])\n",[312,99172,99173],{"class":314,"line":3459},[312,99174,95698],{"class":339},[24,99176,99177],{},"⑦修改元素",[303,99179,99181],{"className":32174,"code":99180,"language":32176,"meta":308,"style":308},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[119,99182,99183,99188,99206,99211],{"__ignoreMap":308},[312,99184,99185],{"class":314,"line":315},[312,99186,99187],{"class":318},"#获取前两行和前两列\n",[312,99189,99190,99193,99195,99197,99199,99202,99204],{"class":314,"line":171},[312,99191,99192],{"class":324},"sub_a",[312,99194,336],{"class":1436},[312,99196,98940],{"class":324},[312,99198,2027],{"class":488},[312,99200,99201],{"class":324},",:",[312,99203,2027],{"class":488},[312,99205,35041],{"class":324},[312,99207,99208],{"class":314,"line":274},[312,99209,99210],{"class":318},"#修改sub_a第一个元素的值\n",[312,99212,99213,99216,99218,99220,99222,99224,99226],{"class":314,"line":298},[312,99214,99215],{"class":324},"sub_a[",[312,99217,858],{"class":488},[312,99219,2323],{"class":324},[312,99221,858],{"class":488},[312,99223,2882],{"class":324},[312,99225,336],{"class":1436},[312,99227,99228],{"class":488},"100\n",[24,99230,99231],{},"⑧数组复制copy()",[303,99233,99235],{"className":32174,"code":99234,"language":32176,"meta":308,"style":308},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[119,99236,99237,99242,99252,99257],{"__ignoreMap":308},[312,99238,99239],{"class":314,"line":315},[312,99240,99241],{"class":318},"#数组复制\n",[312,99243,99244,99247,99249],{"class":314,"line":171},[312,99245,99246],{"class":324},"copy_a",[312,99248,336],{"class":1436},[312,99250,99251],{"class":324},"np.copy(sub_a)\n",[312,99253,99254],{"class":314,"line":274},[312,99255,99256],{"class":318},"#修改copy_a后不影响原数组\n",[312,99258,99259,99262,99264,99266,99268,99270,99272],{"class":314,"line":298},[312,99260,99261],{"class":324},"copy_a[",[312,99263,858],{"class":488},[312,99265,2323],{"class":324},[312,99267,858],{"class":488},[312,99269,2882],{"class":324},[312,99271,336],{"class":1436},[312,99273,99228],{"class":488},[24,99275,99276],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1856,99278,99279],{},"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":308,"searchDepth":171,"depth":171,"links":99281},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98798,"description":1878},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99288,"title":99289,"body":99290,"description":1878,"extension":1879,"meta":99782,"navigation":1881,"path":99783,"seo":99784,"stem":99785,"__hash__":99786},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99291,"toc":99774},[99292,99295,99299,99302,99305,99358,99361,99386,99389,99408,99428,99431,99447,99451,99497,99501,99543,99547,99550,99553,99556,99559,99562,99624,99684,99688,99691,99748,99752,99757,99766,99771],[10,99293,99289],{"id":99294},"_5改变数组的维度",[14,99296,99298],{"id":99297},"_51-使用reshape","5.1 使用reshape()",[24,99300,99301],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[24,99303,99304],{},"①一维数组转换为二维数组",[303,99306,99308],{"className":32174,"code":99307,"language":32176,"meta":308,"style":308},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[119,99309,99310,99326,99331,99336,99341],{"__ignoreMap":308},[312,99311,99312,99314,99316,99318,99320,99322,99324],{"class":314,"line":315},[312,99313,164],{"class":324},[312,99315,336],{"class":1436},[312,99317,94772],{"class":324},[312,99319,1433],{"class":488},[312,99321,2323],{"class":324},[312,99323,2468],{"class":488},[312,99325,1959],{"class":324},[312,99327,99328],{"class":314,"line":171},[312,99329,99330],{"class":318},"#将一维数组进行转换\n",[312,99332,99333],{"class":314,"line":274},[312,99334,99335],{"class":318},"#注意点：元素个数不可以变\n",[312,99337,99338],{"class":314,"line":298},[312,99339,99340],{"class":318},"#转换维度要保持一致，不一致就异常！！！\n",[312,99342,99343,99345,99347,99350,99352,99354,99356],{"class":314,"line":974},[312,99344,95076],{"class":324},[312,99346,336],{"class":1436},[312,99348,99349],{"class":324},"a.reshape(",[312,99351,2027],{"class":488},[312,99353,2323],{"class":324},[312,99355,2289],{"class":488},[312,99357,1959],{"class":324},[24,99359,99360],{},"②一维数组转换为三维数组",[303,99362,99364],{"className":32174,"code":99363,"language":32176,"meta":308,"style":308},"aaa=a.reshape(2,3,2)\n",[119,99365,99366],{"__ignoreMap":308},[312,99367,99368,99370,99372,99374,99376,99378,99380,99382,99384],{"class":314,"line":315},[312,99369,97291],{"class":324},[312,99371,336],{"class":1436},[312,99373,99349],{"class":324},[312,99375,2027],{"class":488},[312,99377,2323],{"class":324},[312,99379,2021],{"class":488},[312,99381,2323],{"class":324},[312,99383,2027],{"class":488},[312,99385,1959],{"class":324},[24,99387,99388],{},"③二维数组转化为一维数组",[303,99390,99392],{"className":32174,"code":99391,"language":32176,"meta":308,"style":308},"#知道元素个数：\naa.reshape(12)\n",[119,99393,99394,99399],{"__ignoreMap":308},[312,99395,99396],{"class":314,"line":315},[312,99397,99398],{"class":318},"#知道元素个数：\n",[312,99400,99401,99404,99406],{"class":314,"line":171},[312,99402,99403],{"class":324},"aa.reshape(",[312,99405,2443],{"class":488},[312,99407,1959],{"class":324},[303,99409,99411],{"className":32174,"code":99410,"language":32176,"meta":308,"style":308},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[119,99412,99413,99418],{"__ignoreMap":308},[312,99414,99415],{"class":314,"line":315},[312,99416,99417],{"class":318},"#不知道元素个数，参数传递-1\n",[312,99419,99420,99422,99424,99426],{"class":314,"line":171},[312,99421,99403],{"class":324},[312,99423,2477],{"class":1436},[312,99425,1433],{"class":488},[312,99427,1959],{"class":324},[24,99429,99430],{},"④三维数组转换为一维数组",[303,99432,99434],{"className":32174,"code":99433,"language":32176,"meta":308,"style":308},"aaa.reshape(-1)\n",[119,99435,99436],{"__ignoreMap":308},[312,99437,99438,99441,99443,99445],{"class":314,"line":315},[312,99439,99440],{"class":324},"aaa.reshape(",[312,99442,2477],{"class":1436},[312,99444,1433],{"class":488},[312,99446,1959],{"class":324},[14,99448,99450],{"id":99449},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[303,99452,99454],{"className":32174,"code":99453,"language":32176,"meta":308,"style":308},"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",[119,99455,99456,99483,99488,99492],{"__ignoreMap":308},[312,99457,99458,99460,99462,99464,99466,99468,99470,99472,99474,99476,99478,99480],{"class":314,"line":315},[312,99459,95076],{"class":324},[312,99461,336],{"class":1436},[312,99463,94772],{"class":324},[312,99465,1433],{"class":488},[312,99467,2323],{"class":324},[312,99469,2468],{"class":488},[312,99471,94777],{"class":324},[312,99473,2027],{"class":488},[312,99475,2323],{"class":324},[312,99477,2289],{"class":488},[312,99479,2374],{"class":324},[312,99481,99482],{"class":318},"#转换为2行6列的数组\n",[312,99484,99485],{"class":314,"line":171},[312,99486,99487],{"class":324},"aa.revel()\n",[312,99489,99490],{"class":314,"line":274},[312,99491,95334],{"class":318},[312,99493,99494],{"class":314,"line":298},[312,99495,99496],{"class":318},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99498,99500],{"id":99499},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[303,99502,99504],{"className":32174,"code":99503,"language":32176,"meta":308,"style":308},"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",[119,99505,99506,99530,99535,99539],{"__ignoreMap":308},[312,99507,99508,99510,99512,99514,99516,99518,99520,99522,99524,99526,99528],{"class":314,"line":315},[312,99509,95076],{"class":324},[312,99511,336],{"class":1436},[312,99513,94772],{"class":324},[312,99515,1433],{"class":488},[312,99517,2323],{"class":324},[312,99519,2468],{"class":488},[312,99521,94777],{"class":324},[312,99523,2027],{"class":488},[312,99525,2323],{"class":324},[312,99527,2289],{"class":488},[312,99529,1959],{"class":324},[312,99531,99532],{"class":314,"line":171},[312,99533,99534],{"class":324},"aa.flatten()\n",[312,99536,99537],{"class":314,"line":274},[312,99538,95334],{"class":318},[312,99540,99541],{"class":314,"line":298},[312,99542,99496],{"class":318},[14,99544,99546],{"id":99545},"_54-使用resize","5.4 使用resize()",[24,99548,99549],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[24,99551,99552],{},"通过resize方法可以改变数组的维度",[24,99554,99555],{},"#resize修改数组维度",[24,99557,99558],{},"#以元组的形式指定形状",[24,99560,99561],{},"#改变的是原数组",[303,99563,99565],{"className":32174,"code":99564,"language":32176,"meta":308,"style":308},"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",[119,99566,99567,99583,99603,99616,99620],{"__ignoreMap":308},[312,99568,99569,99571,99573,99575,99577,99579,99581],{"class":314,"line":315},[312,99570,164],{"class":324},[312,99572,336],{"class":1436},[312,99574,94772],{"class":324},[312,99576,1433],{"class":488},[312,99578,2323],{"class":324},[312,99580,2468],{"class":488},[312,99582,1959],{"class":324},[312,99584,99585,99588,99590,99592,99594,99596,99598,99600],{"class":314,"line":171},[312,99586,99587],{"class":324},"a.shape",[312,99589,336],{"class":1436},[312,99591,1576],{"class":324},[312,99593,2027],{"class":488},[312,99595,2323],{"class":324},[312,99597,2289],{"class":488},[312,99599,2374],{"class":324},[312,99601,99602],{"class":318},"#改变了原数组\n",[312,99604,99605,99607,99609,99612,99614],{"class":314,"line":274},[312,99606,164],{"class":324},[312,99608,336],{"class":1436},[312,99610,99611],{"class":324},"resize((",[312,99613,2443],{"class":488},[312,99615,32293],{"class":324},[312,99617,99618],{"class":314,"line":298},[312,99619,95334],{"class":318},[312,99621,99622],{"class":314,"line":974},[312,99623,99496],{"class":318},[303,99625,99627],{"className":32174,"code":99626,"language":32176,"meta":308,"style":308},"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",[119,99628,99629,99642,99646,99650,99655,99660,99665,99670,99675,99680],{"__ignoreMap":308},[312,99630,99631,99634,99636,99638,99640],{"class":314,"line":315},[312,99632,99633],{"class":324},"a.resize((",[312,99635,2289],{"class":488},[312,99637,2323],{"class":324},[312,99639,2027],{"class":488},[312,99641,32293],{"class":324},[312,99643,99644],{"class":314,"line":171},[312,99645,95334],{"class":318},[312,99647,99648],{"class":314,"line":274},[312,99649,95698],{"class":339},[312,99651,99652],{"class":314,"line":298},[312,99653,99654],{"class":339},"array([[ 1,  2],\n",[312,99656,99657],{"class":314,"line":974},[312,99658,99659],{"class":339},"       [ 3,  4],\n",[312,99661,99662],{"class":314,"line":980},[312,99663,99664],{"class":339},"       [ 5,  6],\n",[312,99666,99667],{"class":314,"line":997},[312,99668,99669],{"class":339},"       [ 7,  8],\n",[312,99671,99672],{"class":314,"line":1003},[312,99673,99674],{"class":339},"       [ 9, 10],\n",[312,99676,99677],{"class":314,"line":1020},[312,99678,99679],{"class":339},"       [11, 12]])\n",[312,99681,99682],{"class":314,"line":1026},[312,99683,95698],{"class":339},[14,99685,99687],{"id":99686},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[24,99689,99690],{},"改变了原数组",[303,99692,99694],{"className":32174,"code":99693,"language":32176,"meta":308,"style":308},"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",[119,99695,99696,99712,99728,99732,99736,99740,99744],{"__ignoreMap":308},[312,99697,99698,99700,99702,99704,99706,99708,99710],{"class":314,"line":315},[312,99699,164],{"class":324},[312,99701,336],{"class":1436},[312,99703,94772],{"class":324},[312,99705,1433],{"class":488},[312,99707,2323],{"class":324},[312,99709,2468],{"class":488},[312,99711,1959],{"class":324},[312,99713,99714,99716,99718,99720,99722,99724,99726],{"class":314,"line":171},[312,99715,99587],{"class":324},[312,99717,336],{"class":1436},[312,99719,1576],{"class":324},[312,99721,2027],{"class":488},[312,99723,2323],{"class":324},[312,99725,2289],{"class":488},[312,99727,1959],{"class":324},[312,99729,99730],{"class":314,"line":274},[312,99731,95334],{"class":318},[312,99733,99734],{"class":314,"line":298},[312,99735,95698],{"class":339},[312,99737,99738],{"class":314,"line":974},[312,99739,98958],{"class":339},[312,99741,99742],{"class":314,"line":980},[312,99743,98963],{"class":339},[312,99745,99746],{"class":314,"line":997},[312,99747,95698],{"class":339},[14,99749,99751],{"id":99750},"_56-重要比较","5.6 重要比较：",[24,99753,99754],{},[19,99755],{"alt":308,"src":99756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[24,99758,99759,99760,99762,99763,99765],{},"口诀：NumPy 函数要么用 ",[119,99761,97733],{},"，要么用 ",[119,99764,33291],{},"，创建结构用 shape，造数据用 size",[24,99767,99768],{},[19,99769],{"alt":308,"src":99770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1856,99772,99773],{},"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":308,"searchDepth":171,"depth":171,"links":99775},[99776,99777,99778,99779,99780,99781],{"id":99297,"depth":171,"text":99298},{"id":99449,"depth":171,"text":99450},{"id":99499,"depth":171,"text":99500},{"id":99545,"depth":171,"text":99546},{"id":99686,"depth":171,"text":99687},{"id":99750,"depth":171,"text":99751},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99289,"description":1878},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":99788,"title":99789,"body":99790,"description":1878,"extension":1879,"meta":100862,"navigation":1881,"path":100863,"seo":100864,"stem":100865,"__hash__":100866},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":99791,"toc":100856},[99792,99795,99799,99802,99805,99808,99873,99876,99916,99919,100001,100004,100009,100031,100033,100038,100043,100046,100049,100204,100207,100409,100413,100416,100419,100487,100489,100494,100497,100500,100580,100584,100587,100589,100662,100664,100669,100671,100751,100755,100758,100761,100764,100767,100770,100773,100853],[10,99793,99789],{"id":99794},"_6数组的拼接",[14,99796,99798],{"id":99797},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[24,99800,99801],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[24,99803,99804],{},"函数内部传两个数列构成的数列或者元组",[24,99806,99807],{},"①一维数组的拼接",[303,99809,99811],{"className":32174,"code":99810,"language":32176,"meta":308,"style":308},"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",[119,99812,99813,99833,99853,99858,99863,99868],{"__ignoreMap":308},[312,99814,99815,99817,99819,99821,99823,99825,99827,99829,99831],{"class":314,"line":315},[312,99816,164],{"class":324},[312,99818,336],{"class":1436},[312,99820,94794],{"class":324},[312,99822,1433],{"class":488},[312,99824,2323],{"class":324},[312,99826,2027],{"class":488},[312,99828,2323],{"class":324},[312,99830,2021],{"class":488},[312,99832,6462],{"class":324},[312,99834,99835,99837,99839,99841,99843,99845,99847,99849,99851],{"class":314,"line":171},[312,99836,2208],{"class":324},[312,99838,336],{"class":1436},[312,99840,94794],{"class":324},[312,99842,2238],{"class":488},[312,99844,2323],{"class":324},[312,99846,2264],{"class":488},[312,99848,2323],{"class":324},[312,99850,2289],{"class":488},[312,99852,6462],{"class":324},[312,99854,99855],{"class":314,"line":274},[312,99856,99857],{"class":318},"#调用concatenate进行数组拼接\n",[312,99859,99860],{"class":314,"line":298},[312,99861,99862],{"class":324},"np.concatenate((a,b))\n",[312,99864,99865],{"class":314,"line":974},[312,99866,99867],{"class":318},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[312,99869,99870],{"class":314,"line":980},[312,99871,99872],{"class":318},"#np.concatenate([a,b])\n",[24,99874,99875],{},"②一维多个数组拼接",[303,99877,99879],{"className":32174,"code":99878,"language":32176,"meta":308,"style":308},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[119,99880,99881,99886,99906,99911],{"__ignoreMap":308},[312,99882,99883],{"class":314,"line":315},[312,99884,99885],{"class":318},"#也可以多个数组进行拼接\n",[312,99887,99888,99890,99892,99894,99896,99898,99900,99902,99904],{"class":314,"line":171},[312,99889,2233],{"class":324},[312,99891,336],{"class":1436},[312,99893,94794],{"class":324},[312,99895,2391],{"class":488},[312,99897,2323],{"class":324},[312,99899,2417],{"class":488},[312,99901,2323],{"class":324},[312,99903,2468],{"class":488},[312,99905,6462],{"class":324},[312,99907,99908],{"class":314,"line":274},[312,99909,99910],{"class":324},"c\n",[312,99912,99913],{"class":314,"line":298},[312,99914,99915],{"class":324},"np.concatenate((a,b,c))\n",[24,99917,99918],{},"③二维数组拼接",[303,99920,99922],{"className":32174,"code":99921,"language":32176,"meta":308,"style":308},"#二维数组使用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",[119,99923,99924,99929,99953,99978,99983,99988],{"__ignoreMap":308},[312,99925,99926],{"class":314,"line":315},[312,99927,99928],{"class":318},"#二维数组使用concatenate进行拼接\n",[312,99930,99931,99933,99935,99937,99939,99941,99943,99945,99947,99949,99951],{"class":314,"line":171},[312,99932,95076],{"class":324},[312,99934,336],{"class":1436},[312,99936,94772],{"class":324},[312,99938,1433],{"class":488},[312,99940,2323],{"class":324},[312,99942,2468],{"class":488},[312,99944,94777],{"class":324},[312,99946,2021],{"class":488},[312,99948,2323],{"class":324},[312,99950,2238],{"class":488},[312,99952,1959],{"class":324},[312,99954,99955,99958,99960,99962,99964,99966,99968,99970,99972,99974,99976],{"class":314,"line":274},[312,99956,99957],{"class":324},"bb",[312,99959,336],{"class":1436},[312,99961,94772],{"class":324},[312,99963,2282],{"class":488},[312,99965,2323],{"class":324},[312,99967,2587],{"class":488},[312,99969,94777],{"class":324},[312,99971,2021],{"class":488},[312,99973,2323],{"class":324},[312,99975,2238],{"class":488},[312,99977,1959],{"class":324},[312,99979,99980],{"class":314,"line":298},[312,99981,99982],{"class":318},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[312,99984,99985],{"class":314,"line":974},[312,99986,99987],{"class":318},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[312,99989,99990,99993,99995,99997,99999],{"class":314,"line":980},[312,99991,99992],{"class":324},"np.concatenate((aa,bb),",[312,99994,49309],{"class":1579},[312,99996,336],{"class":1436},[312,99998,858],{"class":488},[312,100000,1959],{"class":324},[24,100002,100003],{},"结果：",[24,100005,100006],{},[19,100007],{"alt":308,"src":100008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[303,100010,100012],{"className":32174,"code":100011,"language":32176,"meta":308,"style":308},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[119,100013,100014,100019],{"__ignoreMap":308},[312,100015,100016],{"class":314,"line":315},[312,100017,100018],{"class":318},"#指定axis为1进行拼接\n",[312,100020,100021,100023,100025,100027,100029],{"class":314,"line":171},[312,100022,99992],{"class":324},[312,100024,49309],{"class":1579},[312,100026,336],{"class":1436},[312,100028,1433],{"class":488},[312,100030,1959],{"class":324},[24,100032,100003],{},[24,100034,100035],{},[19,100036],{"alt":308,"src":100037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[24,100039,100040],{},[27,100041,100042],{},"二维数组总结：0竖着方向，1横着方向",[24,100044,100045],{},"④三维数组拼接",[24,100047,100048],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[303,100050,100052],{"className":32174,"code":100051,"language":32176,"meta":308,"style":308},"#两个三行六列\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",[119,100053,100054,100059,100087,100117,100122,100139,100144,100149,100154,100171,100176,100181,100186,100199],{"__ignoreMap":308},[312,100055,100056],{"class":314,"line":315},[312,100057,100058],{"class":318},"#两个三行六列\n",[312,100060,100061,100063,100065,100067,100069,100071,100073,100075,100077,100079,100081,100083,100085],{"class":314,"line":171},[312,100062,97291],{"class":324},[312,100064,336],{"class":1436},[312,100066,94772],{"class":324},[312,100068,1433],{"class":488},[312,100070,2323],{"class":324},[312,100072,2270],{"class":488},[312,100074,94777],{"class":324},[312,100076,2027],{"class":488},[312,100078,2323],{"class":324},[312,100080,2021],{"class":488},[312,100082,2323],{"class":324},[312,100084,2289],{"class":488},[312,100086,1959],{"class":324},[312,100088,100089,100092,100094,100096,100098,100100,100103,100105,100107,100109,100111,100113,100115],{"class":314,"line":274},[312,100090,100091],{"class":324},"bbb",[312,100093,336],{"class":1436},[312,100095,94772],{"class":324},[312,100097,2282],{"class":488},[312,100099,2323],{"class":324},[312,100101,100102],{"class":488},"137",[312,100104,94777],{"class":324},[312,100106,2027],{"class":488},[312,100108,2323],{"class":324},[312,100110,2021],{"class":488},[312,100112,2323],{"class":324},[312,100114,2289],{"class":488},[312,100116,1959],{"class":324},[312,100118,100119],{"class":314,"line":298},[312,100120,100121],{"class":318},"#axis=0\n",[312,100123,100124,100126,100128,100131,100133,100135,100137],{"class":314,"line":974},[312,100125,2640],{"class":324},[312,100127,336],{"class":1436},[312,100129,100130],{"class":324},"np.concatenate((aaa,bbb),",[312,100132,49309],{"class":1579},[312,100134,336],{"class":1436},[312,100136,858],{"class":488},[312,100138,1959],{"class":324},[312,100140,100141],{"class":314,"line":980},[312,100142,100143],{"class":324},"s.shape\n",[312,100145,100146],{"class":314,"line":997},[312,100147,100148],{"class":318},"#输出：(4,3,6)\n",[312,100150,100151],{"class":314,"line":1003},[312,100152,100153],{"class":318},"#axis=1\n",[312,100155,100156,100159,100161,100163,100165,100167,100169],{"class":314,"line":1020},[312,100157,100158],{"class":324},"ss",[312,100160,336],{"class":1436},[312,100162,100130],{"class":324},[312,100164,49309],{"class":1579},[312,100166,336],{"class":1436},[312,100168,1433],{"class":488},[312,100170,1959],{"class":324},[312,100172,100173],{"class":314,"line":1026},[312,100174,100175],{"class":324},"ss.shape\n",[312,100177,100178],{"class":314,"line":3418},[312,100179,100180],{"class":318},"#输出：(2,6,6)\n",[312,100182,100183],{"class":314,"line":3423},[312,100184,100185],{"class":318},"#axis=2\n",[312,100187,100188,100190,100192,100194,100196],{"class":314,"line":3429},[312,100189,100130],{"class":324},[312,100191,49309],{"class":1579},[312,100193,336],{"class":1436},[312,100195,2027],{"class":488},[312,100197,100198],{"class":324},").shape\n",[312,100200,100201],{"class":314,"line":3434},[312,100202,100203],{"class":318},"#输出：（2，3，12）\n",[24,100205,100206],{},"⑤四维数组拼接",[303,100208,100210],{"className":32174,"code":100209,"language":32176,"meta":308,"style":308},"#两个三行六列\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",[119,100211,100212,100216,100244,100272,100297,100323,100327,100340,100345,100349,100361,100366,100370,100382,100387,100392,100404],{"__ignoreMap":308},[312,100213,100214],{"class":314,"line":315},[312,100215,100058],{"class":318},[312,100217,100218,100220,100222,100224,100226,100228,100230,100232,100234,100236,100238,100240,100242],{"class":314,"line":171},[312,100219,97291],{"class":324},[312,100221,336],{"class":1436},[312,100223,94772],{"class":324},[312,100225,1433],{"class":488},[312,100227,2323],{"class":324},[312,100229,2270],{"class":488},[312,100231,94777],{"class":324},[312,100233,2027],{"class":488},[312,100235,2323],{"class":324},[312,100237,2021],{"class":488},[312,100239,2323],{"class":324},[312,100241,2289],{"class":488},[312,100243,1959],{"class":324},[312,100245,100246,100248,100250,100252,100254,100256,100258,100260,100262,100264,100266,100268,100270],{"class":314,"line":274},[312,100247,100091],{"class":324},[312,100249,336],{"class":1436},[312,100251,94772],{"class":324},[312,100253,2282],{"class":488},[312,100255,2323],{"class":324},[312,100257,100102],{"class":488},[312,100259,94777],{"class":324},[312,100261,2027],{"class":488},[312,100263,2323],{"class":324},[312,100265,2021],{"class":488},[312,100267,2323],{"class":324},[312,100269,2289],{"class":488},[312,100271,1959],{"class":324},[312,100273,100274,100277,100279,100281,100283,100285,100287,100289,100291,100293,100295],{"class":314,"line":298},[312,100275,100276],{"class":324},"aaaa",[312,100278,336],{"class":1436},[312,100280,99440],{"class":324},[312,100282,2027],{"class":488},[312,100284,2323],{"class":324},[312,100286,2021],{"class":488},[312,100288,2323],{"class":324},[312,100290,2021],{"class":488},[312,100292,2323],{"class":324},[312,100294,2027],{"class":488},[312,100296,1959],{"class":324},[312,100298,100299,100302,100304,100307,100309,100311,100313,100315,100317,100319,100321],{"class":314,"line":974},[312,100300,100301],{"class":324},"bbbb",[312,100303,336],{"class":1436},[312,100305,100306],{"class":324},"bbb.reshape(",[312,100308,2027],{"class":488},[312,100310,2323],{"class":324},[312,100312,2021],{"class":488},[312,100314,2323],{"class":324},[312,100316,2021],{"class":488},[312,100318,2323],{"class":324},[312,100320,2027],{"class":488},[312,100322,1959],{"class":324},[312,100324,100325],{"class":314,"line":980},[312,100326,100121],{"class":318},[312,100328,100329,100332,100334,100336,100338],{"class":314,"line":997},[312,100330,100331],{"class":324},"np.concatenate((aaaa,bbbb),",[312,100333,49309],{"class":1579},[312,100335,336],{"class":1436},[312,100337,858],{"class":488},[312,100339,100198],{"class":324},[312,100341,100342],{"class":314,"line":1003},[312,100343,100344],{"class":318},"#结果：（4，3，3，2）\n",[312,100346,100347],{"class":314,"line":1020},[312,100348,100153],{"class":318},[312,100350,100351,100353,100355,100357,100359],{"class":314,"line":1026},[312,100352,100331],{"class":324},[312,100354,49309],{"class":1579},[312,100356,336],{"class":1436},[312,100358,1433],{"class":488},[312,100360,100198],{"class":324},[312,100362,100363],{"class":314,"line":3418},[312,100364,100365],{"class":318},"#结果：（2，6，3，2）\n",[312,100367,100368],{"class":314,"line":3423},[312,100369,100185],{"class":318},[312,100371,100372,100374,100376,100378,100380],{"class":314,"line":3429},[312,100373,100331],{"class":324},[312,100375,49309],{"class":1579},[312,100377,336],{"class":1436},[312,100379,2027],{"class":488},[312,100381,100198],{"class":324},[312,100383,100384],{"class":314,"line":3434},[312,100385,100386],{"class":318},"#结果：（2，3，6，2）\n",[312,100388,100389],{"class":314,"line":3448},[312,100390,100391],{"class":318},"#axis=3\n",[312,100393,100394,100396,100398,100400,100402],{"class":314,"line":3453},[312,100395,100331],{"class":324},[312,100397,49309],{"class":1579},[312,100399,336],{"class":1436},[312,100401,2021],{"class":488},[312,100403,100198],{"class":324},[312,100405,100406],{"class":314,"line":3459},[312,100407,100408],{"class":318},"#结果：（2，3，3，4）\n",[14,100410,100412],{"id":100411},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[24,100414,100415],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[24,100417,100418],{},"①二维数组",[303,100420,100422],{"className":32174,"code":100421,"language":32176,"meta":308,"style":308},"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",[119,100423,100424,100448,100472,100477,100482],{"__ignoreMap":308},[312,100425,100426,100428,100430,100432,100434,100436,100438,100440,100442,100444,100446],{"class":314,"line":315},[312,100427,95076],{"class":324},[312,100429,336],{"class":1436},[312,100431,94772],{"class":324},[312,100433,1433],{"class":488},[312,100435,2323],{"class":324},[312,100437,2468],{"class":488},[312,100439,94777],{"class":324},[312,100441,2021],{"class":488},[312,100443,2323],{"class":324},[312,100445,2238],{"class":488},[312,100447,1959],{"class":324},[312,100449,100450,100452,100454,100456,100458,100460,100462,100464,100466,100468,100470],{"class":314,"line":171},[312,100451,99957],{"class":324},[312,100453,336],{"class":1436},[312,100455,94772],{"class":324},[312,100457,2282],{"class":488},[312,100459,2323],{"class":324},[312,100461,2587],{"class":488},[312,100463,94777],{"class":324},[312,100465,2021],{"class":488},[312,100467,2323],{"class":324},[312,100469,2238],{"class":488},[312,100471,1959],{"class":324},[312,100473,100474],{"class":314,"line":274},[312,100475,100476],{"class":324},"np.hstack((aa,bb))\n",[312,100478,100479],{"class":314,"line":298},[312,100480,100481],{"class":318},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[312,100483,100484],{"class":314,"line":974},[312,100485,100486],{"class":318},"#np.hstack([aa,bb])\n",[24,100488,100003],{},[24,100490,100491],{},[19,100492],{"alt":308,"src":100493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[24,100495,100496],{},"等效于concatenate()函数中axis=1时的情况",[24,100498,100499],{},"②三维数组",[303,100501,100503],{"className":32174,"code":100502,"language":32176,"meta":308,"style":308},"#两个三行六列\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",[119,100504,100505,100509,100537,100565,100570,100575],{"__ignoreMap":308},[312,100506,100507],{"class":314,"line":315},[312,100508,100058],{"class":318},[312,100510,100511,100513,100515,100517,100519,100521,100523,100525,100527,100529,100531,100533,100535],{"class":314,"line":171},[312,100512,97291],{"class":324},[312,100514,336],{"class":1436},[312,100516,94772],{"class":324},[312,100518,1433],{"class":488},[312,100520,2323],{"class":324},[312,100522,2270],{"class":488},[312,100524,94777],{"class":324},[312,100526,2027],{"class":488},[312,100528,2323],{"class":324},[312,100530,2021],{"class":488},[312,100532,2323],{"class":324},[312,100534,2289],{"class":488},[312,100536,1959],{"class":324},[312,100538,100539,100541,100543,100545,100547,100549,100551,100553,100555,100557,100559,100561,100563],{"class":314,"line":274},[312,100540,100091],{"class":324},[312,100542,336],{"class":1436},[312,100544,94772],{"class":324},[312,100546,2282],{"class":488},[312,100548,2323],{"class":324},[312,100550,100102],{"class":488},[312,100552,94777],{"class":324},[312,100554,2027],{"class":488},[312,100556,2323],{"class":324},[312,100558,2021],{"class":488},[312,100560,2323],{"class":324},[312,100562,2289],{"class":488},[312,100564,1959],{"class":324},[312,100566,100567],{"class":314,"line":298},[312,100568,100569],{"class":318},"#使用hstack\n",[312,100571,100572],{"class":314,"line":974},[312,100573,100574],{"class":324},"np.hstack((aaa,bbb)).shape\n",[312,100576,100577],{"class":314,"line":980},[312,100578,100579],{"class":318},"#输出：（2，6，6）\n",[14,100581,100583],{"id":100582},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[24,100585,100586],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[24,100588,100418],{},[303,100590,100592],{"className":32174,"code":100591,"language":32176,"meta":308,"style":308},"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",[119,100593,100594,100618,100642,100647,100652,100657],{"__ignoreMap":308},[312,100595,100596,100598,100600,100602,100604,100606,100608,100610,100612,100614,100616],{"class":314,"line":315},[312,100597,95076],{"class":324},[312,100599,336],{"class":1436},[312,100601,94772],{"class":324},[312,100603,1433],{"class":488},[312,100605,2323],{"class":324},[312,100607,2468],{"class":488},[312,100609,94777],{"class":324},[312,100611,2021],{"class":488},[312,100613,2323],{"class":324},[312,100615,2238],{"class":488},[312,100617,1959],{"class":324},[312,100619,100620,100622,100624,100626,100628,100630,100632,100634,100636,100638,100640],{"class":314,"line":171},[312,100621,99957],{"class":324},[312,100623,336],{"class":1436},[312,100625,94772],{"class":324},[312,100627,2282],{"class":488},[312,100629,2323],{"class":324},[312,100631,2587],{"class":488},[312,100633,94777],{"class":324},[312,100635,2021],{"class":488},[312,100637,2323],{"class":324},[312,100639,2238],{"class":488},[312,100641,1959],{"class":324},[312,100643,100644],{"class":314,"line":274},[312,100645,100646],{"class":318},"#vstack 垂直方向进行堆叠\n",[312,100648,100649],{"class":314,"line":298},[312,100650,100651],{"class":324},"np.vstack((aa,bb))\n",[312,100653,100654],{"class":314,"line":974},[312,100655,100656],{"class":318},"#与hstack传的参数类似，等价于：\n",[312,100658,100659],{"class":314,"line":980},[312,100660,100661],{"class":324},"np.vstack([aa,bb])\n",[24,100663,100003],{},[24,100665,100666],{},[19,100667],{"alt":308,"src":100668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[24,100670,100499],{},[303,100672,100674],{"className":32174,"code":100673,"language":32176,"meta":308,"style":308},"#两个三行六列\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",[119,100675,100676,100680,100708,100736,100741,100746],{"__ignoreMap":308},[312,100677,100678],{"class":314,"line":315},[312,100679,100058],{"class":318},[312,100681,100682,100684,100686,100688,100690,100692,100694,100696,100698,100700,100702,100704,100706],{"class":314,"line":171},[312,100683,97291],{"class":324},[312,100685,336],{"class":1436},[312,100687,94772],{"class":324},[312,100689,1433],{"class":488},[312,100691,2323],{"class":324},[312,100693,2270],{"class":488},[312,100695,94777],{"class":324},[312,100697,2027],{"class":488},[312,100699,2323],{"class":324},[312,100701,2021],{"class":488},[312,100703,2323],{"class":324},[312,100705,2289],{"class":488},[312,100707,1959],{"class":324},[312,100709,100710,100712,100714,100716,100718,100720,100722,100724,100726,100728,100730,100732,100734],{"class":314,"line":274},[312,100711,100091],{"class":324},[312,100713,336],{"class":1436},[312,100715,94772],{"class":324},[312,100717,2282],{"class":488},[312,100719,2323],{"class":324},[312,100721,100102],{"class":488},[312,100723,94777],{"class":324},[312,100725,2027],{"class":488},[312,100727,2323],{"class":324},[312,100729,2021],{"class":488},[312,100731,2323],{"class":324},[312,100733,2289],{"class":488},[312,100735,1959],{"class":324},[312,100737,100738],{"class":314,"line":298},[312,100739,100740],{"class":318},"#使用vstack\n",[312,100742,100743],{"class":314,"line":974},[312,100744,100745],{"class":324},"np.vstack((aaa,bbb)).shape\n",[312,100747,100748],{"class":314,"line":980},[312,100749,100750],{"class":318},"#输出：（4，3，6）\n",[14,100752,100754],{"id":100753},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[24,100756,100757],{},"该方法是三维数组特有的方法",[24,100759,100760],{},"也就是说",[24,100762,100763],{},"一维数组拼接方法用：concatenate()",[24,100765,100766],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[24,100768,100769],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[24,100771,100772],{},"四维数组及多维数组只能用concatenate进行拼接",[303,100774,100776],{"className":32174,"code":100775,"language":32176,"meta":308,"style":308},"#两个三行六列\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",[119,100777,100778,100782,100810,100838,100843,100848],{"__ignoreMap":308},[312,100779,100780],{"class":314,"line":315},[312,100781,100058],{"class":318},[312,100783,100784,100786,100788,100790,100792,100794,100796,100798,100800,100802,100804,100806,100808],{"class":314,"line":171},[312,100785,97291],{"class":324},[312,100787,336],{"class":1436},[312,100789,94772],{"class":324},[312,100791,1433],{"class":488},[312,100793,2323],{"class":324},[312,100795,2270],{"class":488},[312,100797,94777],{"class":324},[312,100799,2027],{"class":488},[312,100801,2323],{"class":324},[312,100803,2021],{"class":488},[312,100805,2323],{"class":324},[312,100807,2289],{"class":488},[312,100809,1959],{"class":324},[312,100811,100812,100814,100816,100818,100820,100822,100824,100826,100828,100830,100832,100834,100836],{"class":314,"line":274},[312,100813,100091],{"class":324},[312,100815,336],{"class":1436},[312,100817,94772],{"class":324},[312,100819,2282],{"class":488},[312,100821,2323],{"class":324},[312,100823,100102],{"class":488},[312,100825,94777],{"class":324},[312,100827,2027],{"class":488},[312,100829,2323],{"class":324},[312,100831,2021],{"class":488},[312,100833,2323],{"class":324},[312,100835,2289],{"class":488},[312,100837,1959],{"class":324},[312,100839,100840],{"class":314,"line":298},[312,100841,100842],{"class":318},"#使用dstack\n",[312,100844,100845],{"class":314,"line":974},[312,100846,100847],{"class":324},"np.dstack((aaa,bbb)).shape\n",[312,100849,100850],{"class":314,"line":980},[312,100851,100852],{"class":318},"#结果：（2，3，12）\n",[1856,100854,100855],{},"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":308,"searchDepth":171,"depth":171,"links":100857},[100858,100859,100860,100861],{"id":99797,"depth":171,"text":99798},{"id":100411,"depth":171,"text":100412},{"id":100582,"depth":171,"text":100583},{"id":100753,"depth":171,"text":100754},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":99789,"description":1878},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100868,"title":100869,"body":100870,"description":1878,"extension":1879,"meta":101145,"navigation":1881,"path":101146,"seo":101147,"stem":101148,"__hash__":101149},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100871,"toc":101143},[100872,100875,100878,100972,100975,100978,100981,100984,100987,100990,100993,100996,101140],[10,100873,100869],{"id":100874},"_7数组转置",[24,100876,100877],{},"使用transpose()函数",[303,100879,100881],{"className":32174,"code":100880,"language":32176,"meta":308,"style":308},"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",[119,100882,100883,100893,100917,100922,100927,100932,100937,100945,100949,100953,100958,100963,100968],{"__ignoreMap":308},[312,100884,100885,100887,100889,100891],{"class":314,"line":315},[312,100886,32188],{"class":1436},[312,100888,33175],{"class":324},[312,100890,33178],{"class":1436},[312,100892,33181],{"class":324},[312,100894,100895,100897,100899,100901,100903,100905,100907,100909,100911,100913,100915],{"class":314,"line":171},[312,100896,164],{"class":324},[312,100898,336],{"class":1436},[312,100900,33512],{"class":324},[312,100902,1433],{"class":488},[312,100904,2323],{"class":324},[312,100906,2468],{"class":488},[312,100908,94777],{"class":324},[312,100910,2238],{"class":488},[312,100912,2323],{"class":324},[312,100914,2021],{"class":488},[312,100916,1959],{"class":324},[312,100918,100919],{"class":314,"line":274},[312,100920,100921],{"class":318},"#二维数组转置\n",[312,100923,100924],{"class":314,"line":298},[312,100925,100926],{"class":318},"#调用transpose()函数\n",[312,100928,100929],{"class":314,"line":974},[312,100930,100931],{"class":324},"a.transpose()\n",[312,100933,100934],{"class":314,"line":980},[312,100935,100936],{"class":318},"#对于二维数组也可以采用.T来实现\n",[312,100938,100939,100942],{"class":314,"line":997},[312,100940,100941],{"class":324},"a.T",[312,100943,100944],{"class":318},"#与上述代码一样\n",[312,100946,100947],{"class":314,"line":1003},[312,100948,95334],{"class":318},[312,100950,100951],{"class":314,"line":1020},[312,100952,95698],{"class":339},[312,100954,100955],{"class":314,"line":1026},[312,100956,100957],{"class":339},"array([[ 1,  4,  7, 10],\n",[312,100959,100960],{"class":314,"line":3418},[312,100961,100962],{"class":339},"       [ 2,  5,  8, 11],\n",[312,100964,100965],{"class":314,"line":3423},[312,100966,100967],{"class":339},"       [ 3,  6,  9, 12]])\n",[312,100969,100970],{"class":314,"line":3429},[312,100971,95698],{"class":339},[24,100973,100974],{},"也可以使用np.transpose()的形式",[24,100976,100977],{},"#多维数组进行转置 np.transpose()",[24,100979,100980],{},"#对二维数组也可以使用np.transpose()进行转置",[24,100982,100983],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[24,100985,100986],{},"第二个参数，维度可以理解为用axis中的数来理解",[24,100988,100989],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[24,100991,100992],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[24,100994,100995],{},"四维及以上的数组也是一样的道理",[303,100997,100999],{"className":32174,"code":100998,"language":32176,"meta":308,"style":308},"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",[119,101000,101001,101029,101034,101039,101044,101062,101067,101099,101104,101109,101114,101135],{"__ignoreMap":308},[312,101002,101003,101005,101007,101009,101011,101013,101015,101017,101019,101021,101023,101025,101027],{"class":314,"line":315},[312,101004,2764],{"class":324},[312,101006,336],{"class":1436},[312,101008,94772],{"class":324},[312,101010,1433],{"class":488},[312,101012,2323],{"class":324},[312,101014,2270],{"class":488},[312,101016,94777],{"class":324},[312,101018,2021],{"class":488},[312,101020,2323],{"class":324},[312,101022,2289],{"class":488},[312,101024,2323],{"class":324},[312,101026,2027],{"class":488},[312,101028,1959],{"class":324},[312,101030,101031],{"class":314,"line":171},[312,101032,101033],{"class":324},"x.shape\n",[312,101035,101036],{"class":314,"line":274},[312,101037,101038],{"class":318},"#结果：（3,6,2）\n",[312,101040,101041],{"class":314,"line":298},[312,101042,101043],{"class":318},"#使用np.transpose()进行转置 变为(2,6,3)\n",[312,101045,101046,101049,101051,101053,101055,101057,101059],{"class":314,"line":974},[312,101047,101048],{"class":324},"np.transpose(x,(",[312,101050,2027],{"class":488},[312,101052,2323],{"class":324},[312,101054,1433],{"class":488},[312,101056,2323],{"class":324},[312,101058,858],{"class":488},[312,101060,101061],{"class":324},")).shape\n",[312,101063,101064],{"class":314,"line":980},[312,101065,101066],{"class":318},"#结果：(2,6,3)\n",[312,101068,101069,101071,101073,101075,101077,101079,101081,101083,101085,101087,101089,101091,101093,101095,101097],{"class":314,"line":997},[312,101070,100276],{"class":324},[312,101072,336],{"class":1436},[312,101074,94772],{"class":324},[312,101076,1433],{"class":488},[312,101078,2323],{"class":324},[312,101080,2270],{"class":488},[312,101082,94777],{"class":324},[312,101084,2021],{"class":488},[312,101086,2323],{"class":324},[312,101088,2027],{"class":488},[312,101090,2323],{"class":324},[312,101092,1433],{"class":488},[312,101094,2323],{"class":324},[312,101096,2289],{"class":488},[312,101098,1959],{"class":324},[312,101100,101101],{"class":314,"line":1003},[312,101102,101103],{"class":324},"aaaa.shape\n",[312,101105,101106],{"class":314,"line":1020},[312,101107,101108],{"class":318},"#结果：（3，2，1，6）\n",[312,101110,101111],{"class":314,"line":1026},[312,101112,101113],{"class":318},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[312,101115,101116,101119,101121,101123,101125,101127,101129,101131,101133],{"class":314,"line":3418},[312,101117,101118],{"class":324},"np.transpose(aaaa,(",[312,101120,1433],{"class":488},[312,101122,2323],{"class":324},[312,101124,2027],{"class":488},[312,101126,2323],{"class":324},[312,101128,858],{"class":488},[312,101130,2323],{"class":324},[312,101132,2021],{"class":488},[312,101134,101061],{"class":324},[312,101136,101137],{"class":314,"line":3423},[312,101138,101139],{"class":318},"#结果：(2,1,3,6)\n",[1856,101141,101142],{},"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":308,"searchDepth":171,"depth":171,"links":101144},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100869,"description":1878},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":101151,"title":101152,"body":101153,"description":1878,"extension":1879,"meta":101887,"navigation":1881,"path":101888,"seo":101889,"stem":101890,"__hash__":101891},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":101154,"toc":101885},[101155,101158,101161,101164,101167,101170,101173,101176,101179,101288,101291,101294,101882],[10,101156,101152],{"id":101157},"_8数组分割",[24,101159,101160],{},"split分割",[24,101162,101163],{},"numpy.split(ary,indics_or_sections,axis)",[24,101165,101166],{},"解释：",[24,101168,101169],{},"ary:被分割的数组",[24,101171,101172],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[24,101174,101175],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[24,101177,101178],{},"①一维数组的分割",[303,101180,101182],{"className":32174,"code":101181,"language":32176,"meta":308,"style":308},"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",[119,101183,101184,101200,101205,101214,101218,101223,101231,101235,101240,101245,101258,101262,101267,101279,101283],{"__ignoreMap":308},[312,101185,101186,101188,101190,101192,101194,101196,101198],{"class":314,"line":315},[312,101187,164],{"class":324},[312,101189,336],{"class":1436},[312,101191,94772],{"class":324},[312,101193,1433],{"class":488},[312,101195,2323],{"class":324},[312,101197,2365],{"class":488},[312,101199,1959],{"class":324},[312,101201,101202],{"class":314,"line":171},[312,101203,101204],{"class":318},"#如果传入整数，必须能够平分，否则会报错\n",[312,101206,101207,101210,101212],{"class":314,"line":274},[312,101208,101209],{"class":324},"np.split(a,",[312,101211,2027],{"class":488},[312,101213,1959],{"class":324},[312,101215,101216],{"class":314,"line":298},[312,101217,95334],{"class":318},[312,101219,101220],{"class":314,"line":974},[312,101221,101222],{"class":318},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[312,101224,101225,101227,101229],{"class":314,"line":980},[312,101226,101209],{"class":324},[312,101228,2238],{"class":488},[312,101230,1959],{"class":324},[312,101232,101233],{"class":314,"line":997},[312,101234,95334],{"class":318},[312,101236,101237],{"class":314,"line":1003},[312,101238,101239],{"class":318},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[312,101241,101242],{"class":314,"line":1020},[312,101243,101244],{"class":318},"#传入数组\n",[312,101246,101247,101250,101252,101254,101256],{"class":314,"line":1026},[312,101248,101249],{"class":324},"np.split(a,[",[312,101251,2021],{"class":488},[312,101253,2323],{"class":324},[312,101255,2264],{"class":488},[312,101257,6462],{"class":324},[312,101259,101260],{"class":314,"line":3418},[312,101261,95334],{"class":318},[312,101263,101264],{"class":314,"line":3423},[312,101265,101266],{"class":318},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[312,101268,101269,101271,101273,101275,101277],{"class":314,"line":3429},[312,101270,101249],{"class":324},[312,101272,2264],{"class":488},[312,101274,2323],{"class":324},[312,101276,2314],{"class":488},[312,101278,6462],{"class":324},[312,101280,101281],{"class":314,"line":3434},[312,101282,95334],{"class":318},[312,101284,101285],{"class":314,"line":3448},[312,101286,101287],{"class":318},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[24,101289,101290],{},"②二维数组的分割",[24,101292,101293],{},"使用split()",[303,101295,101297],{"className":32174,"code":101296,"language":32176,"meta":308,"style":308},"#二维数组分割\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",[119,101298,101299,101304,101328,101333,101342,101346,101350,101355,101360,101365,101370,101375,101380,101385,101389,101402,101406,101410,101414,101418,101422,101427,101432,101437,101441,101446,101462,101466,101470,101475,101480,101485,101490,101495,101500,101505,101510,101515,101520,101525,101530,101535,101540,101545,101550,101555,101560,101564,101568,101588,101592,101596,101601,101606,101611,101616,101621,101626,101631,101636,101641,101646,101651,101656,101661,101666,101671,101676,101681,101686,101690,101695,101704,101708,101712,101716,101720,101724,101728,101732,101736,101740,101749,101753,101757,101761,101765,101769,101773,101777,101781,101785,101789,101793,101797,101801,101805,101809,101813,101817,101821,101825,101829,101833,101846,101850,101854,101858,101862,101866,101870,101874,101878],{"__ignoreMap":308},[312,101300,101301],{"class":314,"line":315},[312,101302,101303],{"class":318},"#二维数组分割\n",[312,101305,101306,101308,101310,101312,101314,101316,101318,101320,101322,101324,101326],{"class":314,"line":171},[312,101307,95076],{"class":324},[312,101309,336],{"class":1436},[312,101311,94772],{"class":324},[312,101313,1433],{"class":488},[312,101315,2323],{"class":324},[312,101317,2270],{"class":488},[312,101319,94777],{"class":324},[312,101321,2289],{"class":488},[312,101323,2323],{"class":324},[312,101325,2289],{"class":488},[312,101327,1959],{"class":324},[312,101329,101330],{"class":314,"line":274},[312,101331,101332],{"class":318},"#默认axis=0  传入整数平均分,按行来的\n",[312,101334,101335,101338,101340],{"class":314,"line":298},[312,101336,101337],{"class":324},"np.split(aa,",[312,101339,2021],{"class":488},[312,101341,1959],{"class":324},[312,101343,101344],{"class":314,"line":974},[312,101345,97534],{"class":318},[312,101347,101348],{"class":314,"line":980},[312,101349,95698],{"class":339},[312,101351,101352],{"class":314,"line":997},[312,101353,101354],{"class":339},"[array([[ 1,  2,  3,  4,  5,  6],\n",[312,101356,101357],{"class":314,"line":1003},[312,101358,101359],{"class":339},"        [ 7,  8,  9, 10, 11, 12]]),\n",[312,101361,101362],{"class":314,"line":1020},[312,101363,101364],{"class":339}," array([[13, 14, 15, 16, 17, 18],\n",[312,101366,101367],{"class":314,"line":1026},[312,101368,101369],{"class":339},"        [19, 20, 21, 22, 23, 24]]),\n",[312,101371,101372],{"class":314,"line":3418},[312,101373,101374],{"class":339}," array([[25, 26, 27, 28, 29, 30],\n",[312,101376,101377],{"class":314,"line":3423},[312,101378,101379],{"class":339},"        [31, 32, 33, 34, 35, 36]])]\n",[312,101381,101382],{"class":314,"line":3429},[312,101383,101384],{"class":339}," '''\n",[312,101386,101387],{"class":314,"line":3434},[312,101388,101244],{"class":318},[312,101390,101391,101394,101396,101398,101400],{"class":314,"line":3448},[312,101392,101393],{"class":324},"np.split(aa,[",[312,101395,2027],{"class":488},[312,101397,2323],{"class":324},[312,101399,2264],{"class":488},[312,101401,6462],{"class":324},[312,101403,101404],{"class":314,"line":3453},[312,101405,97534],{"class":318},[312,101407,101408],{"class":314,"line":3459},[312,101409,95698],{"class":339},[312,101411,101412],{"class":314,"line":3480},[312,101413,101354],{"class":339},[312,101415,101416],{"class":314,"line":3485},[312,101417,101359],{"class":339},[312,101419,101420],{"class":314,"line":3499},[312,101421,101364],{"class":339},[312,101423,101424],{"class":314,"line":3504},[312,101425,101426],{"class":339},"        [19, 20, 21, 22, 23, 24],\n",[312,101428,101429],{"class":314,"line":3533},[312,101430,101431],{"class":339},"        [25, 26, 27, 28, 29, 30]]),\n",[312,101433,101434],{"class":314,"line":3538},[312,101435,101436],{"class":339}," array([[31, 32, 33, 34, 35, 36]])]\n",[312,101438,101439],{"class":314,"line":3555},[312,101440,95698],{"class":339},[312,101442,101443],{"class":314,"line":3560},[312,101444,101445],{"class":318},"#axis=1 按照列来分\n",[312,101447,101448,101450,101452,101454,101456,101458,101460],{"class":314,"line":3565},[312,101449,101337],{"class":324},[312,101451,2021],{"class":488},[312,101453,2323],{"class":324},[312,101455,49309],{"class":1579},[312,101457,336],{"class":1436},[312,101459,1433],{"class":488},[312,101461,1959],{"class":324},[312,101463,101464],{"class":314,"line":3570},[312,101465,97534],{"class":318},[312,101467,101468],{"class":314,"line":3584},[312,101469,95698],{"class":339},[312,101471,101472],{"class":314,"line":3589},[312,101473,101474],{"class":339},"[array([[ 1,  2],\n",[312,101476,101477],{"class":314,"line":4382},[312,101478,101479],{"class":339},"        [ 7,  8],\n",[312,101481,101482],{"class":314,"line":4396},[312,101483,101484],{"class":339},"        [13, 14],\n",[312,101486,101487],{"class":314,"line":4404},[312,101488,101489],{"class":339},"        [19, 20],\n",[312,101491,101492],{"class":314,"line":4409},[312,101493,101494],{"class":339},"        [25, 26],\n",[312,101496,101497],{"class":314,"line":4415},[312,101498,101499],{"class":339},"        [31, 32]]),\n",[312,101501,101502],{"class":314,"line":4421},[312,101503,101504],{"class":339}," array([[ 3,  4],\n",[312,101506,101507],{"class":314,"line":4426},[312,101508,101509],{"class":339},"        [ 9, 10],\n",[312,101511,101512],{"class":314,"line":9751},[312,101513,101514],{"class":339},"        [15, 16],\n",[312,101516,101517],{"class":314,"line":9775},[312,101518,101519],{"class":339},"        [21, 22],\n",[312,101521,101522],{"class":314,"line":9780},[312,101523,101524],{"class":339},"        [27, 28],\n",[312,101526,101527],{"class":314,"line":9786},[312,101528,101529],{"class":339},"        [33, 34]]),\n",[312,101531,101532],{"class":314,"line":9813},[312,101533,101534],{"class":339}," array([[ 5,  6],\n",[312,101536,101537],{"class":314,"line":9818},[312,101538,101539],{"class":339},"        [11, 12],\n",[312,101541,101542],{"class":314,"line":9824},[312,101543,101544],{"class":339},"        [17, 18],\n",[312,101546,101547],{"class":314,"line":9836},[312,101548,101549],{"class":339},"        [23, 24],\n",[312,101551,101552],{"class":314,"line":9848},[312,101553,101554],{"class":339},"        [29, 30],\n",[312,101556,101557],{"class":314,"line":9860},[312,101558,101559],{"class":339},"        [35, 36]])]\n",[312,101561,101562],{"class":314,"line":11519},[312,101563,101384],{"class":339},[312,101565,101566],{"class":314,"line":11544},[312,101567,101244],{"class":318},[312,101569,101570,101572,101574,101576,101578,101580,101582,101584,101586],{"class":314,"line":11567},[312,101571,101393],{"class":324},[312,101573,1433],{"class":488},[312,101575,2323],{"class":324},[312,101577,2027],{"class":488},[312,101579,43404],{"class":324},[312,101581,49309],{"class":1579},[312,101583,336],{"class":1436},[312,101585,1433],{"class":488},[312,101587,1959],{"class":324},[312,101589,101590],{"class":314,"line":11591},[312,101591,95334],{"class":318},[312,101593,101594],{"class":314,"line":11596},[312,101595,95698],{"class":339},[312,101597,101598],{"class":314,"line":11601},[312,101599,101600],{"class":339},"[array([[ 1],\n",[312,101602,101603],{"class":314,"line":11606},[312,101604,101605],{"class":339},"        [ 7],\n",[312,101607,101608],{"class":314,"line":11615},[312,101609,101610],{"class":339},"        [13],\n",[312,101612,101613],{"class":314,"line":11620},[312,101614,101615],{"class":339},"        [19],\n",[312,101617,101618],{"class":314,"line":11626},[312,101619,101620],{"class":339},"        [25],\n",[312,101622,101623],{"class":314,"line":11647},[312,101624,101625],{"class":339},"        [31]]),\n",[312,101627,101628],{"class":314,"line":11653},[312,101629,101630],{"class":339}," array([[ 2],\n",[312,101632,101633],{"class":314,"line":11667},[312,101634,101635],{"class":339},"        [ 8],\n",[312,101637,101638],{"class":314,"line":11673},[312,101639,101640],{"class":339},"        [14],\n",[312,101642,101643],{"class":314,"line":11700},[312,101644,101645],{"class":339},"        [20],\n",[312,101647,101648],{"class":314,"line":11709},[312,101649,101650],{"class":339},"        [26],\n",[312,101652,101653],{"class":314,"line":11715},[312,101654,101655],{"class":339},"        [32]]),\n",[312,101657,101658],{"class":314,"line":11723},[312,101659,101660],{"class":339}," array([[ 3,  4,  5,  6],\n",[312,101662,101663],{"class":314,"line":11728},[312,101664,101665],{"class":339},"        [ 9, 10, 11, 12],\n",[312,101667,101668],{"class":314,"line":18404},[312,101669,101670],{"class":339},"        [15, 16, 17, 18],\n",[312,101672,101673],{"class":314,"line":18410},[312,101674,101675],{"class":339},"        [21, 22, 23, 24],\n",[312,101677,101678],{"class":314,"line":18433},[312,101679,101680],{"class":339},"        [27, 28, 29, 30],\n",[312,101682,101683],{"class":314,"line":18439},[312,101684,101685],{"class":339},"        [33, 34, 35, 36]])]\n",[312,101687,101688],{"class":314,"line":18462},[312,101689,95698],{"class":339},[312,101691,101692],{"class":314,"line":18476},[312,101693,101694],{"class":318},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[312,101696,101697,101700,101702],{"class":314,"line":18496},[312,101698,101699],{"class":324},"np.vsplit(aa,",[312,101701,2021],{"class":488},[312,101703,1959],{"class":324},[312,101705,101706],{"class":314,"line":18502},[312,101707,95334],{"class":318},[312,101709,101710],{"class":314,"line":18513},[312,101711,95698],{"class":339},[312,101713,101714],{"class":314,"line":18536},[312,101715,101354],{"class":339},[312,101717,101718],{"class":314,"line":18558},[312,101719,101359],{"class":339},[312,101721,101722],{"class":314,"line":18563},[312,101723,101364],{"class":339},[312,101725,101726],{"class":314,"line":18569},[312,101727,101369],{"class":339},[312,101729,101730],{"class":314,"line":18583},[312,101731,101374],{"class":339},[312,101733,101734],{"class":314,"line":18596},[312,101735,101379],{"class":339},[312,101737,101738],{"class":314,"line":18601},[312,101739,95698],{"class":339},[312,101741,101742,101745,101747],{"class":314,"line":18615},[312,101743,101744],{"class":324},"np.hsplit(aa,",[312,101746,2021],{"class":488},[312,101748,1959],{"class":324},[312,101750,101751],{"class":314,"line":18620},[312,101752,95334],{"class":318},[312,101754,101755],{"class":314,"line":18626},[312,101756,95698],{"class":339},[312,101758,101759],{"class":314,"line":18631},[312,101760,101474],{"class":339},[312,101762,101763],{"class":314,"line":18645},[312,101764,101479],{"class":339},[312,101766,101767],{"class":314,"line":18650},[312,101768,101484],{"class":339},[312,101770,101771],{"class":314,"line":18655},[312,101772,101489],{"class":339},[312,101774,101775],{"class":314,"line":18669},[312,101776,101494],{"class":339},[312,101778,101779],{"class":314,"line":18681},[312,101780,101499],{"class":339},[312,101782,101783],{"class":314,"line":18686},[312,101784,101504],{"class":339},[312,101786,101787],{"class":314,"line":18699},[312,101788,101509],{"class":339},[312,101790,101791],{"class":314,"line":18704},[312,101792,101514],{"class":339},[312,101794,101795],{"class":314,"line":18709},[312,101796,101519],{"class":339},[312,101798,101799],{"class":314,"line":18714},[312,101800,101524],{"class":339},[312,101802,101803],{"class":314,"line":18727},[312,101804,101529],{"class":339},[312,101806,101807],{"class":314,"line":18732},[312,101808,101534],{"class":339},[312,101810,101811],{"class":314,"line":34428},[312,101812,101539],{"class":339},[312,101814,101815],{"class":314,"line":34434},[312,101816,101544],{"class":339},[312,101818,101819],{"class":314,"line":34440},[312,101820,101549],{"class":339},[312,101822,101823],{"class":314,"line":34446},[312,101824,101554],{"class":339},[312,101826,101827],{"class":314,"line":34452},[312,101828,101559],{"class":339},[312,101830,101831],{"class":314,"line":34463},[312,101832,95698],{"class":339},[312,101834,101835,101838,101840,101842,101844],{"class":314,"line":34469},[312,101836,101837],{"class":324},"np.vsplit(aa,[",[312,101839,2027],{"class":488},[312,101841,2323],{"class":324},[312,101843,2264],{"class":488},[312,101845,6462],{"class":324},[312,101847,101848],{"class":314,"line":34489},[312,101849,95334],{"class":318},[312,101851,101852],{"class":314,"line":34495},[312,101853,95698],{"class":339},[312,101855,101856],{"class":314,"line":34506},[312,101857,101354],{"class":339},[312,101859,101860],{"class":314,"line":34512},[312,101861,101359],{"class":339},[312,101863,101864],{"class":314,"line":34518},[312,101865,101364],{"class":339},[312,101867,101868],{"class":314,"line":34524},[312,101869,101426],{"class":339},[312,101871,101872],{"class":314,"line":34530},[312,101873,101431],{"class":339},[312,101875,101876],{"class":314,"line":34536},[312,101877,101436],{"class":339},[312,101879,101880],{"class":314,"line":34542},[312,101881,101384],{"class":339},[1856,101883,101884],{},"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":308,"searchDepth":171,"depth":171,"links":101886},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":101152,"description":1878},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101893,"title":101894,"body":101895,"description":1878,"extension":1879,"meta":102389,"navigation":1881,"path":102390,"seo":102391,"stem":102392,"__hash__":102393},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101896,"toc":102380},[101897,101900,101903,101928,101932,101991,102043,102047,102049,102085,102139,102141,102179,102250,102254,102259,102263,102266,102299,102302,102306,102309,102312,102315,102318,102323,102327,102330,102333,102336,102339,102344,102348,102353,102356,102377],[10,101898,101894],{"id":101899},"_9数学函数",[24,101901,101902],{},"补充回顾：python的列表推导式",[303,101904,101906],{"className":32174,"code":101905,"language":32176,"meta":308,"style":308},"[1\u002Fi for i in a]\n",[119,101907,101908],{"__ignoreMap":308},[312,101909,101910,101912,101914,101916,101919,101921,101923,101925],{"class":314,"line":315},[312,101911,2834],{"class":324},[312,101913,1433],{"class":488},[312,101915,2529],{"class":1436},[312,101917,101918],{"class":324},"i ",[312,101920,4830],{"class":1436},[312,101922,11241],{"class":324},[312,101924,27839],{"class":1436},[312,101926,101927],{"class":324}," a]\n",[14,101929,101931],{"id":101930},"_91-求倒数","9.1 求倒数",[303,101933,101935],{"className":32174,"code":101934,"language":32176,"meta":308,"style":308},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[119,101936,101937,101942,101970,101982],{"__ignoreMap":308},[312,101938,101939],{"class":314,"line":315},[312,101940,101941],{"class":318},"#数组求倒数\n",[312,101943,101944,101946,101948,101950,101952,101954,101956,101958,101960,101962,101964,101966,101968],{"class":314,"line":171},[312,101945,164],{"class":324},[312,101947,336],{"class":1436},[312,101949,2834],{"class":324},[312,101951,1433],{"class":488},[312,101953,2323],{"class":324},[312,101955,2027],{"class":488},[312,101957,2323],{"class":324},[312,101959,2021],{"class":488},[312,101961,2323],{"class":324},[312,101963,2238],{"class":488},[312,101965,2323],{"class":324},[312,101967,2264],{"class":488},[312,101969,35041],{"class":324},[312,101971,101972,101974,101976,101979],{"class":314,"line":274},[312,101973,2208],{"class":324},[312,101975,336],{"class":1436},[312,101977,101978],{"class":324},"np.array(a)",[312,101980,101981],{"class":318},"#将列表转换为数组\n",[312,101983,101984,101986,101988],{"class":314,"line":298},[312,101985,1433],{"class":488},[312,101987,2529],{"class":1436},[312,101989,101990],{"class":324},"b\n",[303,101992,101994],{"className":32174,"code":101993,"language":32176,"meta":308,"style":308},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[119,101995,101996,102024,102033,102038],{"__ignoreMap":308},[312,101997,101998,102000,102002,102004,102006,102008,102010,102012,102014,102016,102018,102020,102022],{"class":314,"line":315},[312,101999,164],{"class":324},[312,102001,336],{"class":1436},[312,102003,2834],{"class":324},[312,102005,1433],{"class":488},[312,102007,2323],{"class":324},[312,102009,2027],{"class":488},[312,102011,2323],{"class":324},[312,102013,2021],{"class":488},[312,102015,2323],{"class":324},[312,102017,2238],{"class":488},[312,102019,2323],{"class":324},[312,102021,2264],{"class":488},[312,102023,35041],{"class":324},[312,102025,102026,102028,102030],{"class":314,"line":171},[312,102027,2208],{"class":324},[312,102029,336],{"class":1436},[312,102031,102032],{"class":324},"np.array(a)\n",[312,102034,102035],{"class":314,"line":274},[312,102036,102037],{"class":318},"#调用numpy中的函数reciprocal()\n",[312,102039,102040],{"class":314,"line":298},[312,102041,102042],{"class":324},"np.reciprocal(b)\n",[14,102044,102046],{"id":102045},"_92-求平方","9.2 求平方",[24,102048,96300],{},[303,102050,102052],{"className":32174,"code":102051,"language":32176,"meta":308,"style":308},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[119,102053,102054,102059,102064,102080],{"__ignoreMap":308},[312,102055,102056],{"class":314,"line":315},[312,102057,102058],{"class":318},"#square()，求平方\n",[312,102060,102061],{"class":314,"line":171},[312,102062,102063],{"class":318},"#一维数组\n",[312,102065,102066,102068,102070,102072,102074,102076,102078],{"class":314,"line":274},[312,102067,164],{"class":324},[312,102069,336],{"class":1436},[312,102071,94772],{"class":324},[312,102073,1433],{"class":488},[312,102075,2323],{"class":324},[312,102077,2391],{"class":488},[312,102079,1959],{"class":324},[312,102081,102082],{"class":314,"line":298},[312,102083,102084],{"class":324},"np.square(a)\n",[303,102086,102088],{"className":32174,"code":102087,"language":32176,"meta":308,"style":308},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[119,102089,102090,102095,102100,102121],{"__ignoreMap":308},[312,102091,102092],{"class":314,"line":315},[312,102093,102094],{"class":318},"#或者通过循环遍历的形式来计算\n",[312,102096,102097],{"class":314,"line":171},[312,102098,102099],{"class":318},"#这是一个列表\n",[312,102101,102102,102105,102107,102109,102111,102113,102115,102118],{"class":314,"line":274},[312,102103,102104],{"class":324},"[i",[312,102106,2400],{"class":1436},[312,102108,101918],{"class":324},[312,102110,4830],{"class":1436},[312,102112,11241],{"class":324},[312,102114,27839],{"class":1436},[312,102116,102117],{"class":324}," a]",[312,102119,102120],{"class":318},"#这个求完之后在数列当中\n",[312,102122,102123,102126,102128,102130,102132,102134,102136],{"class":314,"line":298},[312,102124,102125],{"class":324},"np.array([i",[312,102127,2400],{"class":1436},[312,102129,101918],{"class":324},[312,102131,4830],{"class":1436},[312,102133,11241],{"class":324},[312,102135,27839],{"class":1436},[312,102137,102138],{"class":324}," a])\n",[24,102140,95061],{},[303,102142,102144],{"className":32174,"code":102143,"language":32176,"meta":308,"style":308},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[119,102145,102146,102150,102174],{"__ignoreMap":308},[312,102147,102148],{"class":314,"line":315},[312,102149,95071],{"class":318},[312,102151,102152,102154,102156,102158,102160,102162,102164,102166,102168,102170,102172],{"class":314,"line":171},[312,102153,95076],{"class":324},[312,102155,336],{"class":1436},[312,102157,94772],{"class":324},[312,102159,1433],{"class":488},[312,102161,2323],{"class":324},[312,102163,2468],{"class":488},[312,102165,94777],{"class":324},[312,102167,2238],{"class":488},[312,102169,2323],{"class":324},[312,102171,2021],{"class":488},[312,102173,1959],{"class":324},[312,102175,102176],{"class":314,"line":274},[312,102177,102178],{"class":324},"np.square(aa)\n",[303,102180,102182],{"className":32174,"code":102181,"language":32176,"meta":308,"style":308},"#传统的方式\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",[119,102183,102184,102189,102198,102214,102230,102245],{"__ignoreMap":308},[312,102185,102186],{"class":314,"line":315},[312,102187,102188],{"class":318},"#传统的方式\n",[312,102190,102191,102193,102195],{"class":314,"line":171},[312,102192,99957],{"class":324},[312,102194,336],{"class":1436},[312,102196,102197],{"class":324},"np.empty_like(aa)\n",[312,102199,102200,102202,102204,102206,102208,102210,102212],{"class":314,"line":274},[312,102201,4830],{"class":1436},[312,102203,11241],{"class":324},[312,102205,27839],{"class":1436},[312,102207,34238],{"class":488},[312,102209,1576],{"class":324},[312,102211,2238],{"class":488},[312,102213,32582],{"class":324},[312,102215,102216,102218,102220,102222,102224,102226,102228],{"class":314,"line":298},[312,102217,5006],{"class":1436},[312,102219,11303],{"class":324},[312,102221,27839],{"class":1436},[312,102223,34238],{"class":488},[312,102225,1576],{"class":324},[312,102227,2021],{"class":488},[312,102229,32582],{"class":324},[312,102231,102232,102235,102237,102240,102242],{"class":314,"line":974},[312,102233,102234],{"class":324},"        bb[i,j]",[312,102236,336],{"class":1436},[312,102238,102239],{"class":324},"aa[i,j]",[312,102241,2400],{"class":1436},[312,102243,102244],{"class":324},"aa[i,j]\n",[312,102246,102247],{"class":314,"line":980},[312,102248,102249],{"class":324},"bb\n",[14,102251,102253],{"id":102252},"_93-求各元素的符号","9.3 求各元素的符号",[24,102255,102256],{},[19,102257],{"alt":308,"src":102258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102260,102262],{"id":102261},"_94-modf函数","9.4 modf函数",[24,102264,102265],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[303,102267,102269],{"className":32174,"code":102268,"language":32176,"meta":308,"style":308},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[119,102270,102271,102294],{"__ignoreMap":308},[312,102272,102273,102275,102277,102279,102281,102283,102285,102287,102289,102292],{"class":314,"line":315},[312,102274,164],{"class":324},[312,102276,336],{"class":1436},[312,102278,94772],{"class":324},[312,102280,2477],{"class":1436},[312,102282,2391],{"class":488},[312,102284,2323],{"class":324},[312,102286,2391],{"class":488},[312,102288,2323],{"class":324},[312,102290,102291],{"class":488},"0.3",[312,102293,1959],{"class":324},[312,102295,102296],{"class":314,"line":171},[312,102297,102298],{"class":324},"np.modf(a)\n",[24,102300,102301],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102303,102305],{"id":102304},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[24,102307,102308],{},"np.cell()",[24,102310,102311],{},"np.floor()",[24,102313,102314],{},"np.rint()",[24,102316,102317],{},"对各元素分别向上取整、向下取整、四舍五入",[24,102319,102320],{},[19,102321],{"alt":308,"src":102322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102324,102326],{"id":102325},"_96-around函数","9.6 around()函数",[24,102328,102329],{},"around()函数也可以实现对数的小数位数进行操作",[24,102331,102332],{},"其中的参数：",[24,102334,102335],{},"1.要传的数组",[24,102337,102338],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[24,102340,102341],{},[19,102342],{"alt":308,"src":102343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102345,102347],{"id":102346},"_97-三角函数","9.7 三角函数",[24,102349,102350],{},[19,102351],{"alt":308,"src":102352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[24,102354,102355],{},"引入图像模块非常重要",[303,102357,102359],{"className":32174,"code":102358,"language":32176,"meta":308,"style":308},"from matplotlib import pyplot as plt\n",[119,102360,102361],{"__ignoreMap":308},[312,102362,102363,102365,102368,102370,102373,102375],{"class":314,"line":315},[312,102364,32533],{"class":1436},[312,102366,102367],{"class":324}," matplotlib ",[312,102369,32188],{"class":1436},[312,102371,102372],{"class":324}," pyplot ",[312,102374,33178],{"class":1436},[312,102376,33232],{"class":324},[1856,102378,102379],{},"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":308,"searchDepth":171,"depth":171,"links":102381},[102382,102383,102384,102385,102386,102387,102388],{"id":101930,"depth":171,"text":101931},{"id":102045,"depth":171,"text":102046},{"id":102252,"depth":171,"text":102253},{"id":102261,"depth":171,"text":102262},{"id":102304,"depth":171,"text":102305},{"id":102325,"depth":171,"text":102326},{"id":102346,"depth":171,"text":102347},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101894,"description":1878},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":102395,"title":102396,"body":102397,"description":1878,"extension":1879,"meta":102401,"navigation":1881,"path":102402,"seo":102403,"stem":102404,"__hash__":102405},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":102398,"toc":102399},[],{"title":308,"searchDepth":171,"depth":171,"links":102400},[],{"category":52215},"\u002Fwiki\u002F2025-08-14-numpy",{"title":102396,"description":1878},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":102407,"title":102408,"body":102409,"description":308,"extension":1879,"meta":104416,"navigation":1881,"path":104417,"seo":104418,"stem":104419,"__hash__":104420},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":102410,"toc":104392},[102411,102414,102418,102421,102424,102430,102433,102456,102459,102493,102496,102537,102541,102544,102637,102640,102684,102687,102704,102707,102721,102724,102727,102772,102775,102811,102815,102818,102824,102829,102849,102853,102856,102922,102925,102943,102947,102950,102979,102989,102995,102999,103002,103008,103019,103023,103026,103056,103059,103339,103342,103345,103356,103359,103362,103384,103391,103394,103412,103415,103418,103432,103440,103443,103469,103475,103478,103481,103491,103503,103523,103532,103552,103562,103586,103599,103613,103618,103659,103676,103701,103713,103733,103739,103784,103803,103820,103833,103849,103856,103868,103877,103912,103933,103958,103971,103995,104010,104035,104038,104059,104068,104071,104082,104086,104089,104095,104107,104114,104118,104121,104133,104136,104150,104153,104163,104173,104176,104216,104219,104223,104229,104232,104246,104250,104253,104286,104290,104293,104316,104324,104327,104333,104339,104342,104345,104373,104377,104380,104386,104389],[10,102412,102408],{"id":102413},"_1环境安装与第一个-mujoco-程序",[14,102415,102417],{"id":102416},"_1目标说明","1.目标说明",[24,102419,102420],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[24,102422,102423],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[303,102425,102428],{"className":102426,"code":102427,"language":6992,"meta":308},[6990],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[119,102429,102427],{"__ignoreMap":308},[24,102431,102432],{},"需要掌握:",[140,102434,102435,102438,102441,102446,102451],{},[143,102436,102437],{},"Fedora 44 下 MuJoCo 的系统依赖",[143,102439,102440],{},"Python 虚拟环境创建",[143,102442,102443],{},[119,102444,102445],{},"mujoco.MjModel",[143,102447,102448],{},[119,102449,102450],{},"mujoco.MjData",[143,102452,102453],{},[119,102454,102455],{},"mujoco.mj_step(model, data)",[24,102457,102458],{},"MuJoCo 中最重要的两个对象:",[2086,102460,102461,102471],{},[2089,102462,102463],{},[2092,102464,102465,102468],{},[2095,102466,102467],{"align":1374},"对象",[2095,102469,102470],{"align":1374},"含义",[2132,102472,102473,102483],{},[2092,102474,102475,102480],{},[2137,102476,102477],{"align":1374},[119,102478,102479],{},"MjModel",[2137,102481,102482],{"align":1374},"模型结构，来自 XML，基本不随时间变化",[2092,102484,102485,102490],{},[2137,102486,102487],{"align":1374},[119,102488,102489],{},"MjData",[2137,102491,102492],{"align":1374},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[24,102494,102495],{},"可以先用一个类比理解：",[2086,102497,102498,102508],{},[2089,102499,102500],{},[2092,102501,102502,102505],{},[2095,102503,102504],{"align":1374},"类比",[2095,102506,102507],{"align":1374},"MuJoCo 对象",[2132,102509,102510,102519,102528],{},[2092,102511,102512,102515],{},[2137,102513,102514],{"align":1374},"游戏地图和角色配置",[2137,102516,102517],{"align":1374},[119,102518,102479],{},[2092,102520,102521,102524],{},[2137,102522,102523],{"align":1374},"游戏运行到当前帧的状态",[2137,102525,102526],{"align":1374},[119,102527,102489],{},[2092,102529,102530,102533],{},[2137,102531,102532],{"align":1374},"前进一帧",[2137,102534,102535],{"align":1374},[119,102536,102455],{},[14,102538,102540],{"id":102539},"_2环境与依赖安装","2.环境与依赖安装",[24,102542,102543],{},"Fedora 44 系统依赖:",[303,102545,102547],{"className":25618,"code":102546,"language":25620,"meta":308,"style":308},"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",[119,102548,102549,102561,102574,102587,102597,102607,102626],{"__ignoreMap":308},[312,102550,102551,102553,102555,102557,102559],{"class":314,"line":315},[312,102552,26372],{"class":332},[312,102554,28111],{"class":339},[312,102556,25630],{"class":339},[312,102558,28196],{"class":488},[312,102560,26474],{"class":488},[312,102562,102563,102566,102569,102572],{"class":314,"line":171},[312,102564,102565],{"class":339},"  python3",[312,102567,102568],{"class":339}," python3-pip",[312,102570,102571],{"class":339}," python3-virtualenv",[312,102573,26474],{"class":488},[312,102575,102576,102579,102582,102585],{"class":314,"line":274},[312,102577,102578],{"class":339},"  mesa-libGL",[312,102580,102581],{"class":339}," mesa-libGLU",[312,102583,102584],{"class":339}," mesa-dri-drivers",[312,102586,26474],{"class":488},[312,102588,102589,102592,102595],{"class":314,"line":298},[312,102590,102591],{"class":339},"  libglvnd-glx",[312,102593,102594],{"class":339}," libglvnd-opengl",[312,102596,26474],{"class":488},[312,102598,102599,102602,102605],{"class":314,"line":974},[312,102600,102601],{"class":339},"  glfw",[312,102603,102604],{"class":339}," glfw-devel",[312,102606,26474],{"class":488},[312,102608,102609,102612,102615,102618,102621,102624],{"class":314,"line":980},[312,102610,102611],{"class":339},"  libX11",[312,102613,102614],{"class":339}," libXcursor",[312,102616,102617],{"class":339}," libXi",[312,102619,102620],{"class":339}," libXinerama",[312,102622,102623],{"class":339}," libXrandr",[312,102625,26474],{"class":488},[312,102627,102628,102631,102634],{"class":314,"line":997},[312,102629,102630],{"class":339},"  gcc",[312,102632,102633],{"class":339}," gcc-c++",[312,102635,102636],{"class":339}," make\n",[24,102638,102639],{},"创建 Python 环境:",[303,102641,102643],{"className":25618,"code":102642,"language":25620,"meta":308,"style":308},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[119,102644,102645,102659,102667],{"__ignoreMap":308},[312,102646,102647,102650,102653,102656],{"class":314,"line":315},[312,102648,102649],{"class":332},"python3",[312,102651,102652],{"class":488}," -m",[312,102654,102655],{"class":339}," venv",[312,102657,102658],{"class":339}," .venv\n",[312,102660,102661,102664],{"class":314,"line":171},[312,102662,102663],{"class":488},"source",[312,102665,102666],{"class":339}," .venv\u002Fbin\u002Factivate\n",[312,102668,102669,102671,102673,102676,102678,102681],{"class":314,"line":274},[312,102670,32176],{"class":332},[312,102672,102652],{"class":488},[312,102674,102675],{"class":339}," pip",[312,102677,25630],{"class":339},[312,102679,102680],{"class":488}," --upgrade",[312,102682,102683],{"class":339}," pip\n",[24,102685,102686],{},"pip 安装:",[303,102688,102690],{"className":25618,"code":102689,"language":25620,"meta":308,"style":308},"pip install \"mujoco>=2.3\" numpy\n",[119,102691,102692],{"__ignoreMap":308},[312,102693,102694,102696,102698,102701],{"class":314,"line":315},[312,102695,25627],{"class":332},[312,102697,25630],{"class":339},[312,102699,102700],{"class":339}," \"mujoco>=2.3\"",[312,102702,102703],{"class":339}," numpy\n",[24,102705,102706],{},"安装完成后，先做最小检查：",[303,102708,102710],{"className":25618,"code":102709,"language":25620,"meta":308,"style":308},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[119,102711,102712],{"__ignoreMap":308},[312,102713,102714,102716,102718],{"class":314,"line":315},[312,102715,32176],{"class":332},[312,102717,32154],{"class":488},[312,102719,102720],{"class":339}," \"import mujoco; print(mujoco.__version__)\"\n",[24,102722,102723],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[24,102725,102726],{},"conda 安装:",[303,102728,102730],{"className":25618,"code":102729,"language":25620,"meta":308,"style":308},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[119,102731,102732,102752,102762],{"__ignoreMap":308},[312,102733,102734,102736,102738,102740,102743,102746,102749],{"class":314,"line":315},[312,102735,32126],{"class":332},[312,102737,30972],{"class":339},[312,102739,26911],{"class":488},[312,102741,102742],{"class":339}," mujoco-study",[312,102744,102745],{"class":339}," python=",[312,102747,102748],{"class":488},"3.10",[312,102750,102751],{"class":488}," -y\n",[312,102753,102754,102756,102759],{"class":314,"line":171},[312,102755,32126],{"class":332},[312,102757,102758],{"class":339}," activate",[312,102760,102761],{"class":339}," mujoco-study\n",[312,102763,102764,102766,102768,102770],{"class":314,"line":274},[312,102765,25627],{"class":332},[312,102767,25630],{"class":339},[312,102769,102700],{"class":339},[312,102771,102703],{"class":339},[24,102773,102774],{},"版本冲突说明:",[140,102776,102777,102783,102792,102801],{},[143,102778,102779,102780,30181],{},"不要安装 ",[119,102781,102782],{},"mujoco-py",[143,102784,102785,102786,1167,102788,102791],{},"如果旧项目里同时安装了 ",[119,102787,102782],{},[119,102789,102790],{},"mujoco","，建议新建干净虚拟环境。",[143,102793,102794,102797,102798,30181],{},[119,102795,102796],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[119,102799,102800],{},"~\u002F.mujoco\u002Fmujoco210",[143,102802,102803,102804,84310,102807,102810],{},"离屏渲染可能涉及 OpenGL 后端，",[119,102805,102806],{},"MUJOCO_GL=egl",[119,102808,102809],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,102812,102814],{"id":102813},"_3核心概念解释","3.核心概念解释",[24,102816,102817],{},"MuJoCo 的基本执行流程:",[303,102819,102822],{"className":102820,"code":102821,"language":6992,"meta":308},[6990],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[119,102823,102821],{"__ignoreMap":308},[24,102825,102826,102828],{},[119,102827,102479],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[24,102830,102831,102833,102834,2159,102837,2159,102840,2159,102843,2159,102846,30181],{},[119,102832,102489],{}," 存放仿真运行时状态，例如 ",[119,102835,102836],{},"data.time",[119,102838,102839],{},"data.qpos",[119,102841,102842],{},"data.qvel",[119,102844,102845],{},"data.ctrl",[119,102847,102848],{},"data.xpos",[69,102850,102852],{"id":102851},"xml-是什么","XML 是什么",[24,102854,102855],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[303,102857,102859],{"className":54853,"code":102858,"language":54855,"meta":308,"style":308},"\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",[119,102860,102861,102883,102914],{"__ignoreMap":308},[312,102862,102863,102865,102867,102869,102871,102873,102876,102878,102881],{"class":314,"line":315},[312,102864,325],{"class":324},[312,102866,53586],{"class":328},[312,102868,16721],{"class":332},[312,102870,336],{"class":324},[312,102872,55276],{"class":339},[312,102874,102875],{"class":332}," pos",[312,102877,336],{"class":324},[312,102879,102880],{"class":339},"\"0 0 1\"",[312,102882,343],{"class":324},[312,102884,102885,102887,102890,102892,102894,102897,102899,102901,102903,102906,102908,102911],{"class":314,"line":171},[312,102886,53930],{"class":324},[312,102888,102889],{"class":328},"geom",[312,102891,16721],{"class":332},[312,102893,336],{"class":324},[312,102895,102896],{"class":339},"\"box_geom\"",[312,102898,55608],{"class":332},[312,102900,336],{"class":324},[312,102902,55276],{"class":339},[312,102904,102905],{"class":332}," size",[312,102907,336],{"class":324},[312,102909,102910],{"class":339},"\"0.1 0.1 0.1\"",[312,102912,102913],{"class":324},"\u002F>\n",[312,102915,102916,102918,102920],{"class":314,"line":274},[312,102917,353],{"class":324},[312,102919,53586],{"class":328},[312,102921,343],{"class":324},[24,102923,102924],{},"这段意思是：",[140,102926,102927,102933,102940],{},[143,102928,102929,102930,102932],{},"创建一个叫 ",[119,102931,55498],{}," 的刚体。",[143,102934,102935,102936,102939],{},"它初始放在 ",[119,102937,102938],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[143,102941,102942],{},"它里面有一个盒子形状的几何体。",[69,102944,102946],{"id":102945},"timestep-是什么","timestep 是什么",[24,102948,102949],{},"XML 里的：",[303,102951,102953],{"className":54853,"code":102952,"language":54855,"meta":308,"style":308},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[119,102954,102955],{"__ignoreMap":308},[312,102956,102957,102959,102961,102964,102966,102969,102972,102974,102977],{"class":314,"line":315},[312,102958,325],{"class":324},[312,102960,70943],{"class":328},[312,102962,102963],{"class":332}," timestep",[312,102965,336],{"class":324},[312,102967,102968],{"class":339},"\"0.01\"",[312,102970,102971],{"class":332}," gravity",[312,102973,336],{"class":324},[312,102975,102976],{"class":339},"\"0 0 -9.81\"",[312,102978,102913],{"class":324},[24,102980,102981,102982,102985,102986,102988],{},"表示每调用一次 ",[119,102983,102984],{},"mj_step","，仿真时间前进 ",[119,102987,40781],{}," 秒。循环 100 次，大约就是 1 秒：",[303,102990,102993],{"className":102991,"code":102992,"language":6992,"meta":308},[6990],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[119,102994,102992],{"__ignoreMap":308},[69,102996,102998],{"id":102997},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[24,103000,103001],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[303,103003,103006],{"className":103004,"code":103005,"language":6992,"meta":308},[6990],"x y z qw qx qy qz\n",[119,103007,103005],{"__ignoreMap":308},[24,103009,103010,103011,103014,103015,103018],{},"表示一个自由刚体的位置和姿态。其中 ",[119,103012,103013],{},"x y z"," 是位置，",[119,103016,103017],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,103020,103022],{"id":103021},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[24,103024,103025],{},"新建文件:",[303,103027,103029],{"className":25618,"code":103028,"language":25620,"meta":308,"style":308},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[119,103030,103031,103041,103048],{"__ignoreMap":308},[312,103032,103033,103036,103038],{"class":314,"line":315},[312,103034,103035],{"class":332},"mkdir",[312,103037,31012],{"class":488},[312,103039,103040],{"class":339}," mujoco_tutorial\n",[312,103042,103043,103046],{"class":314,"line":171},[312,103044,103045],{"class":488},"cd",[312,103047,103040],{"class":339},[312,103049,103050,103053],{"class":314,"line":274},[312,103051,103052],{"class":332},"touch",[312,103054,103055],{"class":339}," ch1_first_sim.py\n",[24,103057,103058],{},"写入:",[303,103060,103062],{"className":32174,"code":103061,"language":32176,"meta":308,"style":308},"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",[119,103063,103064,103071,103075,103079,103089,103094,103099,103103,103108,103113,103117,103122,103127,103132,103137,103142,103147,103151,103155,103159,103172,103186,103196,103200,103212,103224,103236,103248,103260,103264,103281,103286,103290,103301,103312,103316,103320,103334],{"__ignoreMap":308},[312,103065,103066,103068],{"class":314,"line":315},[312,103067,32188],{"class":1436},[312,103069,103070],{"class":324}," mujoco\n",[312,103072,103073],{"class":314,"line":171},[312,103074,4205],{"emptyLinePlaceholder":1881},[312,103076,103077],{"class":314,"line":274},[312,103078,4205],{"emptyLinePlaceholder":1881},[312,103080,103081,103084,103086],{"class":314,"line":298},[312,103082,103083],{"class":488},"XML",[312,103085,15366],{"class":1436},[312,103087,103088],{"class":339}," \"\"\"\n",[312,103090,103091],{"class":314,"line":974},[312,103092,103093],{"class":339},"\u003Cmujoco model=\"first_sim\">\n",[312,103095,103096],{"class":314,"line":980},[312,103097,103098],{"class":339},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[312,103100,103101],{"class":314,"line":997},[312,103102,4205],{"emptyLinePlaceholder":1881},[312,103104,103105],{"class":314,"line":1003},[312,103106,103107],{"class":339},"  \u003Cworldbody>\n",[312,103109,103110],{"class":314,"line":1020},[312,103111,103112],{"class":339},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[312,103114,103115],{"class":314,"line":1026},[312,103116,4205],{"emptyLinePlaceholder":1881},[312,103118,103119],{"class":314,"line":3418},[312,103120,103121],{"class":339},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[312,103123,103124],{"class":314,"line":3423},[312,103125,103126],{"class":339},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[312,103128,103129],{"class":314,"line":3429},[312,103130,103131],{"class":339},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[312,103133,103134],{"class":314,"line":3434},[312,103135,103136],{"class":339},"    \u003C\u002Fbody>\n",[312,103138,103139],{"class":314,"line":3448},[312,103140,103141],{"class":339},"  \u003C\u002Fworldbody>\n",[312,103143,103144],{"class":314,"line":3453},[312,103145,103146],{"class":339},"\u003C\u002Fmujoco>\n",[312,103148,103149],{"class":314,"line":3459},[312,103150,97468],{"class":339},[312,103152,103153],{"class":314,"line":3480},[312,103154,4205],{"emptyLinePlaceholder":1881},[312,103156,103157],{"class":314,"line":3485},[312,103158,4205],{"emptyLinePlaceholder":1881},[312,103160,103161,103163,103165,103168,103170],{"class":314,"line":3499},[312,103162,33742],{"class":1436},[312,103164,3778],{"class":332},[312,103166,103167],{"class":324},"() -> ",[312,103169,97456],{"class":488},[312,103171,5544],{"class":324},[312,103173,103174,103177,103179,103182,103184],{"class":314,"line":3504},[312,103175,103176],{"class":324},"    model ",[312,103178,336],{"class":1436},[312,103180,103181],{"class":324}," mujoco.MjModel.from_xml_string(",[312,103183,103083],{"class":488},[312,103185,1959],{"class":324},[312,103187,103188,103191,103193],{"class":314,"line":3533},[312,103189,103190],{"class":324},"    data ",[312,103192,336],{"class":1436},[312,103194,103195],{"class":324}," mujoco.MjData(model)\n",[312,103197,103198],{"class":314,"line":3538},[312,103199,4205],{"emptyLinePlaceholder":1881},[312,103201,103202,103204,103206,103209],{"class":314,"line":3555},[312,103203,33094],{"class":488},[312,103205,1576],{"class":324},[312,103207,103208],{"class":339},"\"nq:\"",[312,103210,103211],{"class":324},", model.nq)\n",[312,103213,103214,103216,103218,103221],{"class":314,"line":3560},[312,103215,33094],{"class":488},[312,103217,1576],{"class":324},[312,103219,103220],{"class":339},"\"nv:\"",[312,103222,103223],{"class":324},", model.nv)\n",[312,103225,103226,103228,103230,103233],{"class":314,"line":3565},[312,103227,33094],{"class":488},[312,103229,1576],{"class":324},[312,103231,103232],{"class":339},"\"nu:\"",[312,103234,103235],{"class":324},", model.nu)\n",[312,103237,103238,103240,103242,103245],{"class":314,"line":3570},[312,103239,33094],{"class":488},[312,103241,1576],{"class":324},[312,103243,103244],{"class":339},"\"initial time:\"",[312,103246,103247],{"class":324},", data.time)\n",[312,103249,103250,103252,103254,103257],{"class":314,"line":3584},[312,103251,33094],{"class":488},[312,103253,1576],{"class":324},[312,103255,103256],{"class":339},"\"initial qpos:\"",[312,103258,103259],{"class":324},", data.qpos.copy())\n",[312,103261,103262],{"class":314,"line":3589},[312,103263,4205],{"emptyLinePlaceholder":1881},[312,103265,103266,103268,103271,103273,103275,103277,103279],{"class":314,"line":4382},[312,103267,5006],{"class":1436},[312,103269,103270],{"class":324}," _ ",[312,103272,27839],{"class":1436},[312,103274,34238],{"class":488},[312,103276,1576],{"class":324},[312,103278,2256],{"class":488},[312,103280,32582],{"class":324},[312,103282,103283],{"class":314,"line":4396},[312,103284,103285],{"class":324},"        mujoco.mj_step(model, data)\n",[312,103287,103288],{"class":314,"line":4404},[312,103289,4205],{"emptyLinePlaceholder":1881},[312,103291,103292,103294,103296,103299],{"class":314,"line":4409},[312,103293,33094],{"class":488},[312,103295,1576],{"class":324},[312,103297,103298],{"class":339},"\"final time:\"",[312,103300,103247],{"class":324},[312,103302,103303,103305,103307,103310],{"class":314,"line":4415},[312,103304,33094],{"class":488},[312,103306,1576],{"class":324},[312,103308,103309],{"class":339},"\"final qpos:\"",[312,103311,103259],{"class":324},[312,103313,103314],{"class":314,"line":4421},[312,103315,4205],{"emptyLinePlaceholder":1881},[312,103317,103318],{"class":314,"line":4426},[312,103319,4205],{"emptyLinePlaceholder":1881},[312,103321,103322,103324,103326,103329,103332],{"class":314,"line":9751},[312,103323,3338],{"class":1436},[312,103325,33015],{"class":488},[312,103327,103328],{"class":1436}," ==",[312,103330,103331],{"class":339}," \"__main__\"",[312,103333,5544],{"class":324},[312,103335,103336],{"class":314,"line":9775},[312,103337,103338],{"class":324},"    main()\n",[69,103340,103341],{"id":103341},"代码逐段解释",[24,103343,103344],{},"导入库：",[303,103346,103348],{"className":32174,"code":103347,"language":32176,"meta":308,"style":308},"import mujoco\n",[119,103349,103350],{"__ignoreMap":308},[312,103351,103352,103354],{"class":314,"line":315},[312,103353,32188],{"class":1436},[312,103355,103070],{"class":324},[24,103357,103358],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[24,103360,103361],{},"定义 XML：",[303,103363,103365],{"className":32174,"code":103364,"language":32176,"meta":308,"style":308},"XML = \"\"\"\n...\n\"\"\"\n",[119,103366,103367,103375,103380],{"__ignoreMap":308},[312,103368,103369,103371,103373],{"class":314,"line":315},[312,103370,103083],{"class":488},[312,103372,15366],{"class":1436},[312,103374,103088],{"class":339},[312,103376,103377],{"class":314,"line":171},[312,103378,103379],{"class":339},"...\n",[312,103381,103382],{"class":314,"line":274},[312,103383,97468],{"class":339},[24,103385,103386,103387,103390],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[119,103388,103389],{},"freejoint"," 的方块。",[24,103392,103393],{},"编译模型：",[303,103395,103397],{"className":32174,"code":103396,"language":32176,"meta":308,"style":308},"model = mujoco.MjModel.from_xml_string(XML)\n",[119,103398,103399],{"__ignoreMap":308},[312,103400,103401,103404,103406,103408,103410],{"class":314,"line":315},[312,103402,103403],{"class":324},"model ",[312,103405,336],{"class":1436},[312,103407,103181],{"class":324},[312,103409,103083],{"class":488},[312,103411,1959],{"class":324},[24,103413,103414],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[24,103416,103417],{},"创建数据：",[303,103419,103421],{"className":32174,"code":103420,"language":32176,"meta":308,"style":308},"data = mujoco.MjData(model)\n",[119,103422,103423],{"__ignoreMap":308},[312,103424,103425,103428,103430],{"class":314,"line":315},[312,103426,103427],{"class":324},"data ",[312,103429,336],{"class":1436},[312,103431,103195],{"class":324},[24,103433,103434,103436,103437,103439],{},[119,103435,35196],{}," 会保存仿真当前状态。刚创建时，时间是 ",[119,103438,858],{},"，方块还在初始位置。",[24,103441,103442],{},"推进仿真：",[303,103444,103446],{"className":32174,"code":103445,"language":32176,"meta":308,"style":308},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[119,103447,103448,103464],{"__ignoreMap":308},[312,103449,103450,103452,103454,103456,103458,103460,103462],{"class":314,"line":315},[312,103451,4830],{"class":1436},[312,103453,103270],{"class":324},[312,103455,27839],{"class":1436},[312,103457,34238],{"class":488},[312,103459,1576],{"class":324},[312,103461,2256],{"class":488},[312,103463,32582],{"class":324},[312,103465,103466],{"class":314,"line":171},[312,103467,103468],{"class":324},"    mujoco.mj_step(model, data)\n",[24,103470,103471,103472,103474],{},"每次 ",[119,103473,102984],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[69,103476,103477],{"id":103477},"代码逐行细讲",[24,103479,103480],{},"下面把完整代码按新手视角拆开讲。",[303,103482,103483],{"className":32174,"code":103347,"language":32176,"meta":308,"style":308},[119,103484,103485],{"__ignoreMap":308},[312,103486,103487,103489],{"class":314,"line":315},[312,103488,32188],{"class":1436},[312,103490,103070],{"class":324},[24,103492,103493,103495,103496,2159,103498,2159,103500,30181],{},[119,103494,32188],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[119,103497,102445],{},[119,103499,102450],{},[119,103501,103502],{},"mujoco.mj_step",[303,103504,103505],{"className":32174,"code":103364,"language":32176,"meta":308,"style":308},[119,103506,103507,103515,103519],{"__ignoreMap":308},[312,103508,103509,103511,103513],{"class":314,"line":315},[312,103510,103083],{"class":488},[312,103512,15366],{"class":1436},[312,103514,103088],{"class":339},[312,103516,103517],{"class":314,"line":171},[312,103518,103379],{"class":339},[312,103520,103521],{"class":314,"line":274},[312,103522,97468],{"class":339},[24,103524,103525,103527,103528,103531],{},[119,103526,103083],{}," 是一个变量名。右边的三引号 ",[119,103529,103530],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[303,103533,103534],{"className":54853,"code":103093,"language":54855,"meta":308,"style":308},[119,103535,103536],{"__ignoreMap":308},[312,103537,103538,103540,103542,103545,103547,103550],{"class":314,"line":315},[312,103539,325],{"class":324},[312,103541,102790],{"class":328},[312,103543,103544],{"class":332}," model",[312,103546,336],{"class":324},[312,103548,103549],{"class":339},"\"first_sim\"",[312,103551,343],{"class":324},[24,103553,103554,103555,103558,103559,30181],{},"这是 XML 的根标签。",[119,103556,103557],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[119,103560,103561],{},"first_sim",[303,103563,103564],{"className":54853,"code":102952,"language":54855,"meta":308,"style":308},[119,103565,103566],{"__ignoreMap":308},[312,103567,103568,103570,103572,103574,103576,103578,103580,103582,103584],{"class":314,"line":315},[312,103569,325],{"class":324},[312,103571,70943],{"class":328},[312,103573,102963],{"class":332},[312,103575,336],{"class":324},[312,103577,102968],{"class":339},[312,103579,102971],{"class":332},[312,103581,336],{"class":324},[312,103583,102976],{"class":339},[312,103585,102913],{"class":324},[24,103587,103588,103590,103591,103594,103595,103598],{},[119,103589,70943],{}," 用来设置仿真参数。",[119,103592,103593],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[119,103596,103597],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[303,103600,103602],{"className":54853,"code":103601,"language":54855,"meta":308,"style":308},"\u003Cworldbody>\n",[119,103603,103604],{"__ignoreMap":308},[312,103605,103606,103608,103611],{"class":314,"line":315},[312,103607,325],{"class":324},[312,103609,103610],{"class":328},"worldbody",[312,103612,343],{"class":324},[24,103614,103615,103617],{},[119,103616,103610],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[303,103619,103621],{"className":54853,"code":103620,"language":54855,"meta":308,"style":308},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[119,103622,103623],{"__ignoreMap":308},[312,103624,103625,103627,103629,103631,103633,103636,103638,103640,103643,103645,103647,103650,103652,103654,103657],{"class":314,"line":315},[312,103626,325],{"class":324},[312,103628,102889],{"class":328},[312,103630,16721],{"class":332},[312,103632,336],{"class":324},[312,103634,103635],{"class":339},"\"floor\"",[312,103637,55608],{"class":332},[312,103639,336],{"class":324},[312,103641,103642],{"class":339},"\"plane\"",[312,103644,102905],{"class":332},[312,103646,336],{"class":324},[312,103648,103649],{"class":339},"\"2 2 0.1\"",[312,103651,80539],{"class":332},[312,103653,336],{"class":324},[312,103655,103656],{"class":339},"\"0.8 0.8 0.8 1\"",[312,103658,102913],{"class":324},[24,103660,103661,103662,103664,103665,103668,103669,103672,103673,103675],{},"这行创建地面。",[119,103663,102889],{}," 是几何体。",[119,103666,103667],{},"name=\"floor\""," 是名字。",[119,103670,103671],{},"type=\"plane\""," 表示平面。",[119,103674,56892],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[303,103677,103679],{"className":54853,"code":103678,"language":54855,"meta":308,"style":308},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[119,103680,103681],{"__ignoreMap":308},[312,103682,103683,103685,103687,103689,103691,103693,103695,103697,103699],{"class":314,"line":315},[312,103684,325],{"class":324},[312,103686,53586],{"class":328},[312,103688,16721],{"class":332},[312,103690,336],{"class":324},[312,103692,55276],{"class":339},[312,103694,102875],{"class":332},[312,103696,336],{"class":324},[312,103698,102880],{"class":339},[312,103700,343],{"class":324},[24,103702,103703,103704,30181,103706,103709,103710,103712],{},"这行创建一个刚体，名字叫 ",[119,103705,55498],{},[119,103707,103708],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[119,103711,102938],{},"，也就是离地面 1 米高。",[303,103714,103716],{"className":54853,"code":103715,"language":54855,"meta":308,"style":308},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[119,103717,103718],{"__ignoreMap":308},[312,103719,103720,103722,103724,103726,103728,103731],{"class":314,"line":315},[312,103721,325],{"class":324},[312,103723,103389],{"class":328},[312,103725,16721],{"class":332},[312,103727,336],{"class":324},[312,103729,103730],{"class":339},"\"box_free\"",[312,103732,102913],{"class":324},[24,103734,103735,103736,103738],{},"这行很重要。",[119,103737,103389],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[303,103740,103742],{"className":54853,"code":103741,"language":54855,"meta":308,"style":308},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[119,103743,103744],{"__ignoreMap":308},[312,103745,103746,103748,103750,103752,103754,103756,103758,103760,103762,103764,103766,103768,103771,103773,103775,103777,103779,103782],{"class":314,"line":315},[312,103747,325],{"class":324},[312,103749,102889],{"class":328},[312,103751,16721],{"class":332},[312,103753,336],{"class":324},[312,103755,102896],{"class":339},[312,103757,55608],{"class":332},[312,103759,336],{"class":324},[312,103761,55276],{"class":339},[312,103763,102905],{"class":332},[312,103765,336],{"class":324},[312,103767,102910],{"class":339},[312,103769,103770],{"class":332}," mass",[312,103772,336],{"class":324},[312,103774,5483],{"class":339},[312,103776,80539],{"class":332},[312,103778,336],{"class":324},[312,103780,103781],{"class":339},"\"1 0 0 1\"",[312,103783,102913],{"class":324},[24,103785,103786,103787,103790,103791,103794,103795,103798,103799,103802],{},"这行给 box body 添加一个盒子形状。",[119,103788,103789],{},"type=\"box\""," 表示形状是盒子。",[119,103792,103793],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[119,103796,103797],{},"mass=\"1\""," 表示质量是 1。",[119,103800,103801],{},"rgba=\"1 0 0 1\""," 表示红色。",[303,103804,103806],{"className":32174,"code":103805,"language":32176,"meta":308,"style":308},"def main() -> None:\n",[119,103807,103808],{"__ignoreMap":308},[312,103809,103810,103812,103814,103816,103818],{"class":314,"line":315},[312,103811,33742],{"class":1436},[312,103813,3778],{"class":332},[312,103815,103167],{"class":324},[312,103817,97456],{"class":488},[312,103819,5544],{"class":324},[24,103821,103822,103824,103825,103828,103829,103832],{},[119,103823,33742],{}," 用来定义函数。这里定义了一个叫 ",[119,103826,103827],{},"main"," 的函数。",[119,103830,103831],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[303,103834,103835],{"className":32174,"code":103396,"language":32176,"meta":308,"style":308},[119,103836,103837],{"__ignoreMap":308},[312,103838,103839,103841,103843,103845,103847],{"class":314,"line":315},[312,103840,103403],{"class":324},[312,103842,336],{"class":1436},[312,103844,103181],{"class":324},[312,103846,103083],{"class":488},[312,103848,1959],{"class":324},[24,103850,103851,103852,103855],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[119,103853,103854],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[303,103857,103858],{"className":32174,"code":103420,"language":32176,"meta":308,"style":308},[119,103859,103860],{"__ignoreMap":308},[312,103861,103862,103864,103866],{"class":314,"line":315},[312,103863,103427],{"class":324},[312,103865,336],{"class":1436},[312,103867,103195],{"class":324},[24,103869,103870,103871,103873,103874,103876],{},"这行创建仿真数据。",[119,103872,35196],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[119,103875,35196],{}," 都会变化。",[303,103878,103880],{"className":32174,"code":103879,"language":32176,"meta":308,"style":308},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[119,103881,103882,103892,103902],{"__ignoreMap":308},[312,103883,103884,103886,103888,103890],{"class":314,"line":315},[312,103885,32211],{"class":488},[312,103887,1576],{"class":324},[312,103889,103208],{"class":339},[312,103891,103211],{"class":324},[312,103893,103894,103896,103898,103900],{"class":314,"line":171},[312,103895,32211],{"class":488},[312,103897,1576],{"class":324},[312,103899,103220],{"class":339},[312,103901,103223],{"class":324},[312,103903,103904,103906,103908,103910],{"class":314,"line":274},[312,103905,32211],{"class":488},[312,103907,1576],{"class":324},[312,103909,103232],{"class":339},[312,103911,103235],{"class":324},[24,103913,103914,103916,103917,103920,103921,103924,103925,103928,103929,103932],{},[119,103915,32211],{}," 用来输出信息。",[119,103918,103919],{},"model.nq"," 是位置变量数量，",[119,103922,103923],{},"model.nv"," 是速度变量数量，",[119,103926,103927],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[119,103930,103931],{},"nu"," 是 0。",[303,103934,103936],{"className":32174,"code":103935,"language":32176,"meta":308,"style":308},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[119,103937,103938,103948],{"__ignoreMap":308},[312,103939,103940,103942,103944,103946],{"class":314,"line":315},[312,103941,32211],{"class":488},[312,103943,1576],{"class":324},[312,103945,103244],{"class":339},[312,103947,103247],{"class":324},[312,103949,103950,103952,103954,103956],{"class":314,"line":171},[312,103951,32211],{"class":488},[312,103953,1576],{"class":324},[312,103955,103256],{"class":339},[312,103957,103259],{"class":324},[24,103959,103960,103961,103963,103964,103966,103967,103970],{},"这里打印初始时间和初始位置。",[119,103962,102836],{}," 一开始是 0。",[119,103965,102839],{}," 是位置数组。",[119,103968,103969],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[303,103972,103973],{"className":32174,"code":103445,"language":32176,"meta":308,"style":308},[119,103974,103975,103991],{"__ignoreMap":308},[312,103976,103977,103979,103981,103983,103985,103987,103989],{"class":314,"line":315},[312,103978,4830],{"class":1436},[312,103980,103270],{"class":324},[312,103982,27839],{"class":1436},[312,103984,34238],{"class":488},[312,103986,1576],{"class":324},[312,103988,2256],{"class":488},[312,103990,32582],{"class":324},[312,103992,103993],{"class":314,"line":171},[312,103994,103468],{"class":324},[24,103996,103997,103999,104000,104003,104004,104006,104007,104009],{},[119,103998,4830],{}," 是循环。",[119,104001,104002],{},"range(100)"," 表示循环 100 次。",[119,104005,2934],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[119,104008,102984],{},"，仿真就前进一步。",[303,104011,104013],{"className":32174,"code":104012,"language":32176,"meta":308,"style":308},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[119,104014,104015,104025],{"__ignoreMap":308},[312,104016,104017,104019,104021,104023],{"class":314,"line":315},[312,104018,32211],{"class":488},[312,104020,1576],{"class":324},[312,104022,103298],{"class":339},[312,104024,103247],{"class":324},[312,104026,104027,104029,104031,104033],{"class":314,"line":171},[312,104028,32211],{"class":488},[312,104030,1576],{"class":324},[312,104032,103309],{"class":339},[312,104034,103259],{"class":324},[24,104036,104037],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[303,104039,104041],{"className":32174,"code":104040,"language":32176,"meta":308,"style":308},"if __name__ == \"__main__\":\n    main()\n",[119,104042,104043,104055],{"__ignoreMap":308},[312,104044,104045,104047,104049,104051,104053],{"class":314,"line":315},[312,104046,3338],{"class":1436},[312,104048,33015],{"class":488},[312,104050,103328],{"class":1436},[312,104052,103331],{"class":339},[312,104054,5544],{"class":324},[312,104056,104057],{"class":314,"line":171},[312,104058,103338],{"class":324},[24,104060,104061,104062,104065,104066,30181],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[119,104063,104064],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[119,104067,104064],{},[24,104069,104070],{},"运行:",[303,104072,104074],{"className":25618,"code":104073,"language":25620,"meta":308,"style":308},"python ch1_first_sim.py\n",[119,104075,104076],{"__ignoreMap":308},[312,104077,104078,104080],{"class":314,"line":315},[312,104079,32176],{"class":332},[312,104081,103055],{"class":339},[14,104083,104085],{"id":104084},"_5运行结果说明","5.运行结果说明",[24,104087,104088],{},"你应该看到类似输出:",[303,104090,104093],{"className":104091,"code":104092,"language":6992,"meta":308},[6990],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[119,104094,104092],{"__ignoreMap":308},[24,104096,104097,104099,104100,104103,104104,30181],{},[119,104098,103389],{}," 有 7 个位置变量: ",[119,104101,104102],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[119,104105,104106],{},"vx vy vz wx wy wz",[24,104108,104109,104110,104113],{},"你还会看到 ",[119,104111,104112],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,104115,104117],{"id":104116},"_6验证步骤","6.验证步骤",[24,104119,104120],{},"确认版本:",[303,104122,104123],{"className":25618,"code":102709,"language":25620,"meta":308,"style":308},[119,104124,104125],{"__ignoreMap":308},[312,104126,104127,104129,104131],{"class":314,"line":315},[312,104128,32176],{"class":332},[312,104130,32154],{"class":488},[312,104132,102720],{"class":339},[24,104134,104135],{},"确认导入的是官方 bindings:",[303,104137,104139],{"className":25618,"code":104138,"language":25620,"meta":308,"style":308},"python -c \"import mujoco; print(mujoco)\"\n",[119,104140,104141],{"__ignoreMap":308},[312,104142,104143,104145,104147],{"class":314,"line":315},[312,104144,32176],{"class":332},[312,104146,32154],{"class":488},[312,104148,104149],{"class":339}," \"import mujoco; print(mujoco)\"\n",[24,104151,104152],{},"运行程序:",[303,104154,104155],{"className":25618,"code":104073,"language":25620,"meta":308,"style":308},[119,104156,104157],{"__ignoreMap":308},[312,104158,104159,104161],{"class":314,"line":315},[312,104160,32176],{"class":332},[312,104162,103055],{"class":339},[24,104164,104165,104166,104169,104170,30181],{},"检查 ",[119,104167,104168],{},"final time"," 是否约等于 ",[119,104171,104172],{},"1.0",[24,104174,104175],{},"再做几个小实验：",[140,104177,104178,104188,104196,104209],{},[143,104179,104180,104181,104183,104184,104187],{},"把 ",[119,104182,103708],{}," 改成 ",[119,104185,104186],{},"pos=\"0 0 2\"","，观察初始高度变化。",[143,104189,104180,104190,104183,104192,104195],{},[119,104191,103597],{},[119,104193,104194],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[143,104197,104180,104198,104183,104200,104203,104204,104206,104207,30181],{},[119,104199,103593],{},[119,104201,104202],{},"timestep=\"0.005\"","，观察 100 步后的 ",[119,104205,104168],{}," 是否变成约 ",[119,104208,37124],{},[143,104210,104211,104212,104215],{},"删除 ",[119,104213,104214],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[24,104217,104218],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,104220,104222],{"id":104221},"_7常见错误与解决方案","7.常见错误与解决方案",[69,104224,104226],{"id":104225},"modulenotfounderror-no-module-named-mujoco",[119,104227,104228],{},"ModuleNotFoundError: No module named 'mujoco'",[24,104230,104231],{},"解决:",[303,104233,104235],{"className":25618,"code":104234,"language":25620,"meta":308,"style":308},"pip install \"mujoco>=2.3\"\n",[119,104236,104237],{"__ignoreMap":308},[312,104238,104239,104241,104243],{"class":314,"line":315},[312,104240,25627],{"class":332},[312,104242,25630],{"class":339},[312,104244,104245],{"class":339}," \"mujoco>=2.3\"\n",[69,104247,104249],{"id":104248},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[24,104251,104252],{},"先安装系统依赖:",[303,104254,104256],{"className":25618,"code":104255,"language":25620,"meta":308,"style":308},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[119,104257,104258],{"__ignoreMap":308},[312,104259,104260,104262,104264,104266,104268,104271,104273,104276,104278,104281,104283],{"class":314,"line":315},[312,104261,26372],{"class":332},[312,104263,28111],{"class":339},[312,104265,25630],{"class":339},[312,104267,28196],{"class":488},[312,104269,104270],{"class":339}," mesa-libGL",[312,104272,102584],{"class":339},[312,104274,104275],{"class":339}," glfw",[312,104277,102604],{"class":339},[312,104279,104280],{"class":339}," libX11",[312,104282,102617],{"class":339},[312,104284,104285],{"class":339}," libXrandr\n",[69,104287,104289],{"id":104288},"xml-解析失败","XML 解析失败",[24,104291,104292],{},"检查:",[140,104294,104295,104298,104301,104307],{},[143,104296,104297],{},"标签是否闭合",[143,104299,104300],{},"属性是否带引号",[143,104302,104303,104304],{},"根节点是否是 ",[119,104305,104306],{},"\u003Cmujoco>",[143,104308,104309,104311,104312,104315],{},[119,104310,53586],{}," 是否放在 ",[119,104313,104314],{},"\u003Cworldbody>"," 内部",[69,104317,104319,104321,104322],{"id":104318},"final-time-不是严格等于-10",[119,104320,104168],{}," 不是严格等于 ",[119,104323,104172],{},[24,104325,104326],{},"这通常不是错误。浮点数计算可能得到：",[303,104328,104331],{"className":104329,"code":104330,"language":6992,"meta":308},[6990],"1.0000000000000007\n",[119,104332,104330],{"__ignoreMap":308},[24,104334,104335,104336,104338],{},"只要接近 ",[119,104337,104172],{}," 就正常。",[69,104340,104341],{"id":104341},"方块没有掉下来",[24,104343,104344],{},"检查：",[140,104346,104347,104353,104359,104364],{},[143,104348,104349,104350],{},"方块 body 里是否有 ",[119,104351,104352],{},"\u003Cfreejoint\u002F>",[143,104354,104355,104356],{},"重力是否是 ",[119,104357,104358],{},"0 0 -9.81",[143,104360,104361,104362],{},"是否真的调用了 ",[119,104363,102455],{},[143,104365,104366,104367,104369,104370],{},"你看的是否是 ",[119,104368,104112],{},"，不是 ",[119,104371,104372],{},"initial qpos",[14,104374,104376],{"id":104375},"_8本章小结","8.本章小结",[24,104378,104379],{},"本章你已经完成了 MuJoCo 的最小闭环：",[303,104381,104384],{"className":104382,"code":104383,"language":6992,"meta":308},[6990],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[119,104385,104383],{"__ignoreMap":308},[24,104387,104388],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1856,104390,104391],{},"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":308,"searchDepth":171,"depth":171,"links":104393},[104394,104395,104396,104401,104405,104406,104407,104415],{"id":102416,"depth":171,"text":102417},{"id":102539,"depth":171,"text":102540},{"id":102813,"depth":171,"text":102814,"children":104397},[104398,104399,104400],{"id":102851,"depth":274,"text":102852},{"id":102945,"depth":274,"text":102946},{"id":102997,"depth":274,"text":102998},{"id":103021,"depth":171,"text":103022,"children":104402},[104403,104404],{"id":103341,"depth":274,"text":103341},{"id":103477,"depth":274,"text":103477},{"id":104084,"depth":171,"text":104085},{"id":104116,"depth":171,"text":104117},{"id":104221,"depth":171,"text":104222,"children":104408},[104409,104410,104411,104412,104414],{"id":104225,"depth":274,"text":104228},{"id":104248,"depth":274,"text":104249},{"id":104288,"depth":274,"text":104289},{"id":104318,"depth":274,"text":104413},"final time 不是严格等于 1.0",{"id":104341,"depth":274,"text":104341},{"id":104375,"depth":171,"text":104376},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":102408,"description":308},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":104422,"title":104423,"body":104424,"description":308,"extension":1879,"meta":106080,"navigation":1881,"path":106081,"seo":106082,"stem":106083,"__hash__":106084},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":104425,"toc":106056},[104426,104429,104431,104434,104437,104454,104549,104552,104558,104560,104562,104586,104589,104603,104606,104647,104649,104662,104664,104667,104715,104727,104730,104733,104739,104752,104819,104822,104841,104844,104847,104853,104855,104864,104867,104871,104880,104962,104971,104975,104981,104995,105005,105007,105337,105340,105352,105354,105365,105367,105370,105388,105391,105394,105412,105423,105426,105441,105451,105453,105474,105491,105511,105517,105557,105573,105589,105595,105598,105622,105638,105643,105673,105690,105715,105718,105733,105742,105757,105766,105781,105788,105790,105800,105813,105820,105823,105862,105869,105871,105923,105925,105931,105934,105941,105948,105951,105953,105971,105974,105977,106011,106023,106025,106028,106050,106053],[10,104427,104423],{"id":104428},"_2xml-与-mjcf-物理建模基础",[14,104430,102417],{"id":102416},[24,104432,104433],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[24,104435,104436],{},"本章结束后，你应该能看懂一个简单模型里：",[140,104438,104439,104442,104445,104448,104451],{},[143,104440,104441],{},"地面在哪里。",[143,104443,104444],{},"物体初始位置在哪里。",[143,104446,104447],{},"几何体是什么形状。",[143,104449,104450],{},"哪些 body 可以自由运动。",[143,104452,104453],{},"如何用名字在 Python 里找到 XML 中的对象。",[2086,104455,104456,104466],{},[2089,104457,104458],{},[2092,104459,104460,104463],{},[2095,104461,104462],{"align":1374},"标签",[2095,104464,104465],{"align":1374},"作用",[2132,104467,104468,104477,104487,104496,104506,104516,104529,104539],{},[2092,104469,104470,104474],{},[2137,104471,104472],{"align":1374},[119,104473,104306],{},[2137,104475,104476],{"align":1374},"根节点",[2092,104478,104479,104484],{},[2137,104480,104481],{"align":1374},[119,104482,104483],{},"\u003Coption>",[2137,104485,104486],{"align":1374},"仿真参数",[2092,104488,104489,104493],{},[2137,104490,104491],{"align":1374},[119,104492,104314],{},[2137,104494,104495],{"align":1374},"世界中的物体",[2092,104497,104498,104503],{},[2137,104499,104500],{"align":1374},[119,104501,104502],{},"\u003Cbody>",[2137,104504,104505],{"align":1374},"刚体",[2092,104507,104508,104513],{},[2137,104509,104510],{"align":1374},[119,104511,104512],{},"\u003Cgeom>",[2137,104514,104515],{"align":1374},"几何体、碰撞体、可视体",[2092,104517,104518,104526],{},[2137,104519,104520,26774,104523],{"align":1374},[119,104521,104522],{},"\u003Cjoint>",[119,104524,104525],{},"\u003Cfreejoint>",[2137,104527,104528],{"align":1374},"关节",[2092,104530,104531,104536],{},[2137,104532,104533],{"align":1374},[119,104534,104535],{},"\u003Csite>",[2137,104537,104538],{"align":1374},"标记点",[2092,104540,104541,104546],{},[2137,104542,104543],{"align":1374},[119,104544,104545],{},"\u003Cactuator>",[2137,104547,104548],{"align":1374},"控制器",[24,104550,104551],{},"初学时可以先记住：",[303,104553,104556],{"className":104554,"code":104555,"language":6992,"meta":308},[6990],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[119,104557,104555],{"__ignoreMap":308},[14,104559,102540],{"id":102539},[24,104561,102543],{},[303,104563,104565],{"className":25618,"code":104564,"language":25620,"meta":308,"style":308},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[119,104566,104567],{"__ignoreMap":308},[312,104568,104569,104571,104573,104575,104577,104579,104581,104583],{"class":314,"line":315},[312,104570,26372],{"class":332},[312,104572,28111],{"class":339},[312,104574,25630],{"class":339},[312,104576,28196],{"class":488},[312,104578,104270],{"class":339},[312,104580,102584],{"class":339},[312,104582,104275],{"class":339},[312,104584,104585],{"class":339}," glfw-devel\n",[24,104587,104588],{},"pip:",[303,104590,104591],{"className":25618,"code":102689,"language":25620,"meta":308,"style":308},[119,104592,104593],{"__ignoreMap":308},[312,104594,104595,104597,104599,104601],{"class":314,"line":315},[312,104596,25627],{"class":332},[312,104598,25630],{"class":339},[312,104600,102700],{"class":339},[312,104602,102703],{"class":339},[24,104604,104605],{},"conda:",[303,104607,104609],{"className":25618,"code":104608,"language":25620,"meta":308,"style":308},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[119,104610,104611,104628,104637],{"__ignoreMap":308},[312,104612,104613,104615,104617,104619,104622,104624,104626],{"class":314,"line":315},[312,104614,32126],{"class":332},[312,104616,30972],{"class":339},[312,104618,26911],{"class":488},[312,104620,104621],{"class":339}," mujoco-xml",[312,104623,102745],{"class":339},[312,104625,102748],{"class":488},[312,104627,102751],{"class":488},[312,104629,104630,104632,104634],{"class":314,"line":171},[312,104631,32126],{"class":332},[312,104633,102758],{"class":339},[312,104635,104636],{"class":339}," mujoco-xml\n",[312,104638,104639,104641,104643,104645],{"class":314,"line":274},[312,104640,25627],{"class":332},[312,104642,25630],{"class":339},[312,104644,102700],{"class":339},[312,104646,102703],{"class":339},[24,104648,102774],{},[140,104650,104651,104654,104659],{},[143,104652,104653],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[143,104655,104656,104657,30181],{},"本章使用基础标签，适用于 ",[119,104658,102796],{},[143,104660,104661],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104663,102814],{"id":102813},[24,104665,104666],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[303,104668,104670],{"className":54853,"code":104669,"language":54855,"meta":308,"style":308},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[119,104671,104672,104686,104694,104699,104707],{"__ignoreMap":308},[312,104673,104674,104676,104678,104680,104682,104684],{"class":314,"line":315},[312,104675,325],{"class":324},[312,104677,102790],{"class":328},[312,104679,103544],{"class":332},[312,104681,336],{"class":324},[312,104683,64457],{"class":339},[312,104685,343],{"class":324},[312,104687,104688,104690,104692],{"class":314,"line":171},[312,104689,53930],{"class":324},[312,104691,103610],{"class":328},[312,104693,343],{"class":324},[312,104695,104696],{"class":314,"line":274},[312,104697,104698],{"class":324},"    ...\n",[312,104700,104701,104703,104705],{"class":314,"line":298},[312,104702,54203],{"class":324},[312,104704,103610],{"class":328},[312,104706,343],{"class":324},[312,104708,104709,104711,104713],{"class":314,"line":974},[312,104710,353],{"class":324},[312,104712,102790],{"class":328},[312,104714,343],{"class":324},[24,104716,104717,104719,104720,104722,104723,104726],{},[119,104718,53586],{}," 表示刚体。",[119,104721,102889],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[119,104724,104725],{},"joint"," 表示刚体相对父刚体如何运动。",[69,104728,104729],{"id":104729},"层级结构非常重要",[24,104731,104732],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[303,104734,104737],{"className":104735,"code":104736,"language":6992,"meta":308},[6990],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[119,104738,104736],{"__ignoreMap":308},[24,104740,104741,1167,104744,104747,104748,104751],{},[119,104742,104743],{},"red_box_geom",[119,104745,104746],{},"box_center"," 都属于 ",[119,104749,104750],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[303,104753,104755],{"className":54853,"code":104754,"language":54855,"meta":308,"style":308},"\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",[119,104756,104757,104777,104791,104811],{"__ignoreMap":308},[312,104758,104759,104761,104763,104765,104767,104769,104771,104773,104775],{"class":314,"line":315},[312,104760,325],{"class":324},[312,104762,53586],{"class":328},[312,104764,16721],{"class":332},[312,104766,336],{"class":324},[312,104768,55276],{"class":339},[312,104770,102875],{"class":332},[312,104772,336],{"class":324},[312,104774,102880],{"class":339},[312,104776,343],{"class":324},[312,104778,104779,104781,104783,104785,104787,104789],{"class":314,"line":171},[312,104780,53930],{"class":324},[312,104782,103389],{"class":328},[312,104784,16721],{"class":332},[312,104786,336],{"class":324},[312,104788,103730],{"class":339},[312,104790,102913],{"class":324},[312,104792,104793,104795,104797,104799,104801,104803,104805,104807,104809],{"class":314,"line":274},[312,104794,53930],{"class":324},[312,104796,102889],{"class":328},[312,104798,55608],{"class":332},[312,104800,336],{"class":324},[312,104802,55276],{"class":339},[312,104804,102905],{"class":332},[312,104806,336],{"class":324},[312,104808,102910],{"class":339},[312,104810,102913],{"class":324},[312,104812,104813,104815,104817],{"class":314,"line":298},[312,104814,353],{"class":324},[312,104816,53586],{"class":328},[312,104818,343],{"class":324},[24,104820,104821],{},"含义:",[140,104823,104824,104830,104835,104838],{},[143,104825,104826,104827,104829],{},"创建名为 ",[119,104828,55498],{}," 的刚体",[143,104831,104832,104833],{},"初始位置在世界坐标 ",[119,104834,102938],{},[143,104836,104837],{},"它有一个自由关节",[143,104839,104840],{},"它有一个盒子几何体",[69,104842,104843],{"id":104843},"坐标怎么理解",[24,104845,104846],{},"MuJoCo 默认使用三维坐标：",[303,104848,104851],{"className":104849,"code":104850,"language":6992,"meta":308},[6990],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[119,104852,104850],{"__ignoreMap":308},[24,104854,16434],{},[303,104856,104858],{"className":54853,"code":104857,"language":54855,"meta":308,"style":308},"pos=\"0 0 1\"\n",[119,104859,104860],{"__ignoreMap":308},[312,104861,104862],{"class":314,"line":315},[312,104863,104857],{"class":324},[24,104865,104866],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[69,104868,104870],{"id":104869},"geom-的-size-怎么理解","geom 的 size 怎么理解",[24,104872,104873,104874,84301,104877,104879],{},"不同 ",[119,104875,104876],{},"type",[119,104878,33291],{}," 含义不同：",[2086,104881,104882,104897],{},[2089,104883,104884],{},[2092,104885,104886,104890,104895],{},[2095,104887,104888],{"align":1374},[119,104889,104876],{},[2095,104891,104892,104894],{"align":1374},[119,104893,33291],{}," 示例",[2095,104896,102470],{"align":1374},[2132,104898,104899,104913,104928,104947],{},[2092,104900,104901,104905,104910],{},[2137,104902,104903],{"align":1374},[119,104904,55498],{},[2137,104906,104907],{"align":1374},[119,104908,104909],{},"size=\"0.1 0.2 0.3\"",[2137,104911,104912],{"align":1374},"x\u002Fy\u002Fz 半边长，不是完整长度",[2092,104914,104915,104920,104925],{},[2137,104916,104917],{"align":1374},[119,104918,104919],{},"sphere",[2137,104921,104922],{"align":1374},[119,104923,104924],{},"size=\"0.1\"",[2137,104926,104927],{"align":1374},"球半径",[2092,104929,104930,104935,104940],{},[2137,104931,104932],{"align":1374},[119,104933,104934],{},"capsule",[2137,104936,104937],{"align":1374},[119,104938,104939],{},"size=\"0.03\"",[2137,104941,104942,104943,104946],{"align":1374},"胶囊半径，长度常用 ",[119,104944,104945],{},"fromto"," 指定",[2092,104948,104949,104954,104959],{},[2137,104950,104951],{"align":1374},[119,104952,104953],{},"plane",[2137,104955,104956],{"align":1374},[119,104957,104958],{},"size=\"3 3 0.1\"",[2137,104960,104961],{"align":1374},"可视平面大小，通常当地面",[24,104963,104964,104965,104967,104968,104970],{},"最容易踩坑的是 box：",[119,104966,103793],{}," 表示边长大约是 ",[119,104969,33832],{},"，因为 MuJoCo 用的是半边长。",[69,104972,104974],{"id":104973},"site-是什么","site 是什么",[24,104976,104977,104980],{},[119,104978,104979],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[140,104982,104983,104986,104989,104992],{},[143,104984,104985],{},"标记机械臂末端。",[143,104987,104988],{},"标记目标位置。",[143,104990,104991],{},"放传感器或相机参考点。",[143,104993,104994],{},"在 Python 中读取某个关键点的世界坐标。",[24,104996,104997,104998,1167,105001,105004],{},"在后面的 Reacher 任务中，",[119,104999,105000],{},"tip",[119,105002,105003],{},"target"," 就会用 site 表示。",[14,105006,103022],{"id":103021},[303,105008,105010],{"className":32174,"code":105009,"language":32176,"meta":308,"style":308},"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",[119,105011,105012,105018,105028,105032,105036,105044,105049,105053,105057,105061,105066,105070,105075,105080,105085,105090,105094,105098,105102,105106,105110,105114,105126,105138,105146,105150,105165,105180,105184,105197,105212,105225,105238,105242,105258,105262,105266,105277,105289,105301,105313,105317,105321,105333],{"__ignoreMap":308},[312,105013,105014,105016],{"class":314,"line":315},[312,105015,32188],{"class":1436},[312,105017,103070],{"class":324},[312,105019,105020,105022,105024,105026],{"class":314,"line":171},[312,105021,32188],{"class":1436},[312,105023,33175],{"class":324},[312,105025,33178],{"class":1436},[312,105027,33181],{"class":324},[312,105029,105030],{"class":314,"line":274},[312,105031,4205],{"emptyLinePlaceholder":1881},[312,105033,105034],{"class":314,"line":298},[312,105035,4205],{"emptyLinePlaceholder":1881},[312,105037,105038,105040,105042],{"class":314,"line":974},[312,105039,103083],{"class":488},[312,105041,15366],{"class":1436},[312,105043,103088],{"class":339},[312,105045,105046],{"class":314,"line":980},[312,105047,105048],{"class":339},"\u003Cmujoco model=\"xml_basic\">\n",[312,105050,105051],{"class":314,"line":997},[312,105052,103098],{"class":339},[312,105054,105055],{"class":314,"line":1003},[312,105056,4205],{"emptyLinePlaceholder":1881},[312,105058,105059],{"class":314,"line":1020},[312,105060,103107],{"class":339},[312,105062,105063],{"class":314,"line":1026},[312,105064,105065],{"class":339},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[312,105067,105068],{"class":314,"line":3418},[312,105069,4205],{"emptyLinePlaceholder":1881},[312,105071,105072],{"class":314,"line":3423},[312,105073,105074],{"class":339},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[312,105076,105077],{"class":314,"line":3429},[312,105078,105079],{"class":339},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[312,105081,105082],{"class":314,"line":3434},[312,105083,105084],{"class":339},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[312,105086,105087],{"class":314,"line":3448},[312,105088,105089],{"class":339},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[312,105091,105092],{"class":314,"line":3453},[312,105093,103136],{"class":339},[312,105095,105096],{"class":314,"line":3459},[312,105097,103141],{"class":339},[312,105099,105100],{"class":314,"line":3480},[312,105101,103146],{"class":339},[312,105103,105104],{"class":314,"line":3485},[312,105105,97468],{"class":339},[312,105107,105108],{"class":314,"line":3499},[312,105109,4205],{"emptyLinePlaceholder":1881},[312,105111,105112],{"class":314,"line":3504},[312,105113,4205],{"emptyLinePlaceholder":1881},[312,105115,105116,105118,105120,105122,105124],{"class":314,"line":3533},[312,105117,33742],{"class":1436},[312,105119,3778],{"class":332},[312,105121,103167],{"class":324},[312,105123,97456],{"class":488},[312,105125,5544],{"class":324},[312,105127,105128,105130,105132,105134,105136],{"class":314,"line":3538},[312,105129,103176],{"class":324},[312,105131,336],{"class":1436},[312,105133,103181],{"class":324},[312,105135,103083],{"class":488},[312,105137,1959],{"class":324},[312,105139,105140,105142,105144],{"class":314,"line":3555},[312,105141,103190],{"class":324},[312,105143,336],{"class":1436},[312,105145,103195],{"class":324},[312,105147,105148],{"class":314,"line":3560},[312,105149,4205],{"emptyLinePlaceholder":1881},[312,105151,105152,105155,105157,105160,105163],{"class":314,"line":3565},[312,105153,105154],{"class":324},"    box_body_id ",[312,105156,336],{"class":1436},[312,105158,105159],{"class":324}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[312,105161,105162],{"class":339},"\"red_box\"",[312,105164,1959],{"class":324},[312,105166,105167,105170,105172,105175,105178],{"class":314,"line":3570},[312,105168,105169],{"class":324},"    site_id ",[312,105171,336],{"class":1436},[312,105173,105174],{"class":324}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[312,105176,105177],{"class":339},"\"box_center\"",[312,105179,1959],{"class":324},[312,105181,105182],{"class":314,"line":3584},[312,105183,4205],{"emptyLinePlaceholder":1881},[312,105185,105186,105188,105191,105193,105195],{"class":314,"line":3589},[312,105187,4906],{"class":1436},[312,105189,105190],{"class":324}," box_body_id ",[312,105192,325],{"class":1436},[312,105194,5898],{"class":488},[312,105196,5544],{"class":324},[312,105198,105199,105202,105205,105207,105210],{"class":314,"line":4382},[312,105200,105201],{"class":1436},"        raise",[312,105203,105204],{"class":488}," RuntimeError",[312,105206,1576],{"class":324},[312,105208,105209],{"class":339},"\"body red_box not found\"",[312,105211,1959],{"class":324},[312,105213,105214,105216,105219,105221,105223],{"class":314,"line":4396},[312,105215,4906],{"class":1436},[312,105217,105218],{"class":324}," site_id ",[312,105220,325],{"class":1436},[312,105222,5898],{"class":488},[312,105224,5544],{"class":324},[312,105226,105227,105229,105231,105233,105236],{"class":314,"line":4404},[312,105228,105201],{"class":1436},[312,105230,105204],{"class":488},[312,105232,1576],{"class":324},[312,105234,105235],{"class":339},"\"site box_center not found\"",[312,105237,1959],{"class":324},[312,105239,105240],{"class":314,"line":4409},[312,105241,4205],{"emptyLinePlaceholder":1881},[312,105243,105244,105246,105248,105250,105252,105254,105256],{"class":314,"line":4415},[312,105245,5006],{"class":1436},[312,105247,103270],{"class":324},[312,105249,27839],{"class":1436},[312,105251,34238],{"class":488},[312,105253,1576],{"class":324},[312,105255,3528],{"class":488},[312,105257,32582],{"class":324},[312,105259,105260],{"class":314,"line":4421},[312,105261,103285],{"class":324},[312,105263,105264],{"class":314,"line":4426},[312,105265,4205],{"emptyLinePlaceholder":1881},[312,105267,105268,105270,105272,105275],{"class":314,"line":9751},[312,105269,33094],{"class":488},[312,105271,1576],{"class":324},[312,105273,105274],{"class":339},"\"simulation time:\"",[312,105276,103247],{"class":324},[312,105278,105279,105281,105283,105286],{"class":314,"line":9775},[312,105280,33094],{"class":488},[312,105282,1576],{"class":324},[312,105284,105285],{"class":339},"\"box body position:\"",[312,105287,105288],{"class":324},", data.xpos[box_body_id].copy())\n",[312,105290,105291,105293,105295,105298],{"class":314,"line":9780},[312,105292,33094],{"class":488},[312,105294,1576],{"class":324},[312,105296,105297],{"class":339},"\"site position:\"",[312,105299,105300],{"class":324},", data.site_xpos[site_id].copy())\n",[312,105302,105303,105305,105307,105310],{"class":314,"line":9786},[312,105304,33094],{"class":488},[312,105306,1576],{"class":324},[312,105308,105309],{"class":339},"\"box qpos:\"",[312,105311,105312],{"class":324},", np.array(data.qpos))\n",[312,105314,105315],{"class":314,"line":9813},[312,105316,4205],{"emptyLinePlaceholder":1881},[312,105318,105319],{"class":314,"line":9818},[312,105320,4205],{"emptyLinePlaceholder":1881},[312,105322,105323,105325,105327,105329,105331],{"class":314,"line":9824},[312,105324,3338],{"class":1436},[312,105326,33015],{"class":488},[312,105328,103328],{"class":1436},[312,105330,103331],{"class":339},[312,105332,5544],{"class":324},[312,105334,105335],{"class":314,"line":9836},[312,105336,103338],{"class":324},[24,105338,105339],{},"保存为：",[303,105341,105343],{"className":25618,"code":105342,"language":25620,"meta":308,"style":308},"touch ch2_xml_basic.py\n",[119,105344,105345],{"__ignoreMap":308},[312,105346,105347,105349],{"class":314,"line":315},[312,105348,103052],{"class":332},[312,105350,105351],{"class":339}," ch2_xml_basic.py\n",[24,105353,104070],{},[303,105355,105357],{"className":25618,"code":105356,"language":25620,"meta":308,"style":308},"python ch2_xml_basic.py\n",[119,105358,105359],{"__ignoreMap":308},[312,105360,105361,105363],{"class":314,"line":315},[312,105362,32176],{"class":332},[312,105364,105351],{"class":339},[69,105366,103341],{"id":103341},[24,105368,105369],{},"用名字查找 body：",[303,105371,105373],{"className":32174,"code":105372,"language":32176,"meta":308,"style":308},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[119,105374,105375],{"__ignoreMap":308},[312,105376,105377,105380,105382,105384,105386],{"class":314,"line":315},[312,105378,105379],{"class":324},"box_body_id ",[312,105381,336],{"class":1436},[312,105383,105159],{"class":324},[312,105385,105162],{"class":339},[312,105387,1959],{"class":324},[24,105389,105390],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[24,105392,105393],{},"用名字查找 site：",[303,105395,105397],{"className":32174,"code":105396,"language":32176,"meta":308,"style":308},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[119,105398,105399],{"__ignoreMap":308},[312,105400,105401,105404,105406,105408,105410],{"class":314,"line":315},[312,105402,105403],{"class":324},"site_id ",[312,105405,336],{"class":1436},[312,105407,105174],{"class":324},[312,105409,105177],{"class":339},[312,105411,1959],{"class":324},[24,105413,105414,105415,105418,105419,105422],{},"注意第二个参数是对象类型。查 body 就用 ",[119,105416,105417],{},"mjOBJ_BODY","，查 site 就用 ",[119,105420,105421],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[24,105424,105425],{},"读取世界坐标：",[303,105427,105429],{"className":32174,"code":105428,"language":32176,"meta":308,"style":308},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[119,105430,105431,105436],{"__ignoreMap":308},[312,105432,105433],{"class":314,"line":315},[312,105434,105435],{"class":324},"data.xpos[box_body_id]\n",[312,105437,105438],{"class":314,"line":171},[312,105439,105440],{"class":324},"data.site_xpos[site_id]\n",[24,105442,105443,105446,105447,105450],{},[119,105444,105445],{},"xpos"," 是 body 的世界坐标，",[119,105448,105449],{},"site_xpos"," 是 site 的世界坐标。",[69,105452,103477],{"id":103477},[303,105454,105456],{"className":32174,"code":105455,"language":32176,"meta":308,"style":308},"import mujoco\nimport numpy as np\n",[119,105457,105458,105464],{"__ignoreMap":308},[312,105459,105460,105462],{"class":314,"line":315},[312,105461,32188],{"class":1436},[312,105463,103070],{"class":324},[312,105465,105466,105468,105470,105472],{"class":314,"line":171},[312,105467,32188],{"class":1436},[312,105469,33175],{"class":324},[312,105471,33178],{"class":1436},[312,105473,33181],{"class":324},[24,105475,105476,105477,105480,105481,105484,105485,2159,105488,30181],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[119,105478,105479],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[119,105482,105483],{},"as np"," 是习惯写法，后面就可以写 ",[119,105486,105487],{},"np.array(...)",[119,105489,105490],{},"np.round(...)",[303,105492,105493],{"className":32174,"code":103364,"language":32176,"meta":308,"style":308},[119,105494,105495,105503,105507],{"__ignoreMap":308},[312,105496,105497,105499,105501],{"class":314,"line":315},[312,105498,103083],{"class":488},[312,105500,15366],{"class":1436},[312,105502,103088],{"class":339},[312,105504,105505],{"class":314,"line":171},[312,105506,103379],{"class":339},[312,105508,105509],{"class":314,"line":274},[312,105510,97468],{"class":339},[24,105512,105513,105514,30181],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[119,105515,105516],{},"mujoco.MjModel.from_xml_string(XML)",[303,105518,105520],{"className":54853,"code":105519,"language":54855,"meta":308,"style":308},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[119,105521,105522],{"__ignoreMap":308},[312,105523,105524,105526,105528,105530,105532,105534,105536,105538,105541,105543,105545,105548,105550,105552,105555],{"class":314,"line":315},[312,105525,325],{"class":324},[312,105527,104979],{"class":328},[312,105529,16721],{"class":332},[312,105531,336],{"class":324},[312,105533,105177],{"class":339},[312,105535,102875],{"class":332},[312,105537,336],{"class":324},[312,105539,105540],{"class":339},"\"0 0 0\"",[312,105542,102905],{"class":332},[312,105544,336],{"class":324},[312,105546,105547],{"class":339},"\"0.03\"",[312,105549,80539],{"class":332},[312,105551,336],{"class":324},[312,105553,105554],{"class":339},"\"0 1 0 1\"",[312,105556,102913],{"class":324},[24,105558,105559,105561,105562,105565,105566,105568,105569,105572],{},[119,105560,104979],{}," 是标记点。",[119,105563,105564],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[119,105567,104939],{}," 表示显示出来的小球大小。",[119,105570,105571],{},"rgba=\"0 1 0 1\""," 表示绿色。",[303,105574,105575],{"className":32174,"code":105372,"language":32176,"meta":308,"style":308},[119,105576,105577],{"__ignoreMap":308},[312,105578,105579,105581,105583,105585,105587],{"class":314,"line":315},[312,105580,105379],{"class":324},[312,105582,336],{"class":1436},[312,105584,105159],{"class":324},[312,105586,105162],{"class":339},[312,105588,1959],{"class":324},[24,105590,105591,105592,105594],{},"这行的作用是：根据名字 ",[119,105593,105162],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[24,105596,105597],{},"拆开看：",[140,105599,105600,105606,105611,105617],{},[143,105601,105602,105605],{},[119,105603,105604],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[143,105607,105608,105610],{},[119,105609,103854],{}," 是被查询的模型。",[143,105612,105613,105616],{},[119,105614,105615],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[143,105618,105619,105621],{},[119,105620,105162],{}," 是 XML 里写的名字。",[303,105623,105624],{"className":32174,"code":105396,"language":32176,"meta":308,"style":308},[119,105625,105626],{"__ignoreMap":308},[312,105627,105628,105630,105632,105634,105636],{"class":314,"line":315},[312,105629,105403],{"class":324},[312,105631,336],{"class":1436},[312,105633,105174],{"class":324},[312,105635,105177],{"class":339},[312,105637,1959],{"class":324},[24,105639,105640,105641,30181],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[119,105642,105177],{},[303,105644,105646],{"className":32174,"code":105645,"language":32176,"meta":308,"style":308},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[119,105647,105648,105660],{"__ignoreMap":308},[312,105649,105650,105652,105654,105656,105658],{"class":314,"line":315},[312,105651,3338],{"class":1436},[312,105653,105190],{"class":324},[312,105655,325],{"class":1436},[312,105657,5898],{"class":488},[312,105659,5544],{"class":324},[312,105661,105662,105665,105667,105669,105671],{"class":314,"line":171},[312,105663,105664],{"class":1436},"    raise",[312,105666,105204],{"class":488},[312,105668,1576],{"class":324},[312,105670,105209],{"class":339},[312,105672,1959],{"class":324},[24,105674,105675,105677,105678,105681,105682,105685,105686,105689],{},[119,105676,3338],{}," 是条件判断。",[119,105679,105680],{},"mj_name2id"," 找不到对象时会返回 ",[119,105683,105684],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[119,105687,105688],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[303,105691,105693],{"className":32174,"code":105692,"language":32176,"meta":308,"style":308},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[119,105694,105695,105711],{"__ignoreMap":308},[312,105696,105697,105699,105701,105703,105705,105707,105709],{"class":314,"line":315},[312,105698,4830],{"class":1436},[312,105700,103270],{"class":324},[312,105702,27839],{"class":1436},[312,105704,34238],{"class":488},[312,105706,1576],{"class":324},[312,105708,3528],{"class":488},[312,105710,32582],{"class":324},[312,105712,105713],{"class":314,"line":171},[312,105714,103468],{"class":324},[24,105716,105717],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[303,105719,105721],{"className":32174,"code":105720,"language":32176,"meta":308,"style":308},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[119,105722,105723],{"__ignoreMap":308},[312,105724,105725,105727,105729,105731],{"class":314,"line":315},[312,105726,32211],{"class":488},[312,105728,1576],{"class":324},[312,105730,105285],{"class":339},[312,105732,105288],{"class":324},[24,105734,105735,105737,105738,105741],{},[119,105736,102848],{}," 保存所有 body 的世界坐标。",[119,105739,105740],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[303,105743,105745],{"className":32174,"code":105744,"language":32176,"meta":308,"style":308},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[119,105746,105747],{"__ignoreMap":308},[312,105748,105749,105751,105753,105755],{"class":314,"line":315},[312,105750,32211],{"class":488},[312,105752,1576],{"class":324},[312,105754,105297],{"class":339},[312,105756,105300],{"class":324},[24,105758,105759,105762,105763,105765],{},[119,105760,105761],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[119,105764,104746],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[303,105767,105769],{"className":32174,"code":105768,"language":32176,"meta":308,"style":308},"print(\"box qpos:\", np.array(data.qpos))\n",[119,105770,105771],{"__ignoreMap":308},[312,105772,105773,105775,105777,105779],{"class":314,"line":315},[312,105774,32211],{"class":488},[312,105776,1576],{"class":324},[312,105778,105309],{"class":339},[312,105780,105312],{"class":324},[24,105782,105783,105784,105787],{},"这里打印广义位置数组。",[119,105785,105786],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,105789,104085],{"id":104084},[24,105791,105792,105793,105796,105797,30181],{},"程序会输出 ",[119,105794,105795],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[119,105798,105799],{},"qpos",[24,105801,105802,105804,105805,105808,105809,105812],{},[119,105803,105740],{}," 是 body 的世界坐标位置。",[119,105806,105807],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[119,105810,105811],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[24,105814,83993,105815,84301,105817,105819],{},[119,105816,104746],{},[119,105818,105564],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[24,105821,105822],{},"如果你把 site 改成：",[303,105824,105826],{"className":54853,"code":105825,"language":54855,"meta":308,"style":308},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[119,105827,105828],{"__ignoreMap":308},[312,105829,105830,105832,105834,105836,105838,105841,105843,105845,105848,105850,105852,105854,105856,105858,105860],{"class":314,"line":315},[312,105831,325],{"class":324},[312,105833,104979],{"class":328},[312,105835,16721],{"class":332},[312,105837,336],{"class":324},[312,105839,105840],{"class":339},"\"box_top\"",[312,105842,102875],{"class":332},[312,105844,336],{"class":324},[312,105846,105847],{"class":339},"\"0 0 0.15\"",[312,105849,102905],{"class":332},[312,105851,336],{"class":324},[312,105853,105547],{"class":339},[312,105855,80539],{"class":332},[312,105857,336],{"class":324},[312,105859,105554],{"class":339},[312,105861,102913],{"class":324},[24,105863,105864,105865,105868],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[119,105866,105867],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105870,104117],{"id":104116},[140,105872,105873,105882,105885,105892,105898,105909],{},[143,105874,104180,105875,105877,105878,104183,105880,30181],{},[119,105876,104750],{}," 的初始高度从 ",[119,105879,1433],{},[119,105881,2027],{},[143,105883,105884],{},"重新运行程序。",[143,105886,105887,105888,105891],{},"观察 ",[119,105889,105890],{},"box qpos"," 和最终位置是否变化。",[143,105893,105894,105895,105897],{},"故意把 ",[119,105896,104979],{}," 名称改错，确认程序能报错。",[143,105899,104180,105900,105902,105903,104183,105905,105908],{},[119,105901,102889],{}," 的颜色 ",[119,105904,103801],{},[119,105906,105907],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[143,105910,104180,105911,84301,105913,104183,105916,105919,105920,105922],{},[119,105912,104746],{},[119,105914,105915],{},"pos",[119,105917,105918],{},"0 0 0.2","，观察 ",[119,105921,105867],{}," 如何变化。",[14,105924,104222],{"id":104221},[69,105926,105928],{"id":105927},"xml-error-schema-violation",[119,105929,105930],{},"XML Error: Schema violation",[24,105932,105933],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[69,105935,105937,83061,105939],{"id":105936},"mj_name2id-返回-1",[119,105938,105680],{},[119,105940,105684],{},[24,105942,105943,105944,105947],{},"说明名字没有找到。检查 XML 中 ",[119,105945,105946],{},"name=\"...\"","，并确认对象类型正确。",[69,105949,105950],{"id":105950},"物体不下落",[24,105952,104292],{},[140,105954,105955,105960,105965],{},[143,105956,105957,105958],{},"body 是否有 ",[119,105959,103389],{},[143,105961,105962,105963],{},"gravity 是否为 ",[119,105964,104358],{},[143,105966,105967,105968,105970],{},"body 是否被固定在 ",[119,105969,103610],{}," 中",[69,105972,105973],{"id":105973},"坐标看起来不符合预期",[24,105975,105976],{},"先区分两种坐标：",[2086,105978,105979,105988],{},[2089,105980,105981],{},[2092,105982,105983,105986],{},[2095,105984,105985],{"align":1374},"坐标",[2095,105987,102470],{"align":1374},[2132,105989,105990,106000],{},[2092,105991,105992,105997],{},[2137,105993,105994,105995],{"align":1374},"XML 里的 ",[119,105996,105915],{},[2137,105998,105999],{"align":1374},"相对父 body 的局部坐标",[2092,106001,106002,106008],{},[2137,106003,106004,26774,106006],{"align":1374},[119,106005,102848],{},[119,106007,105761],{},[2137,106009,106010],{"align":1374},"仿真更新后的世界坐标",[24,106012,106013,106014,106016,106017,84310,106020,106022],{},"如果你修改了 ",[119,106015,102839],{},"，但还没调用 ",[119,106018,106019],{},"mj_forward",[119,106021,102984],{},"，世界坐标可能还没有更新。",[14,106024,104376],{"id":104375},[24,106026,106027],{},"MJCF 建模先掌握四件事：",[140,106029,106030,106035,106040,106045],{},[143,106031,106032,106034],{},[119,106033,53586],{}," 表示刚体层级。",[143,106036,106037,106039],{},[119,106038,102889],{}," 表示形状、碰撞和质量。",[143,106041,106042,106044],{},[119,106043,104725],{}," 决定 body 能不能动、怎么动。",[143,106046,106047,106049],{},[119,106048,104979],{}," 用来标记关键点，方便 Python 读取位置。",[24,106051,106052],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1856,106054,106055],{},"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":308,"searchDepth":171,"depth":171,"links":106057},[106058,106059,106060,106066,106070,106071,106072,106079],{"id":102416,"depth":171,"text":102417},{"id":102539,"depth":171,"text":102540},{"id":102813,"depth":171,"text":102814,"children":106061},[106062,106063,106064,106065],{"id":104729,"depth":274,"text":104729},{"id":104843,"depth":274,"text":104843},{"id":104869,"depth":274,"text":104870},{"id":104973,"depth":274,"text":104974},{"id":103021,"depth":171,"text":103022,"children":106067},[106068,106069],{"id":103341,"depth":274,"text":103341},{"id":103477,"depth":274,"text":103477},{"id":104084,"depth":171,"text":104085},{"id":104116,"depth":171,"text":104117},{"id":104221,"depth":171,"text":104222,"children":106073},[106074,106075,106077,106078],{"id":105927,"depth":274,"text":105930},{"id":105936,"depth":274,"text":106076},"mj_name2id 返回 -1",{"id":105950,"depth":274,"text":105950},{"id":105973,"depth":274,"text":105973},{"id":104375,"depth":171,"text":104376},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":104423,"description":308},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":106086,"title":106087,"body":106088,"description":308,"extension":1879,"meta":107583,"navigation":1881,"path":107584,"seo":107585,"stem":107586,"__hash__":107587},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":106089,"toc":107555},[106090,106093,106095,106098,106101,106139,106142,106148,106151,106153,106155,106182,106184,106198,106200,106241,106243,106267,106269,106272,106281,106290,106293,106302,106310,106319,106322,106332,106335,106387,106394,106400,106408,106456,106459,106478,106481,106489,106493,106502,106535,106537,106885,106887,106899,106901,106912,106914,106917,106938,106944,106947,106972,106982,106985,106993,106996,106999,107020,107031,107033,107053,107056,107077,107086,107105,107111,107136,107139,107153,107160,107184,107187,107195,107204,107220,107232,107240,107249,107251,107254,107278,107283,107286,107308,107310,107349,107351,107358,107360,107368,107371,107374,107386,107427,107434,107445,107452,107455,107504,107507,107510,107516,107518,107523,107549,107552],[10,106091,106087],{"id":106092},"_3python-控制接口读取状态与推进仿真",[14,106094,102417],{"id":102416},[24,106096,106097],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[24,106099,106100],{},"你将学习:",[140,106102,106103,106108,106113,106117,106122,106133],{},[143,106104,106105],{},[119,106106,106107],{},"MjModel.from_xml_string",[143,106109,106110],{},[119,106111,106112],{},"MjData(model)",[143,106114,106115],{},[119,106116,102984],{},[143,106118,106119],{},[119,106120,106121],{},"mj_resetData",[143,106123,106124,106125,2159,106127,2159,106130],{},"读取 ",[119,106126,105799],{},[119,106128,106129],{},"qvel",[119,106131,106132],{},"ctrl",[143,106134,106135,106136],{},"使用 ",[119,106137,106138],{},"model.opt.timestep",[24,106140,106141],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[303,106143,106146],{"className":106144,"code":106145,"language":6992,"meta":308},[6990],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[119,106147,106145],{"__ignoreMap":308},[24,106149,106150],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,106152,102540],{"id":102539},[24,106154,102543],{},[303,106156,106158],{"className":25618,"code":106157,"language":25620,"meta":308,"style":308},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[119,106159,106160],{"__ignoreMap":308},[312,106161,106162,106164,106166,106168,106170,106173,106175,106177,106179],{"class":314,"line":315},[312,106163,26372],{"class":332},[312,106165,28111],{"class":339},[312,106167,25630],{"class":339},[312,106169,28196],{"class":488},[312,106171,106172],{"class":339}," python3",[312,106174,102568],{"class":339},[312,106176,104270],{"class":339},[312,106178,102584],{"class":339},[312,106180,106181],{"class":339}," glfw\n",[24,106183,104588],{},[303,106185,106186],{"className":25618,"code":102689,"language":25620,"meta":308,"style":308},[119,106187,106188],{"__ignoreMap":308},[312,106189,106190,106192,106194,106196],{"class":314,"line":315},[312,106191,25627],{"class":332},[312,106193,25630],{"class":339},[312,106195,102700],{"class":339},[312,106197,102703],{"class":339},[24,106199,104605],{},[303,106201,106203],{"className":25618,"code":106202,"language":25620,"meta":308,"style":308},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[119,106204,106205,106222,106231],{"__ignoreMap":308},[312,106206,106207,106209,106211,106213,106216,106218,106220],{"class":314,"line":315},[312,106208,32126],{"class":332},[312,106210,30972],{"class":339},[312,106212,26911],{"class":488},[312,106214,106215],{"class":339}," mujoco-python-api",[312,106217,102745],{"class":339},[312,106219,102748],{"class":488},[312,106221,102751],{"class":488},[312,106223,106224,106226,106228],{"class":314,"line":171},[312,106225,32126],{"class":332},[312,106227,102758],{"class":339},[312,106229,106230],{"class":339}," mujoco-python-api\n",[312,106232,106233,106235,106237,106239],{"class":314,"line":274},[312,106234,25627],{"class":332},[312,106236,25630],{"class":339},[312,106238,102700],{"class":339},[312,106240,102703],{"class":339},[24,106242,102774],{},[140,106244,106245,106252,106261],{},[143,106246,106247,1167,106249,106251],{},[119,106248,102445],{},[119,106250,102450],{}," 是官方 Python bindings 的类名。",[143,106253,106254,106255,106258,106259,30181],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[119,106256,106257],{},"mjModel"," 在 Python 中是 ",[119,106260,102479],{},[143,106262,106263,106264,30181],{},"不要使用 ",[119,106265,106266],{},"sim = mujoco_py.MjSim(...)",[14,106268,102814],{"id":102813},[24,106270,106271],{},"仿真推进核心代码:",[303,106273,106275],{"className":32174,"code":106274,"language":32176,"meta":308,"style":308},"mujoco.mj_step(model, data)\n",[119,106276,106277],{"__ignoreMap":308},[312,106278,106279],{"class":314,"line":315},[312,106280,106274],{"class":324},[24,106282,106283,106284,2159,106286,2159,106288,30181],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[119,106285,102839],{},[119,106287,102842],{},[119,106289,102836],{},[24,106291,106292],{},"重置仿真:",[303,106294,106296],{"className":32174,"code":106295,"language":32176,"meta":308,"style":308},"mujoco.mj_resetData(model, data)\n",[119,106297,106298],{"__ignoreMap":308},[312,106299,106300],{"class":314,"line":315},[312,106301,106295],{"class":324},[24,106303,106304,106305,84310,106307,106309],{},"如果手动修改了 ",[119,106306,102839],{},[119,106308,102842],{},"，通常应调用:",[303,106311,106313],{"className":32174,"code":106312,"language":32176,"meta":308,"style":308},"mujoco.mj_forward(model, data)\n",[119,106314,106315],{"__ignoreMap":308},[312,106316,106317],{"class":314,"line":315},[312,106318,106312],{"class":324},[24,106320,106321],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[69,106323,106325,2159,106327,2159,106329,106331],{"id":106324},"qposqvelctrl-是什么",[119,106326,105799],{},[119,106328,106129],{},[119,106330,106132],{}," 是什么",[24,106333,106334],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[2086,106336,106337,106349],{},[2089,106338,106339],{},[2092,106340,106341,106344,106346],{},[2095,106342,106343],{"align":1374},"字段",[2095,106345,102470],{"align":1374},[2095,106347,106348],{"align":1374},"谁来修改",[2132,106350,106351,106363,106375],{},[2092,106352,106353,106357,106360],{},[2137,106354,106355],{"align":1374},[119,106356,102839],{},[2137,106358,106359],{"align":1374},"广义位置，例如小车位置、关节角、自由物体位置姿态",[2137,106361,106362],{"align":1374},"MuJoCo 更新，也可以手动设置初始状态",[2092,106364,106365,106369,106372],{},[2137,106366,106367],{"align":1374},[119,106368,102842],{},[2137,106370,106371],{"align":1374},"广义速度，例如小车速度、关节角速度",[2137,106373,106374],{"align":1374},"MuJoCo 更新，也可以手动清零",[2092,106376,106377,106381,106384],{},[2137,106378,106379],{"align":1374},[119,106380,102845],{},[2137,106382,106383],{"align":1374},"actuator 的控制输入",[2137,106385,106386],{"align":1374},"主要由你的控制代码写入",[24,106388,10828,106389,1167,106391,106393],{},[119,106390,105799],{},[119,106392,106129],{}," 不一定同维。自由刚体就是典型例子：",[303,106395,106398],{"className":106396,"code":106397,"language":6992,"meta":308},[6990],"freejoint: qpos 7 维，qvel 6 维\n",[119,106399,106397],{"__ignoreMap":308},[69,106401,106403,1167,106405,106407],{"id":106402},"mj_step-和-mj_forward-的区别",[119,106404,102984],{},[119,106406,106019],{}," 的区别",[2086,106409,106410,106423],{},[2089,106411,106412],{},[2092,106413,106414,106417,106420],{},[2095,106415,106416],{"align":1374},"函数",[2095,106418,106419],{"align":1374},"是否推进时间",[2095,106421,106422],{"align":1374},"什么时候用",[2132,106424,106425,106438],{},[2092,106426,106427,106432,106435],{},[2137,106428,106429],{"align":1374},[119,106430,106431],{},"mj_step(model, data)",[2137,106433,106434],{"align":1374},"是",[2137,106436,106437],{"align":1374},"正常仿真循环，每调用一次前进一步",[2092,106439,106440,106445,106448],{},[2137,106441,106442],{"align":1374},[119,106443,106444],{},"mj_forward(model, data)",[2137,106446,106447],{"align":1374},"否",[2137,106449,106450,106451,2159,106453,106455],{"align":1374},"手动改了 ",[119,106452,105799],{},[119,106454,106129],{}," 后，刷新派生量",[24,106457,106458],{},"例如你写：",[303,106460,106462],{"className":32174,"code":106461,"language":32176,"meta":308,"style":308},"data.qpos[2] = 2.0\n",[119,106463,106464],{"__ignoreMap":308},[312,106465,106466,106469,106471,106473,106475],{"class":314,"line":315},[312,106467,106468],{"class":324},"data.qpos[",[312,106470,2027],{"class":488},[312,106472,6248],{"class":324},[312,106474,336],{"class":1436},[312,106476,106477],{"class":488}," 2.0\n",[24,106479,106480],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[303,106482,106483],{"className":32174,"code":106312,"language":32176,"meta":308,"style":308},[119,106484,106485],{"__ignoreMap":308},[312,106486,106487],{"class":314,"line":315},[312,106488,106312],{"class":324},[69,106490,106492],{"id":106491},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[24,106494,106495,106498,106499,106501],{},[119,106496,106497],{},"mujoco.mj_resetData(model, data)"," 会把 ",[119,106500,35196],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[303,106503,106505],{"className":32174,"code":106504,"language":32176,"meta":308,"style":308},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[119,106506,106507,106511,106521,106531],{"__ignoreMap":308},[312,106508,106509],{"class":314,"line":315},[312,106510,106295],{"class":324},[312,106512,106513,106516,106518],{"class":314,"line":171},[312,106514,106515],{"class":324},"data.qpos[:] ",[312,106517,336],{"class":1436},[312,106519,106520],{"class":324}," random_qpos\n",[312,106522,106523,106526,106528],{"class":314,"line":274},[312,106524,106525],{"class":324},"data.qvel[:] ",[312,106527,336],{"class":1436},[312,106529,106530],{"class":488}," 0.0\n",[312,106532,106533],{"class":314,"line":298},[312,106534,106312],{"class":324},[14,106536,103022],{"id":103021},[303,106538,106540],{"className":32174,"code":106539,"language":32176,"meta":308,"style":308},"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",[119,106541,106542,106548,106558,106562,106566,106574,106579,106583,106587,106591,106596,106600,106605,106610,106615,106619,106623,106627,106631,106635,106639,106658,106665,106677,106688,106704,106720,106724,106728,106740,106752,106760,106764,106775,106779,106795,106799,106803,106812,106816,106821,106830,106834,106847,106852,106861,106865,106869,106881],{"__ignoreMap":308},[312,106543,106544,106546],{"class":314,"line":315},[312,106545,32188],{"class":1436},[312,106547,103070],{"class":324},[312,106549,106550,106552,106554,106556],{"class":314,"line":171},[312,106551,32188],{"class":1436},[312,106553,33175],{"class":324},[312,106555,33178],{"class":1436},[312,106557,33181],{"class":324},[312,106559,106560],{"class":314,"line":274},[312,106561,4205],{"emptyLinePlaceholder":1881},[312,106563,106564],{"class":314,"line":298},[312,106565,4205],{"emptyLinePlaceholder":1881},[312,106567,106568,106570,106572],{"class":314,"line":974},[312,106569,103083],{"class":488},[312,106571,15366],{"class":1436},[312,106573,103088],{"class":339},[312,106575,106576],{"class":314,"line":980},[312,106577,106578],{"class":339},"\u003Cmujoco model=\"state_api\">\n",[312,106580,106581],{"class":314,"line":997},[312,106582,103098],{"class":339},[312,106584,106585],{"class":314,"line":1003},[312,106586,4205],{"emptyLinePlaceholder":1881},[312,106588,106589],{"class":314,"line":1020},[312,106590,103107],{"class":339},[312,106592,106593],{"class":314,"line":1026},[312,106594,106595],{"class":339},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[312,106597,106598],{"class":314,"line":3418},[312,106599,4205],{"emptyLinePlaceholder":1881},[312,106601,106602],{"class":314,"line":3423},[312,106603,106604],{"class":339},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[312,106606,106607],{"class":314,"line":3429},[312,106608,106609],{"class":339},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[312,106611,106612],{"class":314,"line":3434},[312,106613,106614],{"class":339},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[312,106616,106617],{"class":314,"line":3448},[312,106618,103136],{"class":339},[312,106620,106621],{"class":314,"line":3453},[312,106622,103141],{"class":339},[312,106624,106625],{"class":314,"line":3459},[312,106626,103146],{"class":339},[312,106628,106629],{"class":314,"line":3480},[312,106630,97468],{"class":339},[312,106632,106633],{"class":314,"line":3485},[312,106634,4205],{"emptyLinePlaceholder":1881},[312,106636,106637],{"class":314,"line":3499},[312,106638,4205],{"emptyLinePlaceholder":1881},[312,106640,106641,106643,106646,106649,106651,106654,106656],{"class":314,"line":3504},[312,106642,33742],{"class":1436},[312,106644,106645],{"class":332}," print_state",[312,106647,106648],{"class":324},"(prefix: ",[312,106650,3110],{"class":488},[312,106652,106653],{"class":324},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[312,106655,97456],{"class":488},[312,106657,5544],{"class":324},[312,106659,106660,106662],{"class":314,"line":3533},[312,106661,33094],{"class":488},[312,106663,106664],{"class":324},"(prefix)\n",[312,106666,106667,106669,106671,106674],{"class":314,"line":3538},[312,106668,33094],{"class":488},[312,106670,1576],{"class":324},[312,106672,106673],{"class":339},"\"  timestep:\"",[312,106675,106676],{"class":324},", model.opt.timestep)\n",[312,106678,106679,106681,106683,106686],{"class":314,"line":3555},[312,106680,33094],{"class":488},[312,106682,1576],{"class":324},[312,106684,106685],{"class":339},"\"  time:\"",[312,106687,103247],{"class":324},[312,106689,106690,106692,106694,106697,106700,106702],{"class":314,"line":3560},[312,106691,33094],{"class":488},[312,106693,1576],{"class":324},[312,106695,106696],{"class":339},"\"  qpos:\"",[312,106698,106699],{"class":324},", np.round(data.qpos.copy(), ",[312,106701,2238],{"class":488},[312,106703,32293],{"class":324},[312,106705,106706,106708,106710,106713,106716,106718],{"class":314,"line":3565},[312,106707,33094],{"class":488},[312,106709,1576],{"class":324},[312,106711,106712],{"class":339},"\"  qvel:\"",[312,106714,106715],{"class":324},", np.round(data.qvel.copy(), ",[312,106717,2238],{"class":488},[312,106719,32293],{"class":324},[312,106721,106722],{"class":314,"line":3570},[312,106723,4205],{"emptyLinePlaceholder":1881},[312,106725,106726],{"class":314,"line":3584},[312,106727,4205],{"emptyLinePlaceholder":1881},[312,106729,106730,106732,106734,106736,106738],{"class":314,"line":3589},[312,106731,33742],{"class":1436},[312,106733,3778],{"class":332},[312,106735,103167],{"class":324},[312,106737,97456],{"class":488},[312,106739,5544],{"class":324},[312,106741,106742,106744,106746,106748,106750],{"class":314,"line":4382},[312,106743,103176],{"class":324},[312,106745,336],{"class":1436},[312,106747,103181],{"class":324},[312,106749,103083],{"class":488},[312,106751,1959],{"class":324},[312,106753,106754,106756,106758],{"class":314,"line":4396},[312,106755,103190],{"class":324},[312,106757,336],{"class":1436},[312,106759,103195],{"class":324},[312,106761,106762],{"class":314,"line":4404},[312,106763,4205],{"emptyLinePlaceholder":1881},[312,106765,106766,106769,106772],{"class":314,"line":4409},[312,106767,106768],{"class":324},"    print_state(",[312,106770,106771],{"class":339},"\"initial\"",[312,106773,106774],{"class":324},", model, data)\n",[312,106776,106777],{"class":314,"line":4415},[312,106778,4205],{"emptyLinePlaceholder":1881},[312,106780,106781,106783,106785,106787,106789,106791,106793],{"class":314,"line":4421},[312,106782,5006],{"class":1436},[312,106784,103270],{"class":324},[312,106786,27839],{"class":1436},[312,106788,34238],{"class":488},[312,106790,1576],{"class":324},[312,106792,2601],{"class":488},[312,106794,32582],{"class":324},[312,106796,106797],{"class":314,"line":4426},[312,106798,103285],{"class":324},[312,106800,106801],{"class":314,"line":9751},[312,106802,4205],{"emptyLinePlaceholder":1881},[312,106804,106805,106807,106810],{"class":314,"line":9775},[312,106806,106768],{"class":324},[312,106808,106809],{"class":339},"\"after 50 steps\"",[312,106811,106774],{"class":324},[312,106813,106814],{"class":314,"line":9780},[312,106815,4205],{"emptyLinePlaceholder":1881},[312,106817,106818],{"class":314,"line":9786},[312,106819,106820],{"class":324},"    mujoco.mj_resetData(model, data)\n",[312,106822,106823,106825,106828],{"class":314,"line":9813},[312,106824,106768],{"class":324},[312,106826,106827],{"class":339},"\"after reset\"",[312,106829,106774],{"class":324},[312,106831,106832],{"class":314,"line":9818},[312,106833,4205],{"emptyLinePlaceholder":1881},[312,106835,106836,106839,106841,106843,106845],{"class":314,"line":9824},[312,106837,106838],{"class":324},"    data.qpos[",[312,106840,2027],{"class":488},[312,106842,6248],{"class":324},[312,106844,336],{"class":1436},[312,106846,106477],{"class":488},[312,106848,106849],{"class":314,"line":9836},[312,106850,106851],{"class":324},"    mujoco.mj_forward(model, data)\n",[312,106853,106854,106856,106859],{"class":314,"line":9848},[312,106855,106768],{"class":324},[312,106857,106858],{"class":339},"\"after manual qpos edit\"",[312,106860,106774],{"class":324},[312,106862,106863],{"class":314,"line":9860},[312,106864,4205],{"emptyLinePlaceholder":1881},[312,106866,106867],{"class":314,"line":11519},[312,106868,4205],{"emptyLinePlaceholder":1881},[312,106870,106871,106873,106875,106877,106879],{"class":314,"line":11544},[312,106872,3338],{"class":1436},[312,106874,33015],{"class":488},[312,106876,103328],{"class":1436},[312,106878,103331],{"class":339},[312,106880,5544],{"class":324},[312,106882,106883],{"class":314,"line":11567},[312,106884,103338],{"class":324},[24,106886,105339],{},[303,106888,106890],{"className":25618,"code":106889,"language":25620,"meta":308,"style":308},"touch ch3_python_state.py\n",[119,106891,106892],{"__ignoreMap":308},[312,106893,106894,106896],{"class":314,"line":315},[312,106895,103052],{"class":332},[312,106897,106898],{"class":339}," ch3_python_state.py\n",[24,106900,104070],{},[303,106902,106904],{"className":25618,"code":106903,"language":25620,"meta":308,"style":308},"python ch3_python_state.py\n",[119,106905,106906],{"__ignoreMap":308},[312,106907,106908,106910],{"class":314,"line":315},[312,106909,32176],{"class":332},[312,106911,106898],{"class":339},[69,106913,103341],{"id":103341},[24,106915,106916],{},"打印状态的函数：",[303,106918,106920],{"className":32174,"code":106919,"language":32176,"meta":308,"style":308},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[119,106921,106922],{"__ignoreMap":308},[312,106923,106924,106926,106928,106930,106932,106934,106936],{"class":314,"line":315},[312,106925,33742],{"class":1436},[312,106927,106645],{"class":332},[312,106929,106648],{"class":324},[312,106931,3110],{"class":488},[312,106933,106653],{"class":324},[312,106935,97456],{"class":488},[312,106937,5544],{"class":324},[24,106939,106940,106941,106943],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[119,106942,35196],{}," 里发生了什么。",[24,106945,106946],{},"推进 50 步：",[303,106948,106950],{"className":32174,"code":106949,"language":32176,"meta":308,"style":308},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[119,106951,106952,106968],{"__ignoreMap":308},[312,106953,106954,106956,106958,106960,106962,106964,106966],{"class":314,"line":315},[312,106955,4830],{"class":1436},[312,106957,103270],{"class":324},[312,106959,27839],{"class":1436},[312,106961,34238],{"class":488},[312,106963,1576],{"class":324},[312,106965,2601],{"class":488},[312,106967,32582],{"class":324},[312,106969,106970],{"class":314,"line":171},[312,106971,103468],{"class":324},[24,106973,106974,106975,106978,106979,106981],{},"由于 ",[119,106976,106977],{},"timestep=0.01","，所以 50 步后时间约为 ",[119,106980,37124],{}," 秒。",[24,106983,106984],{},"重置：",[303,106986,106987],{"className":32174,"code":106295,"language":32176,"meta":308,"style":308},[119,106988,106989],{"__ignoreMap":308},[312,106990,106991],{"class":314,"line":315},[312,106992,106295],{"class":324},[24,106994,106995],{},"这会把时间、位置、速度恢复到初始状态。",[24,106997,106998],{},"手动改高度：",[303,107000,107002],{"className":32174,"code":107001,"language":32176,"meta":308,"style":308},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[119,107003,107004,107016],{"__ignoreMap":308},[312,107005,107006,107008,107010,107012,107014],{"class":314,"line":315},[312,107007,106468],{"class":324},[312,107009,2027],{"class":488},[312,107011,6248],{"class":324},[312,107013,336],{"class":1436},[312,107015,106477],{"class":488},[312,107017,107018],{"class":314,"line":171},[312,107019,106312],{"class":324},[24,107021,107022,107023,107026,107027,107030],{},"这个例子里 ",[119,107024,107025],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[119,107028,107029],{},"2.0"," 表示把小球放到更高的位置。",[69,107032,103477],{"id":103477},[303,107034,107035],{"className":32174,"code":106919,"language":32176,"meta":308,"style":308},[119,107036,107037],{"__ignoreMap":308},[312,107038,107039,107041,107043,107045,107047,107049,107051],{"class":314,"line":315},[312,107040,33742],{"class":1436},[312,107042,106645],{"class":332},[312,107044,106648],{"class":324},[312,107046,3110],{"class":488},[312,107048,106653],{"class":324},[312,107050,97456],{"class":488},[312,107052,5544],{"class":324},[24,107054,107055],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[140,107057,107058,107067,107072],{},[143,107059,107060,107063,107064,107066],{},[119,107061,107062],{},"prefix","：一段文字，比如 ",[119,107065,106771],{},"，用来说明现在打印的是哪个阶段。",[143,107068,107069,107071],{},[119,107070,103854],{},"：MuJoCo 模型。",[143,107073,107074,107076],{},[119,107075,35196],{},"：MuJoCo 当前状态。",[24,107078,107079,2159,107082,107085],{},[119,107080,107081],{},"prefix: str",[119,107083,107084],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[303,107087,107089],{"className":32174,"code":107088,"language":32176,"meta":308,"style":308},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[119,107090,107091],{"__ignoreMap":308},[312,107092,107093,107095,107097,107099,107101,107103],{"class":314,"line":315},[312,107094,32211],{"class":488},[312,107096,1576],{"class":324},[312,107098,106696],{"class":339},[312,107100,106699],{"class":324},[312,107102,2238],{"class":488},[312,107104,32293],{"class":324},[24,107106,107107,107110],{},[119,107108,107109],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[303,107112,107114],{"className":32174,"code":107113,"language":32176,"meta":308,"style":308},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[119,107115,107116,107128],{"__ignoreMap":308},[312,107117,107118,107120,107122,107124,107126],{"class":314,"line":315},[312,107119,103403],{"class":324},[312,107121,336],{"class":1436},[312,107123,103181],{"class":324},[312,107125,103083],{"class":488},[312,107127,1959],{"class":324},[312,107129,107130,107132,107134],{"class":314,"line":171},[312,107131,103427],{"class":324},[312,107133,336],{"class":1436},[312,107135,103195],{"class":324},[24,107137,107138],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[303,107140,107142],{"className":32174,"code":107141,"language":32176,"meta":308,"style":308},"print_state(\"initial\", model, data)\n",[119,107143,107144],{"__ignoreMap":308},[312,107145,107146,107149,107151],{"class":314,"line":315},[312,107147,107148],{"class":324},"print_state(",[312,107150,106771],{"class":339},[312,107152,106774],{"class":324},[24,107154,107155,107156,107159],{},"调用刚才定义的 ",[119,107157,107158],{},"print_state"," 函数，打印初始状态。",[303,107161,107162],{"className":32174,"code":106949,"language":32176,"meta":308,"style":308},[119,107163,107164,107180],{"__ignoreMap":308},[312,107165,107166,107168,107170,107172,107174,107176,107178],{"class":314,"line":315},[312,107167,4830],{"class":1436},[312,107169,103270],{"class":324},[312,107171,27839],{"class":1436},[312,107173,34238],{"class":488},[312,107175,1576],{"class":324},[312,107177,2601],{"class":488},[312,107179,32582],{"class":324},[312,107181,107182],{"class":314,"line":171},[312,107183,103468],{"class":324},[24,107185,107186],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[303,107188,107189],{"className":32174,"code":106295,"language":32176,"meta":308,"style":308},[119,107190,107191],{"__ignoreMap":308},[312,107192,107193],{"class":314,"line":315},[312,107194,106295],{"class":324},[24,107196,107197,107198,107200,107201,107203],{},"重置 ",[119,107199,35196],{},"。注意它不会重新创建 ",[119,107202,103854],{},"，因为模型结构没有变，只是状态回到初始值。",[303,107205,107206],{"className":32174,"code":106461,"language":32176,"meta":308,"style":308},[119,107207,107208],{"__ignoreMap":308},[312,107209,107210,107212,107214,107216,107218],{"class":314,"line":315},[312,107211,106468],{"class":324},[312,107213,2027],{"class":488},[312,107215,6248],{"class":324},[312,107217,336],{"class":1436},[312,107219,106477],{"class":488},[24,107221,107222,107223,2159,107226,2159,107229,107231],{},"这行是“手动改状态”。在 freejoint 中，",[119,107224,107225],{},"qpos[0]",[119,107227,107228],{},"qpos[1]",[119,107230,107025],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[303,107233,107234],{"className":32174,"code":106312,"language":32176,"meta":308,"style":308},[119,107235,107236],{"__ignoreMap":308},[312,107237,107238],{"class":314,"line":315},[312,107239,106312],{"class":324},[24,107241,107242,107243,107245,107246,107248],{},"手动改完 ",[119,107244,105799],{}," 后，调用 ",[119,107247,106019],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,107250,104085],{"id":104084},[24,107252,107253],{},"你会看到:",[140,107255,107256,107261,107266,107269],{},[143,107257,107258,107259],{},"初始时间为 ",[119,107260,858],{},[143,107262,107263,107264],{},"50 步后时间约为 ",[119,107265,37124],{},[143,107267,107268],{},"reset 后状态恢复",[143,107270,107271,107272,107275,107276],{},"手动修改 ",[119,107273,107274],{},"data.qpos[2]"," 后，小球高度变为 ",[119,107277,107029],{},[24,107279,107280,107282],{},[119,107281,107025],{}," 在这个例子中表示自由刚体的 z 坐标。",[24,107284,107285],{},"输出里可以重点看三件事：",[140,107287,107288,107296,107301],{},[143,107289,107290,107292,107293,107295],{},[119,107291,4192],{}," 是否随着 ",[119,107294,102984],{}," 增加。",[143,107297,107298,107300],{},[119,107299,105799],{}," 的 z 坐标是否因为下落而变化。",[143,107302,107303,107305,107306,30181],{},[119,107304,106121],{}," 后时间是否回到 ",[119,107307,858],{},[14,107309,104117],{"id":104116},[140,107311,107312,107318,107324,107330,107333,107342],{},[143,107313,107314,107315,30181],{},"修改 timestep 为 ",[119,107316,107317],{},"0.005",[143,107319,107320,107321,30181],{},"重新运行，检查 50 步后时间是否约为 ",[119,107322,107323],{},"0.25",[143,107325,107326,107327,30181],{},"修改重力为 ",[119,107328,107329],{},"0 0 -1.0",[143,107331,107332],{},"观察小球下降速度是否变慢。",[143,107334,104180,107335,104183,107338,107341],{},[119,107336,107337],{},"data.qpos[2] = 2.0",[119,107339,107340],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[143,107343,107344,107345,107348],{},"注释掉 ",[119,107346,107347],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,107350,104222],{"id":104221},[69,107352,107354,107355,107357],{"id":107353},"修改-dataqpos-后位置没有更新","修改 ",[119,107356,102839],{}," 后位置没有更新",[24,107359,104231],{},[303,107361,107362],{"className":32174,"code":106312,"language":32176,"meta":308,"style":308},[119,107363,107364],{"__ignoreMap":308},[312,107365,107366],{"class":314,"line":315},[312,107367,106312],{"class":324},[69,107369,107370],{"id":107370},"数组维度看不懂",[24,107372,107373],{},"打印模型维度:",[303,107375,107377],{"className":32174,"code":107376,"language":32176,"meta":308,"style":308},"print(model.nq, model.nv, model.nu)\n",[119,107378,107379],{"__ignoreMap":308},[312,107380,107381,107383],{"class":314,"line":315},[312,107382,32211],{"class":488},[312,107384,107385],{"class":324},"(model.nq, model.nv, model.nu)\n",[2086,107387,107388,107396],{},[2089,107389,107390],{},[2092,107391,107392,107394],{},[2095,107393,106343],{"align":1374},[2095,107395,102470],{"align":1374},[2132,107397,107398,107408,107418],{},[2092,107399,107400,107405],{},[2137,107401,107402],{"align":1374},[119,107403,107404],{},"nq",[2137,107406,107407],{"align":1374},"位置变量数量",[2092,107409,107410,107415],{},[2137,107411,107412],{"align":1374},[119,107413,107414],{},"nv",[2137,107416,107417],{"align":1374},"速度变量数量",[2092,107419,107420,107424],{},[2137,107421,107422],{"align":1374},[119,107423,103931],{},[2137,107425,107426],{"align":1374},"控制输入数量",[69,107428,107430,107431,107433],{"id":107429},"误以为-qpos-一定等于关节数","误以为 ",[119,107432,105799],{}," 一定等于关节数",[24,107435,107436,107437,84301,107439,107441,107442,107444],{},"不是。例如 ",[119,107438,103389],{},[119,107440,105799],{}," 是 7 维，但 ",[119,107443,106129],{}," 是 6 维。",[69,107446,107448,107449,107451],{"id":107447},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[119,107450,105799],{}," 的第几位",[24,107453,107454],{},"初学时可以先打印：",[303,107456,107458],{"className":32174,"code":107457,"language":32176,"meta":308,"style":308},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[119,107459,107460,107470,107480,107492],{"__ignoreMap":308},[312,107461,107462,107464,107466,107468],{"class":314,"line":315},[312,107463,32211],{"class":488},[312,107465,1576],{"class":324},[312,107467,103208],{"class":339},[312,107469,103211],{"class":324},[312,107471,107472,107474,107476,107478],{"class":314,"line":171},[312,107473,32211],{"class":488},[312,107475,1576],{"class":324},[312,107477,103220],{"class":339},[312,107479,103223],{"class":324},[312,107481,107482,107484,107486,107489],{"class":314,"line":274},[312,107483,32211],{"class":488},[312,107485,1576],{"class":324},[312,107487,107488],{"class":339},"\"qpos:\"",[312,107490,107491],{"class":324},", data.qpos)\n",[312,107493,107494,107496,107498,107501],{"class":314,"line":298},[312,107495,32211],{"class":488},[312,107497,1576],{"class":324},[312,107499,107500],{"class":339},"\"qvel:\"",[312,107502,107503],{"class":324},", data.qvel)\n",[24,107505,107506],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[69,107508,107509],{"id":107509},"仿真结果每次都一样",[24,107511,107512,107513,107515],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[119,107514,105799],{},"、目标点或控制输入。",[14,107517,104376],{"id":104375},[24,107519,107520,107521,26414],{},"Python 控制 MuJoCo 的核心就是读写 ",[119,107522,35196],{},[140,107524,107525,107533,107538,107543],{},[143,107526,107527,107528,1167,107530,107532],{},"用 ",[119,107529,102839],{},[119,107531,102842],{}," 读取状态。",[143,107534,107527,107535,107537],{},[119,107536,102845],{}," 写入控制。",[143,107539,107527,107540,107542],{},[119,107541,102984],{}," 推进时间。",[143,107544,107545,107546,107548],{},"手动改状态后用 ",[119,107547,106019],{}," 刷新派生量。",[24,107550,107551],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1856,107553,107554],{},"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":308,"searchDepth":171,"depth":171,"links":107556},[107557,107558,107559,107566,107570,107571,107572,107582],{"id":102416,"depth":171,"text":102417},{"id":102539,"depth":171,"text":102540},{"id":102813,"depth":171,"text":102814,"children":107560},[107561,107563,107565],{"id":106324,"depth":274,"text":107562},"qpos、qvel、ctrl 是什么",{"id":106402,"depth":274,"text":107564},"mj_step 和 mj_forward 的区别",{"id":106491,"depth":274,"text":106492},{"id":103021,"depth":171,"text":103022,"children":107567},[107568,107569],{"id":103341,"depth":274,"text":103341},{"id":103477,"depth":274,"text":103477},{"id":104084,"depth":171,"text":104085},{"id":104116,"depth":171,"text":104117},{"id":104221,"depth":171,"text":104222,"children":107573},[107574,107576,107577,107579,107581],{"id":107353,"depth":274,"text":107575},"修改 data.qpos 后位置没有更新",{"id":107370,"depth":274,"text":107370},{"id":107429,"depth":274,"text":107578},"误以为 qpos 一定等于关节数",{"id":107447,"depth":274,"text":107580},"不知道某个元素在 qpos 的第几位",{"id":107509,"depth":274,"text":107509},{"id":104375,"depth":171,"text":104376},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":106087,"description":308},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":107589,"title":107590,"body":107591,"description":308,"extension":1879,"meta":109281,"navigation":1881,"path":109282,"seo":109283,"stem":109284,"__hash__":109285},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107592,"toc":109257},[107593,107596,107598,107601,107603,107628,107631,107650,107653,107655,107657,107681,107683,107697,107699,107740,107742,107766,107768,107771,107805,107807,107820,107823,107891,107900,107904,107907,107941,107947,107950,107954,107993,107996,108016,108020,108063,108065,108094,108097,108103,108106,108108,108502,108504,108516,108518,108529,108531,108534,108563,108571,108574,108609,108612,108614,108622,108625,108627,108638,108648,108668,108671,108707,108719,108767,108786,108828,108841,108869,108874,108895,108905,108923,108926,108960,108963,108983,108986,109005,109011,109013,109016,109022,109028,109038,109041,109047,109056,109058,109104,109106,109112,109118,109121,109124,109144,109147,109153,109159,109161,109184,109187,109190,109199,109202,109240,109242,109245,109251,109254],[10,107594,107590],{"id":107595},"_4关节actuator-与力控制",[14,107597,102417],{"id":102416},[24,107599,107600],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[24,107602,106100],{},[140,107604,107605,107611,107616,107620,107625],{},[143,107606,107607,107610],{},[119,107608,107609],{},"hinge"," 关节",[143,107612,107613],{},[119,107614,107615],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[143,107617,107618],{},[119,107619,102845],{},[143,107621,107622],{},[119,107623,107624],{},"ctrlrange",[143,107626,107627],{},"读取关节角和角速度",[24,107629,107630],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[303,107632,107634],{"className":32174,"code":107633,"language":32176,"meta":308,"style":308},"data.ctrl[0] = ...\n",[119,107635,107636],{"__ignoreMap":308},[312,107637,107638,107641,107643,107645,107647],{"class":314,"line":315},[312,107639,107640],{"class":324},"data.ctrl[",[312,107642,858],{"class":488},[312,107644,6248],{"class":324},[312,107646,336],{"class":1436},[312,107648,107649],{"class":488}," ...\n",[24,107651,107652],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107654,102540],{"id":102539},[24,107656,102543],{},[303,107658,107659],{"className":25618,"code":106157,"language":25620,"meta":308,"style":308},[119,107660,107661],{"__ignoreMap":308},[312,107662,107663,107665,107667,107669,107671,107673,107675,107677,107679],{"class":314,"line":315},[312,107664,26372],{"class":332},[312,107666,28111],{"class":339},[312,107668,25630],{"class":339},[312,107670,28196],{"class":488},[312,107672,106172],{"class":339},[312,107674,102568],{"class":339},[312,107676,104270],{"class":339},[312,107678,102584],{"class":339},[312,107680,106181],{"class":339},[24,107682,104588],{},[303,107684,107685],{"className":25618,"code":102689,"language":25620,"meta":308,"style":308},[119,107686,107687],{"__ignoreMap":308},[312,107688,107689,107691,107693,107695],{"class":314,"line":315},[312,107690,25627],{"class":332},[312,107692,25630],{"class":339},[312,107694,102700],{"class":339},[312,107696,102703],{"class":339},[24,107698,104605],{},[303,107700,107702],{"className":25618,"code":107701,"language":25620,"meta":308,"style":308},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[119,107703,107704,107721,107730],{"__ignoreMap":308},[312,107705,107706,107708,107710,107712,107715,107717,107719],{"class":314,"line":315},[312,107707,32126],{"class":332},[312,107709,30972],{"class":339},[312,107711,26911],{"class":488},[312,107713,107714],{"class":339}," mujoco-control",[312,107716,102745],{"class":339},[312,107718,102748],{"class":488},[312,107720,102751],{"class":488},[312,107722,107723,107725,107727],{"class":314,"line":171},[312,107724,32126],{"class":332},[312,107726,102758],{"class":339},[312,107728,107729],{"class":339}," mujoco-control\n",[312,107731,107732,107734,107736,107738],{"class":314,"line":274},[312,107733,25627],{"class":332},[312,107735,25630],{"class":339},[312,107737,102700],{"class":339},[312,107739,102703],{"class":339},[24,107741,102774],{},[140,107743,107744,107750,107757,107763],{},[143,107745,107746,107749],{},[119,107747,107748],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[143,107751,107752,107754,107755,30181],{},[119,107753,102845],{}," 长度等于 ",[119,107756,103927],{},[143,107758,83993,107759,107762],{},[119,107760,107761],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[143,107764,107765],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,107767,102814],{"id":102813},[24,107769,107770],{},"关节决定 body 如何运动:",[303,107772,107774],{"className":54853,"code":107773,"language":54855,"meta":308,"style":308},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[119,107775,107776],{"__ignoreMap":308},[312,107777,107778,107780,107782,107784,107786,107789,107791,107793,107795,107798,107800,107803],{"class":314,"line":315},[312,107779,325],{"class":324},[312,107781,104725],{"class":328},[312,107783,16721],{"class":332},[312,107785,336],{"class":324},[312,107787,107788],{"class":339},"\"hinge\"",[312,107790,55608],{"class":332},[312,107792,336],{"class":324},[312,107794,107788],{"class":339},[312,107796,107797],{"class":332}," axis",[312,107799,336],{"class":324},[312,107801,107802],{"class":339},"\"0 1 0\"",[312,107804,102913],{"class":324},[24,107806,104821],{},[140,107808,107809,107814,107817],{},[143,107810,107811,107812],{},"名字是 ",[119,107813,107609],{},[143,107815,107816],{},"类型是旋转关节",[143,107818,107819],{},"绕 y 轴旋转",[24,107821,107822],{},"actuator 决定如何施加控制:",[303,107824,107826],{"className":54853,"code":107825,"language":54855,"meta":308,"style":308},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[119,107827,107828,107837,107883],{"__ignoreMap":308},[312,107829,107830,107832,107835],{"class":314,"line":315},[312,107831,325],{"class":324},[312,107833,107834],{"class":328},"actuator",[312,107836,343],{"class":324},[312,107838,107839,107841,107844,107846,107848,107851,107854,107856,107858,107861,107863,107865,107868,107870,107873,107876,107878,107881],{"class":314,"line":171},[312,107840,53930],{"class":324},[312,107842,107843],{"class":328},"motor",[312,107845,16721],{"class":332},[312,107847,336],{"class":324},[312,107849,107850],{"class":339},"\"hinge_motor\"",[312,107852,107853],{"class":332}," joint",[312,107855,336],{"class":324},[312,107857,107788],{"class":339},[312,107859,107860],{"class":332}," gear",[312,107862,336],{"class":324},[312,107864,5483],{"class":339},[312,107866,107867],{"class":332}," ctrlrange",[312,107869,336],{"class":324},[312,107871,107872],{"class":339},"\"-2 2\"",[312,107874,107875],{"class":332}," ctrllimited",[312,107877,336],{"class":324},[312,107879,107880],{"class":339},"\"true\"",[312,107882,102913],{"class":324},[312,107884,107885,107887,107889],{"class":314,"line":274},[312,107886,353],{"class":324},[312,107888,107834],{"class":328},[312,107890,343],{"class":324},[24,107892,107893,107896,107897,30181],{},[119,107894,107895],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[119,107898,107899],{},"[-2, 2]",[69,107901,107903],{"id":107902},"joint-和-actuator-的关系","joint 和 actuator 的关系",[24,107905,107906],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[2086,107908,107909,107919],{},[2089,107910,107911],{},[2092,107912,107913,107915,107917],{},[2095,107914,27549],{"align":1374},[2095,107916,104465],{"align":1374},[2095,107918,102504],{"align":1374},[2132,107920,107921,107931],{},[2092,107922,107923,107925,107928],{},[2137,107924,104725],{"align":1374},[2137,107926,107927],{"align":1374},"定义能怎么动",[2137,107929,107930],{"align":1374},"门轴允许门旋转",[2092,107932,107933,107935,107938],{},[2137,107934,107834],{"align":1374},[2137,107936,107937],{"align":1374},"定义怎么施力或控制",[2137,107939,107940],{"align":1374},"人推门、马达带动门",[24,107942,107943,107944,107946],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[119,107945,102845],{}," 主动控制它。",[24,107948,107949],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[69,107951,107953],{"id":107952},"hinge-joint","hinge joint",[303,107955,107957],{"className":54853,"code":107956,"language":54855,"meta":308,"style":308},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[119,107958,107959],{"__ignoreMap":308},[312,107960,107961,107963,107965,107967,107969,107971,107973,107975,107977,107979,107981,107983,107986,107988,107991],{"class":314,"line":315},[312,107962,325],{"class":324},[312,107964,104725],{"class":328},[312,107966,16721],{"class":332},[312,107968,336],{"class":324},[312,107970,107788],{"class":339},[312,107972,55608],{"class":332},[312,107974,336],{"class":324},[312,107976,107788],{"class":339},[312,107978,107797],{"class":332},[312,107980,336],{"class":324},[312,107982,107802],{"class":339},[312,107984,107985],{"class":332}," damping",[312,107987,336],{"class":324},[312,107989,107990],{"class":339},"\"0.1\"",[312,107992,102913],{"class":324},[24,107994,107995],{},"含义：",[140,107997,107998,108004,108010],{},[143,107999,108000,108003],{},[119,108001,108002],{},"type=\"hinge\"","：只能绕一个轴旋转。",[143,108005,108006,108009],{},[119,108007,108008],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[143,108011,108012,108015],{},[119,108013,108014],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[69,108017,108019],{"id":108018},"motor-actuator","motor actuator",[303,108021,108023],{"className":54853,"code":108022,"language":54855,"meta":308,"style":308},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[119,108024,108025],{"__ignoreMap":308},[312,108026,108027,108029,108031,108033,108035,108037,108039,108041,108043,108045,108047,108049,108051,108053,108055,108057,108059,108061],{"class":314,"line":315},[312,108028,325],{"class":324},[312,108030,107843],{"class":328},[312,108032,16721],{"class":332},[312,108034,336],{"class":324},[312,108036,107850],{"class":339},[312,108038,107853],{"class":332},[312,108040,336],{"class":324},[312,108042,107788],{"class":339},[312,108044,107860],{"class":332},[312,108046,336],{"class":324},[312,108048,5483],{"class":339},[312,108050,107867],{"class":332},[312,108052,336],{"class":324},[312,108054,107872],{"class":339},[312,108056,107875],{"class":332},[312,108058,336],{"class":324},[312,108060,107880],{"class":339},[312,108062,102913],{"class":324},[24,108064,107995],{},[140,108066,108067,108076,108082,108088],{},[143,108068,108069,108072,108073,108075],{},[119,108070,108071],{},"joint=\"hinge\"","：这个电机作用在名为 ",[119,108074,107609],{}," 的关节上。",[143,108077,108078,108081],{},[119,108079,108080],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[143,108083,108084,108087],{},[119,108085,108086],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[143,108089,108090,108093],{},[119,108091,108092],{},"ctrllimited=\"true\"","：启用控制范围限制。",[24,108095,108096],{},"简单理解：",[303,108098,108101],{"className":108099,"code":108100,"language":6992,"meta":308},[6990],"实际施加效果 ≈ data.ctrl[0] * gear\n",[119,108102,108100],{"__ignoreMap":308},[24,108104,108105],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,108107,103022],{"id":103021},[303,108109,108111],{"className":32174,"code":108110,"language":32176,"meta":308,"style":308},"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",[119,108112,108113,108120,108124,108130,108140,108144,108148,108156,108161,108166,108170,108174,108179,108184,108188,108193,108198,108203,108208,108212,108216,108220,108225,108230,108235,108239,108243,108247,108251,108263,108275,108283,108287,108297,108307,108317,108321,108334,108347,108351,108368,108382,108417,108421,108425,108436,108451,108466,108478,108482,108486,108498],{"__ignoreMap":308},[312,108114,108115,108117],{"class":314,"line":315},[312,108116,32188],{"class":1436},[312,108118,108119],{"class":324}," math\n",[312,108121,108122],{"class":314,"line":171},[312,108123,4205],{"emptyLinePlaceholder":1881},[312,108125,108126,108128],{"class":314,"line":274},[312,108127,32188],{"class":1436},[312,108129,103070],{"class":324},[312,108131,108132,108134,108136,108138],{"class":314,"line":298},[312,108133,32188],{"class":1436},[312,108135,33175],{"class":324},[312,108137,33178],{"class":1436},[312,108139,33181],{"class":324},[312,108141,108142],{"class":314,"line":974},[312,108143,4205],{"emptyLinePlaceholder":1881},[312,108145,108146],{"class":314,"line":980},[312,108147,4205],{"emptyLinePlaceholder":1881},[312,108149,108150,108152,108154],{"class":314,"line":997},[312,108151,103083],{"class":488},[312,108153,15366],{"class":1436},[312,108155,103088],{"class":339},[312,108157,108158],{"class":314,"line":1003},[312,108159,108160],{"class":339},"\u003Cmujoco model=\"one_link_motor\">\n",[312,108162,108163],{"class":314,"line":1020},[312,108164,108165],{"class":339},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[312,108167,108168],{"class":314,"line":1026},[312,108169,4205],{"emptyLinePlaceholder":1881},[312,108171,108172],{"class":314,"line":3418},[312,108173,103107],{"class":339},[312,108175,108176],{"class":314,"line":3423},[312,108177,108178],{"class":339},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[312,108180,108181],{"class":314,"line":3429},[312,108182,108183],{"class":339},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[312,108185,108186],{"class":314,"line":3434},[312,108187,4205],{"emptyLinePlaceholder":1881},[312,108189,108190],{"class":314,"line":3448},[312,108191,108192],{"class":339},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[312,108194,108195],{"class":314,"line":3453},[312,108196,108197],{"class":339},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[312,108199,108200],{"class":314,"line":3459},[312,108201,108202],{"class":339},"        \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",[312,108204,108205],{"class":314,"line":3480},[312,108206,108207],{"class":339},"      \u003C\u002Fbody>\n",[312,108209,108210],{"class":314,"line":3485},[312,108211,103136],{"class":339},[312,108213,108214],{"class":314,"line":3499},[312,108215,103141],{"class":339},[312,108217,108218],{"class":314,"line":3504},[312,108219,4205],{"emptyLinePlaceholder":1881},[312,108221,108222],{"class":314,"line":3533},[312,108223,108224],{"class":339},"  \u003Cactuator>\n",[312,108226,108227],{"class":314,"line":3538},[312,108228,108229],{"class":339},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[312,108231,108232],{"class":314,"line":3555},[312,108233,108234],{"class":339},"  \u003C\u002Factuator>\n",[312,108236,108237],{"class":314,"line":3560},[312,108238,103146],{"class":339},[312,108240,108241],{"class":314,"line":3565},[312,108242,97468],{"class":339},[312,108244,108245],{"class":314,"line":3570},[312,108246,4205],{"emptyLinePlaceholder":1881},[312,108248,108249],{"class":314,"line":3584},[312,108250,4205],{"emptyLinePlaceholder":1881},[312,108252,108253,108255,108257,108259,108261],{"class":314,"line":3589},[312,108254,33742],{"class":1436},[312,108256,3778],{"class":332},[312,108258,103167],{"class":324},[312,108260,97456],{"class":488},[312,108262,5544],{"class":324},[312,108264,108265,108267,108269,108271,108273],{"class":314,"line":4382},[312,108266,103176],{"class":324},[312,108268,336],{"class":1436},[312,108270,103181],{"class":324},[312,108272,103083],{"class":488},[312,108274,1959],{"class":324},[312,108276,108277,108279,108281],{"class":314,"line":4396},[312,108278,103190],{"class":324},[312,108280,336],{"class":1436},[312,108282,103195],{"class":324},[312,108284,108285],{"class":314,"line":4404},[312,108286,4205],{"emptyLinePlaceholder":1881},[312,108288,108289,108291,108293,108295],{"class":314,"line":4409},[312,108290,33094],{"class":488},[312,108292,1576],{"class":324},[312,108294,103208],{"class":339},[312,108296,103211],{"class":324},[312,108298,108299,108301,108303,108305],{"class":314,"line":4415},[312,108300,33094],{"class":488},[312,108302,1576],{"class":324},[312,108304,103220],{"class":339},[312,108306,103223],{"class":324},[312,108308,108309,108311,108313,108315],{"class":314,"line":4421},[312,108310,33094],{"class":488},[312,108312,1576],{"class":324},[312,108314,103232],{"class":339},[312,108316,103235],{"class":324},[312,108318,108319],{"class":314,"line":4426},[312,108320,4205],{"emptyLinePlaceholder":1881},[312,108322,108323,108325,108328,108330,108332],{"class":314,"line":9751},[312,108324,4906],{"class":1436},[312,108326,108327],{"class":324}," model.nu ",[312,108329,22747],{"class":1436},[312,108331,26914],{"class":488},[312,108333,5544],{"class":324},[312,108335,108336,108338,108340,108342,108345],{"class":314,"line":9775},[312,108337,105201],{"class":1436},[312,108339,105204],{"class":488},[312,108341,1576],{"class":324},[312,108343,108344],{"class":339},"\"expected exactly one actuator\"",[312,108346,1959],{"class":324},[312,108348,108349],{"class":314,"line":9780},[312,108350,4205],{"emptyLinePlaceholder":1881},[312,108352,108353,108355,108357,108359,108361,108363,108366],{"class":314,"line":9786},[312,108354,5006],{"class":1436},[312,108356,33411],{"class":324},[312,108358,27839],{"class":1436},[312,108360,34238],{"class":488},[312,108362,1576],{"class":324},[312,108364,108365],{"class":488},"2000",[312,108367,32582],{"class":324},[312,108369,108370,108373,108375,108377,108379],{"class":314,"line":9813},[312,108371,108372],{"class":324},"        t ",[312,108374,336],{"class":1436},[312,108376,33411],{"class":324},[312,108378,2400],{"class":1436},[312,108380,108381],{"class":324}," model.opt.timestep\n",[312,108383,108384,108387,108389,108391,108393,108396,108398,108401,108403,108405,108408,108410,108412,108414],{"class":314,"line":9818},[312,108385,108386],{"class":324},"        data.ctrl[",[312,108388,858],{"class":488},[312,108390,6248],{"class":324},[312,108392,336],{"class":1436},[312,108394,108395],{"class":488}," 1.5",[312,108397,8322],{"class":1436},[312,108399,108400],{"class":324}," math.sin(",[312,108402,107029],{"class":488},[312,108404,8322],{"class":1436},[312,108406,108407],{"class":324}," math.pi ",[312,108409,2400],{"class":1436},[312,108411,63645],{"class":488},[312,108413,8322],{"class":1436},[312,108415,108416],{"class":324}," t)\n",[312,108418,108419],{"class":314,"line":9824},[312,108420,103285],{"class":324},[312,108422,108423],{"class":314,"line":9836},[312,108424,4205],{"emptyLinePlaceholder":1881},[312,108426,108427,108429,108431,108434],{"class":314,"line":9848},[312,108428,33094],{"class":488},[312,108430,1576],{"class":324},[312,108432,108433],{"class":339},"\"time:\"",[312,108435,103247],{"class":324},[312,108437,108438,108440,108442,108445,108447,108449],{"class":314,"line":9860},[312,108439,33094],{"class":488},[312,108441,1576],{"class":324},[312,108443,108444],{"class":339},"\"joint qpos:\"",[312,108446,106699],{"class":324},[312,108448,2238],{"class":488},[312,108450,32293],{"class":324},[312,108452,108453,108455,108457,108460,108462,108464],{"class":314,"line":11519},[312,108454,33094],{"class":488},[312,108456,1576],{"class":324},[312,108458,108459],{"class":339},"\"joint qvel:\"",[312,108461,106715],{"class":324},[312,108463,2238],{"class":488},[312,108465,32293],{"class":324},[312,108467,108468,108470,108472,108475],{"class":314,"line":11544},[312,108469,33094],{"class":488},[312,108471,1576],{"class":324},[312,108473,108474],{"class":339},"\"last ctrl:\"",[312,108476,108477],{"class":324},", data.ctrl.copy())\n",[312,108479,108480],{"class":314,"line":11567},[312,108481,4205],{"emptyLinePlaceholder":1881},[312,108483,108484],{"class":314,"line":11591},[312,108485,4205],{"emptyLinePlaceholder":1881},[312,108487,108488,108490,108492,108494,108496],{"class":314,"line":11596},[312,108489,3338],{"class":1436},[312,108491,33015],{"class":488},[312,108493,103328],{"class":1436},[312,108495,103331],{"class":339},[312,108497,5544],{"class":324},[312,108499,108500],{"class":314,"line":11601},[312,108501,103338],{"class":324},[24,108503,105339],{},[303,108505,108507],{"className":25618,"code":108506,"language":25620,"meta":308,"style":308},"touch ch4_joint_motor.py\n",[119,108508,108509],{"__ignoreMap":308},[312,108510,108511,108513],{"class":314,"line":315},[312,108512,103052],{"class":332},[312,108514,108515],{"class":339}," ch4_joint_motor.py\n",[24,108517,104070],{},[303,108519,108521],{"className":25618,"code":108520,"language":25620,"meta":308,"style":308},"python ch4_joint_motor.py\n",[119,108522,108523],{"__ignoreMap":308},[312,108524,108525,108527],{"class":314,"line":315},[312,108526,32176],{"class":332},[312,108528,108515],{"class":339},[69,108530,103341],{"id":103341},[24,108532,108533],{},"检查 actuator 数量：",[303,108535,108537],{"className":32174,"code":108536,"language":32176,"meta":308,"style":308},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[119,108538,108539,108551],{"__ignoreMap":308},[312,108540,108541,108543,108545,108547,108549],{"class":314,"line":315},[312,108542,3338],{"class":1436},[312,108544,108327],{"class":324},[312,108546,22747],{"class":1436},[312,108548,26914],{"class":488},[312,108550,5544],{"class":324},[312,108552,108553,108555,108557,108559,108561],{"class":314,"line":171},[312,108554,105664],{"class":1436},[312,108556,105204],{"class":488},[312,108558,1576],{"class":324},[312,108560,108344],{"class":339},[312,108562,1959],{"class":324},[24,108564,108565,108567,108568,108570],{},[119,108566,103927],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[119,108569,102845],{}," 长度应该是 1。",[24,108572,108573],{},"产生正弦控制信号：",[303,108575,108577],{"className":32174,"code":108576,"language":32176,"meta":308,"style":308},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[119,108578,108579],{"__ignoreMap":308},[312,108580,108581,108583,108585,108587,108589,108591,108593,108595,108597,108599,108601,108603,108605,108607],{"class":314,"line":315},[312,108582,107640],{"class":324},[312,108584,858],{"class":488},[312,108586,6248],{"class":324},[312,108588,336],{"class":1436},[312,108590,108395],{"class":488},[312,108592,8322],{"class":1436},[312,108594,108400],{"class":324},[312,108596,107029],{"class":488},[312,108598,8322],{"class":1436},[312,108600,108407],{"class":324},[312,108602,2400],{"class":1436},[312,108604,63645],{"class":488},[312,108606,8322],{"class":1436},[312,108608,108416],{"class":324},[24,108610,108611],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[24,108613,103442],{},[303,108615,108616],{"className":32174,"code":106274,"language":32176,"meta":308,"style":308},[119,108617,108618],{"__ignoreMap":308},[312,108619,108620],{"class":314,"line":315},[312,108621,106274],{"class":324},[24,108623,108624],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[69,108626,103477],{"id":103477},[303,108628,108630],{"className":32174,"code":108629,"language":32176,"meta":308,"style":308},"import math\n",[119,108631,108632],{"__ignoreMap":308},[312,108633,108634,108636],{"class":314,"line":315},[312,108635,32188],{"class":1436},[312,108637,108119],{"class":324},[24,108639,108640,108641,1167,108644,108647],{},"导入 Python 标准库里的数学模块。后面要用 ",[119,108642,108643],{},"math.sin",[119,108645,108646],{},"math.pi"," 生成周期变化的控制信号。",[303,108649,108650],{"className":32174,"code":105455,"language":32176,"meta":308,"style":308},[119,108651,108652,108658],{"__ignoreMap":308},[312,108653,108654,108656],{"class":314,"line":315},[312,108655,32188],{"class":1436},[312,108657,103070],{"class":324},[312,108659,108660,108662,108664,108666],{"class":314,"line":171},[312,108661,32188],{"class":1436},[312,108663,33175],{"class":324},[312,108665,33178],{"class":1436},[312,108667,33181],{"class":324},[24,108669,108670],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[303,108672,108673],{"className":54853,"code":107956,"language":54855,"meta":308,"style":308},[119,108674,108675],{"__ignoreMap":308},[312,108676,108677,108679,108681,108683,108685,108687,108689,108691,108693,108695,108697,108699,108701,108703,108705],{"class":314,"line":315},[312,108678,325],{"class":324},[312,108680,104725],{"class":328},[312,108682,16721],{"class":332},[312,108684,336],{"class":324},[312,108686,107788],{"class":339},[312,108688,55608],{"class":332},[312,108690,336],{"class":324},[312,108692,107788],{"class":339},[312,108694,107797],{"class":332},[312,108696,336],{"class":324},[312,108698,107802],{"class":339},[312,108700,107985],{"class":332},[312,108702,336],{"class":324},[312,108704,107990],{"class":339},[312,108706,102913],{"class":324},[24,108708,108709,108710,108712,108713,108715,108716,108718],{},"这行定义关节。",[119,108711,107609],{}," 表示旋转关节。",[119,108714,108008],{}," 表示绕 y 轴旋转。",[119,108717,108014],{}," 表示有一点阻尼，运动不会完全无损耗。",[303,108720,108722],{"className":54853,"code":108721,"language":54855,"meta":308,"style":308},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[119,108723,108724],{"__ignoreMap":308},[312,108725,108726,108728,108730,108732,108734,108737,108739,108741,108744,108747,108749,108752,108754,108756,108758,108760,108762,108765],{"class":314,"line":315},[312,108727,325],{"class":324},[312,108729,102889],{"class":328},[312,108731,16721],{"class":332},[312,108733,336],{"class":324},[312,108735,108736],{"class":339},"\"link_geom\"",[312,108738,55608],{"class":332},[312,108740,336],{"class":324},[312,108742,108743],{"class":339},"\"capsule\"",[312,108745,108746],{"class":332}," fromto",[312,108748,336],{"class":324},[312,108750,108751],{"class":339},"\"0 0 0 0 0 0.5\"",[312,108753,102905],{"class":332},[312,108755,336],{"class":324},[312,108757,105547],{"class":339},[312,108759,103770],{"class":332},[312,108761,336],{"class":324},[312,108763,108764],{"class":339},"\"0.5\"",[312,108766,102913],{"class":324},[24,108768,108769,108770,108772,108773,108775,108776,108779,108780,30181,108783,108785],{},"这行定义摆杆的形状。",[119,108771,104934],{}," 是胶囊体，适合表示杆子。",[119,108774,104945],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[119,108777,108778],{},"(0,0,0)"," 延伸到 ",[119,108781,108782],{},"(0,0,0.5)",[119,108784,104939],{}," 是半径。",[303,108787,108788],{"className":54853,"code":108022,"language":54855,"meta":308,"style":308},[119,108789,108790],{"__ignoreMap":308},[312,108791,108792,108794,108796,108798,108800,108802,108804,108806,108808,108810,108812,108814,108816,108818,108820,108822,108824,108826],{"class":314,"line":315},[312,108793,325],{"class":324},[312,108795,107843],{"class":328},[312,108797,16721],{"class":332},[312,108799,336],{"class":324},[312,108801,107850],{"class":339},[312,108803,107853],{"class":332},[312,108805,336],{"class":324},[312,108807,107788],{"class":339},[312,108809,107860],{"class":332},[312,108811,336],{"class":324},[312,108813,5483],{"class":339},[312,108815,107867],{"class":332},[312,108817,336],{"class":324},[312,108819,107872],{"class":339},[312,108821,107875],{"class":332},[312,108823,336],{"class":324},[312,108825,107880],{"class":339},[312,108827,102913],{"class":324},[24,108829,108830,108831,108833,108834,108837,108838,108840],{},"这行定义电机。它作用在 ",[119,108832,107609],{}," 关节上。",[119,108835,108836],{},"gear"," 可以理解成放大倍数。",[119,108839,107624],{}," 限制控制输入范围。",[303,108842,108843],{"className":32174,"code":108536,"language":32176,"meta":308,"style":308},[119,108844,108845,108857],{"__ignoreMap":308},[312,108846,108847,108849,108851,108853,108855],{"class":314,"line":315},[312,108848,3338],{"class":1436},[312,108850,108327],{"class":324},[312,108852,22747],{"class":1436},[312,108854,26914],{"class":488},[312,108856,5544],{"class":324},[312,108858,108859,108861,108863,108865,108867],{"class":314,"line":171},[312,108860,105664],{"class":1436},[312,108862,105204],{"class":488},[312,108864,1576],{"class":324},[312,108866,108344],{"class":339},[312,108868,1959],{"class":324},[24,108870,108871,108873],{},[119,108872,103927],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[303,108875,108877],{"className":32174,"code":108876,"language":32176,"meta":308,"style":308},"for step in range(2000):\n",[119,108878,108879],{"__ignoreMap":308},[312,108880,108881,108883,108885,108887,108889,108891,108893],{"class":314,"line":315},[312,108882,4830],{"class":1436},[312,108884,33411],{"class":324},[312,108886,27839],{"class":1436},[312,108888,34238],{"class":488},[312,108890,1576],{"class":324},[312,108892,108365],{"class":488},[312,108894,32582],{"class":324},[24,108896,108897,108898,108900,108901,108904],{},"循环 2000 步。这里没有用 ",[119,108899,2934],{},"，而是用 ",[119,108902,108903],{},"step","，因为后面要用当前步数计算时间。",[303,108906,108908],{"className":32174,"code":108907,"language":32176,"meta":308,"style":308},"t = step * model.opt.timestep\n",[119,108909,108910],{"__ignoreMap":308},[312,108911,108912,108915,108917,108919,108921],{"class":314,"line":315},[312,108913,108914],{"class":324},"t ",[312,108916,336],{"class":1436},[312,108918,33411],{"class":324},[312,108920,2400],{"class":1436},[312,108922,108381],{"class":324},[24,108924,108925],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[303,108927,108928],{"className":32174,"code":108576,"language":32176,"meta":308,"style":308},[119,108929,108930],{"__ignoreMap":308},[312,108931,108932,108934,108936,108938,108940,108942,108944,108946,108948,108950,108952,108954,108956,108958],{"class":314,"line":315},[312,108933,107640],{"class":324},[312,108935,858],{"class":488},[312,108937,6248],{"class":324},[312,108939,336],{"class":1436},[312,108941,108395],{"class":488},[312,108943,8322],{"class":1436},[312,108945,108400],{"class":324},[312,108947,107029],{"class":488},[312,108949,8322],{"class":1436},[312,108951,108407],{"class":324},[312,108953,2400],{"class":1436},[312,108955,63645],{"class":488},[312,108957,8322],{"class":1436},[312,108959,108416],{"class":324},[24,108961,108962],{},"这行给电机输入一个正弦波。拆开看：",[140,108964,108965,108971,108977],{},[143,108966,108967,108970],{},[119,108968,108969],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[143,108972,108973,108976],{},[119,108974,108975],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[143,108978,108979,108982],{},[119,108980,108981],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[24,108984,108985],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[303,108987,108989],{"className":32174,"code":108988,"language":32176,"meta":308,"style":308},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[119,108990,108991],{"__ignoreMap":308},[312,108992,108993,108995,108997,108999,109001,109003],{"class":314,"line":315},[312,108994,32211],{"class":488},[312,108996,1576],{"class":324},[312,108998,108444],{"class":339},[312,109000,106699],{"class":324},[312,109002,2238],{"class":488},[312,109004,32293],{"class":324},[24,109006,109007,109008,109010],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[119,109009,102839],{}," 只有一个数。",[14,109012,104085],{"id":104084},[24,109014,109015],{},"输出类似:",[303,109017,109020],{"className":109018,"code":109019,"language":6992,"meta":308},[6990],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[119,109021,109019],{"__ignoreMap":308},[24,109023,109024,109025,109027],{},"这里 ",[119,109026,107895],{}," 是电机输入。",[24,109029,109030,109033,109034,109037],{},[119,109031,109032],{},"joint qpos"," 是关节角度，单位通常是弧度。",[119,109035,109036],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[24,109039,109040],{},"角度单位提示：",[303,109042,109045],{"className":109043,"code":109044,"language":6992,"meta":308},[6990],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[119,109046,109044],{"__ignoreMap":308},[24,109048,109049,109050,109052,109053,109055],{},"如果你看到 ",[119,109051,105799],{}," 是 ",[119,109054,37124],{},"，大约就是 28.6 度。",[14,109057,104117],{"id":104116},[140,109059,109060,109067,109070,109077,109080,109088,109096],{},[143,109061,104180,109062,104183,109064,30181],{},[119,109063,108080],{},[119,109065,109066],{},"gear=\"5\"",[143,109068,109069],{},"重新运行，观察关节运动是否更剧烈。",[143,109071,104180,109072,104183,109074,30181],{},[119,109073,107624],{},[119,109075,109076],{},"-0.2 0.2",[143,109078,109079],{},"重新运行，观察控制能力是否变弱。",[143,109081,109082,109083,109085,109086,30181],{},"去掉 actuator，确认 ",[119,109084,103927],{}," 变成 ",[119,109087,858],{},[143,109089,104180,109090,104183,109092,109095],{},[119,109091,108014],{},[119,109093,109094],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[143,109097,104180,109098,104183,109100,109103],{},[119,109099,108008],{},[119,109101,109102],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,109105,104222],{"id":104221},[69,109107,109109],{"id":109108},"indexerror-index-0-is-out-of-bounds",[119,109110,109111],{},"IndexError: index 0 is out of bounds",[24,109113,109114,109115,109117],{},"原因是 ",[119,109116,107761],{},"，没有 actuator。",[69,109119,109120],{"id":109120},"关节几乎不动",[24,109122,109123],{},"可能原因:",[140,109125,109126,109131,109135,109141],{},[143,109127,109128,109130],{},[119,109129,108836],{}," 太小",[143,109132,109133,109130],{},[119,109134,107624],{},[143,109136,109137,109140],{},[119,109138,109139],{},"damping"," 太大",[143,109142,109143],{},"重力方向导致运动不明显",[69,109145,109146],{"id":109146},"模型编译失败",[24,109148,109149,109150,109152],{},"检查 actuator 引用的 ",[119,109151,108071],{}," 是否存在，joint 名称是否拼写一致。",[69,109154,109156,109158],{"id":109155},"datactrl0-写了但没有效果",[119,109157,107895],{}," 写了但没有效果",[24,109160,104344],{},[140,109162,109163,109168,109171,109176,109181],{},[143,109164,109165,109167],{},[119,109166,103927],{}," 是否大于 0。",[143,109169,109170],{},"motor 是否引用了正确 joint。",[143,109172,109173,109175],{},[119,109174,108836],{}," 是否太小。",[143,109177,109178,109180],{},[119,109179,107624],{}," 是否把输入限制得太小。",[143,109182,109183],{},"body 是否真的有可动 joint。",[69,109185,109186],{"id":109186},"控制输入超过范围会怎样",[24,109188,109189],{},"如果设置了：",[303,109191,109193],{"className":54853,"code":109192,"language":54855,"meta":308,"style":308},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[119,109194,109195],{"__ignoreMap":308},[312,109196,109197],{"class":314,"line":315},[312,109198,109192],{"class":324},[24,109200,109201],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[303,109203,109205],{"className":32174,"code":109204,"language":32176,"meta":308,"style":308},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[119,109206,109207,109227],{"__ignoreMap":308},[312,109208,109209,109212,109214,109217,109219,109221,109223,109225],{"class":314,"line":315},[312,109210,109211],{"class":324},"action ",[312,109213,336],{"class":1436},[312,109215,109216],{"class":324}," np.clip(action, ",[312,109218,2477],{"class":1436},[312,109220,107029],{"class":488},[312,109222,733],{"class":324},[312,109224,107029],{"class":488},[312,109226,1959],{"class":324},[312,109228,109229,109231,109233,109235,109237],{"class":314,"line":171},[312,109230,107640],{"class":324},[312,109232,858],{"class":488},[312,109234,6248],{"class":324},[312,109236,336],{"class":1436},[312,109238,109239],{"class":324}," action\n",[14,109241,104376],{"id":104375},[24,109243,109244],{},"这一章建立了控制任务的基本形式：",[303,109246,109249],{"className":109247,"code":109248,"language":6992,"meta":308},[6990],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[119,109250,109248],{"__ignoreMap":308},[24,109252,109253],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1856,109255,109256],{},"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":308,"searchDepth":171,"depth":171,"links":109258},[109259,109260,109261,109266,109270,109271,109272,109280],{"id":102416,"depth":171,"text":102417},{"id":102539,"depth":171,"text":102540},{"id":102813,"depth":171,"text":102814,"children":109262},[109263,109264,109265],{"id":107902,"depth":274,"text":107903},{"id":107952,"depth":274,"text":107953},{"id":108018,"depth":274,"text":108019},{"id":103021,"depth":171,"text":103022,"children":109267},[109268,109269],{"id":103341,"depth":274,"text":103341},{"id":103477,"depth":274,"text":103477},{"id":104084,"depth":171,"text":104085},{"id":104116,"depth":171,"text":104117},{"id":104221,"depth":171,"text":104222,"children":109273},[109274,109275,109276,109277,109279],{"id":109108,"depth":274,"text":109111},{"id":109120,"depth":274,"text":109120},{"id":109146,"depth":274,"text":109146},{"id":109155,"depth":274,"text":109278},"data.ctrl[0] 写了但没有效果",{"id":109186,"depth":274,"text":109186},{"id":104375,"depth":171,"text":104376},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107590,"description":308},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":109287,"title":109288,"body":109289,"description":308,"extension":1879,"meta":111198,"navigation":1881,"path":111199,"seo":111200,"stem":111201,"__hash__":111202},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":109290,"toc":111174},[109291,109294,109296,109299,109307,109310,109327,109330,109355,109358,109404,109406,109408,109463,109465,109484,109486,109529,109532,109549,109552,109568,109578,109585,109587,109590,109593,109627,109630,109678,109682,109685,109699,109708,109712,109715,109740,109743,109747,109760,109763,109769,109772,109787,109789,109792,110052,110054,110066,110069,110381,110383,110395,110397,110400,110415,110420,110423,110445,110448,110451,110485,110488,110492,110503,110506,110523,110526,110540,110547,110567,110574,110588,110591,110603,110618,110638,110641,110663,110666,110670,110685,110696,110711,110714,110744,110760,110789,110797,110821,110824,110842,110852,110864,110871,110880,110886,110895,110898,110900,110909,110912,110927,110929,110932,110943,110946,110957,110960,110978,110980,110997,111000,111028,111030,111034,111037,111067,111073,111076,111080,111088,111091,111093,111114,111117,111120,111136,111139,111155,111157,111160,111171],[10,109292,109288],{"id":109293},"_5viewer-可视化与-renderer-离屏渲染",[14,109295,102417],{"id":102416},[24,109297,109298],{},"本章掌握两类可视化方式:",[140,109300,109301,109304],{},[143,109302,109303],{},"交互式 viewer: 适合人工观察仿真",[143,109305,109306],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[24,109308,109309],{},"使用官方接口:",[303,109311,109313],{"className":32174,"code":109312,"language":32176,"meta":308,"style":308},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[119,109314,109315,109322],{"__ignoreMap":308},[312,109316,109317,109319],{"class":314,"line":315},[312,109318,32188],{"class":1436},[312,109320,109321],{"class":324}," mujoco.viewer\n",[312,109323,109324],{"class":314,"line":171},[312,109325,109326],{"class":324},"mujoco.viewer.launch_passive(model, data)\n",[24,109328,109329],{},"以及:",[303,109331,109333],{"className":32174,"code":109332,"language":32176,"meta":308,"style":308},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[119,109334,109335,109345],{"__ignoreMap":308},[312,109336,109337,109340,109342],{"class":314,"line":315},[312,109338,109339],{"class":324},"renderer ",[312,109341,336],{"class":1436},[312,109343,109344],{"class":324}," mujoco.Renderer(model)\n",[312,109346,109347,109350,109352],{"class":314,"line":171},[312,109348,109349],{"class":324},"image ",[312,109351,336],{"class":1436},[312,109353,109354],{"class":324}," renderer.render()\n",[24,109356,109357],{},"新手建议先理解二者区别：",[2086,109359,109360,109376],{},[2089,109361,109362],{},[2092,109363,109364,109367,109370,109373],{},[2095,109365,109366],{"align":1374},"工具",[2095,109368,109369],{"align":1374},"用途",[2095,109371,109372],{"align":1374},"是否打开窗口",[2095,109374,109375],{"align":1374},"常见场景",[2132,109377,109378,109391],{},[2092,109379,109380,109383,109386,109388],{},[2137,109381,109382],{"align":1374},"Viewer",[2137,109384,109385],{"align":1374},"人眼实时观察仿真",[2137,109387,106434],{"align":1374},[2137,109389,109390],{"align":1374},"调试模型、看控制效果",[2092,109392,109393,109396,109399,109401],{},[2137,109394,109395],{"align":1374},"Renderer",[2137,109397,109398],{"align":1374},"生成图像数组",[2137,109400,106447],{"align":1374},[2137,109402,109403],{"align":1374},"保存图片、训练视觉策略、服务器批量采集",[14,109405,102540],{"id":102539},[24,109407,102543],{},[303,109409,109411],{"className":25618,"code":109410,"language":25620,"meta":308,"style":308},"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",[119,109412,109413,109425,109435,109443,109451],{"__ignoreMap":308},[312,109414,109415,109417,109419,109421,109423],{"class":314,"line":315},[312,109416,26372],{"class":332},[312,109418,28111],{"class":339},[312,109420,25630],{"class":339},[312,109422,28196],{"class":488},[312,109424,26474],{"class":488},[312,109426,109427,109429,109431,109433],{"class":314,"line":171},[312,109428,102578],{"class":339},[312,109430,102581],{"class":339},[312,109432,102584],{"class":339},[312,109434,26474],{"class":488},[312,109436,109437,109439,109441],{"class":314,"line":274},[312,109438,102591],{"class":339},[312,109440,102594],{"class":339},[312,109442,26474],{"class":488},[312,109444,109445,109447,109449],{"class":314,"line":298},[312,109446,102601],{"class":339},[312,109448,102604],{"class":339},[312,109450,26474],{"class":488},[312,109452,109453,109455,109457,109459,109461],{"class":314,"line":974},[312,109454,102611],{"class":339},[312,109456,102614],{"class":339},[312,109458,102617],{"class":339},[312,109460,102620],{"class":339},[312,109462,104285],{"class":339},[24,109464,104588],{},[303,109466,109468],{"className":25618,"code":109467,"language":25620,"meta":308,"style":308},"pip install \"mujoco>=2.3\" numpy pillow\n",[119,109469,109470],{"__ignoreMap":308},[312,109471,109472,109474,109476,109478,109481],{"class":314,"line":315},[312,109473,25627],{"class":332},[312,109475,25630],{"class":339},[312,109477,102700],{"class":339},[312,109479,109480],{"class":339}," numpy",[312,109482,109483],{"class":339}," pillow\n",[24,109485,104605],{},[303,109487,109489],{"className":25618,"code":109488,"language":25620,"meta":308,"style":308},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[119,109490,109491,109508,109517],{"__ignoreMap":308},[312,109492,109493,109495,109497,109499,109502,109504,109506],{"class":314,"line":315},[312,109494,32126],{"class":332},[312,109496,30972],{"class":339},[312,109498,26911],{"class":488},[312,109500,109501],{"class":339}," mujoco-render",[312,109503,102745],{"class":339},[312,109505,102748],{"class":488},[312,109507,102751],{"class":488},[312,109509,109510,109512,109514],{"class":314,"line":171},[312,109511,32126],{"class":332},[312,109513,102758],{"class":339},[312,109515,109516],{"class":339}," mujoco-render\n",[312,109518,109519,109521,109523,109525,109527],{"class":314,"line":274},[312,109520,25627],{"class":332},[312,109522,25630],{"class":339},[312,109524,102700],{"class":339},[312,109526,109480],{"class":339},[312,109528,109483],{"class":339},[24,109530,109531],{},"离屏渲染后端:",[303,109533,109535],{"className":25618,"code":109534,"language":25620,"meta":308,"style":308},"export MUJOCO_GL=egl\n",[119,109536,109537],{"__ignoreMap":308},[312,109538,109539,109541,109544,109546],{"class":314,"line":315},[312,109540,26838],{"class":1436},[312,109542,109543],{"class":324}," MUJOCO_GL",[312,109545,336],{"class":1436},[312,109547,109548],{"class":324},"egl\n",[24,109550,109551],{},"或:",[303,109553,109555],{"className":25618,"code":109554,"language":25620,"meta":308,"style":308},"export MUJOCO_GL=osmesa\n",[119,109556,109557],{"__ignoreMap":308},[312,109558,109559,109561,109563,109565],{"class":314,"line":315},[312,109560,26838],{"class":1436},[312,109562,109543],{"class":324},[312,109564,336],{"class":1436},[312,109566,109567],{"class":324},"osmesa\n",[24,109569,109570,109571,109574,109575,30181],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[119,109572,109573],{},"egl"," 失败，再尝试 ",[119,109576,109577],{},"osmesa",[24,109579,109580,109581,109584],{},"如果你在本机桌面环境运行，通常先不要设置 ",[119,109582,109583],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,109586,102814],{"id":102813},[24,109588,109589],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[24,109591,109592],{},"典型 viewer 流程:",[303,109594,109596],{"className":32174,"code":109595,"language":32176,"meta":308,"style":308},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[119,109597,109598,109611,109618,109622],{"__ignoreMap":308},[312,109599,109600,109603,109606,109608],{"class":314,"line":315},[312,109601,109602],{"class":1436},"with",[312,109604,109605],{"class":324}," mujoco.viewer.launch_passive(model, data) ",[312,109607,33178],{"class":1436},[312,109609,109610],{"class":324}," viewer:\n",[312,109612,109613,109615],{"class":314,"line":171},[312,109614,4056],{"class":1436},[312,109616,109617],{"class":324}," viewer.is_running():\n",[312,109619,109620],{"class":314,"line":274},[312,109621,103285],{"class":324},[312,109623,109624],{"class":314,"line":298},[312,109625,109626],{"class":324},"        viewer.sync()\n",[24,109628,109629],{},"典型 renderer 流程:",[303,109631,109633],{"className":32174,"code":109632,"language":32176,"meta":308,"style":308},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[119,109634,109635,109661,109665,109670],{"__ignoreMap":308},[312,109636,109637,109639,109641,109644,109646,109648,109650,109652,109654,109656,109659],{"class":314,"line":315},[312,109638,109339],{"class":324},[312,109640,336],{"class":1436},[312,109642,109643],{"class":324}," mujoco.Renderer(model, ",[312,109645,26777],{"class":1579},[312,109647,336],{"class":1436},[312,109649,44137],{"class":488},[312,109651,733],{"class":324},[312,109653,26773],{"class":1579},[312,109655,336],{"class":1436},[312,109657,109658],{"class":488},"640",[312,109660,1959],{"class":324},[312,109662,109663],{"class":314,"line":171},[312,109664,106274],{"class":324},[312,109666,109667],{"class":314,"line":274},[312,109668,109669],{"class":324},"renderer.update_scene(data)\n",[312,109671,109672,109674,109676],{"class":314,"line":298},[312,109673,109349],{"class":324},[312,109675,336],{"class":1436},[312,109677,109354],{"class":324},[69,109679,109681],{"id":109680},"viewer-的同步逻辑","viewer 的同步逻辑",[24,109683,109684],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[303,109686,109688],{"className":32174,"code":109687,"language":32176,"meta":308,"style":308},"mujoco.mj_step(model, data)\nviewer.sync()\n",[119,109689,109690,109694],{"__ignoreMap":308},[312,109691,109692],{"class":314,"line":315},[312,109693,106274],{"class":324},[312,109695,109696],{"class":314,"line":171},[312,109697,109698],{"class":324},"viewer.sync()\n",[24,109700,109701,109703,109704,109707],{},[119,109702,102984],{}," 负责算物理，",[119,109705,109706],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[69,109709,109711],{"id":109710},"为什么要-sleep","为什么要 sleep",[24,109713,109714],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[303,109716,109718],{"className":32174,"code":109717,"language":32176,"meta":308,"style":308},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[119,109719,109720],{"__ignoreMap":308},[312,109721,109722,109725,109727,109730,109732,109735,109737],{"class":314,"line":315},[312,109723,109724],{"class":324},"sleep_time ",[312,109726,336],{"class":1436},[312,109728,109729],{"class":324}," model.opt.timestep ",[312,109731,2477],{"class":1436},[312,109733,109734],{"class":324}," (time.time() ",[312,109736,2477],{"class":1436},[312,109738,109739],{"class":324}," step_start)\n",[24,109741,109742],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[69,109744,109746],{"id":109745},"renderer-输出是什么","renderer 输出是什么",[303,109748,109750],{"className":32174,"code":109749,"language":32176,"meta":308,"style":308},"image = renderer.render()\n",[119,109751,109752],{"__ignoreMap":308},[312,109753,109754,109756,109758],{"class":314,"line":315},[312,109755,109349],{"class":324},[312,109757,336],{"class":1436},[312,109759,109354],{"class":324},[24,109761,109762],{},"得到的是 NumPy 数组，形状通常是：",[303,109764,109767],{"className":109765,"code":109766,"language":6992,"meta":308},[6990],"(height, width, 3)\n",[119,109768,109766],{"__ignoreMap":308},[24,109770,109771],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[303,109773,109775],{"className":32174,"code":109774,"language":32176,"meta":308,"style":308},"Image.fromarray(image).save(\"render_output.png\")\n",[119,109776,109777],{"__ignoreMap":308},[312,109778,109779,109782,109785],{"class":314,"line":315},[312,109780,109781],{"class":324},"Image.fromarray(image).save(",[312,109783,109784],{"class":339},"\"render_output.png\"",[312,109786,1959],{"class":324},[14,109788,103022],{"id":103021},[24,109790,109791],{},"交互式 Viewer:",[303,109793,109795],{"className":32174,"code":109794,"language":32176,"meta":308,"style":308},"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",[119,109796,109797,109803,109807,109813,109819,109823,109827,109835,109840,109844,109848,109852,109857,109862,109866,109870,109874,109879,109883,109887,109891,109895,109899,109903,109915,109927,109935,109939,109949,109969,109979,109984,109989,109993,110010,110023,110028,110032,110036,110048],{"__ignoreMap":308},[312,109798,109799,109801],{"class":314,"line":315},[312,109800,32188],{"class":1436},[312,109802,33624],{"class":324},[312,109804,109805],{"class":314,"line":171},[312,109806,4205],{"emptyLinePlaceholder":1881},[312,109808,109809,109811],{"class":314,"line":274},[312,109810,32188],{"class":1436},[312,109812,103070],{"class":324},[312,109814,109815,109817],{"class":314,"line":298},[312,109816,32188],{"class":1436},[312,109818,109321],{"class":324},[312,109820,109821],{"class":314,"line":974},[312,109822,4205],{"emptyLinePlaceholder":1881},[312,109824,109825],{"class":314,"line":980},[312,109826,4205],{"emptyLinePlaceholder":1881},[312,109828,109829,109831,109833],{"class":314,"line":997},[312,109830,103083],{"class":488},[312,109832,15366],{"class":1436},[312,109834,103088],{"class":339},[312,109836,109837],{"class":314,"line":1003},[312,109838,109839],{"class":339},"\u003Cmujoco model=\"viewer_demo\">\n",[312,109841,109842],{"class":314,"line":1020},[312,109843,103098],{"class":339},[312,109845,109846],{"class":314,"line":1026},[312,109847,4205],{"emptyLinePlaceholder":1881},[312,109849,109850],{"class":314,"line":3418},[312,109851,103107],{"class":339},[312,109853,109854],{"class":314,"line":3423},[312,109855,109856],{"class":339},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[312,109858,109859],{"class":314,"line":3429},[312,109860,109861],{"class":339},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[312,109863,109864],{"class":314,"line":3434},[312,109865,4205],{"emptyLinePlaceholder":1881},[312,109867,109868],{"class":314,"line":3448},[312,109869,103121],{"class":339},[312,109871,109872],{"class":314,"line":3453},[312,109873,103126],{"class":339},[312,109875,109876],{"class":314,"line":3459},[312,109877,109878],{"class":339},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[312,109880,109881],{"class":314,"line":3480},[312,109882,103136],{"class":339},[312,109884,109885],{"class":314,"line":3485},[312,109886,103141],{"class":339},[312,109888,109889],{"class":314,"line":3499},[312,109890,103146],{"class":339},[312,109892,109893],{"class":314,"line":3504},[312,109894,97468],{"class":339},[312,109896,109897],{"class":314,"line":3533},[312,109898,4205],{"emptyLinePlaceholder":1881},[312,109900,109901],{"class":314,"line":3538},[312,109902,4205],{"emptyLinePlaceholder":1881},[312,109904,109905,109907,109909,109911,109913],{"class":314,"line":3555},[312,109906,33742],{"class":1436},[312,109908,3778],{"class":332},[312,109910,103167],{"class":324},[312,109912,97456],{"class":488},[312,109914,5544],{"class":324},[312,109916,109917,109919,109921,109923,109925],{"class":314,"line":3560},[312,109918,103176],{"class":324},[312,109920,336],{"class":1436},[312,109922,103181],{"class":324},[312,109924,103083],{"class":488},[312,109926,1959],{"class":324},[312,109928,109929,109931,109933],{"class":314,"line":3565},[312,109930,103190],{"class":324},[312,109932,336],{"class":1436},[312,109934,103195],{"class":324},[312,109936,109937],{"class":314,"line":3570},[312,109938,4205],{"emptyLinePlaceholder":1881},[312,109940,109941,109943,109945,109947],{"class":314,"line":3584},[312,109942,35973],{"class":1436},[312,109944,109605],{"class":324},[312,109946,33178],{"class":1436},[312,109948,109610],{"class":324},[312,109950,109951,109954,109957,109959,109962,109964,109967],{"class":314,"line":3589},[312,109952,109953],{"class":1436},"        while",[312,109955,109956],{"class":324}," viewer.is_running() ",[312,109958,32258],{"class":1436},[312,109960,109961],{"class":324}," data.time ",[312,109963,325],{"class":1436},[312,109965,109966],{"class":488}," 5.0",[312,109968,5544],{"class":324},[312,109970,109971,109974,109976],{"class":314,"line":4382},[312,109972,109973],{"class":324},"            step_start ",[312,109975,336],{"class":1436},[312,109977,109978],{"class":324}," time.time()\n",[312,109980,109981],{"class":314,"line":4396},[312,109982,109983],{"class":324},"            mujoco.mj_step(model, data)\n",[312,109985,109986],{"class":314,"line":4404},[312,109987,109988],{"class":324},"            viewer.sync()\n",[312,109990,109991],{"class":314,"line":4409},[312,109992,4205],{"emptyLinePlaceholder":1881},[312,109994,109995,109998,110000,110002,110004,110006,110008],{"class":314,"line":4415},[312,109996,109997],{"class":324},"            sleep_time ",[312,109999,336],{"class":1436},[312,110001,109729],{"class":324},[312,110003,2477],{"class":1436},[312,110005,109734],{"class":324},[312,110007,2477],{"class":1436},[312,110009,109739],{"class":324},[312,110011,110012,110014,110017,110019,110021],{"class":314,"line":4421},[312,110013,6447],{"class":1436},[312,110015,110016],{"class":324}," sleep_time ",[312,110018,2902],{"class":1436},[312,110020,5898],{"class":488},[312,110022,5544],{"class":324},[312,110024,110025],{"class":314,"line":4426},[312,110026,110027],{"class":324},"                time.sleep(sleep_time)\n",[312,110029,110030],{"class":314,"line":9751},[312,110031,4205],{"emptyLinePlaceholder":1881},[312,110033,110034],{"class":314,"line":9775},[312,110035,4205],{"emptyLinePlaceholder":1881},[312,110037,110038,110040,110042,110044,110046],{"class":314,"line":9780},[312,110039,3338],{"class":1436},[312,110041,33015],{"class":488},[312,110043,103328],{"class":1436},[312,110045,103331],{"class":339},[312,110047,5544],{"class":324},[312,110049,110050],{"class":314,"line":9786},[312,110051,103338],{"class":324},[24,110053,105339],{},[303,110055,110057],{"className":25618,"code":110056,"language":25620,"meta":308,"style":308},"touch ch5_viewer.py\n",[119,110058,110059],{"__ignoreMap":308},[312,110060,110061,110063],{"class":314,"line":315},[312,110062,103052],{"class":332},[312,110064,110065],{"class":339}," ch5_viewer.py\n",[24,110067,110068],{},"离屏 Renderer 保存图片:",[303,110070,110072],{"className":32174,"code":110071,"language":32176,"meta":308,"style":308},"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",[119,110073,110074,110086,110090,110096,110106,110110,110114,110122,110127,110131,110135,110139,110143,110148,110152,110156,110160,110164,110168,110172,110176,110180,110184,110188,110192,110204,110216,110224,110249,110253,110269,110273,110277,110292,110301,110305,110319,110324,110329,110333,110345,110357,110361,110365,110377],{"__ignoreMap":308},[312,110075,110076,110078,110081,110083],{"class":314,"line":315},[312,110077,32533],{"class":1436},[312,110079,110080],{"class":324}," pathlib ",[312,110082,32188],{"class":1436},[312,110084,110085],{"class":324}," Path\n",[312,110087,110088],{"class":314,"line":171},[312,110089,4205],{"emptyLinePlaceholder":1881},[312,110091,110092,110094],{"class":314,"line":274},[312,110093,32188],{"class":1436},[312,110095,103070],{"class":324},[312,110097,110098,110100,110102,110104],{"class":314,"line":298},[312,110099,32533],{"class":1436},[312,110101,49058],{"class":488},[312,110103,49061],{"class":1436},[312,110105,49064],{"class":324},[312,110107,110108],{"class":314,"line":974},[312,110109,4205],{"emptyLinePlaceholder":1881},[312,110111,110112],{"class":314,"line":980},[312,110113,4205],{"emptyLinePlaceholder":1881},[312,110115,110116,110118,110120],{"class":314,"line":997},[312,110117,103083],{"class":488},[312,110119,15366],{"class":1436},[312,110121,103088],{"class":339},[312,110123,110124],{"class":314,"line":1003},[312,110125,110126],{"class":339},"\u003Cmujoco model=\"renderer_demo\">\n",[312,110128,110129],{"class":314,"line":1020},[312,110130,103098],{"class":339},[312,110132,110133],{"class":314,"line":1026},[312,110134,4205],{"emptyLinePlaceholder":1881},[312,110136,110137],{"class":314,"line":3418},[312,110138,103107],{"class":339},[312,110140,110141],{"class":314,"line":3423},[312,110142,109856],{"class":339},[312,110144,110145],{"class":314,"line":3429},[312,110146,110147],{"class":339},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[312,110149,110150],{"class":314,"line":3434},[312,110151,109861],{"class":339},[312,110153,110154],{"class":314,"line":3448},[312,110155,4205],{"emptyLinePlaceholder":1881},[312,110157,110158],{"class":314,"line":3453},[312,110159,103121],{"class":339},[312,110161,110162],{"class":314,"line":3459},[312,110163,103126],{"class":339},[312,110165,110166],{"class":314,"line":3480},[312,110167,109878],{"class":339},[312,110169,110170],{"class":314,"line":3485},[312,110171,103136],{"class":339},[312,110173,110174],{"class":314,"line":3499},[312,110175,103141],{"class":339},[312,110177,110178],{"class":314,"line":3504},[312,110179,103146],{"class":339},[312,110181,110182],{"class":314,"line":3533},[312,110183,97468],{"class":339},[312,110185,110186],{"class":314,"line":3538},[312,110187,4205],{"emptyLinePlaceholder":1881},[312,110189,110190],{"class":314,"line":3555},[312,110191,4205],{"emptyLinePlaceholder":1881},[312,110193,110194,110196,110198,110200,110202],{"class":314,"line":3560},[312,110195,33742],{"class":1436},[312,110197,3778],{"class":332},[312,110199,103167],{"class":324},[312,110201,97456],{"class":488},[312,110203,5544],{"class":324},[312,110205,110206,110208,110210,110212,110214],{"class":314,"line":3565},[312,110207,103176],{"class":324},[312,110209,336],{"class":1436},[312,110211,103181],{"class":324},[312,110213,103083],{"class":488},[312,110215,1959],{"class":324},[312,110217,110218,110220,110222],{"class":314,"line":3570},[312,110219,103190],{"class":324},[312,110221,336],{"class":1436},[312,110223,103195],{"class":324},[312,110225,110226,110229,110231,110233,110235,110237,110239,110241,110243,110245,110247],{"class":314,"line":3584},[312,110227,110228],{"class":324},"    renderer ",[312,110230,336],{"class":1436},[312,110232,109643],{"class":324},[312,110234,26777],{"class":1579},[312,110236,336],{"class":1436},[312,110238,44137],{"class":488},[312,110240,733],{"class":324},[312,110242,26773],{"class":1579},[312,110244,336],{"class":1436},[312,110246,109658],{"class":488},[312,110248,1959],{"class":324},[312,110250,110251],{"class":314,"line":3589},[312,110252,4205],{"emptyLinePlaceholder":1881},[312,110254,110255,110257,110259,110261,110263,110265,110267],{"class":314,"line":4382},[312,110256,5006],{"class":1436},[312,110258,103270],{"class":324},[312,110260,27839],{"class":1436},[312,110262,34238],{"class":488},[312,110264,1576],{"class":324},[312,110266,2256],{"class":488},[312,110268,32582],{"class":324},[312,110270,110271],{"class":314,"line":4396},[312,110272,103285],{"class":324},[312,110274,110275],{"class":314,"line":4404},[312,110276,4205],{"emptyLinePlaceholder":1881},[312,110278,110279,110282,110285,110287,110290],{"class":314,"line":4409},[312,110280,110281],{"class":324},"    renderer.update_scene(data, ",[312,110283,110284],{"class":1579},"camera",[312,110286,336],{"class":1436},[312,110288,110289],{"class":339},"\"fixed_camera\"",[312,110291,1959],{"class":324},[312,110293,110294,110297,110299],{"class":314,"line":4415},[312,110295,110296],{"class":324},"    image ",[312,110298,336],{"class":1436},[312,110300,109354],{"class":324},[312,110302,110303],{"class":314,"line":4421},[312,110304,4205],{"emptyLinePlaceholder":1881},[312,110306,110307,110310,110312,110315,110317],{"class":314,"line":4426},[312,110308,110309],{"class":324},"    output_path ",[312,110311,336],{"class":1436},[312,110313,110314],{"class":324}," Path(",[312,110316,109784],{"class":339},[312,110318,1959],{"class":324},[312,110320,110321],{"class":314,"line":9751},[312,110322,110323],{"class":324},"    Image.fromarray(image).save(output_path)\n",[312,110325,110326],{"class":314,"line":9775},[312,110327,110328],{"class":324},"    renderer.close()\n",[312,110330,110331],{"class":314,"line":9780},[312,110332,4205],{"emptyLinePlaceholder":1881},[312,110334,110335,110337,110339,110342],{"class":314,"line":9786},[312,110336,33094],{"class":488},[312,110338,1576],{"class":324},[312,110340,110341],{"class":339},"\"saved:\"",[312,110343,110344],{"class":324},", output_path.resolve())\n",[312,110346,110347,110349,110351,110354],{"class":314,"line":9813},[312,110348,33094],{"class":488},[312,110350,1576],{"class":324},[312,110352,110353],{"class":339},"\"image shape:\"",[312,110355,110356],{"class":324},", image.shape)\n",[312,110358,110359],{"class":314,"line":9818},[312,110360,4205],{"emptyLinePlaceholder":1881},[312,110362,110363],{"class":314,"line":9824},[312,110364,4205],{"emptyLinePlaceholder":1881},[312,110366,110367,110369,110371,110373,110375],{"class":314,"line":9836},[312,110368,3338],{"class":1436},[312,110370,33015],{"class":488},[312,110372,103328],{"class":1436},[312,110374,103331],{"class":339},[312,110376,5544],{"class":324},[312,110378,110379],{"class":314,"line":9848},[312,110380,103338],{"class":324},[24,110382,105339],{},[303,110384,110386],{"className":25618,"code":110385,"language":25620,"meta":308,"style":308},"touch ch5_renderer.py\n",[119,110387,110388],{"__ignoreMap":308},[312,110389,110390,110392],{"class":314,"line":315},[312,110391,103052],{"class":332},[312,110393,110394],{"class":339}," ch5_renderer.py\n",[69,110396,103341],{"id":103341},[24,110398,110399],{},"viewer 上下文：",[303,110401,110403],{"className":32174,"code":110402,"language":32176,"meta":308,"style":308},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[119,110404,110405],{"__ignoreMap":308},[312,110406,110407,110409,110411,110413],{"class":314,"line":315},[312,110408,109602],{"class":1436},[312,110410,109605],{"class":324},[312,110412,33178],{"class":1436},[312,110414,109610],{"class":324},[24,110416,110417,110419],{},[119,110418,109602],{}," 语句会创建窗口，并在退出时自动清理资源。",[24,110421,110422],{},"窗口循环：",[303,110424,110426],{"className":32174,"code":110425,"language":32176,"meta":308,"style":308},"while viewer.is_running() and data.time \u003C 5.0:\n",[119,110427,110428],{"__ignoreMap":308},[312,110429,110430,110433,110435,110437,110439,110441,110443],{"class":314,"line":315},[312,110431,110432],{"class":1436},"while",[312,110434,109956],{"class":324},[312,110436,32258],{"class":1436},[312,110438,109961],{"class":324},[312,110440,325],{"class":1436},[312,110442,109966],{"class":488},[312,110444,5544],{"class":324},[24,110446,110447],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[24,110449,110450],{},"固定相机：",[303,110452,110454],{"className":54853,"code":110453,"language":54855,"meta":308,"style":308},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[119,110455,110456],{"__ignoreMap":308},[312,110457,110458,110460,110462,110464,110466,110468,110470,110472,110475,110478,110480,110483],{"class":314,"line":315},[312,110459,325],{"class":324},[312,110461,110284],{"class":328},[312,110463,16721],{"class":332},[312,110465,336],{"class":324},[312,110467,110289],{"class":339},[312,110469,102875],{"class":332},[312,110471,336],{"class":324},[312,110473,110474],{"class":339},"\"1.5 -2.0 1.2\"",[312,110476,110477],{"class":332}," xyaxes",[312,110479,336],{"class":324},[312,110481,110482],{"class":339},"\"1 0.75 0 0 0 1\"",[312,110484,102913],{"class":324},[24,110486,110487],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[69,110489,110491],{"id":110490},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[303,110493,110495],{"className":32174,"code":110494,"language":32176,"meta":308,"style":308},"import time\n",[119,110496,110497],{"__ignoreMap":308},[312,110498,110499,110501],{"class":314,"line":315},[312,110500,32188],{"class":1436},[312,110502,33624],{"class":324},[24,110504,110505],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[303,110507,110509],{"className":32174,"code":110508,"language":32176,"meta":308,"style":308},"import mujoco\nimport mujoco.viewer\n",[119,110510,110511,110517],{"__ignoreMap":308},[312,110512,110513,110515],{"class":314,"line":315},[312,110514,32188],{"class":1436},[312,110516,103070],{"class":324},[312,110518,110519,110521],{"class":314,"line":171},[312,110520,32188],{"class":1436},[312,110522,109321],{"class":324},[24,110524,110525],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[303,110527,110528],{"className":32174,"code":110402,"language":32176,"meta":308,"style":308},[119,110529,110530],{"__ignoreMap":308},[312,110531,110532,110534,110536,110538],{"class":314,"line":315},[312,110533,109602],{"class":1436},[312,110535,109605],{"class":324},[312,110537,33178],{"class":1436},[312,110539,109610],{"class":324},[24,110541,110542,110543,110546],{},"打开一个 viewer 窗口。",[119,110544,110545],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[303,110548,110549],{"className":32174,"code":110425,"language":32176,"meta":308,"style":308},[119,110550,110551],{"__ignoreMap":308},[312,110552,110553,110555,110557,110559,110561,110563,110565],{"class":314,"line":315},[312,110554,110432],{"class":1436},[312,110556,109956],{"class":324},[312,110558,32258],{"class":1436},[312,110560,109961],{"class":324},[312,110562,325],{"class":1436},[312,110564,109966],{"class":488},[312,110566,5544],{"class":324},[24,110568,110569,110570,110573],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[119,110571,110572],{},"viewer.is_running()"," 会变成 false，循环结束。",[303,110575,110577],{"className":32174,"code":110576,"language":32176,"meta":308,"style":308},"step_start = time.time()\n",[119,110578,110579],{"__ignoreMap":308},[312,110580,110581,110584,110586],{"class":314,"line":315},[312,110582,110583],{"class":324},"step_start ",[312,110585,336],{"class":1436},[312,110587,109978],{"class":324},[24,110589,110590],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[303,110592,110593],{"className":32174,"code":109687,"language":32176,"meta":308,"style":308},[119,110594,110595,110599],{"__ignoreMap":308},[312,110596,110597],{"class":314,"line":315},[312,110598,106274],{"class":324},[312,110600,110601],{"class":314,"line":171},[312,110602,109698],{"class":324},[24,110604,110605,110607,110608,110610,110611,110613,110614,110617],{},[119,110606,102984],{}," 推进物理仿真。",[119,110609,109706],{}," 把最新的 ",[119,110612,35196],{}," 同步到窗口里显示。没有 ",[119,110615,110616],{},"sync()","，窗口可能看不到最新状态。",[303,110619,110620],{"className":32174,"code":109717,"language":32176,"meta":308,"style":308},[119,110621,110622],{"__ignoreMap":308},[312,110623,110624,110626,110628,110630,110632,110634,110636],{"class":314,"line":315},[312,110625,109724],{"class":324},[312,110627,336],{"class":1436},[312,110629,109729],{"class":324},[312,110631,2477],{"class":1436},[312,110633,109734],{"class":324},[312,110635,2477],{"class":1436},[312,110637,109739],{"class":324},[24,110639,110640],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[303,110642,110644],{"className":32174,"code":110643,"language":32176,"meta":308,"style":308},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[119,110645,110646,110658],{"__ignoreMap":308},[312,110647,110648,110650,110652,110654,110656],{"class":314,"line":315},[312,110649,3338],{"class":1436},[312,110651,110016],{"class":324},[312,110653,2902],{"class":1436},[312,110655,5898],{"class":488},[312,110657,5544],{"class":324},[312,110659,110660],{"class":314,"line":171},[312,110661,110662],{"class":324},"    time.sleep(sleep_time)\n",[24,110664,110665],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[69,110667,110669],{"id":110668},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[303,110671,110673],{"className":32174,"code":110672,"language":32176,"meta":308,"style":308},"from pathlib import Path\n",[119,110674,110675],{"__ignoreMap":308},[312,110676,110677,110679,110681,110683],{"class":314,"line":315},[312,110678,32533],{"class":1436},[312,110680,110080],{"class":324},[312,110682,32188],{"class":1436},[312,110684,110085],{"class":324},[24,110686,110687,110688,110691,110692,110695],{},"导入 ",[119,110689,110690],{},"Path","，用来处理文件路径。相比直接写字符串，",[119,110693,110694],{},"Path(\"render_output.png\")"," 更清晰。",[303,110697,110699],{"className":32174,"code":110698,"language":32176,"meta":308,"style":308},"from PIL import Image\n",[119,110700,110701],{"__ignoreMap":308},[312,110702,110703,110705,110707,110709],{"class":314,"line":315},[312,110704,32533],{"class":1436},[312,110706,49058],{"class":488},[312,110708,49061],{"class":1436},[312,110710,49064],{"class":324},[24,110712,110713],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[303,110715,110716],{"className":54853,"code":110453,"language":54855,"meta":308,"style":308},[119,110717,110718],{"__ignoreMap":308},[312,110719,110720,110722,110724,110726,110728,110730,110732,110734,110736,110738,110740,110742],{"class":314,"line":315},[312,110721,325],{"class":324},[312,110723,110284],{"class":328},[312,110725,16721],{"class":332},[312,110727,336],{"class":324},[312,110729,110289],{"class":339},[312,110731,102875],{"class":332},[312,110733,336],{"class":324},[312,110735,110474],{"class":339},[312,110737,110477],{"class":332},[312,110739,336],{"class":324},[312,110741,110482],{"class":339},[312,110743,102913],{"class":324},[24,110745,110746,110747,110749,110750,110752,110753,110756,110757,110759],{},"定义一个相机。",[119,110748,81581],{}," 是相机名字。",[119,110751,105915],{}," 是相机在世界里的位置。",[119,110754,110755],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[119,110758,105915],{}," 来调视角。",[303,110761,110763],{"className":32174,"code":110762,"language":32176,"meta":308,"style":308},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[119,110764,110765],{"__ignoreMap":308},[312,110766,110767,110769,110771,110773,110775,110777,110779,110781,110783,110785,110787],{"class":314,"line":315},[312,110768,109339],{"class":324},[312,110770,336],{"class":1436},[312,110772,109643],{"class":324},[312,110774,26777],{"class":1579},[312,110776,336],{"class":1436},[312,110778,44137],{"class":488},[312,110780,733],{"class":324},[312,110782,26773],{"class":1579},[312,110784,336],{"class":1436},[312,110786,109658],{"class":488},[312,110788,1959],{"class":324},[24,110790,110791,110792,1167,110794,110796],{},"创建离屏渲染器。",[119,110793,26777],{},[119,110795,26773],{}," 决定输出图片大小。",[303,110798,110799],{"className":32174,"code":103445,"language":32176,"meta":308,"style":308},[119,110800,110801,110817],{"__ignoreMap":308},[312,110802,110803,110805,110807,110809,110811,110813,110815],{"class":314,"line":315},[312,110804,4830],{"class":1436},[312,110806,103270],{"class":324},[312,110808,27839],{"class":1436},[312,110810,34238],{"class":488},[312,110812,1576],{"class":324},[312,110814,2256],{"class":488},[312,110816,32582],{"class":324},[312,110818,110819],{"class":314,"line":171},[312,110820,103468],{"class":324},[24,110822,110823],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[303,110825,110827],{"className":32174,"code":110826,"language":32176,"meta":308,"style":308},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[119,110828,110829],{"__ignoreMap":308},[312,110830,110831,110834,110836,110838,110840],{"class":314,"line":315},[312,110832,110833],{"class":324},"renderer.update_scene(data, ",[312,110835,110284],{"class":1579},[312,110837,336],{"class":1436},[312,110839,110289],{"class":339},[312,110841,1959],{"class":324},[24,110843,110844,110845,110847,110848,110851],{},"告诉 renderer：用当前 ",[119,110846,35196],{}," 的状态更新画面，并使用名为 ",[119,110849,110850],{},"fixed_camera"," 的相机视角。",[303,110853,110854],{"className":32174,"code":109749,"language":32176,"meta":308,"style":308},[119,110855,110856],{"__ignoreMap":308},[312,110857,110858,110860,110862],{"class":314,"line":315},[312,110859,109349],{"class":324},[312,110861,336],{"class":1436},[312,110863,109354],{"class":324},[24,110865,110866,110867,110870],{},"真正渲染出图像。",[119,110868,110869],{},"image"," 是一个 NumPy 数组，不是文件。",[303,110872,110874],{"className":32174,"code":110873,"language":32176,"meta":308,"style":308},"Image.fromarray(image).save(output_path)\n",[119,110875,110876],{"__ignoreMap":308},[312,110877,110878],{"class":314,"line":315},[312,110879,110873],{"class":324},[24,110881,110882,110883,30181],{},"把数组转换成图片，并保存到 ",[119,110884,110885],{},"render_output.png",[303,110887,110889],{"className":32174,"code":110888,"language":32176,"meta":308,"style":308},"renderer.close()\n",[119,110890,110891],{"__ignoreMap":308},[312,110892,110893],{"class":314,"line":315},[312,110894,110888],{"class":324},[24,110896,110897],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110899,104085],{"id":104084},[24,110901,110902,110903,110905,110906,30181],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[119,110904,110885],{},"，并输出图像数组形状，例如 ",[119,110907,110908],{},"(480, 640, 3)",[24,110910,110911],{},"如果图片里看不到方块，先检查：",[140,110913,110914,110917,110920],{},[143,110915,110916],{},"方块是否掉到相机视野外。",[143,110918,110919],{},"camera 位置是否合理。",[143,110921,110922,110923,110926],{},"是否在 ",[119,110924,110925],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110928,104117],{"id":104116},[24,110930,110931],{},"运行 viewer:",[303,110933,110935],{"className":25618,"code":110934,"language":25620,"meta":308,"style":308},"python ch5_viewer.py\n",[119,110936,110937],{"__ignoreMap":308},[312,110938,110939,110941],{"class":314,"line":315},[312,110940,32176],{"class":332},[312,110942,110065],{"class":339},[24,110944,110945],{},"运行 renderer:",[303,110947,110949],{"className":25618,"code":110948,"language":25620,"meta":308,"style":308},"python ch5_renderer.py\n",[119,110950,110951],{"__ignoreMap":308},[312,110952,110953,110955],{"class":314,"line":315},[312,110954,32176],{"class":332},[312,110956,110394],{"class":339},[24,110958,110959],{},"如果在服务器上运行:",[303,110961,110963],{"className":25618,"code":110962,"language":25620,"meta":308,"style":308},"MUJOCO_GL=egl python ch5_renderer.py\n",[119,110964,110965],{"__ignoreMap":308},[312,110966,110967,110969,110971,110973,110976],{"class":314,"line":315},[312,110968,109583],{"class":324},[312,110970,336],{"class":1436},[312,110972,109573],{"class":339},[312,110974,110975],{"class":332}," python",[312,110977,110394],{"class":339},[24,110979,109551],{},[303,110981,110983],{"className":25618,"code":110982,"language":25620,"meta":308,"style":308},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[119,110984,110985],{"__ignoreMap":308},[312,110986,110987,110989,110991,110993,110995],{"class":314,"line":315},[312,110988,109583],{"class":324},[312,110990,336],{"class":1436},[312,110992,109577],{"class":339},[312,110994,110975],{"class":332},[312,110996,110394],{"class":339},[24,110998,110999],{},"再做几个练习：",[140,111001,111002,111009,111012,111018],{},[143,111003,111004,111005,111008],{},"把 renderer 分辨率改成 ",[119,111006,111007],{},"height=240, width=320","，观察输出 shape。",[143,111010,111011],{},"把方块颜色改成蓝色，重新保存图片。",[143,111013,111014,111015,111017],{},"把相机 ",[119,111016,105915],{}," 改远一点，观察画面中物体是否变小。",[143,111019,111020,111021,104183,111024,111027],{},"把 viewer 示例中的 ",[119,111022,111023],{},"data.time \u003C 5.0",[119,111025,111026],{},"data.time \u003C 20.0","，观察更长时间。",[14,111029,104222],{"id":104221},[69,111031,111033],{"id":111032},"viewer-窗口打不开","viewer 窗口打不开",[24,111035,111036],{},"安装:",[303,111038,111040],{"className":25618,"code":111039,"language":25620,"meta":308,"style":308},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[119,111041,111042],{"__ignoreMap":308},[312,111043,111044,111046,111048,111050,111052,111054,111056,111058,111060,111062,111064],{"class":314,"line":315},[312,111045,26372],{"class":332},[312,111047,28111],{"class":339},[312,111049,25630],{"class":339},[312,111051,28196],{"class":488},[312,111053,104275],{"class":339},[312,111055,102604],{"class":339},[312,111057,104280],{"class":339},[312,111059,102617],{"class":339},[312,111061,102623],{"class":339},[312,111063,102614],{"class":339},[312,111065,111066],{"class":339}," libXinerama\n",[69,111068,111070],{"id":111069},"glfwerror",[119,111071,111072],{},"GLFWError",[24,111074,111075],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[69,111077,111079],{"id":111078},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[24,111081,111082,111083,84310,111085,111087],{},"尝试 ",[119,111084,102806],{},[119,111086,102809],{},"。可能存在版本差异。",[69,111089,111090],{"id":111090},"保存图片是黑的",[24,111092,104344],{},[140,111094,111095,111098,111101,111111],{},[143,111096,111097],{},"XML 里是否有 light。",[143,111099,111100],{},"相机是否对着模型。",[143,111102,111103,111104,111107,111108,30181],{},"是否先 ",[119,111105,111106],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[119,111109,111110],{},"renderer.render()",[143,111112,111113],{},"物体是否已经掉出视野。",[69,111115,111116],{"id":111116},"远程服务器没有显示器",[24,111118,111119],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[303,111121,111122],{"className":25618,"code":110962,"language":25620,"meta":308,"style":308},[119,111123,111124],{"__ignoreMap":308},[312,111125,111126,111128,111130,111132,111134],{"class":314,"line":315},[312,111127,109583],{"class":324},[312,111129,336],{"class":1436},[312,111131,109573],{"class":339},[312,111133,110975],{"class":332},[312,111135,110394],{"class":339},[24,111137,111138],{},"如果 EGL 不可用，再尝试：",[303,111140,111141],{"className":25618,"code":110982,"language":25620,"meta":308,"style":308},[119,111142,111143],{"__ignoreMap":308},[312,111144,111145,111147,111149,111151,111153],{"class":314,"line":315},[312,111146,109583],{"class":324},[312,111148,336],{"class":1436},[312,111150,109577],{"class":339},[312,111152,110975],{"class":332},[312,111154,110394],{"class":339},[14,111156,104376],{"id":104375},[24,111158,111159],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[140,111161,111162,111165,111168],{},[143,111163,111164],{},"先用 viewer 看模型和控制是否正常。",[143,111166,111167],{},"再用 renderer 保存图片或构造视觉观测。",[143,111169,111170],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1856,111172,111173],{},"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":308,"searchDepth":171,"depth":171,"links":111175},[111176,111177,111178,111183,111188,111189,111190,111197],{"id":102416,"depth":171,"text":102417},{"id":102539,"depth":171,"text":102540},{"id":102813,"depth":171,"text":102814,"children":111179},[111180,111181,111182],{"id":109680,"depth":274,"text":109681},{"id":109710,"depth":274,"text":109711},{"id":109745,"depth":274,"text":109746},{"id":103021,"depth":171,"text":103022,"children":111184},[111185,111186,111187],{"id":103341,"depth":274,"text":103341},{"id":110490,"depth":274,"text":110491},{"id":110668,"depth":274,"text":110669},{"id":104084,"depth":171,"text":104085},{"id":104116,"depth":171,"text":104117},{"id":104221,"depth":171,"text":104222,"children":111191},[111192,111193,111194,111195,111196],{"id":111032,"depth":274,"text":111033},{"id":111069,"depth":274,"text":111072},{"id":111078,"depth":274,"text":111079},{"id":111090,"depth":274,"text":111090},{"id":111116,"depth":274,"text":111116},{"id":104375,"depth":171,"text":104376},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":109288,"description":308},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":111204,"title":111205,"body":111206,"description":308,"extension":1879,"meta":113117,"navigation":1881,"path":113118,"seo":113119,"stem":113120,"__hash__":113121},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":111207,"toc":113093},[111208,111211,111213,111216,111218,111237,111240,111246,111249,111251,111253,111277,111279,111293,111295,111336,111338,111349,111351,111354,111360,111363,111397,111400,111432,111435,111467,111471,111474,111514,111517,111523,111526,111532,111536,111539,111545,111548,111552,111555,111595,111597,111610,111613,111615,112197,112199,112211,112214,112225,112227,112230,112249,112261,112264,112285,112288,112291,112334,112337,112340,112360,112367,112369,112387,112402,112405,112411,112414,112420,112437,112444,112475,112486,112520,112531,112548,112557,112565,112570,112584,112587,112608,112614,112628,112633,112663,112673,112698,112706,112729,112732,112748,112751,112759,112765,112787,112800,112821,112830,112869,112880,112882,112885,112891,112894,112897,112903,112906,112926,112929,112931,112970,112972,112975,112983,112986,112989,113016,113019,113029,113035,113038,113044,113046,113052,113056,113059,113061,113064,113088,113091],[10,111209,111205],{"id":111210},"_6控制任务cartpole",[14,111212,102417],{"id":102416},[24,111214,111215],{},"本章搭建一个最小 Cartpole 控制任务。",[24,111217,106100],{},[140,111219,111220,111223,111225,111228,111231,111234],{},[143,111221,111222],{},"slide joint",[143,111224,107953],{},[143,111226,111227],{},"cart force actuator",[143,111229,111230],{},"状态观测",[143,111232,111233],{},"简单控制循环",[143,111235,111236],{},"reward 设计雏形",[24,111238,111239],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[303,111241,111244],{"className":111242,"code":111243,"language":6992,"meta":308},[6990],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[119,111245,111243],{"__ignoreMap":308},[24,111247,111248],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,111250,102540],{"id":102539},[24,111252,102543],{},[303,111254,111255],{"className":25618,"code":106157,"language":25620,"meta":308,"style":308},[119,111256,111257],{"__ignoreMap":308},[312,111258,111259,111261,111263,111265,111267,111269,111271,111273,111275],{"class":314,"line":315},[312,111260,26372],{"class":332},[312,111262,28111],{"class":339},[312,111264,25630],{"class":339},[312,111266,28196],{"class":488},[312,111268,106172],{"class":339},[312,111270,102568],{"class":339},[312,111272,104270],{"class":339},[312,111274,102584],{"class":339},[312,111276,106181],{"class":339},[24,111278,104588],{},[303,111280,111281],{"className":25618,"code":102689,"language":25620,"meta":308,"style":308},[119,111282,111283],{"__ignoreMap":308},[312,111284,111285,111287,111289,111291],{"class":314,"line":315},[312,111286,25627],{"class":332},[312,111288,25630],{"class":339},[312,111290,102700],{"class":339},[312,111292,102703],{"class":339},[24,111294,104605],{},[303,111296,111298],{"className":25618,"code":111297,"language":25620,"meta":308,"style":308},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[119,111299,111300,111317,111326],{"__ignoreMap":308},[312,111301,111302,111304,111306,111308,111311,111313,111315],{"class":314,"line":315},[312,111303,32126],{"class":332},[312,111305,30972],{"class":339},[312,111307,26911],{"class":488},[312,111309,111310],{"class":339}," mujoco-cartpole",[312,111312,102745],{"class":339},[312,111314,102748],{"class":488},[312,111316,102751],{"class":488},[312,111318,111319,111321,111323],{"class":314,"line":171},[312,111320,32126],{"class":332},[312,111322,102758],{"class":339},[312,111324,111325],{"class":339}," mujoco-cartpole\n",[312,111327,111328,111330,111332,111334],{"class":314,"line":274},[312,111329,25627],{"class":332},[312,111331,25630],{"class":339},[312,111333,102700],{"class":339},[312,111335,102703],{"class":339},[24,111337,102774],{},[140,111339,111340,111343,111346],{},[143,111341,111342],{},"本章不依赖 Gymnasium。",[143,111344,111345],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[143,111347,111348],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,111350,102814],{"id":102813},[24,111352,111353],{},"Cartpole 的模型结构:",[303,111355,111358],{"className":111356,"code":111357,"language":6992,"meta":308},[6990],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[119,111359,111357],{"__ignoreMap":308},[24,111361,111362],{},"小车通过 slide joint 左右移动:",[303,111364,111366],{"className":54853,"code":111365,"language":54855,"meta":308,"style":308},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[119,111367,111368],{"__ignoreMap":308},[312,111369,111370,111372,111374,111376,111378,111381,111383,111385,111388,111390,111392,111395],{"class":314,"line":315},[312,111371,325],{"class":324},[312,111373,104725],{"class":328},[312,111375,16721],{"class":332},[312,111377,336],{"class":324},[312,111379,111380],{"class":339},"\"cart_x\"",[312,111382,55608],{"class":332},[312,111384,336],{"class":324},[312,111386,111387],{"class":339},"\"slide\"",[312,111389,107797],{"class":332},[312,111391,336],{"class":324},[312,111393,111394],{"class":339},"\"1 0 0\"",[312,111396,102913],{"class":324},[24,111398,111399],{},"杆子通过 hinge joint 旋转:",[303,111401,111403],{"className":54853,"code":111402,"language":54855,"meta":308,"style":308},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[119,111404,111405],{"__ignoreMap":308},[312,111406,111407,111409,111411,111413,111415,111418,111420,111422,111424,111426,111428,111430],{"class":314,"line":315},[312,111408,325],{"class":324},[312,111410,104725],{"class":328},[312,111412,16721],{"class":332},[312,111414,336],{"class":324},[312,111416,111417],{"class":339},"\"pole_hinge\"",[312,111419,55608],{"class":332},[312,111421,336],{"class":324},[312,111423,107788],{"class":339},[312,111425,107797],{"class":332},[312,111427,336],{"class":324},[312,111429,107802],{"class":339},[312,111431,102913],{"class":324},[24,111433,111434],{},"控制力作用在小车 slide joint 上:",[303,111436,111438],{"className":54853,"code":111437,"language":54855,"meta":308,"style":308},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[119,111439,111440],{"__ignoreMap":308},[312,111441,111442,111444,111446,111448,111450,111453,111455,111457,111459,111461,111463,111465],{"class":314,"line":315},[312,111443,325],{"class":324},[312,111445,107843],{"class":328},[312,111447,16721],{"class":332},[312,111449,336],{"class":324},[312,111451,111452],{"class":339},"\"cart_motor\"",[312,111454,107853],{"class":332},[312,111456,336],{"class":324},[312,111458,111380],{"class":339},[312,111460,107860],{"class":332},[312,111462,336],{"class":324},[312,111464,56100],{"class":339},[312,111466,102913],{"class":324},[69,111468,111470],{"id":111469},"cartpole-的状态是什么","Cartpole 的状态是什么",[24,111472,111473],{},"这个简化模型有两个关节：",[2086,111475,111476,111487],{},[2089,111477,111478],{},[2092,111479,111480,111482,111484],{},[2095,111481,104528],{"align":1374},[2095,111483,25533],{"align":1374},[2095,111485,111486],{"align":1374},"对应状态",[2132,111488,111489,111502],{},[2092,111490,111491,111496,111499],{},[2137,111492,111493],{"align":1374},[119,111494,111495],{},"cart_x",[2137,111497,111498],{"align":1374},"slide",[2137,111500,111501],{"align":1374},"小车 x 位置",[2092,111503,111504,111509,111511],{},[2137,111505,111506],{"align":1374},[119,111507,111508],{},"pole_hinge",[2137,111510,107609],{"align":1374},[2137,111512,111513],{"align":1374},"杆子角度",[24,111515,111516],{},"所以：",[303,111518,111521],{"className":111519,"code":111520,"language":6992,"meta":308},[6990],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[119,111522,111520],{"__ignoreMap":308},[24,111524,111525],{},"把它们拼起来就是观测：",[303,111527,111530],{"className":111528,"code":111529,"language":6992,"meta":308},[6990],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[119,111531,111529],{"__ignoreMap":308},[69,111533,111535],{"id":111534},"action-是什么","action 是什么",[24,111537,111538],{},"本章只有一个 actuator：",[303,111540,111543],{"className":111541,"code":111542,"language":6992,"meta":308},[6990],"data.ctrl[0] = action\n",[119,111544,111542],{"__ignoreMap":308},[24,111546,111547],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[69,111549,111551],{"id":111550},"reward-是什么","reward 是什么",[24,111553,111554],{},"奖励函数：",[303,111556,111558],{"className":32174,"code":111557,"language":32176,"meta":308,"style":308},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[119,111559,111560],{"__ignoreMap":308},[312,111561,111562,111564,111567,111569,111571,111573,111576,111578,111581,111583,111585,111587,111590,111592],{"class":314,"line":315},[312,111563,18846],{"class":1436},[312,111565,111566],{"class":488}," float",[312,111568,1576],{"class":324},[312,111570,104172],{"class":488},[312,111572,54057],{"class":1436},[312,111574,111575],{"class":488}," 0.1",[312,111577,8322],{"class":1436},[312,111579,111580],{"class":324}," cart_x ",[312,111582,2400],{"class":1436},[312,111584,111580],{"class":324},[312,111586,2477],{"class":1436},[312,111588,111589],{"class":324}," pole_angle ",[312,111591,2400],{"class":1436},[312,111593,111594],{"class":324}," pole_angle)\n",[24,111596,107995],{},[140,111598,111599,111604,111607],{},[143,111600,111601,111602,30181],{},"基础奖励是 ",[119,111603,104172],{},[143,111605,111606],{},"小车离中心越远，扣分越多。",[143,111608,111609],{},"杆子角度越大，扣分越多。",[24,111611,111612],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,111614,103022],{"id":103021},[303,111616,111618],{"className":32174,"code":111617,"language":32176,"meta":308,"style":308},"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",[119,111619,111620,111626,111636,111640,111644,111652,111657,111661,111665,111669,111674,111678,111683,111688,111693,111697,111702,111707,111712,111716,111720,111724,111728,111732,111737,111741,111745,111749,111753,111757,111767,111774,111778,111782,111796,111810,111823,111853,111857,111861,111873,111885,111893,111897,111910,111914,111918,111927,111931,111947,111957,111970,111983,111987,112010,112028,112032,112044,112048,112052,112062,112072,112076,112092,112133,112137,112157,112173,112177,112181,112193],{"__ignoreMap":308},[312,111621,111622,111624],{"class":314,"line":315},[312,111623,32188],{"class":1436},[312,111625,103070],{"class":324},[312,111627,111628,111630,111632,111634],{"class":314,"line":171},[312,111629,32188],{"class":1436},[312,111631,33175],{"class":324},[312,111633,33178],{"class":1436},[312,111635,33181],{"class":324},[312,111637,111638],{"class":314,"line":274},[312,111639,4205],{"emptyLinePlaceholder":1881},[312,111641,111642],{"class":314,"line":298},[312,111643,4205],{"emptyLinePlaceholder":1881},[312,111645,111646,111648,111650],{"class":314,"line":974},[312,111647,103083],{"class":488},[312,111649,15366],{"class":1436},[312,111651,103088],{"class":339},[312,111653,111654],{"class":314,"line":980},[312,111655,111656],{"class":339},"\u003Cmujoco model=\"cartpole\">\n",[312,111658,111659],{"class":314,"line":997},[312,111660,103098],{"class":339},[312,111662,111663],{"class":314,"line":1003},[312,111664,4205],{"emptyLinePlaceholder":1881},[312,111666,111667],{"class":314,"line":1020},[312,111668,103107],{"class":339},[312,111670,111671],{"class":314,"line":1026},[312,111672,111673],{"class":339},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[312,111675,111676],{"class":314,"line":3418},[312,111677,4205],{"emptyLinePlaceholder":1881},[312,111679,111680],{"class":314,"line":3423},[312,111681,111682],{"class":339},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[312,111684,111685],{"class":314,"line":3429},[312,111686,111687],{"class":339},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[312,111689,111690],{"class":314,"line":3434},[312,111691,111692],{"class":339},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[312,111694,111695],{"class":314,"line":3448},[312,111696,4205],{"emptyLinePlaceholder":1881},[312,111698,111699],{"class":314,"line":3453},[312,111700,111701],{"class":339},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[312,111703,111704],{"class":314,"line":3459},[312,111705,111706],{"class":339},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[312,111708,111709],{"class":314,"line":3480},[312,111710,111711],{"class":339},"        \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",[312,111713,111714],{"class":314,"line":3485},[312,111715,108207],{"class":339},[312,111717,111718],{"class":314,"line":3499},[312,111719,103136],{"class":339},[312,111721,111722],{"class":314,"line":3504},[312,111723,103141],{"class":339},[312,111725,111726],{"class":314,"line":3533},[312,111727,4205],{"emptyLinePlaceholder":1881},[312,111729,111730],{"class":314,"line":3538},[312,111731,108224],{"class":339},[312,111733,111734],{"class":314,"line":3555},[312,111735,111736],{"class":339},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[312,111738,111739],{"class":314,"line":3560},[312,111740,108234],{"class":339},[312,111742,111743],{"class":314,"line":3565},[312,111744,103146],{"class":339},[312,111746,111747],{"class":314,"line":3570},[312,111748,97468],{"class":339},[312,111750,111751],{"class":314,"line":3584},[312,111752,4205],{"emptyLinePlaceholder":1881},[312,111754,111755],{"class":314,"line":3589},[312,111756,4205],{"emptyLinePlaceholder":1881},[312,111758,111759,111761,111764],{"class":314,"line":4382},[312,111760,33742],{"class":1436},[312,111762,111763],{"class":332}," get_observation",[312,111765,111766],{"class":324},"(data: mujoco.MjData) -> np.ndarray:\n",[312,111768,111769,111771],{"class":314,"line":4396},[312,111770,5895],{"class":1436},[312,111772,111773],{"class":324}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[312,111775,111776],{"class":314,"line":4404},[312,111777,4205],{"emptyLinePlaceholder":1881},[312,111779,111780],{"class":314,"line":4409},[312,111781,4205],{"emptyLinePlaceholder":1881},[312,111783,111784,111786,111789,111792,111794],{"class":314,"line":4415},[312,111785,33742],{"class":1436},[312,111787,111788],{"class":332}," compute_reward",[312,111790,111791],{"class":324},"(obs: np.ndarray) -> ",[312,111793,1992],{"class":488},[312,111795,5544],{"class":324},[312,111797,111798,111801,111803,111806,111808],{"class":314,"line":4421},[312,111799,111800],{"class":324},"    cart_x ",[312,111802,336],{"class":1436},[312,111804,111805],{"class":324}," obs[",[312,111807,858],{"class":488},[312,111809,35041],{"class":324},[312,111811,111812,111815,111817,111819,111821],{"class":314,"line":4426},[312,111813,111814],{"class":324},"    pole_angle ",[312,111816,336],{"class":1436},[312,111818,111805],{"class":324},[312,111820,1433],{"class":488},[312,111822,35041],{"class":324},[312,111824,111825,111827,111829,111831,111833,111835,111837,111839,111841,111843,111845,111847,111849,111851],{"class":314,"line":9751},[312,111826,5895],{"class":1436},[312,111828,111566],{"class":488},[312,111830,1576],{"class":324},[312,111832,104172],{"class":488},[312,111834,54057],{"class":1436},[312,111836,111575],{"class":488},[312,111838,8322],{"class":1436},[312,111840,111580],{"class":324},[312,111842,2400],{"class":1436},[312,111844,111580],{"class":324},[312,111846,2477],{"class":1436},[312,111848,111589],{"class":324},[312,111850,2400],{"class":1436},[312,111852,111594],{"class":324},[312,111854,111855],{"class":314,"line":9775},[312,111856,4205],{"emptyLinePlaceholder":1881},[312,111858,111859],{"class":314,"line":9780},[312,111860,4205],{"emptyLinePlaceholder":1881},[312,111862,111863,111865,111867,111869,111871],{"class":314,"line":9786},[312,111864,33742],{"class":1436},[312,111866,3778],{"class":332},[312,111868,103167],{"class":324},[312,111870,97456],{"class":488},[312,111872,5544],{"class":324},[312,111874,111875,111877,111879,111881,111883],{"class":314,"line":9813},[312,111876,103176],{"class":324},[312,111878,336],{"class":1436},[312,111880,103181],{"class":324},[312,111882,103083],{"class":488},[312,111884,1959],{"class":324},[312,111886,111887,111889,111891],{"class":314,"line":9818},[312,111888,103190],{"class":324},[312,111890,336],{"class":1436},[312,111892,103195],{"class":324},[312,111894,111895],{"class":314,"line":9824},[312,111896,4205],{"emptyLinePlaceholder":1881},[312,111898,111899,111901,111903,111905,111907],{"class":314,"line":9836},[312,111900,106838],{"class":324},[312,111902,1433],{"class":488},[312,111904,6248],{"class":324},[312,111906,336],{"class":1436},[312,111908,111909],{"class":488}," 0.1\n",[312,111911,111912],{"class":314,"line":9848},[312,111913,106851],{"class":324},[312,111915,111916],{"class":314,"line":9860},[312,111917,4205],{"emptyLinePlaceholder":1881},[312,111919,111920,111923,111925],{"class":314,"line":11519},[312,111921,111922],{"class":324},"    total_reward ",[312,111924,336],{"class":1436},[312,111926,106530],{"class":488},[312,111928,111929],{"class":314,"line":11544},[312,111930,4205],{"emptyLinePlaceholder":1881},[312,111932,111933,111935,111937,111939,111941,111943,111945],{"class":314,"line":11567},[312,111934,5006],{"class":1436},[312,111936,33411],{"class":324},[312,111938,27839],{"class":1436},[312,111940,34238],{"class":488},[312,111942,1576],{"class":324},[312,111944,8214],{"class":488},[312,111946,32582],{"class":324},[312,111948,111949,111952,111954],{"class":314,"line":11591},[312,111950,111951],{"class":324},"        obs ",[312,111953,336],{"class":1436},[312,111955,111956],{"class":324}," get_observation(data)\n",[312,111958,111959,111962,111964,111966,111968],{"class":314,"line":11596},[312,111960,111961],{"class":324},"        pole_angle ",[312,111963,336],{"class":1436},[312,111965,111805],{"class":324},[312,111967,1433],{"class":488},[312,111969,35041],{"class":324},[312,111971,111972,111975,111977,111979,111981],{"class":314,"line":11601},[312,111973,111974],{"class":324},"        pole_angular_velocity ",[312,111976,336],{"class":1436},[312,111978,111805],{"class":324},[312,111980,2021],{"class":488},[312,111982,35041],{"class":324},[312,111984,111985],{"class":314,"line":11606},[312,111986,4205],{"emptyLinePlaceholder":1881},[312,111988,111989,111992,111994,111997,111999,112001,112003,112005,112007],{"class":314,"line":11615},[312,111990,111991],{"class":324},"        action ",[312,111993,336],{"class":1436},[312,111995,111996],{"class":488}," 2.0",[312,111998,8322],{"class":1436},[312,112000,111589],{"class":324},[312,112002,2426],{"class":1436},[312,112004,63645],{"class":488},[312,112006,8322],{"class":1436},[312,112008,112009],{"class":324}," pole_angular_velocity\n",[312,112011,112012,112014,112016,112018,112020,112022,112024,112026],{"class":314,"line":11620},[312,112013,111991],{"class":324},[312,112015,336],{"class":1436},[312,112017,109216],{"class":324},[312,112019,2477],{"class":1436},[312,112021,104172],{"class":488},[312,112023,733],{"class":324},[312,112025,104172],{"class":488},[312,112027,1959],{"class":324},[312,112029,112030],{"class":314,"line":11626},[312,112031,4205],{"emptyLinePlaceholder":1881},[312,112033,112034,112036,112038,112040,112042],{"class":314,"line":11647},[312,112035,108386],{"class":324},[312,112037,858],{"class":488},[312,112039,6248],{"class":324},[312,112041,336],{"class":1436},[312,112043,109239],{"class":324},[312,112045,112046],{"class":314,"line":11653},[312,112047,103285],{"class":324},[312,112049,112050],{"class":314,"line":11667},[312,112051,4205],{"emptyLinePlaceholder":1881},[312,112053,112054,112057,112059],{"class":314,"line":11673},[312,112055,112056],{"class":324},"        reward ",[312,112058,336],{"class":1436},[312,112060,112061],{"class":324}," compute_reward(get_observation(data))\n",[312,112063,112064,112067,112069],{"class":314,"line":11700},[312,112065,112066],{"class":324},"        total_reward ",[312,112068,11280],{"class":1436},[312,112070,112071],{"class":324}," reward\n",[312,112073,112074],{"class":314,"line":11709},[312,112075,4205],{"emptyLinePlaceholder":1881},[312,112077,112078,112080,112082,112084,112086,112088,112090],{"class":314,"line":11715},[312,112079,4302],{"class":1436},[312,112081,33411],{"class":324},[312,112083,2273],{"class":1436},[312,112085,7558],{"class":488},[312,112087,103328],{"class":1436},[312,112089,5898],{"class":488},[312,112091,5544],{"class":324},[312,112093,112094,112096,112098,112101,112104,112107,112110,112112,112115,112118,112120,112122,112124,112126,112129,112131],{"class":314,"line":11723},[312,112095,36445],{"class":488},[312,112097,1576],{"class":324},[312,112099,112100],{"class":339},"\"step:\"",[312,112102,112103],{"class":324},", step, ",[312,112105,112106],{"class":339},"\"obs:\"",[312,112108,112109],{"class":324},", np.round(obs, ",[312,112111,2021],{"class":488},[312,112113,112114],{"class":324},"), ",[312,112116,112117],{"class":339},"\"action:\"",[312,112119,733],{"class":324},[312,112121,33813],{"class":488},[312,112123,1576],{"class":324},[312,112125,1992],{"class":488},[312,112127,112128],{"class":324},"(action), ",[312,112130,2021],{"class":488},[312,112132,32293],{"class":324},[312,112134,112135],{"class":314,"line":11728},[312,112136,4205],{"emptyLinePlaceholder":1881},[312,112138,112139,112141,112143,112146,112148,112150,112153,112155],{"class":314,"line":18404},[312,112140,33094],{"class":488},[312,112142,1576],{"class":324},[312,112144,112145],{"class":339},"\"total_reward:\"",[312,112147,733],{"class":324},[312,112149,33813],{"class":488},[312,112151,112152],{"class":324},"(total_reward, ",[312,112154,2021],{"class":488},[312,112156,32293],{"class":324},[312,112158,112159,112161,112163,112166,112169,112171],{"class":314,"line":18410},[312,112160,33094],{"class":488},[312,112162,1576],{"class":324},[312,112164,112165],{"class":339},"\"final obs:\"",[312,112167,112168],{"class":324},", np.round(get_observation(data), ",[312,112170,2021],{"class":488},[312,112172,32293],{"class":324},[312,112174,112175],{"class":314,"line":18433},[312,112176,4205],{"emptyLinePlaceholder":1881},[312,112178,112179],{"class":314,"line":18439},[312,112180,4205],{"emptyLinePlaceholder":1881},[312,112182,112183,112185,112187,112189,112191],{"class":314,"line":18462},[312,112184,3338],{"class":1436},[312,112186,33015],{"class":488},[312,112188,103328],{"class":1436},[312,112190,103331],{"class":339},[312,112192,5544],{"class":324},[312,112194,112195],{"class":314,"line":18476},[312,112196,103338],{"class":324},[24,112198,105339],{},[303,112200,112202],{"className":25618,"code":112201,"language":25620,"meta":308,"style":308},"touch ch6_cartpole.py\n",[119,112203,112204],{"__ignoreMap":308},[312,112205,112206,112208],{"class":314,"line":315},[312,112207,103052],{"class":332},[312,112209,112210],{"class":339}," ch6_cartpole.py\n",[24,112212,112213],{},"运行：",[303,112215,112217],{"className":25618,"code":112216,"language":25620,"meta":308,"style":308},"python ch6_cartpole.py\n",[119,112218,112219],{"__ignoreMap":308},[312,112220,112221,112223],{"class":314,"line":315},[312,112222,32176],{"class":332},[312,112224,112210],{"class":339},[69,112226,103341],{"id":103341},[24,112228,112229],{},"构造观测：",[303,112231,112233],{"className":32174,"code":112232,"language":32176,"meta":308,"style":308},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[119,112234,112235,112243],{"__ignoreMap":308},[312,112236,112237,112239,112241],{"class":314,"line":315},[312,112238,33742],{"class":1436},[312,112240,111763],{"class":332},[312,112242,111766],{"class":324},[312,112244,112245,112247],{"class":314,"line":171},[312,112246,5895],{"class":1436},[312,112248,111773],{"class":324},[24,112250,112251,112254,112255,112257,112258,112260],{},[119,112252,112253],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[119,112256,105799],{}," 2 维，",[119,112259,106129],{}," 2 维，所以 obs 是 4 维。",[24,112262,112263],{},"设置初始角度：",[303,112265,112267],{"className":32174,"code":112266,"language":32176,"meta":308,"style":308},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[119,112268,112269,112281],{"__ignoreMap":308},[312,112270,112271,112273,112275,112277,112279],{"class":314,"line":315},[312,112272,106468],{"class":324},[312,112274,1433],{"class":488},[312,112276,6248],{"class":324},[312,112278,336],{"class":1436},[312,112280,111909],{"class":488},[312,112282,112283],{"class":314,"line":171},[312,112284,106312],{"class":324},[24,112286,112287],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[24,112289,112290],{},"简单反馈控制：",[303,112292,112294],{"className":32174,"code":112293,"language":32176,"meta":308,"style":308},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[119,112295,112296,112316],{"__ignoreMap":308},[312,112297,112298,112300,112302,112304,112306,112308,112310,112312,112314],{"class":314,"line":315},[312,112299,109211],{"class":324},[312,112301,336],{"class":1436},[312,112303,111996],{"class":488},[312,112305,8322],{"class":1436},[312,112307,111589],{"class":324},[312,112309,2426],{"class":1436},[312,112311,63645],{"class":488},[312,112313,8322],{"class":1436},[312,112315,112009],{"class":324},[312,112317,112318,112320,112322,112324,112326,112328,112330,112332],{"class":314,"line":171},[312,112319,109211],{"class":324},[312,112321,336],{"class":1436},[312,112323,109216],{"class":324},[312,112325,2477],{"class":1436},[312,112327,104172],{"class":488},[312,112329,733],{"class":324},[312,112331,104172],{"class":488},[312,112333,1959],{"class":324},[24,112335,112336],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[24,112338,112339],{},"限制动作：",[303,112341,112343],{"className":32174,"code":112342,"language":32176,"meta":308,"style":308},"np.clip(action, -1.0, 1.0)\n",[119,112344,112345],{"__ignoreMap":308},[312,112346,112347,112350,112352,112354,112356,112358],{"class":314,"line":315},[312,112348,112349],{"class":324},"np.clip(action, ",[312,112351,2477],{"class":1436},[312,112353,104172],{"class":488},[312,112355,733],{"class":324},[312,112357,104172],{"class":488},[312,112359,1959],{"class":324},[24,112361,112362,112363,112366],{},"因为 XML 里 ",[119,112364,112365],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[69,112368,103477],{"id":103477},[303,112370,112371],{"className":32174,"code":112232,"language":32176,"meta":308,"style":308},[119,112372,112373,112381],{"__ignoreMap":308},[312,112374,112375,112377,112379],{"class":314,"line":315},[312,112376,33742],{"class":1436},[312,112378,111763],{"class":332},[312,112380,111766],{"class":324},[312,112382,112383,112385],{"class":314,"line":171},[312,112384,5895],{"class":1436},[312,112386,111773],{"class":324},[24,112388,112389,112390,112393,112394,112397,112398,112401],{},"这段定义了一个函数，用来获取当前观测。",[119,112391,112392],{},"data.qpos.copy()"," 是位置数组副本，",[119,112395,112396],{},"data.qvel.copy()"," 是速度数组副本。",[119,112399,112400],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[24,112403,112404],{},"在本章模型里：",[303,112406,112409],{"className":112407,"code":112408,"language":6992,"meta":308},[6990],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[119,112410,112408],{"__ignoreMap":308},[24,112412,112413],{},"所以返回的 obs 是：",[303,112415,112418],{"className":112416,"code":112417,"language":6992,"meta":308},[6990],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[119,112419,112417],{"__ignoreMap":308},[303,112421,112423],{"className":32174,"code":112422,"language":32176,"meta":308,"style":308},"def compute_reward(obs: np.ndarray) -> float:\n",[119,112424,112425],{"__ignoreMap":308},[312,112426,112427,112429,112431,112433,112435],{"class":314,"line":315},[312,112428,33742],{"class":1436},[312,112430,111788],{"class":332},[312,112432,111791],{"class":324},[312,112434,1992],{"class":488},[312,112436,5544],{"class":324},[24,112438,112439,112440,112443],{},"这行定义奖励函数。输入是观测 ",[119,112441,112442],{},"obs","，输出是一个浮点数奖励。",[303,112445,112447],{"className":32174,"code":112446,"language":32176,"meta":308,"style":308},"cart_x = obs[0]\npole_angle = obs[1]\n",[119,112448,112449,112462],{"__ignoreMap":308},[312,112450,112451,112454,112456,112458,112460],{"class":314,"line":315},[312,112452,112453],{"class":324},"cart_x ",[312,112455,336],{"class":1436},[312,112457,111805],{"class":324},[312,112459,858],{"class":488},[312,112461,35041],{"class":324},[312,112463,112464,112467,112469,112471,112473],{"class":314,"line":171},[312,112465,112466],{"class":324},"pole_angle ",[312,112468,336],{"class":1436},[312,112470,111805],{"class":324},[312,112472,1433],{"class":488},[312,112474,35041],{"class":324},[24,112476,112477,112478,112481,112482,112485],{},"数组索引从 0 开始。",[119,112479,112480],{},"obs[0]"," 是第一个元素，也就是小车位置。",[119,112483,112484],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[303,112487,112488],{"className":32174,"code":111557,"language":32176,"meta":308,"style":308},[119,112489,112490],{"__ignoreMap":308},[312,112491,112492,112494,112496,112498,112500,112502,112504,112506,112508,112510,112512,112514,112516,112518],{"class":314,"line":315},[312,112493,18846],{"class":1436},[312,112495,111566],{"class":488},[312,112497,1576],{"class":324},[312,112499,104172],{"class":488},[312,112501,54057],{"class":1436},[312,112503,111575],{"class":488},[312,112505,8322],{"class":1436},[312,112507,111580],{"class":324},[312,112509,2400],{"class":1436},[312,112511,111580],{"class":324},[312,112513,2477],{"class":1436},[312,112515,111589],{"class":324},[312,112517,2400],{"class":1436},[312,112519,111594],{"class":324},[24,112521,112522,112523,112526,112527,112530],{},"这行计算奖励。",[119,112524,112525],{},"cart_x * cart_x"," 是小车位置的平方，",[119,112528,112529],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[303,112532,112534],{"className":32174,"code":112533,"language":32176,"meta":308,"style":308},"data.qpos[1] = 0.1\n",[119,112535,112536],{"__ignoreMap":308},[312,112537,112538,112540,112542,112544,112546],{"class":314,"line":315},[312,112539,106468],{"class":324},[312,112541,1433],{"class":488},[312,112543,6248],{"class":324},[312,112545,336],{"class":1436},[312,112547,111909],{"class":488},[24,112549,112550,112551,112553,112554,112556],{},"手动设置杆子的初始角度。因为 ",[119,112552,107225],{}," 是小车位置，",[119,112555,107228],{}," 是杆子角度，所以这里改的是杆子。",[303,112558,112559],{"className":32174,"code":106312,"language":32176,"meta":308,"style":308},[119,112560,112561],{"__ignoreMap":308},[312,112562,112563],{"class":314,"line":315},[312,112564,106312],{"class":324},[24,112566,107271,112567,112569],{},[119,112568,105799],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[303,112571,112573],{"className":32174,"code":112572,"language":32176,"meta":308,"style":308},"total_reward = 0.0\n",[119,112574,112575],{"__ignoreMap":308},[312,112576,112577,112580,112582],{"class":314,"line":315},[312,112578,112579],{"class":324},"total_reward ",[312,112581,336],{"class":1436},[312,112583,106530],{"class":488},[24,112585,112586],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[303,112588,112590],{"className":32174,"code":112589,"language":32176,"meta":308,"style":308},"for step in range(1000):\n",[119,112591,112592],{"__ignoreMap":308},[312,112593,112594,112596,112598,112600,112602,112604,112606],{"class":314,"line":315},[312,112595,4830],{"class":1436},[312,112597,33411],{"class":324},[312,112599,27839],{"class":1436},[312,112601,34238],{"class":488},[312,112603,1576],{"class":324},[312,112605,8214],{"class":488},[312,112607,32582],{"class":324},[24,112609,112610,112611,112613],{},"循环 1000 步。",[119,112612,108903],{}," 是当前步数，从 0 到 999。",[303,112615,112617],{"className":32174,"code":112616,"language":32176,"meta":308,"style":308},"obs = get_observation(data)\n",[119,112618,112619],{"__ignoreMap":308},[312,112620,112621,112624,112626],{"class":314,"line":315},[312,112622,112623],{"class":324},"obs ",[312,112625,336],{"class":1436},[312,112627,111956],{"class":324},[24,112629,112630,112631,30181],{},"读取当前状态，保存到 ",[119,112632,112442],{},[303,112634,112636],{"className":32174,"code":112635,"language":32176,"meta":308,"style":308},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[119,112637,112638,112650],{"__ignoreMap":308},[312,112639,112640,112642,112644,112646,112648],{"class":314,"line":315},[312,112641,112466],{"class":324},[312,112643,336],{"class":1436},[312,112645,111805],{"class":324},[312,112647,1433],{"class":488},[312,112649,35041],{"class":324},[312,112651,112652,112655,112657,112659,112661],{"class":314,"line":171},[312,112653,112654],{"class":324},"pole_angular_velocity ",[312,112656,336],{"class":1436},[312,112658,111805],{"class":324},[312,112660,2021],{"class":488},[312,112662,35041],{"class":324},[24,112664,112665,112666,112669,112670,30181],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[119,112667,112668],{},"obs[3]","？因为 obs 的顺序是 ",[119,112671,112672],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[303,112674,112676],{"className":32174,"code":112675,"language":32176,"meta":308,"style":308},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[119,112677,112678],{"__ignoreMap":308},[312,112679,112680,112682,112684,112686,112688,112690,112692,112694,112696],{"class":314,"line":315},[312,112681,109211],{"class":324},[312,112683,336],{"class":1436},[312,112685,111996],{"class":488},[312,112687,8322],{"class":1436},[312,112689,111589],{"class":324},[312,112691,2426],{"class":1436},[312,112693,63645],{"class":488},[312,112695,8322],{"class":1436},[312,112697,112009],{"class":324},[24,112699,112700,112701,1167,112703,112705],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[119,112702,107029],{},[119,112704,37124],{}," 是人为设置的系数，不是固定公式。",[303,112707,112709],{"className":32174,"code":112708,"language":32176,"meta":308,"style":308},"action = np.clip(action, -1.0, 1.0)\n",[119,112710,112711],{"__ignoreMap":308},[312,112712,112713,112715,112717,112719,112721,112723,112725,112727],{"class":314,"line":315},[312,112714,109211],{"class":324},[312,112716,336],{"class":1436},[312,112718,109216],{"class":324},[312,112720,2477],{"class":1436},[312,112722,104172],{"class":488},[312,112724,733],{"class":324},[312,112726,104172],{"class":488},[312,112728,1959],{"class":324},[24,112730,112731],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[303,112733,112734],{"className":32174,"code":111542,"language":32176,"meta":308,"style":308},[119,112735,112736],{"__ignoreMap":308},[312,112737,112738,112740,112742,112744,112746],{"class":314,"line":315},[312,112739,107640],{"class":324},[312,112741,858],{"class":488},[312,112743,6248],{"class":324},[312,112745,336],{"class":1436},[312,112747,109239],{"class":324},[24,112749,112750],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[303,112752,112753],{"className":32174,"code":106274,"language":32176,"meta":308,"style":308},[119,112754,112755],{"__ignoreMap":308},[312,112756,112757],{"class":314,"line":315},[312,112758,106274],{"class":324},[24,112760,112761,112762,112764],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[119,112763,107895],{}," 计算小车和杆子的下一刻状态。",[303,112766,112768],{"className":32174,"code":112767,"language":32176,"meta":308,"style":308},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[119,112769,112770,112779],{"__ignoreMap":308},[312,112771,112772,112775,112777],{"class":314,"line":315},[312,112773,112774],{"class":324},"reward ",[312,112776,336],{"class":1436},[312,112778,112061],{"class":324},[312,112780,112781,112783,112785],{"class":314,"line":171},[312,112782,112579],{"class":324},[312,112784,11280],{"class":1436},[312,112786,112071],{"class":324},[24,112788,112789,112790,112792,112793,112796,112797,30181],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[119,112791,11280],{}," 是简写，",[119,112794,112795],{},"total_reward += reward"," 等价于 ",[119,112798,112799],{},"total_reward = total_reward + reward",[303,112801,112803],{"className":32174,"code":112802,"language":32176,"meta":308,"style":308},"if step % 100 == 0:\n",[119,112804,112805],{"__ignoreMap":308},[312,112806,112807,112809,112811,112813,112815,112817,112819],{"class":314,"line":315},[312,112808,3338],{"class":1436},[312,112810,33411],{"class":324},[312,112812,2273],{"class":1436},[312,112814,7558],{"class":488},[312,112816,103328],{"class":1436},[312,112818,5898],{"class":488},[312,112820,5544],{"class":324},[24,112822,112823,112825,112826,112829],{},[119,112824,2273],{}," 是取余数。",[119,112827,112828],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[303,112831,112833],{"className":32174,"code":112832,"language":32176,"meta":308,"style":308},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[119,112834,112835],{"__ignoreMap":308},[312,112836,112837,112839,112841,112843,112845,112847,112849,112851,112853,112855,112857,112859,112861,112863,112865,112867],{"class":314,"line":315},[312,112838,32211],{"class":488},[312,112840,1576],{"class":324},[312,112842,112100],{"class":339},[312,112844,112103],{"class":324},[312,112846,112106],{"class":339},[312,112848,112109],{"class":324},[312,112850,2021],{"class":488},[312,112852,112114],{"class":324},[312,112854,112117],{"class":339},[312,112856,733],{"class":324},[312,112858,33813],{"class":488},[312,112860,1576],{"class":324},[312,112862,1992],{"class":488},[312,112864,112128],{"class":324},[312,112866,2021],{"class":488},[312,112868,32293],{"class":324},[24,112870,112871,112872,112875,112876,112879],{},"打印当前步数、观测和动作。",[119,112873,112874],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[119,112877,112878],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112881,104085],{"id":104084},[24,112883,112884],{},"观测向量:",[303,112886,112889],{"className":112887,"code":112888,"language":6992,"meta":308},[6990],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[119,112890,112888],{"__ignoreMap":308},[24,112892,112893],{},"控制器是教学用的简单线性反馈，不保证最优。",[24,112895,112896],{},"每隔 100 步会打印一次：",[303,112898,112901],{"className":112899,"code":112900,"language":6992,"meta":308},[6990],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[119,112902,112900],{"__ignoreMap":308},[24,112904,112905],{},"重点观察：",[140,112907,112908,112914,112919],{},[143,112909,112910,112913],{},[119,112911,112912],{},"pole_angle"," 是否越来越大。",[143,112915,112916,112918],{},[119,112917,111495],{}," 是否跑得太远。",[143,112920,112921,112922,84310,112924,30181],{},"action 是否经常被 clip 到 ",[119,112923,105684],{},[119,112925,1433],{},[24,112927,112928],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112930,104117],{"id":104116},[140,112932,112933,112939,112942,112948,112958,112964,112967],{},[143,112934,112935,112936,30181],{},"把初始角度改为 ",[119,112937,112938],{},"data.qpos[1] = 0.3",[143,112940,112941],{},"重新运行，观察控制是否变差。",[143,112943,112944,112945,112947],{},"把 actuator ",[119,112946,108836],{}," 改小。",[143,112949,112950,112951,112954,112955,30181],{},"打印 ",[119,112952,112953],{},"model.nq, model.nv, model.nu","，应为 ",[119,112956,112957],{},"2 2 1",[143,112959,112960,112961,112963],{},"把 reward 里的 ",[119,112962,112529],{}," 系数改大，观察总奖励变化。",[143,112965,112966],{},"把控制器改成反号，观察杆子是否更容易倒。",[143,112968,112969],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112971,104222],{"id":104221},[69,112973,112974],{"id":112974},"杆子方向和预期不一致",[24,112976,104165,112977,112979,112980,112982],{},[119,112978,108008],{}," 和 capsule 的 ",[119,112981,104945],{},"，必要时用 viewer 可视化确认。",[69,112984,112985],{"id":112985},"控制器越控越倒",[24,112987,112988],{},"说明反馈符号可能反了，尝试:",[303,112990,112992],{"className":32174,"code":112991,"language":32176,"meta":308,"style":308},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[119,112993,112994],{"__ignoreMap":308},[312,112995,112996,112998,113000,113002,113004,113006,113008,113010,113012,113014],{"class":314,"line":315},[312,112997,109211],{"class":324},[312,112999,336],{"class":1436},[312,113001,54057],{"class":1436},[312,113003,107029],{"class":488},[312,113005,8322],{"class":1436},[312,113007,111589],{"class":324},[312,113009,2477],{"class":1436},[312,113011,63645],{"class":488},[312,113013,8322],{"class":1436},[312,113015,112009],{"class":324},[69,113017,113018],{"id":113018},"小车飞走",[24,113020,113021,113022,113024,113025,113028],{},"降低 ",[119,113023,108836],{}," 或缩小 ",[119,113026,113027],{},"action"," 的 clip 范围。",[69,113030,113032,113034],{"id":113031},"obs3-为什么是杆子角速度",[119,113033,112668],{}," 为什么是杆子角速度",[24,113036,113037],{},"因为这个模型里：",[303,113039,113042],{"className":113040,"code":113041,"language":6992,"meta":308},[6990],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[119,113043,113041],{"__ignoreMap":308},[24,113045,111516],{},[303,113047,113050],{"className":113048,"code":113049,"language":6992,"meta":308},[6990],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[119,113051,113049],{"__ignoreMap":308},[69,113053,113055],{"id":113054},"reward-变成负数是否错误","reward 变成负数是否错误",[24,113057,113058],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,113060,104376],{"id":104375},[24,113062,113063],{},"一个控制任务通常包含：",[140,113065,113066,113069,113077,113082,113085],{},[143,113067,113068],{},"模型：Cartpole 的 body、joint、actuator。",[143,113070,113071,113072,2159,113074,113076],{},"观测：从 ",[119,113073,105799],{},[119,113075,106129],{}," 里取状态。",[143,113078,113079,113080,30181],{},"动作：写入 ",[119,113081,102845],{},[143,113083,113084],{},"奖励：根据任务目标打分。",[143,113086,113087],{},"循环：obs -> action -> step -> reward。",[24,113089,113090],{},"这就是后面 Gymnasium 环境的基本骨架。",[1856,113092,106055],{},{"title":308,"searchDepth":171,"depth":171,"links":113094},[113095,113096,113097,113102,113106,113107,113108,113116],{"id":102416,"depth":171,"text":102417},{"id":102539,"depth":171,"text":102540},{"id":102813,"depth":171,"text":102814,"children":113098},[113099,113100,113101],{"id":111469,"depth":274,"text":111470},{"id":111534,"depth":274,"text":111535},{"id":111550,"depth":274,"text":111551},{"id":103021,"depth":171,"text":103022,"children":113103},[113104,113105],{"id":103341,"depth":274,"text":103341},{"id":103477,"depth":274,"text":103477},{"id":104084,"depth":171,"text":104085},{"id":104116,"depth":171,"text":104117},{"id":104221,"depth":171,"text":104222,"children":113109},[113110,113111,113112,113113,113115],{"id":112974,"depth":274,"text":112974},{"id":112985,"depth":274,"text":112985},{"id":113018,"depth":274,"text":113018},{"id":113031,"depth":274,"text":113114},"obs[3] 为什么是杆子角速度",{"id":113054,"depth":274,"text":113055},{"id":104375,"depth":171,"text":104376},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":111205,"description":308},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":113123,"title":113124,"body":113125,"description":308,"extension":1879,"meta":115139,"navigation":1881,"path":115140,"seo":115141,"stem":115142,"__hash__":115143},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":113126,"toc":115115},[113127,113130,113132,113135,113137,113154,113157,113160,113166,113169,113171,113173,113197,113199,113213,113215,113256,113258,113276,113278,113281,113287,113290,113318,113322,113328,113353,113356,113387,113394,113397,113400,113406,113409,113415,113418,113424,113428,113431,113456,113459,113461,114221,114223,114235,114237,114248,114250,114253,114270,114273,114275,114286,114289,114291,114337,114340,114353,114356,114438,114441,114443,114459,114469,114482,114485,114524,114534,114545,114555,114568,114571,114600,114603,114613,114616,114622,114639,114650,114652,114658,114675,114686,114707,114710,114722,114725,114746,114749,114757,114765,114782,114785,114854,114861,114869,114872,114885,114892,114894,114897,114903,114906,114909,114915,114921,114923,114963,114965,114971,114980,114983,114985,115005,115008,115011,115017,115021,115023,115050,115053,115056,115083,115089,115092,115095,115097,115100,115103,115109,115112],[10,113128,113124],{"id":113129},"_7控制任务reacher-机械臂到达目标",[14,113131,102417],{"id":102416},[24,113133,113134],{},"本章搭建一个二维两关节 reacher 任务。",[24,113136,106100],{},[140,113138,113139,113142,113145,113148,113151],{},[143,113140,113141],{},"两个 hinge joint",[143,113143,113144],{},"两个 motor actuator",[143,113146,113147],{},"site 作为末端点和目标点",[143,113149,113150],{},"根据末端和目标距离设计 reward",[143,113152,113153],{},"构造机械臂任务的基本形式",[24,113155,113156],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[24,113158,113159],{},"Reacher 任务可以理解为：",[303,113161,113164],{"className":113162,"code":113163,"language":6992,"meta":308},[6990],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[119,113165,113163],{"__ignoreMap":308},[24,113167,113168],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,113170,102540],{"id":102539},[24,113172,102543],{},[303,113174,113175],{"className":25618,"code":106157,"language":25620,"meta":308,"style":308},[119,113176,113177],{"__ignoreMap":308},[312,113178,113179,113181,113183,113185,113187,113189,113191,113193,113195],{"class":314,"line":315},[312,113180,26372],{"class":332},[312,113182,28111],{"class":339},[312,113184,25630],{"class":339},[312,113186,28196],{"class":488},[312,113188,106172],{"class":339},[312,113190,102568],{"class":339},[312,113192,104270],{"class":339},[312,113194,102584],{"class":339},[312,113196,106181],{"class":339},[24,113198,104588],{},[303,113200,113201],{"className":25618,"code":102689,"language":25620,"meta":308,"style":308},[119,113202,113203],{"__ignoreMap":308},[312,113204,113205,113207,113209,113211],{"class":314,"line":315},[312,113206,25627],{"class":332},[312,113208,25630],{"class":339},[312,113210,102700],{"class":339},[312,113212,102703],{"class":339},[24,113214,104605],{},[303,113216,113218],{"className":25618,"code":113217,"language":25620,"meta":308,"style":308},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[119,113219,113220,113237,113246],{"__ignoreMap":308},[312,113221,113222,113224,113226,113228,113231,113233,113235],{"class":314,"line":315},[312,113223,32126],{"class":332},[312,113225,30972],{"class":339},[312,113227,26911],{"class":488},[312,113229,113230],{"class":339}," mujoco-reacher",[312,113232,102745],{"class":339},[312,113234,102748],{"class":488},[312,113236,102751],{"class":488},[312,113238,113239,113241,113243],{"class":314,"line":171},[312,113240,32126],{"class":332},[312,113242,102758],{"class":339},[312,113244,113245],{"class":339}," mujoco-reacher\n",[312,113247,113248,113250,113252,113254],{"class":314,"line":274},[312,113249,25627],{"class":332},[312,113251,25630],{"class":339},[312,113253,102700],{"class":339},[312,113255,102703],{"class":339},[24,113257,102774],{},[140,113259,113260,113263,113266],{},[143,113261,113262],{},"本章使用低维状态，不使用图像输入。",[143,113264,113265],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[143,113267,113268,113269,2159,113271,2159,113273,113275],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[119,113270,105799],{},[119,113272,106129],{},[119,113274,105449],{}," 的方法一致。",[14,113277,102814],{"id":102813},[24,113279,113280],{},"Reacher 任务核心:",[303,113282,113285],{"className":113283,"code":113284,"language":6992,"meta":308},[6990],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[119,113286,113284],{"__ignoreMap":308},[24,113288,113289],{},"读取 site 世界坐标:",[303,113291,113293],{"className":32174,"code":113292,"language":32176,"meta":308,"style":308},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[119,113294,113295,113308],{"__ignoreMap":308},[312,113296,113297,113299,113301,113303,113306],{"class":314,"line":315},[312,113298,105403],{"class":324},[312,113300,336],{"class":1436},[312,113302,105174],{"class":324},[312,113304,113305],{"class":339},"\"tip\"",[312,113307,1959],{"class":324},[312,113309,113310,113313,113315],{"class":314,"line":171},[312,113311,113312],{"class":324},"tip_pos ",[312,113314,336],{"class":1436},[312,113316,113317],{"class":324}," data.site_xpos[site_id]\n",[69,113319,113321],{"id":113320},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[24,113323,113324,113325,113327],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[119,113326,105799],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[303,113329,113331],{"className":32174,"code":113330,"language":32176,"meta":308,"style":308},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[119,113332,113333,113343],{"__ignoreMap":308},[312,113334,113335,113338,113340],{"class":314,"line":315},[312,113336,113337],{"class":324},"tip ",[312,113339,336],{"class":1436},[312,113341,113342],{"class":324}," data.site_xpos[tip_site_id]\n",[312,113344,113345,113348,113350],{"class":314,"line":171},[312,113346,113347],{"class":324},"target ",[312,113349,336],{"class":1436},[312,113351,113352],{"class":324}," data.site_xpos[target_site_id]\n",[24,113354,113355],{},"这样 reward 就很容易写：",[303,113357,113359],{"className":32174,"code":113358,"language":32176,"meta":308,"style":308},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[119,113360,113361,113376],{"__ignoreMap":308},[312,113362,113363,113366,113368,113371,113373],{"class":314,"line":315},[312,113364,113365],{"class":324},"dist ",[312,113367,336],{"class":1436},[312,113369,113370],{"class":324}," np.linalg.norm(tip ",[312,113372,2477],{"class":1436},[312,113374,113375],{"class":324}," target)\n",[312,113377,113378,113380,113382,113384],{"class":314,"line":171},[312,113379,112774],{"class":324},[312,113381,336],{"class":1436},[312,113383,54057],{"class":1436},[312,113385,113386],{"class":324},"dist\n",[24,113388,113389,113390,113393],{},"距离越小，",[119,113391,113392],{},"-dist"," 越接近 0，奖励越高。",[69,113395,113396],{"id":113396},"两关节机械臂的状态",[24,113398,113399],{},"这个模型有两个 hinge joint：",[303,113401,113404],{"className":113402,"code":113403,"language":6992,"meta":308},[6990],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[119,113405,113403],{"__ignoreMap":308},[24,113407,113408],{},"再加上末端和目标位置：",[303,113410,113413],{"className":113411,"code":113412,"language":6992,"meta":308},[6990],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[119,113414,113412],{"__ignoreMap":308},[24,113416,113417],{},"总维度：",[303,113419,113422],{"className":113420,"code":113421,"language":6992,"meta":308},[6990],"2 + 2 + 3 + 3 = 10\n",[119,113423,113421],{"__ignoreMap":308},[69,113425,113427],{"id":113426},"为什么-gravity-是-0","为什么 gravity 是 0",[24,113429,113430],{},"本章把重力设为：",[303,113432,113434],{"className":54853,"code":113433,"language":54855,"meta":308,"style":308},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[119,113435,113436],{"__ignoreMap":308},[312,113437,113438,113440,113442,113444,113446,113448,113450,113452,113454],{"class":314,"line":315},[312,113439,325],{"class":324},[312,113441,70943],{"class":328},[312,113443,102963],{"class":332},[312,113445,336],{"class":324},[312,113447,102968],{"class":339},[312,113449,102971],{"class":332},[312,113451,336],{"class":324},[312,113453,105540],{"class":339},[312,113455,102913],{"class":324},[24,113457,113458],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,113460,103022],{"id":103021},[303,113462,113464],{"className":32174,"code":113463,"language":32176,"meta":308,"style":308},"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",[119,113465,113466,113472,113482,113486,113490,113498,113503,113508,113512,113516,113521,113526,113530,113535,113540,113545,113549,113554,113559,113564,113569,113573,113577,113581,113585,113589,113594,113599,113603,113607,113611,113615,113619,113634,113643,113655,113678,113685,113689,113693,113703,113717,113731,113738,113742,113746,113760,113772,113784,113797,113812,113829,113833,113837,113849,113861,113869,113877,113881,113897,113902,113915,113928,113943,113947,113982,114014,114018,114022,114031,114035,114051,114061,114072,114088,114104,114120,114136,114140,114158,114178,114197,114201,114205,114217],{"__ignoreMap":308},[312,113467,113468,113470],{"class":314,"line":315},[312,113469,32188],{"class":1436},[312,113471,103070],{"class":324},[312,113473,113474,113476,113478,113480],{"class":314,"line":171},[312,113475,32188],{"class":1436},[312,113477,33175],{"class":324},[312,113479,33178],{"class":1436},[312,113481,33181],{"class":324},[312,113483,113484],{"class":314,"line":274},[312,113485,4205],{"emptyLinePlaceholder":1881},[312,113487,113488],{"class":314,"line":298},[312,113489,4205],{"emptyLinePlaceholder":1881},[312,113491,113492,113494,113496],{"class":314,"line":974},[312,113493,103083],{"class":488},[312,113495,15366],{"class":1436},[312,113497,103088],{"class":339},[312,113499,113500],{"class":314,"line":980},[312,113501,113502],{"class":339},"\u003Cmujoco model=\"two_link_reacher\">\n",[312,113504,113505],{"class":314,"line":997},[312,113506,113507],{"class":339},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[312,113509,113510],{"class":314,"line":1003},[312,113511,4205],{"emptyLinePlaceholder":1881},[312,113513,113514],{"class":314,"line":1020},[312,113515,103107],{"class":339},[312,113517,113518],{"class":314,"line":1026},[312,113519,113520],{"class":339},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[312,113522,113523],{"class":314,"line":3418},[312,113524,113525],{"class":339},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[312,113527,113528],{"class":314,"line":3423},[312,113529,4205],{"emptyLinePlaceholder":1881},[312,113531,113532],{"class":314,"line":3429},[312,113533,113534],{"class":339},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[312,113536,113537],{"class":314,"line":3434},[312,113538,113539],{"class":339},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[312,113541,113542],{"class":314,"line":3448},[312,113543,113544],{"class":339},"      \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",[312,113546,113547],{"class":314,"line":3453},[312,113548,4205],{"emptyLinePlaceholder":1881},[312,113550,113551],{"class":314,"line":3459},[312,113552,113553],{"class":339},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[312,113555,113556],{"class":314,"line":3480},[312,113557,113558],{"class":339},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[312,113560,113561],{"class":314,"line":3485},[312,113562,113563],{"class":339},"        \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",[312,113565,113566],{"class":314,"line":3499},[312,113567,113568],{"class":339},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[312,113570,113571],{"class":314,"line":3504},[312,113572,108207],{"class":339},[312,113574,113575],{"class":314,"line":3533},[312,113576,103136],{"class":339},[312,113578,113579],{"class":314,"line":3538},[312,113580,103141],{"class":339},[312,113582,113583],{"class":314,"line":3555},[312,113584,4205],{"emptyLinePlaceholder":1881},[312,113586,113587],{"class":314,"line":3560},[312,113588,108224],{"class":339},[312,113590,113591],{"class":314,"line":3565},[312,113592,113593],{"class":339},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[312,113595,113596],{"class":314,"line":3570},[312,113597,113598],{"class":339},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[312,113600,113601],{"class":314,"line":3584},[312,113602,108234],{"class":339},[312,113604,113605],{"class":314,"line":3589},[312,113606,103146],{"class":339},[312,113608,113609],{"class":314,"line":4382},[312,113610,97468],{"class":339},[312,113612,113613],{"class":314,"line":4396},[312,113614,4205],{"emptyLinePlaceholder":1881},[312,113616,113617],{"class":314,"line":4404},[312,113618,4205],{"emptyLinePlaceholder":1881},[312,113620,113621,113623,113626,113629,113631],{"class":314,"line":4409},[312,113622,33742],{"class":1436},[312,113624,113625],{"class":332}," site_position",[312,113627,113628],{"class":324},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[312,113630,3110],{"class":488},[312,113632,113633],{"class":324},") -> np.ndarray:\n",[312,113635,113636,113638,113640],{"class":314,"line":4415},[312,113637,105169],{"class":324},[312,113639,336],{"class":1436},[312,113641,113642],{"class":324}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[312,113644,113645,113647,113649,113651,113653],{"class":314,"line":4421},[312,113646,4906],{"class":1436},[312,113648,105218],{"class":324},[312,113650,325],{"class":1436},[312,113652,5898],{"class":488},[312,113654,5544],{"class":324},[312,113656,113657,113659,113661,113663,113665,113668,113670,113672,113674,113676],{"class":314,"line":4426},[312,113658,105201],{"class":1436},[312,113660,105204],{"class":488},[312,113662,1576],{"class":324},[312,113664,2003],{"class":1436},[312,113666,113667],{"class":339},"\"site not found: ",[312,113669,2840],{"class":488},[312,113671,81581],{"class":324},[312,113673,2888],{"class":488},[312,113675,2196],{"class":339},[312,113677,1959],{"class":324},[312,113679,113680,113682],{"class":314,"line":9751},[312,113681,5895],{"class":1436},[312,113683,113684],{"class":324}," data.site_xpos[site_id].copy()\n",[312,113686,113687],{"class":314,"line":9775},[312,113688,4205],{"emptyLinePlaceholder":1881},[312,113690,113691],{"class":314,"line":9780},[312,113692,4205],{"emptyLinePlaceholder":1881},[312,113694,113695,113697,113700],{"class":314,"line":9786},[312,113696,33742],{"class":1436},[312,113698,113699],{"class":332}," get_obs",[312,113701,113702],{"class":324},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[312,113704,113705,113708,113710,113713,113715],{"class":314,"line":9813},[312,113706,113707],{"class":324},"    tip ",[312,113709,336],{"class":1436},[312,113711,113712],{"class":324}," site_position(model, data, ",[312,113714,113305],{"class":339},[312,113716,1959],{"class":324},[312,113718,113719,113722,113724,113726,113729],{"class":314,"line":9818},[312,113720,113721],{"class":324},"    target ",[312,113723,336],{"class":1436},[312,113725,113712],{"class":324},[312,113727,113728],{"class":339},"\"target\"",[312,113730,1959],{"class":324},[312,113732,113733,113735],{"class":314,"line":9824},[312,113734,5895],{"class":1436},[312,113736,113737],{"class":324}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[312,113739,113740],{"class":314,"line":9836},[312,113741,4205],{"emptyLinePlaceholder":1881},[312,113743,113744],{"class":314,"line":9848},[312,113745,4205],{"emptyLinePlaceholder":1881},[312,113747,113748,113750,113753,113756,113758],{"class":314,"line":9860},[312,113749,33742],{"class":1436},[312,113751,113752],{"class":332}," reward",[312,113754,113755],{"class":324},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[312,113757,1992],{"class":488},[312,113759,5544],{"class":324},[312,113761,113762,113764,113766,113768,113770],{"class":314,"line":11519},[312,113763,113707],{"class":324},[312,113765,336],{"class":1436},[312,113767,113712],{"class":324},[312,113769,113305],{"class":339},[312,113771,1959],{"class":324},[312,113773,113774,113776,113778,113780,113782],{"class":314,"line":11544},[312,113775,113721],{"class":324},[312,113777,336],{"class":1436},[312,113779,113712],{"class":324},[312,113781,113728],{"class":339},[312,113783,1959],{"class":324},[312,113785,113786,113789,113791,113793,113795],{"class":314,"line":11567},[312,113787,113788],{"class":324},"    dist ",[312,113790,336],{"class":1436},[312,113792,113370],{"class":324},[312,113794,2477],{"class":1436},[312,113796,113375],{"class":324},[312,113798,113799,113802,113804,113807,113809],{"class":314,"line":11591},[312,113800,113801],{"class":324},"    control_cost ",[312,113803,336],{"class":1436},[312,113805,113806],{"class":488}," 0.01",[312,113808,8322],{"class":1436},[312,113810,113811],{"class":324}," np.sum(np.square(data.ctrl))\n",[312,113813,113814,113816,113818,113820,113822,113824,113826],{"class":314,"line":11596},[312,113815,5895],{"class":1436},[312,113817,111566],{"class":488},[312,113819,1576],{"class":324},[312,113821,2477],{"class":1436},[312,113823,113365],{"class":324},[312,113825,2477],{"class":1436},[312,113827,113828],{"class":324}," control_cost)\n",[312,113830,113831],{"class":314,"line":11601},[312,113832,4205],{"emptyLinePlaceholder":1881},[312,113834,113835],{"class":314,"line":11606},[312,113836,4205],{"emptyLinePlaceholder":1881},[312,113838,113839,113841,113843,113845,113847],{"class":314,"line":11615},[312,113840,33742],{"class":1436},[312,113842,3778],{"class":332},[312,113844,103167],{"class":324},[312,113846,97456],{"class":488},[312,113848,5544],{"class":324},[312,113850,113851,113853,113855,113857,113859],{"class":314,"line":11620},[312,113852,103176],{"class":324},[312,113854,336],{"class":1436},[312,113856,103181],{"class":324},[312,113858,103083],{"class":488},[312,113860,1959],{"class":324},[312,113862,113863,113865,113867],{"class":314,"line":11626},[312,113864,103190],{"class":324},[312,113866,336],{"class":1436},[312,113868,103195],{"class":324},[312,113870,113871,113873,113875],{"class":314,"line":11647},[312,113872,111922],{"class":324},[312,113874,336],{"class":1436},[312,113876,106530],{"class":488},[312,113878,113879],{"class":314,"line":11653},[312,113880,4205],{"emptyLinePlaceholder":1881},[312,113882,113883,113885,113887,113889,113891,113893,113895],{"class":314,"line":11667},[312,113884,5006],{"class":1436},[312,113886,33411],{"class":324},[312,113888,27839],{"class":1436},[312,113890,34238],{"class":488},[312,113892,1576],{"class":324},[312,113894,66852],{"class":488},[312,113896,32582],{"class":324},[312,113898,113899],{"class":314,"line":11673},[312,113900,113901],{"class":324},"        mujoco.mj_forward(model, data)\n",[312,113903,113904,113907,113909,113911,113913],{"class":314,"line":11700},[312,113905,113906],{"class":324},"        tip ",[312,113908,336],{"class":1436},[312,113910,113712],{"class":324},[312,113912,113305],{"class":339},[312,113914,1959],{"class":324},[312,113916,113917,113920,113922,113924,113926],{"class":314,"line":11709},[312,113918,113919],{"class":324},"        target ",[312,113921,336],{"class":1436},[312,113923,113712],{"class":324},[312,113925,113728],{"class":339},[312,113927,1959],{"class":324},[312,113929,113930,113933,113935,113938,113940],{"class":314,"line":11715},[312,113931,113932],{"class":324},"        error ",[312,113934,336],{"class":1436},[312,113936,113937],{"class":324}," target ",[312,113939,2477],{"class":1436},[312,113941,113942],{"class":324}," tip\n",[312,113944,113945],{"class":314,"line":11723},[312,113946,4205],{"emptyLinePlaceholder":1881},[312,113948,113949,113951,113953,113955,113957,113960,113962,113964,113967,113969,113972,113974,113976,113978,113980],{"class":314,"line":11728},[312,113950,108386],{"class":324},[312,113952,858],{"class":488},[312,113954,6248],{"class":324},[312,113956,336],{"class":1436},[312,113958,113959],{"class":324}," np.clip(",[312,113961,107029],{"class":488},[312,113963,8322],{"class":1436},[312,113965,113966],{"class":324}," error[",[312,113968,2027],{"class":488},[312,113970,113971],{"class":324},"], ",[312,113973,2477],{"class":1436},[312,113975,104172],{"class":488},[312,113977,733],{"class":324},[312,113979,104172],{"class":488},[312,113981,1959],{"class":324},[312,113983,113984,113986,113988,113990,113992,113994,113996,113998,114000,114002,114004,114006,114008,114010,114012],{"class":314,"line":18404},[312,113985,108386],{"class":324},[312,113987,1433],{"class":488},[312,113989,6248],{"class":324},[312,113991,336],{"class":1436},[312,113993,113959],{"class":324},[312,113995,107029],{"class":488},[312,113997,8322],{"class":1436},[312,113999,113966],{"class":324},[312,114001,858],{"class":488},[312,114003,113971],{"class":324},[312,114005,2477],{"class":1436},[312,114007,104172],{"class":488},[312,114009,733],{"class":324},[312,114011,104172],{"class":488},[312,114013,1959],{"class":324},[312,114015,114016],{"class":314,"line":18410},[312,114017,4205],{"emptyLinePlaceholder":1881},[312,114019,114020],{"class":314,"line":18433},[312,114021,103285],{"class":324},[312,114023,114024,114026,114028],{"class":314,"line":18439},[312,114025,112066],{"class":324},[312,114027,11280],{"class":1436},[312,114029,114030],{"class":324}," reward(model, data)\n",[312,114032,114033],{"class":314,"line":18462},[312,114034,4205],{"emptyLinePlaceholder":1881},[312,114036,114037,114039,114041,114043,114045,114047,114049],{"class":314,"line":18476},[312,114038,4302],{"class":1436},[312,114040,33411],{"class":324},[312,114042,2273],{"class":1436},[312,114044,7558],{"class":488},[312,114046,103328],{"class":1436},[312,114048,5898],{"class":488},[312,114050,5544],{"class":324},[312,114052,114053,114056,114058],{"class":314,"line":18496},[312,114054,114055],{"class":324},"            obs ",[312,114057,336],{"class":1436},[312,114059,114060],{"class":324}," get_obs(model, data)\n",[312,114062,114063,114065,114067,114069],{"class":314,"line":18502},[312,114064,36445],{"class":488},[312,114066,1576],{"class":324},[312,114068,112100],{"class":339},[312,114070,114071],{"class":324},", step)\n",[312,114073,114074,114076,114078,114081,114084,114086],{"class":314,"line":18513},[312,114075,36445],{"class":488},[312,114077,1576],{"class":324},[312,114079,114080],{"class":339},"\"  tip:\"",[312,114082,114083],{"class":324},", np.round(tip, ",[312,114085,2021],{"class":488},[312,114087,32293],{"class":324},[312,114089,114090,114092,114094,114097,114100,114102],{"class":314,"line":18536},[312,114091,36445],{"class":488},[312,114093,1576],{"class":324},[312,114095,114096],{"class":339},"\"  target:\"",[312,114098,114099],{"class":324},", np.round(target, ",[312,114101,2021],{"class":488},[312,114103,32293],{"class":324},[312,114105,114106,114108,114110,114113,114116,114118],{"class":314,"line":18558},[312,114107,36445],{"class":488},[312,114109,1576],{"class":324},[312,114111,114112],{"class":339},"\"  ctrl:\"",[312,114114,114115],{"class":324},", np.round(data.ctrl.copy(), ",[312,114117,2021],{"class":488},[312,114119,32293],{"class":324},[312,114121,114122,114124,114126,114129,114132,114134],{"class":314,"line":18563},[312,114123,36445],{"class":488},[312,114125,1576],{"class":324},[312,114127,114128],{"class":339},"\"  obs_dim:\"",[312,114130,114131],{"class":324},", obs.shape[",[312,114133,858],{"class":488},[312,114135,6462],{"class":324},[312,114137,114138],{"class":314,"line":18569},[312,114139,4205],{"emptyLinePlaceholder":1881},[312,114141,114142,114144,114146,114148,114150,114152,114154,114156],{"class":314,"line":18583},[312,114143,33094],{"class":488},[312,114145,1576],{"class":324},[312,114147,112145],{"class":339},[312,114149,733],{"class":324},[312,114151,33813],{"class":488},[312,114153,112152],{"class":324},[312,114155,2021],{"class":488},[312,114157,32293],{"class":324},[312,114159,114160,114162,114164,114167,114170,114172,114174,114176],{"class":314,"line":18596},[312,114161,33094],{"class":488},[312,114163,1576],{"class":324},[312,114165,114166],{"class":339},"\"final tip:\"",[312,114168,114169],{"class":324},", np.round(site_position(model, data, ",[312,114171,113305],{"class":339},[312,114173,112114],{"class":324},[312,114175,2021],{"class":488},[312,114177,32293],{"class":324},[312,114179,114180,114182,114184,114187,114189,114191,114193,114195],{"class":314,"line":18601},[312,114181,33094],{"class":488},[312,114183,1576],{"class":324},[312,114185,114186],{"class":339},"\"target:\"",[312,114188,114169],{"class":324},[312,114190,113728],{"class":339},[312,114192,112114],{"class":324},[312,114194,2021],{"class":488},[312,114196,32293],{"class":324},[312,114198,114199],{"class":314,"line":18615},[312,114200,4205],{"emptyLinePlaceholder":1881},[312,114202,114203],{"class":314,"line":18620},[312,114204,4205],{"emptyLinePlaceholder":1881},[312,114206,114207,114209,114211,114213,114215],{"class":314,"line":18626},[312,114208,3338],{"class":1436},[312,114210,33015],{"class":488},[312,114212,103328],{"class":1436},[312,114214,103331],{"class":339},[312,114216,5544],{"class":324},[312,114218,114219],{"class":314,"line":18631},[312,114220,103338],{"class":324},[24,114222,105339],{},[303,114224,114226],{"className":25618,"code":114225,"language":25620,"meta":308,"style":308},"touch ch7_reacher.py\n",[119,114227,114228],{"__ignoreMap":308},[312,114229,114230,114232],{"class":314,"line":315},[312,114231,103052],{"class":332},[312,114233,114234],{"class":339}," ch7_reacher.py\n",[24,114236,112213],{},[303,114238,114240],{"className":25618,"code":114239,"language":25620,"meta":308,"style":308},"python ch7_reacher.py\n",[119,114241,114242],{"__ignoreMap":308},[312,114243,114244,114246],{"class":314,"line":315},[312,114245,32176],{"class":332},[312,114247,114234],{"class":339},[69,114249,103341],{"id":103341},[24,114251,114252],{},"读取 site 坐标：",[303,114254,114256],{"className":32174,"code":114255,"language":32176,"meta":308,"style":308},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[119,114257,114258],{"__ignoreMap":308},[312,114259,114260,114262,114264,114266,114268],{"class":314,"line":315},[312,114261,33742],{"class":1436},[312,114263,113625],{"class":332},[312,114265,113628],{"class":324},[312,114267,3110],{"class":488},[312,114269,113633],{"class":324},[24,114271,114272],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[24,114274,112229],{},[303,114276,114278],{"className":32174,"code":114277,"language":32176,"meta":308,"style":308},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[119,114279,114280],{"__ignoreMap":308},[312,114281,114282,114284],{"class":314,"line":315},[312,114283,18846],{"class":1436},[312,114285,113737],{"class":324},[24,114287,114288],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[24,114290,111554],{},[303,114292,114294],{"className":32174,"code":114293,"language":32176,"meta":308,"style":308},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[119,114295,114296,114308,114321],{"__ignoreMap":308},[312,114297,114298,114300,114302,114304,114306],{"class":314,"line":315},[312,114299,113365],{"class":324},[312,114301,336],{"class":1436},[312,114303,113370],{"class":324},[312,114305,2477],{"class":1436},[312,114307,113375],{"class":324},[312,114309,114310,114313,114315,114317,114319],{"class":314,"line":171},[312,114311,114312],{"class":324},"control_cost ",[312,114314,336],{"class":1436},[312,114316,113806],{"class":488},[312,114318,8322],{"class":1436},[312,114320,113811],{"class":324},[312,114322,114323,114325,114327,114329,114331,114333,114335],{"class":314,"line":274},[312,114324,18846],{"class":1436},[312,114326,111566],{"class":488},[312,114328,1576],{"class":324},[312,114330,2477],{"class":1436},[312,114332,113365],{"class":324},[312,114334,2477],{"class":1436},[312,114336,113828],{"class":324},[24,114338,114339],{},"奖励由两部分组成：",[140,114341,114342,114347],{},[143,114343,114344,114346],{},[119,114345,113392],{},"：末端离目标越远，奖励越低。",[143,114348,114349,114352],{},[119,114350,114351],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[24,114354,114355],{},"简单控制器：",[303,114357,114359],{"className":32174,"code":114358,"language":32176,"meta":308,"style":308},"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",[119,114360,114361,114374,114406],{"__ignoreMap":308},[312,114362,114363,114366,114368,114370,114372],{"class":314,"line":315},[312,114364,114365],{"class":324},"error ",[312,114367,336],{"class":1436},[312,114369,113937],{"class":324},[312,114371,2477],{"class":1436},[312,114373,113942],{"class":324},[312,114375,114376,114378,114380,114382,114384,114386,114388,114390,114392,114394,114396,114398,114400,114402,114404],{"class":314,"line":171},[312,114377,107640],{"class":324},[312,114379,858],{"class":488},[312,114381,6248],{"class":324},[312,114383,336],{"class":1436},[312,114385,113959],{"class":324},[312,114387,107029],{"class":488},[312,114389,8322],{"class":1436},[312,114391,113966],{"class":324},[312,114393,2027],{"class":488},[312,114395,113971],{"class":324},[312,114397,2477],{"class":1436},[312,114399,104172],{"class":488},[312,114401,733],{"class":324},[312,114403,104172],{"class":488},[312,114405,1959],{"class":324},[312,114407,114408,114410,114412,114414,114416,114418,114420,114422,114424,114426,114428,114430,114432,114434,114436],{"class":314,"line":274},[312,114409,107640],{"class":324},[312,114411,1433],{"class":488},[312,114413,6248],{"class":324},[312,114415,336],{"class":1436},[312,114417,113959],{"class":324},[312,114419,107029],{"class":488},[312,114421,8322],{"class":1436},[312,114423,113966],{"class":324},[312,114425,858],{"class":488},[312,114427,113971],{"class":324},[312,114429,2477],{"class":1436},[312,114431,104172],{"class":488},[312,114433,733],{"class":324},[312,114435,104172],{"class":488},[312,114437,1959],{"class":324},[24,114439,114440],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[69,114442,103477],{"id":103477},[303,114444,114445],{"className":32174,"code":114255,"language":32176,"meta":308,"style":308},[119,114446,114447],{"__ignoreMap":308},[312,114448,114449,114451,114453,114455,114457],{"class":314,"line":315},[312,114450,33742],{"class":1436},[312,114452,113625],{"class":332},[312,114454,113628],{"class":324},[312,114456,3110],{"class":488},[312,114458,113633],{"class":324},[24,114460,114461,114462,114464,114465,84310,114467,30181],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[119,114463,81581],{}," 是 site 的名字，比如 ",[119,114466,113305],{},[119,114468,113728],{},[303,114470,114472],{"className":32174,"code":114471,"language":32176,"meta":308,"style":308},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[119,114473,114474],{"__ignoreMap":308},[312,114475,114476,114478,114480],{"class":314,"line":315},[312,114477,105403],{"class":324},[312,114479,336],{"class":1436},[312,114481,113642],{"class":324},[24,114483,114484],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[303,114486,114488],{"className":32174,"code":114487,"language":32176,"meta":308,"style":308},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[119,114489,114490,114502],{"__ignoreMap":308},[312,114491,114492,114494,114496,114498,114500],{"class":314,"line":315},[312,114493,3338],{"class":1436},[312,114495,105218],{"class":324},[312,114497,325],{"class":1436},[312,114499,5898],{"class":488},[312,114501,5544],{"class":324},[312,114503,114504,114506,114508,114510,114512,114514,114516,114518,114520,114522],{"class":314,"line":171},[312,114505,105664],{"class":1436},[312,114507,105204],{"class":488},[312,114509,1576],{"class":324},[312,114511,2003],{"class":1436},[312,114513,113667],{"class":339},[312,114515,2840],{"class":488},[312,114517,81581],{"class":324},[312,114519,2888],{"class":488},[312,114521,2196],{"class":339},[312,114523,1959],{"class":324},[24,114525,114526,114527,114530,114531,114533],{},"如果 site 没找到，就主动报错。",[119,114528,114529],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[119,114532,81581],{}," 的值放进字符串里。",[303,114535,114537],{"className":32174,"code":114536,"language":32176,"meta":308,"style":308},"return data.site_xpos[site_id].copy()\n",[119,114538,114539],{"__ignoreMap":308},[312,114540,114541,114543],{"class":314,"line":315},[312,114542,18846],{"class":1436},[312,114544,113684],{"class":324},[24,114546,114547,114548,114550,114551,114554],{},"返回这个 site 的世界坐标。",[119,114549,105449],{}," 里的每一行都是一个 site 的 ",[119,114552,114553],{},"(x, y, z)"," 坐标。",[303,114556,114558],{"className":32174,"code":114557,"language":32176,"meta":308,"style":308},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[119,114559,114560],{"__ignoreMap":308},[312,114561,114562,114564,114566],{"class":314,"line":315},[312,114563,33742],{"class":1436},[312,114565,113699],{"class":332},[312,114567,113702],{"class":324},[24,114569,114570],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[303,114572,114574],{"className":32174,"code":114573,"language":32176,"meta":308,"style":308},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[119,114575,114576,114588],{"__ignoreMap":308},[312,114577,114578,114580,114582,114584,114586],{"class":314,"line":315},[312,114579,113337],{"class":324},[312,114581,336],{"class":1436},[312,114583,113712],{"class":324},[312,114585,113305],{"class":339},[312,114587,1959],{"class":324},[312,114589,114590,114592,114594,114596,114598],{"class":314,"line":171},[312,114591,113347],{"class":324},[312,114593,336],{"class":1436},[312,114595,113712],{"class":324},[312,114597,113728],{"class":339},[312,114599,1959],{"class":324},[24,114601,114602],{},"分别读取末端点和目标点的世界坐标。",[303,114604,114605],{"className":32174,"code":114277,"language":32176,"meta":308,"style":308},[119,114606,114607],{"__ignoreMap":308},[312,114608,114609,114611],{"class":314,"line":315},[312,114610,18846],{"class":1436},[312,114612,113737],{"class":324},[24,114614,114615],{},"把四部分拼成一个观测数组：",[303,114617,114620],{"className":114618,"code":114619,"language":6992,"meta":308},[6990],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[119,114621,114619],{"__ignoreMap":308},[303,114623,114625],{"className":32174,"code":114624,"language":32176,"meta":308,"style":308},"dist = np.linalg.norm(tip - target)\n",[119,114626,114627],{"__ignoreMap":308},[312,114628,114629,114631,114633,114635,114637],{"class":314,"line":315},[312,114630,113365],{"class":324},[312,114632,336],{"class":1436},[312,114634,113370],{"class":324},[312,114636,2477],{"class":1436},[312,114638,113375],{"class":324},[24,114640,114641,114642,114645,114646,114649],{},"计算 tip 到 target 的距离。",[119,114643,114644],{},"tip - target"," 得到一个三维向量，",[119,114647,114648],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[24,114651,16434],{},[303,114653,114656],{"className":114654,"code":114655,"language":6992,"meta":308},[6990],"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",[119,114657,114655],{"__ignoreMap":308},[303,114659,114661],{"className":32174,"code":114660,"language":32176,"meta":308,"style":308},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[119,114662,114663],{"__ignoreMap":308},[312,114664,114665,114667,114669,114671,114673],{"class":314,"line":315},[312,114666,114312],{"class":324},[312,114668,336],{"class":1436},[312,114670,113806],{"class":488},[312,114672,8322],{"class":1436},[312,114674,113811],{"class":324},[24,114676,114677,114678,114681,114682,114685],{},"计算动作惩罚。",[119,114679,114680],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[119,114683,114684],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[303,114687,114689],{"className":32174,"code":114688,"language":32176,"meta":308,"style":308},"return float(-dist - control_cost)\n",[119,114690,114691],{"__ignoreMap":308},[312,114692,114693,114695,114697,114699,114701,114703,114705],{"class":314,"line":315},[312,114694,18846],{"class":1436},[312,114696,111566],{"class":488},[312,114698,1576],{"class":324},[312,114700,2477],{"class":1436},[312,114702,113365],{"class":324},[312,114704,2477],{"class":1436},[312,114706,113828],{"class":324},[24,114708,114709],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[303,114711,114712],{"className":32174,"code":112572,"language":32176,"meta":308,"style":308},[119,114713,114714],{"__ignoreMap":308},[312,114715,114716,114718,114720],{"class":314,"line":315},[312,114717,112579],{"class":324},[312,114719,336],{"class":1436},[312,114721,106530],{"class":488},[24,114723,114724],{},"累计奖励变量，记录整个运行过程的总分。",[303,114726,114728],{"className":32174,"code":114727,"language":32176,"meta":308,"style":308},"for step in range(500):\n",[119,114729,114730],{"__ignoreMap":308},[312,114731,114732,114734,114736,114738,114740,114742,114744],{"class":314,"line":315},[312,114733,4830],{"class":1436},[312,114735,33411],{"class":324},[312,114737,27839],{"class":1436},[312,114739,34238],{"class":488},[312,114741,1576],{"class":324},[312,114743,66852],{"class":488},[312,114745,32582],{"class":324},[24,114747,114748],{},"运行 500 个控制步。",[303,114750,114751],{"className":32174,"code":106312,"language":32176,"meta":308,"style":308},[119,114752,114753],{"__ignoreMap":308},[312,114754,114755],{"class":314,"line":315},[312,114756,106312],{"class":324},[24,114758,114759,114760,1167,114762,114764],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[119,114761,105000],{},[119,114763,105003],{}," 是当前状态下的坐标。",[303,114766,114768],{"className":32174,"code":114767,"language":32176,"meta":308,"style":308},"error = target - tip\n",[119,114769,114770],{"__ignoreMap":308},[312,114771,114772,114774,114776,114778,114780],{"class":314,"line":315},[312,114773,114365],{"class":324},[312,114775,336],{"class":1436},[312,114777,113937],{"class":324},[312,114779,2477],{"class":1436},[312,114781,113942],{"class":324},[24,114783,114784],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[303,114786,114788],{"className":32174,"code":114787,"language":32176,"meta":308,"style":308},"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",[119,114789,114790,114822],{"__ignoreMap":308},[312,114791,114792,114794,114796,114798,114800,114802,114804,114806,114808,114810,114812,114814,114816,114818,114820],{"class":314,"line":315},[312,114793,107640],{"class":324},[312,114795,858],{"class":488},[312,114797,6248],{"class":324},[312,114799,336],{"class":1436},[312,114801,113959],{"class":324},[312,114803,107029],{"class":488},[312,114805,8322],{"class":1436},[312,114807,113966],{"class":324},[312,114809,2027],{"class":488},[312,114811,113971],{"class":324},[312,114813,2477],{"class":1436},[312,114815,104172],{"class":488},[312,114817,733],{"class":324},[312,114819,104172],{"class":488},[312,114821,1959],{"class":324},[312,114823,114824,114826,114828,114830,114832,114834,114836,114838,114840,114842,114844,114846,114848,114850,114852],{"class":314,"line":171},[312,114825,107640],{"class":324},[312,114827,1433],{"class":488},[312,114829,6248],{"class":324},[312,114831,336],{"class":1436},[312,114833,113959],{"class":324},[312,114835,107029],{"class":488},[312,114837,8322],{"class":1436},[312,114839,113966],{"class":324},[312,114841,858],{"class":488},[312,114843,113971],{"class":324},[312,114845,2477],{"class":1436},[312,114847,104172],{"class":488},[312,114849,733],{"class":324},[312,114851,104172],{"class":488},[312,114853,1959],{"class":324},[24,114855,114856,114857,114860],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[119,114858,114859],{},"error -> ctrl -> step"," 的流程。",[303,114862,114863],{"className":32174,"code":106274,"language":32176,"meta":308,"style":308},[119,114864,114865],{"__ignoreMap":308},[312,114866,114867],{"class":314,"line":315},[312,114868,106274],{"class":324},[24,114870,114871],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[303,114873,114875],{"className":32174,"code":114874,"language":32176,"meta":308,"style":308},"obs = get_obs(model, data)\n",[119,114876,114877],{"__ignoreMap":308},[312,114878,114879,114881,114883],{"class":314,"line":315},[312,114880,112623],{"class":324},[312,114882,336],{"class":1436},[312,114884,114060],{"class":324},[24,114886,114887,114888,114891],{},"读取最新观测。后面打印 ",[119,114889,114890],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114893,104085],{"id":104084},[24,114895,114896],{},"观测维度为:",[303,114898,114901],{"className":114899,"code":114900,"language":6992,"meta":308},[6990],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[119,114902,114900],{"__ignoreMap":308},[24,114904,114905],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[24,114907,114908],{},"程序每 100 步打印：",[303,114910,114913],{"className":114911,"code":114912,"language":6992,"meta":308},[6990],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[119,114914,114912],{"__ignoreMap":308},[24,114916,114917,114918,114920],{},"如果控制有效，你应该看到最终 ",[119,114919,105000],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114922,104117],{"id":104116},[140,114924,114925,114928,114931,114937,114943,114950,114960],{},[143,114926,114927],{},"修改目标点位置。",[143,114929,114930],{},"重新运行，观察最终 tip 是否变化。",[143,114932,114933,114934,114936],{},"把 gravity 改成 ",[119,114935,104358],{},"，观察控制是否变差。",[143,114938,112950,114939,112954,114941,30181],{},[119,114940,103927],{},[119,114942,2027],{},[143,114944,104180,114945,104183,114947,114949],{},[119,114946,112365],{},[119,114948,109076],{},"，观察机械臂是否更难移动。",[143,114951,104180,114952,84301,114954,104183,114956,114959],{},[119,114953,105003],{},[119,114955,105915],{},[119,114957,114958],{},"0.2 0 0.6","，观察 reward 和 final tip。",[143,114961,114962],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114964,104222],{"id":104221},[69,114966,114968],{"id":114967},"site-not-found",[119,114969,114970],{},"site not found",[24,114972,114973,114974,1167,114977,30181],{},"检查 XML 中是否有 ",[119,114975,114976],{},"site name=\"tip\"",[119,114978,114979],{},"site name=\"target\"",[69,114981,114982],{"id":114982},"机械臂完全不动",[24,114984,104292],{},[140,114986,114987,114992,114995,115000],{},[143,114988,114989,114991],{},[119,114990,103927],{}," 是否为 2",[143,114993,114994],{},"actuator 是否引用正确 joint",[143,114996,114997,114999],{},[119,114998,102845],{}," 是否被赋值",[143,115001,115002,115003],{},"是否执行了 ",[119,115004,102455],{},[69,115006,115007],{"id":115007},"控制效果不好",[24,115009,115010],{},"正常。本章重点不是控制器最优，而是任务结构:",[303,115012,115015],{"className":115013,"code":115014,"language":6992,"meta":308},[6990],"obs → action → mj_step → reward → next_obs\n",[119,115016,115014],{"__ignoreMap":308},[69,115018,115020],{"id":115019},"tip-坐标不变化","tip 坐标不变化",[24,115022,104344],{},[140,115024,115025,115030,115038,115047],{},[143,115026,115027,115028,30181],{},"是否每步调用了 ",[119,115029,102455],{},[143,115031,115032,115033,1167,115035,30181],{},"是否写入了 ",[119,115034,107895],{},[119,115036,115037],{},"data.ctrl[1]",[143,115039,115040,115041,2159,115044,30181],{},"actuator 是否正确引用 ",[119,115042,115043],{},"joint1",[119,115045,115046],{},"joint2",[143,115048,115049],{},"控制输入是否太小。",[69,115051,115052],{"id":115052},"目标点不会动",[24,115054,115055],{},"本章的 target 是固定 site：",[303,115057,115059],{"className":54853,"code":115058,"language":54855,"meta":308,"style":308},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[119,115060,115061],{"__ignoreMap":308},[312,115062,115063,115065,115067,115069,115071,115073,115075,115077,115080],{"class":314,"line":315},[312,115064,325],{"class":324},[312,115066,104979],{"class":328},[312,115068,16721],{"class":332},[312,115070,336],{"class":324},[312,115072,113728],{"class":339},[312,115074,102875],{"class":332},[312,115076,336],{"class":324},[312,115078,115079],{"class":339},"\"0.5 0 0.4\"",[312,115081,115082],{"class":324}," ...\u002F>\n",[24,115084,115085,115086,115088],{},"它直接挂在 ",[119,115087,103610],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[69,115090,115091],{"id":115091},"机械臂不像真实机械臂",[24,115093,115094],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,115096,104376],{"id":104375},[24,115098,115099],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[24,115101,115102],{},"核心公式：",[303,115104,115107],{"className":115105,"code":115106,"language":6992,"meta":308},[6990],"distance = ||tip - target||\nreward = -distance - action_cost\n",[119,115108,115106],{"__ignoreMap":308},[24,115110,115111],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1856,115113,115114],{},"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":308,"searchDepth":171,"depth":171,"links":115116},[115117,115118,115119,115124,115128,115129,115130,115138],{"id":102416,"depth":171,"text":102417},{"id":102539,"depth":171,"text":102540},{"id":102813,"depth":171,"text":102814,"children":115120},[115121,115122,115123],{"id":113320,"depth":274,"text":113321},{"id":113396,"depth":274,"text":113396},{"id":113426,"depth":274,"text":113427},{"id":103021,"depth":171,"text":103022,"children":115125},[115126,115127],{"id":103341,"depth":274,"text":103341},{"id":103477,"depth":274,"text":103477},{"id":104084,"depth":171,"text":104085},{"id":104116,"depth":171,"text":104117},{"id":104221,"depth":171,"text":104222,"children":115131},[115132,115133,115134,115135,115136,115137],{"id":114967,"depth":274,"text":114970},{"id":114982,"depth":274,"text":114982},{"id":115007,"depth":274,"text":115007},{"id":115019,"depth":274,"text":115020},{"id":115052,"depth":274,"text":115052},{"id":115091,"depth":274,"text":115091},{"id":104375,"depth":171,"text":104376},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":113124,"description":308},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":115145,"title":115146,"body":115147,"description":308,"extension":1879,"meta":118609,"navigation":1881,"path":118610,"seo":118611,"stem":118612,"__hash__":118613},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":115148,"toc":118580},[115149,115152,115154,115157,115160,115185,115188,115194,115197,115203,115205,115207,115231,115233,115251,115253,115296,115298,115325,115327,115330,115382,115385,115391,115400,115403,115441,115444,115483,115486,115494,115501,115504,115510,115512,115566,115573,115618,115621,115625,115641,115651,115653,116914,116916,116928,116930,116941,116943,116946,116967,116970,116973,117006,117012,117015,117048,117051,117054,117095,117100,117114,117117,117130,117135,117158,117160,117175,117185,117200,117207,117227,117242,117260,117263,117280,117288,117304,117310,117342,117355,117387,117397,117432,117446,117492,117506,117548,117559,117572,117578,117611,117614,117641,117651,117691,117701,117718,117725,117743,117746,117787,117800,117815,117818,117841,117844,117856,117859,117878,117883,117904,117907,117922,117925,117959,117971,117986,117989,118014,118017,118036,118039,118071,118074,118098,118104,118134,118141,118154,118157,118159,118161,118167,118170,118173,118185,118188,118190,118244,118246,118250,118256,118265,118268,118275,118277,118300,118303,118307,118309,118327,118333,118335,118368,118371,118377,118381,118384,118404,118409,118413,118420,118440,118445,118449,118452,118472,118475,118561,118565,118568,118574,118577],[10,115150,115146],{"id":115151},"_8gymnasium-风格强化学习接口基础",[14,115153,102417],{"id":102416},[24,115155,115156],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[24,115158,115159],{},"你将实现:",[303,115161,115163],{"className":32174,"code":115162,"language":32176,"meta":308,"style":308},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[119,115164,115165,115175],{"__ignoreMap":308},[312,115166,115167,115170,115172],{"class":314,"line":315},[312,115168,115169],{"class":324},"obs, info ",[312,115171,336],{"class":1436},[312,115173,115174],{"class":324}," env.reset()\n",[312,115176,115177,115180,115182],{"class":314,"line":171},[312,115178,115179],{"class":324},"obs, reward, terminated, truncated, info ",[312,115181,336],{"class":1436},[312,115183,115184],{"class":324}," env.step(action)\n",[24,115186,115187],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[24,115189,115190,115191,115193],{},"前面章节的代码都是“脚本式”的：在 ",[119,115192,104064],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[24,115195,115196],{},"可以先记住 Gymnasium 环境的核心交互：",[303,115198,115201],{"className":115199,"code":115200,"language":6992,"meta":308},[6990],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[119,115202,115200],{"__ignoreMap":308},[14,115204,102540],{"id":102539},[24,115206,102543],{},[303,115208,115209],{"className":25618,"code":106157,"language":25620,"meta":308,"style":308},[119,115210,115211],{"__ignoreMap":308},[312,115212,115213,115215,115217,115219,115221,115223,115225,115227,115229],{"class":314,"line":315},[312,115214,26372],{"class":332},[312,115216,28111],{"class":339},[312,115218,25630],{"class":339},[312,115220,28196],{"class":488},[312,115222,106172],{"class":339},[312,115224,102568],{"class":339},[312,115226,104270],{"class":339},[312,115228,102584],{"class":339},[312,115230,106181],{"class":339},[24,115232,104588],{},[303,115234,115236],{"className":25618,"code":115235,"language":25620,"meta":308,"style":308},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[119,115237,115238],{"__ignoreMap":308},[312,115239,115240,115242,115244,115246,115248],{"class":314,"line":315},[312,115241,25627],{"class":332},[312,115243,25630],{"class":339},[312,115245,102700],{"class":339},[312,115247,109480],{"class":339},[312,115249,115250],{"class":339}," gymnasium\n",[24,115252,104605],{},[303,115254,115256],{"className":25618,"code":115255,"language":25620,"meta":308,"style":308},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[119,115257,115258,115275,115284],{"__ignoreMap":308},[312,115259,115260,115262,115264,115266,115269,115271,115273],{"class":314,"line":315},[312,115261,32126],{"class":332},[312,115263,30972],{"class":339},[312,115265,26911],{"class":488},[312,115267,115268],{"class":339}," mujoco-gym-api",[312,115270,102745],{"class":339},[312,115272,102748],{"class":488},[312,115274,102751],{"class":488},[312,115276,115277,115279,115281],{"class":314,"line":171},[312,115278,32126],{"class":332},[312,115280,102758],{"class":339},[312,115282,115283],{"class":339}," mujoco-gym-api\n",[312,115285,115286,115288,115290,115292,115294],{"class":314,"line":274},[312,115287,25627],{"class":332},[312,115289,25630],{"class":339},[312,115291,102700],{"class":339},[312,115293,109480],{"class":339},[312,115295,115250],{"class":339},[24,115297,102774],{},[140,115299,115300,115310,115313,115319],{},[143,115301,115302,115303,115306,115307,30181],{},"本章使用 ",[119,115304,115305],{},"gymnasium","，不是旧版 ",[119,115308,115309],{},"gym",[143,115311,115312],{},"Gymnasium API 与旧 Gym API 有差异。",[143,115314,115315,115316,30181],{},"旧 Gym 常见返回值是 4 个: ",[119,115317,115318],{},"obs, reward, done, info",[143,115320,115321,115322,30181],{},"Gymnasium 返回值是 5 个: ",[119,115323,115324],{},"obs, reward, terminated, truncated, info",[14,115326,102814],{"id":102813},[24,115328,115329],{},"强化学习环境接口包含:",[2086,115331,115332,115341],{},[2089,115333,115334],{},[2092,115335,115336,115339],{},[2095,115337,115338],{"align":1374},"方法",[2095,115340,104465],{"align":1374},[2132,115342,115343,115353,115363,115373],{},[2092,115344,115345,115350],{},[2137,115346,115347],{"align":1374},[119,115348,115349],{},"reset()",[2137,115351,115352],{"align":1374},"重置环境",[2092,115354,115355,115360],{},[2137,115356,115357],{"align":1374},[119,115358,115359],{},"step(action)",[2137,115361,115362],{"align":1374},"执行动作",[2092,115364,115365,115370],{},[2137,115366,115367],{"align":1374},[119,115368,115369],{},"observation_space",[2137,115371,115372],{"align":1374},"观测空间",[2092,115374,115375,115380],{},[2137,115376,115377],{"align":1374},[119,115378,115379],{},"action_space",[2137,115381,25451],{"align":1374},[24,115383,115384],{},"一个最小环境需要完成:",[303,115386,115389],{"className":115387,"code":115388,"language":6992,"meta":308},[6990],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[119,115390,115388],{"__ignoreMap":308},[69,115392,115394,1167,115397,106407],{"id":115393},"terminated-和-truncated-的区别",[119,115395,115396],{},"terminated",[119,115398,115399],{},"truncated",[24,115401,115402],{},"Gymnasium 把“结束”拆成两个概念：",[2086,115404,115405,115415],{},[2089,115406,115407],{},[2092,115408,115409,115411,115413],{},[2095,115410,106343],{"align":1374},[2095,115412,102470],{"align":1374},[2095,115414,22986],{"align":1374},[2132,115416,115417,115429],{},[2092,115418,115419,115423,115426],{},[2137,115420,115421],{"align":1374},[119,115422,115396],{},[2137,115424,115425],{"align":1374},"任务自然结束",[2137,115427,115428],{"align":1374},"机械臂到达目标、机器人摔倒",[2092,115430,115431,115435,115438],{},[2137,115432,115433],{"align":1374},[119,115434,115399],{},[2137,115436,115437],{"align":1374},"因外部限制截断",[2137,115439,115440],{"align":1374},"达到最大步数、时间限制",[24,115442,115443],{},"本章中：",[303,115445,115447],{"className":32174,"code":115446,"language":32176,"meta":308,"style":308},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[119,115448,115449,115464],{"__ignoreMap":308},[312,115450,115451,115454,115456,115459,115461],{"class":314,"line":315},[312,115452,115453],{"class":324},"terminated ",[312,115455,336],{"class":1436},[312,115457,115458],{"class":324}," dist ",[312,115460,325],{"class":1436},[312,115462,115463],{"class":488}," 0.05\n",[312,115465,115466,115469,115471,115473,115476,115478,115480],{"class":314,"line":171},[312,115467,115468],{"class":324},"truncated ",[312,115470,336],{"class":1436},[312,115472,40668],{"class":488},[312,115474,115475],{"class":324},".steps ",[312,115477,3516],{"class":1436},[312,115479,40668],{"class":488},[312,115481,115482],{"class":324},".max_steps\n",[24,115484,115485],{},"也就是：",[140,115487,115488,115491],{},[143,115489,115490],{},"末端距离目标小于 0.05，任务成功结束。",[143,115492,115493],{},"步数超过上限，episode 被截断。",[69,115495,115497,1167,115499],{"id":115496},"observation_space-和-action_space",[119,115498,115369],{},[119,115500,115379],{},[24,115502,115503],{},"这两个对象告诉算法：",[303,115505,115508],{"className":115506,"code":115507,"language":6992,"meta":308},[6990],"观测长什么样\n动作允许多大\n",[119,115509,115507],{"__ignoreMap":308},[24,115511,16434],{},[303,115513,115515],{"className":32174,"code":115514,"language":32176,"meta":308,"style":308},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[119,115516,115517],{"__ignoreMap":308},[312,115518,115519,115521,115524,115526,115529,115532,115535,115537,115539,115542,115544,115546,115548,115550,115552,115554,115556,115559,115561,115563],{"class":314,"line":315},[312,115520,32619],{"class":488},[312,115522,115523],{"class":324},".action_space ",[312,115525,336],{"class":1436},[312,115527,115528],{"class":324}," spaces.Box(",[312,115530,115531],{"class":1579},"low",[312,115533,115534],{"class":1436},"=-",[312,115536,104172],{"class":488},[312,115538,733],{"class":324},[312,115540,115541],{"class":1579},"high",[312,115543,336],{"class":1436},[312,115545,104172],{"class":488},[312,115547,733],{"class":324},[312,115549,97733],{"class":1579},[312,115551,336],{"class":1436},[312,115553,1576],{"class":324},[312,115555,2027],{"class":488},[312,115557,115558],{"class":324},",), ",[312,115560,95270],{"class":1579},[312,115562,336],{"class":1436},[312,115564,115565],{"class":324},"np.float32)\n",[24,115567,115568,115569,115572],{},"表示动作是 2 维数组，每个值都在 ",[119,115570,115571],{},"[-1, 1]"," 范围内。",[303,115574,115576],{"className":32174,"code":115575,"language":32176,"meta":308,"style":308},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[119,115577,115578],{"__ignoreMap":308},[312,115579,115580,115582,115585,115587,115589,115591,115593,115596,115598,115600,115602,115604,115606,115608,115610,115612,115614,115616],{"class":314,"line":315},[312,115581,32619],{"class":488},[312,115583,115584],{"class":324},".observation_space ",[312,115586,336],{"class":1436},[312,115588,115528],{"class":324},[312,115590,115531],{"class":1579},[312,115592,115534],{"class":1436},[312,115594,115595],{"class":324},"np.inf, ",[312,115597,115541],{"class":1579},[312,115599,336],{"class":1436},[312,115601,115595],{"class":324},[312,115603,97733],{"class":1579},[312,115605,336],{"class":1436},[312,115607,1576],{"class":324},[312,115609,2391],{"class":488},[312,115611,115558],{"class":324},[312,115613,95270],{"class":1579},[312,115615,336],{"class":1436},[312,115617,115565],{"class":324},[24,115619,115620],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[69,115622,115624],{"id":115623},"frame_skip-是什么","frame_skip 是什么",[303,115626,115628],{"className":32174,"code":115627,"language":32176,"meta":308,"style":308},"self.frame_skip = 5\n",[119,115629,115630],{"__ignoreMap":308},[312,115631,115632,115634,115637,115639],{"class":314,"line":315},[312,115633,32619],{"class":488},[312,115635,115636],{"class":324},".frame_skip ",[312,115638,336],{"class":1436},[312,115640,56211],{"class":488},[24,115642,115643,115644,115647,115648,115650],{},"表示外部调用一次 ",[119,115645,115646],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[119,115649,102984],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115652,103022],{"id":103021},[303,115654,115656],{"className":32174,"code":115655,"language":32176,"meta":308,"style":308},"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",[119,115657,115658,115670,115676,115686,115697,115701,115705,115713,115718,115722,115726,115730,115734,115738,115742,115746,115751,115755,115759,115763,115768,115772,115776,115780,115784,115788,115792,115796,115800,115804,115808,115812,115816,115820,115838,115853,115857,115870,115880,115895,115912,115916,115937,115956,115981,115995,115999,116009,116021,116031,116035,116077,116115,116119,116129,116145,116160,116179,116186,116190,116203,116218,116233,116246,116265,116281,116285,116326,116341,116356,116360,116399,116410,116423,116427,116437,116446,116450,116460,116475,116493,116497,116508,116525,116538,116542,116552,116556,116567,116578,116582,116596,116610,116626,116630,116643,116660,116675,116682,116686,116690,116702,116712,116730,116742,116754,116758,116766,116782,116791,116800,116808,116850,116863,116868,116872,116890,116894,116898,116910],{"__ignoreMap":308},[312,115659,115660,115662,115665,115667],{"class":314,"line":315},[312,115661,32188],{"class":1436},[312,115663,115664],{"class":324}," gymnasium ",[312,115666,33178],{"class":1436},[312,115668,115669],{"class":324}," gym\n",[312,115671,115672,115674],{"class":314,"line":171},[312,115673,32188],{"class":1436},[312,115675,103070],{"class":324},[312,115677,115678,115680,115682,115684],{"class":314,"line":274},[312,115679,32188],{"class":1436},[312,115681,33175],{"class":324},[312,115683,33178],{"class":1436},[312,115685,33181],{"class":324},[312,115687,115688,115690,115692,115694],{"class":314,"line":298},[312,115689,32533],{"class":1436},[312,115691,115664],{"class":324},[312,115693,32188],{"class":1436},[312,115695,115696],{"class":324}," spaces\n",[312,115698,115699],{"class":314,"line":974},[312,115700,4205],{"emptyLinePlaceholder":1881},[312,115702,115703],{"class":314,"line":980},[312,115704,4205],{"emptyLinePlaceholder":1881},[312,115706,115707,115709,115711],{"class":314,"line":997},[312,115708,103083],{"class":488},[312,115710,15366],{"class":1436},[312,115712,103088],{"class":339},[312,115714,115715],{"class":314,"line":1003},[312,115716,115717],{"class":339},"\u003Cmujoco model=\"gym_reacher\">\n",[312,115719,115720],{"class":314,"line":1020},[312,115721,113507],{"class":339},[312,115723,115724],{"class":314,"line":1026},[312,115725,4205],{"emptyLinePlaceholder":1881},[312,115727,115728],{"class":314,"line":3418},[312,115729,103107],{"class":339},[312,115731,115732],{"class":314,"line":3423},[312,115733,113525],{"class":339},[312,115735,115736],{"class":314,"line":3429},[312,115737,4205],{"emptyLinePlaceholder":1881},[312,115739,115740],{"class":314,"line":3434},[312,115741,113534],{"class":339},[312,115743,115744],{"class":314,"line":3448},[312,115745,113539],{"class":339},[312,115747,115748],{"class":314,"line":3453},[312,115749,115750],{"class":339},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[312,115752,115753],{"class":314,"line":3459},[312,115754,4205],{"emptyLinePlaceholder":1881},[312,115756,115757],{"class":314,"line":3480},[312,115758,113553],{"class":339},[312,115760,115761],{"class":314,"line":3485},[312,115762,113558],{"class":339},[312,115764,115765],{"class":314,"line":3499},[312,115766,115767],{"class":339},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[312,115769,115770],{"class":314,"line":3504},[312,115771,113568],{"class":339},[312,115773,115774],{"class":314,"line":3533},[312,115775,108207],{"class":339},[312,115777,115778],{"class":314,"line":3538},[312,115779,103136],{"class":339},[312,115781,115782],{"class":314,"line":3555},[312,115783,103141],{"class":339},[312,115785,115786],{"class":314,"line":3560},[312,115787,4205],{"emptyLinePlaceholder":1881},[312,115789,115790],{"class":314,"line":3565},[312,115791,108224],{"class":339},[312,115793,115794],{"class":314,"line":3570},[312,115795,113593],{"class":339},[312,115797,115798],{"class":314,"line":3584},[312,115799,113598],{"class":339},[312,115801,115802],{"class":314,"line":3589},[312,115803,108234],{"class":339},[312,115805,115806],{"class":314,"line":4382},[312,115807,103146],{"class":339},[312,115809,115810],{"class":314,"line":4396},[312,115811,97468],{"class":339},[312,115813,115814],{"class":314,"line":4404},[312,115815,4205],{"emptyLinePlaceholder":1881},[312,115817,115818],{"class":314,"line":4409},[312,115819,4205],{"emptyLinePlaceholder":1881},[312,115821,115822,115824,115827,115829,115831,115833,115836],{"class":314,"line":4415},[312,115823,16495],{"class":1436},[312,115825,115826],{"class":332}," ReacherEnv",[312,115828,1576],{"class":324},[312,115830,115309],{"class":332},[312,115832,2503],{"class":324},[312,115834,115835],{"class":332},"Env",[312,115837,32582],{"class":324},[312,115839,115840,115843,115845,115847,115850],{"class":314,"line":4421},[312,115841,115842],{"class":324},"    metadata ",[312,115844,336],{"class":1436},[312,115846,6253],{"class":324},[312,115848,115849],{"class":339},"\"render_modes\"",[312,115851,115852],{"class":324},": []}\n",[312,115854,115855],{"class":314,"line":4426},[312,115856,4205],{"emptyLinePlaceholder":1881},[312,115858,115859,115861,115863,115866,115868],{"class":314,"line":9751},[312,115860,32597],{"class":1436},[312,115862,32600],{"class":488},[312,115864,115865],{"class":324},"(self) -> ",[312,115867,97456],{"class":488},[312,115869,5544],{"class":324},[312,115871,115872,115874,115876,115878],{"class":314,"line":9775},[312,115873,32613],{"class":488},[312,115875,19061],{"class":324},[312,115877,32625],{"class":488},[312,115879,3781],{"class":324},[312,115881,115882,115884,115887,115889,115891,115893],{"class":314,"line":9780},[312,115883,32641],{"class":488},[312,115885,115886],{"class":324},".model ",[312,115888,336],{"class":1436},[312,115890,103181],{"class":324},[312,115892,103083],{"class":488},[312,115894,1959],{"class":324},[312,115896,115897,115899,115902,115904,115907,115909],{"class":314,"line":9786},[312,115898,32641],{"class":488},[312,115900,115901],{"class":324},".data ",[312,115903,336],{"class":1436},[312,115905,115906],{"class":324}," mujoco.MjData(",[312,115908,32619],{"class":488},[312,115910,115911],{"class":324},".model)\n",[312,115913,115914],{"class":314,"line":9813},[312,115915,4205],{"emptyLinePlaceholder":1881},[312,115917,115918,115920,115923,115925,115928,115930,115933,115935],{"class":314,"line":9818},[312,115919,32641],{"class":488},[312,115921,115922],{"class":324},".tip_site_id ",[312,115924,336],{"class":1436},[312,115926,115927],{"class":324}," mujoco.mj_name2id(",[312,115929,32619],{"class":488},[312,115931,115932],{"class":324},".model, mujoco.mjtObj.mjOBJ_SITE, ",[312,115934,113305],{"class":339},[312,115936,1959],{"class":324},[312,115938,115939,115941,115944,115946,115948,115950,115952,115954],{"class":314,"line":9824},[312,115940,32641],{"class":488},[312,115942,115943],{"class":324},".target_site_id ",[312,115945,336],{"class":1436},[312,115947,115927],{"class":324},[312,115949,32619],{"class":488},[312,115951,115932],{"class":324},[312,115953,113728],{"class":339},[312,115955,1959],{"class":324},[312,115957,115958,115960,115962,115964,115966,115968,115971,115973,115975,115977,115979],{"class":314,"line":9836},[312,115959,4302],{"class":1436},[312,115961,40668],{"class":488},[312,115963,115922],{"class":324},[312,115965,325],{"class":1436},[312,115967,5898],{"class":488},[312,115969,115970],{"class":1436}," or",[312,115972,40668],{"class":488},[312,115974,115943],{"class":324},[312,115976,325],{"class":1436},[312,115978,5898],{"class":488},[312,115980,5544],{"class":324},[312,115982,115983,115986,115988,115990,115993],{"class":314,"line":9848},[312,115984,115985],{"class":1436},"            raise",[312,115987,105204],{"class":488},[312,115989,1576],{"class":324},[312,115991,115992],{"class":339},"\"required sites not found\"",[312,115994,1959],{"class":324},[312,115996,115997],{"class":314,"line":9860},[312,115998,4205],{"emptyLinePlaceholder":1881},[312,116000,116001,116003,116005,116007],{"class":314,"line":11519},[312,116002,32641],{"class":488},[312,116004,115636],{"class":324},[312,116006,336],{"class":1436},[312,116008,56211],{"class":488},[312,116010,116011,116013,116016,116018],{"class":314,"line":11544},[312,116012,32641],{"class":488},[312,116014,116015],{"class":324},".max_steps ",[312,116017,336],{"class":1436},[312,116019,116020],{"class":488}," 200\n",[312,116022,116023,116025,116027,116029],{"class":314,"line":11567},[312,116024,32641],{"class":488},[312,116026,115475],{"class":324},[312,116028,336],{"class":1436},[312,116030,49128],{"class":488},[312,116032,116033],{"class":314,"line":11591},[312,116034,4205],{"emptyLinePlaceholder":1881},[312,116036,116037,116039,116041,116043,116045,116047,116049,116051,116053,116055,116057,116059,116061,116063,116065,116067,116069,116071,116073,116075],{"class":314,"line":11596},[312,116038,32641],{"class":488},[312,116040,115523],{"class":324},[312,116042,336],{"class":1436},[312,116044,115528],{"class":324},[312,116046,115531],{"class":1579},[312,116048,115534],{"class":1436},[312,116050,104172],{"class":488},[312,116052,733],{"class":324},[312,116054,115541],{"class":1579},[312,116056,336],{"class":1436},[312,116058,104172],{"class":488},[312,116060,733],{"class":324},[312,116062,97733],{"class":1579},[312,116064,336],{"class":1436},[312,116066,1576],{"class":324},[312,116068,2027],{"class":488},[312,116070,115558],{"class":324},[312,116072,95270],{"class":1579},[312,116074,336],{"class":1436},[312,116076,115565],{"class":324},[312,116078,116079,116081,116083,116085,116087,116089,116091,116093,116095,116097,116099,116101,116103,116105,116107,116109,116111,116113],{"class":314,"line":11601},[312,116080,32641],{"class":488},[312,116082,115584],{"class":324},[312,116084,336],{"class":1436},[312,116086,115528],{"class":324},[312,116088,115531],{"class":1579},[312,116090,115534],{"class":1436},[312,116092,115595],{"class":324},[312,116094,115541],{"class":1579},[312,116096,336],{"class":1436},[312,116098,115595],{"class":324},[312,116100,97733],{"class":1579},[312,116102,336],{"class":1436},[312,116104,1576],{"class":324},[312,116106,2391],{"class":488},[312,116108,115558],{"class":324},[312,116110,95270],{"class":1579},[312,116112,336],{"class":1436},[312,116114,115565],{"class":324},[312,116116,116117],{"class":314,"line":11606},[312,116118,4205],{"emptyLinePlaceholder":1881},[312,116120,116121,116123,116126],{"class":314,"line":11615},[312,116122,32597],{"class":1436},[312,116124,116125],{"class":332}," _get_obs",[312,116127,116128],{"class":324},"(self) -> np.ndarray:\n",[312,116130,116131,116133,116135,116137,116140,116142],{"class":314,"line":11620},[312,116132,113906],{"class":324},[312,116134,336],{"class":1436},[312,116136,40668],{"class":488},[312,116138,116139],{"class":324},".data.site_xpos[",[312,116141,32619],{"class":488},[312,116143,116144],{"class":324},".tip_site_id].copy()\n",[312,116146,116147,116149,116151,116153,116155,116157],{"class":314,"line":11626},[312,116148,113919],{"class":324},[312,116150,336],{"class":1436},[312,116152,40668],{"class":488},[312,116154,116139],{"class":324},[312,116156,32619],{"class":488},[312,116158,116159],{"class":324},".target_site_id].copy()\n",[312,116161,116162,116164,116166,116169,116171,116174,116176],{"class":314,"line":11647},[312,116163,111951],{"class":324},[312,116165,336],{"class":1436},[312,116167,116168],{"class":324}," np.concatenate([",[312,116170,32619],{"class":488},[312,116172,116173],{"class":324},".data.qpos.copy(), ",[312,116175,32619],{"class":488},[312,116177,116178],{"class":324},".data.qvel.copy(), tip, target])\n",[312,116180,116181,116183],{"class":314,"line":11653},[312,116182,16553],{"class":1436},[312,116184,116185],{"class":324}," obs.astype(np.float32)\n",[312,116187,116188],{"class":314,"line":11667},[312,116189,4205],{"emptyLinePlaceholder":1881},[312,116191,116192,116194,116197,116199,116201],{"class":314,"line":11673},[312,116193,32597],{"class":1436},[312,116195,116196],{"class":332}," _get_reward",[312,116198,115865],{"class":324},[312,116200,1992],{"class":488},[312,116202,5544],{"class":324},[312,116204,116205,116207,116209,116211,116213,116215],{"class":314,"line":11700},[312,116206,113906],{"class":324},[312,116208,336],{"class":1436},[312,116210,40668],{"class":488},[312,116212,116139],{"class":324},[312,116214,32619],{"class":488},[312,116216,116217],{"class":324},".tip_site_id]\n",[312,116219,116220,116222,116224,116226,116228,116230],{"class":314,"line":11709},[312,116221,113919],{"class":324},[312,116223,336],{"class":1436},[312,116225,40668],{"class":488},[312,116227,116139],{"class":324},[312,116229,32619],{"class":488},[312,116231,116232],{"class":324},".target_site_id]\n",[312,116234,116235,116238,116240,116242,116244],{"class":314,"line":11715},[312,116236,116237],{"class":324},"        dist ",[312,116239,336],{"class":1436},[312,116241,113370],{"class":324},[312,116243,2477],{"class":1436},[312,116245,113375],{"class":324},[312,116247,116248,116251,116253,116255,116257,116260,116262],{"class":314,"line":11723},[312,116249,116250],{"class":324},"        control_cost ",[312,116252,336],{"class":1436},[312,116254,113806],{"class":488},[312,116256,8322],{"class":1436},[312,116258,116259],{"class":324}," np.sum(np.square(",[312,116261,32619],{"class":488},[312,116263,116264],{"class":324},".data.ctrl))\n",[312,116266,116267,116269,116271,116273,116275,116277,116279],{"class":314,"line":11728},[312,116268,16553],{"class":1436},[312,116270,111566],{"class":488},[312,116272,1576],{"class":324},[312,116274,2477],{"class":1436},[312,116276,113365],{"class":324},[312,116278,2477],{"class":1436},[312,116280,113828],{"class":324},[312,116282,116283],{"class":314,"line":18404},[312,116284,4205],{"emptyLinePlaceholder":1881},[312,116286,116287,116289,116292,116295,116297,116300,116302,116304,116306,116308,116310,116313,116316,116318,116320,116322,116324],{"class":314,"line":18410},[312,116288,32597],{"class":1436},[312,116290,116291],{"class":332}," reset",[312,116293,116294],{"class":324},"(self, ",[312,116296,2400],{"class":1436},[312,116298,116299],{"class":324},", seed: ",[312,116301,1956],{"class":488},[312,116303,26905],{"class":1436},[312,116305,40728],{"class":488},[312,116307,15366],{"class":1436},[312,116309,40728],{"class":488},[312,116311,116312],{"class":324},", options: ",[312,116314,116315],{"class":488},"dict",[312,116317,26905],{"class":1436},[312,116319,40728],{"class":488},[312,116321,15366],{"class":1436},[312,116323,40728],{"class":488},[312,116325,32582],{"class":324},[312,116327,116328,116330,116333,116336,116338],{"class":314,"line":18433},[312,116329,32613],{"class":488},[312,116331,116332],{"class":324},"().reset(",[312,116334,116335],{"class":1579},"seed",[312,116337,336],{"class":1436},[312,116339,116340],{"class":324},"seed)\n",[312,116342,116343,116346,116348,116351,116353],{"class":314,"line":18439},[312,116344,116345],{"class":324},"        mujoco.mj_resetData(",[312,116347,32619],{"class":488},[312,116349,116350],{"class":324},".model, ",[312,116352,32619],{"class":488},[312,116354,116355],{"class":324},".data)\n",[312,116357,116358],{"class":314,"line":18462},[312,116359,4205],{"emptyLinePlaceholder":1881},[312,116361,116362,116364,116367,116369,116371,116374,116376,116378,116380,116382,116384,116386,116388,116390,116392,116394,116396],{"class":314,"line":18476},[312,116363,32641],{"class":488},[312,116365,116366],{"class":324},".data.qpos[:] ",[312,116368,336],{"class":1436},[312,116370,40668],{"class":488},[312,116372,116373],{"class":324},".np_random.uniform(",[312,116375,115531],{"class":1579},[312,116377,115534],{"class":1436},[312,116379,87981],{"class":488},[312,116381,733],{"class":324},[312,116383,115541],{"class":1579},[312,116385,336],{"class":1436},[312,116387,87981],{"class":488},[312,116389,733],{"class":324},[312,116391,33291],{"class":1579},[312,116393,336],{"class":1436},[312,116395,32619],{"class":488},[312,116397,116398],{"class":324},".model.nq)\n",[312,116400,116401,116403,116406,116408],{"class":314,"line":18496},[312,116402,32641],{"class":488},[312,116404,116405],{"class":324},".data.qvel[:] ",[312,116407,336],{"class":1436},[312,116409,106530],{"class":488},[312,116411,116412,116415,116417,116419,116421],{"class":314,"line":18502},[312,116413,116414],{"class":324},"        mujoco.mj_forward(",[312,116416,32619],{"class":488},[312,116418,116350],{"class":324},[312,116420,32619],{"class":488},[312,116422,116355],{"class":324},[312,116424,116425],{"class":314,"line":18513},[312,116426,4205],{"emptyLinePlaceholder":1881},[312,116428,116429,116431,116433,116435],{"class":314,"line":18536},[312,116430,32641],{"class":488},[312,116432,115475],{"class":324},[312,116434,336],{"class":1436},[312,116436,49128],{"class":488},[312,116438,116439,116441,116443],{"class":314,"line":18558},[312,116440,16553],{"class":1436},[312,116442,40668],{"class":488},[312,116444,116445],{"class":324},"._get_obs(), {}\n",[312,116447,116448],{"class":314,"line":18563},[312,116449,4205],{"emptyLinePlaceholder":1881},[312,116451,116452,116454,116457],{"class":314,"line":18569},[312,116453,32597],{"class":1436},[312,116455,116456],{"class":332}," step",[312,116458,116459],{"class":324},"(self, action):\n",[312,116461,116462,116464,116466,116469,116471,116473],{"class":314,"line":18583},[312,116463,111991],{"class":324},[312,116465,336],{"class":1436},[312,116467,116468],{"class":324}," np.asarray(action, ",[312,116470,95270],{"class":1579},[312,116472,336],{"class":1436},[312,116474,115565],{"class":324},[312,116476,116477,116479,116481,116483,116485,116488,116490],{"class":314,"line":18596},[312,116478,111991],{"class":324},[312,116480,336],{"class":1436},[312,116482,109216],{"class":324},[312,116484,32619],{"class":488},[312,116486,116487],{"class":324},".action_space.low, ",[312,116489,32619],{"class":488},[312,116491,116492],{"class":324},".action_space.high)\n",[312,116494,116495],{"class":314,"line":18601},[312,116496,4205],{"emptyLinePlaceholder":1881},[312,116498,116499,116501,116504,116506],{"class":314,"line":18615},[312,116500,32641],{"class":488},[312,116502,116503],{"class":324},".data.ctrl[:] ",[312,116505,336],{"class":1436},[312,116507,109239],{"class":324},[312,116509,116510,116512,116514,116516,116518,116520,116522],{"class":314,"line":18620},[312,116511,5208],{"class":1436},[312,116513,103270],{"class":324},[312,116515,27839],{"class":1436},[312,116517,34238],{"class":488},[312,116519,1576],{"class":324},[312,116521,32619],{"class":488},[312,116523,116524],{"class":324},".frame_skip):\n",[312,116526,116527,116530,116532,116534,116536],{"class":314,"line":18626},[312,116528,116529],{"class":324},"            mujoco.mj_step(",[312,116531,32619],{"class":488},[312,116533,116350],{"class":324},[312,116535,32619],{"class":488},[312,116537,116355],{"class":324},[312,116539,116540],{"class":314,"line":18631},[312,116541,4205],{"emptyLinePlaceholder":1881},[312,116543,116544,116546,116548,116550],{"class":314,"line":18645},[312,116545,32641],{"class":488},[312,116547,115475],{"class":324},[312,116549,11280],{"class":1436},[312,116551,57481],{"class":488},[312,116553,116554],{"class":314,"line":18650},[312,116555,4205],{"emptyLinePlaceholder":1881},[312,116557,116558,116560,116562,116564],{"class":314,"line":18655},[312,116559,111951],{"class":324},[312,116561,336],{"class":1436},[312,116563,40668],{"class":488},[312,116565,116566],{"class":324},"._get_obs()\n",[312,116568,116569,116571,116573,116575],{"class":314,"line":18669},[312,116570,112056],{"class":324},[312,116572,336],{"class":1436},[312,116574,40668],{"class":488},[312,116576,116577],{"class":324},"._get_reward()\n",[312,116579,116580],{"class":314,"line":18681},[312,116581,4205],{"emptyLinePlaceholder":1881},[312,116583,116584,116586,116588,116590,116592,116594],{"class":314,"line":18686},[312,116585,113906],{"class":324},[312,116587,336],{"class":1436},[312,116589,40668],{"class":488},[312,116591,116139],{"class":324},[312,116593,32619],{"class":488},[312,116595,116217],{"class":324},[312,116597,116598,116600,116602,116604,116606,116608],{"class":314,"line":18699},[312,116599,113919],{"class":324},[312,116601,336],{"class":1436},[312,116603,40668],{"class":488},[312,116605,116139],{"class":324},[312,116607,32619],{"class":488},[312,116609,116232],{"class":324},[312,116611,116612,116614,116616,116618,116621,116623],{"class":314,"line":18704},[312,116613,116237],{"class":324},[312,116615,336],{"class":1436},[312,116617,111566],{"class":488},[312,116619,116620],{"class":324},"(np.linalg.norm(tip ",[312,116622,2477],{"class":1436},[312,116624,116625],{"class":324}," target))\n",[312,116627,116628],{"class":314,"line":18709},[312,116629,4205],{"emptyLinePlaceholder":1881},[312,116631,116632,116635,116637,116639,116641],{"class":314,"line":18714},[312,116633,116634],{"class":324},"        terminated ",[312,116636,336],{"class":1436},[312,116638,115458],{"class":324},[312,116640,325],{"class":1436},[312,116642,115463],{"class":488},[312,116644,116645,116648,116650,116652,116654,116656,116658],{"class":314,"line":18727},[312,116646,116647],{"class":324},"        truncated ",[312,116649,336],{"class":1436},[312,116651,40668],{"class":488},[312,116653,115475],{"class":324},[312,116655,3516],{"class":1436},[312,116657,40668],{"class":488},[312,116659,115482],{"class":324},[312,116661,116662,116665,116667,116669,116672],{"class":314,"line":18732},[312,116663,116664],{"class":324},"        info ",[312,116666,336],{"class":1436},[312,116668,6253],{"class":324},[312,116670,116671],{"class":339},"\"distance\"",[312,116673,116674],{"class":324},": dist}\n",[312,116676,116677,116679],{"class":314,"line":34428},[312,116678,16553],{"class":1436},[312,116680,116681],{"class":324}," obs, reward, terminated, truncated, info\n",[312,116683,116684],{"class":314,"line":34434},[312,116685,4205],{"emptyLinePlaceholder":1881},[312,116687,116688],{"class":314,"line":34440},[312,116689,4205],{"emptyLinePlaceholder":1881},[312,116691,116692,116694,116696,116698,116700],{"class":314,"line":34446},[312,116693,33742],{"class":1436},[312,116695,3778],{"class":332},[312,116697,103167],{"class":324},[312,116699,97456],{"class":488},[312,116701,5544],{"class":324},[312,116703,116704,116707,116709],{"class":314,"line":34452},[312,116705,116706],{"class":324},"    env ",[312,116708,336],{"class":1436},[312,116710,116711],{"class":324}," ReacherEnv()\n",[312,116713,116714,116717,116719,116722,116724,116726,116728],{"class":314,"line":34463},[312,116715,116716],{"class":324},"    obs, info ",[312,116718,336],{"class":1436},[312,116720,116721],{"class":324}," env.reset(",[312,116723,116335],{"class":1579},[312,116725,336],{"class":1436},[312,116727,858],{"class":488},[312,116729,1959],{"class":324},[312,116731,116732,116734,116736,116739],{"class":314,"line":34469},[312,116733,33094],{"class":488},[312,116735,1576],{"class":324},[312,116737,116738],{"class":339},"\"initial obs shape:\"",[312,116740,116741],{"class":324},", obs.shape)\n",[312,116743,116744,116746,116748,116751],{"class":314,"line":34489},[312,116745,33094],{"class":488},[312,116747,1576],{"class":324},[312,116749,116750],{"class":339},"\"initial info:\"",[312,116752,116753],{"class":324},", info)\n",[312,116755,116756],{"class":314,"line":34495},[312,116757,4205],{"emptyLinePlaceholder":1881},[312,116759,116760,116762,116764],{"class":314,"line":34506},[312,116761,111922],{"class":324},[312,116763,336],{"class":1436},[312,116765,106530],{"class":488},[312,116767,116768,116770,116772,116774,116776,116778,116780],{"class":314,"line":34512},[312,116769,5006],{"class":1436},[312,116771,33411],{"class":324},[312,116773,27839],{"class":1436},[312,116775,34238],{"class":488},[312,116777,1576],{"class":324},[312,116779,1546],{"class":488},[312,116781,32582],{"class":324},[312,116783,116784,116786,116788],{"class":314,"line":34518},[312,116785,111991],{"class":324},[312,116787,336],{"class":1436},[312,116789,116790],{"class":324}," env.action_space.sample()\n",[312,116792,116793,116796,116798],{"class":314,"line":34524},[312,116794,116795],{"class":324},"        obs, reward, terminated, truncated, info ",[312,116797,336],{"class":1436},[312,116799,115184],{"class":324},[312,116801,116802,116804,116806],{"class":314,"line":34530},[312,116803,112066],{"class":324},[312,116805,11280],{"class":1436},[312,116807,112071],{"class":324},[312,116809,116810,116812,116814,116816,116818,116821,116823,116825,116828,116830,116832,116835,116837,116839,116842,116844,116846,116848],{"class":314,"line":34536},[312,116811,34246],{"class":488},[312,116813,1576],{"class":324},[312,116815,112100],{"class":339},[312,116817,112103],{"class":324},[312,116819,116820],{"class":339},"\"reward:\"",[312,116822,733],{"class":324},[312,116824,33813],{"class":488},[312,116826,116827],{"class":324},"(reward, ",[312,116829,2021],{"class":488},[312,116831,112114],{"class":324},[312,116833,116834],{"class":339},"\"distance:\"",[312,116836,733],{"class":324},[312,116838,33813],{"class":488},[312,116840,116841],{"class":324},"(info[",[312,116843,116671],{"class":339},[312,116845,113971],{"class":324},[312,116847,2021],{"class":488},[312,116849,32293],{"class":324},[312,116851,116852,116854,116857,116860],{"class":314,"line":34542},[312,116853,4302],{"class":1436},[312,116855,116856],{"class":324}," terminated ",[312,116858,116859],{"class":1436},"or",[312,116861,116862],{"class":324}," truncated:\n",[312,116864,116865],{"class":314,"line":34548},[312,116866,116867],{"class":1436},"            break\n",[312,116869,116870],{"class":314,"line":34568},[312,116871,4205],{"emptyLinePlaceholder":1881},[312,116873,116874,116876,116878,116880,116882,116884,116886,116888],{"class":314,"line":34574},[312,116875,33094],{"class":488},[312,116877,1576],{"class":324},[312,116879,112145],{"class":339},[312,116881,733],{"class":324},[312,116883,33813],{"class":488},[312,116885,112152],{"class":324},[312,116887,2021],{"class":488},[312,116889,32293],{"class":324},[312,116891,116892],{"class":314,"line":34590},[312,116893,4205],{"emptyLinePlaceholder":1881},[312,116895,116896],{"class":314,"line":34596},[312,116897,4205],{"emptyLinePlaceholder":1881},[312,116899,116900,116902,116904,116906,116908],{"class":314,"line":34610},[312,116901,3338],{"class":1436},[312,116903,33015],{"class":488},[312,116905,103328],{"class":1436},[312,116907,103331],{"class":339},[312,116909,5544],{"class":324},[312,116911,116912],{"class":314,"line":34616},[312,116913,103338],{"class":324},[24,116915,105339],{},[303,116917,116919],{"className":25618,"code":116918,"language":25620,"meta":308,"style":308},"touch ch8_gym_env.py\n",[119,116920,116921],{"__ignoreMap":308},[312,116922,116923,116925],{"class":314,"line":315},[312,116924,103052],{"class":332},[312,116926,116927],{"class":339}," ch8_gym_env.py\n",[24,116929,112213],{},[303,116931,116933],{"className":25618,"code":116932,"language":25620,"meta":308,"style":308},"python ch8_gym_env.py\n",[119,116934,116935],{"__ignoreMap":308},[312,116936,116937,116939],{"class":314,"line":315},[312,116938,32176],{"class":332},[312,116940,116927],{"class":339},[69,116942,103341],{"id":103341},[24,116944,116945],{},"继承 Gymnasium 环境：",[303,116947,116949],{"className":32174,"code":116948,"language":32176,"meta":308,"style":308},"class ReacherEnv(gym.Env):\n",[119,116950,116951],{"__ignoreMap":308},[312,116952,116953,116955,116957,116959,116961,116963,116965],{"class":314,"line":315},[312,116954,16495],{"class":1436},[312,116956,115826],{"class":332},[312,116958,1576],{"class":324},[312,116960,115309],{"class":332},[312,116962,2503],{"class":324},[312,116964,115835],{"class":332},[312,116966,32582],{"class":324},[24,116968,116969],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[24,116971,116972],{},"初始化模型：",[303,116974,116976],{"className":32174,"code":116975,"language":32176,"meta":308,"style":308},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[119,116977,116978,116992],{"__ignoreMap":308},[312,116979,116980,116982,116984,116986,116988,116990],{"class":314,"line":315},[312,116981,32619],{"class":488},[312,116983,115886],{"class":324},[312,116985,336],{"class":1436},[312,116987,103181],{"class":324},[312,116989,103083],{"class":488},[312,116991,1959],{"class":324},[312,116993,116994,116996,116998,117000,117002,117004],{"class":314,"line":171},[312,116995,32619],{"class":488},[312,116997,115901],{"class":324},[312,116999,336],{"class":1436},[312,117001,115906],{"class":324},[312,117003,32619],{"class":488},[312,117005,115911],{"class":324},[24,117007,117008,117009,117011],{},"这和前面章节一样，只是现在放到了类的 ",[119,117010,32625],{}," 里。",[24,117013,117014],{},"缓存 site ID：",[303,117016,117018],{"className":32174,"code":117017,"language":32176,"meta":308,"style":308},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[119,117019,117020,117034],{"__ignoreMap":308},[312,117021,117022,117024,117026,117028,117030,117032],{"class":314,"line":315},[312,117023,32619],{"class":488},[312,117025,115922],{"class":324},[312,117027,336],{"class":1436},[312,117029,115927],{"class":324},[312,117031,91324],{"class":488},[312,117033,1959],{"class":324},[312,117035,117036,117038,117040,117042,117044,117046],{"class":314,"line":171},[312,117037,32619],{"class":488},[312,117039,115943],{"class":324},[312,117041,336],{"class":1436},[312,117043,115927],{"class":324},[312,117045,91324],{"class":488},[312,117047,1959],{"class":324},[24,117049,117050],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[24,117052,117053],{},"reset：",[303,117055,117057],{"className":32174,"code":117056,"language":32176,"meta":308,"style":308},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[119,117058,117059],{"__ignoreMap":308},[312,117060,117061,117063,117065,117067,117069,117071,117073,117075,117077,117079,117081,117083,117085,117087,117089,117091,117093],{"class":314,"line":315},[312,117062,33742],{"class":1436},[312,117064,116291],{"class":332},[312,117066,116294],{"class":324},[312,117068,2400],{"class":1436},[312,117070,116299],{"class":324},[312,117072,1956],{"class":488},[312,117074,26905],{"class":1436},[312,117076,40728],{"class":488},[312,117078,15366],{"class":1436},[312,117080,40728],{"class":488},[312,117082,116312],{"class":324},[312,117084,116315],{"class":488},[312,117086,26905],{"class":1436},[312,117088,40728],{"class":488},[312,117090,15366],{"class":1436},[312,117092,40728],{"class":488},[312,117094,32582],{"class":324},[24,117096,117097,117099],{},[119,117098,71833],{}," 做四件事：",[140,117101,117102,117105,117108,117111],{},[143,117103,117104],{},"设置随机种子。",[143,117106,117107],{},"重置 MuJoCo data。",[143,117109,117110],{},"随机初始化关节角。",[143,117112,117113],{},"返回初始观测和 info。",[24,117115,117116],{},"step：",[303,117118,117120],{"className":32174,"code":117119,"language":32176,"meta":308,"style":308},"def step(self, action):\n",[119,117121,117122],{"__ignoreMap":308},[312,117123,117124,117126,117128],{"class":314,"line":315},[312,117125,33742],{"class":1436},[312,117127,116456],{"class":332},[312,117129,116459],{"class":324},[24,117131,117132,117134],{},[119,117133,108903],{}," 做六件事：",[140,117136,117137,117140,117146,117149,117152,117155],{},[143,117138,117139],{},"检查并裁剪 action。",[143,117141,117142,117143,30181],{},"写入 ",[119,117144,117145],{},"self.data.ctrl",[143,117147,117148],{},"连续推进若干个 MuJoCo 物理步。",[143,117150,117151],{},"计算新观测。",[143,117153,117154],{},"计算奖励和结束条件。",[143,117156,117157],{},"返回 Gymnasium 标准五元组。",[69,117159,103477],{"id":103477},[303,117161,117163],{"className":32174,"code":117162,"language":32176,"meta":308,"style":308},"import gymnasium as gym\n",[119,117164,117165],{"__ignoreMap":308},[312,117166,117167,117169,117171,117173],{"class":314,"line":315},[312,117168,32188],{"class":1436},[312,117170,115664],{"class":324},[312,117172,33178],{"class":1436},[312,117174,115669],{"class":324},[24,117176,117177,117178,117180,117181,117184],{},"导入 Gymnasium，并起别名 ",[119,117179,115309],{},"。后面写 ",[119,117182,117183],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[303,117186,117188],{"className":32174,"code":117187,"language":32176,"meta":308,"style":308},"from gymnasium import spaces\n",[119,117189,117190],{"__ignoreMap":308},[312,117191,117192,117194,117196,117198],{"class":314,"line":315},[312,117193,32533],{"class":1436},[312,117195,115664],{"class":324},[312,117197,32188],{"class":1436},[312,117199,115696],{"class":324},[24,117201,117202,117203,117206],{},"导入空间定义工具。",[119,117204,117205],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[303,117208,117209],{"className":32174,"code":116948,"language":32176,"meta":308,"style":308},[119,117210,117211],{"__ignoreMap":308},[312,117212,117213,117215,117217,117219,117221,117223,117225],{"class":314,"line":315},[312,117214,16495],{"class":1436},[312,117216,115826],{"class":332},[312,117218,1576],{"class":324},[312,117220,115309],{"class":332},[312,117222,2503],{"class":324},[312,117224,115835],{"class":332},[312,117226,32582],{"class":324},[24,117228,117229,117230,117233,117234,117236,117237,1167,117239,117241],{},"定义一个类，名字叫 ",[119,117231,117232],{},"ReacherEnv","。括号里的 ",[119,117235,117183],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[119,117238,71833],{},[119,117240,108903],{}," 这两个核心方法。",[303,117243,117245],{"className":32174,"code":117244,"language":32176,"meta":308,"style":308},"metadata = {\"render_modes\": []}\n",[119,117246,117247],{"__ignoreMap":308},[312,117248,117249,117252,117254,117256,117258],{"class":314,"line":315},[312,117250,117251],{"class":324},"metadata ",[312,117253,336],{"class":1436},[312,117255,6253],{"class":324},[312,117257,115849],{"class":339},[312,117259,115852],{"class":324},[24,117261,117262],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[303,117264,117266],{"className":32174,"code":117265,"language":32176,"meta":308,"style":308},"def __init__(self) -> None:\n",[119,117267,117268],{"__ignoreMap":308},[312,117269,117270,117272,117274,117276,117278],{"class":314,"line":315},[312,117271,33742],{"class":1436},[312,117273,32600],{"class":488},[312,117275,115865],{"class":324},[312,117277,97456],{"class":488},[312,117279,5544],{"class":324},[24,117281,117282,117284,117285,30181],{},[119,117283,32625],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[119,117286,117287],{},"env = ReacherEnv()",[303,117289,117291],{"className":32174,"code":117290,"language":32176,"meta":308,"style":308},"super().__init__()\n",[119,117292,117293],{"__ignoreMap":308},[312,117294,117295,117298,117300,117302],{"class":314,"line":315},[312,117296,117297],{"class":488},"super",[312,117299,19061],{"class":324},[312,117301,32625],{"class":488},[312,117303,3781],{"class":324},[24,117305,117306,117307,117309],{},"调用父类 ",[119,117308,117183],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[303,117311,117312],{"className":32174,"code":116975,"language":32176,"meta":308,"style":308},[119,117313,117314,117328],{"__ignoreMap":308},[312,117315,117316,117318,117320,117322,117324,117326],{"class":314,"line":315},[312,117317,32619],{"class":488},[312,117319,115886],{"class":324},[312,117321,336],{"class":1436},[312,117323,103181],{"class":324},[312,117325,103083],{"class":488},[312,117327,1959],{"class":324},[312,117329,117330,117332,117334,117336,117338,117340],{"class":314,"line":171},[312,117331,32619],{"class":488},[312,117333,115901],{"class":324},[312,117335,336],{"class":1436},[312,117337,115906],{"class":324},[312,117339,32619],{"class":488},[312,117341,115911],{"class":324},[24,117343,117344,117345,117347,117348,1167,117351,117354],{},"把 MuJoCo 模型和状态保存到 ",[119,117346,32619],{}," 上。",[119,117349,117350],{},"self.model",[119,117352,117353],{},"self.data"," 表示这个环境对象自己的模型和状态。",[303,117356,117357],{"className":32174,"code":117017,"language":32176,"meta":308,"style":308},[119,117358,117359,117373],{"__ignoreMap":308},[312,117360,117361,117363,117365,117367,117369,117371],{"class":314,"line":315},[312,117362,32619],{"class":488},[312,117364,115922],{"class":324},[312,117366,336],{"class":1436},[312,117368,115927],{"class":324},[312,117370,91324],{"class":488},[312,117372,1959],{"class":324},[312,117374,117375,117377,117379,117381,117383,117385],{"class":314,"line":171},[312,117376,32619],{"class":488},[312,117378,115943],{"class":324},[312,117380,336],{"class":1436},[312,117382,115927],{"class":324},[312,117384,91324],{"class":488},[312,117386,1959],{"class":324},[24,117388,117389,117390,1167,117393,117396],{},"提前查好 tip 和 target 的 site ID。这样 ",[119,117391,117392],{},"_get_obs",[119,117394,117395],{},"_get_reward"," 里就不用每次按名字查找。",[303,117398,117400],{"className":32174,"code":117399,"language":32176,"meta":308,"style":308},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[119,117401,117402,117412,117422],{"__ignoreMap":308},[312,117403,117404,117406,117408,117410],{"class":314,"line":315},[312,117405,32619],{"class":488},[312,117407,115636],{"class":324},[312,117409,336],{"class":1436},[312,117411,56211],{"class":488},[312,117413,117414,117416,117418,117420],{"class":314,"line":171},[312,117415,32619],{"class":488},[312,117417,116015],{"class":324},[312,117419,336],{"class":1436},[312,117421,116020],{"class":488},[312,117423,117424,117426,117428,117430],{"class":314,"line":274},[312,117425,32619],{"class":488},[312,117427,115475],{"class":324},[312,117429,336],{"class":1436},[312,117431,49128],{"class":488},[24,117433,117434,117437,117438,117441,117442,117445],{},[119,117435,117436],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[119,117439,117440],{},"max_steps"," 是一个 episode 最多运行多少步。",[119,117443,117444],{},"steps"," 记录当前 episode 已经走了多少步。",[303,117447,117448],{"className":32174,"code":115514,"language":32176,"meta":308,"style":308},[119,117449,117450],{"__ignoreMap":308},[312,117451,117452,117454,117456,117458,117460,117462,117464,117466,117468,117470,117472,117474,117476,117478,117480,117482,117484,117486,117488,117490],{"class":314,"line":315},[312,117453,32619],{"class":488},[312,117455,115523],{"class":324},[312,117457,336],{"class":1436},[312,117459,115528],{"class":324},[312,117461,115531],{"class":1579},[312,117463,115534],{"class":1436},[312,117465,104172],{"class":488},[312,117467,733],{"class":324},[312,117469,115541],{"class":1579},[312,117471,336],{"class":1436},[312,117473,104172],{"class":488},[312,117475,733],{"class":324},[312,117477,97733],{"class":1579},[312,117479,336],{"class":1436},[312,117481,1576],{"class":324},[312,117483,2027],{"class":488},[312,117485,115558],{"class":324},[312,117487,95270],{"class":1579},[312,117489,336],{"class":1436},[312,117491,115565],{"class":324},[24,117493,117494,117495,117498,117499,1167,117502,117505],{},"定义动作空间。",[119,117496,117497],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[119,117500,117501],{},"low=-1.0",[119,117503,117504],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[303,117507,117508],{"className":32174,"code":115575,"language":32176,"meta":308,"style":308},[119,117509,117510],{"__ignoreMap":308},[312,117511,117512,117514,117516,117518,117520,117522,117524,117526,117528,117530,117532,117534,117536,117538,117540,117542,117544,117546],{"class":314,"line":315},[312,117513,32619],{"class":488},[312,117515,115584],{"class":324},[312,117517,336],{"class":1436},[312,117519,115528],{"class":324},[312,117521,115531],{"class":1579},[312,117523,115534],{"class":1436},[312,117525,115595],{"class":324},[312,117527,115541],{"class":1579},[312,117529,336],{"class":1436},[312,117531,115595],{"class":324},[312,117533,97733],{"class":1579},[312,117535,336],{"class":1436},[312,117537,1576],{"class":324},[312,117539,2391],{"class":488},[312,117541,115558],{"class":324},[312,117543,95270],{"class":1579},[312,117545,336],{"class":1436},[312,117547,115565],{"class":324},[24,117549,117550,117551,117554,117555,117558],{},"定义观测空间。",[119,117552,117553],{},"shape=(10,)"," 表示观测是 10 个数。",[119,117556,117557],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[303,117560,117562],{"className":32174,"code":117561,"language":32176,"meta":308,"style":308},"def _get_obs(self) -> np.ndarray:\n",[119,117563,117564],{"__ignoreMap":308},[312,117565,117566,117568,117570],{"class":314,"line":315},[312,117567,33742],{"class":1436},[312,117569,116125],{"class":332},[312,117571,116128],{"class":324},[24,117573,117574,117575,117577],{},"定义内部函数，用来生成观测。函数名前面的 ",[119,117576,2934],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[303,117579,117581],{"className":32174,"code":117580,"language":32176,"meta":308,"style":308},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[119,117582,117583,117597],{"__ignoreMap":308},[312,117584,117585,117587,117589,117591,117593,117595],{"class":314,"line":315},[312,117586,113337],{"class":324},[312,117588,336],{"class":1436},[312,117590,40668],{"class":488},[312,117592,116139],{"class":324},[312,117594,32619],{"class":488},[312,117596,116144],{"class":324},[312,117598,117599,117601,117603,117605,117607,117609],{"class":314,"line":171},[312,117600,113347],{"class":324},[312,117602,336],{"class":1436},[312,117604,40668],{"class":488},[312,117606,116139],{"class":324},[312,117608,32619],{"class":488},[312,117610,116159],{"class":324},[24,117612,117613],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[303,117615,117617],{"className":32174,"code":117616,"language":32176,"meta":308,"style":308},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[119,117618,117619,117635],{"__ignoreMap":308},[312,117620,117621,117623,117625,117627,117629,117631,117633],{"class":314,"line":315},[312,117622,112623],{"class":324},[312,117624,336],{"class":1436},[312,117626,116168],{"class":324},[312,117628,32619],{"class":488},[312,117630,116173],{"class":324},[312,117632,32619],{"class":488},[312,117634,116178],{"class":324},[312,117636,117637,117639],{"class":314,"line":171},[312,117638,18846],{"class":1436},[312,117640,116185],{"class":324},[24,117642,117643,117644,117647,117648,117650],{},"拼接观测，并转换成 ",[119,117645,117646],{},"float32","。很多强化学习库默认使用 ",[119,117649,117646],{},"，所以这里主动转换。",[303,117652,117653],{"className":32174,"code":117056,"language":32176,"meta":308,"style":308},[119,117654,117655],{"__ignoreMap":308},[312,117656,117657,117659,117661,117663,117665,117667,117669,117671,117673,117675,117677,117679,117681,117683,117685,117687,117689],{"class":314,"line":315},[312,117658,33742],{"class":1436},[312,117660,116291],{"class":332},[312,117662,116294],{"class":324},[312,117664,2400],{"class":1436},[312,117666,116299],{"class":324},[312,117668,1956],{"class":488},[312,117670,26905],{"class":1436},[312,117672,40728],{"class":488},[312,117674,15366],{"class":1436},[312,117676,40728],{"class":488},[312,117678,116312],{"class":324},[312,117680,116315],{"class":488},[312,117682,26905],{"class":1436},[312,117684,40728],{"class":488},[312,117686,15366],{"class":1436},[312,117688,40728],{"class":488},[312,117690,32582],{"class":324},[24,117692,117693,117694,117696,117697,117700],{},"定义 reset。",[119,117695,116335],{}," 用来控制随机数，保证实验可以复现。",[119,117698,117699],{},"options"," 用来接收额外配置，本章暂时不用。",[303,117702,117704],{"className":32174,"code":117703,"language":32176,"meta":308,"style":308},"super().reset(seed=seed)\n",[119,117705,117706],{"__ignoreMap":308},[312,117707,117708,117710,117712,117714,117716],{"class":314,"line":315},[312,117709,117297],{"class":488},[312,117711,116332],{"class":324},[312,117713,116335],{"class":1579},[312,117715,336],{"class":1436},[312,117717,116340],{"class":324},[24,117719,117720,117721,117724],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[119,117722,117723],{},"self.np_random"," 生成可复现的随机数。",[303,117726,117728],{"className":32174,"code":117727,"language":32176,"meta":308,"style":308},"mujoco.mj_resetData(self.model, self.data)\n",[119,117729,117730],{"__ignoreMap":308},[312,117731,117732,117735,117737,117739,117741],{"class":314,"line":315},[312,117733,117734],{"class":324},"mujoco.mj_resetData(",[312,117736,32619],{"class":488},[312,117738,116350],{"class":324},[312,117740,32619],{"class":488},[312,117742,116355],{"class":324},[24,117744,117745],{},"把 MuJoCo 状态重置到默认状态。",[303,117747,117749],{"className":32174,"code":117748,"language":32176,"meta":308,"style":308},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[119,117750,117751],{"__ignoreMap":308},[312,117752,117753,117755,117757,117759,117761,117763,117765,117767,117769,117771,117773,117775,117777,117779,117781,117783,117785],{"class":314,"line":315},[312,117754,32619],{"class":488},[312,117756,116366],{"class":324},[312,117758,336],{"class":1436},[312,117760,40668],{"class":488},[312,117762,116373],{"class":324},[312,117764,115531],{"class":1579},[312,117766,115534],{"class":1436},[312,117768,87981],{"class":488},[312,117770,733],{"class":324},[312,117772,115541],{"class":1579},[312,117774,336],{"class":1436},[312,117776,87981],{"class":488},[312,117778,733],{"class":324},[312,117780,33291],{"class":1579},[312,117782,336],{"class":1436},[312,117784,32619],{"class":488},[312,117786,116398],{"class":324},[24,117788,117110,117789,117792,117793,117796,117797,117799],{},[119,117790,117791],{},"[:]"," 表示修改整个数组。",[119,117794,117795],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[119,117798,103919],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[303,117801,117803],{"className":32174,"code":117802,"language":32176,"meta":308,"style":308},"self.data.qvel[:] = 0.0\n",[119,117804,117805],{"__ignoreMap":308},[312,117806,117807,117809,117811,117813],{"class":314,"line":315},[312,117808,32619],{"class":488},[312,117810,116405],{"class":324},[312,117812,336],{"class":1436},[312,117814,106530],{"class":488},[24,117816,117817],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[303,117819,117821],{"className":32174,"code":117820,"language":32176,"meta":308,"style":308},"self.steps = 0\nreturn self._get_obs(), {}\n",[119,117822,117823,117833],{"__ignoreMap":308},[312,117824,117825,117827,117829,117831],{"class":314,"line":315},[312,117826,32619],{"class":488},[312,117828,115475],{"class":324},[312,117830,336],{"class":1436},[312,117832,49128],{"class":488},[312,117834,117835,117837,117839],{"class":314,"line":171},[312,117836,18846],{"class":1436},[312,117838,40668],{"class":488},[312,117840,116445],{"class":324},[24,117842,117843],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[303,117845,117846],{"className":32174,"code":117119,"language":32176,"meta":308,"style":308},[119,117847,117848],{"__ignoreMap":308},[312,117849,117850,117852,117854],{"class":314,"line":315},[312,117851,33742],{"class":1436},[312,117853,116456],{"class":332},[312,117855,116459],{"class":324},[24,117857,117858],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[303,117860,117862],{"className":32174,"code":117861,"language":32176,"meta":308,"style":308},"action = np.asarray(action, dtype=np.float32)\n",[119,117863,117864],{"__ignoreMap":308},[312,117865,117866,117868,117870,117872,117874,117876],{"class":314,"line":315},[312,117867,109211],{"class":324},[312,117869,336],{"class":1436},[312,117871,116468],{"class":324},[312,117873,95270],{"class":1579},[312,117875,336],{"class":1436},[312,117877,115565],{"class":324},[24,117879,117880,117881,30181],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[119,117882,117646],{},[303,117884,117886],{"className":32174,"code":117885,"language":32176,"meta":308,"style":308},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[119,117887,117888],{"__ignoreMap":308},[312,117889,117890,117892,117894,117896,117898,117900,117902],{"class":314,"line":315},[312,117891,109211],{"class":324},[312,117893,336],{"class":1436},[312,117895,109216],{"class":324},[312,117897,32619],{"class":488},[312,117899,116487],{"class":324},[312,117901,32619],{"class":488},[312,117903,116492],{"class":324},[24,117905,117906],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[303,117908,117910],{"className":32174,"code":117909,"language":32176,"meta":308,"style":308},"self.data.ctrl[:] = action\n",[119,117911,117912],{"__ignoreMap":308},[312,117913,117914,117916,117918,117920],{"class":314,"line":315},[312,117915,32619],{"class":488},[312,117917,116503],{"class":324},[312,117919,336],{"class":1436},[312,117921,109239],{"class":324},[24,117923,117924],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[303,117926,117928],{"className":32174,"code":117927,"language":32176,"meta":308,"style":308},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[119,117929,117930,117946],{"__ignoreMap":308},[312,117931,117932,117934,117936,117938,117940,117942,117944],{"class":314,"line":315},[312,117933,4830],{"class":1436},[312,117935,103270],{"class":324},[312,117937,27839],{"class":1436},[312,117939,34238],{"class":488},[312,117941,1576],{"class":324},[312,117943,32619],{"class":488},[312,117945,116524],{"class":324},[312,117947,117948,117951,117953,117955,117957],{"class":314,"line":171},[312,117949,117950],{"class":324},"    mujoco.mj_step(",[312,117952,32619],{"class":488},[312,117954,116350],{"class":324},[312,117956,32619],{"class":488},[312,117958,116355],{"class":324},[24,117960,117961,117962,117965,117966,117968,117969,30181],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[119,117963,117964],{},"frame_skip=5","，所以外部调用一次 ",[119,117967,115646],{},"，内部实际执行 5 次 ",[119,117970,102984],{},[303,117972,117974],{"className":32174,"code":117973,"language":32176,"meta":308,"style":308},"self.steps += 1\n",[119,117975,117976],{"__ignoreMap":308},[312,117977,117978,117980,117982,117984],{"class":314,"line":315},[312,117979,32619],{"class":488},[312,117981,115475],{"class":324},[312,117983,11280],{"class":1436},[312,117985,57481],{"class":488},[24,117987,117988],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[303,117990,117992],{"className":32174,"code":117991,"language":32176,"meta":308,"style":308},"obs = self._get_obs()\nreward = self._get_reward()\n",[119,117993,117994,118004],{"__ignoreMap":308},[312,117995,117996,117998,118000,118002],{"class":314,"line":315},[312,117997,112623],{"class":324},[312,117999,336],{"class":1436},[312,118001,40668],{"class":488},[312,118003,116566],{"class":324},[312,118005,118006,118008,118010,118012],{"class":314,"line":171},[312,118007,112774],{"class":324},[312,118009,336],{"class":1436},[312,118011,40668],{"class":488},[312,118013,116577],{"class":324},[24,118015,118016],{},"计算新的观测和奖励。",[303,118018,118020],{"className":32174,"code":118019,"language":32176,"meta":308,"style":308},"dist = float(np.linalg.norm(tip - target))\n",[119,118021,118022],{"__ignoreMap":308},[312,118023,118024,118026,118028,118030,118032,118034],{"class":314,"line":315},[312,118025,113365],{"class":324},[312,118027,336],{"class":1436},[312,118029,111566],{"class":488},[312,118031,116620],{"class":324},[312,118033,2477],{"class":1436},[312,118035,116625],{"class":324},[24,118037,118038],{},"计算末端到目标的距离，并转换成 Python float。",[303,118040,118041],{"className":32174,"code":115446,"language":32176,"meta":308,"style":308},[119,118042,118043,118055],{"__ignoreMap":308},[312,118044,118045,118047,118049,118051,118053],{"class":314,"line":315},[312,118046,115453],{"class":324},[312,118048,336],{"class":1436},[312,118050,115458],{"class":324},[312,118052,325],{"class":1436},[312,118054,115463],{"class":488},[312,118056,118057,118059,118061,118063,118065,118067,118069],{"class":314,"line":171},[312,118058,115468],{"class":324},[312,118060,336],{"class":1436},[312,118062,40668],{"class":488},[312,118064,115475],{"class":324},[312,118066,3516],{"class":1436},[312,118068,40668],{"class":488},[312,118070,115482],{"class":324},[24,118072,118073],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[303,118075,118077],{"className":32174,"code":118076,"language":32176,"meta":308,"style":308},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[119,118078,118079,118092],{"__ignoreMap":308},[312,118080,118081,118084,118086,118088,118090],{"class":314,"line":315},[312,118082,118083],{"class":324},"info ",[312,118085,336],{"class":1436},[312,118087,6253],{"class":324},[312,118089,116671],{"class":339},[312,118091,116674],{"class":324},[312,118093,118094,118096],{"class":314,"line":171},[312,118095,18846],{"class":1436},[312,118097,116681],{"class":324},[24,118099,118100,118103],{},[119,118101,118102],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[303,118105,118107],{"className":32174,"code":118106,"language":32176,"meta":308,"style":308},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[119,118108,118109,118118],{"__ignoreMap":308},[312,118110,118111,118114,118116],{"class":314,"line":315},[312,118112,118113],{"class":324},"env ",[312,118115,336],{"class":1436},[312,118117,116711],{"class":324},[312,118119,118120,118122,118124,118126,118128,118130,118132],{"class":314,"line":171},[312,118121,115169],{"class":324},[312,118123,336],{"class":1436},[312,118125,116721],{"class":324},[312,118127,116335],{"class":1579},[312,118129,336],{"class":1436},[312,118131,858],{"class":488},[312,118133,1959],{"class":324},[24,118135,118136,118137,118140],{},"创建环境并重置。",[119,118138,118139],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[303,118142,118144],{"className":32174,"code":118143,"language":32176,"meta":308,"style":308},"action = env.action_space.sample()\n",[119,118145,118146],{"__ignoreMap":308},[312,118147,118148,118150,118152],{"class":314,"line":315},[312,118149,109211],{"class":324},[312,118151,336],{"class":1436},[312,118153,116790],{"class":324},[24,118155,118156],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,118158,104085],{"id":104084},[24,118160,107253],{},[303,118162,118165],{"className":118163,"code":118164,"language":6992,"meta":308},[6990],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[119,118166,118164],{"__ignoreMap":308},[24,118168,118169],{},"这个环境已经具备强化学习环境的基本结构。",[24,118171,118172],{},"主函数里使用随机动作：",[303,118174,118175],{"className":32174,"code":118143,"language":32176,"meta":308,"style":308},[119,118176,118177],{"__ignoreMap":308},[312,118178,118179,118181,118183],{"class":314,"line":315},[312,118180,109211],{"class":324},[312,118182,336],{"class":1436},[312,118184,116790],{"class":324},[24,118186,118187],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,118189,104117],{"id":104116},[140,118191,118192,118195,118201,118210,118219,118228,118234],{},[143,118193,118194],{},"运行程序。",[143,118196,118197,118198,30181],{},"确认 ",[119,118199,118200],{},"obs.shape == (10,)",[143,118202,112950,118203,118206,118207,30181],{},[119,118204,118205],{},"env.action_space","，应类似 ",[119,118208,118209],{},"Box(-1.0, 1.0, (2,), float32)",[143,118211,107354,118212,118215,118216,30181],{},[119,118213,118214],{},"self.max_steps = 10","，确认环境会更快 ",[119,118217,118218],{},"truncated=True",[143,118220,104180,118221,104183,118224,118227],{},[119,118222,118223],{},"terminated = dist \u003C 0.05",[119,118225,118226],{},"dist \u003C 0.2","，观察是否更容易结束。",[143,118229,104180,118230,118233],{},[119,118231,118232],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[143,118235,118236,118237,118239,118240,118243],{},"在 ",[119,118238,118102],{}," 里加入 ",[119,118241,118242],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,118245,104222],{"id":104221},[69,118247,118249],{"id":118248},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[24,118251,118252,118253,118255],{},"Gymnasium 的 ",[119,118254,108903],{}," 返回 5 个值:",[303,118257,118259],{"className":32174,"code":118258,"language":32176,"meta":308,"style":308},"obs, reward, terminated, truncated, info\n",[119,118260,118261],{"__ignoreMap":308},[312,118262,118263],{"class":314,"line":315},[312,118264,118258],{"class":324},[24,118266,118267],{},"不是旧 Gym 的 4 个值。",[69,118269,118271,118274],{"id":118270},"datactrl-action-维度错误",[119,118272,118273],{},"data.ctrl[:] = action"," 维度错误",[24,118276,104292],{},[303,118278,118280],{"className":32174,"code":118279,"language":32176,"meta":308,"style":308},"print(self.model.nu)\nprint(action.shape)\n",[119,118281,118282,118293],{"__ignoreMap":308},[312,118283,118284,118286,118288,118290],{"class":314,"line":315},[312,118285,32211],{"class":488},[312,118287,1576],{"class":324},[312,118289,32619],{"class":488},[312,118291,118292],{"class":324},".model.nu)\n",[312,118294,118295,118297],{"class":314,"line":171},[312,118296,32211],{"class":488},[312,118298,118299],{"class":324},"(action.shape)\n",[24,118301,118302],{},"两者必须匹配。",[69,118304,118306],{"id":118305},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[24,118308,104231],{},[303,118310,118312],{"className":32174,"code":118311,"language":32176,"meta":308,"style":308},"mujoco.mj_forward(self.model, self.data)\n",[119,118313,118314],{"__ignoreMap":308},[312,118315,118316,118319,118321,118323,118325],{"class":314,"line":315},[312,118317,118318],{"class":324},"mujoco.mj_forward(",[312,118320,32619],{"class":488},[312,118322,116350],{"class":324},[312,118324,32619],{"class":488},[312,118326,116355],{"class":324},[69,118328,118330,118332],{"id":118329},"observation_space-维度和-obs-不一致",[119,118331,115369],{}," 维度和 obs 不一致",[24,118334,104344],{},[303,118336,118338],{"className":32174,"code":118337,"language":32176,"meta":308,"style":308},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[119,118339,118340,118350,118357],{"__ignoreMap":308},[312,118341,118342,118344,118346,118348],{"class":314,"line":315},[312,118343,112623],{"class":324},[312,118345,336],{"class":1436},[312,118347,40668],{"class":488},[312,118349,116566],{"class":324},[312,118351,118352,118354],{"class":314,"line":171},[312,118353,32211],{"class":488},[312,118355,118356],{"class":324},"(obs.shape)\n",[312,118358,118359,118361,118363,118365],{"class":314,"line":274},[312,118360,32211],{"class":488},[312,118362,1576],{"class":324},[312,118364,32619],{"class":488},[312,118366,118367],{"class":324},".observation_space.shape)\n",[24,118369,118370],{},"两者必须一致。本章观测是：",[303,118372,118375],{"className":118373,"code":118374,"language":6992,"meta":308},[6990],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[119,118376,118374],{"__ignoreMap":308},[69,118378,118380],{"id":118379},"action-超过范围","action 超过范围",[24,118382,118383],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[303,118385,118386],{"className":32174,"code":117885,"language":32176,"meta":308,"style":308},[119,118387,118388],{"__ignoreMap":308},[312,118389,118390,118392,118394,118396,118398,118400,118402],{"class":314,"line":315},[312,118391,109211],{"class":324},[312,118393,336],{"class":1436},[312,118395,109216],{"class":324},[312,118397,32619],{"class":488},[312,118399,116487],{"class":324},[312,118401,32619],{"class":488},[312,118403,116492],{"class":324},[24,118405,118406,118407,30181],{},"这能避免无效动作直接写入 ",[119,118408,102845],{},[69,118410,118412],{"id":118411},"忘记返回-info","忘记返回 info",[24,118414,118252,118415,1167,118417,118419],{},[119,118416,71833],{},[119,118418,108903],{}," 都会返回 info：",[303,118421,118422],{"className":32174,"code":115162,"language":32176,"meta":308,"style":308},[119,118423,118424,118432],{"__ignoreMap":308},[312,118425,118426,118428,118430],{"class":314,"line":315},[312,118427,115169],{"class":324},[312,118429,336],{"class":1436},[312,118431,115174],{"class":324},[312,118433,118434,118436,118438],{"class":314,"line":171},[312,118435,115179],{"class":324},[312,118437,336],{"class":1436},[312,118439,115184],{"class":324},[24,118441,118442,118443,30181],{},"即使暂时没有额外信息，也返回 ",[119,118444,34254],{},[14,118446,118448],{"id":118447},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[24,118450,118451],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[140,118453,118454,118457,118460,118463,118466,118469],{},[143,118455,118456],{},"更稳定的 reward。",[143,118458,118459],{},"合理的 episode 长度。",[143,118461,118462],{},"可重复的随机目标采样。",[143,118464,118465],{},"render 接口。",[143,118467,118468],{},"环境注册代码。",[143,118470,118471],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[24,118473,118474],{},"如果只是自己写训练循环，最小形式是：",[303,118476,118478],{"className":32174,"code":118477,"language":32176,"meta":308,"style":308},"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",[119,118479,118480,118488,118504,118508,118524,118533,118542,118552],{"__ignoreMap":308},[312,118481,118482,118484,118486],{"class":314,"line":315},[312,118483,118113],{"class":324},[312,118485,336],{"class":1436},[312,118487,116711],{"class":324},[312,118489,118490,118492,118494,118496,118498,118500,118502],{"class":314,"line":171},[312,118491,115169],{"class":324},[312,118493,336],{"class":1436},[312,118495,116721],{"class":324},[312,118497,116335],{"class":1579},[312,118499,336],{"class":1436},[312,118501,858],{"class":488},[312,118503,1959],{"class":324},[312,118505,118506],{"class":314,"line":274},[312,118507,4205],{"emptyLinePlaceholder":1881},[312,118509,118510,118512,118514,118516,118518,118520,118522],{"class":314,"line":298},[312,118511,4830],{"class":1436},[312,118513,103270],{"class":324},[312,118515,27839],{"class":1436},[312,118517,34238],{"class":488},[312,118519,1576],{"class":324},[312,118521,8214],{"class":488},[312,118523,32582],{"class":324},[312,118525,118526,118529,118531],{"class":314,"line":974},[312,118527,118528],{"class":324},"    action ",[312,118530,336],{"class":1436},[312,118532,116790],{"class":324},[312,118534,118535,118538,118540],{"class":314,"line":980},[312,118536,118537],{"class":324},"    obs, reward, terminated, truncated, info ",[312,118539,336],{"class":1436},[312,118541,115184],{"class":324},[312,118543,118544,118546,118548,118550],{"class":314,"line":997},[312,118545,4906],{"class":1436},[312,118547,116856],{"class":324},[312,118549,116859],{"class":1436},[312,118551,116862],{"class":324},[312,118553,118554,118557,118559],{"class":314,"line":1003},[312,118555,118556],{"class":324},"        obs, info ",[312,118558,336],{"class":1436},[312,118560,115174],{"class":324},[14,118562,118564],{"id":118563},"_9本章小结","9.本章小结",[24,118566,118567],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[303,118569,118572],{"className":118570,"code":118571,"language":6992,"meta":308},[6990],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[119,118573,118571],{"__ignoreMap":308},[24,118575,118576],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1856,118578,118579],{},"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":308,"searchDepth":171,"depth":171,"links":118581},[118582,118583,118584,118591,118595,118596,118597,118607,118608],{"id":102416,"depth":171,"text":102417},{"id":102539,"depth":171,"text":102540},{"id":102813,"depth":171,"text":102814,"children":118585},[118586,118588,118590],{"id":115393,"depth":274,"text":118587},"terminated 和 truncated 的区别",{"id":115496,"depth":274,"text":118589},"observation_space 和 action_space",{"id":115623,"depth":274,"text":115624},{"id":103021,"depth":171,"text":103022,"children":118592},[118593,118594],{"id":103341,"depth":274,"text":103341},{"id":103477,"depth":274,"text":103477},{"id":104084,"depth":171,"text":104085},{"id":104116,"depth":171,"text":104117},{"id":104221,"depth":171,"text":104222,"children":118598},[118599,118600,118602,118603,118605,118606],{"id":118248,"depth":274,"text":118249},{"id":118270,"depth":274,"text":118601},"data.ctrl[:] = action 维度错误",{"id":118305,"depth":274,"text":118306},{"id":118329,"depth":274,"text":118604},"observation_space 维度和 obs 不一致",{"id":118379,"depth":274,"text":118380},{"id":118411,"depth":274,"text":118412},{"id":118447,"depth":171,"text":118448},{"id":118563,"depth":171,"text":118564},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":115146,"description":308},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118615,"title":118616,"body":118617,"description":119040,"extension":1879,"meta":119041,"navigation":1881,"path":119042,"seo":119043,"stem":119044,"__hash__":119045},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118618,"toc":119030},[118619,118623,118626,118629,118649,118655,118661,118671,118674,118677,118697,118700,118704,118707,118713,118716,118730,118733,118736,118810,118813,118819,118822,118845,118848,118898,118901,118907,118910,118913,118916,118935,118938,118944,118947,118950,118953,118973,118976,118979,118982,119027],[10,118620,118622],{"id":118621},"mujoco-学习","MuJoCo 学习",[24,118624,118625],{},"初版",[24,118627,118628],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[140,118630,118631,118634,118637,118646],{},[143,118632,118633],{},"MuJoCo 模型文件在描述什么。",[143,118635,118636],{},"Python 代码怎样读取和推进仿真。",[143,118638,118639,2159,118641,2159,118643,118645],{},[119,118640,105799],{},[119,118642,106129],{},[119,118644,106132],{}," 这些数组为什么重要。",[143,118647,118648],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[24,118650,118651,118652,118654],{},"默认环境为 Fedora 44、Python >= 3.10、",[119,118653,102796],{}," 官方 Python bindings。",[24,118656,118657,118658,118660],{},"注意：本文禁止使用 ",[119,118659,102782],{},"。所有示例均使用：",[303,118662,118663],{"className":32174,"code":103347,"language":32176,"meta":308,"style":308},[119,118664,118665],{"__ignoreMap":308},[312,118666,118667,118669],{"class":314,"line":315},[312,118668,32188],{"class":1436},[312,118670,103070],{"class":324},[14,118672,118673],{"id":118673},"适合谁阅读",[24,118675,118676],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[140,118678,118679,118682,118685,118688],{},[143,118680,118681],{},"没学过 MuJoCo，只会一点 Python。",[143,118683,118684],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[143,118686,118687],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[143,118689,118690,118691,118693,118694,118696],{},"以前接触过 ",[119,118692,102782],{},"，现在想迁移到官方 ",[119,118695,102790],{}," Python bindings。",[24,118698,118699],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118701,118703],{"id":118702},"mujoco-到底是什么","MuJoCo 到底是什么",[24,118705,118706],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[303,118708,118711],{"className":118709,"code":118710,"language":6992,"meta":308},[6990],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[119,118712,118710],{"__ignoreMap":308},[24,118714,118715],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[140,118717,118718,118721,118724,118727],{},[143,118719,118720],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[143,118722,118723],{},"快速测试控制算法，不必一开始就上真实机器人。",[143,118725,118726],{},"生成强化学习环境。",[143,118728,118729],{},"采集状态、动作、图像、奖励等训练数据。",[14,118731,118732],{"id":118732},"学习前的心智模型",[24,118734,118735],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[2086,118737,118738,118750],{},[2089,118739,118740],{},[2092,118741,118742,118745,118748],{},[2095,118743,118744],{"align":1374},"部分",[2095,118746,118747],{"align":1374},"负责什么",[2095,118749,22986],{"align":1374},[2132,118751,118752,118763,118775,118787,118799],{},[2092,118753,118754,118757,118760],{},[2137,118755,118756],{"align":1374},"MJCF XML",[2137,118758,118759],{"align":1374},"定义世界和机器人结构",[2137,118761,118762],{"align":1374},"地面、盒子、关节、电机、摄像头",[2092,118764,118765,118769,118772],{},[2137,118766,118767],{"align":1374},[119,118768,102479],{},[2137,118770,118771],{"align":1374},"编译后的静态模型",[2137,118773,118774],{"align":1374},"有几个关节、有几个电机、时间步长是多少",[2092,118776,118777,118781,118784],{},[2137,118778,118779],{"align":1374},[119,118780,102489],{},[2137,118782,118783],{"align":1374},"运行中的动态状态",[2137,118785,118786],{"align":1374},"当前时间、位置、速度、电机输入",[2092,118788,118789,118793,118796],{},[2137,118790,118791],{"align":1374},[119,118792,102984],{},[2137,118794,118795],{"align":1374},"推进一步物理仿真",[2137,118797,118798],{"align":1374},"根据重力、力、碰撞更新状态",[2092,118800,118801,118804,118807],{},[2137,118802,118803],{"align":1374},"Viewer \u002F Renderer",[2137,118805,118806],{"align":1374},"把仿真显示出来",[2137,118808,118809],{"align":1374},"打开窗口或保存图片",[24,118811,118812],{},"一句话总结：",[303,118814,118817],{"className":118815,"code":118816,"language":6992,"meta":308},[6990],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[119,118818,118816],{"__ignoreMap":308},[24,118820,118821],{},"参考来源：",[243,118823,118824,118831,118838],{},[143,118825,118826,118827],{},"MuJoCo Python 官方文档：",[164,118828,118829],{"href":118829,"rel":118830},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[168],[143,118832,118833,118834],{},"MuJoCo XML Reference：",[164,118835,118836],{"href":118836,"rel":118837},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[168],[143,118839,118840,118841],{},"MuJoCo Overview：",[164,118842,118843],{"href":118843,"rel":118844},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[168],[14,118846,118847],{"id":118847},"章节目录",[140,118849,118850,118856,118862,118868,118874,118880,118886,118892],{},[143,118851,118852],{},[164,118853,118855],{"href":118854},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[143,118857,118858],{},[164,118859,118861],{"href":118860},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[143,118863,118864],{},[164,118865,118867],{"href":118866},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[143,118869,118870],{},[164,118871,118873],{"href":118872},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[143,118875,118876],{},[164,118877,118879],{"href":118878},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[143,118881,118882],{},[164,118883,118885],{"href":118884},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[143,118887,118888],{},[164,118889,118891],{"href":118890},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[143,118893,118894],{},[164,118895,118897],{"href":118896},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118899,118900],{"id":118900},"推荐学习路线",[303,118902,118905],{"className":118903,"code":118904,"language":6992,"meta":308},[6990],"环境安装\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",[119,118906,118904],{"__ignoreMap":308},[24,118908,118909],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118911,118912],{"id":118912},"建议的目录结构",[24,118914,118915],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[303,118917,118919],{"className":25618,"code":118918,"language":25620,"meta":308,"style":308},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[119,118920,118921,118929],{"__ignoreMap":308},[312,118922,118923,118925,118927],{"class":314,"line":315},[312,118924,103035],{"class":332},[312,118926,31012],{"class":488},[312,118928,103040],{"class":339},[312,118930,118931,118933],{"class":314,"line":171},[312,118932,103045],{"class":488},[312,118934,103040],{"class":339},[24,118936,118937],{},"每一章的代码都单独保存：",[303,118939,118942],{"className":118940,"code":118941,"language":6992,"meta":308},[6990],"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",[119,118943,118941],{"__ignoreMap":308},[24,118945,118946],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118948,118949],{"id":118949},"学习方法",[24,118951,118952],{},"每章建议按这个顺序操作：",[140,118954,118955,118958,118961,118964,118967,118970],{},[143,118956,118957],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[143,118959,118960],{},"复制最小可运行代码，保存成指定文件。",[143,118962,118963],{},"运行代码，确认没有报错。",[143,118965,118966],{},"对照“运行结果说明”理解输出。",[143,118968,118969],{},"做“验证步骤”，主动改一两个参数。",[143,118971,118972],{},"遇到报错先看“常见错误与解决方案”。",[24,118974,118975],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118977,118978],{"id":118978},"全局排错顺序",[24,118980,118981],{},"遇到问题时，按下面顺序查：",[140,118983,118984,118990,118996,119001,119004,119007,119014,119024],{},[143,118985,118986,118987],{},"Python 环境是否激活：",[119,118988,118989],{},"which python",[143,118991,118992,118993],{},"MuJoCo 是否能导入：",[119,118994,118995],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[143,118997,118998,118999],{},"是否误装了 ",[119,119000,102782],{},[143,119002,119003],{},"XML 标签是否闭合、属性是否拼写正确",[143,119005,119006],{},"actuator 引用的 joint 名字是否存在",[143,119008,119009,119011,119012],{},[119,119010,102845],{}," 的长度是否等于 ",[119,119013,103927],{},[143,119015,107354,119016,84310,119018,119020,119021],{},[119,119017,105799],{},[119,119019,106129],{}," 后是否调用了 ",[119,119022,119023],{},"mujoco.mj_forward",[143,119025,119026],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1856,119028,119029],{},"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":308,"searchDepth":171,"depth":171,"links":119031},[119032,119033,119034,119035,119036,119037,119038,119039],{"id":118673,"depth":171,"text":118673},{"id":118702,"depth":171,"text":118703},{"id":118732,"depth":171,"text":118732},{"id":118847,"depth":171,"text":118847},{"id":118900,"depth":171,"text":118900},{"id":118912,"depth":171,"text":118912},{"id":118949,"depth":171,"text":118949},{"id":118978,"depth":171,"text":118978},"仿真搭建。",{"category":25175},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118616,"description":119040},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":119047,"title":119048,"body":119049,"description":1878,"extension":1879,"meta":119504,"navigation":1881,"path":119505,"seo":119506,"stem":119507,"__hash__":119508},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":119050,"toc":119502},[119051,119054,119057,119063,119499],[10,119052,119048],{"id":119053},"_1-最常用的基本操作更新",[24,119055,119056],{},"装linux系统教程：",[24,119058,119059],{},[164,119060,119061],{"href":119061,"rel":119062},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[168],[303,119064,119068],{"className":119065,"code":119066,"language":119067,"meta":308,"style":308},"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",[119,119069,119070,119075,119080,119089,119094,119103,119108,119128,119133,119144,119149,119158,119163,119191,119196,119215,119220,119239,119243,119248,119264,119268,119273,119303,119307,119312,119328,119332,119337,119352,119356,119361,119377,119381,119386,119398,119410,119414,119419,119436,119440,119445,119463,119467,119472,119481,119485,119490],{"__ignoreMap":308},[312,119071,119072],{"class":314,"line":315},[312,119073,119074],{"class":318},"#更新相关的知识\n",[312,119076,119077],{"class":314,"line":171},[312,119078,119079],{"class":318},"# 更新软件包列表（从服务器获取最新软件信息）\n",[312,119081,119082,119084,119087],{"class":314,"line":274},[312,119083,26372],{"class":332},[312,119085,119086],{"class":339}," apt",[312,119088,28038],{"class":339},[312,119090,119091],{"class":314,"line":298},[312,119092,119093],{"class":318},"# 升级所有可更新的软件包（不删除旧包）\n",[312,119095,119096,119098,119100],{"class":314,"line":974},[312,119097,26372],{"class":332},[312,119099,119086],{"class":339},[312,119101,119102],{"class":339}," upgrade\n",[312,119104,119105],{"class":314,"line":980},[312,119106,119107],{"class":318},"#更新和升级软件包\n",[312,119109,119110,119112,119114,119117,119119,119121,119123,119126],{"class":314,"line":997},[312,119111,26372],{"class":332},[312,119113,119086],{"class":339},[312,119115,119116],{"class":339}," update",[312,119118,27986],{"class":324},[312,119120,26372],{"class":332},[312,119122,119086],{"class":339},[312,119124,119125],{"class":339}," upgrade",[312,119127,102751],{"class":488},[312,119129,119130],{"class":314,"line":1003},[312,119131,119132],{"class":318},"#列出可更新的软件包及版本信息\n",[312,119134,119135,119138,119141],{"class":314,"line":1020},[312,119136,119137],{"class":332},"apt",[312,119139,119140],{"class":339}," list",[312,119142,119143],{"class":488}," --upgradable\n",[312,119145,119146],{"class":314,"line":1026},[312,119147,119148],{"class":318},"#彻底升级（处理依赖关系，可能删除旧包）\n",[312,119150,119151,119153,119155],{"class":314,"line":3418},[312,119152,26372],{"class":332},[312,119154,119086],{"class":339},[312,119156,119157],{"class":339}," full-upgrade\n",[312,119159,119160],{"class":314,"line":3423},[312,119161,119162],{"class":318},"#设置指定版本\n",[312,119164,119165,119167,119169,119171,119173,119176,119178,119180,119182,119184,119187,119189],{"class":314,"line":3429},[312,119166,26372],{"class":332},[312,119168,119086],{"class":339},[312,119170,25630],{"class":339},[312,119172,30698],{"class":1436},[312,119174,119175],{"class":339},"package_nam",[312,119177,2024],{"class":324},[312,119179,2902],{"class":1436},[312,119181,336],{"class":339},[312,119183,325],{"class":1436},[312,119185,119186],{"class":339},"version_numbe",[312,119188,2615],{"class":324},[312,119190,343],{"class":1436},[312,119192,119193],{"class":314,"line":3434},[312,119194,119195],{"class":318},"#只安装软件包不升级\n",[312,119197,119198,119200,119202,119204,119206,119208,119210,119212],{"class":314,"line":3448},[312,119199,26372],{"class":332},[312,119201,119086],{"class":339},[312,119203,25630],{"class":339},[312,119205,30698],{"class":1436},[312,119207,119175],{"class":339},[312,119209,2024],{"class":324},[312,119211,2902],{"class":1436},[312,119213,119214],{"class":488}," --no-upgrade\n",[312,119216,119217],{"class":314,"line":3453},[312,119218,119219],{"class":318},"#只升级，不存在就不安装\n",[312,119221,119222,119224,119226,119228,119230,119232,119234,119236],{"class":314,"line":3459},[312,119223,26372],{"class":332},[312,119225,119086],{"class":339},[312,119227,25630],{"class":339},[312,119229,30698],{"class":1436},[312,119231,119175],{"class":339},[312,119233,2024],{"class":324},[312,119235,2902],{"class":1436},[312,119237,119238],{"class":488}," --only-upgrade\n",[312,119240,119241],{"class":314,"line":3480},[312,119242,4205],{"emptyLinePlaceholder":1881},[312,119244,119245],{"class":314,"line":3485},[312,119246,119247],{"class":318},"#安装指定的软件命令\n",[312,119249,119250,119252,119254,119256,119258,119260,119262],{"class":314,"line":3499},[312,119251,26372],{"class":332},[312,119253,119086],{"class":339},[312,119255,25630],{"class":339},[312,119257,30698],{"class":1436},[312,119259,119175],{"class":339},[312,119261,2024],{"class":324},[312,119263,343],{"class":1436},[312,119265,119266],{"class":314,"line":3504},[312,119267,4205],{"emptyLinePlaceholder":1881},[312,119269,119270],{"class":314,"line":3533},[312,119271,119272],{"class":318},"#安装多个软件包\n",[312,119274,119275,119277,119279,119281,119283,119286,119289,119291,119293,119296,119298,119300],{"class":314,"line":3538},[312,119276,26372],{"class":332},[312,119278,119086],{"class":339},[312,119280,25630],{"class":339},[312,119282,30698],{"class":1436},[312,119284,119285],{"class":339},"package_",[312,119287,119288],{"class":1436},"1>",[312,119290,30698],{"class":1436},[312,119292,119285],{"class":339},[312,119294,119295],{"class":1436},"2>",[312,119297,30698],{"class":1436},[312,119299,119285],{"class":339},[312,119301,119302],{"class":1436},"3>\n",[312,119304,119305],{"class":314,"line":3555},[312,119306,4205],{"emptyLinePlaceholder":1881},[312,119308,119309],{"class":314,"line":3560},[312,119310,119311],{"class":318},"#更新指定的软件命令\n",[312,119313,119314,119316,119318,119320,119322,119324,119326],{"class":314,"line":3565},[312,119315,26372],{"class":332},[312,119317,119086],{"class":339},[312,119319,119116],{"class":339},[312,119321,30698],{"class":1436},[312,119323,119175],{"class":339},[312,119325,2024],{"class":324},[312,119327,343],{"class":1436},[312,119329,119330],{"class":314,"line":3570},[312,119331,4205],{"emptyLinePlaceholder":1881},[312,119333,119334],{"class":314,"line":3584},[312,119335,119336],{"class":318},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[312,119338,119339,119341,119344,119346,119348,119350],{"class":314,"line":3589},[312,119340,119137],{"class":332},[312,119342,119343],{"class":339}," show",[312,119345,30698],{"class":1436},[312,119347,119175],{"class":339},[312,119349,2024],{"class":324},[312,119351,343],{"class":1436},[312,119353,119354],{"class":314,"line":4382},[312,119355,4205],{"emptyLinePlaceholder":1881},[312,119357,119358],{"class":314,"line":4396},[312,119359,119360],{"class":318},"#删除软件包命令\n",[312,119362,119363,119365,119367,119369,119371,119373,119375],{"class":314,"line":4404},[312,119364,26372],{"class":332},[312,119366,119086],{"class":339},[312,119368,27875],{"class":339},[312,119370,30698],{"class":1436},[312,119372,119175],{"class":339},[312,119374,2024],{"class":324},[312,119376,343],{"class":1436},[312,119378,119379],{"class":314,"line":4409},[312,119380,4205],{"emptyLinePlaceholder":1881},[312,119382,119383],{"class":314,"line":4415},[312,119384,119385],{"class":318},"# 清理旧版本和缓存（释放磁盘空间）\n",[312,119387,119388,119390,119392,119395],{"class":314,"line":4421},[312,119389,26372],{"class":332},[312,119391,119086],{"class":339},[312,119393,119394],{"class":339}," autoremove",[312,119396,119397],{"class":318},"  # 删除不再需要的依赖和库文件\n",[312,119399,119400,119402,119404,119407],{"class":314,"line":4426},[312,119401,26372],{"class":332},[312,119403,119086],{"class":339},[312,119405,119406],{"class":339}," clean",[312,119408,119409],{"class":318},"       # 清理下载的缓存包\n",[312,119411,119412],{"class":314,"line":9751},[312,119413,4205],{"emptyLinePlaceholder":1881},[312,119415,119416],{"class":314,"line":9775},[312,119417,119418],{"class":318},"#移除软件包及配置文件\n",[312,119420,119421,119423,119425,119428,119430,119432,119434],{"class":314,"line":9780},[312,119422,26372],{"class":332},[312,119424,119086],{"class":339},[312,119426,119427],{"class":339}," purge",[312,119429,30698],{"class":1436},[312,119431,119175],{"class":339},[312,119433,2024],{"class":324},[312,119435,343],{"class":1436},[312,119437,119438],{"class":314,"line":9786},[312,119439,4205],{"emptyLinePlaceholder":1881},[312,119441,119442],{"class":314,"line":9813},[312,119443,119444],{"class":318},"#查找软件包命令\n",[312,119446,119447,119449,119451,119454,119456,119459,119461],{"class":314,"line":9818},[312,119448,26372],{"class":332},[312,119450,119086],{"class":339},[312,119452,119453],{"class":339}," search",[312,119455,30698],{"class":1436},[312,119457,119458],{"class":339},"keywor",[312,119460,2259],{"class":324},[312,119462,343],{"class":1436},[312,119464,119465],{"class":314,"line":9824},[312,119466,4205],{"emptyLinePlaceholder":1881},[312,119468,119469],{"class":314,"line":9836},[312,119470,119471],{"class":318},"#列出所有已安装的包\n",[312,119473,119474,119476,119478],{"class":314,"line":9848},[312,119475,119137],{"class":332},[312,119477,119140],{"class":339},[312,119479,119480],{"class":488}," --installed\n",[312,119482,119483],{"class":314,"line":9860},[312,119484,4205],{"emptyLinePlaceholder":1881},[312,119486,119487],{"class":314,"line":11519},[312,119488,119489],{"class":318},"#列出所有已安装的包的版本信息\n",[312,119491,119492,119494,119496],{"class":314,"line":11544},[312,119493,119137],{"class":332},[312,119495,119140],{"class":339},[312,119497,119498],{"class":488}," --all-versions\n",[1856,119500,119501],{},"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":308,"searchDepth":171,"depth":171,"links":119503},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":119048,"description":1878},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":119510,"title":119511,"body":119512,"description":1878,"extension":1879,"meta":120253,"navigation":1881,"path":120254,"seo":120255,"stem":120256,"__hash__":120257},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":119513,"toc":120240},[119514,119517,119521,119524,119530,119534,119538,119544,119549,119554,119559,119564,119569,119572,119575,119578,119581,119585,119588,119593,119596,119601,119604,119609,119616,119619,119622,119625,119628,119631,119642,119646,119650,119655,119660,119664,119669,119673,119678,119682,119686,119691,119694,119739,119744,119748,119752,119757,119763,119768,119778,119783,119793,119798,119803,119830,119834,119837,119842,119845,119870,119874,119879,119882,119887,119892,119912,119917,119920,119935,119939,119992,119995,120000,120004,120007,120022,120025,120028,120033,120037,120041,120044,120048,120052,120055,120060,120065,120069,120076,120084,120087,120094,120099,120104,120107,120112,120119,120124,120131,120135,120137,120142,120146,120149,120152,120157,120160,120165,120168,120173,120178,120183,120187,120192,120196,120237],[10,119515,119511],{"id":119516},"_2-linux装机教程",[14,119518,119520],{"id":119519},"_21-实体机","2.1 实体机",[24,119522,119523],{},"使用清华源：（Ubuntu24.04）",[24,119525,119526],{},[164,119527,119528],{"href":119528,"rel":119529},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[168],[14,119531,119533],{"id":119532},"_22-普通虚拟机","2.2 普通虚拟机",[69,119535,119537],{"id":119536},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[24,119539,119540],{},[164,119541,119542],{"href":119542,"rel":119543},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[168],[24,119545,119546],{},[19,119547],{"alt":308,"src":119548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[24,119550,119551],{},[19,119552],{"alt":308,"src":119553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[24,119555,119556],{},[19,119557],{"alt":308,"src":119558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[24,119560,119561],{},[19,119562],{"alt":308,"src":119563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[24,119565,119566],{},[19,119567],{"alt":308,"src":119568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[24,119570,119571],{},"内存4G（4096MB）；",[24,119573,119574],{},"CPU给4个核；",[24,119576,119577],{},"硬盘动态分配60G；",[24,119579,119580],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[69,119582,119584],{"id":119583},"_222-安装ubuntu","2.2.2 安装Ubuntu",[24,119586,119587],{},"按照1.1的步骤下载Ubuntu",[24,119589,119590],{},[19,119591],{"alt":308,"src":119592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[24,119594,119595],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[24,119597,119598],{},[19,119599],{"alt":308,"src":119600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[24,119602,119603],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[24,119605,119606],{},[19,119607],{"alt":308,"src":119608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[24,119610,119611,119612,119615],{},"选择“正常安装”(找不到都用Alt+F7)， ",[27,119613,119614],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[24,119617,119618],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[24,119620,119621],{},"将改动写入磁盘吗 继续",[24,119623,119624],{},"选择东八区（shanghai，大致在地图上点一下），继续",[24,119626,119627],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[24,119629,119630],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[24,119632,119633,119634,119637,119638,119641],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[27,119635,119636],{},"除了"," 选不发送系统信息与不升级之外， ",[27,119639,119640],{},"其它"," 都跳过或前进）",[69,119643,119645],{"id":119644},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[23796,119647,119649],{"id":119648},"_2231-全屏","2.2.3.1 全屏",[24,119651,119652],{},[19,119653],{"alt":308,"src":119654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[24,119656,119657],{},[19,119658],{"alt":308,"src":119659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[23796,119661,119663],{"id":119662},"_2232-文件交换","2.2.3.2 文件交换",[24,119665,119666],{},[19,119667],{"alt":308,"src":119668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[23796,119670,119672],{"id":119671},"_2233-新建文本文档","2.2.3.3 新建文本文档",[24,119674,119675],{},[19,119676],{"alt":308,"src":119677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119679,119681],{"id":119680},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[69,119683,119685],{"id":119684},"_231-简介与优缺点","2.3.1 简介与优缺点",[140,119687,119688],{},[143,119689,119690],{},"什么情况下推荐？",[24,119692,119693],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[140,119695,119696],{"start":171},[143,119697,119698,119699],{},"优缺点：",[140,119700,119701,119731],{},[143,119702,119703,119704],{},"优点：",[140,119705,119706,119709,119716,119719,119722,119725,119728],{},[143,119707,119708],{},"WSL2是最好的Linux发行版;(bushi)",[143,119710,119711,119712,119715],{},"性能损耗极低。且比在Windows上跑深度性能 ",[27,119713,119714],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[143,119717,119718],{},"非常方便调用USB设备，可以USB直通;",[143,119720,119721],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[143,119723,119724],{},"非常方便Win与WSL2互相传文件等协同操作;",[143,119726,119727],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[143,119729,119730],{},"非常方便使用Windows的VScode远程开发;",[143,119732,119733,119734],{},"缺点：",[140,119735,119736],{},[143,119737,119738],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[24,119740,119741],{},[19,119742],{"alt":308,"src":119743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[69,119745,119747],{"id":119746},"_232-安装教程","2.3.2 安装教程",[23796,119749,119751],{"id":119750},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[140,119753,119754],{},[143,119755,119756],{},"方法一(图形界面)",[24,119758,119759,119760,26414],{},"用Win+R输入",[119,119761,119762],{},"appwiz.cpl",[24,119764,119765],{},[19,119766],{"alt":308,"src":119767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[24,119769,119770,119771,119774,119775,28269],{},"点击OK进入 ",[27,119772,119773],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[27,119776,119777],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[24,119779,119780],{},[19,119781],{"alt":308,"src":119782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[24,119784,119785,119786,1167,119789,119792],{},"选择 ",[27,119787,119788],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[27,119790,119791],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[24,119794,119795],{},[19,119796],{"alt":308,"src":119797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[140,119799,119800],{"start":171},[143,119801,119802],{},"方法二(命令行)",[303,119804,119808],{"className":119805,"code":119806,"language":119807,"meta":308,"style":308},"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",[119,119809,119810,119815,119820,119825],{"__ignoreMap":308},[312,119811,119812],{"class":314,"line":315},[312,119813,119814],{},"# 开启 Linux 子系统\n",[312,119816,119817],{"class":314,"line":171},[312,119818,119819],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[312,119821,119822],{"class":314,"line":274},[312,119823,119824],{},"# 开启虚拟机平台\n",[312,119826,119827],{"class":314,"line":298},[312,119828,119829],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[23796,119831,119833],{"id":119832},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[24,119835,119836],{},"用管理员权限打开powershell",[24,119838,119839],{},[19,119840],{"alt":308,"src":119841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[24,119843,119844],{},"升级WSL并设置默认版本为WSL2",[303,119846,119848],{"className":119805,"code":119847,"language":119807,"meta":308,"style":308},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[119,119849,119850,119855,119860,119865],{"__ignoreMap":308},[312,119851,119852],{"class":314,"line":315},[312,119853,119854],{},"# 更新 wsl\n",[312,119856,119857],{"class":314,"line":171},[312,119858,119859],{},"wsl --update\n",[312,119861,119862],{"class":314,"line":274},[312,119863,119864],{},"# 将 wsl 版本设置为 wsl2\n",[312,119866,119867],{"class":314,"line":298},[312,119868,119869],{},"wsl --set-default-version 2\n",[23796,119871,119873],{"id":119872},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[140,119875,119876],{},[143,119877,119878],{},"方式一(商店下载)",[24,119880,119881],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[24,119883,119884],{},[19,119885],{"alt":308,"src":119886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[140,119888,119889],{"start":171},[143,119890,119891],{},"方式二(命令行安装)",[303,119893,119895],{"className":119805,"code":119894,"language":119807,"meta":308,"style":308},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[119,119896,119897,119902,119907],{"__ignoreMap":308},[312,119898,119899],{"class":314,"line":315},[312,119900,119901],{},"# 列出可安装的 Linux 版本\n",[312,119903,119904],{"class":314,"line":171},[312,119905,119906],{},"#（需要科学手段）\n",[312,119908,119909],{"class":314,"line":274},[312,119910,119911],{},"wsl --list --online\n",[24,119913,119914],{},[19,119915],{"alt":308,"src":119916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[24,119918,119919],{},"选择对应发行版并安装",[303,119921,119923],{"className":119805,"code":119922,"language":119807,"meta":308,"style":308},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[119,119924,119925,119930],{"__ignoreMap":308},[312,119926,119927],{"class":314,"line":315},[312,119928,119929],{},"# Ubuntu安装完毕后需要重启系统\n",[312,119931,119932],{"class":314,"line":171},[312,119933,119934],{},"wsl --install -d Ubuntu-24.04\n",[23796,119936,119938],{"id":119937},"_2324-查看系统状态","2.3.2.4 查看系统状态",[303,119940,119942],{"className":119805,"code":119941,"language":119807,"meta":308,"style":308},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[119,119943,119944,119949,119954,119959,119964,119968,119972,119977,119982,119987],{"__ignoreMap":308},[312,119945,119946],{"class":314,"line":315},[312,119947,119948],{},"# 查看 wsl\n",[312,119950,119951],{"class":314,"line":171},[312,119952,119953],{},"wsl -l\n",[312,119955,119956],{"class":314,"line":274},[312,119957,119958],{},"# 查看 wsl 运行版本或模式\n",[312,119960,119961],{"class":314,"line":298},[312,119962,119963],{},"wsl -l -v\n",[312,119965,119966],{"class":314,"line":974},[312,119967,4205],{"emptyLinePlaceholder":1881},[312,119969,119970],{"class":314,"line":980},[312,119971,4205],{"emptyLinePlaceholder":1881},[312,119973,119974],{"class":314,"line":997},[312,119975,119976],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[312,119978,119979],{"class":314,"line":1003},[312,119980,119981],{},"wsl --set-version \u003Cdistro> 2\n",[312,119983,119984],{"class":314,"line":1020},[312,119985,119986],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[312,119988,119989],{"class":314,"line":1026},[312,119990,119991],{},"wsl --unregister \u003Cdistro>\n",[24,119993,119994],{},"输出Version为2即正常",[24,119996,119997],{},[19,119998],{"alt":308,"src":119999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[23796,120001,120003],{"id":120002},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[24,120005,120006],{},"直接在Powershell里输入wsl命令进入子系统",[303,120008,120010],{"className":119805,"code":120009,"language":119807,"meta":308,"style":308},"# 进入子系统\nwsl\n",[119,120011,120012,120017],{"__ignoreMap":308},[312,120013,120014],{"class":314,"line":315},[312,120015,120016],{},"# 进入子系统\n",[312,120018,120019],{"class":314,"line":171},[312,120020,120021],{},"wsl\n",[24,120023,120024],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[24,120026,120027],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[24,120029,120030],{},[19,120031],{"alt":308,"src":120032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[69,120034,120036],{"id":120035},"_233-配置各种环境","2.3.3 配置各种环境",[23796,120038,120040],{"id":120039},"_2331-换源","2.3.3.1 换源",[24,120042,120043],{},"(同实体机LINUX，往下找教程)",[23796,120045,120047],{"id":120046},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[1505,120049,120051],{"id":120050},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[24,120053,120054],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[24,120056,120057],{},[19,120058],{"alt":308,"src":120059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[24,120061,120062],{},[19,120063],{"alt":308,"src":120064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[1505,120066,120068],{"id":120067},"_23322-cuda","2.3.3.2.2 CUDA",[24,120070,120071,120072],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[164,120073,120074],{"href":120074,"rel":120075},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[168],[24,120077,120078,120081],{},[19,120079],{"alt":308,"src":120080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[19,120082],{"alt":308,"src":120083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[24,120085,120086],{},"在下方的网站，选择合适的版本。",[24,120088,120089,120090],{},"WSL2 专属 CUDA 指南：",[164,120091,120092],{"href":120092,"rel":120093},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[168],[24,120095,120096],{},[27,120097,120098],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[24,120100,120101],{},[19,120102],{"alt":308,"src":120103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[24,120105,120106],{},"挨行敲一遍",[24,120108,120109],{},[19,120110],{"alt":308,"src":120111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[24,120113,120114,120115,120118],{},"敲完后，输入",[119,120116,120117],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[24,120120,120121],{},[19,120122],{"alt":308,"src":120123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[24,120125,120126,120127,120130],{},"（请详看下方教程的",[27,120128,120129],{},"安装CUDA的配置环境来看","如何配置环境）",[1505,120132,120134],{"id":120133},"_23323-cudnn","2.3.3.2.3 cuDNN",[24,120136,120043],{},[24,120138,120139],{},[19,120140],{"alt":308,"src":120141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[23796,120143,120145],{"id":120144},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[24,120147,120148],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[24,120150,120151],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[24,120153,120154],{},[19,120155],{"alt":308,"src":120156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[24,120158,120159],{},"连接WSL2",[24,120161,120162],{},[19,120163],{"alt":308,"src":120164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[24,120166,120167],{},"远程开发成功。",[24,120169,120170],{},[19,120171],{"alt":308,"src":120172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[24,120174,120175],{},[19,120176],{"alt":308,"src":120177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[24,120179,120180],{},[19,120181],{"alt":308,"src":120182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[23796,120184,120186],{"id":120185},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[24,120188,120189],{},[19,120190],{"alt":308,"src":120191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[23796,120193,120195],{"id":120194},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[303,120197,120199],{"className":119065,"code":120198,"language":119067,"meta":308,"style":308},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[119,120200,120201,120209,120217,120228,120232],{"__ignoreMap":308},[312,120202,120203,120205,120207],{"class":314,"line":315},[312,120204,26372],{"class":332},[312,120206,119086],{"class":339},[312,120208,28038],{"class":339},[312,120210,120211,120213,120215],{"class":314,"line":171},[312,120212,26372],{"class":332},[312,120214,119086],{"class":339},[312,120216,119102],{"class":339},[312,120218,120219,120221,120223,120225],{"class":314,"line":274},[312,120220,26372],{"class":332},[312,120222,119086],{"class":339},[312,120224,25630],{"class":339},[312,120226,120227],{"class":339}," mesa-utils\n",[312,120229,120230],{"class":314,"line":298},[312,120231,4205],{"emptyLinePlaceholder":1881},[312,120233,120234],{"class":314,"line":974},[312,120235,120236],{"class":318},"#然后重启wsl2即可\n",[1856,120238,120239],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":308,"searchDepth":171,"depth":171,"links":120241},[120242,120243,120248],{"id":119519,"depth":171,"text":119520},{"id":119532,"depth":171,"text":119533,"children":120244},[120245,120246,120247],{"id":119536,"depth":274,"text":119537},{"id":119583,"depth":274,"text":119584},{"id":119644,"depth":274,"text":119645},{"id":119680,"depth":171,"text":119681,"children":120249},[120250,120251,120252],{"id":119684,"depth":274,"text":119685},{"id":119746,"depth":274,"text":119747},{"id":120035,"depth":274,"text":120036},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":119511,"description":1878},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":120259,"title":120260,"body":120261,"description":1878,"extension":1879,"meta":123196,"navigation":1881,"path":123197,"seo":123198,"stem":123199,"__hash__":123200},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":120262,"toc":123168},[120263,120266,120270,120276,120280,120286,120290,120478,120481,120486,120490,120494,120497,120500,120506,120511,120514,120517,120522,120555,120560,120564,120641,120644,120649,120653,120656,120695,120698,120707,120725,120730,120737,120854,120859,120862,120889,120894,120898,120907,120957,120964,120968,120971,120985,120992,121026,121031,121035,121058,121061,121066,121070,121073,121076,121079,121121,121125,121128,121131,121172,121176,121180,121183,121188,121193,121196,121219,121222,121230,121235,121238,121243,121248,121251,121256,121260,121265,121288,121293,121355,121363,121368,121373,121376,121381,121384,121389,121394,121412,121417,121423,121428,121442,121446,121449,121452,121455,121498,121501,121506,121607,121610,121615,121619,121623,121660,121664,121668,121672,121718,121722,121767,121771,121778,121786,121841,121844,121921,121924,121947,121951,121954,121959,121964,121972,121975,121980,121985,121990,121993,121998,122006,122009,122014,122017,122088,122093,122096,122101,122104,122109,122112,122117,122120,122125,122130,122133,122208,122211,122224,122229,122232,122246,122249,122278,122283,122312,122315,122320,122324,122329,122338,122341,122346,122349,122354,122357,122360,122365,122368,122373,122378,122381,122386,122389,122514,122519,122549,122552,122557,122562,122579,122582,122625,122628,122655,122660,122673,122816,122820,122825,122839,122842,122893,122896,122926,122929,122945,122950,122964,122967,123034,123039,123048,123053,123056,123068,123073,123080,123104,123107,123112,123115,123134,123139,123146,123158,123165],[10,120264,120260],{"id":120265},"_3-安装必备配置",[14,120267,120269],{"id":120268},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[303,120271,120274],{"className":120272,"code":120273,"language":6992},[6990],"  打开下方网站（注意，该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",[119,120275,120273],{"__ignoreMap":308},[69,120277,120279],{"id":120278},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[303,120281,120284],{"className":120282,"code":120283,"language":6992},[6990],"  输入以下命令\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",[119,120285,120283],{"__ignoreMap":308},[69,120287,120289],{"id":120288},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[303,120291,120295],{"className":120292,"code":120293,"language":120294,"meta":308,"style":308},"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",[119,120296,120297,120305,120316,120328,120342,120346,120356,120361,120365,120369,120374,120378,120390,120394,120399,120403,120414,120418,120434,120438,120449,120453,120458,120462,120470],{"__ignoreMap":308},[312,120298,120299,120301,120303],{"class":314,"line":315},[312,120300,26372],{"class":332},[312,120302,119086],{"class":339},[312,120304,28038],{"class":339},[312,120306,120307,120309,120311,120313],{"class":314,"line":171},[312,120308,26372],{"class":332},[312,120310,119086],{"class":339},[312,120312,25630],{"class":339},[312,120314,120315],{"class":339}," vim\n",[312,120317,120318,120320,120323,120325],{"class":314,"line":274},[312,120319,26372],{"class":332},[312,120321,120322],{"class":339}," rm",[312,120324,27121],{"class":488},[312,120326,120327],{"class":339}," \u002Fetc\u002Fapt\u002Fsources.list\n",[312,120329,120330,120332,120334,120336,120339],{"class":314,"line":298},[312,120331,26372],{"class":332},[312,120333,120322],{"class":339},[312,120335,27121],{"class":488},[312,120337,120338],{"class":339}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[312,120340,120341],{"class":488},"**\n",[312,120343,120344],{"class":314,"line":974},[312,120345,4205],{"emptyLinePlaceholder":1881},[312,120347,120348,120350,120353],{"class":314,"line":980},[312,120349,26372],{"class":332},[312,120351,120352],{"class":339}," vim",[312,120354,120355],{"class":339}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[312,120357,120358],{"class":314,"line":997},[312,120359,120360],{"class":339},"```\n",[312,120362,120363],{"class":314,"line":1003},[312,120364,4205],{"emptyLinePlaceholder":1881},[312,120366,120367],{"class":314,"line":1020},[312,120368,4205],{"emptyLinePlaceholder":1881},[312,120370,120371],{"class":314,"line":1026},[312,120372,120373],{"class":332},"选择好Ubuntu版本后，复制下方的内容。\n",[312,120375,120376],{"class":314,"line":3418},[312,120377,4205],{"emptyLinePlaceholder":1881},[312,120379,120380,120382,120385,120388],{"class":314,"line":3423},[312,120381,2172],{"class":1436},[312,120383,120384],{"class":339},"[](",[312,120386,120387],{"class":332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[312,120389,1959],{"class":339},[312,120391,120392],{"class":314,"line":3429},[312,120393,4205],{"emptyLinePlaceholder":1881},[312,120395,120396],{"class":314,"line":3434},[312,120397,120398],{"class":332},"粘贴进去\n",[312,120400,120401],{"class":314,"line":3448},[312,120402,4205],{"emptyLinePlaceholder":1881},[312,120404,120405,120407,120409,120412],{"class":314,"line":3453},[312,120406,2172],{"class":1436},[312,120408,120384],{"class":339},[312,120410,120411],{"class":332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[312,120413,1959],{"class":339},[312,120415,120416],{"class":314,"line":3459},[312,120417,4205],{"emptyLinePlaceholder":1881},[312,120419,120420,120423,120426,120429,120431],{"class":314,"line":3480},[312,120421,120422],{"class":332},"按一下ESC，然后英文冒号，输入",[312,120424,120425],{"class":339}," `",[312,120427,120428],{"class":332},":wq!",[312,120430,2914],{"class":339},[312,120432,120433],{"class":332},"然后回车\n",[312,120435,120436],{"class":314,"line":3485},[312,120437,4205],{"emptyLinePlaceholder":1881},[312,120439,120440,120442,120444,120447],{"class":314,"line":3499},[312,120441,2172],{"class":1436},[312,120443,120384],{"class":339},[312,120445,120446],{"class":332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[312,120448,1959],{"class":339},[312,120450,120451],{"class":314,"line":3504},[312,120452,4205],{"emptyLinePlaceholder":1881},[312,120454,120455],{"class":314,"line":3533},[312,120456,120457],{"class":332},"输入以下命令\n",[312,120459,120460],{"class":314,"line":3538},[312,120461,4205],{"emptyLinePlaceholder":1881},[312,120463,120464,120467],{"class":314,"line":3555},[312,120465,120466],{"class":339},"```",[312,120468,120469],{"class":332},"Bash\n",[312,120471,120472,120474,120476],{"class":314,"line":3560},[312,120473,26372],{"class":332},[312,120475,119086],{"class":339},[312,120477,28038],{"class":339},[24,120479,120480],{},"这里被替换成对应学校则成功",[24,120482,120483],{},[19,120484],{"alt":308,"src":120485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,120487,120489],{"id":120488},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[69,120491,120493],{"id":120492},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[24,120495,120496],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[24,120498,120499],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[24,120501,120502],{},[164,120503,120504],{"href":120504,"rel":120505},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[168],[24,120507,120508],{},[19,120509],{"alt":308,"src":120510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[24,120512,120513],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[24,120515,120516],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[24,120518,120519],{},[19,120520],{"alt":308,"src":120521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[303,120523,120525],{"className":119065,"code":120524,"language":119067,"meta":308,"style":308},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[119,120526,120527,120532,120539,120544],{"__ignoreMap":308},[312,120528,120529],{"class":314,"line":315},[312,120530,120531],{"class":318},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[312,120533,120534,120536],{"class":314,"line":171},[312,120535,103045],{"class":488},[312,120537,120538],{"class":339}," ~\u002FDownloads\n",[312,120540,120541],{"class":314,"line":274},[312,120542,120543],{"class":318},"#下方chrome安装包名不一定是这个，根据名字来看\n",[312,120545,120546,120548,120550,120552],{"class":314,"line":298},[312,120547,26372],{"class":332},[312,120549,119086],{"class":339},[312,120551,25630],{"class":339},[312,120553,120554],{"class":339}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[24,120556,120557],{},[19,120558],{"alt":308,"src":120559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[69,120561,120563],{"id":120562},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[303,120565,120567],{"className":119065,"code":120566,"language":119067,"meta":308,"style":308},"# 老版\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",[119,120568,120569,120574,120582,120593,120598,120602,120607,120617,120625,120636],{"__ignoreMap":308},[312,120570,120571],{"class":314,"line":315},[312,120572,120573],{"class":318},"# 老版\n",[312,120575,120576,120578,120580],{"class":314,"line":171},[312,120577,26372],{"class":332},[312,120579,119086],{"class":339},[312,120581,28038],{"class":339},[312,120583,120584,120586,120588,120590],{"class":314,"line":274},[312,120585,26372],{"class":332},[312,120587,119086],{"class":339},[312,120589,25630],{"class":339},[312,120591,120592],{"class":339}," neofetch\n",[312,120594,120595],{"class":314,"line":298},[312,120596,120597],{"class":332},"neofetch\n",[312,120599,120600],{"class":314,"line":974},[312,120601,4205],{"emptyLinePlaceholder":1881},[312,120603,120604],{"class":314,"line":980},[312,120605,120606],{"class":318},"# 新版\n",[312,120608,120609,120611,120614],{"class":314,"line":997},[312,120610,26372],{"class":332},[312,120612,120613],{"class":339}," add-apt-repository",[312,120615,120616],{"class":339}," ppa:zhangsongcui3371\u002Ffastfetch\n",[312,120618,120619,120621,120623],{"class":314,"line":1003},[312,120620,26372],{"class":332},[312,120622,119086],{"class":339},[312,120624,28038],{"class":339},[312,120626,120627,120629,120631,120633],{"class":314,"line":1020},[312,120628,26372],{"class":332},[312,120630,119086],{"class":339},[312,120632,25630],{"class":339},[312,120634,120635],{"class":339}," fastfetch\n",[312,120637,120638],{"class":314,"line":1026},[312,120639,120640],{"class":332},"fastfetch\n",[24,120642,120643],{},"这里显示，一共有3162个debian的程序，7个snap程序",[24,120645,120646],{},[19,120647],{"alt":308,"src":120648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[69,120650,120652],{"id":120651},"_323-移除snap应用","3.2.3 移除snap应用",[24,120654,120655],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[303,120657,120659],{"className":119065,"code":120658,"language":119067,"meta":308,"style":308},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[119,120660,120661,120673,120684],{"__ignoreMap":308},[312,120662,120663,120665,120667,120670],{"class":314,"line":315},[312,120664,26372],{"class":332},[312,120666,28309],{"class":339},[312,120668,120669],{"class":339}," disable",[312,120671,120672],{"class":339}," snapd.service\n",[312,120674,120675,120677,120679,120681],{"class":314,"line":171},[312,120676,26372],{"class":332},[312,120678,28309],{"class":339},[312,120680,120669],{"class":339},[312,120682,120683],{"class":339}," snapd.socket\n",[312,120685,120686,120688,120690,120692],{"class":314,"line":274},[312,120687,26372],{"class":332},[312,120689,28309],{"class":339},[312,120691,120669],{"class":339},[312,120693,120694],{"class":339}," snapd.seeded.service\n",[24,120696,120697],{},"然后查看snap应用列表",[24,120699,120700,120701,120706],{},"根据你安装的选择不同（最小安装或普通安装），有",[164,120702,120705],{"href":120703,"rel":120704},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[168],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[303,120708,120710],{"className":119065,"code":120709,"language":119067,"meta":308,"style":308},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[119,120711,120712,120717],{"__ignoreMap":308},[312,120713,120714],{"class":314,"line":315},[312,120715,120716],{"class":318},"# 查询当前系统上snap安装了哪些app\n",[312,120718,120719,120722],{"class":314,"line":171},[312,120720,120721],{"class":332},"snap",[312,120723,120724],{"class":339}," list\n",[24,120726,120727],{},[19,120728],{"alt":308,"src":120729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[24,120731,120732,120733,120736],{},"卸载掉图中所有应用，按照 ",[27,120734,120735],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[303,120738,120740],{"className":119065,"code":120739,"language":119067,"meta":308,"style":308},"#移除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",[119,120741,120742,120747,120759,120764,120775,120780,120791,120796,120807,120812,120816,120821,120832,120843],{"__ignoreMap":308},[312,120743,120744],{"class":314,"line":315},[312,120745,120746],{"class":318},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[312,120748,120749,120751,120754,120756],{"class":314,"line":171},[312,120750,26372],{"class":332},[312,120752,120753],{"class":339}," snap",[312,120755,27875],{"class":339},[312,120757,120758],{"class":339}," snap-store\n",[312,120760,120761],{"class":314,"line":274},[312,120762,120763],{"class":318},"#移除firefox浏览器\n",[312,120765,120766,120768,120770,120772],{"class":314,"line":298},[312,120767,26372],{"class":332},[312,120769,120753],{"class":339},[312,120771,27875],{"class":339},[312,120773,120774],{"class":339}," firefox\n",[312,120776,120777],{"class":314,"line":974},[312,120778,120779],{"class":318},"#移除gnome-42-2204\n",[312,120781,120782,120784,120786,120788],{"class":314,"line":980},[312,120783,26372],{"class":332},[312,120785,120753],{"class":339},[312,120787,27875],{"class":339},[312,120789,120790],{"class":339}," gnome-42-2204\n",[312,120792,120793],{"class":314,"line":997},[312,120794,120795],{"class":318},"#移除gtk-common-themes\n",[312,120797,120798,120800,120802,120804],{"class":314,"line":1003},[312,120799,26372],{"class":332},[312,120801,120753],{"class":339},[312,120803,27875],{"class":339},[312,120805,120806],{"class":339}," gtk-common-themes\n",[312,120808,120809],{"class":314,"line":1020},[312,120810,120811],{"class":318},"#移除其它...\n",[312,120813,120814],{"class":314,"line":1026},[312,120815,4479],{"class":324},[312,120817,120818],{"class":314,"line":3418},[312,120819,120820],{"class":318},"#移除core22,bare以及snapd\n",[312,120822,120823,120825,120827,120829],{"class":314,"line":3423},[312,120824,26372],{"class":332},[312,120826,120753],{"class":339},[312,120828,27875],{"class":339},[312,120830,120831],{"class":339}," core22\n",[312,120833,120834,120836,120838,120840],{"class":314,"line":3429},[312,120835,26372],{"class":332},[312,120837,120753],{"class":339},[312,120839,27875],{"class":339},[312,120841,120842],{"class":339}," bare\n",[312,120844,120845,120847,120849,120851],{"class":314,"line":3434},[312,120846,26372],{"class":332},[312,120848,120753],{"class":339},[312,120850,27875],{"class":339},[312,120852,120853],{"class":339}," snapd\n",[24,120855,120856],{},[19,120857],{"alt":308,"src":120858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[24,120860,120861],{},"输入以下命令查看是否还有snap包",[303,120863,120865],{"className":119065,"code":120864,"language":119067,"meta":308,"style":308},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[119,120866,120867,120873,120877,120881,120885],{"__ignoreMap":308},[312,120868,120869,120871],{"class":314,"line":315},[312,120870,120721],{"class":332},[312,120872,120724],{"class":339},[312,120874,120875],{"class":314,"line":171},[312,120876,120573],{"class":318},[312,120878,120879],{"class":314,"line":274},[312,120880,120597],{"class":332},[312,120882,120883],{"class":314,"line":298},[312,120884,120606],{"class":318},[312,120886,120887],{"class":314,"line":974},[312,120888,120640],{"class":332},[24,120890,120891],{},[19,120892],{"alt":308,"src":120893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[69,120895,120897],{"id":120896},"_324-移除snap","3.2.4 移除snap",[24,120899,120900,120901,120906],{},"在删除掉",[164,120902,120905],{"href":120903,"rel":120904},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[168],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[303,120908,120910],{"className":119065,"code":120909,"language":119067,"meta":308,"style":308}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[119,120911,120912,120917,120930,120935,120946],{"__ignoreMap":308},[312,120913,120914],{"class":314,"line":315},[312,120915,120916],{"class":318}," #使用apt移除掉snap\n",[312,120918,120919,120921,120923,120925,120928],{"class":314,"line":171},[312,120920,26372],{"class":332},[312,120922,119086],{"class":339},[312,120924,119394],{"class":339},[312,120926,120927],{"class":488}," --purge",[312,120929,120853],{"class":339},[312,120931,120932],{"class":314,"line":274},[312,120933,120934],{"class":318},"#移除snapd的一些目录\n",[312,120936,120937,120939,120941,120943],{"class":314,"line":298},[312,120938,26372],{"class":332},[312,120940,120322],{"class":339},[312,120942,27121],{"class":488},[312,120944,120945],{"class":339}," \u002Fvar\u002Fcache\u002Fsnapd\n",[312,120947,120948,120950,120952,120954],{"class":314,"line":974},[312,120949,26372],{"class":332},[312,120951,120322],{"class":339},[312,120953,27121],{"class":488},[312,120955,120956],{"class":339}," ~\u002Fsnap\n",[24,120958,120959,120960,120963],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[119,120961,120962],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[69,120965,120967],{"id":120966},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[24,120969,120970],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[303,120972,120974],{"className":119065,"code":120973,"language":119067,"meta":308,"style":308},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[119,120975,120976],{"__ignoreMap":308},[312,120977,120978,120980,120982],{"class":314,"line":315},[312,120979,26372],{"class":332},[312,120981,120352],{"class":339},[312,120983,120984],{"class":339}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[24,120986,120987,120988,120991],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[119,120989,120990],{},":wq"," 回车",[303,120993,120995],{"className":119065,"code":120994,"language":119067,"meta":308,"style":308},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[119,120996,120997,121004,121018],{"__ignoreMap":308},[312,120998,120999,121002],{"class":314,"line":315},[312,121000,121001],{"class":332},"Package:",[312,121003,120853],{"class":339},[312,121005,121006,121009,121012,121015],{"class":314,"line":171},[312,121007,121008],{"class":332},"Pin:",[312,121010,121011],{"class":339}," release",[312,121013,121014],{"class":339}," a=",[312,121016,121017],{"class":488},"*\n",[312,121019,121020,121023],{"class":314,"line":274},[312,121021,121022],{"class":332},"Pin-Priority:",[312,121024,121025],{"class":488}," -10\n",[24,121027,121028],{},[19,121029],{"alt":308,"src":121030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[69,121032,121034],{"id":121033},"_326-测试是否成功","3.2.6 测试是否成功",[303,121036,121038],{"className":119065,"code":121037,"language":119067,"meta":308,"style":308},"sudo apt update\nsudo apt install firefox\n",[119,121039,121040,121048],{"__ignoreMap":308},[312,121041,121042,121044,121046],{"class":314,"line":315},[312,121043,26372],{"class":332},[312,121045,119086],{"class":339},[312,121047,28038],{"class":339},[312,121049,121050,121052,121054,121056],{"class":314,"line":171},[312,121051,26372],{"class":332},[312,121053,119086],{"class":339},[312,121055,25630],{"class":339},[312,121057,120774],{"class":339},[24,121059,121060],{},"这里提示snapd无法被安装，就证明成功了",[24,121062,121063],{},[19,121064],{"alt":308,"src":121065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[69,121067,121069],{"id":121068},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[24,121071,121072],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[24,121074,121075],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[24,121077,121078],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[303,121080,121082],{"className":119065,"code":121081,"language":119067,"meta":308,"style":308},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[119,121083,121084,121089,121098,121103,121111],{"__ignoreMap":308},[312,121085,121086],{"class":314,"line":315},[312,121087,121088],{"class":318},"# 添加Mozilla提供的源\n",[312,121090,121091,121093,121095],{"class":314,"line":171},[312,121092,26372],{"class":332},[312,121094,120613],{"class":339},[312,121096,121097],{"class":339}," ppa:mozillateam\u002Fppa\n",[312,121099,121100],{"class":314,"line":274},[312,121101,121102],{"class":318},"# 安装Firefox\n",[312,121104,121105,121107,121109],{"class":314,"line":298},[312,121106,26372],{"class":332},[312,121108,119086],{"class":339},[312,121110,28038],{"class":339},[312,121112,121113,121115,121117,121119],{"class":314,"line":974},[312,121114,26372],{"class":332},[312,121116,119086],{"class":339},[312,121118,25630],{"class":339},[312,121120,120774],{"class":339},[69,121122,121124],{"id":121123},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[24,121126,121127],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[24,121129,121130],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[303,121132,121134],{"className":119065,"code":121133,"language":119067,"meta":308,"style":308},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[119,121135,121136,121141,121151,121159,121163],{"__ignoreMap":308},[312,121137,121138],{"class":314,"line":315},[312,121139,121140],{"class":318},"#删掉禁止安装snap的配置文件\n",[312,121142,121143,121145,121147,121149],{"class":314,"line":171},[312,121144,26372],{"class":332},[312,121146,120322],{"class":339},[312,121148,27121],{"class":488},[312,121150,120984],{"class":339},[312,121152,121153,121155,121157],{"class":314,"line":274},[312,121154,26372],{"class":332},[312,121156,119086],{"class":339},[312,121158,28038],{"class":339},[312,121160,121161],{"class":314,"line":298},[312,121162,4205],{"emptyLinePlaceholder":1881},[312,121164,121165,121167,121169],{"class":314,"line":974},[312,121166,26372],{"class":332},[312,121168,119086],{"class":339},[312,121170,121171],{"class":339}," dist-update\n",[14,121173,121175],{"id":121174},"_33-中文输入法","3.3 中文输入法",[69,121177,121179],{"id":121178},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[24,121181,121182],{},"官网下载搜狗输入法",[24,121184,121185],{},[19,121186],{"alt":308,"src":121187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[24,121189,121190],{},[19,121191],{"alt":308,"src":121192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[24,121194,121195],{},"打开终端输入如下",[303,121197,121199],{"className":119065,"code":121198,"language":119067,"meta":308,"style":308},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[119,121200,121201,121208],{"__ignoreMap":308},[312,121202,121203,121205],{"class":314,"line":315},[312,121204,103045],{"class":488},[312,121206,121207],{"class":339}," ~\u002FDownloads\u002F\n",[312,121209,121210,121212,121214,121216],{"class":314,"line":171},[312,121211,26372],{"class":332},[312,121213,119086],{"class":339},[312,121215,25630],{"class":339},[312,121217,121218],{"class":339}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[24,121220,121221],{},"打开Fcitx",[24,121223,121224,121227],{},[19,121225],{"alt":308,"src":121226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[19,121228],{"alt":308,"src":121229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[24,121231,121232],{},[19,121233],{"alt":308,"src":121234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[24,121236,121237],{},"添加搜狗输入法",[24,121239,121240],{},[19,121241],{"alt":308,"src":121242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[24,121244,121245],{},[19,121246],{"alt":308,"src":121247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[24,121249,121250],{},"将搜狗输入法设置为唯一输入法",[24,121252,121253],{},[19,121254],{"alt":308,"src":121255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[69,121257,121259],{"id":121258},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[140,121261,121262],{},[143,121263,121264],{},"卸载旧输入法",[303,121266,121268],{"className":120292,"code":121267,"language":120294,"meta":308,"style":308},"sudo apt purge fcitx* ibus*\n",[119,121269,121270],{"__ignoreMap":308},[312,121271,121272,121274,121276,121278,121281,121283,121286],{"class":314,"line":315},[312,121273,26372],{"class":332},[312,121275,119086],{"class":339},[312,121277,119427],{"class":339},[312,121279,121280],{"class":339}," fcitx",[312,121282,2400],{"class":488},[312,121284,121285],{"class":339}," ibus",[312,121287,121017],{"class":488},[140,121289,121290],{"start":171},[143,121291,121292],{},"安装Fcitx5",[303,121294,121296],{"className":119065,"code":121295,"language":119067,"meta":308,"style":308},"# 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",[119,121297,121298,121303,121317,121321,121326,121335,121343],{"__ignoreMap":308},[312,121299,121300],{"class":314,"line":315},[312,121301,121302],{"class":318},"# Ubuntu22.04及以上、Debian12及以上\n",[312,121304,121305,121307,121309,121311,121314],{"class":314,"line":171},[312,121306,26372],{"class":332},[312,121308,119086],{"class":339},[312,121310,25630],{"class":339},[312,121312,121313],{"class":339}," fcitx5",[312,121315,121316],{"class":339}," fcitx5-chinese-addons\n",[312,121318,121319],{"class":314,"line":274},[312,121320,4205],{"emptyLinePlaceholder":1881},[312,121322,121323],{"class":314,"line":298},[312,121324,121325],{"class":318},"# Ubuntu20.04\n",[312,121327,121328,121330,121332],{"class":314,"line":974},[312,121329,26372],{"class":332},[312,121331,120613],{"class":339},[312,121333,121334],{"class":339}," ppa:zhsj\u002Ffcitx5\n",[312,121336,121337,121339,121341],{"class":314,"line":980},[312,121338,26372],{"class":332},[312,121340,119086],{"class":339},[312,121342,28038],{"class":339},[312,121344,121345,121347,121349,121351,121353],{"class":314,"line":997},[312,121346,26372],{"class":332},[312,121348,119086],{"class":339},[312,121350,25630],{"class":339},[312,121352,121313],{"class":339},[312,121354,121316],{"class":339},[140,121356,121357,121360],{"start":274},[143,121358,121359],{},"Reboot System",[143,121361,121362],{},"启动Fcitx5",[24,121364,121365],{},[19,121366],{"alt":308,"src":121367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[140,121369,121370],{"start":974},[143,121371,121372],{},"修改一些设置",[24,121374,121375],{},"将Pinyin和Keyboard - English US加入到左边。",[24,121377,121378],{},[19,121379],{"alt":308,"src":121380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[24,121382,121383],{},"添加快捷键以便于更好切换中英文",[24,121385,121386],{},[19,121387],{"alt":308,"src":121388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[140,121390,121391],{"start":980},[143,121392,121393],{},"重启",[303,121395,121397],{"className":120292,"code":121396,"language":120294,"meta":308,"style":308},"sudo shutdown -r now\n",[119,121398,121399],{"__ignoreMap":308},[312,121400,121401,121403,121406,121409],{"class":314,"line":315},[312,121402,26372],{"class":332},[312,121404,121405],{"class":339}," shutdown",[312,121407,121408],{"class":488}," -r",[312,121410,121411],{"class":339}," now\n",[140,121413,121414],{"start":997},[143,121415,121416],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[24,121418,121419],{},[164,121420,121421],{"href":121421,"rel":121422},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[168],[140,121424,121425],{"start":1003},[143,121426,121427],{},"再重启",[303,121429,121430],{"className":120292,"code":121396,"language":120294,"meta":308,"style":308},[119,121431,121432],{"__ignoreMap":308},[312,121433,121434,121436,121438,121440],{"class":314,"line":315},[312,121435,26372],{"class":332},[312,121437,121405],{"class":339},[312,121439,121408],{"class":488},[312,121441,121411],{"class":339},[14,121443,121445],{"id":121444},"_34-pip3源替换","3.4 pip3源替换",[24,121447,121448],{},"非Debian系发行版需要做。",[24,121450,121451],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[24,121453,121454],{},"使用dnf的系统也可能不用做。",[303,121456,121458],{"className":119065,"code":121457,"language":119067,"meta":308,"style":308},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[119,121459,121460,121465,121472,121477,121482],{"__ignoreMap":308},[312,121461,121462],{"class":314,"line":315},[312,121463,121464],{"class":318},"# 检查是否已安装 pip\n",[312,121466,121467,121470],{"class":314,"line":171},[312,121468,121469],{"class":332},"pip3",[312,121471,28089],{"class":488},[312,121473,121474],{"class":314,"line":274},[312,121475,121476],{"class":318},"# 如果未安装，先安装 pip3（见下方）\n",[312,121478,121479],{"class":314,"line":298},[312,121480,121481],{"class":318},"# 配置 pip 使用清华源\n",[312,121483,121484,121486,121489,121492,121495],{"class":314,"line":974},[312,121485,121469],{"class":332},[312,121487,121488],{"class":339}," config",[312,121490,121491],{"class":339}," set",[312,121493,121494],{"class":339}," global.index-url",[312,121496,121497],{"class":339}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[24,121499,121500],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[24,121502,121503],{},[19,121504],{"alt":308,"src":121505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[303,121507,121509],{"className":119065,"code":121508,"language":119067,"meta":308,"style":308},"#安装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",[119,121510,121511,121516,121524,121535,121539,121544,121563,121567,121572,121584,121588,121593],{"__ignoreMap":308},[312,121512,121513],{"class":314,"line":315},[312,121514,121515],{"class":318},"#安装pip3\n",[312,121517,121518,121520,121522],{"class":314,"line":171},[312,121519,26372],{"class":332},[312,121521,119086],{"class":339},[312,121523,28038],{"class":339},[312,121525,121526,121528,121530,121532],{"class":314,"line":274},[312,121527,26372],{"class":332},[312,121529,27872],{"class":339},[312,121531,25630],{"class":339},[312,121533,121534],{"class":339}," python3-pip\n",[312,121536,121537],{"class":314,"line":298},[312,121538,4205],{"emptyLinePlaceholder":1881},[312,121540,121541],{"class":314,"line":974},[312,121542,121543],{"class":318},"#更新pip3\n",[312,121545,121546,121548,121550,121552,121554,121556,121559,121561],{"class":314,"line":980},[312,121547,102649],{"class":332},[312,121549,102652],{"class":488},[312,121551,102675],{"class":339},[312,121553,25630],{"class":339},[312,121555,28226],{"class":488},[312,121557,121558],{"class":339}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[312,121560,102680],{"class":488},[312,121562,102683],{"class":339},[312,121564,121565],{"class":314,"line":997},[312,121566,4205],{"emptyLinePlaceholder":1881},[312,121568,121569],{"class":314,"line":1003},[312,121570,121571],{"class":318},"#设置pip源为清华源\n",[312,121573,121574,121576,121578,121580,121582],{"class":314,"line":1020},[312,121575,121469],{"class":332},[312,121577,121488],{"class":339},[312,121579,121491],{"class":339},[312,121581,121494],{"class":339},[312,121583,121497],{"class":339},[312,121585,121586],{"class":314,"line":1026},[312,121587,4205],{"emptyLinePlaceholder":1881},[312,121589,121590],{"class":314,"line":3418},[312,121591,121592],{"class":318},"#测试\n",[312,121594,121595,121597,121599,121601,121603,121605],{"class":314,"line":3423},[312,121596,102649],{"class":332},[312,121598,102652],{"class":488},[312,121600,102675],{"class":339},[312,121602,25630],{"class":339},[312,121604,102680],{"class":488},[312,121606,102683],{"class":339},[24,121608,121609],{},"成功的话，会看到Looking后面是tsinghua字样。",[24,121611,121612],{},[19,121613],{"alt":308,"src":121614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121616,121618],{"id":121617},"_35-显卡驱动安装","3.5 显卡驱动安装",[69,121620,121622],{"id":121621},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[303,121624,121626],{"className":120292,"code":121625,"language":120294,"meta":308,"style":308},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[119,121627,121628,121633,121648,121653],{"__ignoreMap":308},[312,121629,121630],{"class":314,"line":315},[312,121631,121632],{"class":318},"# 如果是使用apt安装的驱动\n",[312,121634,121635,121637,121639,121641,121643,121646],{"class":314,"line":171},[312,121636,26372],{"class":332},[312,121638,27872],{"class":339},[312,121640,27875],{"class":339},[312,121642,120927],{"class":488},[312,121644,121645],{"class":339}," nvidia",[312,121647,121017],{"class":488},[312,121649,121650],{"class":314,"line":274},[312,121651,121652],{"class":318},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[312,121654,121655,121657],{"class":314,"line":298},[312,121656,26372],{"class":332},[312,121658,121659],{"class":339}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[69,121661,121663],{"id":121662},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[23796,121665,121667],{"id":121666},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[1505,121669,121671],{"id":121670},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[303,121673,121675],{"className":120292,"code":121674,"language":120294,"meta":308,"style":308},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[119,121676,121677,121682,121693,121698,121708,121713],{"__ignoreMap":308},[312,121678,121679],{"class":314,"line":315},[312,121680,121681],{"class":318},"# 安装英伟达驱动\n",[312,121683,121684,121686,121688,121690],{"class":314,"line":171},[312,121685,26372],{"class":332},[312,121687,119086],{"class":339},[312,121689,25630],{"class":339},[312,121691,121692],{"class":339}," nvidia-driver-版本号\n",[312,121694,121695],{"class":314,"line":274},[312,121696,121697],{"class":318},"# 重启 \n",[312,121699,121700,121702,121704,121706],{"class":314,"line":298},[312,121701,26372],{"class":332},[312,121703,121405],{"class":339},[312,121705,121408],{"class":488},[312,121707,121411],{"class":339},[312,121709,121710],{"class":314,"line":974},[312,121711,121712],{"class":318},"# 检查驱动是否安装成功\n",[312,121714,121715],{"class":314,"line":980},[312,121716,121717],{"class":332},"nvidia-smi\n",[1505,121719,121721],{"id":121720},"_35212-debian","3.5.2.1.2 Debian",[303,121723,121725],{"className":120292,"code":121724,"language":120294,"meta":308,"style":308},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[119,121726,121727,121731,121745,121749,121759,121763],{"__ignoreMap":308},[312,121728,121729],{"class":314,"line":315},[312,121730,121681],{"class":318},[312,121732,121733,121735,121737,121739,121742],{"class":314,"line":171},[312,121734,26372],{"class":332},[312,121736,119086],{"class":339},[312,121738,25630],{"class":339},[312,121740,121741],{"class":339}," nvidia-driver",[312,121743,121744],{"class":339}," nvidia-settings\n",[312,121746,121747],{"class":314,"line":274},[312,121748,121697],{"class":318},[312,121750,121751,121753,121755,121757],{"class":314,"line":298},[312,121752,26372],{"class":332},[312,121754,121405],{"class":339},[312,121756,121408],{"class":488},[312,121758,121411],{"class":339},[312,121760,121761],{"class":314,"line":974},[312,121762,121712],{"class":318},[312,121764,121765],{"class":314,"line":980},[312,121766,121717],{"class":332},[23796,121768,121770],{"id":121769},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[24,121772,121773,121774,121777],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[27,121775,121776],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[24,121779,121780,121781],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25350,121782,121783],{},[27,121784,121785],{},"（也可以不禁用桌面环境，直接进行下一步。）",[303,121787,121789],{"className":120292,"code":121788,"language":120294,"meta":308,"style":308},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[119,121790,121791,121796,121806,121811,121824,121829],{"__ignoreMap":308},[312,121792,121793],{"class":314,"line":315},[312,121794,121795],{"class":318},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[312,121797,121798,121800,121803],{"class":314,"line":171},[312,121799,26372],{"class":332},[312,121801,121802],{"class":339}," telinit",[312,121804,121805],{"class":488}," 3\n",[312,121807,121808],{"class":314,"line":274},[312,121809,121810],{"class":318},"# ubuntu 使用下方命令\n",[312,121812,121813,121815,121818,121821],{"class":314,"line":298},[312,121814,26372],{"class":332},[312,121816,121817],{"class":339}," service",[312,121819,121820],{"class":339}," lightdm",[312,121822,121823],{"class":339}," stop\n",[312,121825,121826],{"class":314,"line":974},[312,121827,121828],{"class":318},"# Fedora 使用下方命令\n",[312,121830,121831,121833,121835,121838],{"class":314,"line":980},[312,121832,26372],{"class":332},[312,121834,28309],{"class":339},[312,121836,121837],{"class":339}," isolate",[312,121839,121840],{"class":339}," multi-user.target\n",[24,121842,121843],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[303,121845,121847],{"className":120292,"code":121846,"language":120294,"meta":308,"style":308},"# 编译环境+准备工作\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",[119,121848,121849,121854,121865,121870,121877,121882,121894,121899,121906,121911],{"__ignoreMap":308},[312,121850,121851],{"class":314,"line":315},[312,121852,121853],{"class":318},"# 编译环境+准备工作\n",[312,121855,121856,121858,121860,121862],{"class":314,"line":171},[312,121857,26372],{"class":332},[312,121859,119086],{"class":339},[312,121861,25630],{"class":339},[312,121863,121864],{"class":339}," build-essential\n",[312,121866,121867],{"class":314,"line":274},[312,121868,121869],{"class":318},"# 进入到.run目录中\n",[312,121871,121872,121874],{"class":314,"line":298},[312,121873,103045],{"class":488},[312,121875,121876],{"class":339}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[312,121878,121879],{"class":314,"line":974},[312,121880,121881],{"class":318},"# 给驱动文件增加可执行权限：\n",[312,121883,121884,121886,121888,121891],{"class":314,"line":980},[312,121885,26372],{"class":332},[312,121887,26375],{"class":339},[312,121889,121890],{"class":339}," a+x",[312,121892,121893],{"class":339}," NVIDIA-Linux-x86_64-550.107.02.run\n",[312,121895,121896],{"class":314,"line":997},[312,121897,121898],{"class":318},"# 然后执行安装：\n",[312,121900,121901,121903],{"class":314,"line":1003},[312,121902,26372],{"class":332},[312,121904,121905],{"class":339}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[312,121907,121908],{"class":314,"line":1020},[312,121909,121910],{"class":318},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[312,121912,121913,121915,121918],{"class":314,"line":1026},[312,121914,26372],{"class":332},[312,121916,121917],{"class":339}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[312,121919,121920],{"class":488},"  --no-opengl-files\n",[24,121922,121923],{},"安装完毕重启即可",[303,121925,121927],{"className":120292,"code":121926,"language":120294,"meta":308,"style":308},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[119,121928,121929,121933,121939,121943],{"__ignoreMap":308},[312,121930,121931],{"class":314,"line":315},[312,121932,121697],{"class":318},[312,121934,121935,121937],{"class":314,"line":171},[312,121936,26372],{"class":332},[312,121938,28443],{"class":339},[312,121940,121941],{"class":314,"line":274},[312,121942,121712],{"class":318},[312,121944,121945],{"class":314,"line":298},[312,121946,121717],{"class":332},[69,121948,121950],{"id":121949},"_353-安装cuda","3.5.3 安装CUDA",[24,121952,121953],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[24,121955,121956],{},[19,121957],{"alt":308,"src":121958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[140,121960,121961],{},[143,121962,121963],{},"先查看显卡驱动所支持的最高CUDA版本",[303,121965,121966],{"className":120292,"code":121717,"language":120294,"meta":308,"style":308},[119,121967,121968],{"__ignoreMap":308},[312,121969,121970],{"class":314,"line":315},[312,121971,121717],{"class":332},[24,121973,121974],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[24,121976,121977],{},[19,121978],{"alt":308,"src":121979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[140,121981,121982],{"start":171},[143,121983,121984],{},"下载CUDA并安装CUDA",[24,121986,120071,121987],{},[164,121988,120074],{"href":120074,"rel":121989},[168],[24,121991,121992],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[24,121994,121995],{},[19,121996],{"alt":308,"src":121997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[24,121999,122000,122001,1194],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[164,122002,122005],{"href":122003,"rel":122004},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[168],"Vinci机器人队单片机教程",[24,122007,122008],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[24,122010,122011],{},[19,122012],{"alt":308,"src":122013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[24,122015,122016],{},"将最下方框框里的命令敲入终端",[303,122018,122020],{"className":120292,"code":122019,"language":120294,"meta":308,"style":308},"# 在当前文件夹下创建一个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",[119,122021,122022,122027,122036,122041,122048,122053,122061,122066,122077,122082],{"__ignoreMap":308},[312,122023,122024],{"class":314,"line":315},[312,122025,122026],{"class":318},"# 在当前文件夹下创建一个ttt的子文件夹\n",[312,122028,122029,122031,122033],{"class":314,"line":171},[312,122030,103035],{"class":332},[312,122032,31012],{"class":488},[312,122034,122035],{"class":339}," .\u002Fttt\n",[312,122037,122038],{"class":314,"line":274},[312,122039,122040],{"class":318},"# 进入ttt文件夹\n",[312,122042,122043,122045],{"class":314,"line":298},[312,122044,103045],{"class":488},[312,122046,122047],{"class":339}," ttt\n",[312,122049,122050],{"class":314,"line":974},[312,122051,122052],{"class":318},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[312,122054,122055,122058],{"class":314,"line":980},[312,122056,122057],{"class":332},"wget",[312,122059,122060],{"class":339}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[312,122062,122063],{"class":314,"line":997},[312,122064,122065],{"class":318},"# 给予权限\n",[312,122067,122068,122070,122072,122074],{"class":314,"line":1003},[312,122069,26372],{"class":332},[312,122071,26375],{"class":339},[312,122073,121890],{"class":339},[312,122075,122076],{"class":339}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[312,122078,122079],{"class":314,"line":1020},[312,122080,122081],{"class":318},"# 运行脚本\n",[312,122083,122084,122086],{"class":314,"line":1026},[312,122085,26372],{"class":332},[312,122087,122076],{"class":339},[24,122089,122090],{},[19,122091],{"alt":308,"src":122092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[24,122094,122095],{},"正在安装中：",[24,122097,122098],{},[19,122099],{"alt":308,"src":122100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[24,122102,122103],{},"输入accept接受即可",[24,122105,122106],{},[19,122107],{"alt":308,"src":122108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[24,122110,122111],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[24,122113,122114],{},[19,122115],{"alt":308,"src":122116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[24,122118,122119],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[24,122121,122122],{},[19,122123],{"alt":308,"src":122124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[140,122126,122127],{"start":274},[143,122128,122129],{},"配置环境",[24,122131,122132],{},"根据上方确认一下路径，比如我上面红色框起来的为",[303,122134,122136],{"className":120292,"code":122135,"language":120294,"meta":308,"style":308},"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",[119,122137,122138,122154,122169],{"__ignoreMap":308},[312,122139,122140,122143,122146,122149,122152],{"class":314,"line":315},[312,122141,122142],{"class":332},"Please",[312,122144,122145],{"class":339}," make",[312,122147,122148],{"class":339}," sure",[312,122150,122151],{"class":339}," that",[312,122153,4479],{"class":324},[312,122155,122156,122158,122161,122164,122167],{"class":314,"line":171},[312,122157,54057],{"class":332},[312,122159,122160],{"class":339},"   PATH",[312,122162,122163],{"class":339}," includes",[312,122165,122166],{"class":339}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[312,122168,4479],{"class":324},[312,122170,122171,122173,122176,122178,122181,122184,122186,122189,122192,122195,122198,122200,122203,122205],{"class":314,"line":274},[312,122172,54057],{"class":332},[312,122174,122175],{"class":339},"   LD_LIBRARY_PATH",[312,122177,122163],{"class":339},[312,122179,122180],{"class":339}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[312,122182,122183],{"class":339}," or,",[312,122185,7014],{"class":339},[312,122187,122188],{"class":339}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[312,122190,122191],{"class":339}," to",[312,122193,122194],{"class":339}," \u002Fetc\u002Fld.so.conf",[312,122196,122197],{"class":339}," and",[312,122199,29026],{"class":339},[312,122201,122202],{"class":339}," ldconfig",[312,122204,66382],{"class":339},[312,122206,122207],{"class":339}," root\n",[24,122209,122210],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[303,122212,122214],{"className":120292,"code":122213,"language":120294,"meta":308,"style":308},"which nvcc\n",[119,122215,122216],{"__ignoreMap":308},[312,122217,122218,122221],{"class":314,"line":315},[312,122219,122220],{"class":488},"which",[312,122222,122223],{"class":339}," nvcc\n",[24,122225,122226],{},[19,122227],{"alt":308,"src":122228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[24,122230,122231],{},"所以我进行以下操作：",[303,122233,122235],{"className":120292,"code":122234,"language":120294,"meta":308,"style":308},"sudo vim ~\u002F.bashrc\n",[119,122236,122237],{"__ignoreMap":308},[312,122238,122239,122241,122243],{"class":314,"line":315},[312,122240,26372],{"class":332},[312,122242,120352],{"class":339},[312,122244,122245],{"class":339}," ~\u002F.bashrc\n",[24,122247,122248],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[303,122250,122252],{"className":120292,"code":122251,"language":120294,"meta":308,"style":308},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[119,122253,122254,122266],{"__ignoreMap":308},[312,122255,122256,122258,122261,122263],{"class":314,"line":315},[312,122257,26838],{"class":1436},[312,122259,122260],{"class":324}," PATH",[312,122262,336],{"class":1436},[312,122264,122265],{"class":324},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[312,122267,122268,122270,122273,122275],{"class":314,"line":171},[312,122269,26838],{"class":1436},[312,122271,122272],{"class":324}," LD_LIBRARY_PATH",[312,122274,336],{"class":1436},[312,122276,122277],{"class":324},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[24,122279,122280],{},[19,122281],{"alt":308,"src":122282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[303,122284,122286],{"className":120292,"code":122285,"language":120294,"meta":308,"style":308},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[119,122287,122288,122293,122299,122304],{"__ignoreMap":308},[312,122289,122290],{"class":314,"line":315},[312,122291,122292],{"class":318},"# 刷新当前终端的环境变量\n",[312,122294,122295,122297],{"class":314,"line":171},[312,122296,102663],{"class":488},[312,122298,122245],{"class":339},[312,122300,122301],{"class":314,"line":274},[312,122302,122303],{"class":318},"# 验证CUDA是否安装成功\n",[312,122305,122306,122309],{"class":314,"line":298},[312,122307,122308],{"class":332},"nvcc",[312,122310,122311],{"class":488}," -V\n",[24,122313,122314],{},"出现下图这种则安装成功。",[24,122316,122317],{},[19,122318],{"alt":308,"src":122319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[69,122321,122323],{"id":122322},"_354-安装cudnn","3.5.4 安装cuDNN",[140,122325,122326],{},[143,122327,122328],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[24,122330,122331,122332,122337],{},"前往 NVIDIA cuDNN 下载页面：",[164,122333,122336],{"href":122334,"rel":122335},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[168],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[24,122339,122340],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[24,122342,122343],{},[19,122344],{"alt":308,"src":122345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[24,122347,122348],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[24,122350,122351],{},[19,122352],{"alt":308,"src":122353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[24,122355,122356],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[24,122358,122359],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[24,122361,122362],{},[27,122363,122364],{},"我这里选择所有Linux X86_64最通用的办法：",[24,122366,122367],{},"下载好的：",[24,122369,122370],{},[19,122371],{"alt":308,"src":122372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[140,122374,122375],{"start":171},[143,122376,122377],{},"安装cuDNN",[24,122379,122380],{},"找到该文件所在目录，并打开终端，cd到该目录。",[24,122382,122383],{},[19,122384],{"alt":308,"src":122385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[24,122387,122388],{},"解压文件，并复制到对应位置完成安装",[303,122390,122392],{"className":120292,"code":122391,"language":120294,"meta":308,"style":308},"# 解压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",[119,122393,122394,122399,122410,122415,122422,122427,122443,122457,122462,122473,122482,122486,122502],{"__ignoreMap":308},[312,122395,122396],{"class":314,"line":315},[312,122397,122398],{"class":318},"# 解压cuDNN文件\n",[312,122400,122401,122404,122407],{"class":314,"line":171},[312,122402,122403],{"class":332},"tar",[312,122405,122406],{"class":488}," -xvf",[312,122408,122409],{"class":339}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[312,122411,122412],{"class":314,"line":274},[312,122413,122414],{"class":318},"# cd进文件夹\n",[312,122416,122417,122419],{"class":314,"line":298},[312,122418,103045],{"class":488},[312,122420,122421],{"class":339}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[312,122423,122424],{"class":314,"line":974},[312,122425,122426],{"class":318},"# 复制cuDNN文件到CUDA目录\n",[312,122428,122429,122431,122433,122436,122438,122441],{"class":314,"line":980},[312,122430,26372],{"class":332},[312,122432,29657],{"class":339},[312,122434,122435],{"class":339}," include\u002Fcudnn",[312,122437,2400],{"class":488},[312,122439,122440],{"class":339},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[312,122442,4479],{"class":324},[312,122444,122445,122447,122449,122452,122454],{"class":314,"line":997},[312,122446,26372],{"class":332},[312,122448,29657],{"class":339},[312,122450,122451],{"class":339}," lib\u002Flibcudnn",[312,122453,2400],{"class":488},[312,122455,122456],{"class":339},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[312,122458,122459],{"class":314,"line":1003},[312,122460,122461],{"class":318},"# 对比一下有没有缺文件\n",[312,122463,122464,122466,122469,122471],{"class":314,"line":1020},[312,122465,28557],{"class":332},[312,122467,122468],{"class":339}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[312,122470,2400],{"class":488},[312,122472,4479],{"class":324},[312,122474,122475,122477,122480],{"class":314,"line":1026},[312,122476,28557],{"class":332},[312,122478,122479],{"class":339}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[312,122481,121017],{"class":488},[312,122483,122484],{"class":314,"line":3418},[312,122485,122065],{"class":318},[312,122487,122488,122490,122492,122495,122497,122499],{"class":314,"line":3423},[312,122489,26372],{"class":332},[312,122491,26375],{"class":339},[312,122493,122494],{"class":339}," a+r",[312,122496,122468],{"class":339},[312,122498,2400],{"class":488},[312,122500,122501],{"class":324},"   \n",[312,122503,122504,122506,122508,122510,122512],{"class":314,"line":3429},[312,122505,26372],{"class":332},[312,122507,26375],{"class":339},[312,122509,122494],{"class":339},[312,122511,122479],{"class":339},[312,122513,121017],{"class":488},[140,122515,122516],{"start":274},[143,122517,122518],{},"检查是否安装成功",[303,122520,122522],{"className":120292,"code":122521,"language":120294,"meta":308,"style":308},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[119,122523,122524,122529],{"__ignoreMap":308},[312,122525,122526],{"class":314,"line":315},[312,122527,122528],{"class":318},"# 检查cuDNN版本命令\n",[312,122530,122531,122534,122537,122539,122541,122544,122547],{"class":314,"line":171},[312,122532,122533],{"class":332},"cat",[312,122535,122536],{"class":339}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[312,122538,26905],{"class":1436},[312,122540,32032],{"class":332},[312,122542,122543],{"class":339}," CUDNN_MAJOR",[312,122545,122546],{"class":488}," -A",[312,122548,49518],{"class":488},[24,122550,122551],{},"出现下图这样的就是安装成功了",[24,122553,122554],{},[19,122555],{"alt":308,"src":122556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[140,122558,122559],{"start":298},[143,122560,122561],{},"软链接(一般不需要)",[303,122563,122565],{"className":120292,"code":122564,"language":120294,"meta":308,"style":308},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[119,122566,122567,122572],{"__ignoreMap":308},[312,122568,122569],{"class":314,"line":315},[312,122570,122571],{"class":318},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[312,122573,122574,122576],{"class":314,"line":171},[312,122575,26372],{"class":332},[312,122577,122578],{"class":339}," ldconfig\n",[24,122580,122581],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[303,122583,122588],{"className":122584,"code":122585,"language":122586,"meta":122587,"style":308},"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",[119,122589,122590,122595,122600,122605,122610,122615,122620],{"__ignoreMap":308},[312,122591,122592],{"class":314,"line":315},[312,122593,122594],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[312,122596,122597],{"class":314,"line":171},[312,122598,122599],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[312,122601,122602],{"class":314,"line":274},[312,122603,122604],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[312,122606,122607],{"class":314,"line":298},[312,122608,122609],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[312,122611,122612],{"class":314,"line":974},[312,122613,122614],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[312,122616,122617],{"class":314,"line":980},[312,122618,122619],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[312,122621,122622],{"class":314,"line":997},[312,122623,122624],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[24,122626,122627],{},"运行下方的命令",[303,122629,122631],{"className":120292,"code":122630,"language":120294,"meta":308,"style":308},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[119,122632,122633,122638,122645,122650],{"__ignoreMap":308},[312,122634,122635],{"class":314,"line":315},[312,122636,122637],{"class":318},"# cd进入CUDA路径\n",[312,122639,122640,122642],{"class":314,"line":171},[312,122641,103045],{"class":488},[312,122643,122644],{"class":339}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[312,122646,122647],{"class":314,"line":274},[312,122648,122649],{"class":318}," # 查看本路径下的需要软链接的文件名\n",[312,122651,122652],{"class":314,"line":298},[312,122653,122654],{"class":332}," ls\n",[24,122656,122657],{},[19,122658],{"alt":308,"src":122659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[24,122661,122662,122663,1512,122666,1512,122669,122672],{},"如上图，我需要将",[119,122664,122665],{},"libcudnn_xxx_xxxxx.so.8.9.7",[119,122667,122668],{},"libcudnn_xxx_xxxxx.so.8",[119,122670,122671],{},"libcudnn_xxx_xxxxx.so","软链接",[303,122674,122676],{"className":120292,"code":122675,"language":120294,"meta":308,"style":308},"# 创建符号链接。对于每个 .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",[119,122677,122678,122683,122699,122713,122727,122741,122755,122769,122783,122788,122794,122799],{"__ignoreMap":308},[312,122679,122680],{"class":314,"line":315},[312,122681,122682],{"class":318},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[312,122684,122685,122687,122690,122693,122696],{"class":314,"line":171},[312,122686,26372],{"class":332},[312,122688,122689],{"class":339}," ln",[312,122691,122692],{"class":488}," -sf",[312,122694,122695],{"class":339}," libcudnn_cnn_train.so.8.9.7",[312,122697,122698],{"class":339}," libcudnn_cnn_train.so.8\n",[312,122700,122701,122703,122705,122707,122710],{"class":314,"line":274},[312,122702,26372],{"class":332},[312,122704,122689],{"class":339},[312,122706,122692],{"class":488},[312,122708,122709],{"class":339}," libcudnn_adv_infer.so.8.9.7",[312,122711,122712],{"class":339}," libcudnn_adv_infer.so.8\n",[312,122714,122715,122717,122719,122721,122724],{"class":314,"line":298},[312,122716,26372],{"class":332},[312,122718,122689],{"class":339},[312,122720,122692],{"class":488},[312,122722,122723],{"class":339}," libcudnn_adv_train.so.8.9.7",[312,122725,122726],{"class":339}," libcudnn_adv_train.so.8\n",[312,122728,122729,122731,122733,122735,122738],{"class":314,"line":974},[312,122730,26372],{"class":332},[312,122732,122689],{"class":339},[312,122734,122692],{"class":488},[312,122736,122737],{"class":339}," libcudnn_cnn_infer.so.8.9.7",[312,122739,122740],{"class":339}," libcudnn_cnn_infer.so.8\n",[312,122742,122743,122745,122747,122749,122752],{"class":314,"line":980},[312,122744,26372],{"class":332},[312,122746,122689],{"class":339},[312,122748,122692],{"class":488},[312,122750,122751],{"class":339}," libcudnn.so.8.9.7",[312,122753,122754],{"class":339}," libcudnn.so.8\n",[312,122756,122757,122759,122761,122763,122766],{"class":314,"line":997},[312,122758,26372],{"class":332},[312,122760,122689],{"class":339},[312,122762,122692],{"class":488},[312,122764,122765],{"class":339}," libcudnn_ops_infer.so.8.9.7",[312,122767,122768],{"class":339}," libcudnn_ops_infer.so.8\n",[312,122770,122771,122773,122775,122777,122780],{"class":314,"line":1003},[312,122772,26372],{"class":332},[312,122774,122689],{"class":339},[312,122776,122692],{"class":488},[312,122778,122779],{"class":339}," libcudnn_ops_train.so.8.9.7",[312,122781,122782],{"class":339}," libcudnn_ops_train.so.8\n",[312,122784,122785],{"class":314,"line":1020},[312,122786,122787],{"class":318},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[312,122789,122790,122792],{"class":314,"line":1026},[312,122791,26372],{"class":332},[312,122793,122578],{"class":339},[312,122795,122796],{"class":314,"line":3418},[312,122797,122798],{"class":318},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[312,122800,122801,122803,122806,122809,122811,122814],{"class":314,"line":3423},[312,122802,28557],{"class":332},[312,122804,122805],{"class":488}," -l",[312,122807,122808],{"class":339}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[312,122810,2400],{"class":488},[312,122812,122813],{"class":339},".so",[312,122815,121017],{"class":488},[69,122817,122819],{"id":122818},"_355-常见问题","3.5.5 常见问题",[140,122821,122822],{},[143,122823,122824],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[303,122826,122828],{"className":120292,"code":122827,"language":120294,"meta":308,"style":308},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[119,122829,122830],{"__ignoreMap":308},[312,122831,122832,122834,122836],{"class":314,"line":315},[312,122833,26372],{"class":332},[312,122835,120352],{"class":339},[312,122837,122838],{"class":339}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[24,122840,122841],{},"blacklist-nouveau.conf文件内容如下：",[303,122843,122845],{"className":120292,"code":122844,"language":120294,"meta":308,"style":308},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[119,122846,122847,122855,122862,122874,122884],{"__ignoreMap":308},[312,122848,122849,122852],{"class":314,"line":315},[312,122850,122851],{"class":332},"blacklist",[312,122853,122854],{"class":339}," nouveau\n",[312,122856,122857,122859],{"class":314,"line":171},[312,122858,122851],{"class":332},[312,122860,122861],{"class":339}," lbm-nouveau\n",[312,122863,122864,122866,122869,122872],{"class":314,"line":274},[312,122865,117699],{"class":332},[312,122867,122868],{"class":339}," nouveau",[312,122870,122871],{"class":339}," modeset=",[312,122873,4890],{"class":488},[312,122875,122876,122879,122881],{"class":314,"line":298},[312,122877,122878],{"class":488},"alias",[312,122880,122868],{"class":339},[312,122882,122883],{"class":339}," off\n",[312,122885,122886,122888,122891],{"class":314,"line":974},[312,122887,122878],{"class":488},[312,122889,122890],{"class":339}," lbm-nouveau",[312,122892,122883],{"class":339},[24,122894,122895],{},"接着运行下方命令",[303,122897,122899],{"className":120292,"code":122898,"language":120294,"meta":308,"style":308},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[119,122900,122901,122911,122916],{"__ignoreMap":308},[312,122902,122903,122905,122908],{"class":314,"line":315},[312,122904,26372],{"class":332},[312,122906,122907],{"class":339}," update-initramfs",[312,122909,122910],{"class":488}," -u\n",[312,122912,122913],{"class":314,"line":171},[312,122914,122915],{"class":332},"或者\n",[312,122917,122918,122920,122923],{"class":314,"line":274},[312,122919,26372],{"class":332},[312,122921,122922],{"class":339}," dracut",[312,122924,122925],{"class":488}," --force\n",[24,122927,122928],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[303,122930,122932],{"className":120292,"code":122931,"language":120294,"meta":308,"style":308},"lsmod | grep nouveau\n",[119,122933,122934],{"__ignoreMap":308},[312,122935,122936,122939,122941,122943],{"class":314,"line":315},[312,122937,122938],{"class":332},"lsmod",[312,122940,26905],{"class":1436},[312,122942,32032],{"class":332},[312,122944,122854],{"class":339},[140,122946,122947],{"start":171},[143,122948,122949],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[303,122951,122953],{"className":120292,"code":122952,"language":120294,"meta":308,"style":308},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[119,122954,122955],{"__ignoreMap":308},[312,122956,122957,122959,122961],{"class":314,"line":315},[312,122958,26372],{"class":332},[312,122960,120352],{"class":339},[312,122962,122963],{"class":339}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[24,122965,122966],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[303,122968,122970],{"className":120292,"code":122969,"language":120294,"meta":308,"style":308},"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",[119,122971,122972,122980,122988,122996,123003,123011,123021,123029],{"__ignoreMap":308},[312,122973,122974,122977],{"class":314,"line":315},[312,122975,122976],{"class":332},"Section",[312,122978,122979],{"class":339}," \"OutputClass\"\n",[312,122981,122982,122985],{"class":314,"line":171},[312,122983,122984],{"class":332},"   Identifier",[312,122986,122987],{"class":339}," \"nvidia\"\n",[312,122989,122990,122993],{"class":314,"line":274},[312,122991,122992],{"class":332},"   MatchDriver",[312,122994,122995],{"class":339}," \"nvidia-drm\"\n",[312,122997,122998,123001],{"class":314,"line":298},[312,122999,123000],{"class":332},"   Driver",[312,123002,122987],{"class":339},[312,123004,123005,123008],{"class":314,"line":974},[312,123006,123007],{"class":332},"   Option",[312,123009,123010],{"class":339}," \"AllowEmptyInitialConfiguration\"\n",[312,123012,123013,123015,123018],{"class":314,"line":980},[312,123014,123007],{"class":332},[312,123016,123017],{"class":339}," \"PrimaryGPU\"",[312,123019,123020],{"class":339}," \"yes\"\n",[312,123022,123023,123026],{"class":314,"line":997},[312,123024,123025],{"class":332},"   ModulePath",[312,123027,123028],{"class":339}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[312,123030,123031],{"class":314,"line":1003},[312,123032,123033],{"class":332},"EndSection\n",[140,123035,123036],{"start":274},[143,123037,123038],{},"安装N卡驱动提示错误",[303,123040,123042],{"className":122584,"code":123041,"language":122586,"meta":122587,"style":308},"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",[119,123043,123044],{"__ignoreMap":308},[312,123045,123046],{"class":314,"line":315},[312,123047,123041],{},[140,123049,123050],{},[143,123051,123052],{},"检查当前运行的内核版本：",[24,123054,123055],{},"运行以下命令以查看你当前正在使用的内核版本：",[303,123057,123059],{"className":119065,"code":123058,"language":119067,"meta":308,"style":308},"uname -r\n",[119,123060,123061],{"__ignoreMap":308},[312,123062,123063,123065],{"class":314,"line":315},[312,123064,71981],{"class":332},[312,123066,123067],{"class":488}," -r\n",[140,123069,123070],{"start":171},[143,123071,123072],{},"安装内核开发文件：",[24,123074,123075,123076,123079],{},"确保你已经安装了与当前内核版本相匹配的 ",[119,123077,123078],{},"kernel-devel"," 包。运行以下命令来安装：",[303,123081,123083],{"className":119065,"code":123082,"language":119067,"meta":308,"style":308},"sudo dnf install kernel-devel-$(uname -r)\n",[119,123084,123085],{"__ignoreMap":308},[312,123086,123087,123089,123091,123093,123096,123098,123100,123102],{"class":314,"line":315},[312,123088,26372],{"class":332},[312,123090,28111],{"class":339},[312,123092,25630],{"class":339},[312,123094,123095],{"class":339}," kernel-devel-",[312,123097,26895],{"class":324},[312,123099,71981],{"class":332},[312,123101,121408],{"class":488},[312,123103,1959],{"class":324},[24,123105,123106],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[140,123108,123109],{"start":274},[143,123110,123111],{},"安装内核源代码（如果需要）：",[24,123113,123114],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[303,123116,123118],{"className":119065,"code":123117,"language":119067,"meta":308,"style":308},"sudo dnf install kernel-headers kernel-source\n",[119,123119,123120],{"__ignoreMap":308},[312,123121,123122,123124,123126,123128,123131],{"class":314,"line":315},[312,123123,26372],{"class":332},[312,123125,28111],{"class":339},[312,123127,25630],{"class":339},[312,123129,123130],{"class":339}," kernel-headers",[312,123132,123133],{"class":339}," kernel-source\n",[140,123135,123136],{"start":298},[143,123137,123138],{},"检查安装：",[24,123140,123141,123142,123145],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[119,123143,123144],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[303,123147,123149],{"className":119065,"code":123148,"language":119067,"meta":308,"style":308},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[119,123150,123151],{"__ignoreMap":308},[312,123152,123153,123155],{"class":314,"line":315},[312,123154,28557],{"class":332},[312,123156,123157],{"class":339}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[24,123159,123160,123161,123164],{},"如果仍然遇到问题，可以通过 ",[119,123162,123163],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1856,123166,123167],{},"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":308,"searchDepth":171,"depth":171,"links":123169},[123170,123174,123184,123188,123189],{"id":120268,"depth":171,"text":120269,"children":123171},[123172,123173],{"id":120278,"depth":274,"text":120279},{"id":120288,"depth":274,"text":120289},{"id":120488,"depth":171,"text":120489,"children":123175},[123176,123177,123178,123179,123180,123181,123182,123183],{"id":120492,"depth":274,"text":120493},{"id":120562,"depth":274,"text":120563},{"id":120651,"depth":274,"text":120652},{"id":120896,"depth":274,"text":120897},{"id":120966,"depth":274,"text":120967},{"id":121033,"depth":274,"text":121034},{"id":121068,"depth":274,"text":121069},{"id":121123,"depth":274,"text":121124},{"id":121174,"depth":171,"text":121175,"children":123185},[123186,123187],{"id":121178,"depth":274,"text":121179},{"id":121258,"depth":274,"text":121259},{"id":121444,"depth":171,"text":121445},{"id":121617,"depth":171,"text":121618,"children":123190},[123191,123192,123193,123194,123195],{"id":121621,"depth":274,"text":121622},{"id":121662,"depth":274,"text":121663},{"id":121949,"depth":274,"text":121950},{"id":122322,"depth":274,"text":122323},{"id":122818,"depth":274,"text":122819},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":120260,"description":1878},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":123202,"title":123203,"body":123204,"description":1878,"extension":1879,"meta":123544,"navigation":1881,"path":123545,"seo":123546,"stem":123547,"__hash__":123548},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":123205,"toc":123542},[123206,123209,123214,123217,123463,123468,123471,123507,123510,123539],[10,123207,123203],{"id":123208},"_4-命令教程长期积累",[140,123210,123211],{},[143,123212,123213],{},"大多数命令",[24,123215,123216],{},"常用 Linux 命令速查：",[303,123218,123220],{"className":119065,"code":123219,"language":119067,"meta":308,"style":308},"# 文件与目录\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",[119,123221,123222,123227,123234,123241,123249,123256,123263,123271,123279,123286,123293,123301,123305,123310,123317,123325,123332,123336,123341,123348,123356,123364,123372,123380,123384,123389,123397,123404,123411,123419,123427,123431,123436,123445,123454],{"__ignoreMap":308},[312,123223,123224],{"class":314,"line":315},[312,123225,123226],{"class":318},"# 文件与目录\n",[312,123228,123229,123231],{"class":314,"line":171},[312,123230,28557],{"class":332},[312,123232,123233],{"class":318},"        # 列出目录内容\n",[312,123235,123236,123238],{"class":314,"line":274},[312,123237,103045],{"class":488},[312,123239,123240],{"class":318},"        # 切换目录\n",[312,123242,123243,123246],{"class":314,"line":298},[312,123244,123245],{"class":488},"pwd",[312,123247,123248],{"class":318},"       # 显示当前路径\n",[312,123250,123251,123253],{"class":314,"line":974},[312,123252,103035],{"class":332},[312,123254,123255],{"class":318},"     # 创建目录\n",[312,123257,123258,123260],{"class":314,"line":980},[312,123259,27118],{"class":332},[312,123261,123262],{"class":318},"        # 删除文件或目录\n",[312,123264,123265,123268],{"class":314,"line":997},[312,123266,123267],{"class":332},"cp",[312,123269,123270],{"class":318},"        # 复制文件或目录\n",[312,123272,123273,123276],{"class":314,"line":1003},[312,123274,123275],{"class":332},"mv",[312,123277,123278],{"class":318},"        # 移动\u002F重命名文件或目录\n",[312,123280,123281,123283],{"class":314,"line":1020},[312,123282,103052],{"class":332},[312,123284,123285],{"class":318},"     # 创建空文件\n",[312,123287,123288,123290],{"class":314,"line":1026},[312,123289,122533],{"class":332},[312,123291,123292],{"class":318},"       # 查看文件内容\n",[312,123294,123295,123298],{"class":314,"line":3418},[312,123296,123297],{"class":332},"head\u002Ftail",[312,123299,123300],{"class":318}," # 查看文件头部\u002F尾部\n",[312,123302,123303],{"class":314,"line":3423},[312,123304,4205],{"emptyLinePlaceholder":1881},[312,123306,123307],{"class":314,"line":3429},[312,123308,123309],{"class":318},"# 权限管理\n",[312,123311,123312,123314],{"class":314,"line":3434},[312,123313,26407],{"class":332},[312,123315,123316],{"class":318},"     # 修改文件权限\n",[312,123318,123319,123322],{"class":314,"line":3448},[312,123320,123321],{"class":332},"chown",[312,123323,123324],{"class":318},"     # 修改文件所有者\n",[312,123326,123327,123329],{"class":314,"line":3453},[312,123328,26372],{"class":332},[312,123330,123331],{"class":318},"      # 以管理员身份执行\n",[312,123333,123334],{"class":314,"line":3459},[312,123335,4205],{"emptyLinePlaceholder":1881},[312,123337,123338],{"class":314,"line":3480},[312,123339,123340],{"class":318},"# 系统信息\n",[312,123342,123343,123345],{"class":314,"line":3485},[312,123344,71981],{"class":332},[312,123346,123347],{"class":318},"     # 系统信息\n",[312,123349,123350,123353],{"class":314,"line":3499},[312,123351,123352],{"class":332},"df",[312,123354,123355],{"class":318},"        # 磁盘使用情况\n",[312,123357,123358,123361],{"class":314,"line":3504},[312,123359,123360],{"class":332},"free",[312,123362,123363],{"class":318},"      # 内存使用情况\n",[312,123365,123366,123369],{"class":314,"line":3533},[312,123367,123368],{"class":332},"top\u002Fhtop",[312,123370,123371],{"class":318},"  # 进程监控\n",[312,123373,123374,123377],{"class":314,"line":3538},[312,123375,123376],{"class":332},"ps",[312,123378,123379],{"class":318},"        # 查看进程\n",[312,123381,123382],{"class":314,"line":3555},[312,123383,4205],{"emptyLinePlaceholder":1881},[312,123385,123386],{"class":314,"line":3560},[312,123387,123388],{"class":318},"# 网络\n",[312,123390,123391,123394],{"class":314,"line":3565},[312,123392,123393],{"class":332},"ping",[312,123395,123396],{"class":318},"      # 测试网络连通性\n",[312,123398,123399,123401],{"class":314,"line":3570},[312,123400,28645],{"class":332},[312,123402,123403],{"class":318},"      # 发送 HTTP 请求\n",[312,123405,123406,123408],{"class":314,"line":3584},[312,123407,122057],{"class":332},[312,123409,123410],{"class":318},"      # 下载文件\n",[312,123412,123413,123416],{"class":314,"line":3589},[312,123414,123415],{"class":332},"ssh",[312,123417,123418],{"class":318},"       # 远程登录\n",[312,123420,123421,123424],{"class":314,"line":4382},[312,123422,123423],{"class":332},"scp",[312,123425,123426],{"class":318},"       # 远程文件传输\n",[312,123428,123429],{"class":314,"line":4396},[312,123430,4205],{"emptyLinePlaceholder":1881},[312,123432,123433],{"class":314,"line":4404},[312,123434,123435],{"class":318},"# 包管理（Debian\u002FUbuntu）\n",[312,123437,123438,123440,123442],{"class":314,"line":4409},[312,123439,119137],{"class":332},[312,123441,119116],{"class":339},[312,123443,123444],{"class":318},"   # 更新软件源\n",[312,123446,123447,123449,123451],{"class":314,"line":4415},[312,123448,119137],{"class":332},[312,123450,25630],{"class":339},[312,123452,123453],{"class":318},"  # 安装软件包\n",[312,123455,123456,123458,123460],{"class":314,"line":4421},[312,123457,119137],{"class":332},[312,123459,27875],{"class":339},[312,123461,123462],{"class":318},"   # 卸载软件包\n",[140,123464,123465],{"start":171},[143,123466,123467],{},"KDE Dolphin 以root打开",[24,123469,123470],{},"kde5",[303,123472,123474],{"className":119065,"code":123473,"language":119067,"meta":308,"style":308},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[119,123475,123476],{"__ignoreMap":308},[312,123477,123478,123481,123484,123487,123489,123491,123494,123497,123499,123502,123504],{"class":314,"line":315},[312,123479,123480],{"class":332},"pkexec",[312,123482,123483],{"class":339}," env",[312,123485,123486],{"class":339}," DISPLAY=",[312,123488,29939],{"class":324},[312,123490,29997],{"class":339},[312,123492,123493],{"class":324},"$XAUTHORITY ",[312,123495,123496],{"class":339},"KDE_SESSION_VERSION=",[312,123498,2264],{"class":488},[312,123500,123501],{"class":339}," KDE_FULL_SESSION=",[312,123503,3170],{"class":488},[312,123505,123506],{"class":339}," dolphin\n",[24,123508,123509],{},"kde6",[303,123511,123513],{"className":119065,"code":123512,"language":119067,"meta":308,"style":308},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[119,123514,123515],{"__ignoreMap":308},[312,123516,123517,123519,123521,123523,123525,123527,123529,123531,123533,123535,123537],{"class":314,"line":315},[312,123518,123480],{"class":332},[312,123520,123483],{"class":339},[312,123522,123486],{"class":339},[312,123524,29939],{"class":324},[312,123526,29997],{"class":339},[312,123528,123493],{"class":324},[312,123530,123496],{"class":339},[312,123532,2289],{"class":488},[312,123534,123501],{"class":339},[312,123536,3170],{"class":488},[312,123538,123506],{"class":339},[1856,123540,123541],{},"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":308,"searchDepth":171,"depth":171,"links":123543},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":123203,"description":1878},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123550,"title":123551,"body":123552,"description":1878,"extension":1879,"meta":123566,"navigation":1881,"path":123567,"seo":123568,"stem":123569,"__hash__":123570},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123553,"toc":123564},[123554,123557],[10,123555,123551],{"id":123556},"_5-各种环境配置",[24,123558,123559],{},[164,123560,123563],{"href":123561,"rel":123562},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[168],"电控组环境搭建大全",{"title":308,"searchDepth":171,"depth":171,"links":123565},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123551,"description":1878},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123572,"title":123573,"body":123574,"description":1878,"extension":1879,"meta":123922,"navigation":1881,"path":123923,"seo":123924,"stem":123925,"__hash__":123926},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123575,"toc":123914},[123576,123579,123583,123587,123591,123596,123603,123607,123900,123904,123911],[10,123577,123573],{"id":123578},"_6-拓展功能",[14,123580,123582],{"id":123581},"_61-wine","6.1 Wine",[14,123584,123586],{"id":123585},"_62-android","6.2 Android",[69,123588,123590],{"id":123589},"_621-i卡a卡","6.2.1 I卡、A卡",[140,123592,123593],{},[143,123594,123595],{},"Wayland-Waydroid(体验超级好)",[24,123597,123598,123599],{},"Waydroid 官网与安装指南：",[164,123600,123601],{"href":123601,"rel":123602},"https:\u002F\u002Fwaydro.id\u002F",[168],[69,123604,123606],{"id":123605},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[140,123608,123609],{},[143,123610,123611,123612,123614,123615,123619,123621,123624,123629,123826],{},"QEMU-KVM虚拟机 + BlissOS-X86",[55500,123613],{},"BlissOS 官网下载：",[164,123616,123617],{"href":123617,"rel":123618},"https:\u002F\u002Fblissos.org\u002F",[168],[55500,123620],{},[19,123622],{"alt":308,"src":123623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[140,123625,123626],{"start":274},[143,123627,123628],{},"比较推荐的配置",[303,123630,123632],{"className":119065,"code":123631,"language":119067,"meta":308,"style":308},"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",[119,123633,123634,123641,123651,123661,123671,123683,123693,123700,123710,123719,123728,123738,123748,123757,123767,123777,123789,123799,123808,123818],{"__ignoreMap":308},[312,123635,123636,123639],{"class":314,"line":315},[312,123637,123638],{"class":332},"qemu-system-x86_64",[312,123640,26474],{"class":488},[312,123642,123643,123646,123649],{"class":314,"line":171},[312,123644,123645],{"class":488},"        -M",[312,123647,123648],{"class":339}," q35,vmport=off",[312,123650,26474],{"class":488},[312,123652,123653,123656,123659],{"class":314,"line":274},[312,123654,123655],{"class":488},"        -accel",[312,123657,123658],{"class":339}," kvm",[312,123660,26474],{"class":488},[312,123662,123663,123666,123669],{"class":314,"line":298},[312,123664,123665],{"class":488},"        -cpu",[312,123667,123668],{"class":339}," qemu64,+sse3,+sse4.2",[312,123670,26474],{"class":488},[312,123672,123673,123676,123679,123681],{"class":314,"line":974},[312,123674,123675],{"class":488},"        -smp",[312,123677,123678],{"class":339}," 8,cores=",[312,123680,2238],{"class":488},[312,123682,26474],{"class":488},[312,123684,123685,123688,123691],{"class":314,"line":980},[312,123686,123687],{"class":488},"        -m",[312,123689,123690],{"class":339}," 6G",[312,123692,26474],{"class":488},[312,123694,123695,123698],{"class":314,"line":997},[312,123696,123697],{"class":488},"        -usb",[312,123699,26474],{"class":488},[312,123701,123702,123705,123708],{"class":314,"line":1003},[312,123703,123704],{"class":488},"        -device",[312,123706,123707],{"class":339}," virtio-tablet",[312,123709,26474],{"class":488},[312,123711,123712,123714,123717],{"class":314,"line":1020},[312,123713,123704],{"class":488},[312,123715,123716],{"class":339}," virtio-keyboard",[312,123718,26474],{"class":488},[312,123720,123721,123723,123726],{"class":314,"line":1026},[312,123722,123704],{"class":488},[312,123724,123725],{"class":339}," usb-tablet",[312,123727,26474],{"class":488},[312,123729,123730,123733,123736],{"class":314,"line":3418},[312,123731,123732],{"class":488},"        -bios",[312,123734,123735],{"class":339}," OVMF-pure-efi64.fd",[312,123737,26474],{"class":488},[312,123739,123740,123743,123746],{"class":314,"line":3423},[312,123741,123742],{"class":488},"        -net",[312,123744,123745],{"class":339}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[312,123747,26474],{"class":488},[312,123749,123750,123752,123755],{"class":314,"line":3429},[312,123751,123742],{"class":488},[312,123753,123754],{"class":339}," nic,model=virtio",[312,123756,26474],{"class":488},[312,123758,123759,123762,123765],{"class":314,"line":3434},[312,123760,123761],{"class":488},"        -audio",[312,123763,123764],{"class":339}," sdl,model=hda",[312,123766,26474],{"class":488},[312,123768,123769,123772,123775],{"class":314,"line":3448},[312,123770,123771],{"class":488},"        -display",[312,123773,123774],{"class":339}," sdl,gl=on,show-cursor=on",[312,123776,26474],{"class":488},[312,123778,123779,123781,123784,123787],{"class":314,"line":3453},[312,123780,123704],{"class":488},[312,123782,123783],{"class":339}," virtio-vga-gl,xres=1920,yres=",[312,123785,123786],{"class":488},"1080",[312,123788,26474],{"class":488},[312,123790,123791,123794,123797],{"class":314,"line":3459},[312,123792,123793],{"class":488},"        -drive",[312,123795,123796],{"class":339}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[312,123798,26474],{"class":488},[312,123800,123801,123803,123806],{"class":314,"line":3480},[312,123802,123793],{"class":488},[312,123804,123805],{"class":339}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[312,123807,26474],{"class":488},[312,123809,123810,123813,123816],{"class":314,"line":3485},[312,123811,123812],{"class":488},"        -monitor",[312,123814,123815],{"class":339}," stdio",[312,123817,26474],{"class":488},[312,123819,123820,123823],{"class":314,"line":3499},[312,123821,123822],{"class":488},"        -serial",[312,123824,123825],{"class":339}," none\n",[140,123827,123828],{"start":974},[143,123829,123830,123831],{},"常用操作：",[140,123832,123833,123836,123892],{},[143,123834,123835],{},"全屏：Ctrl+Alt+F",[143,123837,123838,123839,123844],{},"adb调试",[140,123840,123841],{},[143,123842,123843],{},"使Linux与Android用ADB连接。",[303,123845,123847],{"className":119065,"code":123846,"language":119067,"meta":308,"style":308},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[119,123848,123849,123854,123865,123870,123882,123887],{"__ignoreMap":308},[312,123850,123851],{"class":314,"line":315},[312,123852,123853],{"class":318},"# 连接安卓\n",[312,123855,123856,123859,123862],{"class":314,"line":171},[312,123857,123858],{"class":332},"adb",[312,123860,123861],{"class":339}," connect",[312,123863,123864],{"class":488}," 127.0.0.1\n",[312,123866,123867],{"class":314,"line":274},[312,123868,123869],{"class":318},"# 打开shell\n",[312,123871,123872,123874,123876,123879],{"class":314,"line":298},[312,123873,123858],{"class":332},[312,123875,28679],{"class":488},[312,123877,123878],{"class":339}," 127.0.0.1:5555",[312,123880,123881],{"class":339}," shell\n",[312,123883,123884],{"class":314,"line":974},[312,123885,123886],{"class":318},"# 使用root权限\n",[312,123888,123889],{"class":314,"line":980},[312,123890,123891],{"class":332},"su\n",[143,123893,123894,123895],{},"中文输入法",[140,123896,123897],{},[143,123898,123899],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123901,123903],{"id":123902},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[24,123905,123906,123907],{},"rEFInd 官网与文档：",[164,123908,123909],{"href":123909,"rel":123910},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[168],[1856,123912,123913],{},"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":308,"searchDepth":171,"depth":171,"links":123915},[123916,123917,123921],{"id":123581,"depth":171,"text":123582},{"id":123585,"depth":171,"text":123586,"children":123918},[123919,123920],{"id":123589,"depth":274,"text":123590},{"id":123605,"depth":274,"text":123606},{"id":123902,"depth":171,"text":123903},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123573,"description":1878},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123928,"title":123929,"body":123930,"description":1878,"extension":1879,"meta":127228,"navigation":1881,"path":127229,"seo":127230,"stem":127231,"__hash__":127232},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123931,"toc":127202},[123932,123935,123939,123942,123949,124199,124202,124274,124277,124281,124285,124290,124293,124296,124299,124304,124307,124310,124313,124318,124321,124326,124329,124332,124337,124340,124345,124348,124352,124356,124359,124364,124367,124381,124384,124387,124396,124399,124408,124411,124414,124423,124426,124435,124438,124441,124450,124453,124456,124471,124474,124477,124486,124491,124494,124497,124506,124509,124518,124521,124530,124533,124542,124547,124550,124558,124563,124566,124575,124578,124586,124591,124594,124603,124606,124609,124613,124616,124621,124624,124629,124643,124648,124653,124664,124669,124675,124680,124695,124700,124703,124708,124713,124718,124726,124731,124738,124743,124754,124759,124762,124766,124769,124772,124777,124780,124799,124804,124807,124816,124821,124824,124846,124849,124879,124882,124887,124890,124904,124909,124928,124931,124934,124939,124951,124956,124961,124964,124969,124972,124987,124990,124995,125000,125004,125009,125049,125052,125056,125062,125068,125073,125076,125083,125088,125095,125098,125101,125107,125121,125124,125184,125187,125201,125213,125216,125219,125222,125286,125289,125292,125295,125315,125318,125323,125330,125334,125337,125341,125346,125351,125355,125358,125361,125403,125408,125411,125433,125448,125450,125455,125467,125527,125529,125531,125585,125587,125589,125595,125600,125603,125608,125612,125615,125677,125682,125685,125687,125691,125703,125785,125787,125789,125843,125849,125851,125855,125860,125862,125867,125871,125891,125926,125930,125933,125936,125939,125946,125949,125961,125964,125979,125982,126001,126049,126052,126069,126072,126086,126091,126094,126103,126118,126130,126168,126173,126182,126187,126192,126218,126227,126231,126235,126240,126243,126247,126251,126256,126259,126264,126267,126272,126275,126280,126283,126287,126292,126295,126300,126303,126307,126312,126315,126320,126323,126328,126331,126335,126340,126343,126348,126351,126356,126359,126363,126368,126371,126376,126379,126384,126387,126392,126395,126400,126403,126408,126411,126415,126420,126423,126428,126435,126439,126444,126447,126452,126455,126459,126464,126467,126470,126473,126476,126479,126483,126486,126496,126501,126506,126528,126533,126538,126545,126549,126554,126557,126560,126565,126568,126571,126574,126577,126580,126583,126586,126589,126592,126595,126598,126601,126606,126611,126616,126621,126626,126631,126636,126639,126643,126646,126650,126655,126660,126665,126670,126674,126680,126688,126693,126696,126701,126716,126719,126724,126758,126773,126776,126831,126857,126869,126872,126881,126884,126899,126904,126907,126913,126918,126921,126926,126929,126934,126939,126946,126949,126964,126967,127002,127007,127015,127053,127056,127059,127064,127067,127072,127083,127117,127122,127125,127134,127139,127145,127148,127153,127162,127167,127170,127173,127178,127186,127189,127194,127199],[10,123933,123929],{"id":123934},"_7-其他操作",[14,123936,123938],{"id":123937},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[24,123940,123941],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[24,123943,123944,123945,123948],{},"进入工控机的硬盘目录，进入",[119,123946,123947],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[303,123950,123954],{"className":123951,"code":123952,"language":123953,"meta":308,"style":308},"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",[119,123955,123956,123964,123975,123982,123989,124001,124008,124020,124031,124042,124049,124056,124063,124075,124087,124094,124106,124118,124125,124137,124149,124161,124172,124179,124190],{"__ignoreMap":308},[312,123957,123958,123961],{"class":314,"line":315},[312,123959,123960],{"class":328},"network",[312,123962,123963],{"class":324},": \n",[312,123965,123966,123969,123971,123973],{"class":314,"line":171},[312,123967,123968],{"class":328},"  version",[312,123970,492],{"class":324},[312,123972,2027],{"class":488},[312,123974,4479],{"class":324},[312,123976,123977,123980],{"class":314,"line":274},[312,123978,123979],{"class":328},"  wifis",[312,123981,123963],{"class":324},[312,123983,123984,123987],{"class":314,"line":298},[312,123985,123986],{"class":328},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[312,123988,123963],{"class":324},[312,123990,123991,123994,123996,123999],{"class":314,"line":974},[312,123992,123993],{"class":328},"      renderer",[312,123995,492],{"class":324},[312,123997,123998],{"class":339},"NetworkManager",[312,124000,4479],{"class":324},[312,124002,124003,124006],{"class":314,"line":980},[312,124004,124005],{"class":328},"      match",[312,124007,123963],{"class":324},[312,124009,124010,124013,124015,124018],{"class":314,"line":997},[312,124011,124012],{"class":328},"        name",[312,124014,492],{"class":324},[312,124016,124017],{"class":339},"\"wlan0\"",[312,124019,4479],{"class":324},[312,124021,124022,124025,124027,124029],{"class":314,"line":1003},[312,124023,124024],{"class":328},"      dhcp4",[312,124026,492],{"class":324},[312,124028,3170],{"class":488},[312,124030,4479],{"class":324},[312,124032,124033,124036,124038,124040],{"class":314,"line":1020},[312,124034,124035],{"class":328},"      dhcp6",[312,124037,492],{"class":324},[312,124039,3170],{"class":488},[312,124041,4479],{"class":324},[312,124043,124044,124047],{"class":314,"line":1026},[312,124045,124046],{"class":328},"      access-points",[312,124048,123963],{"class":324},[312,124050,124051,124054],{"class":314,"line":3418},[312,124052,124053],{"class":339},"        \"EMIS_Vinci_Robocon_5G\"",[312,124055,123963],{"class":324},[312,124057,124058,124061],{"class":314,"line":3423},[312,124059,124060],{"class":328},"          auth",[312,124062,123963],{"class":324},[312,124064,124065,124068,124070,124073],{"class":314,"line":3429},[312,124066,124067],{"class":328},"            key-management",[312,124069,492],{"class":324},[312,124071,124072],{"class":339},"\"psk\"",[312,124074,4479],{"class":324},[312,124076,124077,124080,124082,124085],{"class":314,"line":3434},[312,124078,124079],{"class":328},"            password",[312,124081,492],{"class":324},[312,124083,124084],{"class":339},"\"vinci666\"",[312,124086,4479],{"class":324},[312,124088,124089,124092],{"class":314,"line":3448},[312,124090,124091],{"class":328},"          networkmanager",[312,124093,123963],{"class":324},[312,124095,124096,124099,124101,124104],{"class":314,"line":3453},[312,124097,124098],{"class":328},"            uuid",[312,124100,492],{"class":324},[312,124102,124103],{"class":339},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[312,124105,4479],{"class":324},[312,124107,124108,124111,124113,124116],{"class":314,"line":3459},[312,124109,124110],{"class":328},"            name",[312,124112,492],{"class":324},[312,124114,124115],{"class":339},"\"EMIS_Vinci_Robocon_5G\"",[312,124117,4479],{"class":324},[312,124119,124120,124123],{"class":314,"line":3480},[312,124121,124122],{"class":328},"            passthrough",[312,124124,123963],{"class":324},[312,124126,124127,124130,124132,124135],{"class":314,"line":3485},[312,124128,124129],{"class":328},"              wifi-security.auth-alg",[312,124131,492],{"class":324},[312,124133,124134],{"class":339},"\"open\"",[312,124136,4479],{"class":324},[312,124138,124139,124142,124144,124147],{"class":314,"line":3499},[312,124140,124141],{"class":328},"              ipv6.addr-gen-mode",[312,124143,492],{"class":324},[312,124145,124146],{"class":339},"\"default\"",[312,124148,4479],{"class":324},[312,124150,124151,124154,124156,124159],{"class":314,"line":3504},[312,124152,124153],{"class":328},"              ipv6.ip6-privacy",[312,124155,492],{"class":324},[312,124157,124158],{"class":339},"\"-1\"",[312,124160,4479],{"class":324},[312,124162,124163,124166,124168,124170],{"class":314,"line":3533},[312,124164,124165],{"class":328},"              proxy._",[312,124167,492],{"class":324},[312,124169,495],{"class":339},[312,124171,4479],{"class":324},[312,124173,124174,124177],{"class":314,"line":3538},[312,124175,124176],{"class":328},"      networkmanager",[312,124178,123963],{"class":324},[312,124180,124181,124184,124186,124188],{"class":314,"line":3555},[312,124182,124183],{"class":328},"        uuid",[312,124185,492],{"class":324},[312,124187,124103],{"class":339},[312,124189,4479],{"class":324},[312,124191,124192,124194,124196],{"class":314,"line":3560},[312,124193,124012],{"class":328},[312,124195,492],{"class":324},[312,124197,124198],{"class":339},"\"EMIS_Vinci_Robocon_5G\"\n",[24,124200,124201],{},"将其改为新wifi的名和密码：",[303,124203,124205],{"className":123951,"code":124204,"language":123953,"meta":308,"style":308},"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",[119,124206,124207,124213,124222,124228,124235,124244,124252,124258,124264],{"__ignoreMap":308},[312,124208,124209,124211],{"class":314,"line":315},[312,124210,123960],{"class":328},[312,124212,5544],{"class":324},[312,124214,124215,124217,124219],{"class":314,"line":171},[312,124216,123968],{"class":328},[312,124218,492],{"class":324},[312,124220,124221],{"class":488},"2\n",[312,124223,124224,124226],{"class":314,"line":274},[312,124225,123979],{"class":328},[312,124227,5544],{"class":324},[312,124229,124230,124233],{"class":314,"line":298},[312,124231,124232],{"class":328},"    wlan0",[312,124234,5544],{"class":324},[312,124236,124237,124239,124241],{"class":314,"line":974},[312,124238,124024],{"class":328},[312,124240,492],{"class":324},[312,124242,124243],{"class":488},"true\n",[312,124245,124246,124248,124250],{"class":314,"line":980},[312,124247,124035],{"class":328},[312,124249,492],{"class":324},[312,124251,124243],{"class":488},[312,124253,124254,124256],{"class":314,"line":997},[312,124255,124046],{"class":328},[312,124257,5544],{"class":324},[312,124259,124260,124262],{"class":314,"line":1003},[312,124261,124053],{"class":339},[312,124263,5544],{"class":324},[312,124265,124266,124269,124271],{"class":314,"line":1020},[312,124267,124268],{"class":328},"          password",[312,124270,492],{"class":324},[312,124272,124273],{"class":339},"\"vinci666\"\n",[24,124275,124276],{},"工控机开机即可连上网。",[14,124278,124280],{"id":124279},"_72-ssh远程开发","7.2 SSH远程开发",[69,124282,124284],{"id":124283},"_721-环境准备","7.2.1 环境准备",[24,124286,124287],{},[27,124288,124289],{},"1.硬件准备",[24,124291,124292],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[24,124294,124295],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[24,124297,124298],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[24,124300,124301],{},[27,124302,124303],{},"2.设置固定IP",[24,124305,124306],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[24,124308,124309],{},"1.进入设置界面",[24,124311,124312],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[24,124314,124315],{},[19,124316],{"alt":308,"src":124317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[24,124319,124320],{},"2.配置所连接的网络",[24,124322,124323],{},[19,124324],{"alt":308,"src":124325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[24,124327,124328],{},"3.设置固定IP",[24,124330,124331],{},"查看当前IP地址。",[24,124333,124334],{},[19,124335],{"alt":308,"src":124336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[24,124338,124339],{},"设置固定IP。",[24,124341,124342],{},[19,124343],{"alt":308,"src":124344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[24,124346,124347],{},"至此，IP配置完毕。",[69,124349,124351],{"id":124350},"_722-环境搭建","7.2.2 环境搭建",[24,124353,124354],{},[27,124355,27549],{},[24,124357,124358],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[24,124360,124361],{},[27,124362,124363],{},"实现",[24,124365,124366],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[140,124368,124369,124372,124375,124378],{},[143,124370,124371],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[143,124373,124374],{},"远程主机启动SSH服务；",[143,124376,124377],{},"本地主机登陆远程主机；",[143,124379,124380],{},"实现数据传输。",[24,124382,124383],{},"1.安装SSH客户端与服务端",[24,124385,124386],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[303,124388,124390],{"className":122584,"code":124389,"language":122586,"meta":122587,"style":308}," sudo apt install openssh-server\n",[119,124391,124392],{"__ignoreMap":308},[312,124393,124394],{"class":314,"line":315},[312,124395,124389],{},[24,124397,124398],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[303,124400,124402],{"className":122584,"code":124401,"language":122586,"meta":122587,"style":308},"sudo apt install openssh-client\n",[119,124403,124404],{"__ignoreMap":308},[312,124405,124406],{"class":314,"line":315},[312,124407,124401],{},[24,124409,124410],{},"2.远程主机启动SSH服务",[24,124412,124413],{},"远程主机启动 ssh 服务命令如下：",[303,124415,124417],{"className":122584,"code":124416,"language":122586,"meta":122587,"style":308},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[119,124418,124419],{"__ignoreMap":308},[312,124420,124421],{"class":314,"line":315},[312,124422,124416],{},[24,124424,124425],{},"启动后可使用如下命令查看服务是否正常运行：",[303,124427,124429],{"className":122584,"code":124428,"language":122586,"meta":122587,"style":308},"ps -e | grep ssh\n",[119,124430,124431],{"__ignoreMap":308},[312,124432,124433],{"class":314,"line":315},[312,124434,124428],{},[24,124436,124437],{},"如果启动成功，会包含 sshd 程序。",[24,124439,124440],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[303,124442,124444],{"className":122584,"code":124443,"language":122586,"meta":122587,"style":308},"sudo systemctl enable ssh\n",[119,124445,124446],{"__ignoreMap":308},[312,124447,124448],{"class":314,"line":315},[312,124449,124443],{},[24,124451,124452],{},"3.本地远程登录",[24,124454,124455],{},"登录远程主机可以调用如下命令:",[303,124457,124459],{"className":119065,"code":124458,"language":119067,"meta":308,"style":308},"ssh -X 用户名@ip地址\n",[119,124460,124461],{"__ignoreMap":308},[312,124462,124463,124465,124468],{"class":314,"line":315},[312,124464,123415],{"class":332},[312,124466,124467],{"class":488}," -X",[312,124469,124470],{"class":339}," 用户名@ip地址\n",[24,124472,124473],{},"然后根据提示，录入登陆密码，即可成功登录。",[24,124475,124476],{},"如果退出，可以调用exit命令：",[303,124478,124480],{"className":122584,"code":124479,"language":122586,"meta":122587,"style":308},"exit\n",[119,124481,124482],{"__ignoreMap":308},[312,124483,124484],{"class":314,"line":315},[312,124485,124479],{},[24,124487,124488],{},[27,124489,124490],{},"4.实现数据传输",[24,124492,124493],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[24,124495,124496],{},"上传文件指令格式如下：",[303,124498,124500],{"className":122584,"code":124499,"language":122586,"meta":122587,"style":308},"scp 本地文件路径 账号@ip:路径\n",[119,124501,124502],{"__ignoreMap":308},[312,124503,124504],{"class":314,"line":315},[312,124505,124499],{},[24,124507,124508],{},"上传文件夹指令格式如下：",[303,124510,124512],{"className":122584,"code":124511,"language":122586,"meta":122587,"style":308},"scp -r 本地文件夹路径 账号@ip:路径\n",[119,124513,124514],{"__ignoreMap":308},[312,124515,124516],{"class":314,"line":315},[312,124517,124511],{},[24,124519,124520],{},"下载文件指令格式如下：",[303,124522,124524],{"className":122584,"code":124523,"language":122586,"meta":122587,"style":308},"scp 账号@ip:路径 本地文件夹路径\n",[119,124525,124526],{"__ignoreMap":308},[312,124527,124528],{"class":314,"line":315},[312,124529,124523],{},[24,124531,124532],{},"下载文件夹指令格式如下：",[303,124534,124536],{"className":122584,"code":124535,"language":122586,"meta":122587,"style":308},"scp -r 账号@ip:路径 本地文件夹路径\n",[119,124537,124538],{"__ignoreMap":308},[312,124539,124540],{"class":314,"line":315},[312,124541,124535],{},[24,124543,124544],{},[27,124545,124546],{},"优化",[24,124548,124549],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[140,124551,124552,124555],{},[143,124553,124554],{},"本地生成密钥对；",[143,124556,124557],{},"将公钥上传至远程主机。",[24,124559,124560],{},[27,124561,124562],{},"1.生成密钥对",[24,124564,124565],{},"本地客户端生成公私钥：（一路回车默认即可）",[303,124567,124569],{"className":122584,"code":124568,"language":122586,"meta":122587,"style":308},"ssh-keygen\n",[119,124570,124571],{"__ignoreMap":308},[312,124572,124573],{"class":314,"line":315},[312,124574,124568],{},[24,124576,124577],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[140,124579,124580,124583],{},[143,124581,124582],{},"id_rsa （私钥）；",[143,124584,124585],{},"id_rsa.pub (公钥)。",[24,124587,124588],{},[27,124589,124590],{},"2.公钥上传",[24,124592,124593],{},"上传指令如下：",[303,124595,124597],{"className":122584,"code":124596,"language":122586,"meta":122587,"style":308},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[119,124598,124599],{"__ignoreMap":308},[312,124600,124601],{"class":314,"line":315},[312,124602,124596],{},[24,124604,124605],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[24,124607,124608],{},"以后再远程登录就无需录入密码了。",[69,124610,124612],{"id":124611},"_723-使用vscode优化","7.2.3 使用VScode优化",[24,124614,124615],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[24,124617,124618],{},[27,124619,124620],{},"1.准备工作",[24,124622,124623],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[24,124625,124626],{},[27,124627,124628],{},"2.为VScode安装远程开发插件",[24,124630,124631,124632,124635,124636,124639,124640,30181],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[119,124633,124634],{},"扩展：商店","的搜索栏输入",[119,124637,124638],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[119,124641,124642],{},"安装",[24,124644,124645],{},[19,124646],{"alt":308,"src":124647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[24,124649,124650],{},[27,124651,124652],{},"3.配置远程连接",[24,124654,124655,124656,124659,124660,124663],{},"步骤1：使用快捷键",[119,124657,124658],{},"ctrl + shift + p","打开命令输入窗口，并输入",[119,124661,124662],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[24,124665,124666],{},[19,124667],{"alt":308,"src":124668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[24,124670,124671,124672,30181],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[119,124673,124674],{},"Add New SSH Host",[24,124676,124677],{},[19,124678],{"alt":308,"src":124679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[24,124681,124682,124683,124686,124687,124690,124691,124694],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[119,124684,124685],{},"ssh +X ubuntu@192.168.43.164","，其中，",[119,124688,124689],{},"ubuntu","需要替换为你的登录用户名，",[119,124692,124693],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[24,124696,124697],{},[19,124698],{"alt":308,"src":124699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[24,124701,124702],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[24,124704,124705],{},[19,124706],{"alt":308,"src":124707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[24,124709,124710],{},[19,124711],{"alt":308,"src":124712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[24,124714,124715],{},[27,124716,124717],{},"4.使用",[24,124719,124720,124721,124659,124723,124725],{},"步骤1：继续使用快捷键",[119,124722,124658],{},[119,124724,124662],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[24,124727,124728],{},[19,124729],{"alt":308,"src":124730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[24,124732,124733,124734,124737],{},"或者，也可以点击侧边栏的",[119,124735,124736],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[24,124739,124740],{},[19,124741],{"alt":308,"src":124742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[24,124744,124745,124746,124749,124750,124753],{},"步骤2：选择菜单栏的",[119,124747,124748],{},"文件","下的",[119,124751,124752],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[24,124755,124756],{},[19,124757],{"alt":308,"src":124758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[24,124760,124761],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124763,124765],{"id":124764},"_73-远程桌面","7.3 远程桌面",[24,124767,124768],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[24,124770,124771],{},"我们选择使用VNC来看。",[140,124773,124774],{},[143,124775,124776],{},"安装VNC服务器：",[24,124778,124779],{},"这里以TigerVNC为例进行安装：",[303,124781,124783],{"className":119065,"code":124782,"language":119067,"meta":308,"style":308},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[119,124784,124785],{"__ignoreMap":308},[312,124786,124787,124789,124791,124793,124796],{"class":314,"line":315},[312,124788,26372],{"class":332},[312,124790,119086],{"class":339},[312,124792,25630],{"class":339},[312,124794,124795],{"class":339}," tigervnc-standalone-server",[312,124797,124798],{"class":339}," tigervnc-common\n",[140,124800,124801],{"start":171},[143,124802,124803],{},"设置VNC密码：",[24,124805,124806],{},"为VNC用户设置密码，运行以下命令：",[303,124808,124810],{"className":119065,"code":124809,"language":119067,"meta":308,"style":308},"vncpasswd\n",[119,124811,124812],{"__ignoreMap":308},[312,124813,124814],{"class":314,"line":315},[312,124815,124809],{"class":332},[140,124817,124818],{"start":274},[143,124819,124820],{},"配置VNC启动脚本:",[24,124822,124823],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[303,124825,124827],{"className":119065,"code":124826,"language":119067,"meta":308,"style":308},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[119,124828,124829,124838],{"__ignoreMap":308},[312,124830,124831,124833,124835],{"class":314,"line":315},[312,124832,103035],{"class":332},[312,124834,31012],{"class":488},[312,124836,124837],{"class":339}," ~\u002F.vnc\n",[312,124839,124840,124843],{"class":314,"line":171},[312,124841,124842],{"class":332},"nano",[312,124844,124845],{"class":339}," ~\u002F.vnc\u002Fxstartup\n",[24,124847,124848],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[303,124850,124852],{"className":119065,"code":124851,"language":119067,"meta":308,"style":308},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[119,124853,124854,124859,124867,124874],{"__ignoreMap":308},[312,124855,124856],{"class":314,"line":315},[312,124857,124858],{"class":318},"#!\u002Fbin\u002Fsh\n",[312,124860,124861,124864],{"class":314,"line":171},[312,124862,124863],{"class":488},"unset",[312,124865,124866],{"class":339}," SESSION_MANAGER\n",[312,124868,124869,124871],{"class":314,"line":274},[312,124870,124863],{"class":488},[312,124872,124873],{"class":339}," DBUS_SESSION_BUS_ADDRESS\n",[312,124875,124876],{"class":314,"line":298},[312,124877,124878],{"class":332},"gnome-session\n",[24,124880,124881],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[140,124883,124884],{"start":298},[143,124885,124886],{},"给予执行权限：",[24,124888,124889],{},"为xstartup文件设置执行权限：",[303,124891,124893],{"className":119065,"code":124892,"language":119067,"meta":308,"style":308},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[119,124894,124895],{"__ignoreMap":308},[312,124896,124897,124899,124902],{"class":314,"line":315},[312,124898,26407],{"class":332},[312,124900,124901],{"class":339}," +x",[312,124903,124845],{"class":339},[140,124905,124906],{"start":974},[143,124907,124908],{},"启动VNC服务器：",[303,124910,124912],{"className":119065,"code":124911,"language":119067,"meta":308,"style":308},"vncserver -geometry 1920x1080 -localhost=0\n",[119,124913,124914],{"__ignoreMap":308},[312,124915,124916,124919,124922,124925],{"class":314,"line":315},[312,124917,124918],{"class":332},"vncserver",[312,124920,124921],{"class":488}," -geometry",[312,124923,124924],{"class":339}," 1920x1080",[312,124926,124927],{"class":488}," -localhost=0\n",[24,124929,124930],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[24,124932,124933],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[140,124935,124936],{"start":980},[143,124937,124938],{},"查看已开启的VNC服务器：",[303,124940,124942],{"className":119065,"code":124941,"language":119067,"meta":308,"style":308},"vncserver -list\n",[119,124943,124944],{"__ignoreMap":308},[312,124945,124946,124948],{"class":314,"line":315},[312,124947,124918],{"class":332},[312,124949,124950],{"class":488}," -list\n",[24,124952,124953],{},[19,124954],{"alt":308,"src":124955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[140,124957,124958],{"start":997},[143,124959,124960],{},"连接到VNC服务器：",[24,124962,124963],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[140,124965,124966],{"start":1003},[143,124967,124968],{},"停止VNC服务器：",[24,124970,124971],{},"如果需要停止VNC服务器，可以使用以下命令：",[303,124973,124975],{"className":119065,"code":124974,"language":119067,"meta":308,"style":308},"vncserver -kill :1\n",[119,124976,124977],{"__ignoreMap":308},[312,124978,124979,124981,124984],{"class":314,"line":315},[312,124980,124918],{"class":332},[312,124982,124983],{"class":488}," -kill",[312,124985,124986],{"class":339}," :1\n",[24,124988,124989],{},"将:1替换为你实际使用的显示编号。",[24,124991,124992],{},[19,124993],{"alt":308,"src":124994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[24,124996,124997],{},[19,124998],{"alt":308,"src":124999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,125001,125003],{"id":125002},"_74-usb端口设置","7.4 USB端口设置",[24,125005,125006],{},[27,125007,125008],{},"首先先配置好权限",[303,125010,125012],{"className":119065,"code":125011,"language":119067,"meta":308,"style":308},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[119,125013,125014,125019,125032,125039,125044],{"__ignoreMap":308},[312,125015,125016],{"class":314,"line":315},[312,125017,125018],{"class":318},"# 将用户权限提高\n",[312,125020,125021,125023,125025,125027,125030],{"class":314,"line":171},[312,125022,26372],{"class":332},[312,125024,28370],{"class":339},[312,125026,28373],{"class":488},[312,125028,125029],{"class":339}," dialout",[312,125031,28378],{"class":324},[312,125033,125034,125036],{"class":314,"line":274},[312,125035,28397],{"class":332},[312,125037,125038],{"class":339}," dialout\n",[312,125040,125041],{"class":314,"line":298},[312,125042,125043],{"class":318},"# 查看下面命令是否输出dialout（若输出才正常）\n",[312,125045,125046],{"class":314,"line":974},[312,125047,125048],{"class":332},"groups\n",[24,125050,125051],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[69,125053,125055],{"id":125054},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[24,125057,125058,125061],{},[27,125059,125060],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[24,125063,125064,125067],{},[27,125065,125066],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[24,125069,125070],{},[27,125071,125072],{},"流程如下：",[24,125074,125075],{},"（1）.查找设备idVendor和idProduct",[24,125077,125078,125079,125082],{},"接入两个USB设备，在终端调用指令",[119,125080,125081],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[24,125084,125085],{},[19,125086],{"alt":308,"src":125087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[24,125089,125090,125091,125094],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[119,125092,125093],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[24,125096,125097],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[24,125099,125100],{},"（2）.编写映射规则",[24,125102,907,125103,125106],{},[119,125104,125105],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[303,125108,125110],{"className":119065,"code":125109,"language":119067,"meta":308,"style":308},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[119,125111,125112],{"__ignoreMap":308},[312,125113,125114,125116,125118],{"class":314,"line":315},[312,125115,26372],{"class":332},[312,125117,120352],{"class":339},[312,125119,125120],{"class":339}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[24,125122,125123],{},"输入如下内容：",[303,125125,125127],{"className":119065,"code":125126,"language":119067,"meta":308,"style":308},"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",[119,125128,125129,125159],{"__ignoreMap":308},[312,125130,125131,125134,125136,125139,125142,125145,125148,125150,125153,125156],{"class":314,"line":315},[312,125132,125133],{"class":324},"KERNEL",[312,125135,336],{"class":1436},[312,125137,125138],{"class":339},"=\"ttyUSB*\",",[312,125140,125141],{"class":332}," ATTRS",[312,125143,125144],{"class":339},"{idVendor}==",[312,125146,125147],{"class":332},"\"10c4\"",[312,125149,2323],{"class":332},[312,125151,125152],{"class":339}," ATTRS{idProduct}==\"ea60\",",[312,125154,125155],{"class":339}," MODE:=\"0777\",",[312,125157,125158],{"class":339}," SYMLINK+=\"mylidar\"\n",[312,125160,125161,125163,125165,125167,125169,125171,125174,125176,125179,125181],{"class":314,"line":171},[312,125162,125133],{"class":324},[312,125164,336],{"class":1436},[312,125166,125138],{"class":339},[312,125168,125141],{"class":332},[312,125170,125144],{"class":339},[312,125172,125173],{"class":332},"\"1a86\"",[312,125175,2323],{"class":332},[312,125177,125178],{"class":339}," ATTRS{idProduct}==\"7523\",",[312,125180,125155],{"class":339},[312,125182,125183],{"class":339}," SYMLINK+=\"mycar\"\n",[24,125185,125186],{},"代码解释：",[243,125188,125189,125192,125195,125198],{},[143,125190,125191],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[143,125193,125194],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[143,125196,125197],{},"SYMLINK是符号连接，即绑定的别名；",[143,125199,125200],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[24,125202,125203,125204,125207,125210],{},"***小提示：***",[25350,125205,125206],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[119,125208,125209],{},"\u002Fetc\u002Fudev\u002Frule.d",[25350,125211,125212],{},"目录即可。",[24,125214,125215],{},"表格 还在加载中，请等待加载完成后再尝试复制",[24,125217,125218],{},"（3）.使规则生效",[24,125220,125221],{},"在终端下输入如下指令：",[303,125223,125225],{"className":119065,"code":125224,"language":119067,"meta":308,"style":308},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[119,125226,125227,125232,125244,125255,125259,125264,125277],{"__ignoreMap":308},[312,125228,125229],{"class":314,"line":315},[312,125230,125231],{"class":318},"# Ubuntu用下方命令\n",[312,125233,125234,125236,125238,125241],{"class":314,"line":171},[312,125235,26372],{"class":332},[312,125237,121817],{"class":339},[312,125239,125240],{"class":339}," udev",[312,125242,125243],{"class":339}," reload\n",[312,125245,125246,125248,125250,125252],{"class":314,"line":274},[312,125247,26372],{"class":332},[312,125249,121817],{"class":339},[312,125251,125240],{"class":339},[312,125253,125254],{"class":339}," restart\n",[312,125256,125257],{"class":314,"line":298},[312,125258,4205],{"emptyLinePlaceholder":1881},[312,125260,125261],{"class":314,"line":974},[312,125262,125263],{"class":318},"#Fedora用下方命令\n",[312,125265,125266,125268,125271,125274],{"class":314,"line":980},[312,125267,26372],{"class":332},[312,125269,125270],{"class":339}," udevadm",[312,125272,125273],{"class":339}," control",[312,125275,125276],{"class":488}," --reload\n",[312,125278,125279,125281,125283],{"class":314,"line":997},[312,125280,26372],{"class":332},[312,125282,125270],{"class":339},[312,125284,125285],{"class":339}," trigger\n",[24,125287,125288],{},"再重新插拔设备即可。",[24,125290,125291],{},"（4）.测试",[24,125293,125294],{},"终端下输入如下指令",[303,125296,125298],{"className":119065,"code":125297,"language":119067,"meta":308,"style":308},"ll \u002Fdev | grep ttyUSB\n",[119,125299,125300],{"__ignoreMap":308},[312,125301,125302,125305,125308,125310,125312],{"class":314,"line":315},[312,125303,125304],{"class":332},"ll",[312,125306,125307],{"class":339}," \u002Fdev",[312,125309,26905],{"class":1436},[312,125311,32032],{"class":332},[312,125313,125314],{"class":339}," ttyUSB\n",[24,125316,125317],{},"运行结果如下：",[24,125319,125320],{},[19,125321],{"alt":308,"src":125322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[24,125324,125325,125326,125329],{},"也可以多次插拔USB设备，会发现设备端口",[119,125327,125328],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[24,125331,125332],{},[27,125333,119733],{},[24,125335,125336],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[69,125338,125340],{"id":125339},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[24,125342,125343,125345],{},[27,125344,125060],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[24,125347,125348,125350],{},[27,125349,125066],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[24,125352,125353],{},[27,125354,125072],{},[24,125356,125357],{},"（1）.查看所连接的主机USB接口的KERNELS",[24,125359,125360],{},"调用如下指令查看第一台雷达的USB信息：",[303,125362,125364],{"className":119065,"code":125363,"language":119067,"meta":308,"style":308},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[119,125365,125366,125386],{"__ignoreMap":308},[312,125367,125368,125371,125373,125376,125379,125381,125383],{"class":314,"line":315},[312,125369,125370],{"class":332},"udevadm",[312,125372,71598],{"class":339},[312,125374,125375],{"class":488}," --attribute-walk",[312,125377,125378],{"class":488}," --name=\u002Fdev\u002FttyUSB0",[312,125380,26905],{"class":1436},[312,125382,32032],{"class":332},[312,125384,125385],{"class":339}," KERNELS\n",[312,125387,125388,125390,125392,125394,125397,125399,125401],{"class":314,"line":171},[312,125389,125370],{"class":332},[312,125391,71598],{"class":339},[312,125393,125375],{"class":488},[312,125395,125396],{"class":488}," --name=\u002Fdev\u002FttyACM0",[312,125398,26905],{"class":1436},[312,125400,32032],{"class":332},[312,125402,125385],{"class":339},[24,125404,125405],{},[19,125406],{"alt":308,"src":125407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[24,125409,125410],{},"调用如下指令查看第二台雷达的USB信息：",[303,125412,125414],{"className":119065,"code":125413,"language":119067,"meta":308,"style":308},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[119,125415,125416],{"__ignoreMap":308},[312,125417,125418,125420,125422,125424,125427,125429,125431],{"class":314,"line":315},[312,125419,125370],{"class":332},[312,125421,71598],{"class":339},[312,125423,125375],{"class":488},[312,125425,125426],{"class":488}," --name=\u002Fdev\u002FttyUSB1",[312,125428,26905],{"class":1436},[312,125430,32032],{"class":332},[312,125432,125385],{"class":339},[24,125434,125435,125436,125439,125440,125443,125444,125447],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[119,125437,125438],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[119,125441,125442],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[27,125445,125446],{},"唯一性标识","”。",[24,125449,125100],{},[24,125451,907,125452,125454],{},[119,125453,125105],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[303,125456,125457],{"className":119065,"code":125109,"language":119067,"meta":308,"style":308},[119,125458,125459],{"__ignoreMap":308},[312,125460,125461,125463,125465],{"class":314,"line":315},[312,125462,26372],{"class":332},[312,125464,120352],{"class":339},[312,125466,125120],{"class":339},[303,125468,125470],{"className":119065,"code":125469,"language":119067,"meta":308,"style":308},"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",[119,125471,125472,125501],{"__ignoreMap":308},[312,125473,125474,125476,125478,125480,125483,125485,125488,125491,125493,125496,125498],{"class":314,"line":315},[312,125475,125133],{"class":324},[312,125477,336],{"class":1436},[312,125479,125138],{"class":339},[312,125481,125482],{"class":324}," KERNELS",[312,125484,336],{"class":1436},[312,125486,125487],{"class":339},"=\"1-1.3:1.0\",",[312,125489,125490],{"class":332}," MODE:",[312,125492,336],{"class":339},[312,125494,125495],{"class":332},"\"0777\"",[312,125497,2323],{"class":332},[312,125499,125500],{"class":339}," SYMLINK+=\"rplidar_front\"\n",[312,125502,125503,125505,125507,125509,125511,125513,125516,125518,125520,125522,125524],{"class":314,"line":171},[312,125504,125133],{"class":324},[312,125506,336],{"class":1436},[312,125508,125138],{"class":339},[312,125510,125482],{"class":324},[312,125512,336],{"class":1436},[312,125514,125515],{"class":339},"=\"1-1.4:1.0\",",[312,125517,125490],{"class":332},[312,125519,336],{"class":339},[312,125521,125495],{"class":332},[312,125523,2323],{"class":332},[312,125525,125526],{"class":339}," SYMLINK+=\"rplidar_back\"\n",[24,125528,125218],{},[24,125530,125221],{},[303,125532,125533],{"className":119065,"code":125224,"language":119067,"meta":308,"style":308},[119,125534,125535,125539,125549,125559,125563,125567,125577],{"__ignoreMap":308},[312,125536,125537],{"class":314,"line":315},[312,125538,125231],{"class":318},[312,125540,125541,125543,125545,125547],{"class":314,"line":171},[312,125542,26372],{"class":332},[312,125544,121817],{"class":339},[312,125546,125240],{"class":339},[312,125548,125243],{"class":339},[312,125550,125551,125553,125555,125557],{"class":314,"line":274},[312,125552,26372],{"class":332},[312,125554,121817],{"class":339},[312,125556,125240],{"class":339},[312,125558,125254],{"class":339},[312,125560,125561],{"class":314,"line":298},[312,125562,4205],{"emptyLinePlaceholder":1881},[312,125564,125565],{"class":314,"line":974},[312,125566,125263],{"class":318},[312,125568,125569,125571,125573,125575],{"class":314,"line":980},[312,125570,26372],{"class":332},[312,125572,125270],{"class":339},[312,125574,125273],{"class":339},[312,125576,125276],{"class":488},[312,125578,125579,125581,125583],{"class":314,"line":997},[312,125580,26372],{"class":332},[312,125582,125270],{"class":339},[312,125584,125285],{"class":339},[24,125586,125288],{},[24,125588,125291],{},[24,125590,125294,125591,125594],{},[119,125592,125593],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[24,125596,125597],{},[19,125598],{"alt":308,"src":125599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[24,125601,125602],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[24,125604,125605,125607],{},[27,125606,119733],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[69,125609,125611],{"id":125610},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[24,125613,125614],{},"（1）.查看所连接的主机USB接口的信息",[303,125616,125618],{"className":119065,"code":125617,"language":119067,"meta":308,"style":308},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[119,125619,125620,125650],{"__ignoreMap":308},[312,125621,125622,125624,125626,125629,125631,125633,125635,125637,125640,125643,125645,125648],{"class":314,"line":315},[312,125623,125370],{"class":332},[312,125625,71598],{"class":339},[312,125627,125628],{"class":488}," -a",[312,125630,31012],{"class":488},[312,125632,30218],{"class":324},[312,125634,125370],{"class":332},[312,125636,71598],{"class":339},[312,125638,125639],{"class":488}," -q",[312,125641,125642],{"class":339}," path",[312,125644,26911],{"class":488},[312,125646,125647],{"class":339}," \u002Fdev\u002FttyACM0",[312,125649,1959],{"class":324},[312,125651,125652,125654,125656,125658,125660,125662,125664,125666,125668,125670,125672,125675],{"class":314,"line":171},[312,125653,125370],{"class":332},[312,125655,71598],{"class":339},[312,125657,125628],{"class":488},[312,125659,31012],{"class":488},[312,125661,30218],{"class":324},[312,125663,125370],{"class":332},[312,125665,71598],{"class":339},[312,125667,125639],{"class":488},[312,125669,125642],{"class":339},[312,125671,26911],{"class":488},[312,125673,125674],{"class":339}," \u002Fdev\u002FttyUSB0",[312,125676,1959],{"class":324},[24,125678,125679],{},[19,125680],{"alt":308,"src":125681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[24,125683,125684],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[24,125686,125100],{},[24,125688,907,125689,125454],{},[119,125690,125105],{},[303,125692,125693],{"className":119065,"code":125109,"language":119067,"meta":308,"style":308},[119,125694,125695],{"__ignoreMap":308},[312,125696,125697,125699,125701],{"class":314,"line":315},[312,125698,26372],{"class":332},[312,125700,120352],{"class":339},[312,125702,125120],{"class":339},[303,125704,125706],{"className":119065,"code":125705,"language":119067,"meta":308,"style":308},"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",[119,125707,125708,125736,125762],{"__ignoreMap":308},[312,125709,125710,125712,125714,125717,125719,125721,125723,125725,125728,125731,125733],{"class":314,"line":315},[312,125711,125133],{"class":324},[312,125713,336],{"class":1436},[312,125715,125716],{"class":339},"=\"ttyACM*\",",[312,125718,125141],{"class":332},[312,125720,125144],{"class":339},[312,125722,125173],{"class":332},[312,125724,2323],{"class":332},[312,125726,125727],{"class":339}," ATTRS{idProduct}==\"55d4\",",[312,125729,125730],{"class":339}," ATTRS{serial}==\"0001\",",[312,125732,125155],{"class":339},[312,125734,125735],{"class":339}," SYMLINK+=\"ttyACM_MCU\"\n",[312,125737,125738,125740,125742,125744,125746,125748,125750,125752,125754,125757,125759],{"class":314,"line":171},[312,125739,125133],{"class":324},[312,125741,336],{"class":1436},[312,125743,125716],{"class":339},[312,125745,125141],{"class":332},[312,125747,125144],{"class":339},[312,125749,125173],{"class":332},[312,125751,2323],{"class":332},[312,125753,125727],{"class":339},[312,125755,125756],{"class":339}," ATTRS{serial}==\"0002\",",[312,125758,125155],{"class":339},[312,125760,125761],{"class":339}," SYMLINK+=\"ttyACM_Lidar\"\n",[312,125763,125764,125766,125768,125770,125772,125774,125776,125778,125780,125782],{"class":314,"line":274},[312,125765,125133],{"class":324},[312,125767,336],{"class":1436},[312,125769,125138],{"class":339},[312,125771,125141],{"class":332},[312,125773,125144],{"class":339},[312,125775,125173],{"class":332},[312,125777,2323],{"class":332},[312,125779,125178],{"class":339},[312,125781,125155],{"class":339},[312,125783,125784],{"class":339}," SYMLINK+=\"ttyUSB_IMU\"\n",[24,125786,125218],{},[24,125788,125221],{},[303,125790,125791],{"className":119065,"code":125224,"language":119067,"meta":308,"style":308},[119,125792,125793,125797,125807,125817,125821,125825,125835],{"__ignoreMap":308},[312,125794,125795],{"class":314,"line":315},[312,125796,125231],{"class":318},[312,125798,125799,125801,125803,125805],{"class":314,"line":171},[312,125800,26372],{"class":332},[312,125802,121817],{"class":339},[312,125804,125240],{"class":339},[312,125806,125243],{"class":339},[312,125808,125809,125811,125813,125815],{"class":314,"line":274},[312,125810,26372],{"class":332},[312,125812,121817],{"class":339},[312,125814,125240],{"class":339},[312,125816,125254],{"class":339},[312,125818,125819],{"class":314,"line":298},[312,125820,4205],{"emptyLinePlaceholder":1881},[312,125822,125823],{"class":314,"line":974},[312,125824,125263],{"class":318},[312,125826,125827,125829,125831,125833],{"class":314,"line":980},[312,125828,26372],{"class":332},[312,125830,125270],{"class":339},[312,125832,125273],{"class":339},[312,125834,125276],{"class":488},[312,125836,125837,125839,125841],{"class":314,"line":997},[312,125838,26372],{"class":332},[312,125840,125270],{"class":339},[312,125842,125285],{"class":339},[24,125844,125845,125846],{},"再重新插拔设备即可，或者 ",[27,125847,125848],{},"直接重启系统。",[24,125850,125291],{},[24,125852,125294,125853,125594],{},[119,125854,125593],{},[24,125856,125857],{},[19,125858],{"alt":308,"src":125859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[24,125861,125602],{},[24,125863,125864,125866],{},[27,125865,119733],{}," 一些设备可能没有串口号等。",[69,125868,125870],{"id":125869},"_744-其他注意事项","7.4.4 其他注意事项",[24,125872,125873,125874,125876,125877,125880,125881,1512,125884,125887,125888,125890],{},"并非所有的USB设备端口号都是",[119,125875,125328],{},"的格式，比如Arduino的端口号可能是",[119,125878,125879],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[119,125882,125883],{},"videon",[119,125885,125886],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[119,125889,125883],{},"端口，绑定时需要关联的也是该接口。",[24,125892,125893,125894,125897,125898,125901,125902,125904,125905,125908,125909,125912,125913,125916,125917,125916,125920,125916,125923,30181],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[119,125895,125896],{},"KERNEL==\"ttyUSB*\"","修改为",[119,125899,125900],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[119,125903,125896],{},"修改为类似于",[119,125906,125907],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[119,125910,125911],{},"video[0,2,4,6]","表示可以绑定的端口为",[119,125914,125915],{},"video0","或",[119,125918,125919],{},"video2",[119,125921,125922],{},"video4",[119,125924,125925],{},"video6",[14,125927,125929],{"id":125928},"_75-挂载内网网页","7.5 挂载内网网页",[24,125931,125932],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[24,125934,125935],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[24,125937,125938],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[24,125940,125941,125942],{},"Termux 下载地址（F-Droid）：",[164,125943,125944],{"href":125944,"rel":125945},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[168],[24,125947,125948],{},"首先打开app后，先更新软件缓存：",[303,125950,125952],{"className":119065,"code":125951,"language":119067,"meta":308,"style":308},"pkg update\n",[119,125953,125954],{"__ignoreMap":308},[312,125955,125956,125959],{"class":314,"line":315},[312,125957,125958],{"class":332},"pkg",[312,125960,28038],{"class":339},[24,125962,125963],{},"然后换源",[303,125965,125967],{"className":119065,"code":125966,"language":119067,"meta":308,"style":308},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[119,125968,125969],{"__ignoreMap":308},[312,125970,125971,125973,125976],{"class":314,"line":315},[312,125972,124842],{"class":332},[312,125974,125975],{"class":324}," $PREFIX",[312,125977,125978],{"class":339},"\u002Fetc\u002Fapt\u002Fsources.list\n",[24,125980,125981],{},"将该文件内容替换为下面：",[303,125983,125985],{"className":119065,"code":125984,"language":119067,"meta":308,"style":308},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[119,125986,125987],{"__ignoreMap":308},[312,125988,125989,125992,125995,125998],{"class":314,"line":315},[312,125990,125991],{"class":332},"deb",[312,125993,125994],{"class":339}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[312,125996,125997],{"class":339}," stable",[312,125999,126000],{"class":339}," main\n",[243,126002,126003,126030],{},[143,126004,126005,126006,126008,126009],{},"如果你使用的是",[119,126007,124842],{},"编辑器：",[243,126010,126011,126018,126024],{},[143,126012,126013,126014,126017],{},"按 ",[119,126015,126016],{},"Ctrl+O"," 保存文件。",[143,126019,126013,126020,126023],{},[119,126021,126022],{},"Enter"," 确认文件名。",[143,126025,126013,126026,126029],{},[119,126027,126028],{},"Ctrl+X"," 退出编辑器。",[143,126031,126005,126032,126008,126035],{},[119,126033,126034],{},"vim",[243,126036,126037,126043],{},[143,126038,126013,126039,126042],{},[119,126040,126041],{},"Esc"," 退出编辑模式。",[143,126044,126045,126046,126048],{},"输入 ",[119,126047,120990],{}," 保存并退出。",[24,126050,126051],{},"接下来重新更新软件源：",[303,126053,126055],{"className":119065,"code":126054,"language":119067,"meta":308,"style":308},"pkg update && pkg upgrade\n",[119,126056,126057],{"__ignoreMap":308},[312,126058,126059,126061,126063,126065,126067],{"class":314,"line":315},[312,126060,125958],{"class":332},[312,126062,119116],{"class":339},[312,126064,27986],{"class":324},[312,126066,125958],{"class":332},[312,126068,119102],{"class":339},[24,126070,126071],{},"安装python：",[303,126073,126075],{"className":119065,"code":126074,"language":119067,"meta":308,"style":308},"pkg install python\n",[119,126076,126077],{"__ignoreMap":308},[312,126078,126079,126081,126083],{"class":314,"line":315},[312,126080,125958],{"class":332},[312,126082,25630],{"class":339},[312,126084,126085],{"class":339}," python\n",[24,126087,126088,28269],{},[27,126089,126090],{},"通过Termux访问设备存储",[24,126092,126093],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[303,126095,126097],{"className":119065,"code":126096,"language":119067,"meta":308,"style":308},"termux-setup-storage\n",[119,126098,126099],{"__ignoreMap":308},[312,126100,126101],{"class":314,"line":315},[312,126102,126096],{"class":332},[140,126104,126105],{},[143,126106,126107,28269,126110],{},[27,126108,126109],{},"进入HTML文件所在的目录",[140,126111,126112],{},[143,126113,126114,126115,126117],{},"使用",[119,126116,103045],{},"命令进入HTML文件所在的目录：",[303,126119,126121],{"className":119065,"code":126120,"language":119067,"meta":308,"style":308},"cd ~\u002Fyour_html_folder\n",[119,126122,126123],{"__ignoreMap":308},[312,126124,126125,126127],{"class":314,"line":315},[312,126126,103045],{"class":488},[312,126128,126129],{"class":339}," ~\u002Fyour_html_folder\n",[140,126131,126132],{"start":171},[143,126133,126134,28269,126137,126142,126159],{},[27,126135,126136],{},"启动Python HTTP服务器",[140,126138,126139],{},[143,126140,126141],{},"运行以下命令启动一个简单的HTTP服务器：",[303,126143,126145],{"className":119065,"code":126144,"language":119067,"meta":308,"style":308},"python -m http.server 8000\n",[119,126146,126147],{"__ignoreMap":308},[312,126148,126149,126151,126153,126156],{"class":314,"line":315},[312,126150,32176],{"class":332},[312,126152,102652],{"class":488},[312,126154,126155],{"class":339}," http.server",[312,126157,126158],{"class":488}," 8000\n",[140,126160,126161],{"start":274},[143,126162,126163,126164,126167],{},"这会在端口",[119,126165,126166],{},"8000","上启动一个Web服务器。",[243,126169,126170],{},[143,126171,126172],{},"启动服务器后，Termux会显示日志信息，例如：",[303,126174,126176],{"className":122584,"code":126175,"language":122586,"meta":122587,"style":308},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[119,126177,126178],{"__ignoreMap":308},[312,126179,126180],{"class":314,"line":315},[312,126181,126175],{},[243,126183,126184],{},[143,126185,126186],{},"这表示服务器已成功启动。",[24,126188,126189],{},[27,126190,126191],{},"在浏览器中访问HTML文件",[140,126193,126194],{},[143,126195,126196,28269,126199,126204],{},[27,126197,126198],{},"在同一设备上访问",[140,126200,126201],{},[143,126202,126203],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[303,126205,126208],{"className":126206,"code":126207,"language":73436,"meta":308,"style":308},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[119,126209,126210],{"__ignoreMap":308},[312,126211,126212,126215],{"class":314,"line":315},[312,126213,126214],{"class":324},"http:",[312,126216,126217],{"class":318},"\u002F\u002Flocalhost:8000\n",[243,126219,126220],{},[143,126221,126222,126223,126226],{},"如果HTML文件中有",[119,126224,126225],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,126228,126230],{"id":126229},"_76-linux重点知识","7.6 Linux重点知识",[69,126232,126234],{"id":126233},"_761-关于点的说明","7.6.1 关于点的说明",[24,126236,126237],{},[19,126238],{"alt":308,"src":126239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[24,126241,126242],{},"一点本目录，两点上目录",[69,126244,126246],{"id":126245},"_762-目录","7.6.2 目录",[23796,126248,126250],{"id":126249},"_7621-系统启动必须","7.6.2.1 系统启动必须",[24,126252,126253],{},[27,126254,126255],{},"\u002Fboot:",[24,126257,126258],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[24,126260,126261],{},[27,126262,126263],{},"\u002Fetc:",[24,126265,126266],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[24,126268,126269],{},[27,126270,126271],{},"\u002Flib：",[24,126273,126274],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[24,126276,126277],{},[27,126278,126279],{},"\u002Fsys:",[24,126281,126282],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[23796,126284,126286],{"id":126285},"_7622-指令集合","7.6.2.2 指令集合",[24,126288,126289],{},[27,126290,126291],{},"\u002Fbin:",[24,126293,126294],{},"为二进制文件的缩写，存放最经常使用的命令",[24,126296,126297],{},[27,126298,126299],{},"\u002Fsbin:",[24,126301,126302],{},"只有系统管理员才能使用的程序和指令",[23796,126304,126306],{"id":126305},"_7623-外部文件管理","7.6.2.3 外部文件管理",[24,126308,126309],{},[27,126310,126311],{},"\u002Fdev:",[24,126313,126314],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[24,126316,126317],{},[27,126318,126319],{},"\u002Fmedia:",[24,126321,126322],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[24,126324,126325],{},[27,126326,126327],{},"\u002Fmnt:",[24,126329,126330],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[23796,126332,126334],{"id":126333},"_7624-临时文件","7.6.2.4 临时文件",[24,126336,126337],{},[27,126338,126339],{},"\u002Frun:",[24,126341,126342],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[24,126344,126345],{},[27,126346,126347],{},"\u002Flost+found:",[24,126349,126350],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[24,126352,126353],{},[27,126354,126355],{},"\u002Ftmp:",[24,126357,126358],{},"这个目录是用来存放一些临时文件的",[23796,126360,126362],{"id":126361},"_7625-账户","7.6.2.5 账户",[24,126364,126365],{},[27,126366,126367],{},"\u002Froot：",[24,126369,126370],{},"系统管理员的用户主目录",[24,126372,126373,28269],{},[27,126374,126375],{},"\u002Fhome",[24,126377,126378],{},"用户的主目录，以用户的账号命名的",[24,126380,126381,28269],{},[27,126382,126383],{},"\u002Fusr",[24,126385,126386],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[24,126388,126389],{},[27,126390,126391],{},"\u002Fusr\u002Fbin：",[24,126393,126394],{},"系统用户使用的应用程序与指令",[24,126396,126397],{},[27,126398,126399],{},"\u002Fusr\u002Fsbin：",[24,126401,126402],{},"超级用户使用的比较高级的管理程序和系统守护程序",[24,126404,126405],{},[27,126406,126407],{},"\u002Fusr\u002Fsrc：",[24,126409,126410],{},"内核源代码默认的放置目录",[23796,126412,126414],{"id":126413},"_7626-运行过程要用","7.6.2.6 运行过程要用",[24,126416,126417],{},[27,126418,126419],{},"\u002Fvar：",[24,126421,126422],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[24,126424,126425],{},[27,126426,126427],{},"\u002Fproc:",[24,126429,126430,126431,126434],{},"管理 ",[27,126432,126433],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[23796,126436,126438],{"id":126437},"_7627-扩展用的","7.6.2.7 扩展用的",[24,126440,126441],{},[27,126442,126443],{},"\u002Fopt:",[24,126445,126446],{},"默认是空的，我们安装额外软件可以放在这个里面",[24,126448,126449],{},[27,126450,126451],{},"\u002Fsrv:",[24,126453,126454],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[69,126456,126458],{"id":126457},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[24,126460,126461],{},[19,126462],{"alt":308,"src":126463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[24,126465,126466],{},"windows-->linux:",[24,126468,126469],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[24,126471,126472],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[24,126474,126475],{},"linux传输文件到windows",[24,126477,126478],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[69,126480,126482],{"id":126481},"_764-易忘知识","7.6.4 易忘知识",[24,126484,126485],{},"操作系统内核查看",[303,126487,126488],{"className":119065,"code":123058,"language":119067,"meta":308,"style":308},[119,126489,126490],{"__ignoreMap":308},[312,126491,126492,126494],{"class":314,"line":315},[312,126493,71981],{"class":332},[312,126495,123067],{"class":488},[24,126497,126498],{},[19,126499],{"alt":308,"src":126500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[24,126502,126503],{},[19,126504],{"alt":308,"src":126505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[303,126507,126509],{"className":119065,"code":126508,"language":119067,"meta":308,"style":308},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[119,126510,126511,126523],{"__ignoreMap":308},[312,126512,126513,126515,126518,126521],{"class":314,"line":315},[312,126514,123275],{"class":332},[312,126516,126517],{"class":339}," mvtest",[312,126519,126520],{"class":339}," mvtest2",[312,126522,4479],{"class":324},[312,126524,126525],{"class":314,"line":171},[312,126526,126527],{"class":332},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[24,126529,126530],{},[19,126531],{"alt":308,"src":126532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[24,126534,126535],{},[19,126536],{"alt":308,"src":126537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[24,126539,126540,126541,126544],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[119,126542,126543],{},"du -a"," 可以快速查看磁盘使用细节。",[69,126546,126548],{"id":126547},"_765-vim","7.6.5 Vim",[24,126550,126551],{},[19,126552],{"alt":308,"src":126553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[24,126555,126556],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[24,126558,126559],{},"一开始进去为命令模式，此时点击输入的字母为命令",[24,126561,126562],{},[27,126563,126564],{},"1.命令模式：",[24,126566,126567],{},"i 切换到输入模式，在光标当前位置开始输入文本",[24,126569,126570],{},"x 删除当前光标所在处的字符",[24,126572,126573],{},"：切换到底线命令模式，以在最底一行输入命令",[24,126575,126576],{},"a 进行插入模式，在光标下一个位置输入文本",[24,126578,126579],{},"o 在当前的下方插入一个新行，并进入插入模式",[24,126581,126582],{},"0 在当前行的上方插入一个新行，并进入插入模式",[24,126584,126585],{},"dd 剪切当前行",[24,126587,126588],{},"yy 复制当前行",[24,126590,126591],{},"p 粘贴剪贴板内容到光标下方",[24,126593,126594],{},"P 粘贴剪贴板内容到光标上方",[24,126596,126597],{},"u 撤销上一次操作",[24,126599,126600],{},"ctrl+r 重做上一次操作",[24,126602,126603,126605],{},[2739,126604],{}," 保存文件",[24,126607,126608,126610],{},[2590,126609],{}," 退出Vim编辑器",[24,126612,126613,126615],{},[2590,126614],{},"! 强制退出Vim编辑器，不保存修改",[24,126617,126618],{},[27,126619,126620],{},"2.输入模式：",[24,126622,126623],{},[19,126624],{"alt":308,"src":126625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[24,126627,126628],{},[27,126629,126630],{},"3.底线命令模式：",[24,126632,126633],{},[19,126634],{"alt":308,"src":126635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[24,126637,126638],{},"按下esc可以退出底线命令模式",[69,126640,126642],{"id":126641},"_766-apt","7.6.6 apt",[24,126644,126645],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[69,126647,126649],{"id":126648},"_767-home与root的区别","7.6.7 home与root的区别",[24,126651,126652],{},[19,126653],{"alt":308,"src":126654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[24,126656,126657],{},[19,126658],{"alt":308,"src":126659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[24,126661,126662],{},[19,126663],{"alt":308,"src":126664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[24,126666,126667],{},[19,126668],{"alt":308,"src":126669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[69,126671,126673],{"id":126672},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[24,126675,126676],{},[164,126677,126678],{"href":126678,"rel":126679},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[168],[140,126681,126682,126685],{},[143,126683,126684],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[143,126686,126687],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[24,126689,126690],{},[19,126691],{"alt":308,"src":126692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[24,126694,126695],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[24,126697,126698],{},[19,126699],{"alt":308,"src":126700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[303,126702,126704],{"className":122584,"code":126703,"language":122586,"meta":122587,"style":308},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[119,126705,126706,126711],{"__ignoreMap":308},[312,126707,126708],{"class":314,"line":315},[312,126709,126710],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[312,126712,126713],{"class":314,"line":171},[312,126714,126715],{},".\u002Fpycharm.sh\n",[24,126717,126718],{},"3️⃣创建.desktop文件",[24,126720,126721],{},[27,126722,126723],{},"原理：",[243,126725,126726,126736],{},[143,126727,126728,126729,126735],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[27,126730,126731,126734],{},[119,126732,126733],{},".desktop"," 文件"," 来识别应用。",[143,126737,126738,126740,126741],{},[119,126739,126733],{}," 文件相当于一个“应用注册表”，告诉系统：",[243,126742,126743,126746,126749,126752,126755],{},[143,126744,126745],{},"应用名字（Name）",[143,126747,126748],{},"图标（Icon）",[143,126750,126751],{},"执行命令（Exec）",[143,126753,126754],{},"分类（Categories）",[143,126756,126757],{},"是否需要终端（Terminal）",[303,126759,126761],{"className":122584,"code":126760,"language":122586,"meta":122587,"style":308},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[119,126762,126763,126768],{"__ignoreMap":308},[312,126764,126765],{"class":314,"line":315},[312,126766,126767],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[312,126769,126770],{"class":314,"line":171},[312,126771,126772],{},"nano pycharm.desktop\n",[24,126774,126775],{},"nano是一个命令行下的编辑器，也可以使用vim",[303,126777,126779],{"className":122584,"code":126778,"language":122586,"meta":122587,"style":308},"[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",[119,126780,126781,126786,126791,126796,126801,126806,126811,126816,126821,126826],{"__ignoreMap":308},[312,126782,126783],{"class":314,"line":315},[312,126784,126785],{},"[Desktop Entry]\n",[312,126787,126788],{"class":314,"line":171},[312,126789,126790],{},"Version=1.0\n",[312,126792,126793],{"class":314,"line":274},[312,126794,126795],{},"Type=Application\n",[312,126797,126798],{"class":314,"line":298},[312,126799,126800],{},"Name=PyCharm\n",[312,126802,126803],{"class":314,"line":974},[312,126804,126805],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[312,126807,126808],{"class":314,"line":980},[312,126809,126810],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[312,126812,126813],{"class":314,"line":997},[312,126814,126815],{},"Comment=JetBrains PyCharm IDE\n",[312,126817,126818],{"class":314,"line":1003},[312,126819,126820],{},"Categories=Development;IDE;\n",[312,126822,126823],{"class":314,"line":1020},[312,126824,126825],{},"Terminal=false\n",[312,126827,126828],{"class":314,"line":1026},[312,126829,126830],{},"StartupWMClass=jetbrains-pycharm\n",[243,126832,126833,126839,126845,126851],{},[143,126834,126835,126838],{},[119,126836,126837],{},"Exec"," → 点击图标时执行的命令",[143,126840,126841,126844],{},[119,126842,126843],{},"Icon"," → 显示在菜单和桌面上的图标",[143,126846,126847,126850],{},[119,126848,126849],{},"Terminal=false"," → 不打开终端",[143,126852,126853,126856],{},[119,126854,126855],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126858,126859,126860],"blockquote",{},[24,126861,126862,126863,126865,126866],{},"可以理解成 ",[119,126864,126733],{}," 文件是 Linux 的 ",[27,126867,126868],{},"快捷方式配置文件",[24,126870,126871],{},"4️⃣设置可执行权限",[303,126873,126875],{"className":122584,"code":126874,"language":122586,"meta":122587,"style":308},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[119,126876,126877],{"__ignoreMap":308},[312,126878,126879],{"class":314,"line":315},[312,126880,126874],{},[24,126882,126883],{},"5️⃣桌面图标启动的话如下：",[303,126885,126887],{"className":122584,"code":126886,"language":122586,"meta":122587,"style":308},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[119,126888,126889,126894],{"__ignoreMap":308},[312,126890,126891],{"class":314,"line":315},[312,126892,126893],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[312,126895,126896],{"class":314,"line":171},[312,126897,126898],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[140,126900,126901],{"start":274},[143,126902,126903],{},"下载Appimage文件实现软件的安装",[24,126905,126906],{},"1️⃣先下载appimage",[24,126908,126909],{},[164,126910,126911],{"href":126911,"rel":126912},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[168],[24,126914,126915],{},[19,126916],{"alt":308,"src":126917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[24,126919,126920],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[24,126922,126923],{},[19,126924],{"alt":308,"src":126925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[24,126927,126928],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[24,126930,126931],{},[19,126932],{"alt":308,"src":126933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[24,126935,126936],{},[19,126937],{"alt":308,"src":126938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[24,126940,126941,126942,126945],{},"3️⃣给他们放在",[119,126943,126944],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[24,126947,126948],{},"4️⃣给软件执行权限",[303,126950,126952],{"className":122584,"code":126951,"language":122586,"meta":122587,"style":308},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[119,126953,126954,126959],{"__ignoreMap":308},[312,126955,126956],{"class":314,"line":315},[312,126957,126958],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[312,126960,126961],{"class":314,"line":171},[312,126962,126963],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[24,126965,126966],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[303,126968,126970],{"className":119065,"code":126969,"language":119067,"meta":308,"style":308},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[119,126971,126972,126979,126986,126992],{"__ignoreMap":308},[312,126973,126974,126976],{"class":314,"line":315},[312,126975,103045],{"class":488},[312,126977,126978],{"class":339}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[312,126980,126981,126983],{"class":314,"line":171},[312,126982,103052],{"class":332},[312,126984,126985],{"class":339}," .\u002Fqqmusic.desktop\n",[312,126987,126988,126990],{"class":314,"line":274},[312,126989,126034],{"class":332},[312,126991,126985],{"class":339},[312,126993,126994,126996,126998,127000],{"class":314,"line":298},[312,126995,26372],{"class":332},[312,126997,26375],{"class":339},[312,126999,124901],{"class":339},[312,127001,126985],{"class":339},[24,127003,127004,127006],{},[119,127005,103052],{},"：一个 Linux 命令，主要功能是：",[243,127008,127009,127012],{},[143,127010,127011],{},"如果文件不存在，就创建一个新的空文件",[143,127013,127014],{},"如果文件已存在，就更新该文件的最后修改时间",[303,127016,127018],{"className":122584,"code":127017,"language":122586,"meta":122587,"style":308},"[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",[119,127019,127020,127024,127029,127034,127039,127043,127048],{"__ignoreMap":308},[312,127021,127022],{"class":314,"line":315},[312,127023,126785],{},[312,127025,127026],{"class":314,"line":171},[312,127027,127028],{},"Name=QQ音乐\n",[312,127030,127031],{"class":314,"line":274},[312,127032,127033],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[312,127035,127036],{"class":314,"line":298},[312,127037,127038],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[312,127040,127041],{"class":314,"line":974},[312,127042,126795],{},[312,127044,127045],{"class":314,"line":980},[312,127046,127047],{},"Categories=Audio;Music;Player;\n",[312,127049,127050],{"class":314,"line":997},[312,127051,127052],{},"Comment=QQ Music Client for Linux\n",[24,127054,127055],{},"将文件复制进去",[24,127057,127058],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[24,127060,127061],{},[19,127062],{"alt":308,"src":127063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[24,127065,127066],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[24,127068,127069],{},[19,127070],{"alt":308,"src":127071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[24,127073,127074,127075,127078,127079,127082],{},"如果你用的不是KDE，那么也可以直接修改",[119,127076,127077],{},"qqmuic.desktop","：在exec的末尾加上",[119,127080,127081],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[303,127084,127086],{"className":122584,"code":127085,"language":122586,"meta":122587,"style":308},"[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",[119,127087,127088,127092,127096,127101,127105,127109,127113],{"__ignoreMap":308},[312,127089,127090],{"class":314,"line":315},[312,127091,126785],{},[312,127093,127094],{"class":314,"line":171},[312,127095,127028],{},[312,127097,127098],{"class":314,"line":274},[312,127099,127100],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[312,127102,127103],{"class":314,"line":298},[312,127104,127038],{},[312,127106,127107],{"class":314,"line":974},[312,127108,126795],{},[312,127110,127111],{"class":314,"line":980},[312,127112,127047],{},[312,127114,127115],{"class":314,"line":997},[312,127116,127052],{},[24,127118,127119],{},[19,127120],{"alt":308,"src":127121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[24,127123,127124],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[303,127126,127128],{"className":122584,"code":127127,"language":122586,"meta":122587,"style":308},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[119,127129,127130],{"__ignoreMap":308},[312,127131,127132],{"class":314,"line":315},[312,127133,127127],{},[140,127135,127136],{"start":298},[143,127137,127138],{},"去Flathub上安装软件",[24,127140,127141],{},[164,127142,127143],{"href":127143,"rel":127144},"https:\u002F\u002Fflathub.org\u002F",[168],[24,127146,127147],{},"1️⃣去上面的官网搜索软件+下载软件",[24,127149,127150],{},[19,127151],{"alt":308,"src":127152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[303,127154,127156],{"className":122584,"code":127155,"language":122586,"meta":122587,"style":308},"flatpak install flathub com.obsproject.Studio\n",[119,127157,127158],{"__ignoreMap":308},[312,127159,127160],{"class":314,"line":315},[312,127161,127155],{},[24,127163,127164],{},[19,127165],{"alt":308,"src":127166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[24,127168,127169],{},"2️⃣运行软件",[24,127171,127172],{},"a.官方方式：",[24,127174,127175],{},[19,127176],{"alt":308,"src":127177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[303,127179,127180],{"className":122584,"code":127155,"language":122586,"meta":122587,"style":308},[119,127181,127182],{"__ignoreMap":308},[312,127183,127184],{"class":314,"line":315},[312,127185,127155],{},[24,127187,127188],{},"b.当普通软件运行：",[24,127190,127191],{},[19,127192],{"alt":308,"src":127193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[24,127195,127196],{},[19,127197],{"alt":308,"src":127198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1856,127200,127201],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":308,"searchDepth":171,"depth":171,"links":127203},[127204,127205,127210,127211,127217,127218],{"id":123937,"depth":171,"text":123938},{"id":124279,"depth":171,"text":124280,"children":127206},[127207,127208,127209],{"id":124283,"depth":274,"text":124284},{"id":124350,"depth":274,"text":124351},{"id":124611,"depth":274,"text":124612},{"id":124764,"depth":171,"text":124765},{"id":125002,"depth":171,"text":125003,"children":127212},[127213,127214,127215,127216],{"id":125054,"depth":274,"text":125055},{"id":125339,"depth":274,"text":125340},{"id":125610,"depth":274,"text":125611},{"id":125869,"depth":274,"text":125870},{"id":125928,"depth":171,"text":125929},{"id":126229,"depth":171,"text":126230,"children":127219},[127220,127221,127222,127223,127224,127225,127226,127227],{"id":126233,"depth":274,"text":126234},{"id":126245,"depth":274,"text":126246},{"id":126457,"depth":274,"text":126458},{"id":126481,"depth":274,"text":126482},{"id":126547,"depth":274,"text":126548},{"id":126641,"depth":274,"text":126642},{"id":126648,"depth":274,"text":126649},{"id":126672,"depth":274,"text":126673},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123929,"description":1878},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":127234,"title":127235,"body":127236,"description":1878,"extension":1879,"meta":127240,"navigation":1881,"path":127241,"seo":127242,"stem":127243,"__hash__":127244},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":127237,"toc":127238},[],{"title":308,"searchDepth":171,"depth":171,"links":127239},[],{"category":32059},"\u002Fwiki\u002F2025-01-27-linux",{"title":127235,"description":1878},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":127246,"title":127247,"body":127248,"description":127252,"extension":1879,"meta":127643,"navigation":1881,"path":127644,"seo":127645,"stem":127646,"__hash__":127647},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":127249,"toc":127641},[127250,127253,127257,127274,127277,127330,127334,127336,127376,127385,127389,127392,127633,127638],[24,127251,127252],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,127254,127256],{"id":127255},"_1ubuntu环境配置","1.Ubuntu环境配置",[140,127258,127259,127262,127265,127268,127271],{},[143,127260,127261],{},"ubuntu环境换源",[143,127263,127264],{},"安装cuda",[143,127266,127267],{},"安装miniconda",[143,127269,127270],{},"安装pytorch",[143,127272,127273],{},"安装genesis",[24,127275,127276],{},"参考链接：",[303,127278,127280],{"className":25618,"code":127279,"language":25620,"meta":308,"style":308},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[119,127281,127282],{"__ignoreMap":308},[312,127283,127284,127287,127290,127293,127295,127298,127301,127303,127306,127309,127311,127314,127317,127319,127322,127325,127327],{"class":314,"line":315},[312,127285,127286],{"class":332},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[312,127288,127289],{"class":339},"=blogdetail",[312,127291,127292],{"class":324},"&sharetype",[312,127294,336],{"class":1436},[312,127296,127297],{"class":339},"blogdetail",[312,127299,127300],{"class":324},"&sharerId",[312,127302,336],{"class":1436},[312,127304,127305],{"class":339},"144728092",[312,127307,127308],{"class":324},"&sharerefer",[312,127310,336],{"class":1436},[312,127312,127313],{"class":339},"PC",[312,127315,127316],{"class":324},"&sharesource",[312,127318,336],{"class":1436},[312,127320,127321],{"class":339},"qq_69379513",[312,127323,127324],{"class":324},"&sharefrom",[312,127326,336],{"class":1436},[312,127328,127329],{"class":339},"from_link\n",[10,127331,127333],{"id":127332},"_2genesis-报错issue","2.Genesis 报错issue",[24,127335,127276],{},[303,127337,127338],{"className":25618,"code":127279,"language":25620,"meta":308,"style":308},[119,127339,127340],{"__ignoreMap":308},[312,127341,127342,127344,127346,127348,127350,127352,127354,127356,127358,127360,127362,127364,127366,127368,127370,127372,127374],{"class":314,"line":315},[312,127343,127286],{"class":332},[312,127345,127289],{"class":339},[312,127347,127292],{"class":324},[312,127349,336],{"class":1436},[312,127351,127297],{"class":339},[312,127353,127300],{"class":324},[312,127355,336],{"class":1436},[312,127357,127305],{"class":339},[312,127359,127308],{"class":324},[312,127361,336],{"class":1436},[312,127363,127313],{"class":339},[312,127365,127316],{"class":324},[312,127367,336],{"class":1436},[312,127369,127321],{"class":339},[312,127371,127324],{"class":324},[312,127373,336],{"class":1436},[312,127375,127329],{"class":339},[303,127377,127379],{"className":25618,"code":127378,"language":25620,"meta":308,"style":308},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[119,127380,127381],{"__ignoreMap":308},[312,127382,127383],{"class":314,"line":315},[312,127384,127378],{"class":332},[10,127386,127388],{"id":127387},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[24,127390,127391],{},"hello_robot.py",[303,127393,127395],{"className":32174,"code":127394,"language":32176,"meta":308,"style":308},"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",[119,127396,127397,127403,127418,127422,127434,127446,127450,127463,127467,127486,127496,127506,127520,127524,127528,127533,127537,127547,127554,127568,127575,127585,127590,127594,127612,127617,127621,127628],{"__ignoreMap":308},[312,127398,127399,127401],{"class":314,"line":315},[312,127400,32188],{"class":1436},[312,127402,47100],{"class":324},[312,127404,127405,127408,127411,127413,127415],{"class":314,"line":171},[312,127406,127407],{"class":324},"os.environ[",[312,127409,127410],{"class":339},"'PYOPENGL_PLATFORM'",[312,127412,6248],{"class":324},[312,127414,336],{"class":1436},[312,127416,127417],{"class":339}," 'glx'\n",[312,127419,127420],{"class":314,"line":274},[312,127421,4205],{"emptyLinePlaceholder":1881},[312,127423,127424,127426,127429,127431],{"class":314,"line":298},[312,127425,32188],{"class":1436},[312,127427,127428],{"class":324}," genesis ",[312,127430,33178],{"class":1436},[312,127432,127433],{"class":324}," gs\n",[312,127435,127436,127438,127441,127443],{"class":314,"line":974},[312,127437,32533],{"class":1436},[312,127439,127440],{"class":324}," pynput ",[312,127442,32188],{"class":1436},[312,127444,127445],{"class":324}," keyboard\n",[312,127447,127448],{"class":314,"line":980},[312,127449,4205],{"emptyLinePlaceholder":1881},[312,127451,127452,127455,127458,127460],{"class":314,"line":997},[312,127453,127454],{"class":324},"gs.init(",[312,127456,127457],{"class":1579},"backend",[312,127459,336],{"class":1436},[312,127461,127462],{"class":324},"gs.gpu)\n",[312,127464,127465],{"class":314,"line":1003},[312,127466,4205],{"emptyLinePlaceholder":1881},[312,127468,127469,127472,127474,127477,127480,127482,127484],{"class":314,"line":1020},[312,127470,127471],{"class":324},"scene ",[312,127473,336],{"class":1436},[312,127475,127476],{"class":324}," gs.Scene(",[312,127478,127479],{"class":1579},"show_viewer",[312,127481,336],{"class":1436},[312,127483,33271],{"class":488},[312,127485,1959],{"class":324},[312,127487,127488,127491,127493],{"class":314,"line":1026},[312,127489,127490],{"class":324},"plane ",[312,127492,336],{"class":1436},[312,127494,127495],{"class":324}," scene.add_entity(gs.morphs.Plane())\n",[312,127497,127498,127501,127503],{"class":314,"line":3418},[312,127499,127500],{"class":324},"franka ",[312,127502,336],{"class":1436},[312,127504,127505],{"class":324}," scene.add_entity(\n",[312,127507,127508,127511,127513,127515,127518],{"class":314,"line":3423},[312,127509,127510],{"class":324},"    gs.morphs.MJCF(",[312,127512,47149],{"class":1579},[312,127514,336],{"class":1436},[312,127516,127517],{"class":339},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[312,127519,39842],{"class":324},[312,127521,127522],{"class":314,"line":3429},[312,127523,1959],{"class":324},[312,127525,127526],{"class":314,"line":3434},[312,127527,4205],{"emptyLinePlaceholder":1881},[312,127529,127530],{"class":314,"line":3448},[312,127531,127532],{"class":324},"scene.build()\n",[312,127534,127535],{"class":314,"line":3453},[312,127536,4205],{"emptyLinePlaceholder":1881},[312,127538,127539,127541,127544],{"class":314,"line":3459},[312,127540,33742],{"class":1436},[312,127542,127543],{"class":332}," on_press",[312,127545,127546],{"class":324},"(key):\n",[312,127548,127549,127552],{"class":314,"line":3480},[312,127550,127551],{"class":1436},"    try",[312,127553,5544],{"class":324},[312,127555,127556,127558,127561,127563,127566],{"class":314,"line":3485},[312,127557,4302],{"class":1436},[312,127559,127560],{"class":324}," key.char ",[312,127562,4754],{"class":1436},[312,127564,127565],{"class":339}," 'q'",[312,127567,5544],{"class":324},[312,127569,127570,127572],{"class":314,"line":3499},[312,127571,17532],{"class":1436},[312,127573,127574],{"class":488}," False\n",[312,127576,127577,127580,127583],{"class":314,"line":3504},[312,127578,127579],{"class":1436},"    except",[312,127581,127582],{"class":488}," AttributeError",[312,127584,5544],{"class":324},[312,127586,127587],{"class":314,"line":3533},[312,127588,127589],{"class":1436},"        pass\n",[312,127591,127592],{"class":314,"line":3538},[312,127593,4205],{"emptyLinePlaceholder":1881},[312,127595,127596,127599,127601,127604,127607,127609],{"class":314,"line":3555},[312,127597,127598],{"class":324},"listener ",[312,127600,336],{"class":1436},[312,127602,127603],{"class":324}," keyboard.Listener(",[312,127605,127606],{"class":1579},"on_press",[312,127608,336],{"class":1436},[312,127610,127611],{"class":324},"on_press)\n",[312,127613,127614],{"class":314,"line":3560},[312,127615,127616],{"class":324},"listener.start()\n",[312,127618,127619],{"class":314,"line":3565},[312,127620,4205],{"emptyLinePlaceholder":1881},[312,127622,127623,127625],{"class":314,"line":3570},[312,127624,110432],{"class":1436},[312,127626,127627],{"class":324}," listener.running:\n",[312,127629,127630],{"class":314,"line":3584},[312,127631,127632],{"class":324},"    scene.step()\n",[24,127634,127635],{},[19,127636],{"alt":308,"src":127637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1856,127639,127640],{},"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":308,"searchDepth":171,"depth":171,"links":127642},[],{"category":25175},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":127247,"description":127252},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127649,"title":127650,"body":127651,"description":1878,"extension":1879,"meta":127666,"navigation":1881,"path":127667,"seo":127668,"stem":127669,"__hash__":127670},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127652,"toc":127663},[127653,127656,127660],[10,127654,127650],{"id":127655},"_1-基础知识",[14,127657,127659],{"id":127658},"_11-js的组成","1.1 js的组成",[24,127661,127662],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":308,"searchDepth":171,"depth":171,"links":127664},[127665],{"id":127658,"depth":171,"text":127659},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127650,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127672,"title":127673,"body":127674,"description":1878,"extension":1879,"meta":127813,"navigation":1881,"path":127814,"seo":127815,"stem":127816,"__hash__":127817},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127675,"toc":127801},[127676,127679,127683,127686,127690,127700,127704,127707,127710,127713,127717,127724,127730,127734,127740,127751,127755,127758,127762,127765,127769,127772,127776,127779,127783,127786,127789,127792,127795,127798],[10,127677,127673],{"id":127678},"_2-vscode必备内容",[14,127680,127682],{"id":127681},"_21-标签分类","2.1 标签分类",[24,127684,127685],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127687,127689],{"id":127688},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[24,127691,127692,127693,127695,127696,127699],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[119,127694,2172],{}," 然后按 ",[119,127697,127698],{},"Tab","，快速自动生成基本结构。",[14,127701,127703],{"id":127702},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[24,127705,127706],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[24,127708,127709],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[24,127711,127712],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127714,127716],{"id":127715},"_24-视图缩放","2.4 视图缩放",[24,127718,127719,127720,127723],{},"缩放视图 ",[119,127721,127722],{},"ctrl+"," 可实现代码增大。",[24,127725,127726,127729],{},[119,127727,127728],{},"ctrl-"," 可实现代码减小。",[14,127731,127733],{"id":127732},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[24,127735,127736,127737,30181],{},"VSCode 新建文件快捷键为 ",[119,127738,127739],{},"ctrl+N",[24,127741,127742,127743,127746,127747,127750],{},"保存快捷键为 ",[119,127744,127745],{},"ctrl+S","，将文本保存为 ",[119,127748,127749],{},".html"," 文件。",[14,127752,127754],{"id":127753},"_26-auto-rename-tag","2.6 Auto Rename Tag",[24,127756,127757],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127759,127761],{"id":127760},"_27-vscode-icons","2.7 vscode-icons",[24,127763,127764],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127766,127768],{"id":127767},"_28-easy-less","2.8 Easy LESS",[24,127770,127771],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127773,127775],{"id":127774},"_29-会了吧插件","2.9 会了吧插件",[24,127777,127778],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127780,127782],{"id":127781},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[24,127784,127785],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[24,127787,127788],{},"②选定多个相同的单词:ctrl+D",[24,127790,127791],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[24,127793,127794],{},"④全局替换某些单词:ctrl+h",[24,127796,127797],{},"⑤快速定位到某一行:ctrl+g",[24,127799,127800],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":308,"searchDepth":171,"depth":171,"links":127802},[127803,127804,127805,127806,127807,127808,127809,127810,127811,127812],{"id":127681,"depth":171,"text":127682},{"id":127688,"depth":171,"text":127689},{"id":127702,"depth":171,"text":127703},{"id":127715,"depth":171,"text":127716},{"id":127732,"depth":171,"text":127733},{"id":127753,"depth":171,"text":127754},{"id":127760,"depth":171,"text":127761},{"id":127767,"depth":171,"text":127768},{"id":127774,"depth":171,"text":127775},{"id":127781,"depth":171,"text":127782},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127673,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127819,"title":127820,"body":127821,"description":1878,"extension":1879,"meta":127980,"navigation":1881,"path":127981,"seo":127982,"stem":127983,"__hash__":127984},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127822,"toc":127972},[127823,127826,127830,127840,127846,127852,127856,127865,127869,127874,127877,127880,127884,127887,127897,127906,127915,127924,127934,127941,127946,127951,127964],[10,127824,127820],{"id":127825},"_3-html文本与容器标签",[14,127827,127829],{"id":127828},"_31-标题标签","3.1 标题标签",[24,127831,127832,127835,127836,127839],{},[119,127833,127834],{},"\u003Ch1>","我是一级标签",[119,127837,127838],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[24,127841,127842,127835,127844],{},[119,127843,127834],{},[119,127845,127838],{},[24,127847,907,127848,127851],{},[119,127849,127850],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127853,127855],{"id":127854},"_32-段落标签","3.2 段落标签",[24,127857,127858,127861,127862],{},[119,127859,127860],{},"\u003Cp>","....",[119,127863,127864],{},"\u003C\u002Fp>",[14,127866,127868],{"id":127867},"_33-换行标签","3.3 换行标签",[24,127870,127871],{},[119,127872,127873],{},"\u003Cbr \u002F>",[24,127875,127876],{},"具有强制换行的作用",[24,127878,127879],{},"单标签",[14,127881,127883],{"id":127882},"_34-文本格式化标签","3.4 文本格式化标签",[24,127885,127886],{},"提供粗体、斜体和下划线等效果",[24,127888,127889,127890,84310,127893,127896],{},"加粗：",[119,127891,127892],{},"\u003Cstrong>...\u003C\u002Fstrong>",[119,127894,127895],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[24,127898,127899,127900,84310,127903,127896],{},"斜体：",[119,127901,127902],{},"\u003Cem>...\u003C\u002Fem>",[119,127904,127905],{},"\u003Ci>...\u003C\u002Fi>",[24,127907,127908,127909,84310,127912,127896],{},"删除线：",[119,127910,127911],{},"\u003Cdel>...\u003C\u002Fdel>",[119,127913,127914],{},"\u003Cs>...\u003C\u002Fs>",[24,127916,127917,127918,84310,127921,127896],{},"下划线：",[119,127919,127920],{},"\u003Cins>...\u003C\u002Fins>",[119,127922,127923],{},"\u003Cu>...\u003C\u002Fu>",[14,127925,127927,127928,1512,127931,104462],{"id":127926},"_35-div和span标签","3.5 ",[119,127929,127930],{},"\u003Cdiv>",[119,127932,127933],{},"\u003Cspan>",[24,127935,127936,1167,127938,127940],{},[119,127937,127930],{},[119,127939,127933],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[24,127942,127943],{},[119,127944,127945],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[24,127947,127948],{},[119,127949,127950],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[24,127952,127953,127954,127956,127957,127959,127960,127963],{},"两者特点：①",[119,127955,127930],{}," 标签用来布局，但一行通常只放一个 ",[119,127958,127930],{},"。可以理解为一个大盒子，独占一行，在 ",[119,127961,127962],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[24,127965,79021,127966,127968,127969,127971],{},[119,127967,127933],{}," 标签也可用于布局，一行可以放多个 ",[119,127970,127933],{},"，可理解为小盒子。",{"title":308,"searchDepth":171,"depth":171,"links":127973},[127974,127975,127976,127977,127978],{"id":127828,"depth":171,"text":127829},{"id":127854,"depth":171,"text":127855},{"id":127867,"depth":171,"text":127868},{"id":127882,"depth":171,"text":127883},{"id":127926,"depth":171,"text":127979},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127820,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127986,"title":127987,"body":127988,"description":1878,"extension":1879,"meta":128184,"navigation":1881,"path":128185,"seo":128186,"stem":128187,"__hash__":128188},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127989,"toc":128176},[127990,127993,127997,128000,128006,128013,128019,128025,128028,128031,128034,128037,128040,128043,128046,128050,128053,128056,128059,128065,128071,128077,128084,128088,128094,128100,128103,128106,128112,128118,128124,128127,128130,128134,128137,128147,128153,128157,128166,128170,128173],[10,127991,127987],{"id":127992},"_4-html图像与链接",[14,127994,127996],{"id":127995},"_41-图像标签","4.1 图像标签",[24,127998,127999],{},"（1）标签",[24,128001,128002,128005],{},[119,128003,128004],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[24,128007,128008,128009,128012],{},"src是",[119,128010,128011],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[24,128014,128015,128016],{},"alt:文本，替换文本。图像不能显示的文字 ",[119,128017,128018],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[24,128020,128021,128022],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[119,128023,128024],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[24,128026,128027],{},"width:像素，设置图像的宽度",[24,128029,128030],{},"height:像素，设置图像的高度",[24,128032,128033],{},"border：像素，设置图像的边框粗细",[24,128035,128036],{},"（2）图像标签属性的注意点：",[24,128038,128039],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[24,128041,128042],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[24,128044,128045],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,128047,128049],{"id":128048},"_42-路径注意要点","4.2 路径注意要点：",[24,128051,128052],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[24,128054,128055],{},"（2）根目录：就是打开文件夹的第一层根目录",[24,128057,128058],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[24,128060,128061,128062],{},"①同一级路径：图像文件位于HTML文件同一级，如",[119,128063,128064],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[24,128066,128067,128068],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[119,128069,128070],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[24,128072,128073,128074],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[119,128075,128076],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[24,128078,128079,128080,2196],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[164,128081,128082],{"href":128082,"rel":128083},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[168],[14,128085,128087],{"id":128086},"_43-超链接标签","4.3 超链接标签",[24,128089,128090,128093],{},[119,128091,128092],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[24,128095,128096,128097],{},"①语法格式：",[119,128098,128099],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[24,128101,128102],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[24,128104,128105],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[24,128107,128108,128109],{},"③链接分类：外部链接：",[119,128110,128111],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[24,128113,128114,128115],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[119,128116,128117],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[24,128119,128120,128121],{},"空链接：如果当时没有确定链接目标时，",[119,128122,128123],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[24,128125,128126],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[24,128128,128129],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,128131,128133],{"id":128132},"_44-锚点链接","4.4 锚点链接",[24,128135,128136],{},"点我们点击链接，可以快速定位到页面中的某个位置",[24,128138,128139,128140,128143,128144],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[119,128141,128142],{},"\u003Ca href=\"#two\">","第二级",[119,128145,128146],{},"\u003C\u002Fa>",[24,128148,128149,128150],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[119,128151,128152],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,128154,128156],{"id":128155},"_45-注释标签","4.5 注释标签",[24,128158,128159,128162,128163],{},[119,128160,128161],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[119,128164,128165],{},"ctrl+\u002F",[14,128167,128169],{"id":128168},"_46-特殊字符","4.6 特殊字符",[24,128171,128172],{},"可以实现添加多个空格",[19,128174],{"style":21,"src":128175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":308,"searchDepth":171,"depth":171,"links":128177},[128178,128179,128180,128181,128182,128183],{"id":127995,"depth":171,"text":127996},{"id":128048,"depth":171,"text":128049},{"id":128086,"depth":171,"text":128087},{"id":128132,"depth":171,"text":128133},{"id":128155,"depth":171,"text":128156},{"id":128168,"depth":171,"text":128169},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127987,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":128190,"title":128191,"body":128192,"description":1878,"extension":1879,"meta":128483,"navigation":1881,"path":128484,"seo":128485,"stem":128486,"__hash__":128487},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":128193,"toc":128474},[128194,128197,128201,128204,128207,128210,128213,128216,128219,128222,128225,128228,128248,128254,128258,128261,128264,128267,128270,128273,128276,128280,128283,128286,128289,128292,128305,128310,128313,128316,128329,128332,128335,128338,128341,128344,128348,128351,128358,128361,128364,128367,128370,128373,128379,128382,128385,128391,128394,128397,128400,128406,128409,128412,128426,128433,128436,128439,128446,128455,128458,128461,128464,128468,128471],[10,128195,128191],{"id":128196},"_5-html表格列表与表单",[14,128198,128200],{"id":128199},"_51-表格标签","5.1 表格标签",[24,128202,128203],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[24,128205,128206],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[24,128208,128209],{},"②表格基本语法：",[19,128211],{"style":21,"src":128212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[24,128214,128215],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[19,128217],{"style":21,"src":128218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[24,128220,128221],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[19,128223],{"style":21,"src":128224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[24,128226,128227],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[24,128229,128230,128233,128234,128236,128237,128240,128241,128243,128244,128247],{},[119,128231,128232],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[119,128235,128232],{},"内部必须拥有",[119,128238,128239],{},"\u003Ctr>","标签，一般位于第一行，",[119,128242,128232],{},"比",[119,128245,128246],{},"\u003Cth>","范围广",[24,128249,128250,128253],{},[119,128251,128252],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,128255,128257],{"id":128256},"_52-合并单元格","5.2 合并单元格",[24,128259,128260],{},"（1）合并单元格方式：",[24,128262,128263],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[24,128265,128266],{},"②跨列合并：colspan=\"合并单元格的个数\"",[24,128268,128269],{},"（2）目标单元格：",[24,128271,128272],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[24,128274,128275],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,128277,128279],{"id":128278},"_53-列表标签","5.3 列表标签",[24,128281,128282],{},"（1）分类：无序列表、有序列表、自定义列表",[24,128284,128285],{},"①无序列表：",[19,128287],{"style":21,"src":128288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[24,128290,128291],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[24,128293,128294,128297,128298,128301,128302,128304],{},[119,128295,128296],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[119,128299,128300],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[119,128303,128296],{},"中输入其他标签或文字是不对的",[24,128306,128307,128309],{},[119,128308,128300],{},"之间相当于一个容器，可以容纳所有元素",[24,128311,128312],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[24,128314,128315],{},"在css中去除前边的小圆点采用如下代码:",[303,128317,128319],{"className":469,"code":128318,"language":471,"meta":308,"style":308},"list-style: none;\n",[119,128320,128321],{"__ignoreMap":308},[312,128322,128323,128326],{"class":314,"line":315},[312,128324,128325],{"class":328},"list-style",[312,128327,128328],{"class":324},": none;\n",[24,128330,128331],{},"②有序列表：",[19,128333],{"style":21,"src":128334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[24,128336,128337],{},"③自定义列表：",[19,128339],{"style":21,"src":128340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[19,128342],{"style":21,"src":128343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,128345,128347],{"id":128346},"_54-表单标签","5.4 表单标签",[24,128349,128350],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[24,128352,128353,128354,128357],{},"（1）表单域：包含单元素的区域，",[119,128355,128356],{},"\u003Cform>","标签可以实现信息的收集和传递。",[19,128359],{"style":21,"src":128360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[24,128362,128363],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[24,128365,128366],{},"表单元素提交必须有name属性",[24,128368,128369],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[24,128371,128372],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[24,128374,78998,128375,128378],{},[119,128376,128377],{},"\u003Cinput>","输入表单元素",[19,128380],{"style":21,"src":128381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[19,128383],{"style":21,"src":128384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[24,128386,128387,128388],{},"单选按钮：",[119,128389,128390],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[19,128392],{"style":21,"src":128393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[24,128395,128396],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[19,128398],{"style":21,"src":128399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[24,128401,128402,128405],{},[27,128403,128404],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[24,128407,128408],{},"②select下拉表单元素：可以节约页面控件",[19,128410],{"style":21,"src":128411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[24,128413,128414,15596,128416,128419,128420,128422,128423,128425],{},[27,128415,1982],{},[119,128417,128418],{},"\u003Cselect>","中至少包含一对",[119,128421,104483],{},"；在",[119,128424,104483],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[24,128427,128428,128429,128432],{},"③",[119,128430,128431],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[19,128434],{"style":21,"src":128435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[24,128437,128438],{},"3行20列",[14,128440,128442,128443,104462],{"id":128441},"_55-lable标签","5.5 ",[119,128444,128445],{},"\u003Clable>",[24,128447,128448,128449,128451,128452,128454],{},"它不是表单标签，但常常与表单标签搭配使用，",[119,128450,128445],{},"标签用于绑定一个表单标签，当点击",[119,128453,128445],{},"标签内的文本",[24,128456,128457],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[19,128459],{"style":21,"src":128460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[19,128462],{"style":21,"src":128463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,128465,128467],{"id":128466},"_56-实例","5.6 实例",[19,128469],{"style":21,"src":128470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1856,128472,128473],{},"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":308,"searchDepth":171,"depth":171,"links":128475},[128476,128477,128478,128479,128480,128482],{"id":128199,"depth":171,"text":128200},{"id":128256,"depth":171,"text":128257},{"id":128278,"depth":171,"text":128279},{"id":128346,"depth":171,"text":128347},{"id":128441,"depth":171,"text":128481},"5.5 \u003Clable>标签",{"id":128466,"depth":171,"text":128467},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":128191,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128489,"title":128490,"body":128491,"description":1878,"extension":1879,"meta":129040,"navigation":1881,"path":129041,"seo":129042,"stem":129043,"__hash__":129044},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128492,"toc":129015},[128493,128496,128500,128503,128506,128510,128513,128516,128519,128522,128525,128528,128531,128535,128538,128542,128545,128548,128551,128555,128558,128561,128564,128570,128573,128576,128579,128582,128585,128588,128591,128624,128628,128631,128634,128637,128641,128644,128647,128650,128653,128656,128660,128663,128666,128669,128673,128676,128680,128683,128687,128690,128695,128699,128702,128706,128709,128712,128715,128718,128745,128748,128752,128755,128758,128763,128766,128769,128773,128776,128781,128784,128787,128790,128794,128797,128800,128803,128807,128810,128813,128816,128820,128824,128827,128867,128870,128874,128881,128884,128888,128891,128937,128941,128944,128947,128950,128978,128982,128985,129012],[10,128494,128490],{"id":128495},"_6-css语法与文本样式",[14,128497,128499],{"id":128498},"_61-css语法规范","6.1 css语法规范",[24,128501,128502],{},"由两部分组成，选择器及一条或多条声明",[19,128504],{"style":21,"src":128505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[24,128507,128508],{},[27,128509,1982],{},[24,128511,128512],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[24,128514,128515],{},"②属性与属性值以“键值对”的形式出现",[24,128517,128518],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[24,128520,128521],{},"④属性和属性值之间用英文“;”分开",[19,128523],{"style":21,"src":128524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[19,128526],{"style":21,"src":128527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[19,128529],{"style":21,"src":128530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,128532,128534],{"id":128533},"_62-css选择器","6.2 css选择器",[24,128536,128537],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[69,128539,128541],{"id":128540},"_621-标签选择器","6.2.1 标签选择器",[24,128543,128544],{},"①优点：能快速为页面中同类型的标签统一设置样式",[24,128546,128547],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[19,128549],{"style":21,"src":128550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[69,128552,128554],{"id":128553},"_622-类选择器","6.2.2 类选择器",[24,128556,128557],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[24,128559,128560],{},"②样例",[19,128562],{"style":21,"src":128563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[24,128565,128566,128567,128569],{},"③ ",[27,128568,128404],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[24,128571,128572],{},"可以理解为给这个标签起了个名字，来表示；",[24,128574,128575],{},"长名称或词组可以使用横线来为选择器命名；",[24,128577,128578],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[24,128580,128581],{},"命名要有意义；",[19,128583],{"style":21,"src":128584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[24,128586,128587],{},"类选择器也可以指定特殊的元素p.center{}",[24,128589,128590],{},"p.center和.center都对",[303,128592,128594],{"className":469,"code":128593,"language":471,"meta":308,"style":308},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[119,128595,128596,128601,128610,128620],{"__ignoreMap":308},[312,128597,128598],{"class":314,"line":315},[312,128599,128600],{"class":318},"\u002F* 类选择器指定特殊元素 *\u002F\n",[312,128602,128603,128605,128608],{"class":314,"line":171},[312,128604,24],{"class":328},[312,128606,128607],{"class":332},".center",[312,128609,483],{"class":324},[312,128611,128612,128614,128616,128618],{"class":314,"line":274},[312,128613,72302],{"class":488},[312,128615,492],{"class":324},[312,128617,53380],{"class":488},[312,128619,498],{"class":324},[312,128621,128622],{"class":314,"line":298},[312,128623,515],{"class":324},[69,128625,128627],{"id":128626},"_623-多类名使用","6.2.3 多类名使用",[24,128629,128630],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[19,128632],{"style":21,"src":128633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[24,128635,128636],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[69,128638,128640],{"id":128639},"_624-id选择器","6.2.4 id选择器",[24,128642,128643],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[24,128645,128646],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[19,128648],{"style":21,"src":128649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[24,128651,128652],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[24,128654,128655],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[69,128657,128659],{"id":128658},"_625-通配符选择器","6.2.5 通配符选择器",[24,128661,128662],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[24,128664,128665],{},"* {",[24,128667,128668],{},"color=\"red\"}",[69,128670,128672],{"id":128671},"_626-总结","6.2.6 总结",[19,128674],{"style":21,"src":128675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128677,128679],{"id":128678},"_63-css字体属性","6.3 css字体属性",[24,128681,128682],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[69,128684,128686],{"id":128685},"_631-字体系列","6.3.1 字体系列",[24,128688,128689],{},"font-family: '宋体';",[24,128691,128692,128694],{},[27,128693,1982],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[69,128696,128698],{"id":128697},"_632-字体大小","6.3.2 字体大小",[24,128700,128701],{},"font-size: 20px",[24,128703,128704,28269],{},[27,128705,128404],{},[24,128707,128708],{},"①px（像素）大小是网页的最常用单位",[24,128710,128711],{},"②谷歌浏览器默认为16px",[24,128713,128714],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[24,128716,128717],{},"④可以给body指定整个页面的大小：会自动引用",[303,128719,128721],{"className":469,"code":128720,"language":471,"meta":308,"style":308},"body {\n  font-size: 16px;\n}\n",[119,128722,128723,128729,128741],{"__ignoreMap":308},[312,128724,128725,128727],{"class":314,"line":315},[312,128726,53586],{"class":328},[312,128728,483],{"class":324},[312,128730,128731,128733,128735,128737,128739],{"class":314,"line":171},[312,128732,72400],{"class":488},[312,128734,492],{"class":324},[312,128736,2546],{"class":488},[312,128738,1437],{"class":1436},[312,128740,498],{"class":324},[312,128742,128743],{"class":314,"line":274},[312,128744,515],{"class":324},[24,128746,128747],{},"⑤标题标签比较特殊，需要单独指定大小",[69,128749,128751],{"id":128750},"_633-字体粗细","6.3.3 字体粗细",[24,128753,128754],{},"font-weight: bold;",[24,128756,128757],{},"font-weight: 100；",[24,128759,128760,128762],{},[27,128761,1982],{}," ①粗体文字变细：尽量别用normal，多用数字",[24,128764,128765],{},"font-weight= 400;",[24,128767,128768],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[69,128770,128772],{"id":128771},"_634-文字样式","6.3.4 文字样式",[24,128774,128775],{},"font-style: normal；",[24,128777,128778,28269],{},[27,128779,128780],{},"属性值",[24,128782,128783],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[24,128785,128786],{},"②italic：浏览器会显示斜体的字体样式",[19,128788],{"style":21,"src":128789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[69,128791,128793],{"id":128792},"_635-字体符合属性","6.3.5 字体符合属性",[19,128795],{"style":21,"src":128796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[19,128798],{"style":21,"src":128799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[24,128801,128802],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[24,128804,128805,28269],{},[27,128806,128404],{},[24,128808,128809],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[24,128811,128812],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[24,128814,128815],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128817,128819],{"id":128818},"_64-css-test文本属性","6.4 css test文本属性",[69,128821,128823],{"id":128822},"_641-文本颜色","6.4.1 文本颜色",[24,128825,128826],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[303,128828,128830],{"className":469,"code":128829,"language":471,"meta":308,"style":308},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[119,128831,128832,128837,128843,128853,128858,128863],{"__ignoreMap":308},[312,128833,128834],{"class":314,"line":315},[312,128835,128836],{"class":318},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[312,128838,128839,128841],{"class":314,"line":171},[312,128840,24],{"class":328},[312,128842,483],{"class":324},[312,128844,128845,128847,128849,128851],{"class":314,"line":274},[312,128846,72677],{"class":488},[312,128848,492],{"class":324},[312,128850,59203],{"class":488},[312,128852,498],{"class":324},[312,128854,128855],{"class":314,"line":298},[312,128856,128857],{"class":318},"  \u002F* color: #ff0000; *\u002F\n",[312,128859,128860],{"class":314,"line":974},[312,128861,128862],{"class":318},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[312,128864,128865],{"class":314,"line":980},[312,128866,515],{"class":324},[19,128868],{"style":21,"src":128869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[69,128871,128873],{"id":128872},"_642-对齐文本","6.4.2 对齐文本",[24,128875,128876,128877,128880],{},"text-align属于用于设置元素内文本内容的 ",[27,128878,128879],{},"水平对齐"," 方式",[24,128882,128883],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[69,128885,128887],{"id":128886},"_643-装饰文本","6.4.3 装饰文本",[24,128889,128890],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[303,128892,128894],{"className":469,"code":128893,"language":471,"meta":308,"style":308},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[119,128895,128896,128902,128912,128916,128922,128933],{"__ignoreMap":308},[312,128897,128898,128900],{"class":314,"line":315},[312,128899,164],{"class":328},[312,128901,483],{"class":324},[312,128903,128904,128906,128908,128910],{"class":314,"line":171},[312,128905,72278],{"class":488},[312,128907,492],{"class":324},[312,128909,56521],{"class":488},[312,128911,498],{"class":324},[312,128913,128914],{"class":314,"line":274},[312,128915,515],{"class":324},[312,128917,128918,128920],{"class":314,"line":298},[312,128919,24],{"class":328},[312,128921,483],{"class":324},[312,128923,128924,128926,128928,128931],{"class":314,"line":974},[312,128925,72278],{"class":488},[312,128927,492],{"class":324},[312,128929,128930],{"class":488},"underline",[312,128932,498],{"class":324},[312,128934,128935],{"class":314,"line":980},[312,128936,515],{"class":324},[69,128938,128940],{"id":128939},"_644-文本缩进","6.4.4 文本缩进",[24,128942,128943],{},"实现文本的第一行首行缩进自己指定的距离",[24,128945,128946],{},"20px往右边走；-20px往左边走",[24,128948,128949],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[303,128951,128953],{"className":469,"code":128952,"language":471,"meta":308,"style":308},"p {\n  text-indent: 2em;\n}\n",[119,128954,128955,128961,128974],{"__ignoreMap":308},[312,128956,128957,128959],{"class":314,"line":315},[312,128958,24],{"class":328},[312,128960,483],{"class":324},[312,128962,128963,128966,128968,128970,128972],{"class":314,"line":171},[312,128964,128965],{"class":488},"  text-indent",[312,128967,492],{"class":324},[312,128969,2027],{"class":488},[312,128971,25350],{"class":1436},[312,128973,498],{"class":324},[312,128975,128976],{"class":314,"line":274},[312,128977,515],{"class":324},[69,128979,128981],{"id":128980},"_645-行间距","6.4.5 行间距",[24,128983,128984],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[303,128986,128988],{"className":469,"code":128987,"language":471,"meta":308,"style":308},"p {\n  line-height: 1.6;\n}\n",[119,128989,128990,128996,129008],{"__ignoreMap":308},[312,128991,128992,128994],{"class":314,"line":315},[312,128993,24],{"class":328},[312,128995,483],{"class":324},[312,128997,128998,129001,129003,129006],{"class":314,"line":171},[312,128999,129000],{"class":488},"  line-height",[312,129002,492],{"class":324},[312,129004,129005],{"class":488},"1.6",[312,129007,498],{"class":324},[312,129009,129010],{"class":314,"line":274},[312,129011,515],{"class":324},[1856,129013,129014],{},"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":308,"searchDepth":171,"depth":171,"links":129016},[129017,129018,129026,129033],{"id":128498,"depth":171,"text":128499},{"id":128533,"depth":171,"text":128534,"children":129019},[129020,129021,129022,129023,129024,129025],{"id":128540,"depth":274,"text":128541},{"id":128553,"depth":274,"text":128554},{"id":128626,"depth":274,"text":128627},{"id":128639,"depth":274,"text":128640},{"id":128658,"depth":274,"text":128659},{"id":128671,"depth":274,"text":128672},{"id":128678,"depth":171,"text":128679,"children":129027},[129028,129029,129030,129031,129032],{"id":128685,"depth":274,"text":128686},{"id":128697,"depth":274,"text":128698},{"id":128750,"depth":274,"text":128751},{"id":128771,"depth":274,"text":128772},{"id":128792,"depth":274,"text":128793},{"id":128818,"depth":171,"text":128819,"children":129034},[129035,129036,129037,129038,129039],{"id":128822,"depth":274,"text":128823},{"id":128872,"depth":274,"text":128873},{"id":128886,"depth":274,"text":128887},{"id":128939,"depth":274,"text":128940},{"id":128980,"depth":274,"text":128981},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128490,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":129046,"title":129047,"body":129048,"description":1878,"extension":1879,"meta":129694,"navigation":1881,"path":129695,"seo":129696,"stem":129697,"__hash__":129698},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":129049,"toc":129675},[129050,129053,129057,129061,129119,129123,129133,129136,129139,129143,129168,129172,129175,129178,129181,129184,129187,129191,129194,129197,129239,129242,129268,129274,129277,129281,129285,129291,129294,129297,129300,129303,129306,129309,129354,129358,129361,129364,129368,129372,129401,129404,129409,129412,129415,129418,129421,129425,129429,129432,129434,129437,129441,129444,129448,129451,129454,129457,129461,129465,129471,129480,129483,129486,129489,129492,129495,129618,129626,129634,129672],[10,129051,129047],{"id":129052},"_7-css引入方式与选择器进阶",[14,129054,129056],{"id":129055},"_71-css引入方式","7.1 css引入方式",[69,129058,129060],{"id":129059},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[303,129062,129064],{"className":305,"code":129063,"language":307,"meta":308,"style":308},"\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n",[119,129065,129066,129074,129081,129093,129106,129111],{"__ignoreMap":308},[312,129067,129068,129070,129072],{"class":314,"line":315},[312,129069,325],{"class":324},[312,129071,1856],{"class":328},[312,129073,343],{"class":324},[312,129075,129076,129079],{"class":314,"line":171},[312,129077,129078],{"class":328},"  h1",[312,129080,483],{"class":324},[312,129082,129083,129086,129088,129091],{"class":314,"line":274},[312,129084,129085],{"class":488},"    color",[312,129087,492],{"class":324},[312,129089,129090],{"class":488},"blue",[312,129092,498],{"class":324},[312,129094,129095,129098,129100,129102,129104],{"class":314,"line":298},[312,129096,129097],{"class":488},"    font-size",[312,129099,492],{"class":324},[312,129101,2744],{"class":488},[312,129103,1437],{"class":1436},[312,129105,498],{"class":324},[312,129107,129108],{"class":314,"line":974},[312,129109,129110],{"class":324},"  }\n",[312,129112,129113,129115,129117],{"class":314,"line":980},[312,129114,353],{"class":324},[312,129116,1856],{"class":328},[312,129118,343],{"class":324},[24,129120,129121,28269],{},[27,129122,128404],{},[24,129124,78998,129125,129128,129129,129132],{},[119,129126,129127],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[119,129130,129131],{},"\u003Chead>","标签中",[24,129134,129135],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[24,129137,129138],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[69,129140,129142],{"id":129141},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[303,129144,129146],{"className":305,"code":129145,"language":307,"meta":308,"style":308},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[119,129147,129148],{"__ignoreMap":308},[312,129149,129150,129152,129154,129156,129158,129161,129164,129166],{"class":314,"line":315},[312,129151,325],{"class":324},[312,129153,24],{"class":328},[312,129155,64404],{"class":332},[312,129157,336],{"class":324},[312,129159,129160],{"class":339},"\"color: red; font-size: 16px;\"",[312,129162,129163],{"class":324},">这是一个段落\u003C\u002F",[312,129165,24],{"class":328},[312,129167,343],{"class":324},[24,129169,129170,28269],{},[27,129171,128404],{},[24,129173,129174],{},"①style其实就是标签的属性",[24,129176,129177],{},"②在双引号中间，写法要符合css规范",[24,129179,129180],{},"③可以控制当前的标签设置样式",[24,129182,129183],{},"④书写繁琐，简单时才用",[24,129185,129186],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[69,129188,129190],{"id":129189},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[24,129192,129193],{},"使用最多，单独建一个css文件，然后html引用",[24,129195,129196],{},"①css文件部分： style.css",[303,129198,129200],{"className":469,"code":129199,"language":471,"meta":308,"style":308},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[119,129201,129202,129207,129213,129223,129235],{"__ignoreMap":308},[312,129203,129204],{"class":314,"line":315},[312,129205,129206],{"class":318},"\u002F* style.css *\u002F\n",[312,129208,129209,129211],{"class":314,"line":171},[312,129210,10],{"class":328},[312,129212,483],{"class":324},[312,129214,129215,129217,129219,129221],{"class":314,"line":274},[312,129216,72677],{"class":488},[312,129218,492],{"class":324},[312,129220,129090],{"class":488},[312,129222,498],{"class":324},[312,129224,129225,129227,129229,129231,129233],{"class":314,"line":298},[312,129226,72400],{"class":488},[312,129228,492],{"class":324},[312,129230,2744],{"class":488},[312,129232,1437],{"class":1436},[312,129234,498],{"class":324},[312,129236,129237],{"class":314,"line":974},[312,129238,515],{"class":324},[24,129240,129241],{},"②html部分",[303,129243,129245],{"className":305,"code":129244,"language":307,"meta":308,"style":308},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[119,129246,129247],{"__ignoreMap":308},[312,129248,129249,129251,129253,129255,129257,129259,129261,129263,129266],{"class":314,"line":315},[312,129250,325],{"class":324},[312,129252,70782],{"class":328},[312,129254,70785],{"class":332},[312,129256,336],{"class":324},[312,129258,70790],{"class":339},[312,129260,648],{"class":332},[312,129262,336],{"class":324},[312,129264,129265],{"class":339},"\"style.css\"",[312,129267,343],{"class":324},[24,129269,129270,129273],{},[119,129271,129272],{},"\u003Chr>","水平线标签（但是不常用！）",[24,129275,129276],{},"ctrl+0回到页面原来大小",[14,129278,129280],{"id":129279},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[69,129282,129284],{"id":129283},"_721-快速生成html","7.2.1 快速生成html",[24,129286,129287,129288],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[119,129289,129290],{},"\u003Cdiv>``\u003C\u002Fdiv>",[24,129292,129293],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[24,129295,129296],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[24,129298,129299],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[24,129301,129302],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[24,129304,129305],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[24,129307,129308],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[303,129310,129312],{"className":305,"code":129311,"language":307,"meta":308,"style":308},"\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",[119,129313,129314,129319,129324,129329,129334,129339,129344,129349],{"__ignoreMap":308},[312,129315,129316],{"class":314,"line":315},[312,129317,129318],{"class":318},"\u003C!-- Emmet 语法示例 -->\n",[312,129320,129321],{"class":314,"line":171},[312,129322,129323],{"class":318},"\u003C!-- div*3        → 生成3个div -->\n",[312,129325,129326],{"class":314,"line":274},[312,129327,129328],{"class":318},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[312,129330,129331],{"class":314,"line":298},[312,129332,129333],{"class":318},"\u003C!-- div+p        → 兄弟div和p -->\n",[312,129335,129336],{"class":314,"line":974},[312,129337,129338],{"class":318},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[312,129340,129341],{"class":314,"line":980},[312,129342,129343],{"class":318},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[312,129345,129346],{"class":314,"line":997},[312,129347,129348],{"class":318},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[312,129350,129351],{"class":314,"line":1003},[312,129352,129353],{"class":318},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[69,129355,129357],{"id":129356},"_722-快速生成css","7.2.2 快速生成css",[24,129359,129360],{},"简写开头",[24,129362,129363],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,129365,129367],{"id":129366},"_73-css复合选择器","7.3 css复合选择器",[69,129369,129371],{"id":129370},"_731-后代选择器","7.3.1 后代选择器",[303,129373,129375],{"className":469,"code":129374,"language":471,"meta":308,"style":308},".parent .child {\n  color: blue;\n}\n",[119,129376,129377,129387,129397],{"__ignoreMap":308},[312,129378,129379,129382,129385],{"class":314,"line":315},[312,129380,129381],{"class":332},".parent",[312,129383,129384],{"class":332}," .child",[312,129386,483],{"class":324},[312,129388,129389,129391,129393,129395],{"class":314,"line":171},[312,129390,72677],{"class":488},[312,129392,492],{"class":324},[312,129394,129090],{"class":488},[312,129396,498],{"class":324},[312,129398,129399],{"class":314,"line":274},[312,129400,515],{"class":324},[24,129402,129403],{},"元素1 元素2 {样式声明}",[24,129405,129406],{},[27,129407,129408],{},"注意点:",[24,129410,129411],{},"①元素1和元素2中间用空格隔开",[24,129413,129414],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[24,129416,129417],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[24,129419,129420],{},"④元素1和元素2可以是任意基础选择器",[69,129422,129424],{"id":129423},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[24,129426,129427],{},[27,129428,129408],{},[24,129430,129431],{},"①元素1和元素2中间用大于号隔开",[24,129433,129414],{},[24,129435,129436],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[69,129438,129440],{"id":129439},"_733-并集选择器","7.3.3 并集选择器",[24,129442,129443],{},"元素1，元素2 {样式声明}",[24,129445,129446],{},[27,129447,129408],{},[24,129449,129450],{},"①元素1和元素2中间用逗号隔开",[24,129452,129453],{},"②逗号可以理解为和的意思",[24,129455,129456],{},"③并集选择器通常用于集体声明",[69,129458,129460],{"id":129459},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[24,129462,129463],{},[27,129464,129408],{},[24,129466,129467,129468,129470],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70782,129469],{},"－:visited－:hover－:active。",[24,129472,129473,129474,129476,129477,27536],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[1220,129475],{}," 、 ",[129478,129479],"first-child",{},[24,129481,129482],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[24,129484,129485],{},"link对没访问的进行设置",[24,129487,129488],{},"vistied对已访问的进行改变",[24,129490,129491],{},"hover鼠标经过就会变",[24,129493,129494],{},"active常按(点)就会变",[303,129496,129498],{"className":469,"code":129497,"language":471,"meta":308,"style":308},"\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",[119,129499,129500,129505,129514,129524,129534,129538,129547,129558,129562,129570,129580,129590,129594,129603,129614],{"__ignoreMap":308},[312,129501,129502],{"class":314,"line":315},[312,129503,129504],{"class":318},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[312,129506,129507,129509,129512],{"class":314,"line":171},[312,129508,164],{"class":328},[312,129510,129511],{"class":332},":link",[312,129513,483],{"class":324},[312,129515,129516,129518,129520,129522],{"class":314,"line":274},[312,129517,72677],{"class":488},[312,129519,492],{"class":324},[312,129521,64147],{"class":488},[312,129523,498],{"class":324},[312,129525,129526,129528,129530,129532],{"class":314,"line":298},[312,129527,72278],{"class":488},[312,129529,492],{"class":324},[312,129531,56521],{"class":488},[312,129533,498],{"class":324},[312,129535,129536],{"class":314,"line":974},[312,129537,515],{"class":324},[312,129539,129540,129542,129545],{"class":314,"line":980},[312,129541,164],{"class":328},[312,129543,129544],{"class":332},":visited",[312,129546,483],{"class":324},[312,129548,129549,129551,129553,129556],{"class":314,"line":997},[312,129550,72677],{"class":488},[312,129552,492],{"class":324},[312,129554,129555],{"class":488},"purple",[312,129557,498],{"class":324},[312,129559,129560],{"class":314,"line":1003},[312,129561,515],{"class":324},[312,129563,129564,129566,129568],{"class":314,"line":1020},[312,129565,164],{"class":328},[312,129567,62721],{"class":332},[312,129569,483],{"class":324},[312,129571,129572,129574,129576,129578],{"class":314,"line":1026},[312,129573,72677],{"class":488},[312,129575,492],{"class":324},[312,129577,56671],{"class":488},[312,129579,498],{"class":324},[312,129581,129582,129584,129586,129588],{"class":314,"line":3418},[312,129583,72278],{"class":488},[312,129585,492],{"class":324},[312,129587,128930],{"class":488},[312,129589,498],{"class":324},[312,129591,129592],{"class":314,"line":3423},[312,129593,515],{"class":324},[312,129595,129596,129598,129601],{"class":314,"line":3429},[312,129597,164],{"class":328},[312,129599,129600],{"class":332},":active",[312,129602,483],{"class":324},[312,129604,129605,129607,129609,129612],{"class":314,"line":3434},[312,129606,72677],{"class":488},[312,129608,492],{"class":324},[312,129610,129611],{"class":488},"green",[312,129613,498],{"class":324},[312,129615,129616],{"class":314,"line":3448},[312,129617,515],{"class":324},[69,129619,129621,129622,129625],{"id":129620},"_735-伪类选择器","7.3.5 ",[129623,129624],"focus",{},"伪类选择器",[24,129627,129628,129630,129631,129633],{},[129623,129629],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[119,129632,128377],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[303,129635,129637],{"className":469,"code":129636,"language":471,"meta":308,"style":308},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[119,129638,129639,129647,129658,129668],{"__ignoreMap":308},[312,129640,129641,129643,129645],{"class":314,"line":315},[312,129642,55605],{"class":328},[312,129644,63678],{"class":332},[312,129646,483],{"class":324},[312,129648,129649,129652,129654,129656],{"class":314,"line":171},[312,129650,129651],{"class":488},"  border-color",[312,129653,492],{"class":324},[312,129655,56671],{"class":488},[312,129657,498],{"class":324},[312,129659,129660,129662,129664,129666],{"class":314,"line":274},[312,129661,72571],{"class":488},[312,129663,492],{"class":324},[312,129665,56521],{"class":488},[312,129667,498],{"class":324},[312,129669,129670],{"class":314,"line":298},[312,129671,515],{"class":324},[1856,129673,129674],{},"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":308,"searchDepth":171,"depth":171,"links":129676},[129677,129682,129686],{"id":129055,"depth":171,"text":129056,"children":129678},[129679,129680,129681],{"id":129059,"depth":274,"text":129060},{"id":129141,"depth":274,"text":129142},{"id":129189,"depth":274,"text":129190},{"id":129279,"depth":171,"text":129280,"children":129683},[129684,129685],{"id":129283,"depth":274,"text":129284},{"id":129356,"depth":274,"text":129357},{"id":129366,"depth":171,"text":129367,"children":129687},[129688,129689,129690,129691,129692],{"id":129370,"depth":274,"text":129371},{"id":129423,"depth":274,"text":129424},{"id":129439,"depth":274,"text":129440},{"id":129459,"depth":274,"text":129460},{"id":129620,"depth":274,"text":129693},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":129047,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129700,"title":129701,"body":129702,"description":1878,"extension":1879,"meta":131622,"navigation":1881,"path":131623,"seo":131624,"stem":131625,"__hash__":131626},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129703,"toc":131596},[129704,129707,129711,129720,129724,129750,129755,129758,129761,129764,129767,129771,129774,129784,129792,129796,129831,129836,129839,129842,129845,129848,129852,129855,129864,129868,129881,129886,129889,129892,129895,129899,129902,129906,129909,129963,129966,129997,130000,130054,130058,130061,130227,130350,130353,130356,130359,130362,130366,130369,130373,130376,130379,130383,130386,130417,130444,130472,130475,130479,130505,130548,130552,130646,130649,130675,130678,130681,130684,130687,130690,130693,130696,130699,130702,130706,130763,130790,130794,130842,130846,130887,130889,130892,130895,130898,130901,130905,130997,131000,131003,131006,131010,131133,131333,131337,131341,131344,131347,131350,131354,131357,131360,131385,131388,131391,131394,131397,131400,131404,131412,131474,131477,131535,131538,131541,131544,131547,131550,131553,131556,131593],[10,129705,129701],{"id":129706},"_8-css显示模式与背景特性",[14,129708,129710],{"id":129709},"_81-css元素显示模式","8.1 css元素显示模式",[24,129712,129713,129714,129716,129717,129719],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[119,129715,127930],{},"自己占一行，比如一行可以放多个",[119,129718,127933],{},"，HTML 元素一般分为块元素和行内元素两种类型",[69,129721,129723],{"id":129722},"_811-块元素","8.1.1 块元素",[24,129725,129726,129727,129729,129730,2159,129733,2159,129735,2159,129737,2159,129740,2159,129743,129746,129747,129749],{},"常见的块元素有",[119,129728,127834],{},"~",[119,129731,129732],{},"\u003Ch6>",[119,129734,127860],{},[119,129736,127930],{},[119,129738,129739],{},"\u003Cul>",[119,129741,129742],{},"\u003Col>",[119,129744,129745],{},"\u003Cli>","等，其中 ",[119,129748,127930],{}," 标签是最典型的块元素",[24,129751,129752],{},[27,129753,129754],{},"块级元素的特点：",[24,129756,129757],{},"① 比较霸道，自己独占一行。",[24,129759,129760],{},"② 高度，宽度、外边距以及内边距都可以控制。",[24,129762,129763],{},"③ 宽度默认是容器（父级宽度）的100%。",[24,129765,129766],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[24,129768,129769],{},[27,129770,1982],{},[24,129772,129773],{},"①文字类的元素内不能使用块级元素",[24,129775,79021,129776,129778,129779,129781,129782],{},[119,129777,127860],{}," 标签主要用于存放文字，因此 ",[119,129780,127860],{}," 里面不能放块级元素，特别是不能放",[119,129783,127930],{},[24,129785,129786,129787,129729,129789,129791],{},"⑥同理， ",[119,129788,127834],{},[119,129790,129732],{},"等都是文字类块级标签，里面也不能放其他块级元素",[69,129793,129795],{"id":129794},"_812-行内元素","8.1.2 行内元素",[24,129797,129798,129799,2159,129801,2159,129804,2159,129807,2159,129810,2159,129813,2159,129816,2159,129819,2159,129822,2159,129825,129827,129828,129830],{},"常见的行内元素有 ",[119,129800,128092],{},[119,129802,129803],{},"\u003Cstrong>",[119,129805,129806],{},"\u003Cb>",[119,129808,129809],{},"\u003Cem>",[119,129811,129812],{},"\u003Ci>",[119,129814,129815],{},"\u003Cdel>",[119,129817,129818],{},"\u003Cs>",[119,129820,129821],{},"\u003Cins>",[119,129823,129824],{},"\u003Cu>",[119,129826,127933],{}," 等，其中 ",[119,129829,127933],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[24,129832,129833],{},[27,129834,129835],{},"特点：",[24,129837,129838],{},"① 相邻行内元素在一行上，一行可以显示多个。",[24,129840,129841],{},"② 高、宽直接设置是无效的。",[24,129843,129844],{},"③ 默认宽度就是它本身内容的宽度。",[24,129846,129847],{},"④ 行内元素只能容纳文本或其他行内元素。",[24,129849,129850],{},[27,129851,1982],{},[24,129853,129854],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[24,129856,129857,129858,129860,129861,129863],{},"②特殊情况链接 ",[119,129859,128092],{}," 里面可以放块级元素，但是给 ",[119,129862,128092],{}," 转换一下块级模式最安全",[69,129865,129867],{"id":129866},"_813-行内块元素","8.1.3 行内块元素",[24,129869,129870,129871,2159,129874,2159,129877,129880],{},"在行内元素中有几个特殊的标签 —— ",[119,129872,129873],{},"\u003Cimg \u002F>",[119,129875,129876],{},"\u003Cinput \u002F>",[119,129878,129879],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[24,129882,129883],{},[27,129884,129885],{},"行内块元素的特点：",[24,129887,129888],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[24,129890,129891],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[24,129893,129894],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[69,129896,129898],{"id":129897},"_814-总结","8.1.4 总结",[19,129900],{"style":21,"src":129901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[69,129903,129905],{"id":129904},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[24,129907,129908],{},"①转换为块元素：display:block;",[303,129910,129912],{"className":469,"code":129911,"language":471,"meta":308,"style":308},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[119,129913,129914,129919,129925,129935,129947,129959],{"__ignoreMap":308},[312,129915,129916],{"class":314,"line":315},[312,129917,129918],{"class":318},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[312,129920,129921,129923],{"class":314,"line":171},[312,129922,164],{"class":328},[312,129924,483],{"class":324},[312,129926,129927,129929,129931,129933],{"class":314,"line":274},[312,129928,503],{"class":488},[312,129930,492],{"class":324},[312,129932,508],{"class":488},[312,129934,498],{"class":324},[312,129936,129937,129939,129941,129943,129945],{"class":314,"line":298},[312,129938,1541],{"class":488},[312,129940,492],{"class":324},[312,129942,2256],{"class":488},[312,129944,1437],{"class":1436},[312,129946,498],{"class":324},[312,129948,129949,129951,129953,129955,129957],{"class":314,"line":974},[312,129950,1555],{"class":488},[312,129952,492],{"class":324},[312,129954,2346],{"class":488},[312,129956,1437],{"class":1436},[312,129958,498],{"class":324},[312,129960,129961],{"class":314,"line":980},[312,129962,515],{"class":324},[24,129964,129965],{},"②转换为行内元素：display:inline;",[303,129967,129969],{"className":469,"code":129968,"language":471,"meta":308,"style":308},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[119,129970,129971,129976,129982,129993],{"__ignoreMap":308},[312,129972,129973],{"class":314,"line":315},[312,129974,129975],{"class":318},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[312,129977,129978,129980],{"class":314,"line":171},[312,129979,329],{"class":328},[312,129981,483],{"class":324},[312,129983,129984,129986,129988,129991],{"class":314,"line":274},[312,129985,503],{"class":488},[312,129987,492],{"class":324},[312,129989,129990],{"class":488},"inline",[312,129992,498],{"class":324},[312,129994,129995],{"class":314,"line":298},[312,129996,515],{"class":324},[24,129998,129999],{},"③转换为行内块：display:inline-block;",[303,130001,130003],{"className":469,"code":130002,"language":471,"meta":308,"style":308},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[119,130004,130005,130010,130016,130026,130038,130050],{"__ignoreMap":308},[312,130006,130007],{"class":314,"line":315},[312,130008,130009],{"class":318},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[312,130011,130012,130014],{"class":314,"line":171},[312,130013,312],{"class":328},[312,130015,483],{"class":324},[312,130017,130018,130020,130022,130024],{"class":314,"line":274},[312,130019,503],{"class":488},[312,130021,492],{"class":324},[312,130023,74155],{"class":488},[312,130025,498],{"class":324},[312,130027,130028,130030,130032,130034,130036],{"class":314,"line":298},[312,130029,1541],{"class":488},[312,130031,492],{"class":324},[312,130033,2557],{"class":488},[312,130035,1437],{"class":1436},[312,130037,498],{"class":324},[312,130039,130040,130042,130044,130046,130048],{"class":314,"line":974},[312,130041,1555],{"class":488},[312,130043,492],{"class":324},[312,130045,2893],{"class":488},[312,130047,1437],{"class":1436},[312,130049,498],{"class":324},[312,130051,130052],{"class":314,"line":980},[312,130053,515],{"class":324},[69,130055,130057],{"id":130056},"_816-小米侧边栏","8.1.6 小米侧边栏",[19,130059],{"style":21,"src":130060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[303,130062,130064],{"className":305,"code":130063,"language":307,"meta":308,"style":308},"\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",[119,130065,130066,130071,130086,130105,130124,130143,130162,130181,130200,130219],{"__ignoreMap":308},[312,130067,130068],{"class":314,"line":315},[312,130069,130070],{"class":318},"\u003C!-- 小米侧边栏案例 -->\n",[312,130072,130073,130075,130077,130079,130081,130084],{"class":314,"line":171},[312,130074,325],{"class":324},[312,130076,329],{"class":328},[312,130078,333],{"class":332},[312,130080,336],{"class":324},[312,130082,130083],{"class":339},"\"sidebar\"",[312,130085,343],{"class":324},[312,130087,130088,130090,130092,130094,130096,130098,130101,130103],{"class":314,"line":274},[312,130089,53930],{"class":324},[312,130091,164],{"class":328},[312,130093,648],{"class":332},[312,130095,336],{"class":324},[312,130097,62842],{"class":339},[312,130099,130100],{"class":324},">手机 电话卡\u003C\u002F",[312,130102,164],{"class":328},[312,130104,343],{"class":324},[312,130106,130107,130109,130111,130113,130115,130117,130120,130122],{"class":314,"line":298},[312,130108,53930],{"class":324},[312,130110,164],{"class":328},[312,130112,648],{"class":332},[312,130114,336],{"class":324},[312,130116,62842],{"class":339},[312,130118,130119],{"class":324},">电视 盒子\u003C\u002F",[312,130121,164],{"class":328},[312,130123,343],{"class":324},[312,130125,130126,130128,130130,130132,130134,130136,130139,130141],{"class":314,"line":974},[312,130127,53930],{"class":324},[312,130129,164],{"class":328},[312,130131,648],{"class":332},[312,130133,336],{"class":324},[312,130135,62842],{"class":339},[312,130137,130138],{"class":324},">笔记本 平板\u003C\u002F",[312,130140,164],{"class":328},[312,130142,343],{"class":324},[312,130144,130145,130147,130149,130151,130153,130155,130158,130160],{"class":314,"line":980},[312,130146,53930],{"class":324},[312,130148,164],{"class":328},[312,130150,648],{"class":332},[312,130152,336],{"class":324},[312,130154,62842],{"class":339},[312,130156,130157],{"class":324},">出行 穿戴\u003C\u002F",[312,130159,164],{"class":328},[312,130161,343],{"class":324},[312,130163,130164,130166,130168,130170,130172,130174,130177,130179],{"class":314,"line":997},[312,130165,53930],{"class":324},[312,130167,164],{"class":328},[312,130169,648],{"class":332},[312,130171,336],{"class":324},[312,130173,62842],{"class":339},[312,130175,130176],{"class":324},">智能 路由器\u003C\u002F",[312,130178,164],{"class":328},[312,130180,343],{"class":324},[312,130182,130183,130185,130187,130189,130191,130193,130196,130198],{"class":314,"line":1003},[312,130184,53930],{"class":324},[312,130186,164],{"class":328},[312,130188,648],{"class":332},[312,130190,336],{"class":324},[312,130192,62842],{"class":339},[312,130194,130195],{"class":324},">健康 儿童\u003C\u002F",[312,130197,164],{"class":328},[312,130199,343],{"class":324},[312,130201,130202,130204,130206,130208,130210,130212,130215,130217],{"class":314,"line":1020},[312,130203,53930],{"class":324},[312,130205,164],{"class":328},[312,130207,648],{"class":332},[312,130209,336],{"class":324},[312,130211,62842],{"class":339},[312,130213,130214],{"class":324},">耳机 音响\u003C\u002F",[312,130216,164],{"class":328},[312,130218,343],{"class":324},[312,130220,130221,130223,130225],{"class":314,"line":1026},[312,130222,353],{"class":324},[312,130224,329],{"class":328},[312,130226,343],{"class":324},[303,130228,130230],{"className":469,"code":130229,"language":471,"meta":308,"style":308},".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",[119,130231,130232,130241,130251,130264,130276,130288,130300,130310,130321,130325,130335,130346],{"__ignoreMap":308},[312,130233,130234,130237,130239],{"class":314,"line":315},[312,130235,130236],{"class":332},".sidebar",[312,130238,3206],{"class":328},[312,130240,483],{"class":324},[312,130242,130243,130245,130247,130249],{"class":314,"line":171},[312,130244,503],{"class":488},[312,130246,492],{"class":324},[312,130248,508],{"class":488},[312,130250,498],{"class":324},[312,130252,130253,130255,130257,130260,130262],{"class":314,"line":274},[312,130254,1541],{"class":488},[312,130256,492],{"class":324},[312,130258,130259],{"class":488},"234",[312,130261,1437],{"class":1436},[312,130263,498],{"class":324},[312,130265,130266,130268,130270,130272,130274],{"class":314,"line":298},[312,130267,1555],{"class":488},[312,130269,492],{"class":324},[312,130271,2397],{"class":488},[312,130273,1437],{"class":1436},[312,130275,498],{"class":324},[312,130277,130278,130280,130282,130284,130286],{"class":314,"line":974},[312,130279,129000],{"class":488},[312,130281,492],{"class":324},[312,130283,2397],{"class":488},[312,130285,1437],{"class":1436},[312,130287,498],{"class":324},[312,130289,130290,130292,130294,130296,130298],{"class":314,"line":980},[312,130291,72596],{"class":488},[312,130293,492],{"class":324},[312,130295,2893],{"class":488},[312,130297,1437],{"class":1436},[312,130299,498],{"class":324},[312,130301,130302,130304,130306,130308],{"class":314,"line":997},[312,130303,72677],{"class":488},[312,130305,492],{"class":324},[312,130307,62624],{"class":488},[312,130309,498],{"class":324},[312,130311,130312,130314,130316,130319],{"class":314,"line":1003},[312,130313,72651],{"class":488},[312,130315,492],{"class":324},[312,130317,130318],{"class":488},"#55585a",[312,130320,498],{"class":324},[312,130322,130323],{"class":314,"line":1020},[312,130324,515],{"class":324},[312,130326,130327,130329,130331,130333],{"class":314,"line":1026},[312,130328,130236],{"class":332},[312,130330,3206],{"class":328},[312,130332,62721],{"class":332},[312,130334,483],{"class":324},[312,130336,130337,130339,130341,130344],{"class":314,"line":3418},[312,130338,72651],{"class":488},[312,130340,492],{"class":324},[312,130342,130343],{"class":488},"#ff6700",[312,130345,498],{"class":324},[312,130347,130348],{"class":314,"line":3423},[312,130349,515],{"class":324},[19,130351],{"style":21,"src":130352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[24,130354,130355],{},"行高=盒子高度：实现文字的垂直居中",[24,130357,130358],{},"原理讲解：",[19,130360],{"style":21,"src":130361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,130363,130365],{"id":130364},"_82-css背景","8.2 css背景",[24,130367,130368],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[69,130370,130372],{"id":130371},"_821-背景颜色","8.2.1 背景颜色",[24,130374,130375],{},"background-color:颜色值;",[24,130377,130378],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[69,130380,130382],{"id":130381},"_822-背景图片","8.2.2 背景图片",[24,130384,130385],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[303,130387,130389],{"className":469,"code":130388,"language":471,"meta":308,"style":308},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[119,130390,130391,130397,130413],{"__ignoreMap":308},[312,130392,130393,130395],{"class":314,"line":315},[312,130394,329],{"class":328},[312,130396,483],{"class":324},[312,130398,130399,130402,130404,130406,130408,130411],{"class":314,"line":171},[312,130400,130401],{"class":488},"  background-image",[312,130403,492],{"class":324},[312,130405,1573],{"class":488},[312,130407,1576],{"class":324},[312,130409,130410],{"class":1579},"images\u002Fbg.png",[312,130412,4524],{"class":324},[312,130414,130415],{"class":314,"line":274},[312,130416,515],{"class":324},[2086,130418,130419,130428],{},[2089,130420,130421],{},[2092,130422,130423,130426],{},[2095,130424,130425],{"align":1374},"参数值",[2095,130427,104465],{"align":1374},[2132,130429,130430,130437],{},[2092,130431,130432,130434],{},[2137,130433,56521],{"align":1374},[2137,130435,130436],{"align":1374},"无背景图（默认的）",[2092,130438,130439,130441],{},[2137,130440,1573],{"align":1374},[2137,130442,130443],{"align":1374},"使用绝对或相对地址指定背景图像",[303,130445,130446],{"className":469,"code":130388,"language":471,"meta":308,"style":308},[119,130447,130448,130454,130468],{"__ignoreMap":308},[312,130449,130450,130452],{"class":314,"line":315},[312,130451,329],{"class":328},[312,130453,483],{"class":324},[312,130455,130456,130458,130460,130462,130464,130466],{"class":314,"line":171},[312,130457,130401],{"class":488},[312,130459,492],{"class":324},[312,130461,1573],{"class":488},[312,130463,1576],{"class":324},[312,130465,130410],{"class":1579},[312,130467,4524],{"class":324},[312,130469,130470],{"class":314,"line":274},[312,130471,515],{"class":324},[24,130473,130474],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[69,130476,130478],{"id":130477},"_823-背景平铺","8.2.3 背景平铺",[303,130480,130482],{"className":469,"code":130481,"language":471,"meta":308,"style":308},"div {\n  background-repeat: no-repeat;\n}\n",[119,130483,130484,130490,130501],{"__ignoreMap":308},[312,130485,130486,130488],{"class":314,"line":315},[312,130487,329],{"class":328},[312,130489,483],{"class":324},[312,130491,130492,130495,130497,130499],{"class":314,"line":171},[312,130493,130494],{"class":488},"  background-repeat",[312,130496,492],{"class":324},[312,130498,1586],{"class":488},[312,130500,498],{"class":324},[312,130502,130503],{"class":314,"line":274},[312,130504,515],{"class":324},[2086,130506,130507,130515],{},[2089,130508,130509],{},[2092,130510,130511,130513],{},[2095,130512,130425],{"align":1374},[2095,130514,104465],{"align":1374},[2132,130516,130517,130525,130532,130540],{},[2092,130518,130519,130522],{},[2137,130520,130521],{"align":1374},"repeat",[2137,130523,130524],{"align":1374},"背景图像在纵向和横向上平铺（默认的）",[2092,130526,130527,130529],{},[2137,130528,1586],{"align":1374},[2137,130530,130531],{"align":1374},"背景图像不平铺",[2092,130533,130534,130537],{},[2137,130535,130536],{"align":1374},"repeat-x",[2137,130538,130539],{"align":1374},"背景图像在横向上平铺",[2092,130541,130542,130545],{},[2137,130543,130544],{"align":1374},"repeat-y",[2137,130546,130547],{"align":1374},"背景图像在纵向平铺",[69,130549,130551],{"id":130550},"_824-背景图片位置","8.2.4 背景图片位置",[303,130553,130555],{"className":469,"code":130554,"language":471,"meta":308,"style":308},"\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",[119,130556,130557,130562,130568,130582,130586,130591,130597,130613,130617,130622,130628,130642],{"__ignoreMap":308},[312,130558,130559],{"class":314,"line":315},[312,130560,130561],{"class":318},"\u002F* 方位名词 *\u002F\n",[312,130563,130564,130566],{"class":314,"line":171},[312,130565,329],{"class":328},[312,130567,483],{"class":324},[312,130569,130570,130573,130575,130577,130580],{"class":314,"line":274},[312,130571,130572],{"class":488},"  background-position",[312,130574,492],{"class":324},[312,130576,53380],{"class":488},[312,130578,130579],{"class":488}," top",[312,130581,498],{"class":324},[312,130583,130584],{"class":314,"line":298},[312,130585,515],{"class":324},[312,130587,130588],{"class":314,"line":974},[312,130589,130590],{"class":318},"\u002F* 精确单位 *\u002F\n",[312,130592,130593,130595],{"class":314,"line":980},[312,130594,329],{"class":328},[312,130596,483],{"class":324},[312,130598,130599,130601,130603,130605,130607,130609,130611],{"class":314,"line":997},[312,130600,130572],{"class":488},[312,130602,492],{"class":324},[312,130604,1546],{"class":488},[312,130606,1437],{"class":1436},[312,130608,59286],{"class":488},[312,130610,1437],{"class":1436},[312,130612,498],{"class":324},[312,130614,130615],{"class":314,"line":1003},[312,130616,515],{"class":324},[312,130618,130619],{"class":314,"line":1020},[312,130620,130621],{"class":318},"\u002F* 混合单位 *\u002F\n",[312,130623,130624,130626],{"class":314,"line":1026},[312,130625,329],{"class":328},[312,130627,483],{"class":324},[312,130629,130630,130632,130634,130636,130638,130640],{"class":314,"line":3418},[312,130631,130572],{"class":488},[312,130633,492],{"class":324},[312,130635,1546],{"class":488},[312,130637,1437],{"class":1436},[312,130639,18944],{"class":488},[312,130641,498],{"class":324},[312,130643,130644],{"class":314,"line":3423},[312,130645,515],{"class":324},[24,130647,130648],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[2086,130650,130651,130659],{},[2089,130652,130653],{},[2092,130654,130655,130657],{},[2095,130656,130425],{"align":1374},[2095,130658,27665],{"align":1374},[2132,130660,130661,130668],{},[2092,130662,130663,130665],{},[2137,130664,53754],{"align":1374},[2137,130666,130667],{"align":1374},"百分数|由浮点数和单位标识符组成的长度值",[2092,130669,130670,130672],{},[2137,130671,942],{"align":1374},[2137,130673,130674],{"align":1374},"top|center|bottom|left|center|right 方位名词",[24,130676,130677],{},"其他说明：",[24,130679,130680],{},"①参数是方位名词",[24,130682,130683],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[24,130685,130686],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[24,130688,130689],{},"②参数是精确单位",[24,130691,130692],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[24,130694,130695],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[24,130697,130698],{},"③参数是混合单位",[24,130700,130701],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[69,130703,130705],{"id":130704},"_825-背景图片固定","8.2.5 背景图片固定",[303,130707,130709],{"className":469,"code":130708,"language":471,"meta":308,"style":308},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[119,130710,130711,130716,130722,130734,130738,130743,130749,130759],{"__ignoreMap":308},[312,130712,130713],{"class":314,"line":315},[312,130714,130715],{"class":318},"\u002F* 背景滚动（默认） *\u002F\n",[312,130717,130718,130720],{"class":314,"line":171},[312,130719,329],{"class":328},[312,130721,483],{"class":324},[312,130723,130724,130727,130729,130732],{"class":314,"line":274},[312,130725,130726],{"class":488},"  background-attachment",[312,130728,492],{"class":324},[312,130730,130731],{"class":488},"scroll",[312,130733,498],{"class":324},[312,130735,130736],{"class":314,"line":298},[312,130737,515],{"class":324},[312,130739,130740],{"class":314,"line":974},[312,130741,130742],{"class":318},"\u002F* 背景固定 *\u002F\n",[312,130744,130745,130747],{"class":314,"line":980},[312,130746,329],{"class":328},[312,130748,483],{"class":324},[312,130750,130751,130753,130755,130757],{"class":314,"line":997},[312,130752,130726],{"class":488},[312,130754,492],{"class":324},[312,130756,1015],{"class":488},[312,130758,498],{"class":324},[312,130760,130761],{"class":314,"line":1003},[312,130762,515],{"class":324},[2086,130764,130765,130774],{},[2089,130766,130767],{},[2092,130768,130769,130772],{},[2095,130770,130771],{"align":1374},"参数",[2095,130773,104465],{"align":1374},[2132,130775,130776,130783],{},[2092,130777,130778,130780],{},[2137,130779,130731],{"align":1374},[2137,130781,130782],{"align":1374},"背景图像是随对象内容滚动",[2092,130784,130785,130787],{},[2137,130786,1015],{"align":1374},[2137,130788,130789],{"align":1374},"背景图像固定",[69,130791,130793],{"id":130792},"_826-背景样式合写","8.2.6 背景样式合写",[303,130795,130797],{"className":469,"code":130796,"language":471,"meta":308,"style":308},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[119,130798,130799,130804,130810,130838],{"__ignoreMap":308},[312,130800,130801],{"class":314,"line":315},[312,130802,130803],{"class":318},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[312,130805,130806,130808],{"class":314,"line":171},[312,130807,329],{"class":328},[312,130809,483],{"class":324},[312,130811,130812,130814,130816,130818,130821,130823,130825,130827,130829,130832,130834,130836],{"class":314,"line":274},[312,130813,1568],{"class":488},[312,130815,492],{"class":324},[312,130817,62624],{"class":488},[312,130819,130820],{"class":488}," url",[312,130822,1576],{"class":324},[312,130824,130410],{"class":1579},[312,130826,1583],{"class":324},[312,130828,1586],{"class":488},[312,130830,130831],{"class":488}," fixed",[312,130833,18944],{"class":488},[312,130835,130579],{"class":488},[312,130837,498],{"class":324},[312,130839,130840],{"class":314,"line":298},[312,130841,515],{"class":324},[69,130843,130845],{"id":130844},"_827-背景色半透明","8.2.7 背景色半透明",[303,130847,130849],{"className":469,"code":130848,"language":471,"meta":308,"style":308},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[119,130850,130851,130857,130883],{"__ignoreMap":308},[312,130852,130853,130855],{"class":314,"line":315},[312,130854,329],{"class":328},[312,130856,483],{"class":324},[312,130858,130859,130861,130863,130865,130867,130869,130871,130873,130875,130877,130879,130881],{"class":314,"line":171},[312,130860,1568],{"class":488},[312,130862,492],{"class":324},[312,130864,56892],{"class":488},[312,130866,1576],{"class":324},[312,130868,858],{"class":488},[312,130870,733],{"class":324},[312,130872,858],{"class":488},[312,130874,733],{"class":324},[312,130876,858],{"class":488},[312,130878,733],{"class":324},[312,130880,102291],{"class":488},[312,130882,4524],{"class":324},[312,130884,130885],{"class":314,"line":274},[312,130886,515],{"class":324},[24,130888,101166],{},[24,130890,130891],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[24,130893,130894],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[24,130896,130897],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[24,130899,130900],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[69,130902,130904],{"id":130903},"_828-总结","8.2.8 总结",[2086,130906,130907,130918],{},[2089,130908,130909],{},[2092,130910,130911,130914,130916],{},[2095,130912,130913],{"align":1374},"属性",[2095,130915,104465],{"align":1374},[2095,130917,2100],{"align":1374},[2132,130919,130920,130931,130942,130953,130964,130975,130986],{},[2092,130921,130922,130925,130928],{},[2137,130923,130924],{"align":1374},"background-color",[2137,130926,130927],{"align":1374},"背景颜色",[2137,130929,130930],{"align":1374},"预定义的颜色值\u002F十六进制\u002FRGB代码",[2092,130932,130933,130936,130939],{},[2137,130934,130935],{"align":1374},"background-image",[2137,130937,130938],{"align":1374},"背景图片",[2137,130940,130941],{"align":1374},"url(图片路径)",[2092,130943,130944,130947,130950],{},[2137,130945,130946],{"align":1374},"background-repeat",[2137,130948,130949],{"align":1374},"是否平铺",[2137,130951,130952],{"align":1374},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[2092,130954,130955,130958,130961],{},[2137,130956,130957],{"align":1374},"background-position",[2137,130959,130960],{"align":1374},"背景位置",[2137,130962,130963],{"align":1374},"length\u002Fposition 分别是x和y坐标",[2092,130965,130966,130969,130972],{},[2137,130967,130968],{"align":1374},"background-attachment",[2137,130970,130971],{"align":1374},"背景附着",[2137,130973,130974],{"align":1374},"scroll(背景滚动) \u002Ffixed (背景固定)",[2092,130976,130977,130980,130983],{},[2137,130978,130979],{"align":1374},"背景简写",[2137,130981,130982],{"align":1374},"书写更简单",[2137,130984,130985],{"align":1374},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[2092,130987,130988,130991,130994],{},[2137,130989,130990],{"align":1374},"背景半透明",[2137,130992,130993],{"align":1374},"背景颜色半透明",[2137,130995,130996],{"align":1374},"background: rgba(0,0,0.3); 后面必须是4个值",[24,130998,130999],{},"颜色渐变：",[19,131001],{"style":21,"src":131002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[19,131004],{"style":21,"src":131005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[69,131007,131009],{"id":131008},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[303,131011,131013],{"className":305,"code":131012,"language":307,"meta":308,"style":308},"\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",[119,131014,131015,131030,131049,131068,131087,131106,131125],{"__ignoreMap":308},[312,131016,131017,131019,131021,131023,131025,131028],{"class":314,"line":315},[312,131018,325],{"class":324},[312,131020,329],{"class":328},[312,131022,333],{"class":332},[312,131024,336],{"class":324},[312,131026,131027],{"class":339},"\"nav\"",[312,131029,343],{"class":324},[312,131031,131032,131034,131036,131038,131040,131042,131045,131047],{"class":314,"line":171},[312,131033,53930],{"class":324},[312,131035,164],{"class":328},[312,131037,648],{"class":332},[312,131039,336],{"class":324},[312,131041,62842],{"class":339},[312,131043,131044],{"class":324},">五彩导航1\u003C\u002F",[312,131046,164],{"class":328},[312,131048,343],{"class":324},[312,131050,131051,131053,131055,131057,131059,131061,131064,131066],{"class":314,"line":274},[312,131052,53930],{"class":324},[312,131054,164],{"class":328},[312,131056,648],{"class":332},[312,131058,336],{"class":324},[312,131060,62842],{"class":339},[312,131062,131063],{"class":324},">五彩导航2\u003C\u002F",[312,131065,164],{"class":328},[312,131067,343],{"class":324},[312,131069,131070,131072,131074,131076,131078,131080,131083,131085],{"class":314,"line":298},[312,131071,53930],{"class":324},[312,131073,164],{"class":328},[312,131075,648],{"class":332},[312,131077,336],{"class":324},[312,131079,62842],{"class":339},[312,131081,131082],{"class":324},">五彩导航3\u003C\u002F",[312,131084,164],{"class":328},[312,131086,343],{"class":324},[312,131088,131089,131091,131093,131095,131097,131099,131102,131104],{"class":314,"line":974},[312,131090,53930],{"class":324},[312,131092,164],{"class":328},[312,131094,648],{"class":332},[312,131096,336],{"class":324},[312,131098,62842],{"class":339},[312,131100,131101],{"class":324},">五彩导航4\u003C\u002F",[312,131103,164],{"class":328},[312,131105,343],{"class":324},[312,131107,131108,131110,131112,131114,131116,131118,131121,131123],{"class":314,"line":980},[312,131109,53930],{"class":324},[312,131111,164],{"class":328},[312,131113,648],{"class":332},[312,131115,336],{"class":324},[312,131117,62842],{"class":339},[312,131119,131120],{"class":324},">五彩导航5\u003C\u002F",[312,131122,164],{"class":328},[312,131124,343],{"class":324},[312,131126,131127,131129,131131],{"class":314,"line":997},[312,131128,353],{"class":324},[312,131130,329],{"class":328},[312,131132,343],{"class":324},[303,131134,131136],{"className":469,"code":131135,"language":471,"meta":308,"style":308},".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",[119,131137,131138,131147,131157,131169,131181,131191,131203,131213,131217,131241,131264,131287,131310],{"__ignoreMap":308},[312,131139,131140,131143,131145],{"class":314,"line":315},[312,131141,131142],{"class":332},".nav",[312,131144,3206],{"class":328},[312,131146,483],{"class":324},[312,131148,131149,131151,131153,131155],{"class":314,"line":171},[312,131150,503],{"class":488},[312,131152,492],{"class":324},[312,131154,74155],{"class":488},[312,131156,498],{"class":324},[312,131158,131159,131161,131163,131165,131167],{"class":314,"line":274},[312,131160,1541],{"class":488},[312,131162,492],{"class":324},[312,131164,2761],{"class":488},[312,131166,1437],{"class":1436},[312,131168,498],{"class":324},[312,131170,131171,131173,131175,131177,131179],{"class":314,"line":298},[312,131172,1555],{"class":488},[312,131174,492],{"class":324},[312,131176,2800],{"class":488},[312,131178,1437],{"class":1436},[312,131180,498],{"class":324},[312,131182,131183,131185,131187,131189],{"class":314,"line":974},[312,131184,72302],{"class":488},[312,131186,492],{"class":324},[312,131188,53380],{"class":488},[312,131190,498],{"class":324},[312,131192,131193,131195,131197,131199,131201],{"class":314,"line":980},[312,131194,129000],{"class":488},[312,131196,492],{"class":324},[312,131198,2800],{"class":488},[312,131200,1437],{"class":1436},[312,131202,498],{"class":324},[312,131204,131205,131207,131209,131211],{"class":314,"line":997},[312,131206,72677],{"class":488},[312,131208,492],{"class":324},[312,131210,62624],{"class":488},[312,131212,498],{"class":324},[312,131214,131215],{"class":314,"line":1003},[312,131216,515],{"class":324},[312,131218,131219,131221,131223,131226,131228,131230,131233,131235,131237,131239],{"class":314,"line":1020},[312,131220,131142],{"class":332},[312,131222,3206],{"class":328},[312,131224,131225],{"class":332},":nth-child",[312,131227,1576],{"class":324},[312,131229,1433],{"class":488},[312,131231,131232],{"class":324},") { ",[312,131234,130924],{"class":488},[312,131236,492],{"class":324},[312,131238,130343],{"class":488},[312,131240,950],{"class":324},[312,131242,131243,131245,131247,131249,131251,131253,131255,131257,131259,131262],{"class":314,"line":1026},[312,131244,131142],{"class":332},[312,131246,3206],{"class":328},[312,131248,131225],{"class":332},[312,131250,1576],{"class":324},[312,131252,2027],{"class":488},[312,131254,131232],{"class":324},[312,131256,130924],{"class":488},[312,131258,492],{"class":324},[312,131260,131261],{"class":488},"#ff0000",[312,131263,950],{"class":324},[312,131265,131266,131268,131270,131272,131274,131276,131278,131280,131282,131285],{"class":314,"line":3418},[312,131267,131142],{"class":332},[312,131269,3206],{"class":328},[312,131271,131225],{"class":332},[312,131273,1576],{"class":324},[312,131275,2021],{"class":488},[312,131277,131232],{"class":324},[312,131279,130924],{"class":488},[312,131281,492],{"class":324},[312,131283,131284],{"class":488},"#00a4ff",[312,131286,950],{"class":324},[312,131288,131289,131291,131293,131295,131297,131299,131301,131303,131305,131308],{"class":314,"line":3423},[312,131290,131142],{"class":332},[312,131292,3206],{"class":328},[312,131294,131225],{"class":332},[312,131296,1576],{"class":324},[312,131298,2238],{"class":488},[312,131300,131232],{"class":324},[312,131302,130924],{"class":488},[312,131304,492],{"class":324},[312,131306,131307],{"class":488},"#ff00ff",[312,131309,950],{"class":324},[312,131311,131312,131314,131316,131318,131320,131322,131324,131326,131328,131331],{"class":314,"line":3429},[312,131313,131142],{"class":332},[312,131315,3206],{"class":328},[312,131317,131225],{"class":332},[312,131319,1576],{"class":324},[312,131321,2264],{"class":488},[312,131323,131232],{"class":324},[312,131325,130924],{"class":488},[312,131327,492],{"class":324},[312,131329,131330],{"class":488},"#00ff00",[312,131332,950],{"class":324},[14,131334,131336],{"id":131335},"_83-css三大特性","8.3 css三大特性",[69,131338,131340],{"id":131339},"_831-层叠性","8.3.1 层叠性",[24,131342,131343],{},"为了解决样式冲突问题",[24,131345,131346],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[24,131348,131349],{},"   ②样式不冲突，不会层叠",[69,131351,131353],{"id":131352},"_832-继承性","8.3.2 继承性",[24,131355,131356],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[24,131358,131359],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[303,131361,131363],{"className":469,"code":131362,"language":471,"meta":308,"style":308},"p {\n  color: #333;\n}\n",[119,131364,131365,131371,131381],{"__ignoreMap":308},[312,131366,131367,131369],{"class":314,"line":315},[312,131368,24],{"class":328},[312,131370,483],{"class":324},[312,131372,131373,131375,131377,131379],{"class":314,"line":171},[312,131374,72677],{"class":488},[312,131376,492],{"class":324},[312,131378,64147],{"class":488},[312,131380,498],{"class":324},[312,131382,131383],{"class":314,"line":274},[312,131384,515],{"class":324},[19,131386],{"style":21,"src":131387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[24,131389,131390],{},"解释：①行高可以跟单位也可以不跟单位",[24,131392,131393],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[24,131395,131396],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[24,131398,131399],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[69,131401,131403],{"id":131402},"_833-优先级","8.3.3 优先级",[140,131405,131406,131409],{},[143,131407,131408],{},"选择器相同，则执行层叠性",[143,131410,131411],{},"选择器不同，则根据选择器权重执行",[2086,131413,131414,131424],{},[2089,131415,131416],{},[2092,131417,131418,131421],{},[2095,131419,131420],{"align":1374},"选择器",[2095,131422,131423],{"align":1374},"选择器权重",[2132,131425,131426,131434,131442,131450,131458,131466],{},[2092,131427,131428,131431],{},[2137,131429,131430],{"align":1374},"继承 或者*",[2137,131432,131433],{"align":1374},"0，0，0，0",[2092,131435,131436,131439],{},[2137,131437,131438],{"align":1374},"标签选择器",[2137,131440,131441],{"align":1374},"0，0，0，1",[2092,131443,131444,131447],{},[2137,131445,131446],{"align":1374},"类选择器，伪类选择器",[2137,131448,131449],{"align":1374},"0，0，1，0",[2092,131451,131452,131455],{},[2137,131453,131454],{"align":1374},"ID选择器",[2137,131456,131457],{"align":1374},"0，1，0，0",[2092,131459,131460,131463],{},[2137,131461,131462],{"align":1374},"行内样式",[2137,131464,131465],{"align":1374},"1，0，0，0",[2092,131467,131468,131471],{},[2137,131469,131470],{"align":1374},"！important",[2137,131472,131473],{"align":1374},"无穷大",[24,131475,131476],{},"! important用法：",[303,131478,131480],{"className":469,"code":131479,"language":471,"meta":308,"style":308},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[119,131481,131482,131487,131493,131506,131510,131515,131521,131531],{"__ignoreMap":308},[312,131483,131484],{"class":314,"line":315},[312,131485,131486],{"class":318},"\u002F* !important 拥有最高优先级 *\u002F\n",[312,131488,131489,131491],{"class":314,"line":171},[312,131490,329],{"class":328},[312,131492,483],{"class":324},[312,131494,131495,131497,131499,131501,131504],{"class":314,"line":274},[312,131496,72677],{"class":488},[312,131498,492],{"class":324},[312,131500,53432],{"class":488},[312,131502,131503],{"class":1436}," !important",[312,131505,498],{"class":324},[312,131507,131508],{"class":314,"line":298},[312,131509,515],{"class":324},[312,131511,131512],{"class":314,"line":974},[312,131513,131514],{"class":318},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[312,131516,131517,131519],{"class":314,"line":980},[312,131518,329],{"class":328},[312,131520,483],{"class":324},[312,131522,131523,131525,131527,131529],{"class":314,"line":997},[312,131524,72677],{"class":488},[312,131526,492],{"class":324},[312,131528,59203],{"class":488},[312,131530,498],{"class":324},[312,131532,131533],{"class":314,"line":1003},[312,131534,515],{"class":324},[24,131536,131537],{},"优先级注意点：",[24,131539,131540],{},"①权重是有4组数字组成,但是不会有进位",[24,131542,131543],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[24,131545,131546],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[24,131548,131549],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[24,131551,131552],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[24,131554,131555],{},"⑥复合选择器",[2086,131557,131558,131568],{},[2089,131559,131560],{},[2092,131561,131562,131565],{},[2095,131563,131564],{"align":1374},"div ul li",[2095,131566,131567],{"align":1374},"0,0,0,3",[2132,131569,131570,131578,131586],{},[2092,131571,131572,131575],{},[2137,131573,131574],{"align":1374},".nav ul li",[2137,131576,131577],{"align":1374},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[2092,131579,131580,131583],{},[2137,131581,131582],{"align":1374},"a:hover",[2137,131584,131585],{"align":1374},"0,0,1,1",[2092,131587,131588,131591],{},[2137,131589,131590],{"align":1374},".nav a",[2137,131592,131585],{"align":1374},[1856,131594,131595],{},"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":308,"searchDepth":171,"depth":171,"links":131597},[131598,131606,131617],{"id":129709,"depth":171,"text":129710,"children":131599},[131600,131601,131602,131603,131604,131605],{"id":129722,"depth":274,"text":129723},{"id":129794,"depth":274,"text":129795},{"id":129866,"depth":274,"text":129867},{"id":129897,"depth":274,"text":129898},{"id":129904,"depth":274,"text":129905},{"id":130056,"depth":274,"text":130057},{"id":130364,"depth":171,"text":130365,"children":131607},[131608,131609,131610,131611,131612,131613,131614,131615,131616],{"id":130371,"depth":274,"text":130372},{"id":130381,"depth":274,"text":130382},{"id":130477,"depth":274,"text":130478},{"id":130550,"depth":274,"text":130551},{"id":130704,"depth":274,"text":130705},{"id":130792,"depth":274,"text":130793},{"id":130844,"depth":274,"text":130845},{"id":130903,"depth":274,"text":130904},{"id":131008,"depth":274,"text":131009},{"id":131335,"depth":171,"text":131336,"children":131618},[131619,131620,131621],{"id":131339,"depth":274,"text":131340},{"id":131352,"depth":274,"text":131353},{"id":131402,"depth":274,"text":131403},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129701,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131628,"title":131629,"body":131630,"description":1878,"extension":1879,"meta":133212,"navigation":1881,"path":133213,"seo":133214,"stem":133215,"__hash__":133216},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131631,"toc":133191},[131632,131635,131639,131642,131645,131648,131651,131654,131657,131660,131664,131672,131708,131744,131747,131761,131766,131800,131803,131896,131901,131904,131934,131937,131942,131950,131954,131961,132007,132051,132056,132059,132062,132065,132068,132071,132074,132076,132079,132083,132088,132132,132137,132140,132143,132179,132184,132187,132190,132193,132196,132228,132231,132234,132237,132269,132272,132275,132278,132282,132285,132317,132320,132324,132344,132347,132355,132358,132362,132367,132370,132402,132407,132410,132444,132448,132453,132456,132459,132489,132492,132509,132514,132566,132626,132631,132685,132723,132727,132731,132734,132738,132746,132749,132751,132762,132767,132814,132848,132851,132854,132857,132860,132904,132907,132910,132913,132916,132919,132922,132966,132969,132972,132975,132978,132981,132984,132990,132993,133037,133040,133043,133046,133049,133052,133096,133099,133101,133104,133108,133112,133150,133154,133157,133160,133164,133172,133176,133179,133182,133185,133188],[10,131633,131629],{"id":131634},"_9-css盒模型浮动与切图",[14,131636,131638],{"id":131637},"_91-盒子模型","9.1 盒子模型",[24,131640,131641],{},"利用盒子来设计网页",[24,131643,131644],{},"盒子包含：边框、外边距、内边距、实际内容",[24,131646,131647],{},"网页布局设置：",[24,131649,131650],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[24,131652,131653],{},"②利用css设置好盒子样式，然后摆放到相应位置",[24,131655,131656],{},"③往盒子里装内容",[19,131658],{"style":21,"src":131659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[69,131661,131663],{"id":131662},"_911-边框border","9.1.1 边框（border）",[140,131665,131666,131669],{},[143,131667,131668],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[143,131670,131671],{},"语法",[303,131673,131675],{"className":469,"code":131674,"language":471,"meta":308,"style":308},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[119,131676,131677,131682,131688,131704],{"__ignoreMap":308},[312,131678,131679],{"class":314,"line":315},[312,131680,131681],{"class":318},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[312,131683,131684,131686],{"class":314,"line":171},[312,131685,329],{"class":328},[312,131687,483],{"class":324},[312,131689,131690,131692,131694,131696,131698,131700,131702],{"class":314,"line":274},[312,131691,1428],{"class":488},[312,131693,492],{"class":324},[312,131695,1433],{"class":488},[312,131697,1437],{"class":1436},[312,131699,1440],{"class":488},[312,131701,1443],{"class":488},[312,131703,498],{"class":324},[312,131705,131706],{"class":314,"line":298},[312,131707,515],{"class":324},[2086,131709,131710,131718],{},[2089,131711,131712],{},[2092,131713,131714,131716],{},[2095,131715,130913],{"align":1374},[2095,131717,104465],{"align":1374},[2132,131719,131720,131728,131736],{},[2092,131721,131722,131725],{},[2137,131723,131724],{"align":1374},"border-width",[2137,131726,131727],{"align":1374},"定义边框粗细，单位是px",[2092,131729,131730,131733],{},[2137,131731,131732],{"align":1374},"border-style",[2137,131734,131735],{"align":1374},"边框的样式",[2092,131737,131738,131741],{},[2137,131739,131740],{"align":1374},"border-color",[2137,131742,131743],{"align":1374},"边框的颜色",[24,131745,131746],{},"边框样式 border-style 可以设置如下值：",[243,131748,131749,131752,131755,131758],{},[143,131750,131751],{},"none：没有边框即忽略所有边框的宽度（默认值）",[143,131753,131754],{},"solid：边框为单实线(最为常用的)",[143,131756,131757],{},"dashed：边框为虚线",[143,131759,131760],{},"dotted：边框为点线",[140,131762,131763],{"start":274},[143,131764,131765],{},"边框的合写分写",[303,131767,131768],{"className":469,"code":131674,"language":471,"meta":308,"style":308},[119,131769,131770,131774,131780,131796],{"__ignoreMap":308},[312,131771,131772],{"class":314,"line":315},[312,131773,131681],{"class":318},[312,131775,131776,131778],{"class":314,"line":171},[312,131777,329],{"class":328},[312,131779,483],{"class":324},[312,131781,131782,131784,131786,131788,131790,131792,131794],{"class":314,"line":274},[312,131783,1428],{"class":488},[312,131785,492],{"class":324},[312,131787,1433],{"class":488},[312,131789,1437],{"class":1436},[312,131791,1440],{"class":488},[312,131793,1443],{"class":488},[312,131795,498],{"class":324},[312,131797,131798],{"class":314,"line":298},[312,131799,515],{"class":324},[24,131801,131802],{},"边框分开写法：",[303,131804,131806],{"className":469,"code":131805,"language":471,"meta":308,"style":308},"\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",[119,131807,131808,131813,131819,131837,131855,131874,131892],{"__ignoreMap":308},[312,131809,131810],{"class":314,"line":315},[312,131811,131812],{"class":318},"\u002F* 边框分开写法 *\u002F\n",[312,131814,131815,131817],{"class":314,"line":171},[312,131816,329],{"class":328},[312,131818,483],{"class":324},[312,131820,131821,131824,131826,131828,131830,131832,131835],{"class":314,"line":274},[312,131822,131823],{"class":488},"  border-top",[312,131825,492],{"class":324},[312,131827,1433],{"class":488},[312,131829,1437],{"class":1436},[312,131831,1440],{"class":488},[312,131833,131834],{"class":488}," #000",[312,131836,498],{"class":324},[312,131838,131839,131842,131844,131846,131848,131850,131853],{"class":314,"line":298},[312,131840,131841],{"class":488},"  border-right",[312,131843,492],{"class":324},[312,131845,2027],{"class":488},[312,131847,1437],{"class":1436},[312,131849,64019],{"class":488},[312,131851,131852],{"class":488}," #333",[312,131854,498],{"class":324},[312,131856,131857,131860,131862,131864,131866,131869,131872],{"class":314,"line":974},[312,131858,131859],{"class":488},"  border-bottom",[312,131861,492],{"class":324},[312,131863,2021],{"class":488},[312,131865,1437],{"class":1436},[312,131867,131868],{"class":488}," dotted",[312,131870,131871],{"class":488}," #666",[312,131873,498],{"class":324},[312,131875,131876,131879,131881,131883,131885,131887,131890],{"class":314,"line":980},[312,131877,131878],{"class":488},"  border-left",[312,131880,492],{"class":324},[312,131882,1433],{"class":488},[312,131884,1437],{"class":1436},[312,131886,1440],{"class":488},[312,131888,131889],{"class":488}," #999",[312,131891,498],{"class":324},[312,131893,131894],{"class":314,"line":997},[312,131895,515],{"class":324},[140,131897,131898],{"start":298},[143,131899,131900],{},"表格的细线边框",[24,131902,131903],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[303,131905,131907],{"className":469,"code":131906,"language":471,"meta":308,"style":308},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[119,131908,131909,131914,131920,131930],{"__ignoreMap":308},[312,131910,131911],{"class":314,"line":315},[312,131912,131913],{"class":318},"\u002F* 表格细线边框合并 *\u002F\n",[312,131915,131916,131918],{"class":314,"line":171},[312,131917,2086],{"class":328},[312,131919,483],{"class":324},[312,131921,131922,131924,131926,131928],{"class":314,"line":274},[312,131923,72353],{"class":488},[312,131925,492],{"class":324},[312,131927,66813],{"class":488},[312,131929,498],{"class":324},[312,131931,131932],{"class":314,"line":298},[312,131933,515],{"class":324},[24,131935,131936],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[140,131938,131939],{"start":974},[143,131940,131941],{},"解决边框额外增加盒子的实际大小的方法：",[243,131943,131944,131947],{},[143,131945,131946],{},"测量盒子大小的时候,不量边框",[143,131948,131949],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[69,131951,131953],{"id":131952},"_912-内边距","9.1.2 内边距",[140,131955,131956,131959],{},[143,131957,131958],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[143,131960,131671],{},[2086,131962,131963,131973],{},[2089,131964,131965],{},[2092,131966,131967,131970],{},[2095,131968,131969],{"align":1374},"值的个数",[2095,131971,131972],{"align":1374},"表达意思",[2132,131974,131975,131983,131991,131999],{},[2092,131976,131977,131980],{},[2137,131978,131979],{"align":1374},"padding: 5px;",[2137,131981,131982],{"align":1374},"1个值，代表上下左右都有5个元素",[2092,131984,131985,131988],{},[2137,131986,131987],{"align":1374},"padding: 5px 10px;",[2137,131989,131990],{"align":1374},"2个值，代表上下内边距为5像素，左右内边距为10像素",[2092,131992,131993,131996],{},[2137,131994,131995],{"align":1374},"padding: 5px 10px 20px;",[2137,131997,131998],{"align":1374},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[2092,132000,132001,132004],{},[2137,132002,132003],{"align":1374},"padding: 5px 10px 20px 30px;",[2137,132005,132006],{"align":1374},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[2086,132008,132009,132017],{},[2089,132010,132011],{},[2092,132012,132013,132015],{},[2095,132014,130913],{"align":1374},[2095,132016,104465],{"align":1374},[2132,132018,132019,132027,132035,132043],{},[2092,132020,132021,132024],{},[2137,132022,132023],{"align":1374},"padding-left",[2137,132025,132026],{"align":1374},"左内边距",[2092,132028,132029,132032],{},[2137,132030,132031],{"align":1374},"padding-right",[2137,132033,132034],{"align":1374},"右内边距",[2092,132036,132037,132040],{},[2137,132038,132039],{"align":1374},"padding-top",[2137,132041,132042],{"align":1374},"上内边距",[2092,132044,132045,132048],{},[2137,132046,132047],{"align":1374},"padding-bottom",[2137,132049,132050],{"align":1374},"下内边距",[140,132052,132053],{"start":274},[143,132054,132055],{},"内边距会影响盒子的实际大小",[24,132057,132058],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[24,132060,132061],{},"①内容和边框有了距离，添加了内边距",[24,132063,132064],{},"②padding影响了盒子实际大小",[24,132066,132067],{},"内边距对盒子大小的影响：",[24,132069,132070],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[24,132072,132073],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[24,132075,96990],{},[24,132077,132078],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[69,132080,132082],{"id":132081},"_913-外边距","9.1.3 外边距",[140,132084,132085],{},[143,132086,132087],{},"控制盒子与盒子之间的距离",[2086,132089,132090,132098],{},[2089,132091,132092],{},[2092,132093,132094,132096],{},[2095,132095,130913],{"align":1374},[2095,132097,104465],{"align":1374},[2132,132099,132100,132108,132116,132124],{},[2092,132101,132102,132105],{},[2137,132103,132104],{"align":1374},"margin-left",[2137,132106,132107],{"align":1374},"左外边距",[2092,132109,132110,132113],{},[2137,132111,132112],{"align":1374},"margin-right",[2137,132114,132115],{"align":1374},"右外边距",[2092,132117,132118,132121],{},[2137,132119,132120],{"align":1374},"margin-top",[2137,132122,132123],{"align":1374},"上外边距",[2092,132125,132126,132129],{},[2137,132127,132128],{"align":1374},"margin-bottom",[2137,132130,132131],{"align":1374},"下外边距",[140,132133,132134],{"start":171},[143,132135,132136],{},"外边距可以让块级盒子水平居中的两个条件：",[24,132138,132139],{},"①盒子必须指定了宽度（width）",[24,132141,132142],{},"②盒子左右的外边距都设置为 auto",[303,132144,132146],{"className":469,"code":132145,"language":471,"meta":308,"style":308},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[119,132147,132148,132153,132159,132175],{"__ignoreMap":308},[312,132149,132150],{"class":314,"line":315},[312,132151,132152],{"class":318},"\u002F* margin 复合写法（同上） *\u002F\n",[312,132154,132155,132157],{"class":314,"line":171},[312,132156,1362],{"class":332},[312,132158,483],{"class":324},[312,132160,132161,132163,132165,132167,132169,132172],{"class":314,"line":274},[312,132162,853],{"class":488},[312,132164,492],{"class":324},[312,132166,858],{"class":488},[312,132168,861],{"class":488},[312,132170,132171],{"class":324},";  ",[312,132173,132174],{"class":318},"\u002F* 块级盒子水平居中 *\u002F\n",[312,132176,132177],{"class":314,"line":298},[312,132178,515],{"class":324},[140,132180,132181],{"start":274},[143,132182,132183],{},"外边距塌陷问题",[24,132185,132186],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[19,132188],{"style":21,"src":132189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[24,132191,132192],{},"解决方案：",[24,132194,132195],{},"①可以为父亲元素定义上边距",[303,132197,132198],{"className":469,"code":132145,"language":471,"meta":308,"style":308},[119,132199,132200,132204,132210,132224],{"__ignoreMap":308},[312,132201,132202],{"class":314,"line":315},[312,132203,132152],{"class":318},[312,132205,132206,132208],{"class":314,"line":171},[312,132207,1362],{"class":332},[312,132209,483],{"class":324},[312,132211,132212,132214,132216,132218,132220,132222],{"class":314,"line":274},[312,132213,853],{"class":488},[312,132215,492],{"class":324},[312,132217,858],{"class":488},[312,132219,861],{"class":488},[312,132221,132171],{"class":324},[312,132223,132174],{"class":318},[312,132225,132226],{"class":314,"line":298},[312,132227,515],{"class":324},[24,132229,132230],{},"②可以为父亲元素定义上内边距",[24,132232,132233],{},"③可以为父亲元素添加overflow:hidden",[19,132235],{"style":21,"src":132236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[303,132238,132239],{"className":469,"code":132145,"language":471,"meta":308,"style":308},[119,132240,132241,132245,132251,132265],{"__ignoreMap":308},[312,132242,132243],{"class":314,"line":315},[312,132244,132152],{"class":318},[312,132246,132247,132249],{"class":314,"line":171},[312,132248,1362],{"class":332},[312,132250,483],{"class":324},[312,132252,132253,132255,132257,132259,132261,132263],{"class":314,"line":274},[312,132254,853],{"class":488},[312,132256,492],{"class":324},[312,132258,858],{"class":488},[312,132260,861],{"class":488},[312,132262,132171],{"class":324},[312,132264,132174],{"class":318},[312,132266,132267],{"class":314,"line":298},[312,132268,515],{"class":324},[19,132270],{"style":21,"src":132271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[24,132273,132274],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[24,132276,132277],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[69,132279,132281],{"id":132280},"_914-清除内外边距","9.1.4 清除内外边距",[24,132283,132284],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[303,132286,132287],{"className":469,"code":132145,"language":471,"meta":308,"style":308},[119,132288,132289,132293,132299,132313],{"__ignoreMap":308},[312,132290,132291],{"class":314,"line":315},[312,132292,132152],{"class":318},[312,132294,132295,132297],{"class":314,"line":171},[312,132296,1362],{"class":332},[312,132298,483],{"class":324},[312,132300,132301,132303,132305,132307,132309,132311],{"class":314,"line":274},[312,132302,853],{"class":488},[312,132304,492],{"class":324},[312,132306,858],{"class":488},[312,132308,861],{"class":488},[312,132310,132171],{"class":324},[312,132312,132174],{"class":318},[312,132314,132315],{"class":314,"line":298},[312,132316,515],{"class":324},[24,132318,132319],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[69,132321,132323],{"id":132322},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[243,132325,132326,132329,132332,132335,132338,132341],{},[143,132327,132328],{},"文件→打开 ：可以打开我们要测量的图片",[143,132330,132331],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[143,132333,132334],{},"右击标尺，把里面的单位改为像素",[143,132336,132337],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[143,132339,132340],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[143,132342,132343],{},"用选区拖动 可以测量大小",[19,132345],{"style":21,"src":132346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[243,132348,132349,132352],{},[143,132350,132351],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[143,132353,132354],{},"吸管取色工具",[19,132356],{"style":21,"src":132357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[69,132359,132361],{"id":132360},"_916-案例","9.1.6 案例",[140,132363,132364],{},[143,132365,132366],{},"小米商品",[19,132368],{"style":21,"src":132369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[303,132371,132372],{"className":469,"code":132145,"language":471,"meta":308,"style":308},[119,132373,132374,132378,132384,132398],{"__ignoreMap":308},[312,132375,132376],{"class":314,"line":315},[312,132377,132152],{"class":318},[312,132379,132380,132382],{"class":314,"line":171},[312,132381,1362],{"class":332},[312,132383,483],{"class":324},[312,132385,132386,132388,132390,132392,132394,132396],{"class":314,"line":274},[312,132387,853],{"class":488},[312,132389,492],{"class":324},[312,132391,858],{"class":488},[312,132393,861],{"class":488},[312,132395,132171],{"class":324},[312,132397,132174],{"class":318},[312,132399,132400],{"class":314,"line":298},[312,132401,515],{"class":324},[140,132403,132404],{"start":171},[143,132405,132406],{},"快报模块",[19,132408],{"style":21,"src":132409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[303,132411,132412],{"className":305,"code":306,"language":307,"meta":308,"style":308},[119,132413,132414,132418,132432,132436],{"__ignoreMap":308},[312,132415,132416],{"class":314,"line":315},[312,132417,319],{"class":318},[312,132419,132420,132422,132424,132426,132428,132430],{"class":314,"line":171},[312,132421,325],{"class":324},[312,132423,329],{"class":328},[312,132425,333],{"class":332},[312,132427,336],{"class":324},[312,132429,340],{"class":339},[312,132431,343],{"class":324},[312,132433,132434],{"class":314,"line":274},[312,132435,348],{"class":324},[312,132437,132438,132440,132442],{"class":314,"line":298},[312,132439,353],{"class":324},[312,132441,329],{"class":328},[312,132443,343],{"class":324},[69,132445,132447],{"id":132446},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[140,132449,132450],{},[143,132451,132452],{},"圆角边框",[24,132454,132455],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[19,132457],{"style":21,"src":132458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[303,132460,132461],{"className":469,"code":1415,"language":471,"meta":308,"style":308},[119,132462,132463,132469,132485],{"__ignoreMap":308},[312,132464,132465,132467],{"class":314,"line":315},[312,132466,329],{"class":328},[312,132468,483],{"class":324},[312,132470,132471,132473,132475,132477,132479,132481,132483],{"class":314,"line":171},[312,132472,1428],{"class":488},[312,132474,492],{"class":324},[312,132476,1433],{"class":488},[312,132478,1437],{"class":1436},[312,132480,1440],{"class":488},[312,132482,1443],{"class":488},[312,132484,498],{"class":324},[312,132486,132487],{"class":314,"line":274},[312,132488,515],{"class":324},[24,132490,132491],{},"解释:",[243,132493,132494,132497,132500,132503,132506],{},[143,132495,132496],{},"参数值可以为数值或百分比的形式",[143,132498,132499],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[143,132501,132502],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[143,132504,132505],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[143,132507,132508],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[140,132510,132511],{"start":171},[143,132512,132513],{},"盒子阴影",[303,132515,132517],{"className":469,"code":132516,"language":471,"meta":308,"style":308},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[119,132518,132519,132525,132562],{"__ignoreMap":308},[312,132520,132521,132523],{"class":314,"line":315},[312,132522,329],{"class":328},[312,132524,483],{"class":324},[312,132526,132527,132530,132532,132534,132536,132538,132540,132542,132544,132546,132548,132550,132552,132554,132556,132558,132560],{"class":314,"line":171},[312,132528,132529],{"class":488},"  box-shadow",[312,132531,492],{"class":324},[312,132533,858],{"class":488},[312,132535,16556],{"class":488},[312,132537,1437],{"class":1436},[312,132539,3843],{"class":488},[312,132541,1437],{"class":1436},[312,132543,80539],{"class":488},[312,132545,1576],{"class":324},[312,132547,858],{"class":488},[312,132549,733],{"class":324},[312,132551,858],{"class":488},[312,132553,733],{"class":324},[312,132555,858],{"class":488},[312,132557,733],{"class":324},[312,132559,87981],{"class":488},[312,132561,4524],{"class":324},[312,132563,132564],{"class":314,"line":274},[312,132565,515],{"class":324},[2086,132567,132568,132576],{},[2089,132569,132570],{},[2092,132571,132572,132574],{},[2095,132573,2100],{"align":1374},[2095,132575,29285],{"align":1374},[2132,132577,132578,132586,132594,132602,132610,132618],{},[2092,132579,132580,132583],{},[2137,132581,132582],{"align":1374},"h-shadow",[2137,132584,132585],{"align":1374},"必需,水平阴影的位置,允许负值",[2092,132587,132588,132591],{},[2137,132589,132590],{"align":1374},"v-shadow",[2137,132592,132593],{"align":1374},"必需,垂直阴影的位置,允许负值",[2092,132595,132596,132599],{},[2137,132597,132598],{"align":1374},"blur",[2137,132600,132601],{"align":1374},"可选,模糊距离,就是影子的虚实",[2092,132603,132604,132607],{},[2137,132605,132606],{"align":1374},"spread",[2137,132608,132609],{"align":1374},"可选,阴影尺寸",[2092,132611,132612,132615],{},[2137,132613,132614],{"align":1374},"color",[2137,132616,132617],{"align":1374},"可选,阴影的颜色",[2092,132619,132620,132623],{},[2137,132621,132622],{"align":1374},"inset",[2137,132624,132625],{"align":1374},"可选,将外部阴影(outset)改为内部阴影",[140,132627,132628],{"start":274},[143,132629,132630],{},"文字阴影",[303,132632,132634],{"className":469,"code":132633,"language":471,"meta":308,"style":308},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[119,132635,132636,132642,132681],{"__ignoreMap":308},[312,132637,132638,132640],{"class":314,"line":315},[312,132639,24],{"class":328},[312,132641,483],{"class":324},[312,132643,132644,132647,132649,132651,132653,132655,132657,132659,132661,132663,132665,132667,132669,132671,132673,132675,132677,132679],{"class":314,"line":171},[312,132645,132646],{"class":488},"  text-shadow",[312,132648,492],{"class":324},[312,132650,1433],{"class":488},[312,132652,1437],{"class":1436},[312,132654,26914],{"class":488},[312,132656,1437],{"class":1436},[312,132658,16556],{"class":488},[312,132660,1437],{"class":1436},[312,132662,80539],{"class":488},[312,132664,1576],{"class":324},[312,132666,858],{"class":488},[312,132668,733],{"class":324},[312,132670,858],{"class":488},[312,132672,733],{"class":324},[312,132674,858],{"class":488},[312,132676,733],{"class":324},[312,132678,102291],{"class":488},[312,132680,4524],{"class":324},[312,132682,132683],{"class":314,"line":274},[312,132684,515],{"class":324},[2086,132686,132687,132695],{},[2089,132688,132689],{},[2092,132690,132691,132693],{},[2095,132692,2100],{"align":1374},[2095,132694,29285],{"align":1374},[2132,132696,132697,132703,132710,132717],{},[2092,132698,132699,132701],{},[2137,132700,132582],{"align":1374},[2137,132702,132585],{"align":1374},[2092,132704,132705,132707],{},[2137,132706,132590],{"align":1374},[2137,132708,132709],{"align":1374},"必需,垂直阴影位置,允许负值",[2092,132711,132712,132714],{},[2137,132713,132598],{"align":1374},[2137,132715,132716],{"align":1374},"可选,模糊的距离",[2092,132718,132719,132721],{},[2137,132720,132614],{"align":1374},[2137,132722,132617],{"align":1374},[14,132724,132726],{"id":132725},"_92-浮动","9.2 浮动",[69,132728,132730],{"id":132729},"_921-浮动介绍","9.2.1 浮动介绍",[24,132732,132733],{},"在16.2中详细介绍",[69,132735,132737],{"id":132736},"_922-清除浮动","9.2.2 清除浮动",[140,132739,132740,132743],{},[143,132741,132742],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[143,132744,132745],{},"清除浮动的本质",[24,132747,132748],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[24,132750,10828],{},[243,132752,132753,132756,132759],{},[143,132754,132755],{},"如果父盒子本身有高度，则不需要清除浮动",[143,132757,132758],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[143,132760,132761],{},"父级有了高度，就不会影响下面的标准流了",[140,132763,132764],{"start":274},[143,132765,132766],{},"清除浮动样式",[303,132768,132770],{"className":469,"code":132769,"language":471,"meta":308,"style":308},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[119,132771,132772,132779,132789,132793,132800,132810],{"__ignoreMap":308},[312,132773,132774,132777],{"class":314,"line":315},[312,132775,132776],{"class":332},".left",[312,132778,483],{"class":324},[312,132780,132781,132783,132785,132787],{"class":314,"line":171},[312,132782,1369],{"class":488},[312,132784,492],{"class":324},[312,132786,1374],{"class":488},[312,132788,498],{"class":324},[312,132790,132791],{"class":314,"line":274},[312,132792,515],{"class":324},[312,132794,132795,132798],{"class":314,"line":298},[312,132796,132797],{"class":332},".right",[312,132799,483],{"class":324},[312,132801,132802,132804,132806,132808],{"class":314,"line":974},[312,132803,1369],{"class":488},[312,132805,492],{"class":324},[312,132807,74294],{"class":488},[312,132809,498],{"class":324},[312,132811,132812],{"class":314,"line":980},[312,132813,515],{"class":324},[2086,132815,132816,132824],{},[2089,132817,132818],{},[2092,132819,132820,132822],{},[2095,132821,128780],{"align":1374},[2095,132823,29285],{"align":1374},[2132,132825,132826,132833,132840],{},[2092,132827,132828,132830],{},[2137,132829,1374],{"align":1374},[2137,132831,132832],{"align":1374},"不允许左侧有浮动元素（清除左侧浮动的影响）",[2092,132834,132835,132837],{},[2137,132836,74294],{"align":1374},[2137,132838,132839],{"align":1374},"不允许右侧有浮动元素（清除右侧浮动的影响）",[2092,132841,132842,132845],{},[2137,132843,132844],{"align":1374},"both",[2137,132846,132847],{"align":1374},"同时清除左右侧浮动的影响",[24,132849,132850],{},"法一",[24,132852,132853],{},"额外标签法也称为隔墙法",[24,132855,132856],{},"使用方式：",[24,132858,132859],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[303,132861,132862],{"className":469,"code":132769,"language":471,"meta":308,"style":308},[119,132863,132864,132870,132880,132884,132890,132900],{"__ignoreMap":308},[312,132865,132866,132868],{"class":314,"line":315},[312,132867,132776],{"class":332},[312,132869,483],{"class":324},[312,132871,132872,132874,132876,132878],{"class":314,"line":171},[312,132873,1369],{"class":488},[312,132875,492],{"class":324},[312,132877,1374],{"class":488},[312,132879,498],{"class":324},[312,132881,132882],{"class":314,"line":274},[312,132883,515],{"class":324},[312,132885,132886,132888],{"class":314,"line":298},[312,132887,132797],{"class":332},[312,132889,483],{"class":324},[312,132891,132892,132894,132896,132898],{"class":314,"line":974},[312,132893,1369],{"class":488},[312,132895,492],{"class":324},[312,132897,74294],{"class":488},[312,132899,498],{"class":324},[312,132901,132902],{"class":314,"line":980},[312,132903,515],{"class":324},[24,132905,132906],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[24,132908,132909],{},"优点： 通俗易懂，书写方便",[24,132911,132912],{},"缺点： 添加许多无意义的标签，结构化较差",[24,132914,132915],{},"注意： 要求这个新的空标签必须是块级元素。",[24,132917,132918],{},"法二",[24,132920,132921],{},"父级添加overflow属性",[303,132923,132924],{"className":469,"code":132769,"language":471,"meta":308,"style":308},[119,132925,132926,132932,132942,132946,132952,132962],{"__ignoreMap":308},[312,132927,132928,132930],{"class":314,"line":315},[312,132929,132776],{"class":332},[312,132931,483],{"class":324},[312,132933,132934,132936,132938,132940],{"class":314,"line":171},[312,132935,1369],{"class":488},[312,132937,492],{"class":324},[312,132939,1374],{"class":488},[312,132941,498],{"class":324},[312,132943,132944],{"class":314,"line":274},[312,132945,515],{"class":324},[312,132947,132948,132950],{"class":314,"line":298},[312,132949,132797],{"class":332},[312,132951,483],{"class":324},[312,132953,132954,132956,132958,132960],{"class":314,"line":974},[312,132955,1369],{"class":488},[312,132957,492],{"class":324},[312,132959,74294],{"class":488},[312,132961,498],{"class":324},[312,132963,132964],{"class":314,"line":980},[312,132965,515],{"class":324},[24,132967,132968],{},"overflow: hidden;",[24,132970,132971],{},"优点：代码简洁",[24,132973,132974],{},"缺点：无法显示溢出的部分",[24,132976,132977],{},"注意：是给父元素添加代码",[24,132979,132980],{},"法三",[24,132982,132983],{},"父级添加after伪元素",[24,132985,132986,132989],{},[132987,132988],"after",{}," 方式是额外标签法的升级版",[24,132991,132992],{},"使用的时候复制就可以",[303,132994,132995],{"className":469,"code":132769,"language":471,"meta":308,"style":308},[119,132996,132997,133003,133013,133017,133023,133033],{"__ignoreMap":308},[312,132998,132999,133001],{"class":314,"line":315},[312,133000,132776],{"class":332},[312,133002,483],{"class":324},[312,133004,133005,133007,133009,133011],{"class":314,"line":171},[312,133006,1369],{"class":488},[312,133008,492],{"class":324},[312,133010,1374],{"class":488},[312,133012,498],{"class":324},[312,133014,133015],{"class":314,"line":274},[312,133016,515],{"class":324},[312,133018,133019,133021],{"class":314,"line":298},[312,133020,132797],{"class":332},[312,133022,483],{"class":324},[312,133024,133025,133027,133029,133031],{"class":314,"line":974},[312,133026,1369],{"class":488},[312,133028,492],{"class":324},[312,133030,74294],{"class":488},[312,133032,498],{"class":324},[312,133034,133035],{"class":314,"line":980},[312,133036,515],{"class":324},[24,133038,133039],{},"优点：没有增加标签，结构更简单",[24,133041,133042],{},"缺点：照顾低版本浏览器",[24,133044,133045],{},"代表网站： 百度、淘宝网、网易等",[24,133047,133048],{},"法四",[24,133050,133051],{},"父级添加双伪元素",[303,133053,133054],{"className":469,"code":132769,"language":471,"meta":308,"style":308},[119,133055,133056,133062,133072,133076,133082,133092],{"__ignoreMap":308},[312,133057,133058,133060],{"class":314,"line":315},[312,133059,132776],{"class":332},[312,133061,483],{"class":324},[312,133063,133064,133066,133068,133070],{"class":314,"line":171},[312,133065,1369],{"class":488},[312,133067,492],{"class":324},[312,133069,1374],{"class":488},[312,133071,498],{"class":324},[312,133073,133074],{"class":314,"line":274},[312,133075,515],{"class":324},[312,133077,133078,133080],{"class":314,"line":298},[312,133079,132797],{"class":332},[312,133081,483],{"class":324},[312,133083,133084,133086,133088,133090],{"class":314,"line":974},[312,133085,1369],{"class":488},[312,133087,492],{"class":324},[312,133089,74294],{"class":488},[312,133091,498],{"class":324},[312,133093,133094],{"class":314,"line":980},[312,133095,515],{"class":324},[24,133097,133098],{},"优点：代码更简洁",[24,133100,133042],{},[24,133102,133103],{},"代表网站：小米、腾讯等",[14,133105,133107],{"id":133106},"_93-ps切图","9.3 PS切图",[69,133109,133111],{"id":133110},"_931-常见图片格式","9.3.1 常见图片格式",[2086,133113,133114,133124],{},[2089,133115,133116],{},[2092,133117,133118,133121],{},[2095,133119,133120],{"align":1374},"jpg图像格式",[2095,133122,133123],{"align":1374},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[2132,133125,133126,133134,133142],{},[2092,133127,133128,133131],{},[2137,133129,133130],{"align":1374},"gif图像格式",[2137,133132,133133],{"align":1374},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[2092,133135,133136,133139],{},[2137,133137,133138],{"align":1374},"png图像格式",[2137,133140,133141],{"align":1374},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[2092,133143,133144,133147],{},[2137,133145,133146],{"align":1374},"PSD图像格式",[2137,133148,133149],{"align":1374},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[69,133151,133153],{"id":133152},"_932-图层切图","9.3.2 图层切图",[24,133155,133156],{},"最简单的切图方式：右击图层 → 导出 → 切片",[24,133158,133159],{},"按住shift选中两个图层->图层菜单->合并图层",[69,133161,133163],{"id":133162},"_933-切片切图","9.3.3 切片切图",[243,133165,133166,133169],{},[143,133167,133168],{},"利用切片工具手动划出",[143,133170,133171],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[69,133173,133175],{"id":133174},"_934-切图步骤","9.3.4 切图步骤",[24,133177,133178],{},"用切片工具选中：",[19,133180],{"style":21,"src":133181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[24,133183,133184],{},"文件 -> 导出",[19,133186],{"style":21,"src":133187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1856,133189,133190],{},"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":308,"searchDepth":171,"depth":171,"links":133192},[133193,133202,133206],{"id":131637,"depth":171,"text":131638,"children":133194},[133195,133196,133197,133198,133199,133200,133201],{"id":131662,"depth":274,"text":131663},{"id":131952,"depth":274,"text":131953},{"id":132081,"depth":274,"text":132082},{"id":132280,"depth":274,"text":132281},{"id":132322,"depth":274,"text":132323},{"id":132360,"depth":274,"text":132361},{"id":132446,"depth":274,"text":132447},{"id":132725,"depth":171,"text":132726,"children":133203},[133204,133205],{"id":132729,"depth":274,"text":132730},{"id":132736,"depth":274,"text":132737},{"id":133106,"depth":171,"text":133107,"children":133207},[133208,133209,133210,133211],{"id":133110,"depth":274,"text":133111},{"id":133152,"depth":274,"text":133153},{"id":133162,"depth":274,"text":133163},{"id":133174,"depth":274,"text":133175},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131629,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":133218,"title":133219,"body":133220,"description":1878,"extension":1879,"meta":133836,"navigation":1881,"path":133837,"seo":133838,"stem":133839,"__hash__":133840},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":133221,"toc":133824},[133222,133225,133229,133255,133289,133293,133297,133300,133340,133347,133357,133365,133367,133370,133373,133376,133383,133397,133401,133404,133433,133437,133440,133454,133458,133461,133489,133493,133496,133519,133523,133528,133556,133561,133589,133593,133610,133654,133659,133703,133720,133814,133822],[10,133223,133219],{"id":133224},"_10-css规范与学成在线案例",[14,133226,133228],{"id":133227},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[140,133230,133231,133237,133243,133249],{},[143,133232,133233,133236],{},[27,133234,133235],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[143,133238,133239,133242],{},[27,133240,133241],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[143,133244,133245,133248],{},[27,133246,133247],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[143,133250,133251,133254],{},[27,133252,133253],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[303,133256,133257],{"className":469,"code":131674,"language":471,"meta":308,"style":308},[119,133258,133259,133263,133269,133285],{"__ignoreMap":308},[312,133260,133261],{"class":314,"line":315},[312,133262,131681],{"class":318},[312,133264,133265,133267],{"class":314,"line":171},[312,133266,329],{"class":328},[312,133268,483],{"class":324},[312,133270,133271,133273,133275,133277,133279,133281,133283],{"class":314,"line":274},[312,133272,1428],{"class":488},[312,133274,492],{"class":324},[312,133276,1433],{"class":488},[312,133278,1437],{"class":1436},[312,133280,1440],{"class":488},[312,133282,1443],{"class":488},[312,133284,498],{"class":324},[312,133286,133287],{"class":314,"line":298},[312,133288,515],{"class":324},[14,133290,133292],{"id":133291},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[69,133294,133296],{"id":133295},"_1021-header头部制作","10.2.1 header头部制作",[19,133298],{"style":21,"src":133299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[243,133301,133302,133309,133315,133321,133327,133334],{},[143,133303,133304,133305,133308],{},"1号是版心盒子 ",[27,133306,133307],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[143,133310,133311,133312,133314],{},"版心盒子 里面包含 2号盒子 ",[27,133313,569],{}," 图标",[143,133316,133317,133318,133320],{},"版心盒子 里面包含 3号盒子 ",[27,133319,1143],{}," 导航栏",[143,133322,133323,133324,133326],{},"版心盒子 里面包含 4号盒子 ",[27,133325,704],{}," 搜索框",[143,133328,133329,133330,133333],{},"版心盒子 里面包含 5号盒子 ",[27,133331,133332],{},"user"," 个人信息",[143,133335,133336,133337],{},"注意，要求里面的 ",[27,133338,133339],{},"4个子盒子 必须都浮动",[140,133341,133342],{},[143,133343,133344],{},[27,133345,133346],{},"导航栏注意点:",[24,133348,133349,133350,133353,133354],{},"实际开发中， ",[27,133351,133352],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[27,133355,133356],{},"用 li 包含链接(li+a)的做法",[243,133358,133359,133362],{},[143,133360,133361],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[143,133363,133364],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[24,133366,10828],{},[24,133368,133369],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[24,133371,133372],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[24,133374,133375],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[140,133377,133378],{"start":171},[143,133379,133380],{},[27,133381,133382],{},"4号盒子search的细节：",[243,133384,133385,133388,133391],{},[143,133386,133387],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[143,133389,133390],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[143,133392,133393,133396],{},[119,133394,133395],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[69,133398,133400],{"id":133399},"_1022-banner制作","10.2.2 banner制作",[19,133402],{"style":21,"src":133403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[243,133405,133406,133413,133419,133426],{},[143,133407,133408,133409,133412],{},"1号盒子是通栏的大盒子 ",[27,133410,133411],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[143,133414,133415,133416,133418],{},"2号盒子是版心 ",[27,133417,2739],{}," ， 要水平居中对齐",[143,133420,133421,133422,133425],{},"3号盒子版心内，左对齐 ",[27,133423,133424],{},"subnav"," 侧导航栏",[143,133427,133428,133429,133432],{},"4号盒子版心内，右对齐 ",[27,133430,133431],{},"course"," 课程",[69,133434,133436],{"id":133435},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[19,133438],{"style":21,"src":133439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[243,133441,133442,133445,133448,133451],{},[143,133443,133444],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[143,133446,133447],{},"1号盒子是标题 H3 左侧浮动",[143,133449,133450],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[143,133452,133453],{},"3号盒子 右浮动 mod 修改",[69,133455,133457],{"id":133456},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[19,133459],{"style":21,"src":133460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[243,133462,133463,133469,133476,133483,133486],{},[143,133464,133465,133466,133468],{},"1号盒子为最大的盒子 ",[27,133467,55498],{}," 版心水平居中对齐",[143,133470,133471,133472,133475],{},"2号盒子为上面部分 ",[27,133473,133474],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[143,133477,133478,133479,133482],{},"3号盒子为底下部分 ",[27,133480,133481],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[143,133484,133485],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[143,133487,133488],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[69,133490,133492],{"id":133491},"_1025-底部模块制作","10.2.5 底部模块制作",[19,133494],{"style":21,"src":133495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[243,133497,133498,133504,133507,133513],{},[143,133499,133500,133501,133503],{},"1号盒子通栏大盒子 底部 ",[27,133502,1463],{}," 给高度 底色是白色",[143,133505,133506],{},"2号盒子版心水平居中",[143,133508,133509,133510,133512],{},"3号盒子版权 ",[27,133511,1774],{}," 左对齐",[143,133514,133515,133516,133518],{},"4号盒子 链接组 ",[27,133517,1770],{}," 右对齐",[69,133520,133522],{"id":133521},"_1026-代码模块","10.2.6 代码模块",[140,133524,133525],{},[143,133526,133527],{},"html部分",[303,133529,133530],{"className":305,"code":637,"language":307,"meta":308,"style":308},[119,133531,133532],{"__ignoreMap":308},[312,133533,133534,133536,133538,133540,133542,133544,133546,133548,133550,133552,133554],{"class":314,"line":315},[312,133535,325],{"class":324},[312,133537,164],{"class":328},[312,133539,648],{"class":332},[312,133541,336],{"class":324},[312,133543,653],{"class":339},[312,133545,656],{"class":332},[312,133547,336],{"class":324},[312,133549,661],{"class":339},[312,133551,664],{"class":324},[312,133553,164],{"class":328},[312,133555,343],{"class":324},[140,133557,133558],{"start":171},[143,133559,133560],{},"css部分",[303,133562,133563],{"className":305,"code":637,"language":307,"meta":308,"style":308},[119,133564,133565],{"__ignoreMap":308},[312,133566,133567,133569,133571,133573,133575,133577,133579,133581,133583,133585,133587],{"class":314,"line":315},[312,133568,325],{"class":324},[312,133570,164],{"class":328},[312,133572,648],{"class":332},[312,133574,336],{"class":324},[312,133576,653],{"class":339},[312,133578,656],{"class":332},[312,133580,336],{"class":324},[312,133582,661],{"class":339},[312,133584,664],{"class":324},[312,133586,164],{"class":328},[312,133588,343],{"class":324},[69,133590,133592],{"id":133591},"_1027-收获","10.2.7 收获",[140,133594,133595,133598,133601,133604,133607],{},[143,133596,133597],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[143,133599,133600],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[143,133602,133603],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[143,133605,133606],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[143,133608,133609],{},"遗忘代码",[303,133611,133612],{"className":469,"code":724,"language":471,"meta":308,"style":308},[119,133613,133614,133636,133640,133650],{"__ignoreMap":308},[312,133615,133616,133618,133620,133622,133624,133626,133628,133630,133632,133634],{"class":314,"line":315},[312,133617,329],{"class":328},[312,133619,733],{"class":324},[312,133621,24],{"class":328},[312,133623,733],{"class":324},[312,133625,10],{"class":328},[312,133627,733],{"class":324},[312,133629,243],{"class":328},[312,133631,733],{"class":324},[312,133633,143],{"class":328},[312,133635,483],{"class":324},[312,133637,133638],{"class":314,"line":171},[312,133639,754],{"class":318},[312,133641,133642,133644,133646,133648],{"class":314,"line":274},[312,133643,503],{"class":488},[312,133645,492],{"class":324},[312,133647,508],{"class":488},[312,133649,498],{"class":324},[312,133651,133652],{"class":314,"line":298},[312,133653,515],{"class":324},[140,133655,133656],{"start":980},[143,133657,133658],{},"html引css的程序",[303,133660,133661],{"className":469,"code":724,"language":471,"meta":308,"style":308},[119,133662,133663,133685,133689,133699],{"__ignoreMap":308},[312,133664,133665,133667,133669,133671,133673,133675,133677,133679,133681,133683],{"class":314,"line":315},[312,133666,329],{"class":328},[312,133668,733],{"class":324},[312,133670,24],{"class":328},[312,133672,733],{"class":324},[312,133674,10],{"class":328},[312,133676,733],{"class":324},[312,133678,243],{"class":328},[312,133680,733],{"class":324},[312,133682,143],{"class":328},[312,133684,483],{"class":324},[312,133686,133687],{"class":314,"line":171},[312,133688,754],{"class":318},[312,133690,133691,133693,133695,133697],{"class":314,"line":274},[312,133692,503],{"class":488},[312,133694,492],{"class":324},[312,133696,508],{"class":488},[312,133698,498],{"class":324},[312,133700,133701],{"class":314,"line":298},[312,133702,515],{"class":324},[140,133704,133705,133708,133711,133714,133717],{"start":997},[143,133706,133707],{},"浮动的盒子不会有外边距合并问题",[143,133709,133710],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[143,133712,133713],{},"ctrl+g快速定位行；shift+alt多个光标",[143,133715,133716],{},"学习上方各个模块的选择器起名方法，以后就这样用",[143,133718,133719],{},"在写选择器时尽量写全一些，例如",[303,133721,133722],{"className":469,"code":924,"language":471,"meta":308,"style":308},[119,133723,133724,133728,133742,133746,133760,133764,133778,133782,133796,133800],{"__ignoreMap":308},[312,133725,133726],{"class":314,"line":315},[312,133727,931],{"class":318},[312,133729,133730,133732,133734,133736,133738,133740],{"class":314,"line":171},[312,133731,936],{"class":332},[312,133733,939],{"class":324},[312,133735,942],{"class":488},[312,133737,492],{"class":324},[312,133739,947],{"class":488},[312,133741,950],{"class":324},[312,133743,133744],{"class":314,"line":274},[312,133745,955],{"class":318},[312,133747,133748,133750,133752,133754,133756,133758],{"class":314,"line":298},[312,133749,960],{"class":332},[312,133751,939],{"class":324},[312,133753,942],{"class":488},[312,133755,492],{"class":324},[312,133757,969],{"class":488},[312,133759,950],{"class":324},[312,133761,133762],{"class":314,"line":974},[312,133763,977],{"class":318},[312,133765,133766,133768,133770,133772,133774,133776],{"class":314,"line":980},[312,133767,983],{"class":332},[312,133769,939],{"class":324},[312,133771,942],{"class":488},[312,133773,492],{"class":324},[312,133775,992],{"class":488},[312,133777,950],{"class":324},[312,133779,133780],{"class":314,"line":997},[312,133781,1000],{"class":318},[312,133783,133784,133786,133788,133790,133792,133794],{"class":314,"line":1003},[312,133785,1006],{"class":332},[312,133787,939],{"class":324},[312,133789,942],{"class":488},[312,133791,492],{"class":324},[312,133793,1015],{"class":488},[312,133795,950],{"class":324},[312,133797,133798],{"class":314,"line":1020},[312,133799,1023],{"class":318},[312,133801,133802,133804,133806,133808,133810,133812],{"class":314,"line":1026},[312,133803,1029],{"class":332},[312,133805,939],{"class":324},[312,133807,942],{"class":488},[312,133809,492],{"class":324},[312,133811,1038],{"class":488},[312,133813,950],{"class":324},[140,133815,133816,133819],{"start":3423},[143,133817,133818],{},"一定要用好注释",[143,133820,133821],{},"浮动的盒子不会有外边距合并的问题",[1856,133823,133190],{},{"title":308,"searchDepth":171,"depth":171,"links":133825},[133826,133827],{"id":133227,"depth":171,"text":133228},{"id":133291,"depth":171,"text":133292,"children":133828},[133829,133830,133831,133832,133833,133834,133835],{"id":133295,"depth":274,"text":133296},{"id":133399,"depth":274,"text":133400},{"id":133435,"depth":274,"text":133436},{"id":133456,"depth":274,"text":133457},{"id":133491,"depth":274,"text":133492},{"id":133521,"depth":274,"text":133522},{"id":133591,"depth":274,"text":133592},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":133219,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133842,"title":133843,"body":133844,"description":1878,"extension":1879,"meta":135330,"navigation":1881,"path":135331,"seo":135332,"stem":135333,"__hash__":135334},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133845,"toc":135322},[133846,133849,133853,133857,133868,133872,133889,133933,133966,133969,133986,133989,133992,134036,134040,134044,134047,134050,134054,134057,134068,134131,134172,134175,134190,134244,134252,134255,134266,134320,134346,134349,134362,134416,134448,134502,134525,134579,134582,134585,134592,134646,134667,134721,134724,134727,134812,134820,134877,134900,134904,134907,134925,134929,134948,135002,135040,135044,135047,135050,135072,135076,135084,135087,135092,135103,135106,135110,135124,135168,135171,135175,135178,135183,135209,135214,135291,135294,135298,135301,135304,135307,135310,135313,135316,135319],[10,133847,133843],{"id":133848},"_11-传统布局与定位体系",[14,133850,133852],{"id":133851},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[69,133854,133856],{"id":133855},"_1111-普通流标准流","11.1.1 普通流（标准流）",[243,133858,133859,133862,133865],{},[143,133860,133861],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[143,133863,133864],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[143,133866,133867],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[69,133869,133871],{"id":133870},"_1112-浮动","11.1.2 浮动",[243,133873,133874,133877,133880,133883,133886],{},[143,133875,133876],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[143,133878,133879],{},"浮动可以改变元素标签默认的排列方式",[143,133881,133882],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[143,133884,133885],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[143,133887,133888],{},"在使用行内块转换时盒子之间是有空隙的",[303,133890,133891],{"className":469,"code":132769,"language":471,"meta":308,"style":308},[119,133892,133893,133899,133909,133913,133919,133929],{"__ignoreMap":308},[312,133894,133895,133897],{"class":314,"line":315},[312,133896,132776],{"class":332},[312,133898,483],{"class":324},[312,133900,133901,133903,133905,133907],{"class":314,"line":171},[312,133902,1369],{"class":488},[312,133904,492],{"class":324},[312,133906,1374],{"class":488},[312,133908,498],{"class":324},[312,133910,133911],{"class":314,"line":274},[312,133912,515],{"class":324},[312,133914,133915,133917],{"class":314,"line":298},[312,133916,132797],{"class":332},[312,133918,483],{"class":324},[312,133920,133921,133923,133925,133927],{"class":314,"line":974},[312,133922,1369],{"class":488},[312,133924,492],{"class":324},[312,133926,74294],{"class":488},[312,133928,498],{"class":324},[312,133930,133931],{"class":314,"line":980},[312,133932,515],{"class":324},[2086,133934,133935,133943],{},[2089,133936,133937],{},[2092,133938,133939,133941],{},[2095,133940,128780],{"align":1374},[2095,133942,29285],{"align":1374},[2132,133944,133945,133952,133959],{},[2092,133946,133947,133949],{},[2137,133948,56521],{"align":1374},[2137,133950,133951],{"align":1374},"元素不浮动（默认值）",[2092,133953,133954,133956],{},[2137,133955,1374],{"align":1374},[2137,133957,133958],{"align":1374},"元素向左浮动",[2092,133960,133961,133963],{},[2137,133962,74294],{"align":1374},[2137,133964,133965],{"align":1374},"元素向右浮动",[24,133967,133968],{},"浮动重点：",[243,133970,133971,133974,133977,133980,133983],{},[143,133972,133973],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[143,133975,133976],{},"浮动的元素会一行内显示并且元素顶部对齐",[143,133978,133979],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[143,133981,133982],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[143,133984,133985],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[24,133987,133988],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[24,133990,133991],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[303,133993,133994],{"className":469,"code":132769,"language":471,"meta":308,"style":308},[119,133995,133996,134002,134012,134016,134022,134032],{"__ignoreMap":308},[312,133997,133998,134000],{"class":314,"line":315},[312,133999,132776],{"class":332},[312,134001,483],{"class":324},[312,134003,134004,134006,134008,134010],{"class":314,"line":171},[312,134005,1369],{"class":488},[312,134007,492],{"class":324},[312,134009,1374],{"class":488},[312,134011,498],{"class":324},[312,134013,134014],{"class":314,"line":274},[312,134015,515],{"class":324},[312,134017,134018,134020],{"class":314,"line":298},[312,134019,132797],{"class":332},[312,134021,483],{"class":324},[312,134023,134024,134026,134028,134030],{"class":314,"line":974},[312,134025,1369],{"class":488},[312,134027,492],{"class":324},[312,134029,74294],{"class":488},[312,134031,498],{"class":324},[312,134033,134034],{"class":314,"line":980},[312,134035,515],{"class":324},[69,134037,134039],{"id":134038},"_1113-定位","11.1.3 定位",[23796,134041,134043],{"id":134042},"_11131-使用场景","11.1.3.1 使用场景",[24,134045,134046],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[24,134048,134049],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[23796,134051,134053],{"id":134052},"_11132-定位组成","11.1.3.2 定位组成",[24,134055,134056],{},"定位 = 定位模式 + 边偏移",[140,134058,134059],{},[143,134060,134061,134064,134065],{},[27,134062,134063],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[27,134066,134067],{},"定位模式",[303,134069,134071],{"className":469,"code":134070,"language":471,"meta":308,"style":308},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[119,134072,134073,134079,134093,134110,134127],{"__ignoreMap":308},[312,134074,134075,134077],{"class":314,"line":315},[312,134076,1362],{"class":332},[312,134078,483],{"class":324},[312,134080,134081,134084,134086,134088,134090],{"class":314,"line":171},[312,134082,134083],{"class":488},"  position",[312,134085,492],{"class":324},[312,134087,969],{"class":488},[312,134089,132171],{"class":324},[312,134091,134092],{"class":318},"\u002F* 定位模式 *\u002F\n",[312,134094,134095,134098,134100,134102,134104,134107],{"class":314,"line":274},[312,134096,134097],{"class":488},"  top",[312,134099,492],{"class":324},[312,134101,2391],{"class":488},[312,134103,1437],{"class":1436},[312,134105,134106],{"class":324},";           ",[312,134108,134109],{"class":318},"\u002F* 边偏移：上 *\u002F\n",[312,134111,134112,134115,134117,134119,134121,134124],{"class":314,"line":298},[312,134113,134114],{"class":488},"  left",[312,134116,492],{"class":324},[312,134118,1546],{"class":488},[312,134120,1437],{"class":1436},[312,134122,134123],{"class":324},";          ",[312,134125,134126],{"class":318},"\u002F* 边偏移：左 *\u002F\n",[312,134128,134129],{"class":314,"line":974},[312,134130,515],{"class":324},[2086,134132,134133,134142],{},[2089,134134,134135],{},[2092,134136,134137,134139],{},[2095,134138,2100],{"align":1374},[2095,134140,134141],{"align":1374},"语义",[2132,134143,134144,134151,134158,134165],{},[2092,134145,134146,134148],{},[2137,134147,947],{"align":1374},[2137,134149,134150],{"align":1374},"静态定位",[2092,134152,134153,134155],{},[2137,134154,969],{"align":1374},[2137,134156,134157],{"align":1374},"相对定位",[2092,134159,134160,134162],{},[2137,134161,992],{"align":1374},[2137,134163,134164],{"align":1374},"绝对定位",[2092,134166,134167,134169],{},[2137,134168,1015],{"align":1374},[2137,134170,134171],{"align":1374},"固定定位",[24,134173,134174],{},"（1）静态定位：",[243,134176,134177,134188],{},[143,134178,134179,134180,134183,134184,134187],{},"静态定位是元素的 ",[27,134181,134182],{},"默认定位方式"," ， ",[27,134185,134186],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[143,134189,6986],{},[303,134191,134192],{"className":469,"code":134070,"language":471,"meta":308,"style":308},[119,134193,134194,134200,134212,134226,134240],{"__ignoreMap":308},[312,134195,134196,134198],{"class":314,"line":315},[312,134197,1362],{"class":332},[312,134199,483],{"class":324},[312,134201,134202,134204,134206,134208,134210],{"class":314,"line":171},[312,134203,134083],{"class":488},[312,134205,492],{"class":324},[312,134207,969],{"class":488},[312,134209,132171],{"class":324},[312,134211,134092],{"class":318},[312,134213,134214,134216,134218,134220,134222,134224],{"class":314,"line":274},[312,134215,134097],{"class":488},[312,134217,492],{"class":324},[312,134219,2391],{"class":488},[312,134221,1437],{"class":1436},[312,134223,134106],{"class":324},[312,134225,134109],{"class":318},[312,134227,134228,134230,134232,134234,134236,134238],{"class":314,"line":298},[312,134229,134114],{"class":488},[312,134231,492],{"class":324},[312,134233,1546],{"class":488},[312,134235,1437],{"class":1436},[312,134237,134123],{"class":324},[312,134239,134126],{"class":318},[312,134241,134242],{"class":314,"line":974},[312,134243,515],{"class":324},[243,134245,134246,134249],{},[143,134247,134248],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[143,134250,134251],{},"静态定位在布局时我们几乎不用的",[24,134253,134254],{},"（2）相对定位",[243,134256,134257,134264],{},[143,134258,134259,134260,134263],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[27,134261,134262],{},"原来的位置"," 来说的（自恋型）",[143,134265,6986],{},[303,134267,134268],{"className":469,"code":134070,"language":471,"meta":308,"style":308},[119,134269,134270,134276,134288,134302,134316],{"__ignoreMap":308},[312,134271,134272,134274],{"class":314,"line":315},[312,134273,1362],{"class":332},[312,134275,483],{"class":324},[312,134277,134278,134280,134282,134284,134286],{"class":314,"line":171},[312,134279,134083],{"class":488},[312,134281,492],{"class":324},[312,134283,969],{"class":488},[312,134285,132171],{"class":324},[312,134287,134092],{"class":318},[312,134289,134290,134292,134294,134296,134298,134300],{"class":314,"line":274},[312,134291,134097],{"class":488},[312,134293,492],{"class":324},[312,134295,2391],{"class":488},[312,134297,1437],{"class":1436},[312,134299,134106],{"class":324},[312,134301,134109],{"class":318},[312,134303,134304,134306,134308,134310,134312,134314],{"class":314,"line":298},[312,134305,134114],{"class":488},[312,134307,492],{"class":324},[312,134309,1546],{"class":488},[312,134311,1437],{"class":1436},[312,134313,134123],{"class":324},[312,134315,134126],{"class":318},[312,134317,134318],{"class":314,"line":974},[312,134319,515],{"class":324},[243,134321,134322],{},[143,134323,134324,134325,134327,134328,134330,134331,134334,134335,134338,134339,134341,134342,134345],{},"相对定位的特点：",[55500,134326],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[55500,134329],{},"  ② ",[27,134332,134333],{},"原来"," 在标准流的 ",[27,134336,134337],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[55500,134340],{},"  ③因此， ",[27,134343,134344],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[24,134347,134348],{},"（3）绝对定位",[243,134350,134351,134360],{},[143,134352,134353,134355,134356,134359],{},[27,134354,134164],{}," 是元素在移动位置的时候，是相对于它 ",[27,134357,134358],{},"祖先元素"," 来说的（拼爹型）",[143,134361,6986],{},[303,134363,134364],{"className":469,"code":134070,"language":471,"meta":308,"style":308},[119,134365,134366,134372,134384,134398,134412],{"__ignoreMap":308},[312,134367,134368,134370],{"class":314,"line":315},[312,134369,1362],{"class":332},[312,134371,483],{"class":324},[312,134373,134374,134376,134378,134380,134382],{"class":314,"line":171},[312,134375,134083],{"class":488},[312,134377,492],{"class":324},[312,134379,969],{"class":488},[312,134381,132171],{"class":324},[312,134383,134092],{"class":318},[312,134385,134386,134388,134390,134392,134394,134396],{"class":314,"line":274},[312,134387,134097],{"class":488},[312,134389,492],{"class":324},[312,134391,2391],{"class":488},[312,134393,1437],{"class":1436},[312,134395,134106],{"class":324},[312,134397,134109],{"class":318},[312,134399,134400,134402,134404,134406,134408,134410],{"class":314,"line":298},[312,134401,134114],{"class":488},[312,134403,492],{"class":324},[312,134405,1546],{"class":488},[312,134407,1437],{"class":1436},[312,134409,134123],{"class":324},[312,134411,134126],{"class":318},[312,134413,134414],{"class":314,"line":974},[312,134415,515],{"class":324},[243,134417,134418,134433,134442,134445],{},[143,134419,134420,134421,134423,134424,134426,134427,134429,134430,134432],{},"绝对定位的特点：",[55500,134422],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[55500,134425],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[55500,134428],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[55500,134431],{},"  (4)固定定位",[143,134434,134435,134437,134438,134441],{},[27,134436,134171],{}," 是元素 ",[27,134439,134440],{},"固定于浏览器可视区的位置"," 。（认死理型）",[143,134443,134444],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[143,134446,134447],{},"语法:",[303,134449,134450],{"className":469,"code":134070,"language":471,"meta":308,"style":308},[119,134451,134452,134458,134470,134484,134498],{"__ignoreMap":308},[312,134453,134454,134456],{"class":314,"line":315},[312,134455,1362],{"class":332},[312,134457,483],{"class":324},[312,134459,134460,134462,134464,134466,134468],{"class":314,"line":171},[312,134461,134083],{"class":488},[312,134463,492],{"class":324},[312,134465,969],{"class":488},[312,134467,132171],{"class":324},[312,134469,134092],{"class":318},[312,134471,134472,134474,134476,134478,134480,134482],{"class":314,"line":274},[312,134473,134097],{"class":488},[312,134475,492],{"class":324},[312,134477,2391],{"class":488},[312,134479,1437],{"class":1436},[312,134481,134106],{"class":324},[312,134483,134109],{"class":318},[312,134485,134486,134488,134490,134492,134494,134496],{"class":314,"line":298},[312,134487,134114],{"class":488},[312,134489,492],{"class":324},[312,134491,1546],{"class":488},[312,134493,1437],{"class":1436},[312,134495,134123],{"class":324},[312,134497,134126],{"class":318},[312,134499,134500],{"class":314,"line":974},[312,134501,515],{"class":324},[243,134503,134504,134513],{},[143,134505,134506,134507,134509,134510,134512],{},"特点:",[55500,134508],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[55500,134511],{},"  ②固定定位不再占有原先的位置,完全脱标",[143,134514,134515,134516,134518,134519,134521,134522,134524],{},"固定在版心位置的方法:",[55500,134517],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[55500,134520],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[55500,134523],{},"  实例：",[303,134526,134527],{"className":469,"code":134070,"language":471,"meta":308,"style":308},[119,134528,134529,134535,134547,134561,134575],{"__ignoreMap":308},[312,134530,134531,134533],{"class":314,"line":315},[312,134532,1362],{"class":332},[312,134534,483],{"class":324},[312,134536,134537,134539,134541,134543,134545],{"class":314,"line":171},[312,134538,134083],{"class":488},[312,134540,492],{"class":324},[312,134542,969],{"class":488},[312,134544,132171],{"class":324},[312,134546,134092],{"class":318},[312,134548,134549,134551,134553,134555,134557,134559],{"class":314,"line":274},[312,134550,134097],{"class":488},[312,134552,492],{"class":324},[312,134554,2391],{"class":488},[312,134556,1437],{"class":1436},[312,134558,134106],{"class":324},[312,134560,134109],{"class":318},[312,134562,134563,134565,134567,134569,134571,134573],{"class":314,"line":298},[312,134564,134114],{"class":488},[312,134566,492],{"class":324},[312,134568,1546],{"class":488},[312,134570,1437],{"class":1436},[312,134572,134123],{"class":324},[312,134574,134126],{"class":318},[312,134576,134577],{"class":314,"line":974},[312,134578,515],{"class":324},[19,134580],{"style":21,"src":134581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[24,134583,134584],{},"(5)粘性定位",[243,134586,134587,134590],{},[143,134588,134589],{},"粘性定位可以被认为是相对定位和固定定位的混合",[143,134591,6986],{},[303,134593,134594],{"className":469,"code":134070,"language":471,"meta":308,"style":308},[119,134595,134596,134602,134614,134628,134642],{"__ignoreMap":308},[312,134597,134598,134600],{"class":314,"line":315},[312,134599,1362],{"class":332},[312,134601,483],{"class":324},[312,134603,134604,134606,134608,134610,134612],{"class":314,"line":171},[312,134605,134083],{"class":488},[312,134607,492],{"class":324},[312,134609,969],{"class":488},[312,134611,132171],{"class":324},[312,134613,134092],{"class":318},[312,134615,134616,134618,134620,134622,134624,134626],{"class":314,"line":274},[312,134617,134097],{"class":488},[312,134619,492],{"class":324},[312,134621,2391],{"class":488},[312,134623,1437],{"class":1436},[312,134625,134106],{"class":324},[312,134627,134109],{"class":318},[312,134629,134630,134632,134634,134636,134638,134640],{"class":314,"line":298},[312,134631,134114],{"class":488},[312,134633,492],{"class":324},[312,134635,1546],{"class":488},[312,134637,1437],{"class":1436},[312,134639,134123],{"class":324},[312,134641,134126],{"class":318},[312,134643,134644],{"class":314,"line":974},[312,134645,515],{"class":324},[243,134647,134648],{},[143,134649,134650,134651,134653,134654,134656,134657,134659,134660,134663,134664,134666],{},"粘性定位的特点：",[55500,134652],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[55500,134655],{},"  ②粘性定位占有原先的位置（相对定位特点）",[55500,134658],{},"  ③必须添加 top 、left、right、bottom ",[27,134661,134662],{},"其中一个"," 才有效",[55500,134665],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[303,134668,134669],{"className":469,"code":134070,"language":471,"meta":308,"style":308},[119,134670,134671,134677,134689,134703,134717],{"__ignoreMap":308},[312,134672,134673,134675],{"class":314,"line":315},[312,134674,1362],{"class":332},[312,134676,483],{"class":324},[312,134678,134679,134681,134683,134685,134687],{"class":314,"line":171},[312,134680,134083],{"class":488},[312,134682,492],{"class":324},[312,134684,969],{"class":488},[312,134686,132171],{"class":324},[312,134688,134092],{"class":318},[312,134690,134691,134693,134695,134697,134699,134701],{"class":314,"line":274},[312,134692,134097],{"class":488},[312,134694,492],{"class":324},[312,134696,2391],{"class":488},[312,134698,1437],{"class":1436},[312,134700,134106],{"class":324},[312,134702,134109],{"class":318},[312,134704,134705,134707,134709,134711,134713,134715],{"class":314,"line":298},[312,134706,134114],{"class":488},[312,134708,492],{"class":324},[312,134710,1546],{"class":488},[312,134712,1437],{"class":1436},[312,134714,134123],{"class":324},[312,134716,134126],{"class":318},[312,134718,134719],{"class":314,"line":974},[312,134720,515],{"class":324},[19,134722],{"style":21,"src":134723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[24,134725,134726],{},"(6)总结",[2086,134728,134729,134744],{},[2089,134730,134731],{},[2092,134732,134733,134735,134738,134741],{},[2095,134734,134067],{"align":1374},[2095,134736,134737],{"align":1374},"是否脱标",[2095,134739,134740],{"align":1374},"移动位置",[2095,134742,134743],{"align":1374},"是否常用",[2132,134745,134746,134759,134773,134787,134800],{},[2092,134747,134748,134751,134753,134756],{},[2137,134749,134750],{"align":1374},"Static 静态定位",[2137,134752,106447],{"align":1374},[2137,134754,134755],{"align":1374},"不能使用边偏移",[2137,134757,134758],{"align":1374},"很少",[2092,134760,134761,134764,134767,134770],{},[2137,134762,134763],{"align":1374},"Relative 相对定位",[2137,134765,134766],{"align":1374},"否(占有位置)",[2137,134768,134769],{"align":1374},"相对于自身位置移动",[2137,134771,134772],{"align":1374},"基本单独使用",[2092,134774,134775,134778,134781,134784],{},[2137,134776,134777],{"align":1374},"Absolute 绝对定位",[2137,134779,134780],{"align":1374},"是(不占有位置)",[2137,134782,134783],{"align":1374},"带有定位的父级",[2137,134785,134786],{"align":1374},"要和定位父级元素搭配使用",[2092,134788,134789,134792,134794,134797],{},[2137,134790,134791],{"align":1374},"Fixed 固定定位",[2137,134793,134780],{"align":1374},[2137,134795,134796],{"align":1374},"浏览器可视区",[2137,134798,134799],{"align":1374},"单独使用,不需要父级",[2092,134801,134802,134805,134807,134809],{},[2137,134803,134804],{"align":1374},"Sticky 粘性定位",[2137,134806,134766],{"align":1374},[2137,134808,134796],{"align":1374},[2137,134810,134811],{"align":1374},"当前阶段少",[140,134813,134814],{"start":171},[143,134815,134816,134819],{},[27,134817,134818],{},"边偏移"," 则决定了该元素的最终位置",[2086,134821,134822,134833],{},[2089,134823,134824],{},[2092,134825,134826,134829,134831],{},[2095,134827,134828],{"align":1374},"边偏移属性",[2095,134830,29288],{"align":1374},[2095,134832,29285],{"align":1374},[2132,134834,134835,134846,134857,134867],{},[2092,134836,134837,134840,134843],{},[2137,134838,134839],{"align":1374},"top",[2137,134841,134842],{"align":1374},"top: 80px;",[2137,134844,134845],{"align":1374},"顶端偏移量，定义元素相对于父元素上边线的距离",[2092,134847,134848,134851,134854],{},[2137,134849,134850],{"align":1374},"bottom",[2137,134852,134853],{"align":1374},"bottom: 80px ;",[2137,134855,134856],{"align":1374},"底部偏移量，定义元素相对于其父元素下边线的距离",[2092,134858,134859,134861,134864],{},[2137,134860,1374],{"align":1374},[2137,134862,134863],{"align":1374},"left: 80px ;",[2137,134865,134866],{"align":1374},"左侧偏移量，定义元素相对于其父元素左边线的距离",[2092,134868,134869,134871,134874],{},[2137,134870,74294],{"align":1374},[2137,134872,134873],{"align":1374},"right: 80px ;",[2137,134875,134876],{"align":1374},"右侧偏移量，定义元素相对于其父元素右边线的距离",[243,134878,134879],{},[143,134880,10828,134881,134883,134884,134886,134887,134889,134890,134893,134894,134896,134897,134899],{},[55500,134882],{},"  ① ",[27,134885,134818],{}," 需要和 ",[27,134888,134067],{}," 联合使用， ",[27,134891,134892],{},"单独使用无效"," ；",[55500,134895],{},"  ②top和bottom不要同时使用",[55500,134898],{},"  ③left和right不要同时使用",[23796,134901,134903],{"id":134902},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[24,134905,134906],{},"子级是绝对定位的话，父级要用相对定位",[243,134908,134909,134912,134915,134918],{},[143,134910,134911],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[143,134913,134914],{},"父盒子需要加定位限制子盒子在父盒子内显示",[143,134916,134917],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[143,134919,134920,134921,134924],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[27,134922,134923],{},"子绝父绝"," 也会遇到",[23796,134926,134928],{"id":134927},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[243,134930,134931,134946],{},[143,134932,134933,134934,134937,134938,134941,134942,134945],{},"在使用 ",[27,134935,134936],{},"定位"," 布局时，可能会 ",[27,134939,134940],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[27,134943,134944],{},"z-index"," 来控制盒子的前后次序 (z轴)",[143,134947,6986],{},[303,134949,134950],{"className":469,"code":134070,"language":471,"meta":308,"style":308},[119,134951,134952,134958,134970,134984,134998],{"__ignoreMap":308},[312,134953,134954,134956],{"class":314,"line":315},[312,134955,1362],{"class":332},[312,134957,483],{"class":324},[312,134959,134960,134962,134964,134966,134968],{"class":314,"line":171},[312,134961,134083],{"class":488},[312,134963,492],{"class":324},[312,134965,969],{"class":488},[312,134967,132171],{"class":324},[312,134969,134092],{"class":318},[312,134971,134972,134974,134976,134978,134980,134982],{"class":314,"line":274},[312,134973,134097],{"class":488},[312,134975,492],{"class":324},[312,134977,2391],{"class":488},[312,134979,1437],{"class":1436},[312,134981,134106],{"class":324},[312,134983,134109],{"class":318},[312,134985,134986,134988,134990,134992,134994,134996],{"class":314,"line":298},[312,134987,134114],{"class":488},[312,134989,492],{"class":324},[312,134991,1546],{"class":488},[312,134993,1437],{"class":1436},[312,134995,134123],{"class":324},[312,134997,134126],{"class":318},[312,134999,135000],{"class":314,"line":974},[312,135001,515],{"class":324},[243,135003,135004],{},[143,135005,135006,135007,134883,135009,135011,135012,129476,135015,84310,135018,135020,135021,135023,135024,135027,135028,134893,135031,135033,135034,135037,135039],{},"z-index的特性",[55500,135008],{},[27,135010,128780],{}," ： ",[27,135013,135014],{},"正整数",[27,135016,135017],{},"负整数",[27,135019,858],{}," ，默认值是 0，数值越大，盒子越靠上；",[55500,135022],{},"  ②如果 ",[27,135025,135026],{},"属性值相同"," ，则按照书写顺序， ",[27,135029,135030],{},"后来居上",[55500,135032],{},"  ③数字后面 ",[27,135035,135036],{},"不能加单位",[55500,135038],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[23796,135041,135043],{"id":135042},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[24,135045,135046],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[24,135048,135049],{},"方法:",[243,135051,135052,135062],{},[143,135053,135054,135055,135058,135059],{},"left: 50%; 让 ",[27,135056,135057],{},"盒子的左侧"," 移动到 ",[27,135060,135061],{},"父级元素的水平中心位置",[143,135063,135064,135065,135068,135069],{},"margin-left: -100px; 让盒子 ",[27,135066,135067],{},"向左"," 移动 ",[27,135070,135071],{},"自身宽度的一半",[23796,135073,135075],{"id":135074},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[140,135077,135078,135081],{},[143,135079,135080],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[143,135082,135083],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[24,135085,135086],{},"也就是说绝对定位和固定定位和浮动类似",[140,135088,135089],{"start":274},[143,135090,135091],{},"display 是显示模式， 可以改变显示模式有以下方式:",[243,135093,135094,135097,135100],{},[143,135095,135096],{},"可以用inline-block 转换为行内块",[143,135098,135099],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[143,135101,135102],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[24,135104,135105],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[23796,135107,135109],{"id":135108},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[140,135111,135112,135115,135118,135121],{},[143,135113,135114],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[143,135116,135117],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[143,135119,135120],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[143,135122,135123],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[303,135125,135126],{"className":469,"code":132769,"language":471,"meta":308,"style":308},[119,135127,135128,135134,135144,135148,135154,135164],{"__ignoreMap":308},[312,135129,135130,135132],{"class":314,"line":315},[312,135131,132776],{"class":332},[312,135133,483],{"class":324},[312,135135,135136,135138,135140,135142],{"class":314,"line":171},[312,135137,1369],{"class":488},[312,135139,492],{"class":324},[312,135141,1374],{"class":488},[312,135143,498],{"class":324},[312,135145,135146],{"class":314,"line":274},[312,135147,515],{"class":324},[312,135149,135150,135152],{"class":314,"line":298},[312,135151,132797],{"class":332},[312,135153,483],{"class":324},[312,135155,135156,135158,135160,135162],{"class":314,"line":974},[312,135157,1369],{"class":488},[312,135159,492],{"class":324},[312,135161,74294],{"class":488},[312,135163,498],{"class":324},[312,135165,135166],{"class":314,"line":980},[312,135167,515],{"class":324},[19,135169],{"style":21,"src":135170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[23796,135172,135174],{"id":135173},"_11138-轮播图","11.1.3.8 轮播图",[19,135176],{"style":21,"src":135177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[140,135179,135180],{},[143,135181,135182],{},"制作顺序:",[243,135184,135185,135188,135191,135200],{},[143,135186,135187],{},"大盒子我们类名为： tb-promo 淘宝广告",[143,135189,135190],{},"里面先放一张图片",[143,135192,135193,135194,135196,135197,135199],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[55500,135195],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[55500,135198],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[143,135201,135202,135203,135205,135206,135208],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[55500,135204],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[55500,135207],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[140,135210,135211],{"start":171},[143,135212,135213],{},"代码模块",[303,135215,135217],{"className":469,"code":135216,"language":471,"meta":308,"style":308},"\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",[119,135218,135219,135224,135231,135241,135251,135261,135265,135270,135277,135287],{"__ignoreMap":308},[312,135220,135221],{"class":314,"line":315},[312,135222,135223],{"class":318},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[312,135225,135226,135229],{"class":314,"line":171},[312,135227,135228],{"class":332},".son",[312,135230,483],{"class":324},[312,135232,135233,135235,135237,135239],{"class":314,"line":274},[312,135234,134083],{"class":488},[312,135236,492],{"class":324},[312,135238,992],{"class":488},[312,135240,498],{"class":324},[312,135242,135243,135245,135247,135249],{"class":314,"line":298},[312,135244,134097],{"class":488},[312,135246,492],{"class":324},[312,135248,858],{"class":488},[312,135250,498],{"class":324},[312,135252,135253,135255,135257,135259],{"class":314,"line":974},[312,135254,134114],{"class":488},[312,135256,492],{"class":324},[312,135258,858],{"class":488},[312,135260,498],{"class":324},[312,135262,135263],{"class":314,"line":980},[312,135264,515],{"class":324},[312,135266,135267],{"class":314,"line":997},[312,135268,135269],{"class":318},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[312,135271,135272,135275],{"class":314,"line":1003},[312,135273,135274],{"class":332},".father",[312,135276,483],{"class":324},[312,135278,135279,135281,135283,135285],{"class":314,"line":1020},[312,135280,134083],{"class":488},[312,135282,492],{"class":324},[312,135284,969],{"class":488},[312,135286,498],{"class":324},[312,135288,135289],{"class":314,"line":1026},[312,135290,515],{"class":324},[24,135292,135293],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[69,135295,135297],{"id":135296},"_1114-定位数值的移动","11.1.4 定位数值的移动",[19,135299],{"style":21,"src":135300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[24,135302,135303],{},"✨ 黄金口诀：",[24,135305,135306],{},"\"TOP正下负上，LEFT正右负左\"",[24,135308,135309],{},"\"RIGHT正左负右，BOTTOM正上负下",[24,135311,135312],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[24,135314,135315],{},"✨ 简单记：",[24,135317,135318],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1856,135320,135321],{},"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":308,"searchDepth":171,"depth":171,"links":135323},[135324],{"id":133851,"depth":171,"text":133852,"children":135325},[135326,135327,135328,135329],{"id":133855,"depth":274,"text":133856},{"id":133870,"depth":274,"text":133871},{"id":134038,"depth":274,"text":134039},{"id":135296,"depth":274,"text":135297},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133843,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":135336,"title":135337,"body":135338,"description":1878,"extension":1879,"meta":136758,"navigation":1881,"path":136759,"seo":136760,"stem":136761,"__hash__":136762},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":135339,"toc":136737},[135340,135343,135347,135355,135359,135364,135372,135384,135388,135393,135401,135412,135416,135421,135462,135470,135474,135477,135480,135483,135577,135580,135674,135677,135771,135774,135777,135812,135815,135818,135848,135851,135854,135857,135860,135863,135866,135869,135939,135942,135946,135950,135991,135995,136001,136004,136007,136011,136014,136017,136020,136098,136101,136104,136108,136112,136115,136118,136121,136124,136127,136133,136142,136146,136165,136169,136179,136182,136185,136188,136191,136194,136197,136200,136203,136212,136216,136225,136228,136233,136286,136291,136457,136460,136463,136468,136471,136474,136477,136480,136485,136633,136636,136639,136644,136647,136652,136686,136689,136692,136696,136699,136706,136709,136712,136715,136718,136721,136724,136727,136731,136734],[10,135341,135337],{"id":135342},"_12-显示隐藏与图形资源",[14,135344,135346],{"id":135345},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[243,135348,135349,135352],{},[143,135350,135351],{},"目的:让一个元素在页面中消失或者显示出来",[143,135353,135354],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[69,135356,135358],{"id":135357},"_1211-display-显示","12.1.1 display 显示",[140,135360,135361],{},[143,135362,135363],{},"display 设置或检索对象是否及如何显示",[243,135365,135366,135369],{},[143,135367,135368],{},"display: none;隐藏对象",[143,135370,135371],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[140,135373,135374,135381],{"start":171},[143,135375,135376,135377,135380],{},"特点： display 隐藏元素后， ",[27,135378,135379],{},"不再占"," 有原来的位置",[143,135382,135383],{},"在js中使用非常的广泛",[69,135385,135387],{"id":135386},"_1212-visibility可见性","12.1.2 visibility可见性",[140,135389,135390],{},[143,135391,135392],{},"visibility 属性用于指定一个元素应可见还是隐藏",[243,135394,135395,135398],{},[143,135396,135397],{},"visibility： visible；元素可见",[143,135399,135400],{},"visibility：hidden；元素隐藏",[140,135402,135403,135406,135409],{"start":171},[143,135404,135405],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[143,135407,135408],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[143,135410,135411],{},"隐藏后继续占有原有位置",[69,135413,135415],{"id":135414},"_1213-overflow溢出","12.1.3 overflow溢出",[243,135417,135418],{},[143,135419,135420],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[2086,135422,135423,135431],{},[2089,135424,135425],{},[2092,135426,135427,135429],{},[2095,135428,128780],{"align":1374},[2095,135430,29285],{"align":1374},[2132,135432,135433,135441,135448,135455],{},[2092,135434,135435,135438],{},[2137,135436,135437],{"align":1374},"visible",[2137,135439,135440],{"align":1374},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[2092,135442,135443,135445],{},[2137,135444,63494],{"align":1374},[2137,135446,135447],{"align":1374},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[2092,135449,135450,135452],{},[2137,135451,130731],{"align":1374},[2137,135453,135454],{"align":1374},"不管超出内容否，总是显示滚动条",[2092,135456,135457,135459],{},[2137,135458,74435],{"align":1374},[2137,135460,135461],{"align":1374},"超出自动显示滚动条，不超出不显示滚动条",[243,135463,135464,135467],{},[143,135465,135466],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[143,135468,135469],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[69,135471,135473],{"id":135472},"_1214-案例收获","12.1.4 案例收获",[19,135475],{"style":21,"src":135476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[24,135478,135479],{},"问题：没做出来动态效果，使用hover没实现",[24,135481,135482],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[303,135484,135485],{"className":469,"code":924,"language":471,"meta":308,"style":308},[119,135486,135487,135491,135505,135509,135523,135527,135541,135545,135559,135563],{"__ignoreMap":308},[312,135488,135489],{"class":314,"line":315},[312,135490,931],{"class":318},[312,135492,135493,135495,135497,135499,135501,135503],{"class":314,"line":171},[312,135494,936],{"class":332},[312,135496,939],{"class":324},[312,135498,942],{"class":488},[312,135500,492],{"class":324},[312,135502,947],{"class":488},[312,135504,950],{"class":324},[312,135506,135507],{"class":314,"line":274},[312,135508,955],{"class":318},[312,135510,135511,135513,135515,135517,135519,135521],{"class":314,"line":298},[312,135512,960],{"class":332},[312,135514,939],{"class":324},[312,135516,942],{"class":488},[312,135518,492],{"class":324},[312,135520,969],{"class":488},[312,135522,950],{"class":324},[312,135524,135525],{"class":314,"line":974},[312,135526,977],{"class":318},[312,135528,135529,135531,135533,135535,135537,135539],{"class":314,"line":980},[312,135530,983],{"class":332},[312,135532,939],{"class":324},[312,135534,942],{"class":488},[312,135536,492],{"class":324},[312,135538,992],{"class":488},[312,135540,950],{"class":324},[312,135542,135543],{"class":314,"line":997},[312,135544,1000],{"class":318},[312,135546,135547,135549,135551,135553,135555,135557],{"class":314,"line":1003},[312,135548,1006],{"class":332},[312,135550,939],{"class":324},[312,135552,942],{"class":488},[312,135554,492],{"class":324},[312,135556,1015],{"class":488},[312,135558,950],{"class":324},[312,135560,135561],{"class":314,"line":1020},[312,135562,1023],{"class":318},[312,135564,135565,135567,135569,135571,135573,135575],{"class":314,"line":1026},[312,135566,1029],{"class":332},[312,135568,939],{"class":324},[312,135570,942],{"class":488},[312,135572,492],{"class":324},[312,135574,1038],{"class":488},[312,135576,950],{"class":324},[24,135578,135579],{},"完整代码：",[303,135581,135582],{"className":469,"code":924,"language":471,"meta":308,"style":308},[119,135583,135584,135588,135602,135606,135620,135624,135638,135642,135656,135660],{"__ignoreMap":308},[312,135585,135586],{"class":314,"line":315},[312,135587,931],{"class":318},[312,135589,135590,135592,135594,135596,135598,135600],{"class":314,"line":171},[312,135591,936],{"class":332},[312,135593,939],{"class":324},[312,135595,942],{"class":488},[312,135597,492],{"class":324},[312,135599,947],{"class":488},[312,135601,950],{"class":324},[312,135603,135604],{"class":314,"line":274},[312,135605,955],{"class":318},[312,135607,135608,135610,135612,135614,135616,135618],{"class":314,"line":298},[312,135609,960],{"class":332},[312,135611,939],{"class":324},[312,135613,942],{"class":488},[312,135615,492],{"class":324},[312,135617,969],{"class":488},[312,135619,950],{"class":324},[312,135621,135622],{"class":314,"line":974},[312,135623,977],{"class":318},[312,135625,135626,135628,135630,135632,135634,135636],{"class":314,"line":980},[312,135627,983],{"class":332},[312,135629,939],{"class":324},[312,135631,942],{"class":488},[312,135633,492],{"class":324},[312,135635,992],{"class":488},[312,135637,950],{"class":324},[312,135639,135640],{"class":314,"line":997},[312,135641,1000],{"class":318},[312,135643,135644,135646,135648,135650,135652,135654],{"class":314,"line":1003},[312,135645,1006],{"class":332},[312,135647,939],{"class":324},[312,135649,942],{"class":488},[312,135651,492],{"class":324},[312,135653,1015],{"class":488},[312,135655,950],{"class":324},[312,135657,135658],{"class":314,"line":1020},[312,135659,1023],{"class":318},[312,135661,135662,135664,135666,135668,135670,135672],{"class":314,"line":1026},[312,135663,1029],{"class":332},[312,135665,939],{"class":324},[312,135667,942],{"class":488},[312,135669,492],{"class":324},[312,135671,1038],{"class":488},[312,135673,950],{"class":324},[24,135675,135676],{},"分布思路重点详解：",[303,135678,135679],{"className":469,"code":924,"language":471,"meta":308,"style":308},[119,135680,135681,135685,135699,135703,135717,135721,135735,135739,135753,135757],{"__ignoreMap":308},[312,135682,135683],{"class":314,"line":315},[312,135684,931],{"class":318},[312,135686,135687,135689,135691,135693,135695,135697],{"class":314,"line":171},[312,135688,936],{"class":332},[312,135690,939],{"class":324},[312,135692,942],{"class":488},[312,135694,492],{"class":324},[312,135696,947],{"class":488},[312,135698,950],{"class":324},[312,135700,135701],{"class":314,"line":274},[312,135702,955],{"class":318},[312,135704,135705,135707,135709,135711,135713,135715],{"class":314,"line":298},[312,135706,960],{"class":332},[312,135708,939],{"class":324},[312,135710,942],{"class":488},[312,135712,492],{"class":324},[312,135714,969],{"class":488},[312,135716,950],{"class":324},[312,135718,135719],{"class":314,"line":974},[312,135720,977],{"class":318},[312,135722,135723,135725,135727,135729,135731,135733],{"class":314,"line":980},[312,135724,983],{"class":332},[312,135726,939],{"class":324},[312,135728,942],{"class":488},[312,135730,492],{"class":324},[312,135732,992],{"class":488},[312,135734,950],{"class":324},[312,135736,135737],{"class":314,"line":997},[312,135738,1000],{"class":318},[312,135740,135741,135743,135745,135747,135749,135751],{"class":314,"line":1003},[312,135742,1006],{"class":332},[312,135744,939],{"class":324},[312,135746,942],{"class":488},[312,135748,492],{"class":324},[312,135750,1015],{"class":488},[312,135752,950],{"class":324},[312,135754,135755],{"class":314,"line":1020},[312,135756,1023],{"class":318},[312,135758,135759,135761,135763,135765,135767,135769],{"class":314,"line":1026},[312,135760,1029],{"class":332},[312,135762,939],{"class":324},[312,135764,942],{"class":488},[312,135766,492],{"class":324},[312,135768,1038],{"class":488},[312,135770,950],{"class":324},[19,135772],{"style":21,"src":135773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[24,135775,135776],{},"图片太大，盒子太小，此时需要修改图片的大小",[303,135778,135780],{"className":305,"code":135779,"language":307,"meta":308,"style":308},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[119,135781,135782],{"__ignoreMap":308},[312,135783,135784,135786,135788,135790,135792,135795,135797,135799,135802,135805,135807,135810],{"class":314,"line":315},[312,135785,325],{"class":324},[312,135787,19],{"class":328},[312,135789,57021],{"class":332},[312,135791,336],{"class":324},[312,135793,135794],{"class":339},"\"images\u002Fpic.jpg\"",[312,135796,57029],{"class":332},[312,135798,336],{"class":324},[312,135800,135801],{"class":339},"\"描述文字\"",[312,135803,135804],{"class":332}," title",[312,135806,336],{"class":324},[312,135808,135809],{"class":339},"\"悬停提示\"",[312,135811,343],{"class":324},[19,135813],{"style":21,"src":135814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[24,135816,135817],{},"制造遮罩层",[303,135819,135820],{"className":305,"code":135779,"language":307,"meta":308,"style":308},[119,135821,135822],{"__ignoreMap":308},[312,135823,135824,135826,135828,135830,135832,135834,135836,135838,135840,135842,135844,135846],{"class":314,"line":315},[312,135825,325],{"class":324},[312,135827,19],{"class":328},[312,135829,57021],{"class":332},[312,135831,336],{"class":324},[312,135833,135794],{"class":339},[312,135835,57029],{"class":332},[312,135837,336],{"class":324},[312,135839,135801],{"class":339},[312,135841,135804],{"class":332},[312,135843,336],{"class":324},[312,135845,135809],{"class":339},[312,135847,343],{"class":324},[24,135849,135850],{},"此时是这样的为标准流",[19,135852],{"style":21,"src":135853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[24,135855,135856],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[24,135858,135859],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[24,135861,135862],{},"让他在中间，用center(background-position)",[24,135864,135865],{},"将需要变的尽可能放到一个盒子中",[24,135867,135868],{},"放大盒子上内部盒子发生变化",[303,135870,135872],{"className":469,"code":135871,"language":471,"meta":308,"style":308},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[119,135873,135874,135880,135890,135894,135901,135911,135923,135935],{"__ignoreMap":308},[312,135875,135876,135878],{"class":314,"line":315},[312,135877,129381],{"class":332},[312,135879,483],{"class":324},[312,135881,135882,135884,135886,135888],{"class":314,"line":171},[312,135883,134083],{"class":488},[312,135885,492],{"class":324},[312,135887,969],{"class":488},[312,135889,498],{"class":324},[312,135891,135892],{"class":314,"line":274},[312,135893,515],{"class":324},[312,135895,135896,135899],{"class":314,"line":298},[312,135897,135898],{"class":332},".child",[312,135900,483],{"class":324},[312,135902,135903,135905,135907,135909],{"class":314,"line":974},[312,135904,134083],{"class":488},[312,135906,492],{"class":324},[312,135908,992],{"class":488},[312,135910,498],{"class":324},[312,135912,135913,135915,135917,135919,135921],{"class":314,"line":980},[312,135914,134097],{"class":488},[312,135916,492],{"class":324},[312,135918,2601],{"class":488},[312,135920,2273],{"class":1436},[312,135922,498],{"class":324},[312,135924,135925,135927,135929,135931,135933],{"class":314,"line":997},[312,135926,134114],{"class":488},[312,135928,492],{"class":324},[312,135930,2601],{"class":488},[312,135932,2273],{"class":1436},[312,135934,498],{"class":324},[312,135936,135937],{"class":314,"line":1003},[312,135938,515],{"class":324},[24,135940,135941],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135943,135945],{"id":135944},"_122-精灵图","12.2 精灵图",[69,135947,135949],{"id":135948},"_1221-理解","12.2.1 理解",[140,135951,135952,135970],{},[143,135953,135954,135955,134183,135958,135961,135962,135965,135966,135969],{},"目的： ",[27,135956,135957],{},"为了有效地减少服务器接收和发送请求的次数",[27,135959,135960],{},"提高"," 页面的 ",[27,135963,135964],{},"加载速度"," ，出现了 ",[27,135967,135968],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[143,135971,135972,135973,135975,135976,135978,135979,135981,135982,135984,135985,135987,135988,135990],{},"使用精灵图核心：",[55500,135974],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[55500,135977],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[55500,135980],{},"  ③移动背景图片位置， 此时可以使用 background-position",[55500,135983],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[55500,135986],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[55500,135989],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[69,135992,135994],{"id":135993},"_1222-扒图","12.2.2 扒图",[303,135996,135999],{"className":135997,"code":135998,"language":6992},[6990],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[119,136000,135998],{"__ignoreMap":308},[19,136002],{"style":21,"src":136003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[19,136005],{"style":21,"src":136006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[69,136008,136010],{"id":136009},"_1223-精灵图的实现","12.2.3 精灵图的实现",[19,136012],{"style":21,"src":136013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[24,136015,136016],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[19,136018],{"style":21,"src":136019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[303,136021,136023],{"className":469,"code":136022,"language":471,"meta":308,"style":308},"\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",[119,136024,136025,136030,136036,136048,136060,136078,136094],{"__ignoreMap":308},[312,136026,136027],{"class":314,"line":315},[312,136028,136029],{"class":318},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[312,136031,136032,136034],{"class":314,"line":171},[312,136033,1534],{"class":332},[312,136035,483],{"class":324},[312,136037,136038,136040,136042,136044,136046],{"class":314,"line":274},[312,136039,1541],{"class":488},[312,136041,492],{"class":324},[312,136043,1546],{"class":488},[312,136045,1437],{"class":1436},[312,136047,498],{"class":324},[312,136049,136050,136052,136054,136056,136058],{"class":314,"line":298},[312,136051,1555],{"class":488},[312,136053,492],{"class":324},[312,136055,1546],{"class":488},[312,136057,1437],{"class":1436},[312,136059,498],{"class":324},[312,136061,136062,136064,136066,136068,136070,136072,136074,136076],{"class":314,"line":974},[312,136063,1568],{"class":488},[312,136065,492],{"class":324},[312,136067,1573],{"class":488},[312,136069,1576],{"class":324},[312,136071,1580],{"class":1579},[312,136073,1583],{"class":324},[312,136075,1586],{"class":488},[312,136077,498],{"class":324},[312,136079,136080,136082,136084,136086,136088,136090,136092],{"class":314,"line":980},[312,136081,130572],{"class":488},[312,136083,492],{"class":324},[312,136085,53550],{"class":488},[312,136087,1437],{"class":1436},[312,136089,1594],{"class":488},[312,136091,1437],{"class":1436},[312,136093,498],{"class":324},[312,136095,136096],{"class":314,"line":997},[312,136097,515],{"class":324},[19,136099],{"style":21,"src":136100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[24,136102,136103],{},"在前端中坐标轴的正方向是右和下",[14,136105,136107],{"id":136106},"_123-字体图标","12.3 字体图标",[69,136109,136111],{"id":136110},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[24,136113,136114],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[24,136116,136117],{},"精灵图是有诸多优点的，但是缺点很明显。",[24,136119,136120],{},"1.图片文件还是比较大的。",[24,136122,136123],{},"2.图片本身放大和缩小会失真。",[24,136125,136126],{},"3.一旦图片制作完毕想要更换非常复杂。",[24,136128,136129,136130,27536],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[27,136131,136132],{},"字体图标 iconfont",[24,136134,136135,136138,136139,30181],{},[27,136136,136137],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[27,136140,136141],{},"展示的是图标，本质属于字体",[69,136143,136145],{"id":136144},"_1232-字体图标的优点","12.3.2 字体图标的优点",[243,136147,136148,136153,136156,136159,136162],{},[143,136149,136150,136152],{},[27,136151,27672],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[143,136154,136155],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[143,136157,136158],{},"兼容性：几乎支持所有的浏览器，请放心使用",[143,136160,136161],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[143,136163,136164],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[69,136166,136168],{"id":136167},"_1233-字体库下载网站","12.3.3 字体库下载网站",[243,136170,136171],{},[143,136172,136173,136174],{},"icomoon字体库：",[164,136175,136178],{"href":136176,"rel":136177},"http:\u002F\u002Ficomoon.io\u002F",[168],"http:\u002F\u002Ficomoon.io",[24,136180,136181],{},"进去之后点icomoon app",[19,136183],{"style":21,"src":136184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[24,136186,136187],{},"可以对其编辑：",[19,136189],{"style":21,"src":136190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[24,136192,136193],{},"生成字体：",[19,136195],{"style":21,"src":136196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[24,136198,136199],{},"下载：",[19,136201],{"style":21,"src":136202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[243,136204,136205],{},[143,136206,136207,136208],{},"阿里iconfont字体库： ",[164,136209,136210],{"href":136210,"rel":136211},"http:\u002F\u002Fwww.iconfont.cn\u002F",[168],[69,136213,136215],{"id":136214},"_1234-字体图标的引入","12.3.4 字体图标的引入",[140,136217,136218],{},[143,136219,136220,136221,136224],{},"把下载包里面的 ",[27,136222,136223],{},"fonts"," 文件夹放入页面根目录下",[19,136226],{"style":21,"src":136227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[140,136229,136230],{"start":171},[143,136231,136232],{},"字体文件格式",[2086,136234,136235,136244],{},[2089,136236,136237],{},[2092,136238,136239,136242],{},[2095,136240,136241],{"align":1374},"格式",[2095,136243,25536],{"align":1374},[2132,136245,136246,136256,136266,136276],{},[2092,136247,136248,136253],{},[2137,136249,136250],{"align":1374},[27,136251,136252],{},".ttf",[2137,136254,136255],{"align":1374},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[2092,136257,136258,136263],{},[2137,136259,136260],{"align":1374},[27,136261,136262],{},".woff",[2137,136264,136265],{"align":1374},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[2092,136267,136268,136273],{},[2137,136269,136270],{"align":1374},[27,136271,136272],{},".eot",[2137,136274,136275],{"align":1374},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[2092,136277,136278,136283],{},[2137,136279,136280],{"align":1374},[27,136281,136282],{},"svg",[2137,136284,136285],{"align":1374},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[140,136287,136288],{"start":274},[143,136289,136290],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[303,136292,136294],{"className":469,"code":136293,"language":471,"meta":308,"style":308},"\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",[119,136295,136296,136301,136308,136320,136336,136361,136382,136402,136422,136426,136432,136442,136453],{"__ignoreMap":308},[312,136297,136298],{"class":314,"line":315},[312,136299,136300],{"class":318},"\u002F* 引入字体图标 *\u002F\n",[312,136302,136303,136306],{"class":314,"line":171},[312,136304,136305],{"class":1436},"@font-face",[312,136307,483],{"class":324},[312,136309,136310,136313,136315,136318],{"class":314,"line":274},[312,136311,136312],{"class":488},"  font-family",[312,136314,492],{"class":324},[312,136316,136317],{"class":339},"'icomoon'",[312,136319,498],{"class":324},[312,136321,136322,136325,136327,136329,136331,136334],{"class":314,"line":298},[312,136323,136324],{"class":488},"  src",[312,136326,492],{"class":324},[312,136328,1573],{"class":488},[312,136330,1576],{"class":324},[312,136332,136333],{"class":339},"'fonts\u002Ficomoon.eot'",[312,136335,4524],{"class":324},[312,136337,136338,136340,136342,136344,136346,136349,136351,136354,136356,136359],{"class":314,"line":974},[312,136339,136324],{"class":488},[312,136341,492],{"class":324},[312,136343,1573],{"class":488},[312,136345,1576],{"class":324},[312,136347,136348],{"class":339},"'fonts\u002Ficomoon.eot?#iefix'",[312,136350,1583],{"class":324},[312,136352,136353],{"class":488},"format",[312,136355,1576],{"class":324},[312,136357,136358],{"class":339},"'embedded-opentype'",[312,136360,39842],{"class":324},[312,136362,136363,136366,136368,136371,136373,136375,136377,136380],{"class":314,"line":980},[312,136364,136365],{"class":488},"       url",[312,136367,1576],{"class":324},[312,136369,136370],{"class":339},"'fonts\u002Ficomoon.woff'",[312,136372,1583],{"class":324},[312,136374,136353],{"class":488},[312,136376,1576],{"class":324},[312,136378,136379],{"class":339},"'woff'",[312,136381,39842],{"class":324},[312,136383,136384,136386,136388,136391,136393,136395,136397,136400],{"class":314,"line":997},[312,136385,136365],{"class":488},[312,136387,1576],{"class":324},[312,136389,136390],{"class":339},"'fonts\u002Ficomoon.ttf'",[312,136392,1583],{"class":324},[312,136394,136353],{"class":488},[312,136396,1576],{"class":324},[312,136398,136399],{"class":339},"'truetype'",[312,136401,39842],{"class":324},[312,136403,136404,136406,136408,136411,136413,136415,136417,136420],{"class":314,"line":1003},[312,136405,136365],{"class":488},[312,136407,1576],{"class":324},[312,136409,136410],{"class":339},"'fonts\u002Ficomoon.svg#icomoon'",[312,136412,1583],{"class":324},[312,136414,136353],{"class":488},[312,136416,1576],{"class":324},[312,136418,136419],{"class":339},"'svg'",[312,136421,4524],{"class":324},[312,136423,136424],{"class":314,"line":1020},[312,136425,515],{"class":324},[312,136427,136428,136430],{"class":314,"line":1026},[312,136429,1534],{"class":332},[312,136431,483],{"class":324},[312,136433,136434,136436,136438,136440],{"class":314,"line":3418},[312,136435,136312],{"class":488},[312,136437,492],{"class":324},[312,136439,136317],{"class":339},[312,136441,498],{"class":324},[312,136443,136444,136447,136449,136451],{"class":314,"line":3423},[312,136445,136446],{"class":488},"  font-style",[312,136448,492],{"class":324},[312,136450,65619],{"class":488},[312,136452,498],{"class":324},[312,136454,136455],{"class":314,"line":3429},[312,136456,515],{"class":324},[24,136458,136459],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[19,136461],{"style":21,"src":136462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[140,136464,136465],{"start":298},[143,136466,136467],{},"添加字体",[19,136469],{"style":21,"src":136470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[24,136472,136473],{},"复制：",[19,136475],{"style":21,"src":136476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[24,136478,136479],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[140,136481,136482],{"start":974},[143,136483,136484],{},"代码展示：",[303,136486,136487],{"className":469,"code":136293,"language":471,"meta":308,"style":308},[119,136488,136489,136493,136499,136509,136523,136545,136563,136581,136599,136603,136609,136619,136629],{"__ignoreMap":308},[312,136490,136491],{"class":314,"line":315},[312,136492,136300],{"class":318},[312,136494,136495,136497],{"class":314,"line":171},[312,136496,136305],{"class":1436},[312,136498,483],{"class":324},[312,136500,136501,136503,136505,136507],{"class":314,"line":274},[312,136502,136312],{"class":488},[312,136504,492],{"class":324},[312,136506,136317],{"class":339},[312,136508,498],{"class":324},[312,136510,136511,136513,136515,136517,136519,136521],{"class":314,"line":298},[312,136512,136324],{"class":488},[312,136514,492],{"class":324},[312,136516,1573],{"class":488},[312,136518,1576],{"class":324},[312,136520,136333],{"class":339},[312,136522,4524],{"class":324},[312,136524,136525,136527,136529,136531,136533,136535,136537,136539,136541,136543],{"class":314,"line":974},[312,136526,136324],{"class":488},[312,136528,492],{"class":324},[312,136530,1573],{"class":488},[312,136532,1576],{"class":324},[312,136534,136348],{"class":339},[312,136536,1583],{"class":324},[312,136538,136353],{"class":488},[312,136540,1576],{"class":324},[312,136542,136358],{"class":339},[312,136544,39842],{"class":324},[312,136546,136547,136549,136551,136553,136555,136557,136559,136561],{"class":314,"line":980},[312,136548,136365],{"class":488},[312,136550,1576],{"class":324},[312,136552,136370],{"class":339},[312,136554,1583],{"class":324},[312,136556,136353],{"class":488},[312,136558,1576],{"class":324},[312,136560,136379],{"class":339},[312,136562,39842],{"class":324},[312,136564,136565,136567,136569,136571,136573,136575,136577,136579],{"class":314,"line":997},[312,136566,136365],{"class":488},[312,136568,1576],{"class":324},[312,136570,136390],{"class":339},[312,136572,1583],{"class":324},[312,136574,136353],{"class":488},[312,136576,1576],{"class":324},[312,136578,136399],{"class":339},[312,136580,39842],{"class":324},[312,136582,136583,136585,136587,136589,136591,136593,136595,136597],{"class":314,"line":1003},[312,136584,136365],{"class":488},[312,136586,1576],{"class":324},[312,136588,136410],{"class":339},[312,136590,1583],{"class":324},[312,136592,136353],{"class":488},[312,136594,1576],{"class":324},[312,136596,136419],{"class":339},[312,136598,4524],{"class":324},[312,136600,136601],{"class":314,"line":1020},[312,136602,515],{"class":324},[312,136604,136605,136607],{"class":314,"line":1026},[312,136606,1534],{"class":332},[312,136608,483],{"class":324},[312,136610,136611,136613,136615,136617],{"class":314,"line":3418},[312,136612,136312],{"class":488},[312,136614,492],{"class":324},[312,136616,136317],{"class":339},[312,136618,498],{"class":324},[312,136620,136621,136623,136625,136627],{"class":314,"line":3423},[312,136622,136446],{"class":488},[312,136624,492],{"class":324},[312,136626,65619],{"class":488},[312,136628,498],{"class":324},[312,136630,136631],{"class":314,"line":3429},[312,136632,515],{"class":324},[19,136634],{"style":21,"src":136635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[24,136637,136638],{},"更加细节展示：",[140,136640,136641],{},[143,136642,136643],{},"html 标签内添加小图标",[19,136645],{"style":21,"src":136646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[140,136648,136649],{"start":171},[143,136650,136651],{},"给标签定义字体",[303,136653,136654],{"className":305,"code":306,"language":307,"meta":308,"style":308},[119,136655,136656,136660,136674,136678],{"__ignoreMap":308},[312,136657,136658],{"class":314,"line":315},[312,136659,319],{"class":318},[312,136661,136662,136664,136666,136668,136670,136672],{"class":314,"line":171},[312,136663,325],{"class":324},[312,136665,329],{"class":328},[312,136667,333],{"class":332},[312,136669,336],{"class":324},[312,136671,340],{"class":339},[312,136673,343],{"class":324},[312,136675,136676],{"class":314,"line":274},[312,136677,348],{"class":324},[312,136679,136680,136682,136684],{"class":314,"line":298},[312,136681,353],{"class":324},[312,136683,329],{"class":328},[312,136685,343],{"class":324},[24,136687,136688],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[19,136690],{"style":21,"src":136691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[69,136693,136695],{"id":136694},"_1235-字体图标的追加","12.3.5 字体图标的追加",[24,136697,136698],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[24,136700,136701,136702,136705],{},"把压缩包里面的 ",[27,136703,136704],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[24,136707,136708],{},"打开网站，点下方：",[19,136710],{"style":21,"src":136711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[19,136713],{"style":21,"src":136714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[19,136716],{"style":21,"src":136717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[24,136719,136720],{},"点yes重新加载",[24,136722,136723],{},"然后重复之前的操作就可以实现了",[24,136725,136726],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[69,136728,136730],{"id":136729},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[19,136732],{"style":21,"src":136733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1856,136735,136736],{},"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":308,"searchDepth":171,"depth":171,"links":136738},[136739,136745,136750],{"id":135345,"depth":171,"text":135346,"children":136740},[136741,136742,136743,136744],{"id":135357,"depth":274,"text":135358},{"id":135386,"depth":274,"text":135387},{"id":135414,"depth":274,"text":135415},{"id":135472,"depth":274,"text":135473},{"id":135944,"depth":171,"text":135945,"children":136746},[136747,136748,136749],{"id":135948,"depth":274,"text":135949},{"id":135993,"depth":274,"text":135994},{"id":136009,"depth":274,"text":136010},{"id":136106,"depth":171,"text":136107,"children":136751},[136752,136753,136754,136755,136756,136757],{"id":136110,"depth":274,"text":136111},{"id":136144,"depth":274,"text":136145},{"id":136167,"depth":274,"text":136168},{"id":136214,"depth":274,"text":136215},{"id":136694,"depth":274,"text":136695},{"id":136729,"depth":274,"text":136730},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":135337,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136764,"title":136765,"body":136766,"description":1878,"extension":1879,"meta":137993,"navigation":1881,"path":137994,"seo":137995,"stem":137996,"__hash__":137997},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136767,"toc":137974},[136768,136771,136775,136778,136792,136860,136890,136893,136897,136901,137003,137050,137054,137057,137060,137094,137097,137100,137103,137106,137109,137112,137115,137117,137120,137123,137126,137129,137132,137135,137138,137166,137169,137173,137176,137183,137186,137189,137215,137218,137222,137225,137228,137235,137239,137242,137244,137276,137279,137282,137294,137300,137303,137306,137309,137311,137315,137318,137321,137324,137369,137373,137375,137378,137385,137427,137430,137434,137439,137453,137457,137460,137463,137466,137469,137472,137506,137509,137512,137566,137569,137572,137575,137578,137630,137633,137636,137685,137689,137691,137694,137697,137700,137703,137706,137764,137767,137773,137776,137779,137811,137814,137818,137822,137825,137857,137861,137864,137908,137912,137915,137918,137921,137924,137927,137930,137933,137935,137938,137940,137943,137946,137949,137952,137957,137960,137962,137965,137968,137971],[10,136769,136765],{"id":136770},"_13-界面样式与布局技巧",[14,136772,136774],{"id":136773},"_131-css三角","13.1 css三角",[24,136776,136777],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[243,136779,136780,136783,136786,136789],{},[143,136781,136782],{},"用css 边框可以模拟三角效果",[143,136784,136785],{},"宽度高度为0",[143,136787,136788],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[143,136790,136791],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[303,136793,136795],{"className":469,"code":136794,"language":471,"meta":308,"style":308},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[119,136796,136797,136802,136809,136819,136829,136845,136856],{"__ignoreMap":308},[312,136798,136799],{"class":314,"line":315},[312,136800,136801],{"class":318},"\u002F* CSS 实现三角形 *\u002F\n",[312,136803,136804,136807],{"class":314,"line":171},[312,136805,136806],{"class":332},".triangle",[312,136808,483],{"class":324},[312,136810,136811,136813,136815,136817],{"class":314,"line":274},[312,136812,1541],{"class":488},[312,136814,492],{"class":324},[312,136816,858],{"class":488},[312,136818,498],{"class":324},[312,136820,136821,136823,136825,136827],{"class":314,"line":298},[312,136822,1555],{"class":488},[312,136824,492],{"class":324},[312,136826,858],{"class":488},[312,136828,498],{"class":324},[312,136830,136831,136833,136835,136837,136839,136841,136843],{"class":314,"line":974},[312,136832,1428],{"class":488},[312,136834,492],{"class":324},[312,136836,2391],{"class":488},[312,136838,1437],{"class":1436},[312,136840,1440],{"class":488},[312,136842,65769],{"class":488},[312,136844,498],{"class":324},[312,136846,136847,136850,136852,136854],{"class":314,"line":980},[312,136848,136849],{"class":488},"  border-bottom-color",[312,136851,492],{"class":324},[312,136853,64147],{"class":488},[312,136855,498],{"class":324},[312,136857,136858],{"class":314,"line":997},[312,136859,515],{"class":324},[303,136861,136862],{"className":469,"code":1415,"language":471,"meta":308,"style":308},[119,136863,136864,136870,136886],{"__ignoreMap":308},[312,136865,136866,136868],{"class":314,"line":315},[312,136867,329],{"class":328},[312,136869,483],{"class":324},[312,136871,136872,136874,136876,136878,136880,136882,136884],{"class":314,"line":171},[312,136873,1428],{"class":488},[312,136875,492],{"class":324},[312,136877,1433],{"class":488},[312,136879,1437],{"class":1436},[312,136881,1440],{"class":488},[312,136883,1443],{"class":488},[312,136885,498],{"class":324},[312,136887,136888],{"class":314,"line":274},[312,136889,515],{"class":324},[19,136891],{"style":21,"src":136892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136894,136896],{"id":136895},"_132-css用户界面样式","13.2 css用户界面样式",[69,136898,136900],{"id":136899},"_1321-鼠标样式","13.2.1 鼠标样式",[303,136902,136904],{"className":469,"code":136903,"language":471,"meta":308,"style":308},"\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",[119,136905,136906,136911,136930,136948,136967,136984],{"__ignoreMap":308},[312,136907,136908],{"class":314,"line":315},[312,136909,136910],{"class":318},"\u002F* 鼠标样式 *\u002F\n",[312,136912,136913,136915,136917,136920,136922,136924,136927],{"class":314,"line":171},[312,136914,329],{"class":328},[312,136916,939],{"class":324},[312,136918,136919],{"class":488},"cursor",[312,136921,492],{"class":324},[312,136923,63808],{"class":488},[312,136925,136926],{"class":324},"; }   ",[312,136928,136929],{"class":318},"\u002F* 手型 *\u002F\n",[312,136931,136932,136934,136936,136938,136940,136943,136945],{"class":314,"line":274},[312,136933,329],{"class":328},[312,136935,939],{"class":324},[312,136937,136919],{"class":488},[312,136939,492],{"class":324},[312,136941,136942],{"class":488},"default",[312,136944,136926],{"class":324},[312,136946,136947],{"class":318},"\u002F* 默认 *\u002F\n",[312,136949,136950,136952,136954,136956,136958,136961,136964],{"class":314,"line":298},[312,136951,329],{"class":328},[312,136953,939],{"class":324},[312,136955,136919],{"class":488},[312,136957,492],{"class":324},[312,136959,136960],{"class":488},"move",[312,136962,136963],{"class":324},"; }      ",[312,136965,136966],{"class":318},"\u002F* 移动 *\u002F\n",[312,136968,136969,136971,136973,136975,136977,136979,136981],{"class":314,"line":974},[312,136970,329],{"class":328},[312,136972,939],{"class":324},[312,136974,136919],{"class":488},[312,136976,492],{"class":324},[312,136978,6992],{"class":488},[312,136980,136963],{"class":324},[312,136982,136983],{"class":318},"\u002F* 文本 *\u002F\n",[312,136985,136986,136988,136990,136992,136994,136997,137000],{"class":314,"line":980},[312,136987,329],{"class":328},[312,136989,939],{"class":324},[312,136991,136919],{"class":488},[312,136993,492],{"class":324},[312,136995,136996],{"class":488},"not-allowed",[312,136998,136999],{"class":324},"; } ",[312,137001,137002],{"class":318},"\u002F* 禁止 *\u002F\n",[2086,137004,137005,137013],{},[2089,137006,137007],{},[2092,137008,137009,137011],{},[2095,137010,128780],{"align":1374},[2095,137012,29285],{"align":1374},[2132,137014,137015,137022,137029,137036,137043],{},[2092,137016,137017,137019],{},[2137,137018,136942],{"align":1374},[2137,137020,137021],{"align":1374},"小白 默认",[2092,137023,137024,137026],{},[2137,137025,63808],{"align":1374},[2137,137027,137028],{"align":1374},"小手",[2092,137030,137031,137033],{},[2137,137032,136960],{"align":1374},[2137,137034,137035],{"align":1374},"移动",[2092,137037,137038,137040],{},[2137,137039,6992],{"align":1374},[2137,137041,137042],{"align":1374},"文本",[2092,137044,137045,137047],{},[2137,137046,136996],{"align":1374},[2137,137048,137049],{"align":1374},"禁止",[69,137051,137053],{"id":137052},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[24,137055,137056],{},"去除表单轮廓线",[24,137058,137059],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[303,137061,137062],{"className":469,"code":131674,"language":471,"meta":308,"style":308},[119,137063,137064,137068,137074,137090],{"__ignoreMap":308},[312,137065,137066],{"class":314,"line":315},[312,137067,131681],{"class":318},[312,137069,137070,137072],{"class":314,"line":171},[312,137071,329],{"class":328},[312,137073,483],{"class":324},[312,137075,137076,137078,137080,137082,137084,137086,137088],{"class":314,"line":274},[312,137077,1428],{"class":488},[312,137079,492],{"class":324},[312,137081,1433],{"class":488},[312,137083,1437],{"class":1436},[312,137085,1440],{"class":488},[312,137087,1443],{"class":488},[312,137089,498],{"class":324},[312,137091,137092],{"class":314,"line":298},[312,137093,515],{"class":324},[24,137095,137096],{},"文本域：",[19,137098],{"style":21,"src":137099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[24,137101,137102],{},"此时会有一个空白区域",[19,137104],{"style":21,"src":137105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[24,137107,137108],{},"写在同一行就不会出现这个问题",[19,137110],{"style":21,"src":137111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[24,137113,137114],{},"文本域是行内块元素，一定记住！！！",[24,137116,100003],{},[19,137118],{"style":21,"src":137119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[24,137121,137122],{},"文本域尽量放在一行",[24,137124,137125],{},"知识回顾：cols是列，rols是行",[19,137127],{"style":21,"src":137128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[24,137130,137131],{},"它可以进行拖动，显然这是我们不愿意看到的",[19,137133],{"style":21,"src":137134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[24,137136,137137],{},"使用resize进行解决",[303,137139,137141],{"className":469,"code":137140,"language":471,"meta":308,"style":308},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[119,137142,137143,137149,137162],{"__ignoreMap":308},[312,137144,137145,137147],{"class":314,"line":315},[312,137146,55605],{"class":328},[312,137148,483],{"class":324},[312,137150,137151,137153,137155,137157,137159],{"class":314,"line":171},[312,137152,72571],{"class":488},[312,137154,492],{"class":324},[312,137156,56521],{"class":488},[312,137158,132171],{"class":324},[312,137160,137161],{"class":318},"\u002F* 取消表单轮廓线 *\u002F\n",[312,137163,137164],{"class":314,"line":274},[312,137165,515],{"class":324},[24,137167,137168],{},"此时就无法通过右下方实现拖动了",[69,137170,137172],{"id":137171},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[24,137174,137175],{},"实现一个盒子中的文字和图片对齐",[24,137177,137178,137179,137182],{},"用于设置一个元素的 ",[27,137180,137181],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[24,137184,137185],{},"图片和文字默认是基线对齐",[19,137187],{"style":21,"src":137188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[303,137190,137191],{"className":469,"code":137140,"language":471,"meta":308,"style":308},[119,137192,137193,137199,137211],{"__ignoreMap":308},[312,137194,137195,137197],{"class":314,"line":315},[312,137196,55605],{"class":328},[312,137198,483],{"class":324},[312,137200,137201,137203,137205,137207,137209],{"class":314,"line":171},[312,137202,72571],{"class":488},[312,137204,492],{"class":324},[312,137206,56521],{"class":488},[312,137208,132171],{"class":324},[312,137210,137161],{"class":318},[312,137212,137213],{"class":314,"line":274},[312,137214,515],{"class":324},[19,137216],{"style":21,"src":137217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[23796,137219,137221],{"id":137220},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[24,137223,137224],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[19,137226],{"style":21,"src":137227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[24,137229,137230,137231,137234],{},"此时可以给图片、表单这些行内块元素的 ",[27,137232,137233],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[23796,137236,137238],{"id":137237},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[24,137240,137241],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[24,137243,16434],{},[303,137245,137247],{"className":469,"code":137246,"language":471,"meta":308,"style":308},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[119,137248,137249,137254,137260,137272],{"__ignoreMap":308},[312,137250,137251],{"class":314,"line":315},[312,137252,137253],{"class":318},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[312,137255,137256,137258],{"class":314,"line":171},[312,137257,19],{"class":328},[312,137259,483],{"class":324},[312,137261,137262,137265,137267,137270],{"class":314,"line":274},[312,137263,137264],{"class":488},"  vertical-align",[312,137266,492],{"class":324},[312,137268,137269],{"class":488},"middle",[312,137271,498],{"class":324},[312,137273,137274],{"class":314,"line":298},[312,137275,515],{"class":324},[19,137277],{"style":21,"src":137278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[24,137280,137281],{},"主要解决方法有两种：",[140,137283,137284],{},[143,137285,137286,137289,137290,137293],{},[27,137287,137288],{},"给图片"," 添加 ",[27,137291,137292],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[24,137295,137296,137297],{},"2.把图片转换为块级元素 ",[27,137298,137299],{},"display: block",[24,137301,137302],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[24,137304,137305],{},"img {",[24,137307,137308],{},"vertical-align:middle;",[24,137310,2888],{},[69,137312,137314],{"id":137313},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[24,137316,137317],{},"效果：",[19,137319],{"style":21,"src":137320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[24,137322,137323],{},"单行文本溢出显示省略号--必须满足三个条件：",[303,137325,137327],{"className":469,"code":137326,"language":471,"meta":308,"style":308},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[119,137328,137329,137334,137340,137350,137355,137365],{"__ignoreMap":308},[312,137330,137331],{"class":314,"line":315},[312,137332,137333],{"class":318},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[312,137335,137336,137338],{"class":314,"line":171},[312,137337,19],{"class":328},[312,137339,483],{"class":324},[312,137341,137342,137344,137346,137348],{"class":314,"line":274},[312,137343,137264],{"class":488},[312,137345,492],{"class":324},[312,137347,137269],{"class":488},[312,137349,498],{"class":324},[312,137351,137352],{"class":314,"line":298},[312,137353,137354],{"class":318},"  \u002F* 或 *\u002F\n",[312,137356,137357,137359,137361,137363],{"class":314,"line":974},[312,137358,503],{"class":488},[312,137360,492],{"class":324},[312,137362,508],{"class":488},[312,137364,498],{"class":324},[312,137366,137367],{"class":314,"line":980},[312,137368,515],{"class":324},[69,137370,137372],{"id":137371},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[24,137374,137317],{},[19,137376],{"style":21,"src":137377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[24,137379,137380,137381,137384],{},"多行文本溢出显示省略号， ",[27,137382,137383],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[303,137386,137387],{"className":469,"code":137326,"language":471,"meta":308,"style":308},[119,137388,137389,137393,137399,137409,137413,137423],{"__ignoreMap":308},[312,137390,137391],{"class":314,"line":315},[312,137392,137333],{"class":318},[312,137394,137395,137397],{"class":314,"line":171},[312,137396,19],{"class":328},[312,137398,483],{"class":324},[312,137400,137401,137403,137405,137407],{"class":314,"line":274},[312,137402,137264],{"class":488},[312,137404,492],{"class":324},[312,137406,137269],{"class":488},[312,137408,498],{"class":324},[312,137410,137411],{"class":314,"line":298},[312,137412,137354],{"class":318},[312,137414,137415,137417,137419,137421],{"class":314,"line":974},[312,137416,503],{"class":488},[312,137418,492],{"class":324},[312,137420,508],{"class":488},[312,137422,498],{"class":324},[312,137424,137425],{"class":314,"line":980},[312,137426,515],{"class":324},[24,137428,137429],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,137431,137433],{"id":137432},"_133-常见布局技巧","13.3 常见布局技巧",[24,137435,137436],{},[27,137437,137438],{},"巧妙利用一个技术更快更好的布局：",[140,137440,137441,137444,137447,137450],{},[143,137442,137443],{},"margin负值的运用",[143,137445,137446],{},"文字围绕浮动元素",[143,137448,137449],{},"行内块的巧妙运用",[143,137451,137452],{},"CSS三角强化",[69,137454,137456],{"id":137455},"_1331-margin负值的运用","13.3.1 margin负值的运用",[24,137458,137459],{},"应用场景：",[19,137461],{"style":21,"src":137462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[19,137464],{"style":21,"src":137465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[24,137467,137468],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[24,137470,137471],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[303,137473,137474],{"className":469,"code":131674,"language":471,"meta":308,"style":308},[119,137475,137476,137480,137486,137502],{"__ignoreMap":308},[312,137477,137478],{"class":314,"line":315},[312,137479,131681],{"class":318},[312,137481,137482,137484],{"class":314,"line":171},[312,137483,329],{"class":328},[312,137485,483],{"class":324},[312,137487,137488,137490,137492,137494,137496,137498,137500],{"class":314,"line":274},[312,137489,1428],{"class":488},[312,137491,492],{"class":324},[312,137493,1433],{"class":488},[312,137495,1437],{"class":1436},[312,137497,1440],{"class":488},[312,137499,1443],{"class":488},[312,137501,498],{"class":324},[312,137503,137504],{"class":314,"line":298},[312,137505,515],{"class":324},[19,137507],{"style":21,"src":137508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[24,137510,137511],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[303,137513,137515],{"className":469,"code":137514,"language":471,"meta":308,"style":308},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[119,137516,137517,137522,137528,137538,137550,137562],{"__ignoreMap":308},[312,137518,137519],{"class":314,"line":315},[312,137520,137521],{"class":318},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[312,137523,137524,137526],{"class":314,"line":171},[312,137525,1362],{"class":332},[312,137527,483],{"class":324},[312,137529,137530,137532,137534,137536],{"class":314,"line":274},[312,137531,134083],{"class":488},[312,137533,492],{"class":324},[312,137535,969],{"class":488},[312,137537,498],{"class":324},[312,137539,137540,137542,137544,137546,137548],{"class":314,"line":298},[312,137541,134097],{"class":488},[312,137543,492],{"class":324},[312,137545,2391],{"class":488},[312,137547,1437],{"class":1436},[312,137549,498],{"class":324},[312,137551,137552,137554,137556,137558,137560],{"class":314,"line":974},[312,137553,134114],{"class":488},[312,137555,492],{"class":324},[312,137557,1546],{"class":488},[312,137559,1437],{"class":1436},[312,137561,498],{"class":324},[312,137563,137564],{"class":314,"line":980},[312,137565,515],{"class":324},[24,137567,137568],{},"加上上述代码会发现：",[19,137570],{"style":21,"src":137571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[24,137573,137574],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[24,137576,137577],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[303,137579,137580],{"className":469,"code":137514,"language":471,"meta":308,"style":308},[119,137581,137582,137586,137592,137602,137614,137626],{"__ignoreMap":308},[312,137583,137584],{"class":314,"line":315},[312,137585,137521],{"class":318},[312,137587,137588,137590],{"class":314,"line":171},[312,137589,1362],{"class":332},[312,137591,483],{"class":324},[312,137593,137594,137596,137598,137600],{"class":314,"line":274},[312,137595,134083],{"class":488},[312,137597,492],{"class":324},[312,137599,969],{"class":488},[312,137601,498],{"class":324},[312,137603,137604,137606,137608,137610,137612],{"class":314,"line":298},[312,137605,134097],{"class":488},[312,137607,492],{"class":324},[312,137609,2391],{"class":488},[312,137611,1437],{"class":1436},[312,137613,498],{"class":324},[312,137615,137616,137618,137620,137622,137624],{"class":314,"line":974},[312,137617,134114],{"class":488},[312,137619,492],{"class":324},[312,137621,1546],{"class":488},[312,137623,1437],{"class":1436},[312,137625,498],{"class":324},[312,137627,137628],{"class":314,"line":980},[312,137629,515],{"class":324},[24,137631,137632],{},"解决方式2：",[24,137634,137635],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[303,137637,137639],{"className":469,"code":137638,"language":471,"meta":308,"style":308},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[119,137640,137641,137647,137657,137669,137681],{"__ignoreMap":308},[312,137642,137643,137645],{"class":314,"line":315},[312,137644,329],{"class":328},[312,137646,483],{"class":324},[312,137648,137649,137651,137653,137655],{"class":314,"line":171},[312,137650,134083],{"class":488},[312,137652,492],{"class":324},[312,137654,969],{"class":488},[312,137656,498],{"class":324},[312,137658,137659,137661,137663,137665,137667],{"class":314,"line":274},[312,137660,134097],{"class":488},[312,137662,492],{"class":324},[312,137664,2391],{"class":488},[312,137666,1437],{"class":1436},[312,137668,498],{"class":324},[312,137670,137671,137673,137675,137677,137679],{"class":314,"line":298},[312,137672,134114],{"class":488},[312,137674,492],{"class":324},[312,137676,1546],{"class":488},[312,137678,1437],{"class":1436},[312,137680,498],{"class":324},[312,137682,137683],{"class":314,"line":974},[312,137684,515],{"class":324},[69,137686,137688],{"id":137687},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[24,137690,137459],{},[19,137692],{"style":21,"src":137693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[24,137695,137696],{},"实现结构图：",[19,137698],{"style":21,"src":137699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[24,137701,137702],{},"巧妙运用浮动元素不会压住文字的特性",[24,137704,137705],{},"代码显示：",[303,137707,137709],{"className":469,"code":137708,"language":471,"meta":308,"style":308},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[119,137710,137711,137717,137727,137731,137736,137740,137746,137760],{"__ignoreMap":308},[312,137712,137713,137715],{"class":314,"line":315},[312,137714,1362],{"class":332},[312,137716,483],{"class":324},[312,137718,137719,137721,137723,137725],{"class":314,"line":171},[312,137720,1369],{"class":488},[312,137722,492],{"class":324},[312,137724,1374],{"class":488},[312,137726,498],{"class":324},[312,137728,137729],{"class":314,"line":274},[312,137730,515],{"class":324},[312,137732,137733],{"class":314,"line":298},[312,137734,137735],{"class":324},"```Css\n",[312,137737,137738],{"class":314,"line":974},[312,137739,132152],{"class":318},[312,137741,137742,137744],{"class":314,"line":980},[312,137743,1362],{"class":332},[312,137745,483],{"class":324},[312,137747,137748,137750,137752,137754,137756,137758],{"class":314,"line":997},[312,137749,853],{"class":488},[312,137751,492],{"class":324},[312,137753,858],{"class":488},[312,137755,861],{"class":488},[312,137757,132171],{"class":324},[312,137759,132174],{"class":318},[312,137761,137762],{"class":314,"line":1003},[312,137763,515],{"class":324},[24,137765,137766],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[303,137768,137771],{"className":137769,"code":137770,"language":6992},[6990],"\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",[119,137772,137770],{"__ignoreMap":308},[19,137774],{"style":21,"src":137775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[24,137777,137778],{},"最终展示结果：",[303,137780,137781],{"className":469,"code":132145,"language":471,"meta":308,"style":308},[119,137782,137783,137787,137793,137807],{"__ignoreMap":308},[312,137784,137785],{"class":314,"line":315},[312,137786,132152],{"class":318},[312,137788,137789,137791],{"class":314,"line":171},[312,137790,1362],{"class":332},[312,137792,483],{"class":324},[312,137794,137795,137797,137799,137801,137803,137805],{"class":314,"line":274},[312,137796,853],{"class":488},[312,137798,492],{"class":324},[312,137800,858],{"class":488},[312,137802,861],{"class":488},[312,137804,132171],{"class":324},[312,137806,132174],{"class":318},[312,137808,137809],{"class":314,"line":298},[312,137810,515],{"class":324},[19,137812],{"style":21,"src":137813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137815,137817],{"id":137816},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[69,137819,137821],{"id":137820},"_1341-原理","13.4.1 原理",[19,137823],{"style":21,"src":137824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[303,137826,137827],{"className":469,"code":132145,"language":471,"meta":308,"style":308},[119,137828,137829,137833,137839,137853],{"__ignoreMap":308},[312,137830,137831],{"class":314,"line":315},[312,137832,132152],{"class":318},[312,137834,137835,137837],{"class":314,"line":171},[312,137836,1362],{"class":332},[312,137838,483],{"class":324},[312,137840,137841,137843,137845,137847,137849,137851],{"class":314,"line":274},[312,137842,853],{"class":488},[312,137844,492],{"class":324},[312,137846,858],{"class":488},[312,137848,861],{"class":488},[312,137850,132171],{"class":324},[312,137852,132174],{"class":318},[312,137854,137855],{"class":314,"line":298},[312,137856,515],{"class":324},[69,137858,137860],{"id":137859},"_1342-实例","13.4.2 实例",[19,137862],{"style":21,"src":137863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[303,137865,137866],{"className":469,"code":132769,"language":471,"meta":308,"style":308},[119,137867,137868,137874,137884,137888,137894,137904],{"__ignoreMap":308},[312,137869,137870,137872],{"class":314,"line":315},[312,137871,132776],{"class":332},[312,137873,483],{"class":324},[312,137875,137876,137878,137880,137882],{"class":314,"line":171},[312,137877,1369],{"class":488},[312,137879,492],{"class":324},[312,137881,1374],{"class":488},[312,137883,498],{"class":324},[312,137885,137886],{"class":314,"line":274},[312,137887,515],{"class":324},[312,137889,137890,137892],{"class":314,"line":298},[312,137891,132797],{"class":332},[312,137893,483],{"class":324},[312,137895,137896,137898,137900,137902],{"class":314,"line":974},[312,137897,1369],{"class":488},[312,137899,492],{"class":324},[312,137901,74294],{"class":488},[312,137903,498],{"class":324},[312,137905,137906],{"class":314,"line":980},[312,137907,515],{"class":324},[14,137909,137911],{"id":137910},"_135-css的初始化","13.5 css的初始化",[24,137913,137914],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[24,137916,137917],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[24,137919,137920],{},"每个网页都必须首先进行 CSS初始化。",[24,137922,137923],{},"这里我们以 京东CSS初始化代码为例。",[24,137925,137926],{},"在网页右键查看网页源代码",[24,137928,137929],{},"找到css的link引入语句",[24,137931,137932],{},"然后ctrl+f 输入body",[24,137934,78998],{},[19,137936],{"style":21,"src":137937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[24,137939,79021],{},[19,137941],{"style":21,"src":137942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[24,137944,137945],{},"③打开了网页上传压缩的代码",[19,137947],{"style":21,"src":137948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[24,137950,137951],{},"④从body前可以查看这个网页的初始化代码",[24,137953,137954],{},[27,137955,137956],{},"Unicode编码字体：",[24,137958,137959],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[24,137961,84978],{},[24,137963,137964],{},"黑体 \\9ED1\\4F53",[24,137966,137967],{},"宋体 \\5B8B\\4F53",[24,137969,137970],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1856,137972,137973],{},"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":308,"searchDepth":171,"depth":171,"links":137975},[137976,137977,137984,137988,137992],{"id":136773,"depth":171,"text":136774},{"id":136895,"depth":171,"text":136896,"children":137978},[137979,137980,137981,137982,137983],{"id":136899,"depth":274,"text":136900},{"id":137052,"depth":274,"text":137053},{"id":137171,"depth":274,"text":137172},{"id":137313,"depth":274,"text":137314},{"id":137371,"depth":274,"text":137372},{"id":137432,"depth":171,"text":137433,"children":137985},[137986,137987],{"id":137455,"depth":274,"text":137456},{"id":137687,"depth":274,"text":137688},{"id":137816,"depth":171,"text":137817,"children":137989},[137990,137991],{"id":137820,"depth":274,"text":137821},{"id":137859,"depth":274,"text":137860},{"id":137910,"depth":171,"text":137911},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136765,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137999,"title":138000,"body":138001,"description":1878,"extension":1879,"meta":139685,"navigation":1881,"path":139686,"seo":139687,"stem":139688,"__hash__":139689},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":138002,"toc":139674},[138003,138006,138010,138014,138017,138024,138027,138030,138068,138071,138073,138087,138091,138100,138104,138109,138112,138115,138118,138153,138158,138161,138191,138194,138199,138202,138205,138235,138238,138292,138295,138299,138304,138316,138319,138323,138353,138356,138361,138364,138394,138397,138401,138418,138422,138426,138429,138462,138465,138469,138472,138475,138478,138481,138484,138595,138598,138601,138604,138706,138709,138713,138717,138721,138724,138764,138767,138769,138785,138789,138792,138797,138878,138881,138884,139010,139015,139018,139026,139029,139034,139119,139122,139126,139129,139132,139136,139156,139161,139245,139248,139253,139256,139259,139335,139338,139341,139344,139347,139350,139355,139358,139361,139433,139436,139441,139444,139541,139544,139550,139553,139556,139559,139562,139565,139568,139571,139574,139578,139583,139586,139619,139624,139627,139668,139671],[10,138004,138000],{"id":138005},"_14-html5与css3新特性",[14,138007,138009],{"id":138008},"_141-html5的新特性","14.1 HTML5的新特性",[69,138011,138013],{"id":138012},"_1411-基本标签","14.1.1 基本标签",[24,138015,138016],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[24,138018,138019,138020,138023],{},"这些新特性都有兼容性问题，基本是 ",[27,138021,138022],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[24,138025,138026],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[24,138028,138029],{},"现在使用的是新特性：",[243,138031,138032,138038,138044,138050,138056,138062],{},[143,138033,138034,138037],{},[119,138035,138036],{},"\u003Cheader>"," 头部标签",[143,138039,138040,138043],{},[119,138041,138042],{},"\u003Cnav>"," 导航标签",[143,138045,138046,138049],{},[119,138047,138048],{},"\u003Carticle>"," 内容标签",[143,138051,138052,138055],{},[119,138053,138054],{},"\u003Csection>"," 定义文档某个区域",[143,138057,138058,138061],{},[119,138059,138060],{},"\u003Caside>"," 侧边栏标签",[143,138063,138064,138067],{},[119,138065,138066],{},"\u003Cfooter>"," 尾部标签",[19,138069],{"style":21,"src":138070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[24,138072,1982],{},[243,138074,138075,138078,138081,138084],{},[143,138076,138077],{},"这种语义化标准主要是针对搜索引擎的",[143,138079,138080],{},"这些标签页面中可以经常使用",[143,138082,138083],{},"在IE9中，需要把这些元素转换为块级元素",[143,138085,138086],{},"移动端更喜欢使用这些标签",[69,138088,138090],{"id":138089},"_1412-多媒体标签","14.1.2 多媒体标签",[24,138092,138093,138094,138096,138097,138099],{},"音频 ",[27,138095,29970],{}," 和视频 ",[27,138098,29979],{}," 两个标签",[23796,138101,138103],{"id":138102},"_14121-视频标签-video","14.1.2.1 视频标签- video",[140,138105,138106],{},[143,138107,138108],{},"支持格式：",[19,138110],{"style":21,"src":138111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[24,138113,138114],{},"尽量使用MP4，兼容性好",[24,138116,138117],{},"用MP4就可以",[303,138119,138121],{"className":305,"code":138120,"language":307,"meta":308,"style":308},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[119,138122,138123],{"__ignoreMap":308},[312,138124,138125,138127,138129,138131,138133,138136,138138,138141,138144,138147,138149,138151],{"class":314,"line":315},[312,138126,325],{"class":324},[312,138128,29979],{"class":328},[312,138130,57021],{"class":332},[312,138132,336],{"class":324},[312,138134,138135],{"class":339},"\"movie.mp4\"",[312,138137,94193],{"class":332},[312,138139,138140],{"class":332}," autoplay",[312,138142,138143],{"class":332}," muted",[312,138145,138146],{"class":332}," loop",[312,138148,57096],{"class":324},[312,138150,29979],{"class":328},[312,138152,343],{"class":324},[140,138154,138155],{"start":171},[143,138156,138157],{},"兼容写法",[24,138159,138160],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[303,138162,138163],{"className":305,"code":138120,"language":307,"meta":308,"style":308},[119,138164,138165],{"__ignoreMap":308},[312,138166,138167,138169,138171,138173,138175,138177,138179,138181,138183,138185,138187,138189],{"class":314,"line":315},[312,138168,325],{"class":324},[312,138170,29979],{"class":328},[312,138172,57021],{"class":332},[312,138174,336],{"class":324},[312,138176,138135],{"class":339},[312,138178,94193],{"class":332},[312,138180,138140],{"class":332},[312,138182,138143],{"class":332},[312,138184,138146],{"class":332},[312,138186,57096],{"class":324},[312,138188,29979],{"class":328},[312,138190,343],{"class":324},[24,138192,138193],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[140,138195,138196],{"start":274},[143,138197,138198],{},"video常用属性",[19,138200],{"style":21,"src":138201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[24,138203,138204],{},"poster属性后面是跟的等待加载图片的地址",[303,138206,138207],{"className":305,"code":135779,"language":307,"meta":308,"style":308},[119,138208,138209],{"__ignoreMap":308},[312,138210,138211,138213,138215,138217,138219,138221,138223,138225,138227,138229,138231,138233],{"class":314,"line":315},[312,138212,325],{"class":324},[312,138214,19],{"class":328},[312,138216,57021],{"class":332},[312,138218,336],{"class":324},[312,138220,135794],{"class":339},[312,138222,57029],{"class":332},[312,138224,336],{"class":324},[312,138226,135801],{"class":339},[312,138228,135804],{"class":332},[312,138230,336],{"class":324},[312,138232,135809],{"class":339},[312,138234,343],{"class":324},[24,138236,138237],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[303,138239,138241],{"className":469,"code":138240,"language":471,"meta":308,"style":308},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[119,138242,138243,138248,138254,138278,138283,138288],{"__ignoreMap":308},[312,138244,138245],{"class":314,"line":315},[312,138246,138247],{"class":318},"\u002F* 2D 位移 *\u002F\n",[312,138249,138250,138252],{"class":314,"line":171},[312,138251,329],{"class":328},[312,138253,483],{"class":324},[312,138255,138256,138259,138261,138264,138266,138268,138270,138272,138274,138276],{"class":314,"line":274},[312,138257,138258],{"class":488},"  transform",[312,138260,492],{"class":324},[312,138262,138263],{"class":488},"translate",[312,138265,1576],{"class":324},[312,138267,2256],{"class":488},[312,138269,1437],{"class":1436},[312,138271,733],{"class":324},[312,138273,2601],{"class":488},[312,138275,1437],{"class":1436},[312,138277,4524],{"class":324},[312,138279,138280],{"class":314,"line":298},[312,138281,138282],{"class":318},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[312,138284,138285],{"class":314,"line":974},[312,138286,138287],{"class":318},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[312,138289,138290],{"class":314,"line":980},[312,138291,515],{"class":324},[24,138293,138294],{},"muted:自动静音属性",[23796,138296,138298],{"id":138297},"_14122-音频标签audio","14.1.2.2 音频标签audio",[140,138300,138301],{},[143,138302,138303],{},"基本使用",[24,138305,138306,138307,138312,138313],{},"当前 ",[27,138308,138309],{},[119,138310,138311],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[27,138314,138315],{},"mp3格式",[19,138317],{"style":21,"src":138318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[140,138320,138321],{"start":171},[143,138322,138157],{},[303,138324,138325],{"className":305,"code":138120,"language":307,"meta":308,"style":308},[119,138326,138327],{"__ignoreMap":308},[312,138328,138329,138331,138333,138335,138337,138339,138341,138343,138345,138347,138349,138351],{"class":314,"line":315},[312,138330,325],{"class":324},[312,138332,29979],{"class":328},[312,138334,57021],{"class":332},[312,138336,336],{"class":324},[312,138338,138135],{"class":339},[312,138340,94193],{"class":332},[312,138342,138140],{"class":332},[312,138344,138143],{"class":332},[312,138346,138146],{"class":332},[312,138348,57096],{"class":324},[312,138350,29979],{"class":328},[312,138352,343],{"class":324},[24,138354,138355],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[140,138357,138358],{"start":274},[143,138359,138360],{},"常用属性",[19,138362],{"style":21,"src":138363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[303,138365,138366],{"className":305,"code":138120,"language":307,"meta":308,"style":308},[119,138367,138368],{"__ignoreMap":308},[312,138369,138370,138372,138374,138376,138378,138380,138382,138384,138386,138388,138390,138392],{"class":314,"line":315},[312,138371,325],{"class":324},[312,138373,29979],{"class":328},[312,138375,57021],{"class":332},[312,138377,336],{"class":324},[312,138379,138135],{"class":339},[312,138381,94193],{"class":332},[312,138383,138140],{"class":332},[312,138385,138143],{"class":332},[312,138387,138146],{"class":332},[312,138389,57096],{"class":324},[312,138391,29979],{"class":328},[312,138393,343],{"class":324},[24,138395,138396],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[23796,138398,138400],{"id":138399},"_14123-总结","14.1.2.3 总结",[243,138402,138403,138406,138409,138412,138415],{},[143,138404,138405],{},"音频标签和视频标签使用方式基本一致",[143,138407,138408],{},"浏览器支持情况不同",[143,138410,138411],{},"谷歌浏览器把音频和视频自动播放禁止了",[143,138413,138414],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[143,138416,138417],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[69,138419,138421],{"id":138420},"_1413-表单元素","14.1.3 表单元素",[23796,138423,138425],{"id":138424},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[19,138427],{"style":21,"src":138428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[303,138430,138432],{"className":305,"code":138431,"language":307,"meta":308,"style":308},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[119,138433,138434],{"__ignoreMap":308},[312,138435,138436,138438,138440,138442,138444,138446,138448,138450,138453,138455,138457,138460],{"class":314,"line":315},[312,138437,325],{"class":324},[312,138439,55605],{"class":328},[312,138441,55608],{"class":332},[312,138443,336],{"class":324},[312,138445,64477],{"class":339},[312,138447,16721],{"class":332},[312,138449,336],{"class":324},[312,138451,138452],{"class":339},"\"username\"",[312,138454,62801],{"class":332},[312,138456,336],{"class":324},[312,138458,138459],{"class":339},"\"请输入用户名\"",[312,138461,343],{"class":324},[19,138463],{"style":21,"src":138464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[23796,138466,138468],{"id":138467},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[19,138470],{"style":21,"src":138471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[24,138473,138474],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[24,138476,138477],{},"快捷操作：",[19,138479],{"style":21,"src":138480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[24,138482,138483],{},"例子1：",[303,138485,138487],{"className":305,"code":138486,"language":307,"meta":308,"style":308},"\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",[119,138488,138489,138512,138539,138568,138587],{"__ignoreMap":308},[312,138490,138491,138493,138495,138497,138499,138502,138505,138507,138510],{"class":314,"line":315},[312,138492,325],{"class":324},[312,138494,68403],{"class":328},[312,138496,68406],{"class":332},[312,138498,336],{"class":324},[312,138500,138501],{"class":339},"\"\u002Fsubmit\"",[312,138503,138504],{"class":332}," method",[312,138506,336],{"class":324},[312,138508,138509],{"class":339},"\"post\"",[312,138511,343],{"class":324},[312,138513,138514,138516,138518,138520,138522,138524,138526,138528,138530,138532,138534,138537],{"class":314,"line":171},[312,138515,53930],{"class":324},[312,138517,55605],{"class":328},[312,138519,55608],{"class":332},[312,138521,336],{"class":324},[312,138523,64477],{"class":339},[312,138525,16721],{"class":332},[312,138527,336],{"class":324},[312,138529,138452],{"class":339},[312,138531,62801],{"class":332},[312,138533,336],{"class":324},[312,138535,138536],{"class":339},"\"用户名\"",[312,138538,343],{"class":324},[312,138540,138541,138543,138545,138547,138549,138552,138554,138556,138559,138561,138563,138566],{"class":314,"line":274},[312,138542,53930],{"class":324},[312,138544,55605],{"class":328},[312,138546,55608],{"class":332},[312,138548,336],{"class":324},[312,138550,138551],{"class":339},"\"password\"",[312,138553,16721],{"class":332},[312,138555,336],{"class":324},[312,138557,138558],{"class":339},"\"pwd\"",[312,138560,62801],{"class":332},[312,138562,336],{"class":324},[312,138564,138565],{"class":339},"\"密码\"",[312,138567,343],{"class":324},[312,138569,138570,138572,138574,138576,138578,138580,138583,138585],{"class":314,"line":298},[312,138571,53930],{"class":324},[312,138573,55671],{"class":328},[312,138575,55608],{"class":332},[312,138577,336],{"class":324},[312,138579,68426],{"class":339},[312,138581,138582],{"class":324},">提交\u003C\u002F",[312,138584,55671],{"class":328},[312,138586,343],{"class":324},[312,138588,138589,138591,138593],{"class":314,"line":974},[312,138590,353],{"class":324},[312,138592,68403],{"class":328},[312,138594,343],{"class":324},[19,138596],{"style":21,"src":138597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[24,138599,138600],{},"value是表单域的内容",[24,138602,138603],{},"例子2：",[303,138605,138606],{"className":305,"code":138486,"language":307,"meta":308,"style":308},[119,138607,138608,138628,138654,138680,138698],{"__ignoreMap":308},[312,138609,138610,138612,138614,138616,138618,138620,138622,138624,138626],{"class":314,"line":315},[312,138611,325],{"class":324},[312,138613,68403],{"class":328},[312,138615,68406],{"class":332},[312,138617,336],{"class":324},[312,138619,138501],{"class":339},[312,138621,138504],{"class":332},[312,138623,336],{"class":324},[312,138625,138509],{"class":339},[312,138627,343],{"class":324},[312,138629,138630,138632,138634,138636,138638,138640,138642,138644,138646,138648,138650,138652],{"class":314,"line":171},[312,138631,53930],{"class":324},[312,138633,55605],{"class":328},[312,138635,55608],{"class":332},[312,138637,336],{"class":324},[312,138639,64477],{"class":339},[312,138641,16721],{"class":332},[312,138643,336],{"class":324},[312,138645,138452],{"class":339},[312,138647,62801],{"class":332},[312,138649,336],{"class":324},[312,138651,138536],{"class":339},[312,138653,343],{"class":324},[312,138655,138656,138658,138660,138662,138664,138666,138668,138670,138672,138674,138676,138678],{"class":314,"line":274},[312,138657,53930],{"class":324},[312,138659,55605],{"class":328},[312,138661,55608],{"class":332},[312,138663,336],{"class":324},[312,138665,138551],{"class":339},[312,138667,16721],{"class":332},[312,138669,336],{"class":324},[312,138671,138558],{"class":339},[312,138673,62801],{"class":332},[312,138675,336],{"class":324},[312,138677,138565],{"class":339},[312,138679,343],{"class":324},[312,138681,138682,138684,138686,138688,138690,138692,138694,138696],{"class":314,"line":298},[312,138683,53930],{"class":324},[312,138685,55671],{"class":328},[312,138687,55608],{"class":332},[312,138689,336],{"class":324},[312,138691,68426],{"class":339},[312,138693,138582],{"class":324},[312,138695,55671],{"class":328},[312,138697,343],{"class":324},[312,138699,138700,138702,138704],{"class":314,"line":974},[312,138701,353],{"class":324},[312,138703,68403],{"class":328},[312,138705,343],{"class":324},[19,138707],{"style":21,"src":138708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,138710,138712],{"id":138711},"_142-css新特性","14.2 CSS新特性",[69,138714,138716],{"id":138715},"_1421-新增选择器","14.2.1 新增选择器",[23796,138718,138720],{"id":138719},"_14211-属性选择器","14.2.1.1 属性选择器",[19,138722],{"style":21,"src":138723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[303,138725,138727],{"className":469,"code":138726,"language":471,"meta":308,"style":308},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[119,138728,138729,138744,138760],{"__ignoreMap":308},[312,138730,138731,138733,138735,138737,138739,138741],{"class":314,"line":315},[312,138732,55605],{"class":328},[312,138734,2834],{"class":324},[312,138736,104876],{"class":332},[312,138738,336],{"class":1436},[312,138740,64477],{"class":339},[312,138742,138743],{"class":324},"] {\n",[312,138745,138746,138748,138750,138752,138754,138756,138758],{"class":314,"line":171},[312,138747,1428],{"class":488},[312,138749,492],{"class":324},[312,138751,1433],{"class":488},[312,138753,1437],{"class":1436},[312,138755,1440],{"class":488},[312,138757,131889],{"class":488},[312,138759,498],{"class":324},[312,138761,138762],{"class":314,"line":274},[312,138763,515],{"class":324},[19,138765],{"style":21,"src":138766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[24,138768,1982],{},[243,138770,138771,138774,138777,138780],{},[143,138772,138773],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[143,138775,138776],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[143,138778,138779],{},"属性选择器也可以选择出来自定义的属性",[143,138781,138782,138784],{},[27,138783,10828],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[23796,138786,138788],{"id":138787},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[19,138790],{"style":21,"src":138791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[140,138793,138794],{},[143,138795,138796],{},"fist-child",[303,138798,138800],{"className":469,"code":138799,"language":471,"meta":308,"style":308},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[119,138801,138802,138807,138822,138842,138860],{"__ignoreMap":308},[312,138803,138804],{"class":314,"line":315},[312,138805,138806],{"class":318},"\u002F* 属性选择器 *\u002F\n",[312,138808,138809,138811,138813,138815,138817,138819],{"class":314,"line":171},[312,138810,55605],{"class":328},[312,138812,2834],{"class":324},[312,138814,104876],{"class":332},[312,138816,336],{"class":1436},[312,138818,64477],{"class":339},[312,138820,138821],{"class":324},"] { }\n",[312,138823,138824,138826,138828,138830,138833,138836,138839],{"class":314,"line":274},[312,138825,55605],{"class":328},[312,138827,2834],{"class":324},[312,138829,16495],{"class":332},[312,138831,138832],{"class":1436},"^=",[312,138834,138835],{"class":339},"\"icon\"",[312,138837,138838],{"class":324},"] { }  ",[312,138840,138841],{"class":318},"\u002F* 以 icon 开头 *\u002F\n",[312,138843,138844,138846,138848,138850,138853,138855,138857],{"class":314,"line":298},[312,138845,55605],{"class":328},[312,138847,2834],{"class":324},[312,138849,16495],{"class":332},[312,138851,138852],{"class":1436},"$=",[312,138854,138835],{"class":339},[312,138856,138838],{"class":324},[312,138858,138859],{"class":318},"\u002F* 以 icon 结尾 *\u002F\n",[312,138861,138862,138864,138866,138868,138871,138873,138875],{"class":314,"line":974},[312,138863,55605],{"class":328},[312,138865,2834],{"class":324},[312,138867,16495],{"class":332},[312,138869,138870],{"class":1436},"*=",[312,138872,138835],{"class":339},[312,138874,138838],{"class":324},[312,138876,138877],{"class":318},"\u002F* 包含 icon *\u002F\n",[24,138879,138880],{},"ul的第一个儿子文本为红色",[24,138882,138883],{},"一定要在冒号前加空格，不然就是选中所有的了",[303,138885,138887],{"className":469,"code":138886,"language":471,"meta":308,"style":308},".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",[119,138888,138889,138895,138905,138909,138913,138918,138931,138944,138960,138977,138994],{"__ignoreMap":308},[312,138890,138891,138893],{"class":314,"line":315},[312,138892,128607],{"class":332},[312,138894,483],{"class":324},[312,138896,138897,138899,138901,138903],{"class":314,"line":171},[312,138898,72677],{"class":488},[312,138900,492],{"class":324},[312,138902,59203],{"class":488},[312,138904,498],{"class":324},[312,138906,138907],{"class":314,"line":274},[312,138908,515],{"class":324},[312,138910,138911],{"class":314,"line":298},[312,138912,137735],{"class":324},[312,138914,138915],{"class":314,"line":974},[312,138916,138917],{"class":318},"\u002F* 结构伪类选择器 *\u002F\n",[312,138919,138920,138922,138925,138928],{"class":314,"line":980},[312,138921,143],{"class":328},[312,138923,138924],{"class":332},":first-child",[312,138926,138927],{"class":324}," { }           ",[312,138929,138930],{"class":318},"\u002F* 第一个 *\u002F\n",[312,138932,138933,138935,138938,138941],{"class":314,"line":997},[312,138934,143],{"class":328},[312,138936,138937],{"class":332},":last-child",[312,138939,138940],{"class":324}," { }            ",[312,138942,138943],{"class":318},"\u002F* 最后一个 *\u002F\n",[312,138945,138946,138948,138950,138952,138954,138957],{"class":314,"line":1003},[312,138947,143],{"class":328},[312,138949,131225],{"class":332},[312,138951,1576],{"class":324},[312,138953,2027],{"class":488},[312,138955,138956],{"class":324},") { }          ",[312,138958,138959],{"class":318},"\u002F* 第2个 *\u002F\n",[312,138961,138962,138964,138966,138968,138971,138974],{"class":314,"line":1020},[312,138963,143],{"class":328},[312,138965,131225],{"class":332},[312,138967,1576],{"class":324},[312,138969,138970],{"class":488},"2n",[312,138972,138973],{"class":324},") { }         ",[312,138975,138976],{"class":318},"\u002F* 偶数 *\u002F\n",[312,138978,138979,138981,138983,138985,138988,138991],{"class":314,"line":1026},[312,138980,143],{"class":328},[312,138982,131225],{"class":332},[312,138984,1576],{"class":324},[312,138986,138987],{"class":488},"2n+1",[312,138989,138990],{"class":324},") { }       ",[312,138992,138993],{"class":318},"\u002F* 奇数 *\u002F\n",[312,138995,138996,138998,139000,139002,139005,139007],{"class":314,"line":3418},[312,138997,143],{"class":328},[312,138999,131225],{"class":332},[312,139001,1576],{"class":324},[312,139003,139004],{"class":488},"-n+3",[312,139006,138990],{"class":324},[312,139008,139009],{"class":318},"\u002F* 前3个 *\u002F\n",[329,139011,139014],{"className":139012},[139013],"example","\n  示例内容\n",[24,139016,139017],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[243,139019,139020],{},[143,139021,139022,139025],{},[119,139023,139024],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[24,139027,139028],{},"也就是说它选择的是熊大",[140,139030,139031],{"start":980},[143,139032,139033],{},"权重",[303,139035,139037],{"className":469,"code":139036,"language":471,"meta":308,"style":308},"\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",[119,139038,139039,139043,139053,139063,139077,139091,139105],{"__ignoreMap":308},[312,139040,139041],{"class":314,"line":315},[312,139042,138917],{"class":318},[312,139044,139045,139047,139049,139051],{"class":314,"line":171},[312,139046,143],{"class":328},[312,139048,138924],{"class":332},[312,139050,138927],{"class":324},[312,139052,138930],{"class":318},[312,139054,139055,139057,139059,139061],{"class":314,"line":274},[312,139056,143],{"class":328},[312,139058,138937],{"class":332},[312,139060,138940],{"class":324},[312,139062,138943],{"class":318},[312,139064,139065,139067,139069,139071,139073,139075],{"class":314,"line":298},[312,139066,143],{"class":328},[312,139068,131225],{"class":332},[312,139070,1576],{"class":324},[312,139072,2027],{"class":488},[312,139074,138956],{"class":324},[312,139076,138959],{"class":318},[312,139078,139079,139081,139083,139085,139087,139089],{"class":314,"line":974},[312,139080,143],{"class":328},[312,139082,131225],{"class":332},[312,139084,1576],{"class":324},[312,139086,138970],{"class":488},[312,139088,138973],{"class":324},[312,139090,138976],{"class":318},[312,139092,139093,139095,139097,139099,139101,139103],{"class":314,"line":980},[312,139094,143],{"class":328},[312,139096,131225],{"class":332},[312,139098,1576],{"class":324},[312,139100,138987],{"class":488},[312,139102,138990],{"class":324},[312,139104,138993],{"class":318},[312,139106,139107,139109,139111,139113,139115,139117],{"class":314,"line":997},[312,139108,143],{"class":328},[312,139110,131225],{"class":332},[312,139112,1576],{"class":324},[312,139114,139004],{"class":488},[312,139116,138990],{"class":324},[312,139118,139009],{"class":318},[24,139120,139121],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[23796,139123,139125],{"id":139124},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[24,139127,139128],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[19,139130],{"style":21,"src":139131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[140,139133,139134],{},[143,139135,1982],{},[243,139137,139138,139141,139144,139147,139150,139153],{},[143,139139,139140],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[143,139142,139143],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[143,139145,139146],{},"语法： element::before {}",[143,139148,139149],{},"before 和 after 必须有 content 属性",[143,139151,139152],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[143,139154,139155],{},"伪元素选择器和标签选择器一样，权重为 1",[140,139157,139158],{"start":171},[143,139159,139160],{},"实例",[303,139162,139163],{"className":469,"code":139036,"language":471,"meta":308,"style":308},[119,139164,139165,139169,139179,139189,139203,139217,139231],{"__ignoreMap":308},[312,139166,139167],{"class":314,"line":315},[312,139168,138917],{"class":318},[312,139170,139171,139173,139175,139177],{"class":314,"line":171},[312,139172,143],{"class":328},[312,139174,138924],{"class":332},[312,139176,138927],{"class":324},[312,139178,138930],{"class":318},[312,139180,139181,139183,139185,139187],{"class":314,"line":274},[312,139182,143],{"class":328},[312,139184,138937],{"class":332},[312,139186,138940],{"class":324},[312,139188,138943],{"class":318},[312,139190,139191,139193,139195,139197,139199,139201],{"class":314,"line":298},[312,139192,143],{"class":328},[312,139194,131225],{"class":332},[312,139196,1576],{"class":324},[312,139198,2027],{"class":488},[312,139200,138956],{"class":324},[312,139202,138959],{"class":318},[312,139204,139205,139207,139209,139211,139213,139215],{"class":314,"line":974},[312,139206,143],{"class":328},[312,139208,131225],{"class":332},[312,139210,1576],{"class":324},[312,139212,138970],{"class":488},[312,139214,138973],{"class":324},[312,139216,138976],{"class":318},[312,139218,139219,139221,139223,139225,139227,139229],{"class":314,"line":980},[312,139220,143],{"class":328},[312,139222,131225],{"class":332},[312,139224,1576],{"class":324},[312,139226,138987],{"class":488},[312,139228,138990],{"class":324},[312,139230,138993],{"class":318},[312,139232,139233,139235,139237,139239,139241,139243],{"class":314,"line":997},[312,139234,143],{"class":328},[312,139236,131225],{"class":332},[312,139238,1576],{"class":324},[312,139240,139004],{"class":488},[312,139242,138990],{"class":324},[312,139244,139009],{"class":318},[19,139246],{"style":21,"src":139247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[140,139249,139250],{"start":274},[143,139251,139252],{},"使用场景1",[19,139254],{"style":21,"src":139255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[24,139257,139258],{},"不需要再加盒子来整红色那部分了",[303,139260,139262],{"className":469,"code":139261,"language":471,"meta":308,"style":308},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[119,139263,139264,139269,139277,139287,139297,139301,139310,139321,139331],{"__ignoreMap":308},[312,139265,139266],{"class":314,"line":315},[312,139267,139268],{"class":318},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[312,139270,139271,139273,139275],{"class":314,"line":171},[312,139272,329],{"class":328},[312,139274,480],{"class":332},[312,139276,483],{"class":324},[312,139278,139279,139281,139283,139285],{"class":314,"line":274},[312,139280,489],{"class":488},[312,139282,492],{"class":324},[312,139284,495],{"class":339},[312,139286,498],{"class":324},[312,139288,139289,139291,139293,139295],{"class":314,"line":298},[312,139290,503],{"class":488},[312,139292,492],{"class":324},[312,139294,508],{"class":488},[312,139296,498],{"class":324},[312,139298,139299],{"class":314,"line":974},[312,139300,515],{"class":324},[312,139302,139303,139305,139308],{"class":314,"line":980},[312,139304,329],{"class":328},[312,139306,139307],{"class":332},"::after",[312,139309,483],{"class":324},[312,139311,139312,139314,139316,139319],{"class":314,"line":997},[312,139313,489],{"class":488},[312,139315,492],{"class":324},[312,139317,139318],{"class":339},"\"→\"",[312,139320,498],{"class":324},[312,139322,139323,139325,139327,139329],{"class":314,"line":1003},[312,139324,72677],{"class":488},[312,139326,492],{"class":324},[312,139328,63848],{"class":488},[312,139330,498],{"class":324},[312,139332,139333],{"class":314,"line":1020},[312,139334,515],{"class":324},[19,139336],{"style":21,"src":139337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[24,139339,139340],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[19,139342],{"style":21,"src":139343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[24,139345,139346],{},"但是在引用时需要先转义一下",[24,139348,139349],{},"content='\\e930'",[140,139351,139352],{"start":298},[143,139353,139354],{},"使用场景2",[24,139356,139357],{},"仿土豆效果",[24,139359,139360],{},"通过使用伪元素选择器可以减少body中盒子的数量",[303,139362,139363],{"className":469,"code":139261,"language":471,"meta":308,"style":308},[119,139364,139365,139369,139377,139387,139397,139401,139409,139419,139429],{"__ignoreMap":308},[312,139366,139367],{"class":314,"line":315},[312,139368,139268],{"class":318},[312,139370,139371,139373,139375],{"class":314,"line":171},[312,139372,329],{"class":328},[312,139374,480],{"class":332},[312,139376,483],{"class":324},[312,139378,139379,139381,139383,139385],{"class":314,"line":274},[312,139380,489],{"class":488},[312,139382,492],{"class":324},[312,139384,495],{"class":339},[312,139386,498],{"class":324},[312,139388,139389,139391,139393,139395],{"class":314,"line":298},[312,139390,503],{"class":488},[312,139392,492],{"class":324},[312,139394,508],{"class":488},[312,139396,498],{"class":324},[312,139398,139399],{"class":314,"line":974},[312,139400,515],{"class":324},[312,139402,139403,139405,139407],{"class":314,"line":980},[312,139404,329],{"class":328},[312,139406,139307],{"class":332},[312,139408,483],{"class":324},[312,139410,139411,139413,139415,139417],{"class":314,"line":997},[312,139412,489],{"class":488},[312,139414,492],{"class":324},[312,139416,139318],{"class":339},[312,139418,498],{"class":324},[312,139420,139421,139423,139425,139427],{"class":314,"line":1003},[312,139422,72677],{"class":488},[312,139424,492],{"class":324},[312,139426,63848],{"class":488},[312,139428,498],{"class":324},[312,139430,139431],{"class":314,"line":1020},[312,139432,515],{"class":324},[19,139434],{"style":21,"src":139435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[140,139437,139438],{"start":974},[143,139439,139440],{},"使用场景3",[24,139442,139443],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[303,139445,139447],{"className":469,"code":139446,"language":471,"meta":308,"style":308},".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",[119,139448,139449,139455,139465,139469,139473,139477,139485,139495,139505,139509,139517,139527,139537],{"__ignoreMap":308},[312,139450,139451,139453],{"class":314,"line":315},[312,139452,1362],{"class":332},[312,139454,483],{"class":324},[312,139456,139457,139459,139461,139463],{"class":314,"line":171},[312,139458,1369],{"class":488},[312,139460,492],{"class":324},[312,139462,1374],{"class":488},[312,139464,498],{"class":324},[312,139466,139467],{"class":314,"line":274},[312,139468,515],{"class":324},[312,139470,139471],{"class":314,"line":298},[312,139472,137735],{"class":324},[312,139474,139475],{"class":314,"line":974},[312,139476,139268],{"class":318},[312,139478,139479,139481,139483],{"class":314,"line":980},[312,139480,329],{"class":328},[312,139482,480],{"class":332},[312,139484,483],{"class":324},[312,139486,139487,139489,139491,139493],{"class":314,"line":997},[312,139488,489],{"class":488},[312,139490,492],{"class":324},[312,139492,495],{"class":339},[312,139494,498],{"class":324},[312,139496,139497,139499,139501,139503],{"class":314,"line":1003},[312,139498,503],{"class":488},[312,139500,492],{"class":324},[312,139502,508],{"class":488},[312,139504,498],{"class":324},[312,139506,139507],{"class":314,"line":1020},[312,139508,515],{"class":324},[312,139510,139511,139513,139515],{"class":314,"line":1026},[312,139512,329],{"class":328},[312,139514,139307],{"class":332},[312,139516,483],{"class":324},[312,139518,139519,139521,139523,139525],{"class":314,"line":3418},[312,139520,489],{"class":488},[312,139522,492],{"class":324},[312,139524,139318],{"class":339},[312,139526,498],{"class":324},[312,139528,139529,139531,139533,139535],{"class":314,"line":3423},[312,139530,72677],{"class":488},[312,139532,492],{"class":324},[312,139534,63848],{"class":488},[312,139536,498],{"class":324},[312,139538,139539],{"class":314,"line":3429},[312,139540,515],{"class":324},[24,139542,139543],{},"div {\nmargin: 0 auto;\n}",[303,139545,139548],{"className":139546,"code":139547,"language":6992},[6990],"\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",[119,139549,139547],{"__ignoreMap":308},[24,139551,139552],{},"如果想让多个元素都发生变化",[24,139554,139555],{},"不能如下操作：",[24,139557,139558],{},"transition: width 2s ease 0.5s;",[24,139560,139561],{},"transition: height 2s ease 0.5s;不对！！！",[24,139563,139564],{},"上方会样式冲突，导致不显示任何过渡效果",[24,139566,139567],{},"使用如下：加逗号隔开",[24,139569,139570],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[24,139572,139573],{},"transition all 2s ease;",[69,139575,139577],{"id":139576},"_1426-过渡练习","14.2.6 过渡练习",[140,139579,139580],{},[143,139581,139582],{},"进度条",[19,139584],{"style":21,"src":139585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[303,139587,139589],{"className":469,"code":139588,"language":471,"meta":308,"style":308},"div {\n  transition: all 0.3s ease;\n}\n",[119,139590,139591,139597,139615],{"__ignoreMap":308},[312,139592,139593,139595],{"class":314,"line":315},[312,139594,329],{"class":328},[312,139596,483],{"class":324},[312,139598,139599,139602,139604,139606,139609,139611,139613],{"class":314,"line":171},[312,139600,139601],{"class":488},"  transition",[312,139603,492],{"class":324},[312,139605,29917],{"class":488},[312,139607,139608],{"class":488}," 0.3",[312,139610,2640],{"class":1436},[312,139612,80452],{"class":488},[312,139614,498],{"class":324},[312,139616,139617],{"class":314,"line":274},[312,139618,515],{"class":324},[140,139620,139621],{"start":171},[143,139622,139623],{},"小米logo",[24,139625,139626],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[303,139628,139630],{"className":469,"code":139629,"language":471,"meta":308,"style":308},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[119,139631,139632,139637,139643,139659,139664],{"__ignoreMap":308},[312,139633,139634],{"class":314,"line":315},[312,139635,139636],{"class":318},"\u002F* CSS3 过渡 *\u002F\n",[312,139638,139639,139641],{"class":314,"line":171},[312,139640,329],{"class":328},[312,139642,483],{"class":324},[312,139644,139645,139647,139649,139651,139653,139655,139657],{"class":314,"line":274},[312,139646,139601],{"class":488},[312,139648,492],{"class":324},[312,139650,29917],{"class":488},[312,139652,139608],{"class":488},[312,139654,2640],{"class":1436},[312,139656,80452],{"class":488},[312,139658,498],{"class":324},[312,139660,139661],{"class":314,"line":298},[312,139662,139663],{"class":318},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[312,139665,139666],{"class":314,"line":974},[312,139667,515],{"class":324},[24,139669,139670],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1856,139672,139673],{},"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":308,"searchDepth":171,"depth":171,"links":139675},[139676,139681],{"id":138008,"depth":171,"text":138009,"children":139677},[139678,139679,139680],{"id":138012,"depth":274,"text":138013},{"id":138089,"depth":274,"text":138090},{"id":138420,"depth":274,"text":138421},{"id":138711,"depth":171,"text":138712,"children":139682},[139683,139684],{"id":138715,"depth":274,"text":138716},{"id":139576,"depth":274,"text":139577},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":138000,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":4,"title":5,"body":139691,"description":1878,"extension":1879,"meta":141175,"navigation":1881,"path":1882,"seo":141176,"stem":1884,"__hash__":1885},{"type":7,"value":139692,"toc":141157},[139693,139695,139697,139699,139703,139707,139709,139711,139713,139715,139717,139719,139721,139723,139725,139727,139729,139731,139733,139735,139737,139739,139741,139745,139747,139749,139751,139753,139755,139761,139763,139765,139767,139769,139771,139775,139779,139788,139794,139798,139802,139804,139806,139808,139813,139815,139819,139823,139825,139827,139831,139835,139837,139843,139847,139849,139853,139855,139859,139863,139865,139867,139871,139873,139877,139881,139915,139917,139919,139921,139923,139925,139987,139989,140025,140027,140063,140065,140069,140077,140113,140115,140143,140145,140173,140177,140187,140189,140233,140235,140279,140281,140285,140293,140295,140321,140323,140349,140353,140365,140367,140461,140463,140557,140561,140563,140567,140571,140623,140625,140627,140663,140665,140701,140703,140707,140721,140723,140725,140727,140751,140753,140777,140779,140781,140811,140813,140815,140861,140863,140927,140929,140993,140995,141017,141019,141045,141047,141073,141075,141097,141099,141125,141127,141153,141155],[10,139694,5],{"id":12},[14,139696,17],{"id":16},[19,139698],{"style":21,"src":22},[24,139700,139701,30],{},[27,139702,29],{},[24,139704,139705,36],{},[27,139706,35],{},[14,139708,40],{"id":39},[24,139710,29],{},[19,139712],{"style":21,"src":45},[24,139714,48],{},[19,139716],{"style":21,"src":51},[24,139718,54],{},[19,139720],{"style":21,"src":57},[24,139722,60],{},[19,139724],{"style":21,"src":63},[14,139726,67],{"id":66},[69,139728,72],{"id":71},[19,139730],{"style":21,"src":75},[24,139732,78],{},[24,139734,81],{},[69,139736,85],{"id":84},[19,139738],{"style":21,"src":88},[19,139740],{"style":21,"src":91},[24,139742,139743],{},[27,139744,96],{},[24,139746,99],{},[24,139748,102],{},[24,139750,105],{},[69,139752,109],{"id":108},[24,139754,112],{},[24,139756,115,139757,122],{},[27,139758,139759],{},[119,139760,121],{},[19,139762],{"style":21,"src":125},[24,139764,128],{},[69,139766,132],{"id":131},[19,139768],{"style":21,"src":135},[24,139770,138],{},[140,139772,139773],{},[143,139774,145],{},[24,139776,148,139777,152],{},[119,139778,151],{},[24,139780,155,139781,158,139783,162,139785],{},[119,139782,151],{},[119,139784,161],{},[164,139786,166],{"href":166,"rel":139787},[168],[140,139789,139790,139792],{"start":171},[143,139791,174],{},[143,139793,177],{},[24,139795,180,139796,184],{},[119,139797,183],{},[24,139799,139800],{},[119,139801,189],{},[24,139803,192],{},[19,139805],{"style":21,"src":195},[24,139807,198],{},[24,139809,201,139810],{},[164,139811,204],{"href":204,"rel":139812},[168],[69,139814,209],{"id":208},[24,139816,139817,215],{},[27,139818,214],{},[24,139820,139821,221],{},[27,139822,220],{},[24,139824,224],{},[19,139826],{"style":21,"src":227},[140,139828,139829],{},[143,139830,232],{},[24,139832,139833,238],{},[27,139834,237],{},[24,139836,241],{},[243,139838,139839,139841],{},[143,139840,247],{},[143,139842,250],{},[140,139844,139845],{"start":171},[143,139846,255],{},[24,139848,258],{},[24,139850,139851,264],{},[27,139852,263],{},[24,139854,241],{},[24,139856,139857],{},[119,139858,271],{},[140,139860,139861],{"start":274},[143,139862,277],{},[24,139864,280],{},[24,139866,241],{},[24,139868,139869],{},[119,139870,287],{},[24,139872,290],{},[24,139874,139875],{},[27,139876,295],{},[140,139878,139879],{"start":298},[143,139880,301],{},[303,139882,139883],{"className":305,"code":306,"language":307,"meta":308,"style":308},[119,139884,139885,139889,139903,139907],{"__ignoreMap":308},[312,139886,139887],{"class":314,"line":315},[312,139888,319],{"class":318},[312,139890,139891,139893,139895,139897,139899,139901],{"class":314,"line":171},[312,139892,325],{"class":324},[312,139894,329],{"class":328},[312,139896,333],{"class":332},[312,139898,336],{"class":324},[312,139900,340],{"class":339},[312,139902,343],{"class":324},[312,139904,139905],{"class":314,"line":274},[312,139906,348],{"class":324},[312,139908,139909,139911,139913],{"class":314,"line":298},[312,139910,353],{"class":324},[312,139912,329],{"class":328},[312,139914,343],{"class":324},[14,139916,361],{"id":360},[69,139918,365],{"id":364},[19,139920],{"style":21,"src":368},[69,139922,372],{"id":371},[24,139924,375],{},[243,139926,139927,139929,139931,139947,139971],{},[143,139928,380],{},[143,139930,383],{},[143,139932,386,139933],{},[243,139934,139935,139941,139945],{},[143,139936,391,139937,394,139939,397],{},[119,139938,243],{},[119,139940,243],{},[143,139942,400,139943,403],{},[119,139944,143],{},[143,139946,406],{},[143,139948,409,139949],{},[243,139950,139951,139961,139965],{},[143,139952,414,139953,394,139955,419,139957,422,139959,426],{},[119,139954,243],{},[119,139956,243],{},[119,139958,143],{},[119,139960,425],{},[143,139962,429,139963,403],{},[119,139964,143],{},[143,139966,434,139967,437,139969,440],{},[119,139968,143],{},[119,139970,143],{},[143,139972,443,139973],{},[243,139974,139975,139979,139981,139983,139985],{},[143,139976,448,139977],{},[119,139978,451],{},[143,139980,454],{},[143,139982,457],{},[143,139984,460],{},[143,139986,463],{},[24,139988,466],{},[303,139990,139991],{"className":469,"code":470,"language":471,"meta":308,"style":308},[119,139992,139993,140001,140011,140021],{"__ignoreMap":308},[312,139994,139995,139997,139999],{"class":314,"line":315},[312,139996,329],{"class":328},[312,139998,480],{"class":332},[312,140000,483],{"class":324},[312,140002,140003,140005,140007,140009],{"class":314,"line":171},[312,140004,489],{"class":488},[312,140006,492],{"class":324},[312,140008,495],{"class":339},[312,140010,498],{"class":324},[312,140012,140013,140015,140017,140019],{"class":314,"line":274},[312,140014,503],{"class":488},[312,140016,492],{"class":324},[312,140018,508],{"class":488},[312,140020,498],{"class":324},[312,140022,140023],{"class":314,"line":298},[312,140024,515],{"class":324},[24,140026,518],{},[303,140028,140029],{"className":469,"code":470,"language":471,"meta":308,"style":308},[119,140030,140031,140039,140049,140059],{"__ignoreMap":308},[312,140032,140033,140035,140037],{"class":314,"line":315},[312,140034,329],{"class":328},[312,140036,480],{"class":332},[312,140038,483],{"class":324},[312,140040,140041,140043,140045,140047],{"class":314,"line":171},[312,140042,489],{"class":488},[312,140044,492],{"class":324},[312,140046,495],{"class":339},[312,140048,498],{"class":324},[312,140050,140051,140053,140055,140057],{"class":314,"line":274},[312,140052,503],{"class":488},[312,140054,492],{"class":324},[312,140056,508],{"class":488},[312,140058,498],{"class":324},[312,140060,140061],{"class":314,"line":298},[312,140062,515],{"class":324},[69,140064,558],{"id":557},[243,140066,140067],{},[143,140068,563],{},[24,140070,566,140071,570,140073],{},[119,140072,569],{},[27,140074,573,140075,577],{},[119,140076,576],{},[243,140078,140079,140085,140091,140107],{},[143,140080,140081,584,140083,587],{},[119,140082,569],{},[119,140084,10],{},[143,140086,140087,592,140089,595],{},[119,140088,10],{},[119,140090,569],{},[143,140092,598,140093],{},[243,140094,140095,140103],{},[143,140096,603,140097,607,140099,611,140101,615],{},[119,140098,606],{},[119,140100,610],{},[119,140102,614],{},[143,140104,618,140105,622],{},[119,140106,621],{},[143,140108,625,140109,629,140111,632],{},[119,140110,628],{},[119,140112,569],{},[24,140114,466],{},[303,140116,140117],{"className":305,"code":637,"language":307,"meta":308,"style":308},[119,140118,140119],{"__ignoreMap":308},[312,140120,140121,140123,140125,140127,140129,140131,140133,140135,140137,140139,140141],{"class":314,"line":315},[312,140122,325],{"class":324},[312,140124,164],{"class":328},[312,140126,648],{"class":332},[312,140128,336],{"class":324},[312,140130,653],{"class":339},[312,140132,656],{"class":332},[312,140134,336],{"class":324},[312,140136,661],{"class":339},[312,140138,664],{"class":324},[312,140140,164],{"class":328},[312,140142,343],{"class":324},[24,140144,518],{},[303,140146,140147],{"className":305,"code":637,"language":307,"meta":308,"style":308},[119,140148,140149],{"__ignoreMap":308},[312,140150,140151,140153,140155,140157,140159,140161,140163,140165,140167,140169,140171],{"class":314,"line":315},[312,140152,325],{"class":324},[312,140154,164],{"class":328},[312,140156,648],{"class":332},[312,140158,336],{"class":324},[312,140160,653],{"class":339},[312,140162,656],{"class":332},[312,140164,336],{"class":324},[312,140166,661],{"class":339},[312,140168,664],{"class":324},[312,140170,164],{"class":328},[312,140172,343],{"class":324},[24,140174,701,140175,705],{},[119,140176,704],{},[243,140178,140179,140181,140183,140185],{},[143,140180,710],{},[143,140182,713],{},[143,140184,716],{},[143,140186,719],{},[24,140188,466],{},[303,140190,140191],{"className":469,"code":724,"language":471,"meta":308,"style":308},[119,140192,140193,140215,140219,140229],{"__ignoreMap":308},[312,140194,140195,140197,140199,140201,140203,140205,140207,140209,140211,140213],{"class":314,"line":315},[312,140196,329],{"class":328},[312,140198,733],{"class":324},[312,140200,24],{"class":328},[312,140202,733],{"class":324},[312,140204,10],{"class":328},[312,140206,733],{"class":324},[312,140208,243],{"class":328},[312,140210,733],{"class":324},[312,140212,143],{"class":328},[312,140214,483],{"class":324},[312,140216,140217],{"class":314,"line":171},[312,140218,754],{"class":318},[312,140220,140221,140223,140225,140227],{"class":314,"line":274},[312,140222,503],{"class":488},[312,140224,492],{"class":324},[312,140226,508],{"class":488},[312,140228,498],{"class":324},[312,140230,140231],{"class":314,"line":298},[312,140232,515],{"class":324},[24,140234,518],{},[303,140236,140237],{"className":469,"code":724,"language":471,"meta":308,"style":308},[119,140238,140239,140261,140265,140275],{"__ignoreMap":308},[312,140240,140241,140243,140245,140247,140249,140251,140253,140255,140257,140259],{"class":314,"line":315},[312,140242,329],{"class":328},[312,140244,733],{"class":324},[312,140246,24],{"class":328},[312,140248,733],{"class":324},[312,140250,10],{"class":328},[312,140252,733],{"class":324},[312,140254,243],{"class":328},[312,140256,733],{"class":324},[312,140258,143],{"class":328},[312,140260,483],{"class":324},[312,140262,140263],{"class":314,"line":171},[312,140264,754],{"class":318},[312,140266,140267,140269,140271,140273],{"class":314,"line":274},[312,140268,503],{"class":488},[312,140270,492],{"class":324},[312,140272,508],{"class":488},[312,140274,498],{"class":324},[312,140276,140277],{"class":314,"line":298},[312,140278,515],{"class":324},[24,140280,817],{},[24,140282,820,140283,824],{},[119,140284,823],{},[243,140286,140287,140289,140291],{},[143,140288,829],{},[143,140290,832],{},[143,140292,835],{},[24,140294,466],{},[303,140296,140297],{"className":469,"code":840,"language":471,"meta":308,"style":308},[119,140298,140299,140305,140317],{"__ignoreMap":308},[312,140300,140301,140303],{"class":314,"line":315},[312,140302,329],{"class":328},[312,140304,483],{"class":324},[312,140306,140307,140309,140311,140313,140315],{"class":314,"line":171},[312,140308,853],{"class":488},[312,140310,492],{"class":324},[312,140312,858],{"class":488},[312,140314,861],{"class":488},[312,140316,498],{"class":324},[312,140318,140319],{"class":314,"line":274},[312,140320,515],{"class":324},[24,140322,518],{},[303,140324,140325],{"className":469,"code":840,"language":471,"meta":308,"style":308},[119,140326,140327,140333,140345],{"__ignoreMap":308},[312,140328,140329,140331],{"class":314,"line":315},[312,140330,329],{"class":328},[312,140332,483],{"class":324},[312,140334,140335,140337,140339,140341,140343],{"class":314,"line":171},[312,140336,853],{"class":488},[312,140338,492],{"class":324},[312,140340,858],{"class":488},[312,140342,861],{"class":488},[312,140344,498],{"class":324},[312,140346,140347],{"class":314,"line":274},[312,140348,515],{"class":324},[24,140350,898,140351,902],{},[119,140352,901],{},[243,140354,140355,140359,140361,140363],{},[143,140356,907,140357,910],{},[119,140358,901],{},[143,140360,913],{},[143,140362,916],{},[143,140364,919],{},[24,140366,466],{},[303,140368,140369],{"className":469,"code":924,"language":471,"meta":308,"style":308},[119,140370,140371,140375,140389,140393,140407,140411,140425,140429,140443,140447],{"__ignoreMap":308},[312,140372,140373],{"class":314,"line":315},[312,140374,931],{"class":318},[312,140376,140377,140379,140381,140383,140385,140387],{"class":314,"line":171},[312,140378,936],{"class":332},[312,140380,939],{"class":324},[312,140382,942],{"class":488},[312,140384,492],{"class":324},[312,140386,947],{"class":488},[312,140388,950],{"class":324},[312,140390,140391],{"class":314,"line":274},[312,140392,955],{"class":318},[312,140394,140395,140397,140399,140401,140403,140405],{"class":314,"line":298},[312,140396,960],{"class":332},[312,140398,939],{"class":324},[312,140400,942],{"class":488},[312,140402,492],{"class":324},[312,140404,969],{"class":488},[312,140406,950],{"class":324},[312,140408,140409],{"class":314,"line":974},[312,140410,977],{"class":318},[312,140412,140413,140415,140417,140419,140421,140423],{"class":314,"line":980},[312,140414,983],{"class":332},[312,140416,939],{"class":324},[312,140418,942],{"class":488},[312,140420,492],{"class":324},[312,140422,992],{"class":488},[312,140424,950],{"class":324},[312,140426,140427],{"class":314,"line":997},[312,140428,1000],{"class":318},[312,140430,140431,140433,140435,140437,140439,140441],{"class":314,"line":1003},[312,140432,1006],{"class":332},[312,140434,939],{"class":324},[312,140436,942],{"class":488},[312,140438,492],{"class":324},[312,140440,1015],{"class":488},[312,140442,950],{"class":324},[312,140444,140445],{"class":314,"line":1020},[312,140446,1023],{"class":318},[312,140448,140449,140451,140453,140455,140457,140459],{"class":314,"line":1026},[312,140450,1029],{"class":332},[312,140452,939],{"class":324},[312,140454,942],{"class":488},[312,140456,492],{"class":324},[312,140458,1038],{"class":488},[312,140460,950],{"class":324},[24,140462,518],{},[303,140464,140465],{"className":469,"code":924,"language":471,"meta":308,"style":308},[119,140466,140467,140471,140485,140489,140503,140507,140521,140525,140539,140543],{"__ignoreMap":308},[312,140468,140469],{"class":314,"line":315},[312,140470,931],{"class":318},[312,140472,140473,140475,140477,140479,140481,140483],{"class":314,"line":171},[312,140474,936],{"class":332},[312,140476,939],{"class":324},[312,140478,942],{"class":488},[312,140480,492],{"class":324},[312,140482,947],{"class":488},[312,140484,950],{"class":324},[312,140486,140487],{"class":314,"line":274},[312,140488,955],{"class":318},[312,140490,140491,140493,140495,140497,140499,140501],{"class":314,"line":298},[312,140492,960],{"class":332},[312,140494,939],{"class":324},[312,140496,942],{"class":488},[312,140498,492],{"class":324},[312,140500,969],{"class":488},[312,140502,950],{"class":324},[312,140504,140505],{"class":314,"line":974},[312,140506,977],{"class":318},[312,140508,140509,140511,140513,140515,140517,140519],{"class":314,"line":980},[312,140510,983],{"class":332},[312,140512,939],{"class":324},[312,140514,942],{"class":488},[312,140516,492],{"class":324},[312,140518,992],{"class":488},[312,140520,950],{"class":324},[312,140522,140523],{"class":314,"line":997},[312,140524,1000],{"class":318},[312,140526,140527,140529,140531,140533,140535,140537],{"class":314,"line":1003},[312,140528,1006],{"class":332},[312,140530,939],{"class":324},[312,140532,942],{"class":488},[312,140534,492],{"class":324},[312,140536,1015],{"class":488},[312,140538,950],{"class":324},[312,140540,140541],{"class":314,"line":1020},[312,140542,1023],{"class":318},[312,140544,140545,140547,140549,140551,140553,140555],{"class":314,"line":1026},[312,140546,1029],{"class":332},[312,140548,939],{"class":324},[312,140550,942],{"class":488},[312,140552,492],{"class":324},[312,140554,1038],{"class":488},[312,140556,950],{"class":324},[69,140558,1140,140559,1144],{"id":1139},[119,140560,1143],{},[19,140562],{"style":21,"src":1147},[24,140564,140565,1152],{},[119,140566,1143],{},[24,140568,1155,140569],{},[119,140570,1158],{},[243,140572,140573,140579,140585,140589,140595,140601,140607,140615],{},[143,140574,1163,140575,1167,140577,1171],{},[119,140576,1166],{},[119,140578,1170],{},[143,140580,140581,1176,140583,1179],{},[119,140582,1166],{},[119,140584,1170],{},[143,140586,1182,140587,1185],{},[119,140588,1170],{},[143,140590,1182,140591,1190,140593,1194],{},[119,140592,1170],{},[119,140594,1193],{},[143,140596,1197,140597,1200,140599,1204],{},[119,140598,143],{},[119,140600,1203],{},[143,140602,1182,140603,1209,140605,1194],{},[119,140604,143],{},[119,140606,1212],{},[143,140608,1182,140609,1217,140611,1221,140613,1224],{},[119,140610,143],{},[119,140612,1220],{},[119,140614,143],{},[143,140616,140617,1229,140619,1232,140621,1235],{},[119,140618,143],{},[119,140620,143],{},[119,140622,143],{},[24,140624,1238],{},[24,140626,466],{},[303,140628,140629],{"className":469,"code":470,"language":471,"meta":308,"style":308},[119,140630,140631,140639,140649,140659],{"__ignoreMap":308},[312,140632,140633,140635,140637],{"class":314,"line":315},[312,140634,329],{"class":328},[312,140636,480],{"class":332},[312,140638,483],{"class":324},[312,140640,140641,140643,140645,140647],{"class":314,"line":171},[312,140642,489],{"class":488},[312,140644,492],{"class":324},[312,140646,495],{"class":339},[312,140648,498],{"class":324},[312,140650,140651,140653,140655,140657],{"class":314,"line":274},[312,140652,503],{"class":488},[312,140654,492],{"class":324},[312,140656,508],{"class":488},[312,140658,498],{"class":324},[312,140660,140661],{"class":314,"line":298},[312,140662,515],{"class":324},[24,140664,518],{},[303,140666,140667],{"className":469,"code":470,"language":471,"meta":308,"style":308},[119,140668,140669,140677,140687,140697],{"__ignoreMap":308},[312,140670,140671,140673,140675],{"class":314,"line":315},[312,140672,329],{"class":328},[312,140674,480],{"class":332},[312,140676,483],{"class":324},[312,140678,140679,140681,140683,140685],{"class":314,"line":171},[312,140680,489],{"class":488},[312,140682,492],{"class":324},[312,140684,495],{"class":339},[312,140686,498],{"class":324},[312,140688,140689,140691,140693,140695],{"class":314,"line":274},[312,140690,503],{"class":488},[312,140692,492],{"class":324},[312,140694,508],{"class":488},[312,140696,498],{"class":324},[312,140698,140699],{"class":314,"line":298},[312,140700,515],{"class":324},[24,140702,1317],{},[24,140704,1320,140705,1324],{},[119,140706,1323],{},[243,140708,140709,140713,140719],{},[143,140710,1329,140711],{},[119,140712,1193],{},[143,140714,1334,140715,1337,140717,1341],{},[119,140716,164],{},[119,140718,1340],{},[143,140720,1344],{},[19,140722],{"style":21,"src":1347},[24,140724,1350],{},[24,140726,466],{},[303,140728,140729],{"className":469,"code":1355,"language":471,"meta":308,"style":308},[119,140730,140731,140737,140747],{"__ignoreMap":308},[312,140732,140733,140735],{"class":314,"line":315},[312,140734,1362],{"class":332},[312,140736,483],{"class":324},[312,140738,140739,140741,140743,140745],{"class":314,"line":171},[312,140740,1369],{"class":488},[312,140742,492],{"class":324},[312,140744,1374],{"class":488},[312,140746,498],{"class":324},[312,140748,140749],{"class":314,"line":274},[312,140750,515],{"class":324},[24,140752,518],{},[303,140754,140755],{"className":469,"code":1355,"language":471,"meta":308,"style":308},[119,140756,140757,140763,140773],{"__ignoreMap":308},[312,140758,140759,140761],{"class":314,"line":315},[312,140760,1362],{"class":332},[312,140762,483],{"class":324},[312,140764,140765,140767,140769,140771],{"class":314,"line":171},[312,140766,1369],{"class":488},[312,140768,492],{"class":324},[312,140770,1374],{"class":488},[312,140772,498],{"class":324},[312,140774,140775],{"class":314,"line":274},[312,140776,515],{"class":324},[24,140778,1409],{},[19,140780],{"style":21,"src":1412},[303,140782,140783],{"className":469,"code":1415,"language":471,"meta":308,"style":308},[119,140784,140785,140791,140807],{"__ignoreMap":308},[312,140786,140787,140789],{"class":314,"line":315},[312,140788,329],{"class":328},[312,140790,483],{"class":324},[312,140792,140793,140795,140797,140799,140801,140803,140805],{"class":314,"line":171},[312,140794,1428],{"class":488},[312,140796,492],{"class":324},[312,140798,1433],{"class":488},[312,140800,1437],{"class":1436},[312,140802,1440],{"class":488},[312,140804,1443],{"class":488},[312,140806,498],{"class":324},[312,140808,140809],{"class":314,"line":274},[312,140810,515],{"class":324},[69,140812,1453],{"id":1452},[19,140814],{"style":21,"src":1456},[243,140816,140817,140821,140825],{},[143,140818,140819,1464],{},[119,140820,1463],{},[143,140822,140823,1469],{},[119,140824,1463],{},[143,140826,1472,140827,1476,140829],{},[119,140828,1475],{},[243,140830,140831,140835,140843,140855,140859],{},[143,140832,1182,140833,1483],{},[119,140834,1475],{},[143,140836,1486,140837,1490,140839,1493,140841,1496],{},[119,140838,1489],{},[119,140840,143],{},[119,140842,143],{},[143,140844,1499,140845,1502,140847,1506,140849,1509,140851,1512,140853,1194],{},[119,140846,143],{},[119,140848,1505],{},[119,140850,329],{},[119,140852,329],{},[119,140854,24],{},[143,140856,1182,140857,1519],{},[119,140858,1505],{},[143,140860,1522],{},[24,140862,466],{},[303,140864,140865],{"className":469,"code":1527,"language":471,"meta":308,"style":308},[119,140866,140867,140873,140885,140897,140923],{"__ignoreMap":308},[312,140868,140869,140871],{"class":314,"line":315},[312,140870,1534],{"class":332},[312,140872,483],{"class":324},[312,140874,140875,140877,140879,140881,140883],{"class":314,"line":171},[312,140876,1541],{"class":488},[312,140878,492],{"class":324},[312,140880,1546],{"class":488},[312,140882,1437],{"class":1436},[312,140884,498],{"class":324},[312,140886,140887,140889,140891,140893,140895],{"class":314,"line":274},[312,140888,1555],{"class":488},[312,140890,492],{"class":324},[312,140892,1546],{"class":488},[312,140894,1437],{"class":1436},[312,140896,498],{"class":324},[312,140898,140899,140901,140903,140905,140907,140909,140911,140913,140915,140917,140919,140921],{"class":314,"line":298},[312,140900,1568],{"class":488},[312,140902,492],{"class":324},[312,140904,1573],{"class":488},[312,140906,1576],{"class":324},[312,140908,1580],{"class":1579},[312,140910,1583],{"class":324},[312,140912,1586],{"class":488},[312,140914,1589],{"class":488},[312,140916,1437],{"class":1436},[312,140918,1594],{"class":488},[312,140920,1437],{"class":1436},[312,140922,498],{"class":324},[312,140924,140925],{"class":314,"line":974},[312,140926,515],{"class":324},[24,140928,518],{},[303,140930,140931],{"className":469,"code":1527,"language":471,"meta":308,"style":308},[119,140932,140933,140939,140951,140963,140989],{"__ignoreMap":308},[312,140934,140935,140937],{"class":314,"line":315},[312,140936,1534],{"class":332},[312,140938,483],{"class":324},[312,140940,140941,140943,140945,140947,140949],{"class":314,"line":171},[312,140942,1541],{"class":488},[312,140944,492],{"class":324},[312,140946,1546],{"class":488},[312,140948,1437],{"class":1436},[312,140950,498],{"class":324},[312,140952,140953,140955,140957,140959,140961],{"class":314,"line":274},[312,140954,1555],{"class":488},[312,140956,492],{"class":324},[312,140958,1546],{"class":488},[312,140960,1437],{"class":1436},[312,140962,498],{"class":324},[312,140964,140965,140967,140969,140971,140973,140975,140977,140979,140981,140983,140985,140987],{"class":314,"line":298},[312,140966,1568],{"class":488},[312,140968,492],{"class":324},[312,140970,1573],{"class":488},[312,140972,1576],{"class":324},[312,140974,1580],{"class":1579},[312,140976,1583],{"class":324},[312,140978,1586],{"class":488},[312,140980,1589],{"class":488},[312,140982,1437],{"class":1436},[312,140984,1594],{"class":488},[312,140986,1437],{"class":1436},[312,140988,498],{"class":324},[312,140990,140991],{"class":314,"line":974},[312,140992,515],{"class":324},[24,140994,1671],{},[243,140996,140997,140999,141003,141007,141015],{},[143,140998,1676],{},[143,141000,1679,141001,1194],{},[119,141002,1682],{},[143,141004,1182,141005,1688],{},[119,141006,1687],{},[143,141008,1182,141009,1694,141011,1512,141013,1700],{},[119,141010,1693],{},[119,141012,1693],{},[119,141014,1699],{},[143,141016,1703],{},[24,141018,466],{},[303,141020,141021],{"className":469,"code":840,"language":471,"meta":308,"style":308},[119,141022,141023,141029,141041],{"__ignoreMap":308},[312,141024,141025,141027],{"class":314,"line":315},[312,141026,329],{"class":328},[312,141028,483],{"class":324},[312,141030,141031,141033,141035,141037,141039],{"class":314,"line":171},[312,141032,853],{"class":488},[312,141034,492],{"class":324},[312,141036,858],{"class":488},[312,141038,861],{"class":488},[312,141040,498],{"class":324},[312,141042,141043],{"class":314,"line":274},[312,141044,515],{"class":324},[24,141046,518],{},[303,141048,141049],{"className":469,"code":840,"language":471,"meta":308,"style":308},[119,141050,141051,141057,141069],{"__ignoreMap":308},[312,141052,141053,141055],{"class":314,"line":315},[312,141054,329],{"class":328},[312,141056,483],{"class":324},[312,141058,141059,141061,141063,141065,141067],{"class":314,"line":171},[312,141060,853],{"class":488},[312,141062,492],{"class":324},[312,141064,858],{"class":488},[312,141066,861],{"class":488},[312,141068,498],{"class":324},[312,141070,141071],{"class":314,"line":274},[312,141072,515],{"class":324},[24,141074,1762],{},[243,141076,141077,141083,141085,141093],{},[143,141078,1767,141079,1771,141081,1775],{},[119,141080,1770],{},[119,141082,1774],{},[143,141084,1778],{},[143,141086,1182,141087,1783,141089,1786,141091,1789],{},[119,141088,1770],{},[119,141090,1770],{},[119,141092,164],{},[143,141094,1792,141095,1795],{},[119,141096,1774],{},[24,141098,466],{},[303,141100,141101],{"className":469,"code":840,"language":471,"meta":308,"style":308},[119,141102,141103,141109,141121],{"__ignoreMap":308},[312,141104,141105,141107],{"class":314,"line":315},[312,141106,329],{"class":328},[312,141108,483],{"class":324},[312,141110,141111,141113,141115,141117,141119],{"class":314,"line":171},[312,141112,853],{"class":488},[312,141114,492],{"class":324},[312,141116,858],{"class":488},[312,141118,861],{"class":488},[312,141120,498],{"class":324},[312,141122,141123],{"class":314,"line":274},[312,141124,515],{"class":324},[24,141126,518],{},[303,141128,141129],{"className":469,"code":840,"language":471,"meta":308,"style":308},[119,141130,141131,141137,141149],{"__ignoreMap":308},[312,141132,141133,141135],{"class":314,"line":315},[312,141134,329],{"class":328},[312,141136,483],{"class":324},[312,141138,141139,141141,141143,141145,141147],{"class":314,"line":171},[312,141140,853],{"class":488},[312,141142,492],{"class":324},[312,141144,858],{"class":488},[312,141146,861],{"class":488},[312,141148,498],{"class":324},[312,141150,141151],{"class":314,"line":274},[312,141152,515],{"class":324},[24,141154,1854],{},[1856,141156,1858],{},{"title":308,"searchDepth":171,"depth":171,"links":141158},[141159,141160,141161,141168],{"id":16,"depth":171,"text":17},{"id":39,"depth":171,"text":40},{"id":66,"depth":171,"text":67,"children":141162},[141163,141164,141165,141166,141167],{"id":71,"depth":274,"text":72},{"id":84,"depth":274,"text":85},{"id":108,"depth":274,"text":109},{"id":131,"depth":274,"text":132},{"id":208,"depth":274,"text":209},{"id":360,"depth":171,"text":361,"children":141169},[141170,141171,141172,141173,141174],{"id":364,"depth":274,"text":365},{"id":371,"depth":274,"text":372},{"id":557,"depth":274,"text":558},{"id":1139,"depth":274,"text":1876},{"id":1452,"depth":274,"text":1453},{},{"title":5,"description":1878},{"id":141178,"title":141179,"body":141180,"description":1878,"extension":1879,"meta":143582,"navigation":1881,"path":143583,"seo":143584,"stem":143585,"__hash__":143586},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":141181,"toc":143559},[141182,141185,141189,141193,141205,141208,141211,141214,141225,141227,141251,141253,141277,141282,141285,141287,141323,141325,141361,141364,141369,141372,141375,141378,141408,141415,141418,141428,141430,141464,141467,141501,141507,141524,141526,141562,141564,141600,141605,141630,141632,141658,141660,141684,141691,141694,141758,141760,141802,141804,141844,141851,141856,141858,141888,141890,141920,141924,141927,141934,141946,141948,141974,141976,142000,142003,142005,142029,142035,142045,142047,142077,142079,142109,142116,142157,142159,142195,142197,142233,142237,142240,142243,142246,142252,142257,142260,142283,142286,142310,142313,142337,142342,142345,142348,142351,142354,142357,142431,142433,142463,142465,142495,142498,142501,142533,142537,142541,142555,142564,142567,142572,142574,142668,142670,142764,142787,142789,142813,142815,142839,142846,142849,142859,142861,142885,142890,142898,142900,142930,142935,142975,142977,143003,143005,143031,143035,143038,143043,143046,143050,143058,143065,143073,143075,143105,143107,143137,143145,143148,143151,143153,143183,143185,143215,143218,143223,143225,143249,143251,143275,143278,143363,143365,143389,143391,143415,143419,143421,143445,143447,143481,143485,143499,143502,143507,143510,143515,143518,143548,143556],[10,141183,141179],{"id":141184},"_16-品优购项目下篇-主体与页面开发",[14,141186,141188],{"id":141187},"_161-项目主体模块制作","16.1 项目主体模块制作",[69,141190,141192],{"id":141191},"_1611-首页制作","16.1.1 首页制作",[24,141194,141195,141197,141198,141200,141201,141204],{},[27,141196,103827],{}," 主体模块是 ",[27,141199,75830],{}," 里面专有的，注意需要新的样式文件 ",[27,141202,141203],{},"index.css，"," 就不要写在common.css中了",[19,141206],{"style":21,"src":141207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[19,141209],{"style":21,"src":141210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[24,141212,141213],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[243,141215,141216,141219,141222],{},[143,141217,141218],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[143,141220,141221],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[143,141223,141224],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[24,141226,466],{},[303,141228,141229],{"className":469,"code":1355,"language":471,"meta":308,"style":308},[119,141230,141231,141237,141247],{"__ignoreMap":308},[312,141232,141233,141235],{"class":314,"line":315},[312,141234,1362],{"class":332},[312,141236,483],{"class":324},[312,141238,141239,141241,141243,141245],{"class":314,"line":171},[312,141240,1369],{"class":488},[312,141242,492],{"class":324},[312,141244,1374],{"class":488},[312,141246,498],{"class":324},[312,141248,141249],{"class":314,"line":274},[312,141250,515],{"class":324},[24,141252,518],{},[303,141254,141255],{"className":469,"code":1355,"language":471,"meta":308,"style":308},[119,141256,141257,141263,141273],{"__ignoreMap":308},[312,141258,141259,141261],{"class":314,"line":315},[312,141260,1362],{"class":332},[312,141262,483],{"class":324},[312,141264,141265,141267,141269,141271],{"class":314,"line":171},[312,141266,1369],{"class":488},[312,141268,492],{"class":324},[312,141270,1374],{"class":488},[312,141272,498],{"class":324},[312,141274,141275],{"class":314,"line":274},[312,141276,515],{"class":324},[140,141278,141279],{},[143,141280,141281],{},"左侧focus模块制作",[19,141283],{"style":21,"src":141284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[24,141286,466],{},[303,141288,141289],{"className":469,"code":129636,"language":471,"meta":308,"style":308},[119,141290,141291,141299,141309,141319],{"__ignoreMap":308},[312,141292,141293,141295,141297],{"class":314,"line":315},[312,141294,55605],{"class":328},[312,141296,63678],{"class":332},[312,141298,483],{"class":324},[312,141300,141301,141303,141305,141307],{"class":314,"line":171},[312,141302,129651],{"class":488},[312,141304,492],{"class":324},[312,141306,56671],{"class":488},[312,141308,498],{"class":324},[312,141310,141311,141313,141315,141317],{"class":314,"line":274},[312,141312,72571],{"class":488},[312,141314,492],{"class":324},[312,141316,56521],{"class":488},[312,141318,498],{"class":324},[312,141320,141321],{"class":314,"line":298},[312,141322,515],{"class":324},[24,141324,518],{},[303,141326,141327],{"className":469,"code":129636,"language":471,"meta":308,"style":308},[119,141328,141329,141337,141347,141357],{"__ignoreMap":308},[312,141330,141331,141333,141335],{"class":314,"line":315},[312,141332,55605],{"class":328},[312,141334,63678],{"class":332},[312,141336,483],{"class":324},[312,141338,141339,141341,141343,141345],{"class":314,"line":171},[312,141340,129651],{"class":488},[312,141342,492],{"class":324},[312,141344,56671],{"class":488},[312,141346,498],{"class":324},[312,141348,141349,141351,141353,141355],{"class":314,"line":274},[312,141350,72571],{"class":488},[312,141352,492],{"class":324},[312,141354,56521],{"class":488},[312,141356,498],{"class":324},[312,141358,141359],{"class":314,"line":298},[312,141360,515],{"class":324},[24,141362,141363],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[140,141365,141366],{"start":171},[143,141367,141368],{},"右侧newsflash模块制作",[19,141370],{"style":21,"src":141371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[24,141373,141374],{},"右侧的模块 分为上中下三个盒子",[24,141376,141377],{},"结构代码：",[303,141379,141380],{"className":305,"code":135779,"language":307,"meta":308,"style":308},[119,141381,141382],{"__ignoreMap":308},[312,141383,141384,141386,141388,141390,141392,141394,141396,141398,141400,141402,141404,141406],{"class":314,"line":315},[312,141385,325],{"class":324},[312,141387,19],{"class":328},[312,141389,57021],{"class":332},[312,141391,336],{"class":324},[312,141393,135794],{"class":339},[312,141395,57029],{"class":332},[312,141397,336],{"class":324},[312,141399,135801],{"class":339},[312,141401,135804],{"class":332},[312,141403,336],{"class":324},[312,141405,135809],{"class":339},[312,141407,343],{"class":324},[24,141409,141410,141411,141414],{},"1 号盒子为 ",[119,141412,141413],{},"news"," 新闻模块 高度为 165px",[19,141416],{"style":21,"src":141417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[24,141419,141420,141421,141424,141425],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[119,141422,141423],{},"news-hd","，下面是 ",[119,141426,141427],{},"news-bd",[24,141429,141377],{},[303,141431,141432],{"className":305,"code":306,"language":307,"meta":308,"style":308},[119,141433,141434,141438,141452,141456],{"__ignoreMap":308},[312,141435,141436],{"class":314,"line":315},[312,141437,319],{"class":318},[312,141439,141440,141442,141444,141446,141448,141450],{"class":314,"line":171},[312,141441,325],{"class":324},[312,141443,329],{"class":328},[312,141445,333],{"class":332},[312,141447,336],{"class":324},[312,141449,340],{"class":339},[312,141451,343],{"class":324},[312,141453,141454],{"class":314,"line":274},[312,141455,348],{"class":324},[312,141457,141458,141460,141462],{"class":314,"line":298},[312,141459,353],{"class":324},[312,141461,329],{"class":328},[312,141463,343],{"class":324},[24,141465,141466],{},"样式代码：",[303,141468,141469],{"className":305,"code":306,"language":307,"meta":308,"style":308},[119,141470,141471,141475,141489,141493],{"__ignoreMap":308},[312,141472,141473],{"class":314,"line":315},[312,141474,319],{"class":318},[312,141476,141477,141479,141481,141483,141485,141487],{"class":314,"line":171},[312,141478,325],{"class":324},[312,141480,329],{"class":328},[312,141482,333],{"class":332},[312,141484,336],{"class":324},[312,141486,340],{"class":339},[312,141488,343],{"class":324},[312,141490,141491],{"class":314,"line":274},[312,141492,348],{"class":324},[312,141494,141495,141497,141499],{"class":314,"line":298},[312,141496,353],{"class":324},[312,141498,329],{"class":328},[312,141500,343],{"class":324},[24,141502,141503,141504,141506],{},"上面是",[119,141505,141423],{},"，设置高度是 33px，设置下边框",[243,141508,141509,141515],{},[143,141510,141511,141512,141514],{},"里面放一个",[119,141513,1505],{}," 标题",[143,141516,141517,141518,141520,141521,141523],{},"放一个a",[119,141519,104462],{},"，内容是 更多，然后让 ",[119,141522,164],{}," 进行右浮动，三角用伪元素设置字体图标就好",[24,141525,141377],{},[303,141527,141528],{"className":469,"code":470,"language":471,"meta":308,"style":308},[119,141529,141530,141538,141548,141558],{"__ignoreMap":308},[312,141531,141532,141534,141536],{"class":314,"line":315},[312,141533,329],{"class":328},[312,141535,480],{"class":332},[312,141537,483],{"class":324},[312,141539,141540,141542,141544,141546],{"class":314,"line":171},[312,141541,489],{"class":488},[312,141543,492],{"class":324},[312,141545,495],{"class":339},[312,141547,498],{"class":324},[312,141549,141550,141552,141554,141556],{"class":314,"line":274},[312,141551,503],{"class":488},[312,141553,492],{"class":324},[312,141555,508],{"class":488},[312,141557,498],{"class":324},[312,141559,141560],{"class":314,"line":298},[312,141561,515],{"class":324},[24,141563,141466],{},[303,141565,141566],{"className":469,"code":470,"language":471,"meta":308,"style":308},[119,141567,141568,141576,141586,141596],{"__ignoreMap":308},[312,141569,141570,141572,141574],{"class":314,"line":315},[312,141571,329],{"class":328},[312,141573,480],{"class":332},[312,141575,483],{"class":324},[312,141577,141578,141580,141582,141584],{"class":314,"line":171},[312,141579,489],{"class":488},[312,141581,492],{"class":324},[312,141583,495],{"class":339},[312,141585,498],{"class":324},[312,141587,141588,141590,141592,141594],{"class":314,"line":274},[312,141589,503],{"class":488},[312,141591,492],{"class":324},[312,141593,508],{"class":488},[312,141595,498],{"class":324},[312,141597,141598],{"class":314,"line":298},[312,141599,515],{"class":324},[24,141601,141602,141603],{},"下面是",[119,141604,141427],{},[243,141606,141607,141615],{},[143,141608,141609,141610,1167,141612,141614],{},"里面包含 ",[119,141611,243],{},[119,141613,143],{}," 还有链接",[143,141616,1792,141617,141619,141620,141622,141623,141626,141627],{},[119,141618,143],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[119,141621,132968],{}," 2.设置 ",[119,141624,141625],{},"white-space: nowrap;"," 3. 设置 ",[119,141628,141629],{},"text-overflow: ellipsis;",[24,141631,141377],{},[303,141633,141635],{"className":469,"code":141634,"language":471,"meta":308,"style":308},"div {\n  overflow: hidden;\n}\n",[119,141636,141637,141643,141654],{"__ignoreMap":308},[312,141638,141639,141641],{"class":314,"line":315},[312,141640,329],{"class":328},[312,141642,483],{"class":324},[312,141644,141645,141648,141650,141652],{"class":314,"line":171},[312,141646,141647],{"class":488},"  overflow",[312,141649,492],{"class":324},[312,141651,63494],{"class":488},[312,141653,498],{"class":324},[312,141655,141656],{"class":314,"line":274},[312,141657,515],{"class":324},[24,141659,141466],{},[303,141661,141662],{"className":469,"code":141634,"language":471,"meta":308,"style":308},[119,141663,141664,141670,141680],{"__ignoreMap":308},[312,141665,141666,141668],{"class":314,"line":315},[312,141667,329],{"class":328},[312,141669,483],{"class":324},[312,141671,141672,141674,141676,141678],{"class":314,"line":171},[312,141673,141647],{"class":488},[312,141675,492],{"class":324},[312,141677,63494],{"class":488},[312,141679,498],{"class":324},[312,141681,141682],{"class":314,"line":274},[312,141683,515],{"class":324},[24,141685,141686,141687,141690],{},"2 号盒子为 ",[119,141688,141689],{},"lifeservice"," 生活服务模块 高度为 209px",[19,141692],{"style":21,"src":141693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[243,141695,141696,141699,141709,141733,141744],{},[143,141697,141698],{},"设置边框（左右下边框）",[143,141700,141701,141702,141705,141706,141708],{},"里面的内容 是 ",[119,141703,141704],{},"ul > 12*li","，给",[119,141707,143],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[143,141710,141711,141712],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[243,141713,141714,141719,141728],{},[143,141715,141716,141718],{},[119,141717,141689],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[143,141720,141721,141722,141724,141725,141727],{},"可以让 ",[119,141723,141689],{}," 里面的 ",[119,141726,243],{}," 宽度为 252，就可以装的下 4 个 小 li",[143,141729,141730,141732],{},[119,141731,141689],{}," 盒子 overflow 隐藏多余的部分就可以了",[143,141734,118236,141735,141737,141738,141740,141741,141743],{},[119,141736,143],{}," 里面放一个 ",[119,141739,2386],{},"（里面放图标），下面的文本用 ",[119,141742,24],{}," 标签包裹",[143,141745,1182,141746,141748,141749,141751,141752,1217,141754,141757],{},[119,141747,2386],{}," 设置 24px宽和28px的高（注意 ",[119,141750,2386],{}," 是行内元素， 转成行内块），给 ",[119,141753,143],{},[119,141755,141756],{},"text-align:center"," 让里面内容居中显示",[24,141759,141377],{},[303,141761,141763],{"className":469,"code":141762,"language":471,"meta":308,"style":308},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[119,141764,141765,141783,141788,141798],{"__ignoreMap":308},[312,141766,141767,141769,141771,141773,141775,141777,141779,141781],{"class":314,"line":315},[312,141768,312],{"class":328},[312,141770,733],{"class":324},[312,141772,164],{"class":328},[312,141774,733],{"class":324},[312,141776,25350],{"class":328},[312,141778,733],{"class":324},[312,141780,27],{"class":328},[312,141782,483],{"class":324},[312,141784,141785],{"class":314,"line":171},[312,141786,141787],{"class":318},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[312,141789,141790,141792,141794,141796],{"class":314,"line":274},[312,141791,503],{"class":488},[312,141793,492],{"class":324},[312,141795,129990],{"class":488},[312,141797,498],{"class":324},[312,141799,141800],{"class":314,"line":298},[312,141801,515],{"class":324},[24,141803,141466],{},[303,141805,141806],{"className":469,"code":141762,"language":471,"meta":308,"style":308},[119,141807,141808,141826,141830,141840],{"__ignoreMap":308},[312,141809,141810,141812,141814,141816,141818,141820,141822,141824],{"class":314,"line":315},[312,141811,312],{"class":328},[312,141813,733],{"class":324},[312,141815,164],{"class":328},[312,141817,733],{"class":324},[312,141819,25350],{"class":328},[312,141821,733],{"class":324},[312,141823,27],{"class":328},[312,141825,483],{"class":324},[312,141827,141828],{"class":314,"line":171},[312,141829,141787],{"class":318},[312,141831,141832,141834,141836,141838],{"class":314,"line":274},[312,141833,503],{"class":488},[312,141835,492],{"class":324},[312,141837,129990],{"class":488},[312,141839,498],{"class":324},[312,141841,141842],{"class":314,"line":298},[312,141843,515],{"class":324},[24,141845,141846,141847,141850],{},"3 号盒子为 ",[119,141848,141849],{},"bargain"," 特价商品",[243,141852,141853],{},[143,141854,141855],{},"这个比较简单，直接插入一张图片即可",[24,141857,141377],{},[303,141859,141860],{"className":305,"code":135779,"language":307,"meta":308,"style":308},[119,141861,141862],{"__ignoreMap":308},[312,141863,141864,141866,141868,141870,141872,141874,141876,141878,141880,141882,141884,141886],{"class":314,"line":315},[312,141865,325],{"class":324},[312,141867,19],{"class":328},[312,141869,57021],{"class":332},[312,141871,336],{"class":324},[312,141873,135794],{"class":339},[312,141875,57029],{"class":332},[312,141877,336],{"class":324},[312,141879,135801],{"class":339},[312,141881,135804],{"class":332},[312,141883,336],{"class":324},[312,141885,135809],{"class":339},[312,141887,343],{"class":324},[24,141889,141466],{},[303,141891,141892],{"className":305,"code":135779,"language":307,"meta":308,"style":308},[119,141893,141894],{"__ignoreMap":308},[312,141895,141896,141898,141900,141902,141904,141906,141908,141910,141912,141914,141916,141918],{"class":314,"line":315},[312,141897,325],{"class":324},[312,141899,19],{"class":328},[312,141901,57021],{"class":332},[312,141903,336],{"class":324},[312,141905,135794],{"class":339},[312,141907,57029],{"class":332},[312,141909,336],{"class":324},[312,141911,135801],{"class":339},[312,141913,135804],{"class":332},[312,141915,336],{"class":324},[312,141917,135809],{"class":339},[312,141919,343],{"class":324},[69,141921,141923],{"id":141922},"_1612-推荐模块制作","16.1.2 推荐模块制作",[19,141925],{"style":21,"src":141926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[24,141928,141929,141930,141933],{},"大盒子 ",[119,141931,141932],{},"recom"," 推荐模块 recommend",[243,141935,141936],{},[143,141937,141938,141939,141941,141942,141945],{},"给这个 ",[119,141940,141932],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[119,141943,141944],{},"#ebebeb","），设置距离上边 12px",[24,141947,141377],{},[303,141949,141951],{"className":469,"code":141950,"language":471,"meta":308,"style":308},"div {\n  background-color: #f0f0f0;\n}\n",[119,141952,141953,141959,141970],{"__ignoreMap":308},[312,141954,141955,141957],{"class":314,"line":315},[312,141956,329],{"class":328},[312,141958,483],{"class":324},[312,141960,141961,141963,141965,141968],{"class":314,"line":171},[312,141962,72651],{"class":488},[312,141964,492],{"class":324},[312,141966,141967],{"class":488},"#f0f0f0",[312,141969,498],{"class":324},[312,141971,141972],{"class":314,"line":274},[312,141973,515],{"class":324},[24,141975,141466],{},[303,141977,141978],{"className":469,"code":141950,"language":471,"meta":308,"style":308},[119,141979,141980,141986,141996],{"__ignoreMap":308},[312,141981,141982,141984],{"class":314,"line":315},[312,141983,329],{"class":328},[312,141985,483],{"class":324},[312,141987,141988,141990,141992,141994],{"class":314,"line":171},[312,141989,72651],{"class":488},[312,141991,492],{"class":324},[312,141993,141967],{"class":488},[312,141995,498],{"class":324},[312,141997,141998],{"class":314,"line":274},[312,141999,515],{"class":324},[24,142001,142002],{},"里面包含 2 个盒子， 浮动即可",[24,142004,141377],{},[303,142006,142007],{"className":469,"code":1355,"language":471,"meta":308,"style":308},[119,142008,142009,142015,142025],{"__ignoreMap":308},[312,142010,142011,142013],{"class":314,"line":315},[312,142012,1362],{"class":332},[312,142014,483],{"class":324},[312,142016,142017,142019,142021,142023],{"class":314,"line":171},[312,142018,1369],{"class":488},[312,142020,492],{"class":324},[312,142022,1374],{"class":488},[312,142024,498],{"class":324},[312,142026,142027],{"class":314,"line":274},[312,142028,515],{"class":324},[24,142030,142031,142032],{},"1 号盒子 ",[119,142033,142034],{},"recom_hd",[243,142036,142037,142040],{},[143,142038,142039],{},"设置宽度205px，高度163px",[143,142041,141511,142042,142044],{},[119,142043,19],{},"标签，插入图片即可",[24,142046,141377],{},[303,142048,142049],{"className":305,"code":135779,"language":307,"meta":308,"style":308},[119,142050,142051],{"__ignoreMap":308},[312,142052,142053,142055,142057,142059,142061,142063,142065,142067,142069,142071,142073,142075],{"class":314,"line":315},[312,142054,325],{"class":324},[312,142056,19],{"class":328},[312,142058,57021],{"class":332},[312,142060,336],{"class":324},[312,142062,135794],{"class":339},[312,142064,57029],{"class":332},[312,142066,336],{"class":324},[312,142068,135801],{"class":339},[312,142070,135804],{"class":332},[312,142072,336],{"class":324},[312,142074,135809],{"class":339},[312,142076,343],{"class":324},[24,142078,141466],{},[303,142080,142081],{"className":305,"code":135779,"language":307,"meta":308,"style":308},[119,142082,142083],{"__ignoreMap":308},[312,142084,142085,142087,142089,142091,142093,142095,142097,142099,142101,142103,142105,142107],{"class":314,"line":315},[312,142086,325],{"class":324},[312,142088,19],{"class":328},[312,142090,57021],{"class":332},[312,142092,336],{"class":324},[312,142094,135794],{"class":339},[312,142096,57029],{"class":332},[312,142098,336],{"class":324},[312,142100,135801],{"class":339},[312,142102,135804],{"class":332},[312,142104,336],{"class":324},[312,142106,135809],{"class":339},[312,142108,343],{"class":324},[24,142110,142111,142112,142115],{},"2 号盒子 ",[119,142113,142114],{},"recom_bd"," ，注意里面的小竖线",[243,142117,142118,142129,142132,142137,142142],{},[143,142119,142120,142121,142123,142124,142126,142127],{},"右侧结构里面放 ",[119,142122,243],{}," 包含 4个 ",[119,142125,143],{},"，每个li里面包含一个",[119,142128,19],{},[143,142130,142131],{},"直接利用切片工具把里面的内容当成一张图片",[143,142133,1182,142134,142136],{},[119,142135,143],{}," 设置浮动",[143,142138,1182,142139,142141],{},[119,142140,19],{}," 设置宽高，宽度 248px，高度 163px",[143,142143,142144,142145,141705,142148,142150,142151,142153,142154],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[119,142146,142147],{},"top 10px",[119,142149,143],{},"设置相对定位（注意，最后一个",[119,142152,143],{},"不用设置伪元素），可以利用 ",[119,142155,142156],{},"nth-child(-n+3){...}",[24,142158,141377],{},[303,142160,142161],{"className":469,"code":470,"language":471,"meta":308,"style":308},[119,142162,142163,142171,142181,142191],{"__ignoreMap":308},[312,142164,142165,142167,142169],{"class":314,"line":315},[312,142166,329],{"class":328},[312,142168,480],{"class":332},[312,142170,483],{"class":324},[312,142172,142173,142175,142177,142179],{"class":314,"line":171},[312,142174,489],{"class":488},[312,142176,492],{"class":324},[312,142178,495],{"class":339},[312,142180,498],{"class":324},[312,142182,142183,142185,142187,142189],{"class":314,"line":274},[312,142184,503],{"class":488},[312,142186,492],{"class":324},[312,142188,508],{"class":488},[312,142190,498],{"class":324},[312,142192,142193],{"class":314,"line":298},[312,142194,515],{"class":324},[24,142196,141466],{},[303,142198,142199],{"className":469,"code":470,"language":471,"meta":308,"style":308},[119,142200,142201,142209,142219,142229],{"__ignoreMap":308},[312,142202,142203,142205,142207],{"class":314,"line":315},[312,142204,329],{"class":328},[312,142206,480],{"class":332},[312,142208,483],{"class":324},[312,142210,142211,142213,142215,142217],{"class":314,"line":171},[312,142212,489],{"class":488},[312,142214,492],{"class":324},[312,142216,495],{"class":339},[312,142218,498],{"class":324},[312,142220,142221,142223,142225,142227],{"class":314,"line":274},[312,142222,503],{"class":488},[312,142224,492],{"class":324},[312,142226,508],{"class":488},[312,142228,498],{"class":324},[312,142230,142231],{"class":314,"line":298},[312,142232,515],{"class":324},[69,142234,142236],{"id":142235},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[19,142238],{"style":21,"src":142239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[24,142241,142242],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[24,142244,142245],{},"第一楼是家用电器模块： 里面包含两个盒子",[24,142247,142248,142251],{},[119,142249,142250],{},"box_hd"," 制作",[24,142253,142031,142254,142256],{},[119,142255,142250],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[19,142258],{"style":21,"src":142259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[243,142261,142262,142267,142272,142275],{},[143,142263,142264,142266],{},[119,142265,142250],{}," 给 30px 的高度，2个像素的下边框",[143,142268,142269,142270],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[119,142271,1193],{},[143,142273,142274],{},"左侧盒左浮动，右侧盒子右浮动",[143,142276,142277,142279,142280,142282],{},[119,142278,164],{},"标签之间的距离用左右的",[119,142281,1340],{},"撑开即可",[24,142284,142285],{},"结构代码",[303,142287,142288],{"className":469,"code":1355,"language":471,"meta":308,"style":308},[119,142289,142290,142296,142306],{"__ignoreMap":308},[312,142291,142292,142294],{"class":314,"line":315},[312,142293,1362],{"class":332},[312,142295,483],{"class":324},[312,142297,142298,142300,142302,142304],{"class":314,"line":171},[312,142299,1369],{"class":488},[312,142301,492],{"class":324},[312,142303,1374],{"class":488},[312,142305,498],{"class":324},[312,142307,142308],{"class":314,"line":274},[312,142309,515],{"class":324},[24,142311,142312],{},"样式代码",[303,142314,142315],{"className":469,"code":1355,"language":471,"meta":308,"style":308},[119,142316,142317,142323,142333],{"__ignoreMap":308},[312,142318,142319,142321],{"class":314,"line":315},[312,142320,1362],{"class":332},[312,142322,483],{"class":324},[312,142324,142325,142327,142329,142331],{"class":314,"line":171},[312,142326,1369],{"class":488},[312,142328,492],{"class":324},[312,142330,1374],{"class":488},[312,142332,498],{"class":324},[312,142334,142335],{"class":314,"line":274},[312,142336,515],{"class":324},[24,142338,142339,142251],{},[119,142340,142341],{},"box_bd",[24,142343,142344],{},"2 号盒子 box_bd，不要给高度",[19,142346],{"style":21,"src":142347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[24,142349,142350],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[24,142352,142353],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[24,142355,142356],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[243,142358,142359,142371,142387],{},[143,142360,142361,142363,142364,142367,142368,142370],{},[119,142362,142341],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[119,142365,142366],{},"tab_content","，在",[119,142369,142366],{}," 里面包裹tab选项卡对应的内容",[143,142372,142373,142374,142377,142378,142380,142381,142383,142384,142386],{},"内容被一个大盒子包裹（",[119,142375,142376],{},"tab_list_item","），里面是 ",[119,142379,243],{}," 包裹 5个 ",[119,142382,143],{},"，每个",[119,142385,143],{},"设置对应的宽度，然后设置浮动",[143,142388,142389,142390,142392,142393,142395,142396],{},"而这5个",[119,142391,143],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[119,142394,143],{},"设置",[243,142397,142398,142416,142419],{},[143,142399,142400,142401,142403,142404,142406,142407,142409,142410,142412,142413,142415],{},"第一个小 ",[119,142402,143],{}," 分为上下结构，上面是 ",[119,142405,243],{}," 包裹 ",[119,142408,143],{}," ，",[119,142411,143],{},"里面包裹 ",[119,142414,164],{},"，下面插入一张图片",[143,142417,142418],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[143,142420,142421,142422,142424,142425,142427,142428,142430],{},"后面的小 ",[119,142423,143],{}," 里面先放一个",[119,142426,164],{},"标签，然后在",[119,142429,164],{},"标签里面插入图片即可",[24,142432,142285],{},[303,142434,142435],{"className":305,"code":135779,"language":307,"meta":308,"style":308},[119,142436,142437],{"__ignoreMap":308},[312,142438,142439,142441,142443,142445,142447,142449,142451,142453,142455,142457,142459,142461],{"class":314,"line":315},[312,142440,325],{"class":324},[312,142442,19],{"class":328},[312,142444,57021],{"class":332},[312,142446,336],{"class":324},[312,142448,135794],{"class":339},[312,142450,57029],{"class":332},[312,142452,336],{"class":324},[312,142454,135801],{"class":339},[312,142456,135804],{"class":332},[312,142458,336],{"class":324},[312,142460,135809],{"class":339},[312,142462,343],{"class":324},[24,142464,142312],{},[303,142466,142467],{"className":305,"code":135779,"language":307,"meta":308,"style":308},[119,142468,142469],{"__ignoreMap":308},[312,142470,142471,142473,142475,142477,142479,142481,142483,142485,142487,142489,142491,142493],{"class":314,"line":315},[312,142472,325],{"class":324},[312,142474,19],{"class":328},[312,142476,57021],{"class":332},[312,142478,336],{"class":324},[312,142480,135794],{"class":339},[312,142482,57029],{"class":332},[312,142484,336],{"class":324},[312,142486,135801],{"class":339},[312,142488,135804],{"class":332},[312,142490,336],{"class":324},[312,142492,135809],{"class":339},[312,142494,343],{"class":324},[24,142496,142497],{},"tab栏切换需求！！！！！！介绍：",[19,142499],{"style":21,"src":142500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[243,142502,142503,142511,142517,142520],{},[143,142504,142505,142508,142509],{},[119,142506,142507],{},"tab","栏的布局是 ",[119,142510,1193],{},[143,142512,142513,142514,142516],{},"有多少个",[119,142515,142507],{},"选项卡，那么对应就有多少个内容",[143,142518,142519],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[143,142521,142522,142523,142526,142527,142529,142530,142532],{},"等后面我们学习了",[119,142524,142525],{},"js","之后，我们就会配合",[119,142528,142525],{},"来实现，",[119,142531,142507],{},"栏的切换",[14,142534,142536],{"id":142535},"_162-列表制作","16.2 列表制作",[69,142538,142540],{"id":142539},"_1621-准备工作","16.2.1 准备工作",[243,142542,142543,142546,142549,142552],{},[143,142544,142545],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[143,142547,142548],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[143,142550,142551],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[143,142553,142554],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[69,142556,142558,142559,1167,142561,142563],{"id":142557},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[119,142560,133307],{},[119,142562,1143],{}," 修改",[19,142565],{"style":21,"src":142566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[243,142568,142569],{},[143,142570,142571],{},"秒杀盒子 sk（ second kill ） 定位即可",[24,142573,141377],{},[303,142575,142576],{"className":469,"code":924,"language":471,"meta":308,"style":308},[119,142577,142578,142582,142596,142600,142614,142618,142632,142636,142650,142654],{"__ignoreMap":308},[312,142579,142580],{"class":314,"line":315},[312,142581,931],{"class":318},[312,142583,142584,142586,142588,142590,142592,142594],{"class":314,"line":171},[312,142585,936],{"class":332},[312,142587,939],{"class":324},[312,142589,942],{"class":488},[312,142591,492],{"class":324},[312,142593,947],{"class":488},[312,142595,950],{"class":324},[312,142597,142598],{"class":314,"line":274},[312,142599,955],{"class":318},[312,142601,142602,142604,142606,142608,142610,142612],{"class":314,"line":298},[312,142603,960],{"class":332},[312,142605,939],{"class":324},[312,142607,942],{"class":488},[312,142609,492],{"class":324},[312,142611,969],{"class":488},[312,142613,950],{"class":324},[312,142615,142616],{"class":314,"line":974},[312,142617,977],{"class":318},[312,142619,142620,142622,142624,142626,142628,142630],{"class":314,"line":980},[312,142621,983],{"class":332},[312,142623,939],{"class":324},[312,142625,942],{"class":488},[312,142627,492],{"class":324},[312,142629,992],{"class":488},[312,142631,950],{"class":324},[312,142633,142634],{"class":314,"line":997},[312,142635,1000],{"class":318},[312,142637,142638,142640,142642,142644,142646,142648],{"class":314,"line":1003},[312,142639,1006],{"class":332},[312,142641,939],{"class":324},[312,142643,942],{"class":488},[312,142645,492],{"class":324},[312,142647,1015],{"class":488},[312,142649,950],{"class":324},[312,142651,142652],{"class":314,"line":1020},[312,142653,1023],{"class":318},[312,142655,142656,142658,142660,142662,142664,142666],{"class":314,"line":1026},[312,142657,1029],{"class":332},[312,142659,939],{"class":324},[312,142661,942],{"class":488},[312,142663,492],{"class":324},[312,142665,1038],{"class":488},[312,142667,950],{"class":324},[24,142669,141466],{},[303,142671,142672],{"className":469,"code":924,"language":471,"meta":308,"style":308},[119,142673,142674,142678,142692,142696,142710,142714,142728,142732,142746,142750],{"__ignoreMap":308},[312,142675,142676],{"class":314,"line":315},[312,142677,931],{"class":318},[312,142679,142680,142682,142684,142686,142688,142690],{"class":314,"line":171},[312,142681,936],{"class":332},[312,142683,939],{"class":324},[312,142685,942],{"class":488},[312,142687,492],{"class":324},[312,142689,947],{"class":488},[312,142691,950],{"class":324},[312,142693,142694],{"class":314,"line":274},[312,142695,955],{"class":318},[312,142697,142698,142700,142702,142704,142706,142708],{"class":314,"line":298},[312,142699,960],{"class":332},[312,142701,939],{"class":324},[312,142703,942],{"class":488},[312,142705,492],{"class":324},[312,142707,969],{"class":488},[312,142709,950],{"class":324},[312,142711,142712],{"class":314,"line":974},[312,142713,977],{"class":318},[312,142715,142716,142718,142720,142722,142724,142726],{"class":314,"line":980},[312,142717,983],{"class":332},[312,142719,939],{"class":324},[312,142721,942],{"class":488},[312,142723,492],{"class":324},[312,142725,992],{"class":488},[312,142727,950],{"class":324},[312,142729,142730],{"class":314,"line":997},[312,142731,1000],{"class":318},[312,142733,142734,142736,142738,142740,142742,142744],{"class":314,"line":1003},[312,142735,1006],{"class":332},[312,142737,939],{"class":324},[312,142739,942],{"class":488},[312,142741,492],{"class":324},[312,142743,1015],{"class":488},[312,142745,950],{"class":324},[312,142747,142748],{"class":314,"line":1020},[312,142749,1023],{"class":318},[312,142751,142752,142754,142756,142758,142760,142762],{"class":314,"line":1026},[312,142753,1029],{"class":332},[312,142755,939],{"class":324},[312,142757,942],{"class":488},[312,142759,492],{"class":324},[312,142761,1038],{"class":488},[312,142763,950],{"class":324},[243,142765,142766,142777],{},[143,142767,142768,142769,142772,142773,1167,142775],{},"1 号盒子左侧浮动 ",[119,142770,142771],{},"sk_list"," 里面包含 ",[119,142774,243],{},[119,142776,143],{},[143,142778,142779,142780,142772,142783,1167,142785],{},"2 号盒子左侧浮动 ",[119,142781,142782],{},"sk_con",[119,142784,243],{},[119,142786,143],{},[24,142788,141377],{},[303,142790,142791],{"className":469,"code":1355,"language":471,"meta":308,"style":308},[119,142792,142793,142799,142809],{"__ignoreMap":308},[312,142794,142795,142797],{"class":314,"line":315},[312,142796,1362],{"class":332},[312,142798,483],{"class":324},[312,142800,142801,142803,142805,142807],{"class":314,"line":171},[312,142802,1369],{"class":488},[312,142804,492],{"class":324},[312,142806,1374],{"class":488},[312,142808,498],{"class":324},[312,142810,142811],{"class":314,"line":274},[312,142812,515],{"class":324},[24,142814,141466],{},[303,142816,142817],{"className":469,"code":1355,"language":471,"meta":308,"style":308},[119,142818,142819,142825,142835],{"__ignoreMap":308},[312,142820,142821,142823],{"class":314,"line":315},[312,142822,1362],{"class":332},[312,142824,483],{"class":324},[312,142826,142827,142829,142831,142833],{"class":314,"line":171},[312,142828,1369],{"class":488},[312,142830,492],{"class":324},[312,142832,1374],{"class":488},[312,142834,498],{"class":324},[312,142836,142837],{"class":314,"line":274},[312,142838,515],{"class":324},[69,142840,142842,142843],{"id":142841},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[119,142844,142845],{},"sk_container",[19,142847],{"style":21,"src":142848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[243,142850,142851,142856],{},[143,142852,142031,142853,142855],{},[119,142854,142845],{}," 给宽度 1200，不要给高度",[143,142857,142858],{},"一定不要忘记清除浮动",[24,142860,141377],{},[303,142862,142863],{"className":469,"code":1355,"language":471,"meta":308,"style":308},[119,142864,142865,142871,142881],{"__ignoreMap":308},[312,142866,142867,142869],{"class":314,"line":315},[312,142868,1362],{"class":332},[312,142870,483],{"class":324},[312,142872,142873,142875,142877,142879],{"class":314,"line":171},[312,142874,1369],{"class":488},[312,142876,492],{"class":324},[312,142878,1374],{"class":488},[312,142880,498],{"class":324},[312,142882,142883],{"class":314,"line":274},[312,142884,515],{"class":324},[140,142886,142887],{},[143,142888,142889],{},"sk_hd制作",[243,142891,142892],{},[143,142893,142111,142894,142897],{},[119,142895,142896],{},"sk_hd"," ，插入图片即可",[24,142899,141377],{},[303,142901,142902],{"className":305,"code":135779,"language":307,"meta":308,"style":308},[119,142903,142904],{"__ignoreMap":308},[312,142905,142906,142908,142910,142912,142914,142916,142918,142920,142922,142924,142926,142928],{"class":314,"line":315},[312,142907,325],{"class":324},[312,142909,19],{"class":328},[312,142911,57021],{"class":332},[312,142913,336],{"class":324},[312,142915,135794],{"class":339},[312,142917,57029],{"class":332},[312,142919,336],{"class":324},[312,142921,135801],{"class":339},[312,142923,135804],{"class":332},[312,142925,336],{"class":324},[312,142927,135809],{"class":339},[312,142929,343],{"class":324},[140,142931,142932],{"start":171},[143,142933,142934],{},"sk_bd制作",[243,142936,142937],{},[143,142938,142939,142940,142943,142944,1167,142946,142948],{},"3 号盒子 ",[119,142941,142942],{},"sk_bd"," ，里面包含很多的 ",[119,142945,243],{},[119,142947,143],{},[243,142949,142950,142959],{},[143,142951,142952,142953,142955,142956,142958],{},"当鼠标移入到 ",[119,142954,143],{}," 上面的时候显示红色的边框，在这里先给 ",[119,142957,143],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[143,142960,142961,142962,142964,142965,142967,142968,142971,142972,142974],{},"由于给每个 ",[119,142963,143],{}," 都设置了外边距，导致一行的最后一个 ",[119,142966,143],{}," 掉了下来，在这里我们利用 ",[119,142969,142970],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[119,142973,143],{},"，去掉外边距就好了",[24,142976,141377],{},[303,142978,142979],{"className":469,"code":840,"language":471,"meta":308,"style":308},[119,142980,142981,142987,142999],{"__ignoreMap":308},[312,142982,142983,142985],{"class":314,"line":315},[312,142984,329],{"class":328},[312,142986,483],{"class":324},[312,142988,142989,142991,142993,142995,142997],{"class":314,"line":171},[312,142990,853],{"class":488},[312,142992,492],{"class":324},[312,142994,858],{"class":488},[312,142996,861],{"class":488},[312,142998,498],{"class":324},[312,143000,143001],{"class":314,"line":274},[312,143002,515],{"class":324},[24,143004,141466],{},[303,143006,143007],{"className":469,"code":840,"language":471,"meta":308,"style":308},[119,143008,143009,143015,143027],{"__ignoreMap":308},[312,143010,143011,143013],{"class":314,"line":315},[312,143012,329],{"class":328},[312,143014,483],{"class":324},[312,143016,143017,143019,143021,143023,143025],{"class":314,"line":171},[312,143018,853],{"class":488},[312,143020,492],{"class":324},[312,143022,858],{"class":488},[312,143024,861],{"class":488},[312,143026,498],{"class":324},[312,143028,143029],{"class":314,"line":274},[312,143030,515],{"class":324},[14,143032,143034],{"id":143033},"_163-注册页面制作","16.3 注册页面制作",[19,143036],{"style":21,"src":143037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[24,143039,143040,143042],{},[27,143041,10828],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[19,143044],{"style":21,"src":143045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[69,143047,143049],{"id":143048},"_1631-准备工作","16.3.1 准备工作",[243,143051,143052,143055],{},[143,143053,143054],{},"创建register.html，引入 base.css，引入favicon图标",[143,143056,143057],{},"创建register.css ，在html页面进行引入",[69,143059,143061,143062,143064],{"id":143060},"_1632-header-头部实现","16.3.2 ",[119,143063,133307],{}," 头部实现",[243,143066,143067,143070],{},[143,143068,143069],{},"整个内容用 版心 进行包裹",[143,143071,143072],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[24,143074,141377],{},[303,143076,143077],{"className":305,"code":135779,"language":307,"meta":308,"style":308},[119,143078,143079],{"__ignoreMap":308},[312,143080,143081,143083,143085,143087,143089,143091,143093,143095,143097,143099,143101,143103],{"class":314,"line":315},[312,143082,325],{"class":324},[312,143084,19],{"class":328},[312,143086,57021],{"class":332},[312,143088,336],{"class":324},[312,143090,135794],{"class":339},[312,143092,57029],{"class":332},[312,143094,336],{"class":324},[312,143096,135801],{"class":339},[312,143098,135804],{"class":332},[312,143100,336],{"class":324},[312,143102,135809],{"class":339},[312,143104,343],{"class":324},[24,143106,141466],{},[303,143108,143109],{"className":305,"code":135779,"language":307,"meta":308,"style":308},[119,143110,143111],{"__ignoreMap":308},[312,143112,143113,143115,143117,143119,143121,143123,143125,143127,143129,143131,143133,143135],{"class":314,"line":315},[312,143114,325],{"class":324},[312,143116,19],{"class":328},[312,143118,57021],{"class":332},[312,143120,336],{"class":324},[312,143122,135794],{"class":339},[312,143124,57029],{"class":332},[312,143126,336],{"class":324},[312,143128,135801],{"class":339},[312,143130,135804],{"class":332},[312,143132,336],{"class":324},[312,143134,135809],{"class":339},[312,143136,343],{"class":324},[69,143138,143140,143141,143144],{"id":143139},"_1633-registerarea-主体模块实现","16.3.3 ",[119,143142,143143],{},"registerarea"," 主体模块实现",[19,143146],{"style":21,"src":143147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[24,143149,143150],{},"整个大盒子 高度为 522px，设置4个边框",[24,143152,141377],{},[303,143154,143155],{"className":469,"code":1415,"language":471,"meta":308,"style":308},[119,143156,143157,143163,143179],{"__ignoreMap":308},[312,143158,143159,143161],{"class":314,"line":315},[312,143160,329],{"class":328},[312,143162,483],{"class":324},[312,143164,143165,143167,143169,143171,143173,143175,143177],{"class":314,"line":171},[312,143166,1428],{"class":488},[312,143168,492],{"class":324},[312,143170,1433],{"class":488},[312,143172,1437],{"class":1436},[312,143174,1440],{"class":488},[312,143176,1443],{"class":488},[312,143178,498],{"class":324},[312,143180,143181],{"class":314,"line":274},[312,143182,515],{"class":324},[24,143184,141466],{},[303,143186,143187],{"className":469,"code":1415,"language":471,"meta":308,"style":308},[119,143188,143189,143195,143211],{"__ignoreMap":308},[312,143190,143191,143193],{"class":314,"line":315},[312,143192,329],{"class":328},[312,143194,483],{"class":324},[312,143196,143197,143199,143201,143203,143205,143207,143209],{"class":314,"line":171},[312,143198,1428],{"class":488},[312,143200,492],{"class":324},[312,143202,1433],{"class":488},[312,143204,1437],{"class":1436},[312,143206,1440],{"class":488},[312,143208,1443],{"class":488},[312,143210,498],{"class":324},[312,143212,143213],{"class":314,"line":274},[312,143214,515],{"class":324},[24,143216,143217],{},"1号盒子 是一个 h3 标签，放标题",[243,143219,143220],{},[143,143221,143222],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[24,143224,141377],{},[303,143226,143227],{"className":469,"code":1355,"language":471,"meta":308,"style":308},[119,143228,143229,143235,143245],{"__ignoreMap":308},[312,143230,143231,143233],{"class":314,"line":315},[312,143232,1362],{"class":332},[312,143234,483],{"class":324},[312,143236,143237,143239,143241,143243],{"class":314,"line":171},[312,143238,1369],{"class":488},[312,143240,492],{"class":324},[312,143242,1374],{"class":488},[312,143244,498],{"class":324},[312,143246,143247],{"class":314,"line":274},[312,143248,515],{"class":324},[24,143250,141466],{},[303,143252,143253],{"className":469,"code":1355,"language":471,"meta":308,"style":308},[119,143254,143255,143261,143271],{"__ignoreMap":308},[312,143256,143257,143259],{"class":314,"line":315},[312,143258,1362],{"class":332},[312,143260,483],{"class":324},[312,143262,143263,143265,143267,143269],{"class":314,"line":171},[312,143264,1369],{"class":488},[312,143266,492],{"class":324},[312,143268,1374],{"class":488},[312,143270,498],{"class":324},[312,143272,143273],{"class":314,"line":274},[312,143274,515],{"class":324},[24,143276,143277],{},"2号盒子 里面放注册的内容",[243,143279,143280,143283,143292,143306,143319,143322,143325,143343,143357],{},[143,143281,143282],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[143,143284,143285,143286,143288,143289,143291],{},"里面的内容利用 ",[119,143287,243],{}," 包含 ",[119,143290,143],{}," 来实现的（不需要用表格）",[143,143293,1197,143294,143296,143297,143299,143300,143302,143303,143305],{},[119,143295,143],{}," 里面，左侧放 ",[119,143298,35403],{}," 标签， 中间放",[119,143301,55605],{}," 标签， 右侧放 ",[119,143304,312],{}," 提示信息",[143,143307,143308,143309,143311,143312,143314,143315,143318],{},"左侧 ",[119,143310,35403],{},"里面的文字都是右对齐，我们可以给",[119,143313,35403],{},"设置一个宽度（88px），然后利用",[119,143316,143317],{},"text-align"," 来设置右对齐",[143,143320,143321],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[143,143323,143324],{},"右侧 span修饰一下文字颜色",[143,143326,143327,143328],{},"提示信息的样式优化",[243,143329,143330,143333,143336],{},[143,143331,143332],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[143,143334,143335],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[143,143337,143338,143339,143342],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[119,143340,143341],{},"vertical-algin"," 来设置 图片与文字对齐方式",[143,143344,143345,143346],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[243,143347,143348,143354],{},[143,143349,143350,143351,143353],{},"设置 ",[119,143352,25350],{}," 的 左右 12px 的内边距，设置一下文字颜色",[143,143355,143356],{},"分别设置 背景颜色",[143,143358,143359,143360,143362],{},"同意协议 和 完成注册 都是用 ",[119,143361,143],{}," 进行包裹",[24,143364,141377],{},[303,143366,143367],{"className":469,"code":141950,"language":471,"meta":308,"style":308},[119,143368,143369,143375,143385],{"__ignoreMap":308},[312,143370,143371,143373],{"class":314,"line":315},[312,143372,329],{"class":328},[312,143374,483],{"class":324},[312,143376,143377,143379,143381,143383],{"class":314,"line":171},[312,143378,72651],{"class":488},[312,143380,492],{"class":324},[312,143382,141967],{"class":488},[312,143384,498],{"class":324},[312,143386,143387],{"class":314,"line":274},[312,143388,515],{"class":324},[24,143390,141466],{},[303,143392,143393],{"className":469,"code":141950,"language":471,"meta":308,"style":308},[119,143394,143395,143401,143411],{"__ignoreMap":308},[312,143396,143397,143399],{"class":314,"line":315},[312,143398,329],{"class":328},[312,143400,483],{"class":324},[312,143402,143403,143405,143407,143409],{"class":314,"line":171},[312,143404,72651],{"class":488},[312,143406,492],{"class":324},[312,143408,141967],{"class":488},[312,143410,498],{"class":324},[312,143412,143413],{"class":314,"line":274},[312,143414,515],{"class":324},[69,143416,143418],{"id":143417},"_1634-底部实现","16.3.4 底部实现",[24,143420,141377],{},[303,143422,143423],{"className":469,"code":141950,"language":471,"meta":308,"style":308},[119,143424,143425,143431,143441],{"__ignoreMap":308},[312,143426,143427,143429],{"class":314,"line":315},[312,143428,329],{"class":328},[312,143430,483],{"class":324},[312,143432,143433,143435,143437,143439],{"class":314,"line":171},[312,143434,72651],{"class":488},[312,143436,492],{"class":324},[312,143438,141967],{"class":488},[312,143440,498],{"class":324},[312,143442,143443],{"class":314,"line":274},[312,143444,515],{"class":324},[24,143446,141466],{},[303,143448,143449],{"className":305,"code":306,"language":307,"meta":308,"style":308},[119,143450,143451,143455,143469,143473],{"__ignoreMap":308},[312,143452,143453],{"class":314,"line":315},[312,143454,319],{"class":318},[312,143456,143457,143459,143461,143463,143465,143467],{"class":314,"line":171},[312,143458,325],{"class":324},[312,143460,329],{"class":328},[312,143462,333],{"class":332},[312,143464,336],{"class":324},[312,143466,340],{"class":339},[312,143468,343],{"class":324},[312,143470,143471],{"class":314,"line":274},[312,143472,348],{"class":324},[312,143474,143475,143477,143479],{"class":314,"line":298},[312,143476,353],{"class":324},[312,143478,329],{"class":328},[312,143480,343],{"class":324},[14,143482,143484],{"id":143483},"_164-项目总结","16.4 项目总结",[140,143486,143487,143490,143493,143496],{},[143,143488,143489],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[143,143491,143492],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[143,143494,143495],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[143,143497,143498],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[19,143500],{"style":21,"src":143501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[140,143503,143504],{"start":974},[143,143505,143506],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[19,143508],{"style":21,"src":143509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[140,143511,143512],{"start":980},[143,143513,143514],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[19,143516],{"style":21,"src":143517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[303,143519,143520],{"className":305,"code":138431,"language":307,"meta":308,"style":308},[119,143521,143522],{"__ignoreMap":308},[312,143523,143524,143526,143528,143530,143532,143534,143536,143538,143540,143542,143544,143546],{"class":314,"line":315},[312,143525,325],{"class":324},[312,143527,55605],{"class":328},[312,143529,55608],{"class":332},[312,143531,336],{"class":324},[312,143533,64477],{"class":339},[312,143535,16721],{"class":332},[312,143537,336],{"class":324},[312,143539,138452],{"class":339},[312,143541,62801],{"class":332},[312,143543,336],{"class":324},[312,143545,138459],{"class":339},[312,143547,343],{"class":324},[140,143549,143550,143553],{"start":997},[143,143551,143552],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[143,143554,143555],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1856,143557,143558],{},"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":308,"searchDepth":171,"depth":171,"links":143560},[143561,143566,143573,143581],{"id":141187,"depth":171,"text":141188,"children":143562},[143563,143564,143565],{"id":141191,"depth":274,"text":141192},{"id":141922,"depth":274,"text":141923},{"id":142235,"depth":274,"text":142236},{"id":142535,"depth":171,"text":142536,"children":143567},[143568,143569,143571],{"id":142539,"depth":274,"text":142540},{"id":142557,"depth":274,"text":143570},"16.2.2 列表页 header 和 nav 修改",{"id":142841,"depth":274,"text":143572},"16.2.3 列表页主体 sk_container",{"id":143033,"depth":171,"text":143034,"children":143574},[143575,143576,143578,143580],{"id":143048,"depth":274,"text":143049},{"id":143060,"depth":274,"text":143577},"16.3.2 header 头部实现",{"id":143139,"depth":274,"text":143579},"16.3.3 registerarea 主体模块实现",{"id":143417,"depth":274,"text":143418},{"id":143483,"depth":171,"text":143484},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":141179,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143588,"title":143589,"body":143590,"description":1878,"extension":1879,"meta":143698,"navigation":1881,"path":143699,"seo":143700,"stem":143701,"__hash__":143702},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143591,"toc":143693},[143592,143595,143599,143602,143605,143614,143623,143627,143632,143639,143657,143660,143663,143666,143669,143672,143675,143678,143681,143684,143687,143690],[10,143593,143589],{"id":143594},"_17-web服务器与网站发布",[14,143596,143598],{"id":143597},"_171-web服务器","17.1 Web服务器",[24,143600,143601],{},"把自己网站上传到服务器上，可以让其他人访问",[19,143603],{"style":21,"src":143604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[24,143606,143607,143610,143611],{},[27,143608,143609],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[27,143612,143613],{},"Web 服务器等",[24,143615,143616,143617,1167,143620,27536],{},"根据服务器在网络中所在的位置不同，又可分为 ",[27,143618,143619],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[27,143621,143622],{},"远程服务器",[69,143624,143626],{"id":143625},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[24,143628,143629],{},[27,143630,143631],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[24,143633,143634,143635],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[164,143636,143637],{"href":143637,"rel":143638},"http:\u002F\u002Ffree.3v.do\u002F",[168],[243,143640,143641,143644,143647,143654],{},[143,143642,143643],{},"去免费空间网站注册账号。",[143,143645,143646],{},"记录下主机名、用户名、密码、域名。",[143,143648,143649,143650,143653],{},"利用 ",[119,143651,143652],{},"utftp"," 软件 上传网站到远程服务器",[143,143655,143656],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[24,143658,143659],{},"使用软件上传，对上传软件文件进行解压",[19,143661],{"style":21,"src":143662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[19,143664],{"style":21,"src":143665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[24,143667,143668],{},"输入刚刚申请的服务器账号信息：",[19,143670],{"style":21,"src":143671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[19,143673],{"style":21,"src":143674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[19,143676],{"style":21,"src":143677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[19,143679],{"style":21,"src":143680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[24,143682,143683],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[19,143685],{"style":21,"src":143686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[24,143688,143689],{},"浏览器输入域名即可访问",[24,143691,143692],{},"首页一定必须是index",{"title":308,"searchDepth":171,"depth":171,"links":143694},[143695],{"id":143597,"depth":171,"text":143598,"children":143696},[143697],{"id":143625,"depth":274,"text":143626},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143589,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143704,"title":143705,"body":143706,"description":1878,"extension":1879,"meta":144633,"navigation":1881,"path":144634,"seo":144635,"stem":144636,"__hash__":144637},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143707,"toc":144616},[143708,143711,143715,143718,143721,143732,143735,143739,143743,143748,143751,143754,143757,143760,143764,143790,143794,143798,143801,143804,143808,143841,143845,143848,143851,143915,143919,143923,143926,143929,143932,143936,143981,143985,143988,144018,144022,144026,144029,144032,144036,144039,144108,144111,144219,144221,144227,144231,144234,144237,144333,144336,144340,144364,144368,144371,144375,144378,144382,144385,144388,144391,144394,144398,144401,144404,144408,144412,144415,144418,144421,144424,144428,144431,144435,144438,144441,144486,144490,144494,144497,144500,144503,144535,144539,144542,144576,144580,144583,144613],[10,143709,143705],{"id":143710},"_18-2d动画与3d转换",[14,143712,143714],{"id":143713},"_181-css3-2d转换","18.1 CSS3 2D转换",[24,143716,143717],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[24,143719,143720],{},"转换（transform）你可以简单理解为变形",[243,143722,143723,143726,143729],{},[143,143724,143725],{},"移动：translate",[143,143727,143728],{},"旋转：rotate",[143,143730,143731],{},"缩放：scale",[19,143733],{"style":21,"src":143734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[69,143736,143738],{"id":143737},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[23796,143740,143742],{"id":143741},"_18111-translate介绍","18.1.1.1 translate介绍",[24,143744,143745,143746],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[27,143747,134936],{},[19,143749],{"style":21,"src":143750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[24,143752,143753],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[24,143755,143756],{},"对于行内元素无效",[24,143758,143759],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[23796,143761,143763],{"id":143762},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[303,143765,143766],{"className":469,"code":840,"language":471,"meta":308,"style":308},[119,143767,143768,143774,143786],{"__ignoreMap":308},[312,143769,143770,143772],{"class":314,"line":315},[312,143771,329],{"class":328},[312,143773,483],{"class":324},[312,143775,143776,143778,143780,143782,143784],{"class":314,"line":171},[312,143777,853],{"class":488},[312,143779,492],{"class":324},[312,143781,858],{"class":488},[312,143783,861],{"class":488},[312,143785,498],{"class":324},[312,143787,143788],{"class":314,"line":274},[312,143789,515],{"class":324},[69,143791,143793],{"id":143792},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[23796,143795,143797],{"id":143796},"_18121-rotate介绍","18.1.2.1 rotate介绍",[24,143799,143800],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[19,143802],{"style":21,"src":143803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[23796,143805,143807],{"id":143806},"_18122-旋转效果","18.1.2.2 旋转效果",[303,143809,143811],{"className":469,"code":143810,"language":471,"meta":308,"style":308},"div {\n  transform: rotate(45deg);\n}\n",[119,143812,143813,143819,143837],{"__ignoreMap":308},[312,143814,143815,143817],{"class":314,"line":315},[312,143816,329],{"class":328},[312,143818,483],{"class":324},[312,143820,143821,143823,143825,143828,143830,143832,143835],{"class":314,"line":171},[312,143822,138258],{"class":488},[312,143824,492],{"class":324},[312,143826,143827],{"class":488},"rotate",[312,143829,1576],{"class":324},[312,143831,2474],{"class":488},[312,143833,143834],{"class":1436},"deg",[312,143836,4524],{"class":324},[312,143838,143839],{"class":314,"line":274},[312,143840,515],{"class":324},[23796,143842,143844],{"id":143843},"_18123-三角做法","18.1.2.3 三角做法",[24,143846,143847],{},"该下标当经过最外层大盒子时会实现向上反转",[19,143849],{"style":21,"src":143850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[303,143852,143853],{"className":469,"code":136794,"language":471,"meta":308,"style":308},[119,143854,143855,143859,143865,143875,143885,143901,143911],{"__ignoreMap":308},[312,143856,143857],{"class":314,"line":315},[312,143858,136801],{"class":318},[312,143860,143861,143863],{"class":314,"line":171},[312,143862,136806],{"class":332},[312,143864,483],{"class":324},[312,143866,143867,143869,143871,143873],{"class":314,"line":274},[312,143868,1541],{"class":488},[312,143870,492],{"class":324},[312,143872,858],{"class":488},[312,143874,498],{"class":324},[312,143876,143877,143879,143881,143883],{"class":314,"line":298},[312,143878,1555],{"class":488},[312,143880,492],{"class":324},[312,143882,858],{"class":488},[312,143884,498],{"class":324},[312,143886,143887,143889,143891,143893,143895,143897,143899],{"class":314,"line":974},[312,143888,1428],{"class":488},[312,143890,492],{"class":324},[312,143892,2391],{"class":488},[312,143894,1437],{"class":1436},[312,143896,1440],{"class":488},[312,143898,65769],{"class":488},[312,143900,498],{"class":324},[312,143902,143903,143905,143907,143909],{"class":314,"line":980},[312,143904,136849],{"class":488},[312,143906,492],{"class":324},[312,143908,64147],{"class":488},[312,143910,498],{"class":324},[312,143912,143913],{"class":314,"line":997},[312,143914,515],{"class":324},[69,143916,143918],{"id":143917},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[23796,143920,143922],{"id":143921},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[24,143924,143925],{},"设置中心点",[19,143927],{"style":21,"src":143928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[24,143930,143931],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[23796,143933,143935],{"id":143934},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[303,143937,143939],{"className":469,"code":143938,"language":471,"meta":308,"style":308},"\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",[119,143940,143941,143946,143952,143967,143972,143977],{"__ignoreMap":308},[312,143942,143943],{"class":314,"line":315},[312,143944,143945],{"class":318},"\u002F* 转换中心点 *\u002F\n",[312,143947,143948,143950],{"class":314,"line":171},[312,143949,329],{"class":328},[312,143951,483],{"class":324},[312,143953,143954,143957,143959,143961,143963,143965],{"class":314,"line":274},[312,143955,143956],{"class":488},"  transform-origin",[312,143958,492],{"class":324},[312,143960,53380],{"class":488},[312,143962,18944],{"class":488},[312,143964,132171],{"class":324},[312,143966,136947],{"class":318},[312,143968,143969],{"class":314,"line":298},[312,143970,143971],{"class":318},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[312,143973,143974],{"class":314,"line":974},[312,143975,143976],{"class":318},"  \u002F* transform-origin: left top; *\u002F\n",[312,143978,143979],{"class":314,"line":980},[312,143980,515],{"class":324},[23796,143982,143984],{"id":143983},"_18133-旋转案例","18.1.3.3 旋转案例",[19,143986],{"style":21,"src":143987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[303,143989,143990],{"className":469,"code":143810,"language":471,"meta":308,"style":308},[119,143991,143992,143998,144014],{"__ignoreMap":308},[312,143993,143994,143996],{"class":314,"line":315},[312,143995,329],{"class":328},[312,143997,483],{"class":324},[312,143999,144000,144002,144004,144006,144008,144010,144012],{"class":314,"line":171},[312,144001,138258],{"class":488},[312,144003,492],{"class":324},[312,144005,143827],{"class":488},[312,144007,1576],{"class":324},[312,144009,2474],{"class":488},[312,144011,143834],{"class":1436},[312,144013,4524],{"class":324},[312,144015,144016],{"class":314,"line":274},[312,144017,515],{"class":324},[69,144019,144021],{"id":144020},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[23796,144023,144025],{"id":144024},"_18141-scale介绍","18.1.4.1 scale介绍",[24,144027,144028],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[19,144030],{"style":21,"src":144031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[23796,144033,144035],{"id":144034},"_18142-分页按钮","18.1.4.2 分页按钮",[19,144037],{"style":21,"src":144038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[303,144040,144042],{"className":469,"code":144041,"language":471,"meta":308,"style":308},"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",[119,144043,144044,144050,144066,144070,144074,144079,144085,144099,144104],{"__ignoreMap":308},[312,144045,144046,144048],{"class":314,"line":315},[312,144047,329],{"class":328},[312,144049,483],{"class":324},[312,144051,144052,144054,144056,144059,144061,144064],{"class":314,"line":171},[312,144053,138258],{"class":488},[312,144055,492],{"class":324},[312,144057,144058],{"class":488},"scale",[312,144060,1576],{"class":324},[312,144062,144063],{"class":488},"1.2",[312,144065,4524],{"class":324},[312,144067,144068],{"class":314,"line":274},[312,144069,515],{"class":324},[312,144071,144072],{"class":314,"line":298},[312,144073,137735],{"class":324},[312,144075,144076],{"class":314,"line":974},[312,144077,144078],{"class":318},"\u002F* 2D 缩放 *\u002F\n",[312,144080,144081,144083],{"class":314,"line":980},[312,144082,329],{"class":328},[312,144084,483],{"class":324},[312,144086,144087,144089,144091,144093,144095,144097],{"class":314,"line":997},[312,144088,138258],{"class":488},[312,144090,492],{"class":324},[312,144092,144058],{"class":488},[312,144094,1576],{"class":324},[312,144096,144063],{"class":488},[312,144098,4524],{"class":324},[312,144100,144101],{"class":314,"line":1003},[312,144102,144103],{"class":318},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[312,144105,144106],{"class":314,"line":1020},[312,144107,515],{"class":324},[24,144109,144110],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[303,144112,144114],{"className":469,"code":144113,"language":471,"meta":308,"style":308},"\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",[119,144115,144116,144121,144131,144152,144173,144177,144182,144188,144215],{"__ignoreMap":308},[312,144117,144118],{"class":314,"line":315},[312,144119,144120],{"class":318},"\u002F* 定义动画 *\u002F\n",[312,144122,144123,144126,144129],{"class":314,"line":171},[312,144124,144125],{"class":1436},"@keyframes",[312,144127,144128],{"class":1579}," move",[312,144130,483],{"class":324},[312,144132,144133,144136,144138,144140,144142,144145,144147,144149],{"class":314,"line":274},[312,144134,144135],{"class":332},"  0%",[312,144137,939],{"class":324},[312,144139,49929],{"class":488},[312,144141,492],{"class":324},[312,144143,144144],{"class":488},"translateX",[312,144146,1576],{"class":324},[312,144148,858],{"class":488},[312,144150,144151],{"class":324},"); }\n",[312,144153,144154,144157,144159,144161,144163,144165,144167,144169,144171],{"class":314,"line":298},[312,144155,144156],{"class":332},"  100%",[312,144158,939],{"class":324},[312,144160,49929],{"class":488},[312,144162,492],{"class":324},[312,144164,144144],{"class":488},[312,144166,1576],{"class":324},[312,144168,2256],{"class":488},[312,144170,1437],{"class":1436},[312,144172,144151],{"class":324},[312,144174,144175],{"class":314,"line":974},[312,144176,515],{"class":324},[312,144178,144179],{"class":314,"line":980},[312,144180,144181],{"class":318},"\u002F* 调用动画 *\u002F\n",[312,144183,144184,144186],{"class":314,"line":997},[312,144185,329],{"class":328},[312,144187,483],{"class":324},[312,144189,144190,144193,144195,144197,144199,144201,144203,144205,144207,144210,144213],{"class":314,"line":1003},[312,144191,144192],{"class":488},"  animation",[312,144194,492],{"class":324},[312,144196,136960],{"class":488},[312,144198,26914],{"class":488},[312,144200,2640],{"class":1436},[312,144202,80452],{"class":488},[312,144204,5898],{"class":488},[312,144206,2640],{"class":1436},[312,144208,144209],{"class":488}," infinite",[312,144211,144212],{"class":488}," alternate",[312,144214,498],{"class":324},[312,144216,144217],{"class":314,"line":1020},[312,144218,515],{"class":324},[24,144220,144110],{},[303,144222,144225],{"className":144223,"code":144224,"language":6992},[6990],"\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",[119,144226,144224],{"__ignoreMap":308},[23796,144228,144230],{"id":144229},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[24,144232,144233],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[19,144235],{"style":21,"src":144236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[303,144238,144239],{"className":469,"code":144113,"language":471,"meta":308,"style":308},[119,144240,144241,144245,144253,144271,144291,144295,144299,144305,144329],{"__ignoreMap":308},[312,144242,144243],{"class":314,"line":315},[312,144244,144120],{"class":318},[312,144246,144247,144249,144251],{"class":314,"line":171},[312,144248,144125],{"class":1436},[312,144250,144128],{"class":1579},[312,144252,483],{"class":324},[312,144254,144255,144257,144259,144261,144263,144265,144267,144269],{"class":314,"line":274},[312,144256,144135],{"class":332},[312,144258,939],{"class":324},[312,144260,49929],{"class":488},[312,144262,492],{"class":324},[312,144264,144144],{"class":488},[312,144266,1576],{"class":324},[312,144268,858],{"class":488},[312,144270,144151],{"class":324},[312,144272,144273,144275,144277,144279,144281,144283,144285,144287,144289],{"class":314,"line":298},[312,144274,144156],{"class":332},[312,144276,939],{"class":324},[312,144278,49929],{"class":488},[312,144280,492],{"class":324},[312,144282,144144],{"class":488},[312,144284,1576],{"class":324},[312,144286,2256],{"class":488},[312,144288,1437],{"class":1436},[312,144290,144151],{"class":324},[312,144292,144293],{"class":314,"line":974},[312,144294,515],{"class":324},[312,144296,144297],{"class":314,"line":980},[312,144298,144181],{"class":318},[312,144300,144301,144303],{"class":314,"line":997},[312,144302,329],{"class":328},[312,144304,483],{"class":324},[312,144306,144307,144309,144311,144313,144315,144317,144319,144321,144323,144325,144327],{"class":314,"line":1003},[312,144308,144192],{"class":488},[312,144310,492],{"class":324},[312,144312,136960],{"class":488},[312,144314,26914],{"class":488},[312,144316,2640],{"class":1436},[312,144318,80452],{"class":488},[312,144320,5898],{"class":488},[312,144322,2640],{"class":1436},[312,144324,144209],{"class":488},[312,144326,144212],{"class":488},[312,144328,498],{"class":324},[312,144330,144331],{"class":314,"line":1020},[312,144332,515],{"class":324},[24,144334,144335],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[69,144337,144339],{"id":144338},"_1823-知识点回顾","18.2.3 知识点回顾",[303,144341,144342],{"className":469,"code":130481,"language":471,"meta":308,"style":308},[119,144343,144344,144350,144360],{"__ignoreMap":308},[312,144345,144346,144348],{"class":314,"line":315},[312,144347,329],{"class":328},[312,144349,483],{"class":324},[312,144351,144352,144354,144356,144358],{"class":314,"line":171},[312,144353,130494],{"class":488},[312,144355,492],{"class":324},[312,144357,1586],{"class":488},[312,144359,498],{"class":324},[312,144361,144362],{"class":314,"line":274},[312,144363,515],{"class":324},[14,144365,144367],{"id":144366},"_183-3d-转换","18.3 3D 转换",[24,144369,144370],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[69,144372,144374],{"id":144373},"_1831-坐标轴认识","18.3.1 坐标轴认识",[19,144376],{"style":21,"src":144377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[69,144379,144381],{"id":144380},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[19,144383],{"style":21,"src":144384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[24,144386,144387],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[24,144389,144390],{},"translate3d的效果需要搭配透视perspective来使用",[19,144392],{"style":21,"src":144393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[69,144395,144397],{"id":144396},"_1833-透视-perspective","18.3.3 透视 perspective",[19,144399],{"style":21,"src":144400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[24,144402,144403],{},"透视写在父盒子上，单位为像素",[69,144405,144407],{"id":144406},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[23796,144409,144411],{"id":144410},"_18341-分开解释","18.3.4.1 分开解释",[19,144413],{"style":21,"src":144414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[19,144416],{"style":21,"src":144417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[19,144419],{"style":21,"src":144420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[24,144422,144423],{},"总结来说就是左手原则",[23796,144425,144427],{"id":144426},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[19,144429],{"style":21,"src":144430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[69,144432,144434],{"id":144433},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[19,144436],{"style":21,"src":144437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[19,144439],{"style":21,"src":144440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[303,144442,144444],{"className":469,"code":144443,"language":471,"meta":308,"style":308},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[119,144445,144446,144452,144465,144482],{"__ignoreMap":308},[312,144447,144448,144450],{"class":314,"line":315},[312,144449,329],{"class":328},[312,144451,483],{"class":324},[312,144453,144454,144457,144459,144461,144463],{"class":314,"line":171},[312,144455,144456],{"class":488},"  perspective",[312,144458,492],{"class":324},[312,144460,66852],{"class":488},[312,144462,1437],{"class":1436},[312,144464,498],{"class":324},[312,144466,144467,144469,144471,144474,144476,144478,144480],{"class":314,"line":274},[312,144468,138258],{"class":488},[312,144470,492],{"class":324},[312,144472,144473],{"class":488},"rotateX",[312,144475,1576],{"class":324},[312,144477,2474],{"class":488},[312,144479,143834],{"class":1436},[312,144481,4524],{"class":324},[312,144483,144484],{"class":314,"line":298},[312,144485,515],{"class":324},[69,144487,144489],{"id":144488},"_1836-案例","18.3.6 案例",[23796,144491,144493],{"id":144492},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[19,144495],{"style":21,"src":144496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[19,144498],{"style":21,"src":144499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[19,144501],{"style":21,"src":144502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[303,144504,144506],{"className":469,"code":144505,"language":471,"meta":308,"style":308},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[119,144507,144508,144513,144519,144531],{"__ignoreMap":308},[312,144509,144510],{"class":314,"line":315},[312,144511,144512],{"class":318},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[312,144514,144515,144517],{"class":314,"line":171},[312,144516,135274],{"class":332},[312,144518,483],{"class":324},[312,144520,144521,144523,144525,144527,144529],{"class":314,"line":274},[312,144522,144456],{"class":488},[312,144524,492],{"class":324},[312,144526,66852],{"class":488},[312,144528,1437],{"class":1436},[312,144530,498],{"class":324},[312,144532,144533],{"class":314,"line":298},[312,144534,515],{"class":324},[23796,144536,144538],{"id":144537},"_18362-3d导航栏","18.3.6.2 3D导航栏",[19,144540],{"style":21,"src":144541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[303,144543,144544],{"className":305,"code":306,"language":307,"meta":308,"style":308},[119,144545,144546,144550,144564,144568],{"__ignoreMap":308},[312,144547,144548],{"class":314,"line":315},[312,144549,319],{"class":318},[312,144551,144552,144554,144556,144558,144560,144562],{"class":314,"line":171},[312,144553,325],{"class":324},[312,144555,329],{"class":328},[312,144557,333],{"class":332},[312,144559,336],{"class":324},[312,144561,340],{"class":339},[312,144563,343],{"class":324},[312,144565,144566],{"class":314,"line":274},[312,144567,348],{"class":324},[312,144569,144570,144572,144574],{"class":314,"line":298},[312,144571,353],{"class":324},[312,144573,329],{"class":328},[312,144575,343],{"class":324},[23796,144577,144579],{"id":144578},"_18363-旋转木马","18.3.6.3 旋转木马",[19,144581],{"style":21,"src":144582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[303,144584,144585],{"className":469,"code":143810,"language":471,"meta":308,"style":308},[119,144586,144587,144593,144609],{"__ignoreMap":308},[312,144588,144589,144591],{"class":314,"line":315},[312,144590,329],{"class":328},[312,144592,483],{"class":324},[312,144594,144595,144597,144599,144601,144603,144605,144607],{"class":314,"line":171},[312,144596,138258],{"class":488},[312,144598,492],{"class":324},[312,144600,143827],{"class":488},[312,144602,1576],{"class":324},[312,144604,2474],{"class":488},[312,144606,143834],{"class":1436},[312,144608,4524],{"class":324},[312,144610,144611],{"class":314,"line":274},[312,144612,515],{"class":324},[1856,144614,144615],{},"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":308,"searchDepth":171,"depth":171,"links":144617},[144618,144625],{"id":143713,"depth":171,"text":143714,"children":144619},[144620,144621,144622,144623,144624],{"id":143737,"depth":274,"text":143738},{"id":143792,"depth":274,"text":143793},{"id":143917,"depth":274,"text":143918},{"id":144020,"depth":274,"text":144021},{"id":144338,"depth":274,"text":144339},{"id":144366,"depth":171,"text":144367,"children":144626},[144627,144628,144629,144630,144631,144632],{"id":144373,"depth":274,"text":144374},{"id":144380,"depth":274,"text":144381},{"id":144396,"depth":274,"text":144397},{"id":144406,"depth":274,"text":144407},{"id":144433,"depth":274,"text":144434},{"id":144488,"depth":274,"text":144489},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143705,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144639,"title":144640,"body":144641,"description":1878,"extension":1879,"meta":144844,"navigation":1881,"path":144845,"seo":144846,"stem":144847,"__hash__":144848},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144642,"toc":144833},[144643,144646,144650,144653,144656,144660,144663,144666,144669,144673,144676,144680,144683,144687,144690,144694,144708,144712,144737,144740,144743,144760,144764,144768,144771,144774,144778,144781,144784,144802,144806,144809,144823,144827,144830],[10,144644,144640],{"id":144645},"_19-移动端基础-前缀现状与视口",[14,144647,144649],{"id":144648},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[19,144651],{"style":21,"src":144652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[24,144654,144655],{},"意思就是加个前缀，增加兼容性",[14,144657,144659],{"id":144658},"_192-移动端现状认识","19.2 移动端现状认识",[19,144661],{"style":21,"src":144662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[24,144664,144665],{},"调试方法：",[19,144667],{"style":21,"src":144668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144670,144672],{"id":144671},"_193-视口","19.3 视口",[24,144674,144675],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[69,144677,144679],{"id":144678},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[19,144681],{"style":21,"src":144682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[69,144684,144686],{"id":144685},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[19,144688],{"style":21,"src":144689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[69,144691,144693],{"id":144692},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[243,144695,144696,144699,144702,144705],{},[143,144697,144698],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[143,144700,144701],{},"理想视口，对设备来讲，是最理想的视口尺寸",[143,144703,144704],{},"需要手动添写meta视口标签通知浏览器操作",[143,144706,144707],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[69,144709,144711],{"id":144710},"_1934-meta视口标签","19.3.4 meta视口标签",[303,144713,144715],{"className":305,"code":144714,"language":307,"meta":308,"style":308},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[119,144716,144717],{"__ignoreMap":308},[312,144718,144719,144721,144723,144725,144727,144729,144731,144733,144735],{"class":314,"line":315},[312,144720,325],{"class":324},[312,144722,53137],{"class":328},[312,144724,16721],{"class":332},[312,144726,336],{"class":324},[312,144728,53184],{"class":339},[312,144730,53164],{"class":332},[312,144732,336],{"class":324},[312,144734,53191],{"class":339},[312,144736,343],{"class":324},[19,144738],{"style":21,"src":144739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[24,144741,144742],{},"标准视口设置：",[140,144744,144745,144748,144751,144754,144757],{},[143,144746,144747],{},"视口宽度和设备保持一致",[143,144749,144750],{},"视口的默认缩放比例1.0",[143,144752,144753],{},"不允许用户自行缩放",[143,144755,144756],{},"最大允许的缩放比例1.0",[143,144758,144759],{},"最小允许的缩放比例1.0",[69,144761,144763],{"id":144762},"_1935-二倍图","19.3.5 二倍图",[23796,144765,144767],{"id":144766},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[19,144769],{"style":21,"src":144770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[19,144772],{"style":21,"src":144773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[23796,144775,144777],{"id":144776},"_19352-多倍图","19.3.5.2 多倍图",[19,144779],{"style":21,"src":144780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[24,144782,144783],{},"二倍图法，代码如下：",[303,144785,144787],{"className":469,"code":144786,"language":471,"meta":308,"style":308},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[119,144788,144789,144794],{"__ignoreMap":308},[312,144790,144791],{"class":314,"line":315},[312,144792,144793],{"class":318},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[312,144795,144796,144799],{"class":314,"line":171},[312,144797,144798],{"class":328},"background-size",[312,144800,144801],{"class":324},": 50% 50%;\n",[23796,144803,144805],{"id":144804},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[19,144807],{"style":21,"src":144808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[140,144810,144811,144814,144817,144820],{},[143,144812,144813],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[143,144815,144816],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[143,144818,144819],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[143,144821,144822],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[23796,144824,144826],{"id":144825},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[19,144828],{"style":21,"src":144829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1856,144831,144832],{},"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":308,"searchDepth":171,"depth":171,"links":144834},[144835,144836,144837],{"id":144648,"depth":171,"text":144649},{"id":144658,"depth":171,"text":144659},{"id":144671,"depth":171,"text":144672,"children":144838},[144839,144840,144841,144842,144843],{"id":144678,"depth":274,"text":144679},{"id":144685,"depth":274,"text":144686},{"id":144692,"depth":274,"text":144693},{"id":144710,"depth":274,"text":144711},{"id":144762,"depth":274,"text":144763},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144640,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144850,"title":144851,"body":144852,"description":1878,"extension":1879,"meta":145729,"navigation":1881,"path":145730,"seo":145731,"stem":145732,"__hash__":145733},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144853,"toc":145713},[144854,144857,144861,144868,144871,144878,144881,144886,144889,144893,144897,144904,144907,144910,144914,144917,144920,144923,144926,144929,144933,144936,144940,144942,144945,144948,144951,144954,144956,144959,144961,144991,144993,145023,145027,145030,145034,145037,145054,145057,145060,145136,145138,145141,145144,145147,145150,145152,145155,145158,145162,145184,145187,145190,145194,145197,145203,145206,145210,145213,145216,145220,145223,145226,145229,145233,145236,145239,145242,145245,145249,145252,145256,145263,145266,145269,145272,145275,145285,145288,145291,145298,145301,145305,145308,145311,145315,145318,145321,145324,145369,145372,145375,145378,145380,145509,145511,145549,145552,145555,145557,145675,145677,145711],[10,144855,144851],{"id":144856},"_20-移动端布局实战上篇",[14,144858,144860],{"id":144859},"_201-移动端主流方案","20.1 移动端主流方案",[140,144862,144863],{},[143,144864,144865],{},[27,144866,144867],{},"单独移动端页面（主流）",[19,144869],{"style":21,"src":144870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[140,144872,144873],{"start":171},[143,144874,144875],{},[27,144876,144877],{},"响应式兼容PC移动端",[19,144879],{"style":21,"src":144880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[140,144882,144883],{"start":274},[143,144884,144885],{},"两种页面选型布局方式",[19,144887],{"style":21,"src":144888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,144890,144892],{"id":144891},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[69,144894,144896],{"id":144895},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[24,144898,144899,144900],{},"官网地址： ",[164,144901,144902],{"href":144902,"rel":144903},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[168],[19,144905],{"style":21,"src":144906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[19,144908],{"style":21,"src":144909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[69,144911,144913],{"id":144912},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[19,144915],{"style":21,"src":144916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[19,144918],{"style":21,"src":144919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[24,144921,144922],{},"去除高亮：",[24,144924,144925],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[24,144927,144928],{},"-webkit- tap-highlight-color: transparent;",[14,144930,144932],{"id":144931},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[19,144934],{"style":21,"src":144935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,144937,144939],{"id":144938},"_204-流式布局案例","20.4 流式布局案例",[24,144941,1982],{},[24,144943,144944],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[24,144946,144947],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[24,144949,144950],{},"图片格式：",[19,144952],{"style":21,"src":144953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[24,144955,137317],{},[19,144957],{"style":21,"src":144958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[24,144960,141377],{},[303,144962,144963],{"className":305,"code":135779,"language":307,"meta":308,"style":308},[119,144964,144965],{"__ignoreMap":308},[312,144966,144967,144969,144971,144973,144975,144977,144979,144981,144983,144985,144987,144989],{"class":314,"line":315},[312,144968,325],{"class":324},[312,144970,19],{"class":328},[312,144972,57021],{"class":332},[312,144974,336],{"class":324},[312,144976,135794],{"class":339},[312,144978,57029],{"class":332},[312,144980,336],{"class":324},[312,144982,135801],{"class":339},[312,144984,135804],{"class":332},[312,144986,336],{"class":324},[312,144988,135809],{"class":339},[312,144990,343],{"class":324},[24,144992,141466],{},[303,144994,144995],{"className":305,"code":135779,"language":307,"meta":308,"style":308},[119,144996,144997],{"__ignoreMap":308},[312,144998,144999,145001,145003,145005,145007,145009,145011,145013,145015,145017,145019,145021],{"class":314,"line":315},[312,145000,325],{"class":324},[312,145002,19],{"class":328},[312,145004,57021],{"class":332},[312,145006,336],{"class":324},[312,145008,135794],{"class":339},[312,145010,57029],{"class":332},[312,145012,336],{"class":324},[312,145014,135801],{"class":339},[312,145016,135804],{"class":332},[312,145018,336],{"class":324},[312,145020,135809],{"class":339},[312,145022,343],{"class":324},[14,145024,145026],{"id":145025},"_205-flex布局","20.5 flex布局",[19,145028],{"style":21,"src":145029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[69,145031,145033],{"id":145032},"_2051-布局原理","20.5.1 布局原理",[24,145035,145036],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[243,145038,145039,145042,145045,145048,145051],{},[143,145040,145041],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[143,145043,145044],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[143,145046,145047],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[143,145049,145050],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[143,145052,145053],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[24,145055,145056],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[24,145058,145059],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[303,145061,145063],{"className":469,"code":145062,"language":471,"meta":308,"style":308},"\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",[119,145064,145065,145070,145077,145087,145099,145110,145121,145132],{"__ignoreMap":308},[312,145066,145067],{"class":314,"line":315},[312,145068,145069],{"class":318},"\u002F* Flex 弹性布局 *\u002F\n",[312,145071,145072,145075],{"class":314,"line":171},[312,145073,145074],{"class":332},".container",[312,145076,483],{"class":324},[312,145078,145079,145081,145083,145085],{"class":314,"line":274},[312,145080,503],{"class":488},[312,145082,492],{"class":324},[312,145084,53268],{"class":488},[312,145086,498],{"class":324},[312,145088,145089,145092,145094,145097],{"class":314,"line":298},[312,145090,145091],{"class":488},"  flex-direction",[312,145093,492],{"class":324},[312,145095,145096],{"class":488},"row",[312,145098,498],{"class":324},[312,145100,145101,145104,145106,145108],{"class":314,"line":974},[312,145102,145103],{"class":488},"  justify-content",[312,145105,492],{"class":324},[312,145107,53455],{"class":488},[312,145109,498],{"class":324},[312,145111,145112,145115,145117,145119],{"class":314,"line":980},[312,145113,145114],{"class":488},"  align-items",[312,145116,492],{"class":324},[312,145118,53380],{"class":488},[312,145120,498],{"class":324},[312,145122,145123,145126,145128,145130],{"class":314,"line":997},[312,145124,145125],{"class":488},"  flex-wrap",[312,145127,492],{"class":324},[312,145129,80382],{"class":488},[312,145131,498],{"class":324},[312,145133,145134],{"class":314,"line":1003},[312,145135,515],{"class":324},[24,145137,72230],{},[24,145139,145140],{},".form-item .male-label {",[24,145142,145143],{},"   margin-right: 20px;",[24,145145,145146],{},"   display: inline-flex;",[24,145148,145149],{},"   align-items: center;",[24,145151,2888],{},[19,145153],{"style":21,"src":145154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[19,145156],{"style":21,"src":145157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[69,145159,145161],{"id":145160},"_2052-常见父项属性","20.5.2 常见父项属性",[140,145163,145164,145167,145170,145173,145176,145179,145182],{},[143,145165,145166],{},"flex-direction：设置主轴的方向",[143,145168,145169],{},"justify-content：设置主轴上的子元素排列方式",[143,145171,145172],{},"flex-wrap：设置子元素是否换行",[143,145174,145175],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[143,145177,145178],{},"align-items：设置侧轴上的子元素排列方式（单行）",[143,145180,145181],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[143,145183,145166],{},[19,145185],{"style":21,"src":145186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[19,145188],{"style":21,"src":145189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[140,145191,145192],{"start":171},[143,145193,145169],{},[19,145195],{"style":21,"src":145196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[24,145198,145199,145202],{},[119,145200,145201],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[24,145204,145205],{},"跟着主轴走",[140,145207,145208],{"start":274},[143,145209,145172],{},[19,145211],{"style":21,"src":145212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[24,145214,145215],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[140,145217,145218],{"start":298},[143,145219,145175],{},[19,145221],{"style":21,"src":145222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[24,145224,145225],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[24,145227,145228],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[140,145230,145231],{"start":974},[143,145232,145178],{},[19,145234],{"style":21,"src":145235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[24,145237,145238],{},"align-items与align-content之间的区别：",[24,145240,145241],{},"单找items，多找content",[19,145243],{"style":21,"src":145244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[140,145246,145247],{"start":980},[143,145248,145181],{},[19,145250],{"style":21,"src":145251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[69,145253,145255],{"id":145254},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[140,145257,145258],{},[143,145259,145260],{},[27,145261,145262],{},"flex 属性",[24,145264,145265],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[19,145267],{"style":21,"src":145268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[24,145270,145271],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[24,145273,145274],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[140,145276,145277],{"start":171},[143,145278,145279,15596,145282],{},[27,145280,145281],{},"align-self",[27,145283,145284],{},"控制子项自己在侧轴上的排列方式",[19,145286],{"style":21,"src":145287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[24,145289,145290],{},"单个子盒子在父盒子侧轴上的排列方式",[140,145292,145293],{"start":274},[143,145294,145295,145297],{},[27,145296,97067],{}," 属性定义项目的排列顺序",[19,145299],{"style":21,"src":145300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[69,145302,145304],{"id":145303},"_2054-背景线性渐变","20.5.4 背景线性渐变",[19,145306],{"style":21,"src":145307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[24,145309,145310],{},"必须要添加浏览器的私有前缀",[69,145312,145314],{"id":145313},"_2055-携程网首页案例","20.5.5 携程网首页案例",[24,145316,145317],{},"学到最重要的知识：",[24,145319,145320],{},"flex处理这样的布局思路",[19,145322],{"style":21,"src":145323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[303,145325,145327],{"className":469,"code":145326,"language":471,"meta":308,"style":308},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[119,145328,145329,145335,145345,145355,145365],{"__ignoreMap":308},[312,145330,145331,145333],{"class":314,"line":315},[312,145332,145074],{"class":332},[312,145334,483],{"class":324},[312,145336,145337,145339,145341,145343],{"class":314,"line":171},[312,145338,503],{"class":488},[312,145340,492],{"class":324},[312,145342,53268],{"class":488},[312,145344,498],{"class":324},[312,145346,145347,145349,145351,145353],{"class":314,"line":274},[312,145348,145103],{"class":488},[312,145350,492],{"class":324},[312,145352,53380],{"class":488},[312,145354,498],{"class":324},[312,145356,145357,145359,145361,145363],{"class":314,"line":298},[312,145358,145114],{"class":488},[312,145360,492],{"class":324},[312,145362,53380],{"class":488},[312,145364,498],{"class":324},[312,145366,145367],{"class":314,"line":974},[312,145368,515],{"class":324},[24,145370,145371],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[24,145373,145374],{},"使用属性选择器",[19,145376],{"style":21,"src":145377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[24,145379,70666],{},[303,145381,145383],{"className":305,"code":145382,"language":307,"meta":308,"style":308},"\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",[119,145384,145385,145390,145404,145409,145429,145434,145453,145458,145477,145482,145501],{"__ignoreMap":308},[312,145386,145387],{"class":314,"line":315},[312,145388,145389],{"class":318},"\u003C!-- 携程网移动端案例结构 -->\n",[312,145391,145392,145394,145396,145398,145400,145402],{"class":314,"line":171},[312,145393,325],{"class":324},[312,145395,329],{"class":328},[312,145397,333],{"class":332},[312,145399,336],{"class":324},[312,145401,94093],{"class":339},[312,145403,343],{"class":324},[312,145405,145406],{"class":314,"line":274},[312,145407,145408],{"class":318},"  \u003C!-- 搜索栏 -->\n",[312,145410,145411,145413,145415,145417,145419,145422,145425,145427],{"class":314,"line":298},[312,145412,53930],{"class":324},[312,145414,329],{"class":328},[312,145416,333],{"class":332},[312,145418,336],{"class":324},[312,145420,145421],{"class":339},"\"search-index\"",[312,145423,145424],{"class":324},">...\u003C\u002F",[312,145426,329],{"class":328},[312,145428,343],{"class":324},[312,145430,145431],{"class":314,"line":974},[312,145432,145433],{"class":318},"  \u003C!-- 焦点图 -->\n",[312,145435,145436,145438,145440,145442,145444,145447,145449,145451],{"class":314,"line":980},[312,145437,53930],{"class":324},[312,145439,329],{"class":328},[312,145441,333],{"class":332},[312,145443,336],{"class":324},[312,145445,145446],{"class":339},"\"focus\"",[312,145448,145424],{"class":324},[312,145450,329],{"class":328},[312,145452,343],{"class":324},[312,145454,145455],{"class":314,"line":997},[312,145456,145457],{"class":318},"  \u003C!-- 主导航 -->\n",[312,145459,145460,145462,145464,145466,145468,145471,145473,145475],{"class":314,"line":1003},[312,145461,53930],{"class":324},[312,145463,329],{"class":328},[312,145465,333],{"class":332},[312,145467,336],{"class":324},[312,145469,145470],{"class":339},"\"local-nav\"",[312,145472,145424],{"class":324},[312,145474,329],{"class":328},[312,145476,343],{"class":324},[312,145478,145479],{"class":314,"line":1020},[312,145480,145481],{"class":318},"  \u003C!-- 子导航 -->\n",[312,145483,145484,145486,145488,145490,145492,145495,145497,145499],{"class":314,"line":1026},[312,145485,53930],{"class":324},[312,145487,329],{"class":328},[312,145489,333],{"class":332},[312,145491,336],{"class":324},[312,145493,145494],{"class":339},"\"nav-common\"",[312,145496,145424],{"class":324},[312,145498,329],{"class":328},[312,145500,343],{"class":324},[312,145502,145503,145505,145507],{"class":314,"line":3418},[312,145504,353],{"class":324},[312,145506,329],{"class":328},[312,145508,343],{"class":324},[24,145510,72230],{},[303,145512,145513],{"className":469,"code":138726,"language":471,"meta":308,"style":308},[119,145514,145515,145529,145545],{"__ignoreMap":308},[312,145516,145517,145519,145521,145523,145525,145527],{"class":314,"line":315},[312,145518,55605],{"class":328},[312,145520,2834],{"class":324},[312,145522,104876],{"class":332},[312,145524,336],{"class":1436},[312,145526,64477],{"class":339},[312,145528,138743],{"class":324},[312,145530,145531,145533,145535,145537,145539,145541,145543],{"class":314,"line":171},[312,145532,1428],{"class":488},[312,145534,492],{"class":324},[312,145536,1433],{"class":488},[312,145538,1437],{"class":1436},[312,145540,1440],{"class":488},[312,145542,131889],{"class":488},[312,145544,498],{"class":324},[312,145546,145547],{"class":314,"line":274},[312,145548,515],{"class":324},[24,145550,145551],{},"总代码和效果展示：",[19,145553],{"style":21,"src":145554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[24,145556,70666],{},[303,145558,145559],{"className":305,"code":145382,"language":307,"meta":308,"style":308},[119,145560,145561,145565,145579,145583,145601,145605,145623,145627,145645,145649,145667],{"__ignoreMap":308},[312,145562,145563],{"class":314,"line":315},[312,145564,145389],{"class":318},[312,145566,145567,145569,145571,145573,145575,145577],{"class":314,"line":171},[312,145568,325],{"class":324},[312,145570,329],{"class":328},[312,145572,333],{"class":332},[312,145574,336],{"class":324},[312,145576,94093],{"class":339},[312,145578,343],{"class":324},[312,145580,145581],{"class":314,"line":274},[312,145582,145408],{"class":318},[312,145584,145585,145587,145589,145591,145593,145595,145597,145599],{"class":314,"line":298},[312,145586,53930],{"class":324},[312,145588,329],{"class":328},[312,145590,333],{"class":332},[312,145592,336],{"class":324},[312,145594,145421],{"class":339},[312,145596,145424],{"class":324},[312,145598,329],{"class":328},[312,145600,343],{"class":324},[312,145602,145603],{"class":314,"line":974},[312,145604,145433],{"class":318},[312,145606,145607,145609,145611,145613,145615,145617,145619,145621],{"class":314,"line":980},[312,145608,53930],{"class":324},[312,145610,329],{"class":328},[312,145612,333],{"class":332},[312,145614,336],{"class":324},[312,145616,145446],{"class":339},[312,145618,145424],{"class":324},[312,145620,329],{"class":328},[312,145622,343],{"class":324},[312,145624,145625],{"class":314,"line":997},[312,145626,145457],{"class":318},[312,145628,145629,145631,145633,145635,145637,145639,145641,145643],{"class":314,"line":1003},[312,145630,53930],{"class":324},[312,145632,329],{"class":328},[312,145634,333],{"class":332},[312,145636,336],{"class":324},[312,145638,145470],{"class":339},[312,145640,145424],{"class":324},[312,145642,329],{"class":328},[312,145644,343],{"class":324},[312,145646,145647],{"class":314,"line":1020},[312,145648,145481],{"class":318},[312,145650,145651,145653,145655,145657,145659,145661,145663,145665],{"class":314,"line":1026},[312,145652,53930],{"class":324},[312,145654,329],{"class":328},[312,145656,333],{"class":332},[312,145658,336],{"class":324},[312,145660,145494],{"class":339},[312,145662,145424],{"class":324},[312,145664,329],{"class":328},[312,145666,343],{"class":324},[312,145668,145669,145671,145673],{"class":314,"line":3418},[312,145670,353],{"class":324},[312,145672,329],{"class":328},[312,145674,343],{"class":324},[24,145676,72230],{},[303,145678,145679],{"className":305,"code":306,"language":307,"meta":308,"style":308},[119,145680,145681,145685,145699,145703],{"__ignoreMap":308},[312,145682,145683],{"class":314,"line":315},[312,145684,319],{"class":318},[312,145686,145687,145689,145691,145693,145695,145697],{"class":314,"line":171},[312,145688,325],{"class":324},[312,145690,329],{"class":328},[312,145692,333],{"class":332},[312,145694,336],{"class":324},[312,145696,340],{"class":339},[312,145698,343],{"class":324},[312,145700,145701],{"class":314,"line":274},[312,145702,348],{"class":324},[312,145704,145705,145707,145709],{"class":314,"line":298},[312,145706,353],{"class":324},[312,145708,329],{"class":328},[312,145710,343],{"class":324},[1856,145712,139673],{},{"title":308,"searchDepth":171,"depth":171,"links":145714},[145715,145716,145720,145721,145722],{"id":144859,"depth":171,"text":144860},{"id":144891,"depth":171,"text":144892,"children":145717},[145718,145719],{"id":144895,"depth":274,"text":144896},{"id":144912,"depth":274,"text":144913},{"id":144931,"depth":171,"text":144932},{"id":144938,"depth":171,"text":144939},{"id":145025,"depth":171,"text":145026,"children":145723},[145724,145725,145726,145727,145728],{"id":145032,"depth":274,"text":145033},{"id":145160,"depth":274,"text":145161},{"id":145254,"depth":274,"text":145255},{"id":145303,"depth":274,"text":145304},{"id":145313,"depth":274,"text":145314},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144851,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145735,"title":145736,"body":145737,"description":1878,"extension":1879,"meta":146964,"navigation":1881,"path":146965,"seo":146966,"stem":146967,"__hash__":146968},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145738,"toc":146942},[145739,145742,145746,145750,145753,145756,145760,145765,145768,145771,145774,145777,145780,145837,145840,145845,145848,145851,145855,145866,145870,145873,145876,145883,145888,145892,145895,145901,145904,145908,145911,145918,145921,145924,145931,145934,145941,145944,145947,145954,145957,145960,145962,145979,145983,145986,145989,145992,145996,145999,146002,146005,146008,146011,146014,146016,146019,146022,146084,146087,146197,146204,146210,146213,146216,146220,146223,146227,146232,146235,146242,146245,146251,146256,146259,146262,146265,146268,146271,146274,146277,146280,146336,146338,146364,146368,146371,146374,146377,146385,146388,146391,146395,146451,146454,146458,146464,146475,146478,146483,146486,146489,146495,146498,146501,146504,146507,146510,146513,146516,146519,146544,146550,146553,146556,146559,146562,146565,146568,146573,146576,146579,146582,146590,146593,146600,146603,146606,146608,146632,146634,146637,146640,146643,146646,146649,146652,146655,146689,146692,146695,146729,146736,146739,146742,146745,146748,146751,146754,146761,146764,146767,146770,146773,146780,146783,146786,146793,146796,146799,146803,146806,146809,146812,146815,146818,146821,146824,146827,146829,146853,146855,146879,146883,146894,146897,146900,146903,146906,146909,146912,146915,146918,146921,146924,146927,146930,146933,146936,146939],[10,145740,145736],{"id":145741},"_21-移动端布局实战下篇",[14,145743,145745],{"id":145744},"_211-rem适配布局","21.1 rem适配布局",[69,145747,145749],{"id":145748},"_2111-rem单位","21.1.1 rem单位",[19,145751],{"style":21,"src":145752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[24,145754,145755],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[69,145757,145759],{"id":145758},"_2112-媒体查询","21.1.2 媒体查询",[140,145761,145762],{},[143,145763,145764],{},"参数介绍",[19,145766],{"style":21,"src":145767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[19,145769],{"style":21,"src":145770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[19,145772],{"style":21,"src":145773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[19,145775],{"style":21,"src":145776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[19,145778],{"style":21,"src":145779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[303,145781,145783],{"className":469,"code":145782,"language":471,"meta":308,"style":308},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[119,145784,145785,145790,145809,145816,145829,145833],{"__ignoreMap":308},[312,145786,145787],{"class":314,"line":315},[312,145788,145789],{"class":318},"\u002F* 媒体查询 *\u002F\n",[312,145791,145792,145795,145797,145800,145802,145805,145807],{"class":314,"line":171},[312,145793,145794],{"class":1436},"@media",[312,145796,3464],{"class":324},[312,145798,145799],{"class":488},"max-width",[312,145801,492],{"class":324},[312,145803,145804],{"class":488},"768",[312,145806,1437],{"class":1436},[312,145808,14244],{"class":324},[312,145810,145811,145814],{"class":314,"line":274},[312,145812,145813],{"class":332},"  .container",[312,145815,483],{"class":324},[312,145817,145818,145821,145823,145825,145827],{"class":314,"line":298},[312,145819,145820],{"class":488},"    width",[312,145822,492],{"class":324},[312,145824,2256],{"class":488},[312,145826,2273],{"class":1436},[312,145828,498],{"class":324},[312,145830,145831],{"class":314,"line":974},[312,145832,129110],{"class":324},[312,145834,145835],{"class":314,"line":980},[312,145836,515],{"class":324},[24,145838,145839],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[140,145841,145842],{"start":171},[143,145843,145844],{},"引入资源",[19,145846],{"style":21,"src":145847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[24,145849,145850],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[69,145852,145854],{"id":145853},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[243,145856,145857,145860,145863],{},[143,145858,145859],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[143,145861,145862],{},"媒体查询可以根据不同设备宽度来修改样式",[143,145864,145865],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,145867,145869],{"id":145868},"_212-less基础","21.2 Less基础",[24,145871,145872],{},"css冗余度较高，不利于复用，没有很好的计算能力",[24,145874,145875],{},"Less可以解决该问题，它是css的扩展语言",[24,145877,145878,145879],{},"Less中文网址： ",[164,145880,145881],{"href":145881,"rel":145882},"http:\u002F\u002Flesscss.cn\u002F",[168],[24,145884,145885],{},[27,145886,145887],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[69,145889,145891],{"id":145890},"_2121-less安装","21.2.1 less安装",[24,145893,145894],{},"如果使用vscode，则无需进行下方安装步骤",[24,145896,145897],{},[164,145898,145899],{"href":145899,"rel":145900},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[168],[19,145902],{"style":21,"src":145903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[69,145905,145907],{"id":145906},"_2122-less使用","21.2.2 less使用",[24,145909,145910],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[140,145912,145913],{},[143,145914,145915],{},[27,145916,145917],{},"Less 变量",[19,145919],{"style":21,"src":145920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[19,145922],{"style":21,"src":145923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[140,145925,145926],{"start":171},[143,145927,145928],{},[27,145929,145930],{},"Less 编译",[19,145932],{"style":21,"src":145933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[140,145935,145936],{"start":274},[143,145937,145938],{},[27,145939,145940],{},"Less 嵌套",[19,145942],{"style":21,"src":145943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[19,145945],{"style":21,"src":145946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[140,145948,145949],{"start":298},[143,145950,145951],{},[27,145952,145953],{},"Less 运算",[19,145955],{"style":21,"src":145956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[24,145958,145959],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[24,145961,1982],{},[243,145963,145964,145967,145970,145973,145976],{},[143,145965,145966],{},"乘号（*）和除号（\u002F）的写法",[143,145968,145969],{},"运算符中间左右有个空格隔开 1px + 5",[143,145971,145972],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[143,145974,145975],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[143,145977,145978],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145980,145982],{"id":145981},"_213-rem-适配方案","21.3 rem 适配方案",[24,145984,145985],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[24,145987,145988],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[19,145990],{"style":21,"src":145991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[69,145993,145995],{"id":145994},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[24,145997,145998],{},"rem + 媒体查询 + less 技术",[19,146000],{"style":21,"src":146001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[24,146003,146004],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[24,146006,146007],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[19,146009],{"style":21,"src":146010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[24,146012,146013],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[24,146015,16434],{},[19,146017],{"style":21,"src":146018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[24,146020,146021],{},"index.html:",[303,146023,146025],{"className":469,"code":146024,"language":471,"meta":308,"style":308},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[119,146026,146027,146032,146038,146054,146058,146064,146080],{"__ignoreMap":308},[312,146028,146029],{"class":314,"line":315},[312,146030,146031],{"class":318},"\u002F* rem 适配方案 *\u002F\n",[312,146033,146034,146036],{"class":314,"line":171},[312,146035,52430],{"class":328},[312,146037,483],{"class":324},[312,146039,146040,146042,146044,146047,146049,146051],{"class":314,"line":274},[312,146041,72400],{"class":488},[312,146043,492],{"class":324},[312,146045,146046],{"class":488},"62.5",[312,146048,2273],{"class":1436},[312,146050,132171],{"class":324},[312,146052,146053],{"class":318},"\u002F* 1rem = 10px *\u002F\n",[312,146055,146056],{"class":314,"line":298},[312,146057,515],{"class":324},[312,146059,146060,146062],{"class":314,"line":974},[312,146061,1362],{"class":332},[312,146063,483],{"class":324},[312,146065,146066,146068,146070,146072,146075,146077],{"class":314,"line":980},[312,146067,1541],{"class":488},[312,146069,492],{"class":324},[312,146071,2391],{"class":488},[312,146073,146074],{"class":1436},"rem",[312,146076,132171],{"class":324},[312,146078,146079],{"class":318},"\u002F* 100px *\u002F\n",[312,146081,146082],{"class":314,"line":997},[312,146083,515],{"class":324},[24,146085,146086],{},"common.less",[303,146088,146090],{"className":469,"code":146089,"language":471,"meta":308,"style":308},"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",[119,146091,146092,146098,146113,146117,146123,146137,146141,146145,146149,146155,146169,146173,146179,146193],{"__ignoreMap":308},[312,146093,146094,146096],{"class":314,"line":315},[312,146095,52430],{"class":328},[312,146097,483],{"class":324},[312,146099,146100,146102,146104,146106,146108,146110],{"class":314,"line":171},[312,146101,72400],{"class":488},[312,146103,492],{"class":324},[312,146105,146046],{"class":488},[312,146107,2273],{"class":1436},[312,146109,27863],{"class":324},[312,146111,146112],{"class":318},"\u002F* 10px *\u002F\n",[312,146114,146115],{"class":314,"line":274},[312,146116,515],{"class":324},[312,146118,146119,146121],{"class":314,"line":298},[312,146120,329],{"class":328},[312,146122,483],{"class":324},[312,146124,146125,146127,146129,146131,146133,146135],{"class":314,"line":974},[312,146126,1541],{"class":488},[312,146128,492],{"class":324},[312,146130,2391],{"class":488},[312,146132,146074],{"class":1436},[312,146134,27863],{"class":324},[312,146136,146079],{"class":318},[312,146138,146139],{"class":314,"line":980},[312,146140,515],{"class":324},[312,146142,146143],{"class":314,"line":997},[312,146144,137735],{"class":324},[312,146146,146147],{"class":314,"line":1003},[312,146148,146031],{"class":318},[312,146150,146151,146153],{"class":314,"line":1020},[312,146152,52430],{"class":328},[312,146154,483],{"class":324},[312,146156,146157,146159,146161,146163,146165,146167],{"class":314,"line":1026},[312,146158,72400],{"class":488},[312,146160,492],{"class":324},[312,146162,146046],{"class":488},[312,146164,2273],{"class":1436},[312,146166,132171],{"class":324},[312,146168,146053],{"class":318},[312,146170,146171],{"class":314,"line":3418},[312,146172,515],{"class":324},[312,146174,146175,146177],{"class":314,"line":3423},[312,146176,1362],{"class":332},[312,146178,483],{"class":324},[312,146180,146181,146183,146185,146187,146189,146191],{"class":314,"line":3429},[312,146182,1541],{"class":488},[312,146184,492],{"class":324},[312,146186,2391],{"class":488},[312,146188,146074],{"class":1436},[312,146190,132171],{"class":324},[312,146192,146079],{"class":318},[312,146194,146195],{"class":314,"line":3434},[312,146196,515],{"class":324},[24,146198,146199,146200,146203],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25350,146201,146202],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[303,146205,146208],{"className":146206,"code":146207,"language":6992},[6990],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[119,146209,146207],{"__ignoreMap":308},[24,146211,146212],{},"less保存时会自动变成.css文件",[24,146214,146215],{},"好好搞懂上述代码写法",[69,146217,146219],{"id":146218},"_2132-样式导入样式","21.3.2 样式导入样式",[19,146221],{"style":21,"src":146222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[69,146224,146226],{"id":146225},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[140,146228,146229],{},[143,146230,146231],{},"准备工作",[19,146233],{"style":21,"src":146234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[24,146236,146237,146238],{},"github地址：",[164,146239,146240],{"href":146240,"rel":146241},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[168],[24,146243,146244],{},"下载之后，将index.js文件拖到项目中就可以了",[24,146246,146247,146248],{},"js文件引入到index.html中使用的是",[119,146249,146250],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[140,146252,146253],{"start":171},[143,146254,146255],{},"vscode插件",[19,146257],{"style":21,"src":146258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[24,146260,146261],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[24,146263,146264],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[19,146266],{"style":21,"src":146267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[24,146269,146270],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[19,146272],{"style":21,"src":146273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[24,146275,146276],{},"修改成75就可以，alt+z为快捷键",[24,146278,146279],{},"index.css：",[303,146281,146282],{"className":469,"code":146024,"language":471,"meta":308,"style":308},[119,146283,146284,146288,146294,146308,146312,146318,146332],{"__ignoreMap":308},[312,146285,146286],{"class":314,"line":315},[312,146287,146031],{"class":318},[312,146289,146290,146292],{"class":314,"line":171},[312,146291,52430],{"class":328},[312,146293,483],{"class":324},[312,146295,146296,146298,146300,146302,146304,146306],{"class":314,"line":274},[312,146297,72400],{"class":488},[312,146299,492],{"class":324},[312,146301,146046],{"class":488},[312,146303,2273],{"class":1436},[312,146305,132171],{"class":324},[312,146307,146053],{"class":318},[312,146309,146310],{"class":314,"line":298},[312,146311,515],{"class":324},[312,146313,146314,146316],{"class":314,"line":974},[312,146315,1362],{"class":332},[312,146317,483],{"class":324},[312,146319,146320,146322,146324,146326,146328,146330],{"class":314,"line":980},[312,146321,1541],{"class":488},[312,146323,492],{"class":324},[312,146325,2391],{"class":488},[312,146327,146074],{"class":1436},[312,146329,132171],{"class":324},[312,146331,146079],{"class":318},[312,146333,146334],{"class":314,"line":997},[312,146335,515],{"class":324},[24,146337,146021],{},[303,146339,146340],{"className":469,"code":128720,"language":471,"meta":308,"style":308},[119,146341,146342,146348,146360],{"__ignoreMap":308},[312,146343,146344,146346],{"class":314,"line":315},[312,146345,53586],{"class":328},[312,146347,483],{"class":324},[312,146349,146350,146352,146354,146356,146358],{"class":314,"line":171},[312,146351,72400],{"class":488},[312,146353,492],{"class":324},[312,146355,2546],{"class":488},[312,146357,1437],{"class":1436},[312,146359,498],{"class":324},[312,146361,146362],{"class":314,"line":274},[312,146363,515],{"class":324},[14,146365,146367],{"id":146366},"_214-响应式开发","21.4 响应式开发",[24,146369,146370],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[19,146372],{"style":21,"src":146373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[24,146375,146376],{},"做法：",[243,146378,146379,146382],{},[143,146380,146381],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[143,146383,146384],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[19,146386],{"style":21,"src":146387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[24,146389,146390],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[69,146392,146394],{"id":146393},"_2141-简单代码示范","21.4.1 简单代码示范",[303,146396,146397],{"className":469,"code":146024,"language":471,"meta":308,"style":308},[119,146398,146399,146403,146409,146423,146427,146433,146447],{"__ignoreMap":308},[312,146400,146401],{"class":314,"line":315},[312,146402,146031],{"class":318},[312,146404,146405,146407],{"class":314,"line":171},[312,146406,52430],{"class":328},[312,146408,483],{"class":324},[312,146410,146411,146413,146415,146417,146419,146421],{"class":314,"line":274},[312,146412,72400],{"class":488},[312,146414,492],{"class":324},[312,146416,146046],{"class":488},[312,146418,2273],{"class":1436},[312,146420,132171],{"class":324},[312,146422,146053],{"class":318},[312,146424,146425],{"class":314,"line":298},[312,146426,515],{"class":324},[312,146428,146429,146431],{"class":314,"line":974},[312,146430,1362],{"class":332},[312,146432,483],{"class":324},[312,146434,146435,146437,146439,146441,146443,146445],{"class":314,"line":980},[312,146436,1541],{"class":488},[312,146438,492],{"class":324},[312,146440,2391],{"class":488},[312,146442,146074],{"class":1436},[312,146444,132171],{"class":324},[312,146446,146079],{"class":318},[312,146448,146449],{"class":314,"line":997},[312,146450,515],{"class":324},[24,146452,146453],{},"父盒子一般命名为container",[69,146455,146457],{"id":146456},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[24,146459,146460,146461],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[27,146462,146463],{},"使得 Web 开发更加快捷",[243,146465,146466],{},[143,146467,146468,146469],{},"官网：",[27,146470,146471],{},[164,146472,146473],{"href":146473,"rel":146474},"http:\u002F\u002Fgetbootstrap.com\u002F",[168],[24,146476,146477],{},"可以直接去官网拿现成的东西",[140,146479,146480],{},[143,146481,146482],{},"Bootstrap的使用",[24,146484,146485],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[24,146487,146488],{},"Bootstrap 使用四步曲：",[24,146490,146491,146494],{},[27,146492,146493],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[19,146496],{"style":21,"src":146497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[24,146499,146500],{},"打开Bootstrap官网，然后下载",[19,146502],{"style":21,"src":146503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[19,146505],{"style":21,"src":146506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[24,146508,146509],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[24,146511,146512],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[24,146514,146515],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[19,146517],{"style":21,"src":146518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[303,146520,146522],{"className":469,"code":146521,"language":471,"meta":308,"style":308},".center {\n  color: red;\n}\n",[119,146523,146524,146530,146540],{"__ignoreMap":308},[312,146525,146526,146528],{"class":314,"line":315},[312,146527,128607],{"class":332},[312,146529,483],{"class":324},[312,146531,146532,146534,146536,146538],{"class":314,"line":171},[312,146533,72677],{"class":488},[312,146535,492],{"class":324},[312,146537,59203],{"class":488},[312,146539,498],{"class":324},[312,146541,146542],{"class":314,"line":274},[312,146543,515],{"class":324},[24,146545,146546,146549],{},[119,146547,146548],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[19,146551],{"style":21,"src":146552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[19,146554],{"style":21,"src":146555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[19,146557],{"style":21,"src":146558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[24,146560,146561],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[19,146563],{"style":21,"src":146564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[24,146566,146567],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[140,146569,146570],{"start":171},[143,146571,146572],{},"布局容器",[19,146574],{"style":21,"src":146575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[24,146577,146578],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[24,146580,146581],{},"container-fluid用于移动式布局比较方便",[140,146583,146584],{"start":274},[143,146585,146586,146587],{},"bootstrap ",[27,146588,146589],{},"栅格系统原理",[19,146591],{"style":21,"src":146592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[140,146594,146595],{"start":298},[143,146596,146597],{},[27,146598,146599],{},"栅格选项参数",[19,146601],{"style":21,"src":146602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[24,146604,146605],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[24,146607,16434],{},[303,146609,146610],{"className":469,"code":146521,"language":471,"meta":308,"style":308},[119,146611,146612,146618,146628],{"__ignoreMap":308},[312,146613,146614,146616],{"class":314,"line":315},[312,146615,128607],{"class":332},[312,146617,483],{"class":324},[312,146619,146620,146622,146624,146626],{"class":314,"line":171},[312,146621,72677],{"class":488},[312,146623,492],{"class":324},[312,146625,59203],{"class":488},[312,146627,498],{"class":324},[312,146629,146630],{"class":314,"line":274},[312,146631,515],{"class":324},[24,146633,137317],{},[19,146635],{"style":21,"src":146636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[24,146638,146639],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[24,146641,146642],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[24,146644,146645],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[24,146647,146648],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[24,146650,146651],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[24,146653,146654],{},"汇总展示说明：",[303,146656,146657],{"className":305,"code":306,"language":307,"meta":308,"style":308},[119,146658,146659,146663,146677,146681],{"__ignoreMap":308},[312,146660,146661],{"class":314,"line":315},[312,146662,319],{"class":318},[312,146664,146665,146667,146669,146671,146673,146675],{"class":314,"line":171},[312,146666,325],{"class":324},[312,146668,329],{"class":328},[312,146670,333],{"class":332},[312,146672,336],{"class":324},[312,146674,340],{"class":339},[312,146676,343],{"class":324},[312,146678,146679],{"class":314,"line":274},[312,146680,348],{"class":324},[312,146682,146683,146685,146687],{"class":314,"line":298},[312,146684,353],{"class":324},[312,146686,329],{"class":328},[312,146688,343],{"class":324},[19,146690],{"style":21,"src":146691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[24,146693,146694],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[303,146696,146697],{"className":305,"code":306,"language":307,"meta":308,"style":308},[119,146698,146699,146703,146717,146721],{"__ignoreMap":308},[312,146700,146701],{"class":314,"line":315},[312,146702,319],{"class":318},[312,146704,146705,146707,146709,146711,146713,146715],{"class":314,"line":171},[312,146706,325],{"class":324},[312,146708,329],{"class":328},[312,146710,333],{"class":332},[312,146712,336],{"class":324},[312,146714,340],{"class":339},[312,146716,343],{"class":324},[312,146718,146719],{"class":314,"line":274},[312,146720,348],{"class":324},[312,146722,146723,146725,146727],{"class":314,"line":298},[312,146724,353],{"class":324},[312,146726,329],{"class":328},[312,146728,343],{"class":324},[140,146730,146731],{"start":974},[143,146732,146733],{},[27,146734,146735],{},"列嵌套",[19,146737],{"style":21,"src":146738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[24,146740,146741],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[24,146743,146744],{},"没加row内部这样：",[19,146746],{"style":21,"src":146747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[24,146749,146750],{},"加上row之后内部为：",[19,146752],{"style":21,"src":146753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[140,146755,146756],{"start":980},[143,146757,146758],{},[27,146759,146760],{},"列偏移",[19,146762],{"style":21,"src":146763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[24,146765,146766],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[24,146768,146769],{},"要加偏移量，即偏移份数",[24,146771,146772],{},"偏移的份数=12-两个盒子的份数",[140,146774,146775],{"start":997},[143,146776,146777],{},[27,146778,146779],{},"列排序",[19,146781],{"style":21,"src":146782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[24,146784,146785],{},"pull拉左；push推右",[140,146787,146788],{"start":1003},[143,146789,146790],{},[27,146791,146792],{},"响应式工具",[19,146794],{"style":21,"src":146795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[24,146797,146798],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[69,146800,146802],{"id":146801},"_2143-响应式小项目","21.4.3 响应式小项目",[24,146804,146805],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[24,146807,146808],{},"ul {",[24,146810,146811],{},"list-style: none;",[24,146813,146814],{},"margin:0;",[24,146816,146817],{},"padding:0; }",[19,146819],{"style":21,"src":146820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[19,146822],{"style":21,"src":146823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[24,146825,146826],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[24,146828,70666],{},[303,146830,146831],{"className":469,"code":1355,"language":471,"meta":308,"style":308},[119,146832,146833,146839,146849],{"__ignoreMap":308},[312,146834,146835,146837],{"class":314,"line":315},[312,146836,1362],{"class":332},[312,146838,483],{"class":324},[312,146840,146841,146843,146845,146847],{"class":314,"line":171},[312,146842,1369],{"class":488},[312,146844,492],{"class":324},[312,146846,1374],{"class":488},[312,146848,498],{"class":324},[312,146850,146851],{"class":314,"line":274},[312,146852,515],{"class":324},[24,146854,72230],{},[303,146856,146857],{"className":469,"code":1355,"language":471,"meta":308,"style":308},[119,146858,146859,146865,146875],{"__ignoreMap":308},[312,146860,146861,146863],{"class":314,"line":315},[312,146862,1362],{"class":332},[312,146864,483],{"class":324},[312,146866,146867,146869,146871,146873],{"class":314,"line":171},[312,146868,1369],{"class":488},[312,146870,492],{"class":324},[312,146872,1374],{"class":488},[312,146874,498],{"class":324},[312,146876,146877],{"class":314,"line":274},[312,146878,515],{"class":324},[14,146880,146882],{"id":146881},"_215-swiper-插件使用","21.5 swiper 插件使用",[243,146884,146885,146888,146891],{},[143,146886,146887],{},"下载需要的css和js文件html页面中 引入相关文件",[143,146889,146890],{},"官网找到类似案例，复制html结构，css样式 js 语法",[143,146892,146893],{},"根据需求定制修改模块",[19,146895],{"style":21,"src":146896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[24,146898,146899],{},"解压后将这两部分放到项目中",[19,146901],{"style":21,"src":146902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[24,146904,146905],{},"这个插件可以帮助我们实现轮播图效果",[24,146907,146908],{},"用法：",[19,146910],{"style":21,"src":146911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[24,146913,146914],{},"找到自己喜欢的",[19,146916],{"style":21,"src":146917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[24,146919,146920],{},"右键，查看网页源代码",[19,146922],{"style":21,"src":146923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[24,146925,146926],{},"复制人家的结构内容",[24,146928,146929],{},"然后去看API文档：",[19,146931],{"style":21,"src":146932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[24,146934,146935],{},"可以看看如何修改样式",[24,146937,146938],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1856,146940,146941],{},"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":308,"searchDepth":171,"depth":171,"links":146943},[146944,146949,146953,146958,146963],{"id":145744,"depth":171,"text":145745,"children":146945},[146946,146947,146948],{"id":145748,"depth":274,"text":145749},{"id":145758,"depth":274,"text":145759},{"id":145853,"depth":274,"text":145854},{"id":145868,"depth":171,"text":145869,"children":146950},[146951,146952],{"id":145890,"depth":274,"text":145891},{"id":145906,"depth":274,"text":145907},{"id":145981,"depth":171,"text":145982,"children":146954},[146955,146956,146957],{"id":145994,"depth":274,"text":145995},{"id":146218,"depth":274,"text":146219},{"id":146225,"depth":274,"text":146226},{"id":146366,"depth":171,"text":146367,"children":146959},[146960,146961,146962],{"id":146393,"depth":274,"text":146394},{"id":146456,"depth":274,"text":146457},{"id":146801,"depth":274,"text":146802},{"id":146881,"depth":171,"text":146882},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145736,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146970,"title":146971,"body":146972,"description":1878,"extension":1879,"meta":147192,"navigation":1881,"path":147193,"seo":147194,"stem":147195,"__hash__":147196},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146973,"toc":147188},[146974,146977,146981,146984,146999,147004,147007,147012,147047,147052,147064,147069,147082,147087,147104,147109,147129,147134,147152,147155,147158,147161,147164,147168,147171,147174,147177,147180,147183,147186],[10,146975,146971],{"id":146976},"_22-代码提交与新型相对单位",[14,146978,146980],{"id":146979},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[24,146982,146983],{},"法1：",[140,146985,146986,146993,146996],{},[143,146987,146988,146989],{},"登录网站注册：",[164,146990,146991],{"href":146991,"rel":146992},"https:\u002F\u002Fgitee.com\u002F",[168],[143,146994,146995],{},"码云创建新的仓库",[143,146997,146998],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[243,147000,147001],{},[143,147002,147003],{},"在网站根目录右键-- Git Bash Here",[19,147005],{"style":21,"src":147006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[243,147008,147009],{},[143,147010,147011],{},"如果是第一次利用git提交，请配置好全局选项",[303,147013,147015],{"className":119065,"code":147014,"language":119067,"meta":308,"style":308},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[119,147016,147017,147033],{"__ignoreMap":308},[312,147018,147019,147022,147024,147027,147030],{"class":314,"line":315},[312,147020,147021],{"class":332},"git",[312,147023,121488],{"class":339},[312,147025,147026],{"class":488}," --global",[312,147028,147029],{"class":339}," user.name",[312,147031,147032],{"class":339}," \"你的名字\"\n",[312,147034,147035,147037,147039,147041,147044],{"class":314,"line":171},[312,147036,147021],{"class":332},[312,147038,121488],{"class":339},[312,147040,147026],{"class":488},[312,147042,147043],{"class":339}," user.email",[312,147045,147046],{"class":339}," \"你的邮箱\"\n",[243,147048,147049],{},[143,147050,147051],{},"初始化仓库",[303,147053,147055],{"className":119065,"code":147054,"language":119067,"meta":308,"style":308},"git init\n",[119,147056,147057],{"__ignoreMap":308},[312,147058,147059,147061],{"class":314,"line":315},[312,147060,147021],{"class":332},[312,147062,147063],{"class":339}," init\n",[243,147065,147066],{},[143,147067,147068],{},"把本地文件放到暂存区",[303,147070,147072],{"className":119065,"code":147071,"language":119067,"meta":308,"style":308},"git add .\n",[119,147073,147074],{"__ignoreMap":308},[312,147075,147076,147078,147080],{"class":314,"line":315},[312,147077,147021],{"class":332},[312,147079,7014],{"class":339},[312,147081,30537],{"class":339},[243,147083,147084],{},[143,147085,147086],{},"把本地文件放到本地仓库里面",[303,147088,147090],{"className":119065,"code":147089,"language":119067,"meta":308,"style":308},"git commit -m \"first commit\"\n",[119,147091,147092],{"__ignoreMap":308},[312,147093,147094,147096,147099,147101],{"class":314,"line":315},[312,147095,147021],{"class":332},[312,147097,147098],{"class":339}," commit",[312,147100,102652],{"class":488},[312,147102,147103],{"class":339}," \"first commit\"\n",[243,147105,147106],{},[143,147107,147108],{},"链接远程仓库",[303,147110,147112],{"className":119065,"code":147111,"language":119067,"meta":308,"style":308},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[119,147113,147114],{"__ignoreMap":308},[312,147115,147116,147118,147121,147123,147126],{"class":314,"line":315},[312,147117,147021],{"class":332},[312,147119,147120],{"class":339}," remote",[312,147122,7014],{"class":339},[312,147124,147125],{"class":339}," origin",[312,147127,147128],{"class":339}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[243,147130,147131],{},[143,147132,147133],{},"把本地仓库的文件推送到远程仓库 push",[303,147135,147137],{"className":119065,"code":147136,"language":119067,"meta":308,"style":308},"git push -u origin master\n",[119,147138,147139],{"__ignoreMap":308},[312,147140,147141,147143,147145,147147,147149],{"class":314,"line":315},[312,147142,147021],{"class":332},[312,147144,30812],{"class":339},[312,147146,30086],{"class":488},[312,147148,147125],{"class":339},[312,147150,147151],{"class":339}," master\n",[19,147153],{"style":21,"src":147154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[24,147156,147157],{},"上方方法暂未实现，后边学完git后在整",[24,147159,147160],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[19,147162],{"style":21,"src":147163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,147165,147167],{"id":147166},"_222-新型相对单位","22.2 新型相对单位",[19,147169],{"style":21,"src":147170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[19,147172],{"style":21,"src":147173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[24,147175,147176],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[24,147178,147179],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[19,147181],{"style":21,"src":147182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[24,147184,147185],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1856,147187,25753],{},{"title":308,"searchDepth":171,"depth":171,"links":147189},[147190,147191],{"id":146979,"depth":171,"text":146980},{"id":147166,"depth":171,"text":147167},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146971,"description":1878},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":147198,"title":147199,"body":147200,"description":147204,"extension":1879,"meta":147205,"navigation":1881,"path":147206,"seo":147207,"stem":147208,"__hash__":147209},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":147201,"toc":147202},[],{"title":308,"searchDepth":171,"depth":171,"links":147203},[],"自己正经开始学编程的第一门语言！",{"category":94609},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":147199,"description":147204},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":147211,"title":147212,"body":147213,"description":1878,"extension":1879,"meta":148360,"navigation":1881,"path":148361,"seo":148362,"stem":148363,"__hash__":148364},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147214,"toc":148336},[147215,147218,147222,147225,147228,147253,147256,147262,147266,147269,147296,147299,147339,147342,147354,147357,147363,147367,147371,147398,147415,147422,147426,147429,147455,147458,147462,147465,147505,147508,147525,147531,147535,147540,147584,147587,147605,147608,147676,147680,147687,147690,147705,147708,147717,147720,147731,147734,147743,147746,147763,147766,147781,147785,147789,147792,147794,147814,147818,147821,147824,147835,147838,147844,147848,147854,147881,147884,147896,147899,147910,147913,147919,147923,147929,147979,147982,148024,148027,148060,148063,148097,148101,148104,148124,148127,148163,148166,148179,148183,148187,148193,148196,148209,148213,148216,148222,148225,148229,148232,148235,148284,148288,148304,148310,148317,148323,148333],[10,147216,147212],{"id":147217},"_1-python环境与第一个程序",[14,147219,147221],{"id":147220},"_11-什么是python","1.1 什么是Python",[24,147223,147224],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[24,147226,147227],{},"理解 Python 时抓住三个关键词：",[140,147229,147230,147233,147236],{},[143,147231,147232],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[143,147234,147235],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[143,147237,147238,147239,2159,147242,2159,147245,2159,147248,2159,147250,30181],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[119,147240,147241],{},"os",[119,147243,147244],{},"sys",[119,147246,147247],{},"json",[119,147249,59642],{},[119,147251,147252],{},"datetime",[24,147254,147255],{},"Python 程序的运行链路：",[303,147257,147260],{"className":147258,"code":147259,"language":6992,"meta":308},[6990],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[119,147261,147259],{"__ignoreMap":308},[14,147263,147265],{"id":147264},"_12-python解释器","1.2 Python解释器",[24,147267,147268],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[303,147270,147272],{"className":25618,"code":147271,"language":25620,"meta":308,"style":308},"python --version\npython3 --version\npython\npython3\n",[119,147273,147274,147280,147286,147291],{"__ignoreMap":308},[312,147275,147276,147278],{"class":314,"line":315},[312,147277,32176],{"class":332},[312,147279,28089],{"class":488},[312,147281,147282,147284],{"class":314,"line":171},[312,147283,102649],{"class":332},[312,147285,28089],{"class":488},[312,147287,147288],{"class":314,"line":274},[312,147289,147290],{"class":332},"python\n",[312,147292,147293],{"class":314,"line":298},[312,147294,147295],{"class":332},"python3\n",[24,147297,147298],{},"进入交互模式后，可以直接输入表达式：",[303,147300,147302],{"className":32174,"code":147301,"language":32176,"meta":308,"style":308},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[119,147303,147304,147315,147320,147334],{"__ignoreMap":308},[312,147305,147306,147309,147311,147313],{"class":314,"line":315},[312,147307,147308],{"class":1436},">>>",[312,147310,26914],{"class":488},[312,147312,47361],{"class":1436},[312,147314,49518],{"class":488},[312,147316,147317],{"class":314,"line":171},[312,147318,147319],{"class":488},"3\n",[312,147321,147322,147324,147327,147329,147332],{"class":314,"line":274},[312,147323,147308],{"class":1436},[312,147325,147326],{"class":488}," print",[312,147328,1576],{"class":324},[312,147330,147331],{"class":339},"\"hello python\"",[312,147333,1959],{"class":324},[312,147335,147336],{"class":314,"line":298},[312,147337,147338],{"class":324},"hello python\n",[24,147340,147341],{},"退出交互模式：",[303,147343,147345],{"className":32174,"code":147344,"language":32176,"meta":308,"style":308},"exit()\n",[119,147346,147347],{"__ignoreMap":308},[312,147348,147349,147352],{"class":314,"line":315},[312,147350,147351],{"class":488},"exit",[312,147353,3781],{"class":324},[24,147355,147356],{},"或使用快捷键：",[303,147358,147361],{"className":147359,"code":147360,"language":6992,"meta":308},[6990],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[119,147362,147360],{"__ignoreMap":308},[14,147364,147366],{"id":147365},"_13-安装python","1.3 安装Python",[69,147368,147370],{"id":147369},"_131-windows安装","1.3.1 Windows安装",[140,147372,147373,147380,147383,147389,147395],{},[143,147374,147375,147376],{},"打开 Python 官网：",[164,147377,147378],{"href":147378,"rel":147379},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[168],[143,147381,147382],{},"下载 Windows Installer。",[143,147384,147385,147386,30181],{},"安装时勾选 ",[119,147387,147388],{},"Add Python to PATH",[143,147390,147391,147392,30181],{},"点击 ",[119,147393,147394],{},"Install Now",[143,147396,147397],{},"安装完成后打开命令提示符验证：",[303,147399,147401],{"className":25618,"code":147400,"language":25620,"meta":308,"style":308},"python --version\npip --version\n",[119,147402,147403,147409],{"__ignoreMap":308},[312,147404,147405,147407],{"class":314,"line":315},[312,147406,32176],{"class":332},[312,147408,28089],{"class":488},[312,147410,147411,147413],{"class":314,"line":171},[312,147412,25627],{"class":332},[312,147414,28089],{"class":488},[24,147416,147417,147418,147421],{},"如果提示 ",[119,147419,147420],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[69,147423,147425],{"id":147424},"_132-macos安装","1.3.2 macOS安装",[24,147427,147428],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[303,147430,147432],{"className":25618,"code":147431,"language":25620,"meta":308,"style":308},"brew install python\npython3 --version\npip3 --version\n",[119,147433,147434,147443,147449],{"__ignoreMap":308},[312,147435,147436,147439,147441],{"class":314,"line":315},[312,147437,147438],{"class":332},"brew",[312,147440,25630],{"class":339},[312,147442,126085],{"class":339},[312,147444,147445,147447],{"class":314,"line":171},[312,147446,102649],{"class":332},[312,147448,28089],{"class":488},[312,147450,147451,147453],{"class":314,"line":274},[312,147452,121469],{"class":332},[312,147454,28089],{"class":488},[24,147456,147457],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[69,147459,147461],{"id":147460},"_133-linux安装","1.3.3 Linux安装",[24,147463,147464],{},"Ubuntu\u002FDebian：",[303,147466,147468],{"className":25618,"code":147467,"language":25620,"meta":308,"style":308},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[119,147469,147470,147478,147493,147499],{"__ignoreMap":308},[312,147471,147472,147474,147476],{"class":314,"line":315},[312,147473,26372],{"class":332},[312,147475,119086],{"class":339},[312,147477,28038],{"class":339},[312,147479,147480,147482,147484,147486,147488,147490],{"class":314,"line":171},[312,147481,26372],{"class":332},[312,147483,119086],{"class":339},[312,147485,25630],{"class":339},[312,147487,106172],{"class":339},[312,147489,102568],{"class":339},[312,147491,147492],{"class":339}," python3-venv\n",[312,147494,147495,147497],{"class":314,"line":274},[312,147496,102649],{"class":332},[312,147498,28089],{"class":488},[312,147500,147501,147503],{"class":314,"line":298},[312,147502,121469],{"class":332},[312,147504,28089],{"class":488},[24,147506,147507],{},"Fedora：",[303,147509,147511],{"className":25618,"code":147510,"language":25620,"meta":308,"style":308},"sudo dnf install python3 python3-pip\n",[119,147512,147513],{"__ignoreMap":308},[312,147514,147515,147517,147519,147521,147523],{"class":314,"line":315},[312,147516,26372],{"class":332},[312,147518,28111],{"class":339},[312,147520,25630],{"class":339},[312,147522,106172],{"class":339},[312,147524,121534],{"class":339},[24,147526,147527,147528,147530],{},"Linux 上通常使用 ",[119,147529,102649],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147532,147534],{"id":147533},"_14-pip包管理器","1.4 pip包管理器",[24,147536,147537,147539],{},[119,147538,25627],{}," 用来安装第三方库。",[303,147541,147543],{"className":25618,"code":147542,"language":25620,"meta":308,"style":308},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[119,147544,147545,147554,147563,147571,147577],{"__ignoreMap":308},[312,147546,147547,147549,147551],{"class":314,"line":315},[312,147548,25627],{"class":332},[312,147550,25630],{"class":339},[312,147552,147553],{"class":339}," requests\n",[312,147555,147556,147558,147561],{"class":314,"line":171},[312,147557,25627],{"class":332},[312,147559,147560],{"class":339}," uninstall",[312,147562,147553],{"class":339},[312,147564,147565,147567,147569],{"class":314,"line":274},[312,147566,25627],{"class":332},[312,147568,119343],{"class":339},[312,147570,147553],{"class":339},[312,147572,147573,147575],{"class":314,"line":298},[312,147574,25627],{"class":332},[312,147576,120724],{"class":339},[312,147578,147579,147581],{"class":314,"line":974},[312,147580,25627],{"class":332},[312,147582,147583],{"class":339}," freeze\n",[24,147585,147586],{},"国内网络较慢时可以临时使用镜像：",[303,147588,147590],{"className":25618,"code":147589,"language":25620,"meta":308,"style":308},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[119,147591,147592],{"__ignoreMap":308},[312,147593,147594,147596,147598,147601,147603],{"class":314,"line":315},[312,147595,25627],{"class":332},[312,147597,25630],{"class":339},[312,147599,147600],{"class":339}," requests",[312,147602,28226],{"class":488},[312,147604,121497],{"class":339},[24,147606,147607],{},"常见第三方库：",[2086,147609,147610,147619],{},[2089,147611,147612],{},[2092,147613,147614,147617],{},[2095,147615,147616],{},"库",[2095,147618,104465],{},[2132,147620,147621,147629,147636,147644,147652,147660,147668],{},[2092,147622,147623,147626],{},[2137,147624,147625],{},"requests",[2137,147627,147628],{},"网络请求",[2092,147630,147631,147633],{},[2137,147632,102396],{},[2137,147634,147635],{},"数值计算",[2092,147637,147638,147641],{},[2137,147639,147640],{},"pandas",[2137,147642,147643],{},"表格数据处理",[2092,147645,147646,147649],{},[2137,147647,147648],{},"matplotlib",[2137,147650,147651],{},"绘图",[2092,147653,147654,147657],{},[2137,147655,147656],{},"pyecharts",[2137,147658,147659],{},"ECharts 图表",[2092,147661,147662,147665],{},[2137,147663,147664],{},"flask",[2137,147666,147667],{},"Web 后端",[2092,147669,147670,147673],{},[2137,147671,147672],{},"pytest",[2137,147674,147675],{},"自动化测试",[14,147677,147679],{"id":147678},"_15-虚拟环境","1.5 虚拟环境",[24,147681,147682,147683,147686],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[119,147684,147685],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[24,147688,147689],{},"创建虚拟环境：",[303,147691,147693],{"className":25618,"code":147692,"language":25620,"meta":308,"style":308},"python -m venv .venv\n",[119,147694,147695],{"__ignoreMap":308},[312,147696,147697,147699,147701,147703],{"class":314,"line":315},[312,147698,32176],{"class":332},[312,147700,102652],{"class":488},[312,147702,102655],{"class":339},[312,147704,102658],{"class":339},[24,147706,147707],{},"Windows 激活：",[303,147709,147711],{"className":25618,"code":147710,"language":25620,"meta":308,"style":308},".venv\\Scripts\\activate\n",[119,147712,147713],{"__ignoreMap":308},[312,147714,147715],{"class":314,"line":315},[312,147716,147710],{"class":332},[24,147718,147719],{},"macOS\u002FLinux 激活：",[303,147721,147723],{"className":25618,"code":147722,"language":25620,"meta":308,"style":308},"source .venv\u002Fbin\u002Factivate\n",[119,147724,147725],{"__ignoreMap":308},[312,147726,147727,147729],{"class":314,"line":315},[312,147728,102663],{"class":488},[312,147730,102666],{"class":339},[24,147732,147733],{},"退出虚拟环境：",[303,147735,147737],{"className":25618,"code":147736,"language":25620,"meta":308,"style":308},"deactivate\n",[119,147738,147739],{"__ignoreMap":308},[312,147740,147741],{"class":314,"line":315},[312,147742,147736],{"class":332},[24,147744,147745],{},"保存依赖：",[303,147747,147749],{"className":25618,"code":147748,"language":25620,"meta":308,"style":308},"pip freeze > requirements.txt\n",[119,147750,147751],{"__ignoreMap":308},[312,147752,147753,147755,147758,147760],{"class":314,"line":315},[312,147754,25627],{"class":332},[312,147756,147757],{"class":339}," freeze",[312,147759,28018],{"class":1436},[312,147761,147762],{"class":339}," requirements.txt\n",[24,147764,147765],{},"安装依赖：",[303,147767,147769],{"className":25618,"code":147768,"language":25620,"meta":308,"style":308},"pip install -r requirements.txt\n",[119,147770,147771],{"__ignoreMap":308},[312,147772,147773,147775,147777,147779],{"class":314,"line":315},[312,147774,25627],{"class":332},[312,147776,25630],{"class":339},[312,147778,121408],{"class":488},[312,147780,147762],{"class":339},[14,147782,147784],{"id":147783},"_16-开发工具","1.6 开发工具",[69,147786,147788],{"id":147787},"_161-pycharm","1.6.1 PyCharm",[24,147790,147791],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[24,147793,123830],{},[140,147795,147796,147799,147802,147808,147811],{},[143,147797,147798],{},"New Project：创建项目。",[143,147800,147801],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[143,147803,147804,147805,127750],{},"New Python File：创建 ",[119,147806,147807],{},".py",[143,147809,147810],{},"Run：运行当前文件。",[143,147812,147813],{},"Debug：断点调试。",[69,147815,147817],{"id":147816},"_162-vs-code","1.6.2 VS Code",[24,147819,147820],{},"VS Code 轻量，适合后续多语言开发。",[24,147822,147823],{},"建议安装插件：",[140,147825,147826,147829,147832],{},[143,147827,147828],{},"Python。",[143,147830,147831],{},"Pylance。",[143,147833,147834],{},"Jupyter。",[24,147836,147837],{},"选择解释器：",[303,147839,147842],{"className":147840,"code":147841,"language":6992,"meta":308},[6990],"Ctrl + Shift + P -> Python: Select Interpreter\n",[119,147843,147841],{"__ignoreMap":308},[14,147845,147847],{"id":147846},"_17-第一个python程序","1.7 第一个Python程序",[24,147849,147850,147851,26414],{},"创建文件 ",[119,147852,147853],{},"hello.py",[303,147855,147857],{"className":32174,"code":147856,"language":32176,"meta":308,"style":308},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[119,147858,147859,147870],{"__ignoreMap":308},[312,147860,147861,147863,147865,147868],{"class":314,"line":315},[312,147862,32211],{"class":488},[312,147864,1576],{"class":324},[312,147866,147867],{"class":339},"\"Hello World\"",[312,147869,1959],{"class":324},[312,147871,147872,147874,147876,147879],{"class":314,"line":171},[312,147873,32211],{"class":488},[312,147875,1576],{"class":324},[312,147877,147878],{"class":339},"\"你好，Python\"",[312,147880,1959],{"class":324},[24,147882,147883],{},"在终端运行：",[303,147885,147887],{"className":25618,"code":147886,"language":25620,"meta":308,"style":308},"python hello.py\n",[119,147888,147889],{"__ignoreMap":308},[312,147890,147891,147893],{"class":314,"line":315},[312,147892,32176],{"class":332},[312,147894,147895],{"class":339}," hello.py\n",[24,147897,147898],{},"或：",[303,147900,147902],{"className":25618,"code":147901,"language":25620,"meta":308,"style":308},"python3 hello.py\n",[119,147903,147904],{"__ignoreMap":308},[312,147905,147906,147908],{"class":314,"line":315},[312,147907,102649],{"class":332},[312,147909,147895],{"class":339},[24,147911,147912],{},"输出：",[303,147914,147917],{"className":147915,"code":147916,"language":6992,"meta":308},[6990],"Hello World\n你好，Python\n",[119,147918,147916],{"__ignoreMap":308},[14,147920,147922],{"id":147921},"_18-print函数","1.8 print函数",[24,147924,147925,147928],{},[119,147926,147927],{},"print()"," 用来输出内容。",[303,147930,147932],{"className":32174,"code":147931,"language":32176,"meta":308,"style":308},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[119,147933,147934,147944,147954,147964],{"__ignoreMap":308},[312,147935,147936,147938,147940,147942],{"class":314,"line":315},[312,147937,32211],{"class":488},[312,147939,1576],{"class":324},[312,147941,7648],{"class":339},[312,147943,1959],{"class":324},[312,147945,147946,147948,147950,147952],{"class":314,"line":171},[312,147947,32211],{"class":488},[312,147949,1576],{"class":324},[312,147951,2256],{"class":488},[312,147953,1959],{"class":324},[312,147955,147956,147958,147960,147962],{"class":314,"line":274},[312,147957,32211],{"class":488},[312,147959,1576],{"class":324},[312,147961,2000],{"class":488},[312,147963,1959],{"class":324},[312,147965,147966,147968,147970,147973,147975,147977],{"class":314,"line":298},[312,147967,32211],{"class":488},[312,147969,1576],{"class":324},[312,147971,147972],{"class":339},"\"年龄:\"",[312,147974,733],{"class":324},[312,147976,2595],{"class":488},[312,147978,1959],{"class":324},[24,147980,147981],{},"多个内容用逗号隔开，默认中间加空格：",[303,147983,147985],{"className":32174,"code":147984,"language":32176,"meta":308,"style":308},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[119,147986,147987,147997,148007],{"__ignoreMap":308},[312,147988,147989,147992,147994],{"class":314,"line":315},[312,147990,147991],{"class":324},"name ",[312,147993,336],{"class":1436},[312,147995,147996],{"class":339}," \"张三\"\n",[312,147998,147999,148002,148004],{"class":314,"line":171},[312,148000,148001],{"class":324},"age ",[312,148003,336],{"class":1436},[312,148005,148006],{"class":488}," 18\n",[312,148008,148009,148011,148013,148016,148019,148021],{"class":314,"line":274},[312,148010,32211],{"class":488},[312,148012,1576],{"class":324},[312,148014,148015],{"class":339},"\"姓名:\"",[312,148017,148018],{"class":324},", name, ",[312,148020,147972],{"class":339},[312,148022,148023],{"class":324},", age)\n",[24,148025,148026],{},"修改分隔符：",[303,148028,148030],{"className":32174,"code":148029,"language":32176,"meta":308,"style":308},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[119,148031,148032],{"__ignoreMap":308},[312,148033,148034,148036,148038,148041,148043,148045,148047,148049,148051,148054,148056,148058],{"class":314,"line":315},[312,148035,32211],{"class":488},[312,148037,1576],{"class":324},[312,148039,148040],{"class":339},"\"2024\"",[312,148042,733],{"class":324},[312,148044,56100],{"class":339},[312,148046,733],{"class":324},[312,148048,56100],{"class":339},[312,148050,733],{"class":324},[312,148052,148053],{"class":1579},"sep",[312,148055,336],{"class":1436},[312,148057,34278],{"class":339},[312,148059,1959],{"class":324},[24,148061,148062],{},"修改结尾符：",[303,148064,148066],{"className":32174,"code":148065,"language":32176,"meta":308,"style":308},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[119,148067,148068,148086],{"__ignoreMap":308},[312,148069,148070,148072,148074,148076,148078,148080,148082,148084],{"class":314,"line":315},[312,148071,32211],{"class":488},[312,148073,1576],{"class":324},[312,148075,7648],{"class":339},[312,148077,733],{"class":324},[312,148079,47596],{"class":1579},[312,148081,336],{"class":1436},[312,148083,6164],{"class":339},[312,148085,1959],{"class":324},[312,148087,148088,148090,148092,148095],{"class":314,"line":171},[312,148089,32211],{"class":488},[312,148091,1576],{"class":324},[312,148093,148094],{"class":339},"\"python\"",[312,148096,1959],{"class":324},[14,148098,148100],{"id":148099},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[24,148102,148103],{},"交互运行适合临时验证：",[303,148105,148107],{"className":32174,"code":148106,"language":32176,"meta":308,"style":308},">>> 10 * 3\n30\n",[119,148108,148109,148119],{"__ignoreMap":308},[312,148110,148111,148113,148115,148117],{"class":314,"line":315},[312,148112,147308],{"class":1436},[312,148114,3843],{"class":488},[312,148116,8322],{"class":1436},[312,148118,121805],{"class":488},[312,148120,148121],{"class":314,"line":171},[312,148122,148123],{"class":488},"30\n",[24,148125,148126],{},"脚本运行适合保存程序：",[303,148128,148130],{"className":32174,"code":148129,"language":32176,"meta":308,"style":308},"price = 8\ncount = 5\nprint(price * count)\n",[119,148131,148132,148142,148151],{"__ignoreMap":308},[312,148133,148134,148137,148139],{"class":314,"line":315},[312,148135,148136],{"class":324},"price ",[312,148138,336],{"class":1436},[312,148140,148141],{"class":488}," 8\n",[312,148143,148144,148147,148149],{"class":314,"line":171},[312,148145,148146],{"class":324},"count ",[312,148148,336],{"class":1436},[312,148150,56211],{"class":488},[312,148152,148153,148155,148158,148160],{"class":314,"line":274},[312,148154,32211],{"class":488},[312,148156,148157],{"class":324},"(price ",[312,148159,2400],{"class":1436},[312,148161,148162],{"class":324}," count)\n",[24,148164,148165],{},"实际学习中推荐：",[140,148167,148168,148171,148176],{},[143,148169,148170],{},"临时试一个语法，用交互模式。",[143,148172,148173,148174,127750],{},"写完整练习，用 ",[119,148175,147807],{},[143,148177,148178],{},"写项目，用独立目录和虚拟环境。",[14,148180,148182],{"id":148181},"_110-常见错误","1.10 常见错误",[69,148184,148186],{"id":148185},"_1101-命令找不到","1.10.1 命令找不到",[303,148188,148191],{"className":148189,"code":148190,"language":6992,"meta":308},[6990],"python: command not found\n",[119,148192,148190],{"__ignoreMap":308},[24,148194,148195],{},"原因：",[140,148197,148198,148201,148204],{},[143,148199,148200],{},"没安装 Python。",[143,148202,148203],{},"PATH 没配置。",[143,148205,148206,148207,30181],{},"Linux\u002FmacOS 应该使用 ",[119,148208,102649],{},[69,148210,148212],{"id":148211},"_1102-文件名冲突","1.10.2 文件名冲突",[24,148214,148215],{},"不要把文件命名为：",[303,148217,148220],{"className":148218,"code":148219,"language":6992,"meta":308},[6990],"random.py\njson.py\ntime.py\nrequests.py\n",[119,148221,148219],{"__ignoreMap":308},[24,148223,148224],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[69,148226,148228],{"id":148227},"_1103-中文乱码","1.10.3 中文乱码",[24,148230,148231],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[24,148233,148234],{},"如果读写文件出现乱码，要明确指定编码：",[303,148236,148238],{"className":32174,"code":148237,"language":32176,"meta":308,"style":308},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[119,148239,148240,148274],{"__ignoreMap":308},[312,148241,148242,148244,148247,148249,148252,148254,148257,148259,148262,148264,148267,148269,148271],{"class":314,"line":315},[312,148243,109602],{"class":1436},[312,148245,148246],{"class":488}," open",[312,148248,1576],{"class":324},[312,148250,148251],{"class":339},"\"data.txt\"",[312,148253,733],{"class":324},[312,148255,148256],{"class":339},"\"r\"",[312,148258,733],{"class":324},[312,148260,148261],{"class":1579},"encoding",[312,148263,336],{"class":1436},[312,148265,148266],{"class":339},"\"utf-8\"",[312,148268,1583],{"class":324},[312,148270,33178],{"class":1436},[312,148272,148273],{"class":324}," f:\n",[312,148275,148276,148279,148281],{"class":314,"line":171},[312,148277,148278],{"class":324},"    content ",[312,148280,336],{"class":1436},[312,148282,148283],{"class":324}," f.read()\n",[14,148285,148287],{"id":148286},"_111-本章练习","1.11 本章练习",[140,148289,148290,148293,148299],{},[143,148291,148292],{},"安装 Python，并在终端输出版本号。",[143,148294,148295,148296,148298],{},"新建 ",[119,148297,147853],{},"，输出自己的姓名、年龄、学习目标。",[143,148300,106135,148301,148303],{},[119,148302,147927],{}," 输出下面格式：",[303,148305,148308],{"className":148306,"code":148307,"language":6992,"meta":308},[6990],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[119,148309,148307],{"__ignoreMap":308},[140,148311,148312],{"start":298},[143,148313,106135,148314,148316],{},[119,148315,148053],{}," 输出日期：",[303,148318,148321],{"className":148319,"code":148320,"language":6992,"meta":308},[6990],"2024-10-10\n",[119,148322,148320],{"__ignoreMap":308},[140,148324,148325],{"start":974},[143,148326,106135,148327,148329,148330,148332],{},[119,148328,47596],{}," 让两次 ",[119,148331,147927],{}," 输出在同一行。",[1856,148334,148335],{},"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":308,"searchDepth":171,"depth":171,"links":148337},[148338,148339,148340,148345,148346,148347,148351,148352,148353,148354,148359],{"id":147220,"depth":171,"text":147221},{"id":147264,"depth":171,"text":147265},{"id":147365,"depth":171,"text":147366,"children":148341},[148342,148343,148344],{"id":147369,"depth":274,"text":147370},{"id":147424,"depth":274,"text":147425},{"id":147460,"depth":274,"text":147461},{"id":147533,"depth":171,"text":147534},{"id":147678,"depth":171,"text":147679},{"id":147783,"depth":171,"text":147784,"children":148348},[148349,148350],{"id":147787,"depth":274,"text":147788},{"id":147816,"depth":274,"text":147817},{"id":147846,"depth":171,"text":147847},{"id":147921,"depth":171,"text":147922},{"id":148099,"depth":171,"text":148100},{"id":148181,"depth":171,"text":148182,"children":148355},[148356,148357,148358],{"id":148185,"depth":274,"text":148186},{"id":148211,"depth":274,"text":148212},{"id":148227,"depth":274,"text":148228},{"id":148286,"depth":171,"text":148287},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":147212,"description":1878},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148366,"title":148367,"body":148368,"description":1878,"extension":1879,"meta":150772,"navigation":1881,"path":150773,"seo":150774,"stem":150775,"__hash__":150776},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148369,"toc":150757},[148370,148373,148377,148380,148383,148400,148403,148445,148448,148452,148455,148458,148495,148498,148532,148535,148627,148631,148645,148648,148675,148678,148682,148785,148792,148795,148812,148816,148823,149012,149015,149088,149092,149095,149179,149182,149214,149218,149422,149425,149429,149435,149537,149540,149796,149800,149803,149806,149820,149822,150008,150012,150374,150380,150384,150387,150511,150514,150693,150696,150700,150733,150737,150754],[10,148371,148367],{"id":148372},"_10-json与pyecharts折线图",[14,148374,148376],{"id":148375},"_101-数据可视化","10.1 数据可视化",[24,148378,148379],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[24,148381,148382],{},"常见图表：",[140,148384,148385,148388,148391,148394,148397],{},[143,148386,148387],{},"折线图：看趋势。",[143,148389,148390],{},"柱状图：看分类对比。",[143,148392,148393],{},"饼图：看占比。",[143,148395,148396],{},"地图：看地域分布。",[143,148398,148399],{},"散点图：看两个变量之间的关系。",[24,148401,148402],{},"Python 可视化常用库：",[2086,148404,148405,148413],{},[2089,148406,148407],{},[2092,148408,148409,148411],{},[2095,148410,147616],{},[2095,148412,25536],{},[2132,148414,148415,148422,148430,148437],{},[2092,148416,148417,148419],{},[2137,148418,147648],{},[2137,148420,148421],{},"基础、经典、可定制",[2092,148423,148424,148427],{},[2137,148425,148426],{},"seaborn",[2137,148428,148429],{},"统计图表更美观",[2092,148431,148432,148434],{},[2137,148433,147656],{},[2137,148435,148436],{},"生成交互式网页图表",[2092,148438,148439,148442],{},[2137,148440,148441],{},"plotly",[2137,148443,148444],{},"交互图表能力强",[24,148446,148447],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,148449,148451],{"id":148450},"_102-json回顾","10.2 JSON回顾",[24,148453,148454],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[24,148456,148457],{},"Python 字典：",[303,148459,148461],{"className":32174,"code":148460,"language":32176,"meta":308,"style":308},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[119,148462,148463,148471,148482,148491],{"__ignoreMap":308},[312,148464,148465,148467,148469],{"class":314,"line":315},[312,148466,103427],{"class":324},[312,148468,336],{"class":1436},[312,148470,483],{"class":324},[312,148472,148473,148476,148478,148480],{"class":314,"line":171},[312,148474,148475],{"class":339},"    \"name\"",[312,148477,492],{"class":324},[312,148479,71046],{"class":339},[312,148481,33261],{"class":324},[312,148483,148484,148487,148489],{"class":314,"line":274},[312,148485,148486],{"class":339},"    \"value\"",[312,148488,492],{"class":324},[312,148490,99228],{"class":488},[312,148492,148493],{"class":314,"line":298},[312,148494,515],{"class":324},[24,148496,148497],{},"JSON 字符串：",[303,148499,148502],{"className":148500,"code":148501,"language":147247,"meta":308,"style":308},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[119,148503,148504,148508,148519,148528],{"__ignoreMap":308},[312,148505,148506],{"class":314,"line":315},[312,148507,3353],{"class":324},[312,148509,148510,148513,148515,148517],{"class":314,"line":171},[312,148511,148512],{"class":488},"  \"name\"",[312,148514,492],{"class":324},[312,148516,71046],{"class":339},[312,148518,33261],{"class":324},[312,148520,148521,148524,148526],{"class":314,"line":274},[312,148522,148523],{"class":488},"  \"value\"",[312,148525,492],{"class":324},[312,148527,99228],{"class":488},[312,148529,148530],{"class":314,"line":298},[312,148531,515],{"class":324},[24,148533,148534],{},"Python 与 JSON 的转换：",[303,148536,148538],{"className":32174,"code":148537,"language":32176,"meta":308,"style":308},"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",[119,148539,148540,148547,148551,148576,148580,148599,148606,148610,148620],{"__ignoreMap":308},[312,148541,148542,148544],{"class":314,"line":315},[312,148543,32188],{"class":1436},[312,148545,148546],{"class":324}," json\n",[312,148548,148549],{"class":314,"line":171},[312,148550,4205],{"emptyLinePlaceholder":1881},[312,148552,148553,148555,148557,148559,148561,148563,148565,148567,148570,148572,148574],{"class":314,"line":274},[312,148554,103427],{"class":324},[312,148556,336],{"class":1436},[312,148558,6253],{"class":324},[312,148560,64457],{"class":339},[312,148562,492],{"class":324},[312,148564,71046],{"class":339},[312,148566,733],{"class":324},[312,148568,148569],{"class":339},"\"value\"",[312,148571,492],{"class":324},[312,148573,2256],{"class":488},[312,148575,515],{"class":324},[312,148577,148578],{"class":314,"line":298},[312,148579,4205],{"emptyLinePlaceholder":1881},[312,148581,148582,148585,148587,148590,148593,148595,148597],{"class":314,"line":974},[312,148583,148584],{"class":324},"json_text ",[312,148586,336],{"class":1436},[312,148588,148589],{"class":324}," json.dumps(data, ",[312,148591,148592],{"class":1579},"ensure_ascii",[312,148594,336],{"class":1436},[312,148596,35782],{"class":488},[312,148598,1959],{"class":324},[312,148600,148601,148603],{"class":314,"line":980},[312,148602,32211],{"class":488},[312,148604,148605],{"class":324},"(json_text)\n",[312,148607,148608],{"class":314,"line":997},[312,148609,4205],{"emptyLinePlaceholder":1881},[312,148611,148612,148615,148617],{"class":314,"line":1003},[312,148613,148614],{"class":324},"new_data ",[312,148616,336],{"class":1436},[312,148618,148619],{"class":324}," json.loads(json_text)\n",[312,148621,148622,148624],{"class":314,"line":1020},[312,148623,32211],{"class":488},[312,148625,148626],{"class":324},"(new_data)\n",[14,148628,148630],{"id":148629},"_103-安装pyecharts","10.3 安装pyecharts",[303,148632,148634],{"className":25618,"code":148633,"language":25620,"meta":308,"style":308},"pip install pyecharts\n",[119,148635,148636],{"__ignoreMap":308},[312,148637,148638,148640,148642],{"class":314,"line":315},[312,148639,25627],{"class":332},[312,148641,25630],{"class":339},[312,148643,148644],{"class":339}," pyecharts\n",[24,148646,148647],{},"验证：",[303,148649,148651],{"className":32174,"code":148650,"language":32176,"meta":308,"style":308},"import pyecharts\n\nprint(pyecharts.__version__)\n",[119,148652,148653,148659,148663],{"__ignoreMap":308},[312,148654,148655,148657],{"class":314,"line":315},[312,148656,32188],{"class":1436},[312,148658,148644],{"class":324},[312,148660,148661],{"class":314,"line":171},[312,148662,4205],{"emptyLinePlaceholder":1881},[312,148664,148665,148667,148670,148673],{"class":314,"line":274},[312,148666,32211],{"class":488},[312,148668,148669],{"class":324},"(pyecharts.",[312,148671,148672],{"class":488},"__version__",[312,148674,1959],{"class":324},[24,148676,148677],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148679,148681],{"id":148680},"_104-第一个折线图","10.4 第一个折线图",[303,148683,148685],{"className":32174,"code":148684,"language":32176,"meta":308,"style":308},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[119,148686,148687,148699,148703,148713,148743,148775],{"__ignoreMap":308},[312,148688,148689,148691,148694,148696],{"class":314,"line":315},[312,148690,32533],{"class":1436},[312,148692,148693],{"class":324}," pyecharts.charts ",[312,148695,32188],{"class":1436},[312,148697,148698],{"class":324}," Line\n",[312,148700,148701],{"class":314,"line":171},[312,148702,4205],{"emptyLinePlaceholder":1881},[312,148704,148705,148708,148710],{"class":314,"line":274},[312,148706,148707],{"class":324},"line ",[312,148709,336],{"class":1436},[312,148711,148712],{"class":324}," Line()\n",[312,148714,148715,148718,148721,148723,148726,148728,148731,148733,148736,148738,148741],{"class":314,"line":298},[312,148716,148717],{"class":324},"line.add_xaxis([",[312,148719,148720],{"class":339},"\"周一\"",[312,148722,733],{"class":324},[312,148724,148725],{"class":339},"\"周二\"",[312,148727,733],{"class":324},[312,148729,148730],{"class":339},"\"周三\"",[312,148732,733],{"class":324},[312,148734,148735],{"class":339},"\"周四\"",[312,148737,733],{"class":324},[312,148739,148740],{"class":339},"\"周五\"",[312,148742,6462],{"class":324},[312,148744,148745,148748,148751,148753,148755,148757,148759,148761,148763,148765,148768,148770,148773],{"class":314,"line":974},[312,148746,148747],{"class":324},"line.add_yaxis(",[312,148749,148750],{"class":339},"\"销售额\"",[312,148752,79290],{"class":324},[312,148754,2256],{"class":488},[312,148756,733],{"class":324},[312,148758,2761],{"class":488},[312,148760,733],{"class":324},[312,148762,2806],{"class":488},[312,148764,733],{"class":324},[312,148766,148767],{"class":488},"150",[312,148769,733],{"class":324},[312,148771,148772],{"class":488},"180",[312,148774,6462],{"class":324},[312,148776,148777,148780,148783],{"class":314,"line":980},[312,148778,148779],{"class":324},"line.render(",[312,148781,148782],{"class":339},"\"line.html\"",[312,148784,1959],{"class":324},[24,148786,148787,148788,148791],{},"运行后会生成 ",[119,148789,148790],{},"line.html","，用浏览器打开即可看到图表。",[24,148793,148794],{},"核心步骤：",[140,148796,148797,148800,148803,148806,148809],{},[143,148798,148799],{},"导入图表类。",[143,148801,148802],{},"创建图表对象。",[143,148804,148805],{},"添加 x 轴数据。",[143,148807,148808],{},"添加 y 轴数据。",[143,148810,148811],{},"渲染为 HTML。",[14,148813,148815],{"id":148814},"_105-全局配置","10.5 全局配置",[24,148817,148818,148819,148822],{},"常用配置在 ",[119,148820,148821],{},"pyecharts.options"," 中。",[303,148824,148826],{"className":32174,"code":148825,"language":32176,"meta":308,"style":308},"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",[119,148827,148828,148845,148855,148859,148867,148891,148919,148924,148943,148962,148980,149000,149004],{"__ignoreMap":308},[312,148829,148830,148832,148835,148837,148840,148842],{"class":314,"line":315},[312,148831,32533],{"class":1436},[312,148833,148834],{"class":324}," pyecharts ",[312,148836,32188],{"class":1436},[312,148838,148839],{"class":324}," options ",[312,148841,33178],{"class":1436},[312,148843,148844],{"class":324}," opts\n",[312,148846,148847,148849,148851,148853],{"class":314,"line":171},[312,148848,32533],{"class":1436},[312,148850,148693],{"class":324},[312,148852,32188],{"class":1436},[312,148854,148698],{"class":324},[312,148856,148857],{"class":314,"line":274},[312,148858,4205],{"emptyLinePlaceholder":1881},[312,148860,148861,148863,148865],{"class":314,"line":298},[312,148862,148707],{"class":324},[312,148864,336],{"class":1436},[312,148866,148712],{"class":324},[312,148868,148869,148871,148873,148875,148877,148879,148881,148883,148885,148887,148889],{"class":314,"line":974},[312,148870,148717],{"class":324},[312,148872,148720],{"class":339},[312,148874,733],{"class":324},[312,148876,148725],{"class":339},[312,148878,733],{"class":324},[312,148880,148730],{"class":339},[312,148882,733],{"class":324},[312,148884,148735],{"class":339},[312,148886,733],{"class":324},[312,148888,148740],{"class":339},[312,148890,6462],{"class":324},[312,148892,148893,148895,148897,148899,148901,148903,148905,148907,148909,148911,148913,148915,148917],{"class":314,"line":980},[312,148894,148747],{"class":324},[312,148896,148750],{"class":339},[312,148898,79290],{"class":324},[312,148900,2256],{"class":488},[312,148902,733],{"class":324},[312,148904,2761],{"class":488},[312,148906,733],{"class":324},[312,148908,2806],{"class":488},[312,148910,733],{"class":324},[312,148912,148767],{"class":488},[312,148914,733],{"class":324},[312,148916,148772],{"class":488},[312,148918,6462],{"class":324},[312,148920,148921],{"class":314,"line":997},[312,148922,148923],{"class":324},"line.set_global_opts(\n",[312,148925,148926,148929,148931,148934,148936,148938,148941],{"class":314,"line":1003},[312,148927,148928],{"class":1579},"    title_opts",[312,148930,336],{"class":1436},[312,148932,148933],{"class":324},"opts.TitleOpts(",[312,148935,628],{"class":1579},[312,148937,336],{"class":1436},[312,148939,148940],{"class":339},"\"一周销售额\"",[312,148942,39842],{"class":324},[312,148944,148945,148948,148950,148953,148955,148957,148960],{"class":314,"line":1020},[312,148946,148947],{"class":1579},"    xaxis_opts",[312,148949,336],{"class":1436},[312,148951,148952],{"class":324},"opts.AxisOpts(",[312,148954,81581],{"class":1579},[312,148956,336],{"class":1436},[312,148958,148959],{"class":339},"\"日期\"",[312,148961,39842],{"class":324},[312,148963,148964,148967,148969,148971,148973,148975,148978],{"class":314,"line":1026},[312,148965,148966],{"class":1579},"    yaxis_opts",[312,148968,336],{"class":1436},[312,148970,148952],{"class":324},[312,148972,81581],{"class":1579},[312,148974,336],{"class":1436},[312,148976,148977],{"class":339},"\"金额\"",[312,148979,39842],{"class":324},[312,148981,148982,148985,148987,148990,148993,148995,148998],{"class":314,"line":3418},[312,148983,148984],{"class":1579},"    tooltip_opts",[312,148986,336],{"class":1436},[312,148988,148989],{"class":324},"opts.TooltipOpts(",[312,148991,148992],{"class":1579},"trigger",[312,148994,336],{"class":1436},[312,148996,148997],{"class":339},"\"axis\"",[312,148999,39842],{"class":324},[312,149001,149002],{"class":314,"line":3423},[312,149003,1959],{"class":324},[312,149005,149006,149008,149010],{"class":314,"line":3429},[312,149007,148779],{"class":324},[312,149009,148782],{"class":339},[312,149011,1959],{"class":324},[24,149013,149014],{},"常见全局配置：",[2086,149016,149017,149026],{},[2089,149018,149019],{},[2092,149020,149021,149024],{},[2095,149022,149023],{},"配置",[2095,149025,104465],{},[2132,149027,149028,149038,149048,149058,149068,149078],{},[2092,149029,149030,149035],{},[2137,149031,149032],{},[119,149033,149034],{},"TitleOpts",[2137,149036,149037],{},"标题",[2092,149039,149040,149045],{},[2137,149041,149042],{},[119,149043,149044],{},"LegendOpts",[2137,149046,149047],{},"图例",[2092,149049,149050,149055],{},[2137,149051,149052],{},[119,149053,149054],{},"TooltipOpts",[2137,149056,149057],{},"提示框",[2092,149059,149060,149065],{},[2137,149061,149062],{},[119,149063,149064],{},"AxisOpts",[2137,149066,149067],{},"坐标轴",[2092,149069,149070,149075],{},[2137,149071,149072],{},[119,149073,149074],{},"VisualMapOpts",[2137,149076,149077],{},"视觉映射",[2092,149079,149080,149085],{},[2137,149081,149082],{},[119,149083,149084],{},"DataZoomOpts",[2137,149086,149087],{},"区域缩放",[14,149089,149091],{"id":149090},"_106-系列配置","10.6 系列配置",[24,149093,149094],{},"系列配置作用于某一组数据。",[303,149096,149098],{"className":32174,"code":149097,"language":32176,"meta":308,"style":308},"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",[119,149099,149100,149105,149116,149145,149156,149175],{"__ignoreMap":308},[312,149101,149102],{"class":314,"line":315},[312,149103,149104],{"class":324},"line.add_yaxis(\n",[312,149106,149107,149110,149112,149114],{"class":314,"line":171},[312,149108,149109],{"class":1579},"    series_name",[312,149111,336],{"class":1436},[312,149113,148750],{"class":339},[312,149115,33261],{"class":324},[312,149117,149118,149121,149123,149125,149127,149129,149131,149133,149135,149137,149139,149141,149143],{"class":314,"line":274},[312,149119,149120],{"class":1579},"    y_axis",[312,149122,336],{"class":1436},[312,149124,2834],{"class":324},[312,149126,2256],{"class":488},[312,149128,733],{"class":324},[312,149130,2761],{"class":488},[312,149132,733],{"class":324},[312,149134,2806],{"class":488},[312,149136,733],{"class":324},[312,149138,148767],{"class":488},[312,149140,733],{"class":324},[312,149142,148772],{"class":488},[312,149144,89606],{"class":324},[312,149146,149147,149150,149152,149154],{"class":314,"line":298},[312,149148,149149],{"class":1579},"    is_smooth",[312,149151,336],{"class":1436},[312,149153,33271],{"class":488},[312,149155,33261],{"class":324},[312,149157,149158,149161,149163,149166,149169,149171,149173],{"class":314,"line":974},[312,149159,149160],{"class":1579},"    label_opts",[312,149162,336],{"class":1436},[312,149164,149165],{"class":324},"opts.LabelOpts(",[312,149167,149168],{"class":1579},"is_show",[312,149170,336],{"class":1436},[312,149172,33271],{"class":488},[312,149174,39842],{"class":324},[312,149176,149177],{"class":314,"line":980},[312,149178,1959],{"class":324},[24,149180,149181],{},"常用参数：",[140,149183,149184,149190,149196,149202,149208],{},[143,149185,149186,149189],{},[119,149187,149188],{},"series_name","：系列名称。",[143,149191,149192,149195],{},[119,149193,149194],{},"y_axis","：y 轴数据。",[143,149197,149198,149201],{},[119,149199,149200],{},"is_smooth","：是否平滑曲线。",[143,149203,149204,149207],{},[119,149205,149206],{},"label_opts","：标签配置。",[143,149209,149210,149213],{},[119,149211,149212],{},"symbol_size","：标记点大小。",[14,149215,149217],{"id":149216},"_107-多条折线","10.7 多条折线",[303,149219,149221],{"className":32174,"code":149220,"language":32176,"meta":308,"style":308},"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",[119,149222,149223,149237,149247,149251,149280,149284,149292,149297,149335,149372,149376,149393,149409,149413],{"__ignoreMap":308},[312,149224,149225,149227,149229,149231,149233,149235],{"class":314,"line":315},[312,149226,32533],{"class":1436},[312,149228,148834],{"class":324},[312,149230,32188],{"class":1436},[312,149232,148839],{"class":324},[312,149234,33178],{"class":1436},[312,149236,148844],{"class":324},[312,149238,149239,149241,149243,149245],{"class":314,"line":171},[312,149240,32533],{"class":1436},[312,149242,148693],{"class":324},[312,149244,32188],{"class":1436},[312,149246,148698],{"class":324},[312,149248,149249],{"class":314,"line":274},[312,149250,4205],{"emptyLinePlaceholder":1881},[312,149252,149253,149256,149258,149260,149262,149264,149266,149268,149270,149272,149274,149276,149278],{"class":314,"line":298},[312,149254,149255],{"class":324},"dates ",[312,149257,336],{"class":1436},[312,149259,54012],{"class":324},[312,149261,148720],{"class":339},[312,149263,733],{"class":324},[312,149265,148725],{"class":339},[312,149267,733],{"class":324},[312,149269,148730],{"class":339},[312,149271,733],{"class":324},[312,149273,148735],{"class":339},[312,149275,733],{"class":324},[312,149277,148740],{"class":339},[312,149279,35041],{"class":324},[312,149281,149282],{"class":314,"line":974},[312,149283,4205],{"emptyLinePlaceholder":1881},[312,149285,149286,149288,149290],{"class":314,"line":980},[312,149287,148707],{"class":324},[312,149289,336],{"class":1436},[312,149291,148712],{"class":324},[312,149293,149294],{"class":314,"line":997},[312,149295,149296],{"class":324},"line.add_xaxis(dates)\n",[312,149298,149299,149301,149304,149306,149308,149310,149313,149315,149317,149319,149321,149323,149325,149327,149329,149331,149333],{"class":314,"line":1003},[312,149300,148747],{"class":324},[312,149302,149303],{"class":339},"\"线上销售\"",[312,149305,79290],{"class":324},[312,149307,2256],{"class":488},[312,149309,733],{"class":324},[312,149311,149312],{"class":488},"130",[312,149314,733],{"class":324},[312,149316,2761],{"class":488},[312,149318,733],{"class":324},[312,149320,22847],{"class":488},[312,149322,733],{"class":324},[312,149324,3528],{"class":488},[312,149326,113971],{"class":324},[312,149328,149200],{"class":1579},[312,149330,336],{"class":1436},[312,149332,33271],{"class":488},[312,149334,1959],{"class":324},[312,149336,149337,149339,149342,149344,149346,149348,149350,149352,149354,149356,149358,149360,149362,149364,149366,149368,149370],{"class":314,"line":1020},[312,149338,148747],{"class":324},[312,149340,149341],{"class":339},"\"线下销售\"",[312,149343,79290],{"class":324},[312,149345,2557],{"class":488},[312,149347,733],{"class":324},[312,149349,2806],{"class":488},[312,149351,733],{"class":324},[312,149353,2256],{"class":488},[312,149355,733],{"class":324},[312,149357,2761],{"class":488},[312,149359,733],{"class":324},[312,149361,148767],{"class":488},[312,149363,113971],{"class":324},[312,149365,149200],{"class":1579},[312,149367,336],{"class":1436},[312,149369,33271],{"class":488},[312,149371,1959],{"class":324},[312,149373,149374],{"class":314,"line":1026},[312,149375,148923],{"class":324},[312,149377,149378,149380,149382,149384,149386,149388,149391],{"class":314,"line":3418},[312,149379,148928],{"class":1579},[312,149381,336],{"class":1436},[312,149383,148933],{"class":324},[312,149385,628],{"class":1579},[312,149387,336],{"class":1436},[312,149389,149390],{"class":339},"\"线上线下销售趋势\"",[312,149392,39842],{"class":324},[312,149394,149395,149397,149399,149401,149403,149405,149407],{"class":314,"line":3423},[312,149396,148984],{"class":1579},[312,149398,336],{"class":1436},[312,149400,148989],{"class":324},[312,149402,148992],{"class":1579},[312,149404,336],{"class":1436},[312,149406,148997],{"class":339},[312,149408,39842],{"class":324},[312,149410,149411],{"class":314,"line":3429},[312,149412,1959],{"class":324},[312,149414,149415,149417,149420],{"class":314,"line":3434},[312,149416,148779],{"class":324},[312,149418,149419],{"class":339},"\"sales.html\"",[312,149421,1959],{"class":324},[24,149423,149424],{},"多条折线适合比较不同指标或不同地区。",[14,149426,149428],{"id":149427},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[24,149430,149431,149432,26414],{},"假设 ",[119,149433,149434],{},"sales.json",[303,149436,149438],{"className":148500,"code":149437,"language":147247,"meta":308,"style":308},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[119,149439,149440,149445,149477,149505,149533],{"__ignoreMap":308},[312,149441,149442],{"class":314,"line":315},[312,149443,149444],{"class":324},"[\n",[312,149446,149447,149450,149453,149455,149457,149459,149462,149464,149466,149468,149471,149473,149475],{"class":314,"line":171},[312,149448,149449],{"class":324},"  {",[312,149451,149452],{"class":488},"\"date\"",[312,149454,492],{"class":324},[312,149456,148720],{"class":339},[312,149458,733],{"class":324},[312,149460,149461],{"class":488},"\"online\"",[312,149463,492],{"class":324},[312,149465,2256],{"class":488},[312,149467,733],{"class":324},[312,149469,149470],{"class":488},"\"offline\"",[312,149472,492],{"class":324},[312,149474,2557],{"class":488},[312,149476,6735],{"class":324},[312,149478,149479,149481,149483,149485,149487,149489,149491,149493,149495,149497,149499,149501,149503],{"class":314,"line":274},[312,149480,149449],{"class":324},[312,149482,149452],{"class":488},[312,149484,492],{"class":324},[312,149486,148725],{"class":339},[312,149488,733],{"class":324},[312,149490,149461],{"class":488},[312,149492,492],{"class":324},[312,149494,149312],{"class":488},[312,149496,733],{"class":324},[312,149498,149470],{"class":488},[312,149500,492],{"class":324},[312,149502,2806],{"class":488},[312,149504,6735],{"class":324},[312,149506,149507,149509,149511,149513,149515,149517,149519,149521,149523,149525,149527,149529,149531],{"class":314,"line":298},[312,149508,149449],{"class":324},[312,149510,149452],{"class":488},[312,149512,492],{"class":324},[312,149514,148730],{"class":339},[312,149516,733],{"class":324},[312,149518,149461],{"class":488},[312,149520,492],{"class":324},[312,149522,2761],{"class":488},[312,149524,733],{"class":324},[312,149526,149470],{"class":488},[312,149528,492],{"class":324},[312,149530,2256],{"class":488},[312,149532,515],{"class":324},[312,149534,149535],{"class":314,"line":974},[312,149536,35041],{"class":324},[24,149538,149539],{},"读取并绘图：",[303,149541,149543],{"className":32174,"code":149542,"language":32176,"meta":308,"style":308},"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",[119,149544,149545,149551,149565,149575,149579,149611,149624,149628,149636,149645,149654,149658,149670,149679,149688,149697,149701,149709,149713,149730,149747,149751,149768,149784,149788],{"__ignoreMap":308},[312,149546,149547,149549],{"class":314,"line":315},[312,149548,32188],{"class":1436},[312,149550,148546],{"class":324},[312,149552,149553,149555,149557,149559,149561,149563],{"class":314,"line":171},[312,149554,32533],{"class":1436},[312,149556,148834],{"class":324},[312,149558,32188],{"class":1436},[312,149560,148839],{"class":324},[312,149562,33178],{"class":1436},[312,149564,148844],{"class":324},[312,149566,149567,149569,149571,149573],{"class":314,"line":274},[312,149568,32533],{"class":1436},[312,149570,148693],{"class":324},[312,149572,32188],{"class":1436},[312,149574,148698],{"class":324},[312,149576,149577],{"class":314,"line":298},[312,149578,4205],{"emptyLinePlaceholder":1881},[312,149580,149581,149583,149585,149587,149590,149592,149594,149596,149598,149600,149602,149604,149606,149609],{"class":314,"line":974},[312,149582,109602],{"class":1436},[312,149584,148246],{"class":488},[312,149586,1576],{"class":324},[312,149588,149589],{"class":339},"\"sales.json\"",[312,149591,733],{"class":324},[312,149593,148256],{"class":339},[312,149595,733],{"class":324},[312,149597,148261],{"class":1579},[312,149599,336],{"class":1436},[312,149601,148266],{"class":339},[312,149603,1583],{"class":324},[312,149605,33178],{"class":1436},[312,149607,149608],{"class":1579}," file",[312,149610,5544],{"class":324},[312,149612,149613,149615,149617,149620,149622],{"class":314,"line":980},[312,149614,103190],{"class":324},[312,149616,336],{"class":1436},[312,149618,149619],{"class":324}," json.load(",[312,149621,47149],{"class":1579},[312,149623,1959],{"class":324},[312,149625,149626],{"class":314,"line":997},[312,149627,4205],{"emptyLinePlaceholder":1881},[312,149629,149630,149632,149634],{"class":314,"line":1003},[312,149631,149255],{"class":324},[312,149633,336],{"class":1436},[312,149635,53624],{"class":324},[312,149637,149638,149641,149643],{"class":314,"line":1020},[312,149639,149640],{"class":324},"online_sales ",[312,149642,336],{"class":1436},[312,149644,53624],{"class":324},[312,149646,149647,149650,149652],{"class":314,"line":1026},[312,149648,149649],{"class":324},"offline_sales ",[312,149651,336],{"class":1436},[312,149653,53624],{"class":324},[312,149655,149656],{"class":314,"line":3418},[312,149657,4205],{"emptyLinePlaceholder":1881},[312,149659,149660,149662,149665,149667],{"class":314,"line":3423},[312,149661,4830],{"class":1436},[312,149663,149664],{"class":324}," item ",[312,149666,27839],{"class":1436},[312,149668,149669],{"class":324}," data:\n",[312,149671,149672,149675,149677],{"class":314,"line":3429},[312,149673,149674],{"class":324},"    dates.append(item[",[312,149676,149452],{"class":339},[312,149678,6462],{"class":324},[312,149680,149681,149684,149686],{"class":314,"line":3434},[312,149682,149683],{"class":324},"    online_sales.append(item[",[312,149685,149461],{"class":339},[312,149687,6462],{"class":324},[312,149689,149690,149693,149695],{"class":314,"line":3448},[312,149691,149692],{"class":324},"    offline_sales.append(item[",[312,149694,149470],{"class":339},[312,149696,6462],{"class":324},[312,149698,149699],{"class":314,"line":3453},[312,149700,4205],{"emptyLinePlaceholder":1881},[312,149702,149703,149705,149707],{"class":314,"line":3459},[312,149704,148707],{"class":324},[312,149706,336],{"class":1436},[312,149708,148712],{"class":324},[312,149710,149711],{"class":314,"line":3480},[312,149712,149296],{"class":324},[312,149714,149715,149717,149719,149722,149724,149726,149728],{"class":314,"line":3485},[312,149716,148747],{"class":324},[312,149718,149303],{"class":339},[312,149720,149721],{"class":324},", online_sales, ",[312,149723,149200],{"class":1579},[312,149725,336],{"class":1436},[312,149727,33271],{"class":488},[312,149729,1959],{"class":324},[312,149731,149732,149734,149736,149739,149741,149743,149745],{"class":314,"line":3499},[312,149733,148747],{"class":324},[312,149735,149341],{"class":339},[312,149737,149738],{"class":324},", offline_sales, ",[312,149740,149200],{"class":1579},[312,149742,336],{"class":1436},[312,149744,33271],{"class":488},[312,149746,1959],{"class":324},[312,149748,149749],{"class":314,"line":3504},[312,149750,148923],{"class":324},[312,149752,149753,149755,149757,149759,149761,149763,149766],{"class":314,"line":3533},[312,149754,148928],{"class":1579},[312,149756,336],{"class":1436},[312,149758,148933],{"class":324},[312,149760,628],{"class":1579},[312,149762,336],{"class":1436},[312,149764,149765],{"class":339},"\"销售趋势\"",[312,149767,39842],{"class":324},[312,149769,149770,149772,149774,149776,149778,149780,149782],{"class":314,"line":3538},[312,149771,148984],{"class":1579},[312,149773,336],{"class":1436},[312,149775,148989],{"class":324},[312,149777,148992],{"class":1579},[312,149779,336],{"class":1436},[312,149781,148997],{"class":339},[312,149783,39842],{"class":324},[312,149785,149786],{"class":314,"line":3555},[312,149787,1959],{"class":324},[312,149789,149790,149792,149794],{"class":314,"line":3560},[312,149791,148779],{"class":324},[312,149793,149419],{"class":339},[312,149795,1959],{"class":324},[14,149797,149799],{"id":149798},"_109-数据清洗","10.9 数据清洗",[24,149801,149802],{},"真实数据经常不整齐，需要清洗。",[24,149804,149805],{},"常见问题：",[140,149807,149808,149811,149814,149817],{},[143,149809,149810],{},"数字是字符串。",[143,149812,149813],{},"字段缺失。",[143,149815,149816],{},"空值。",[143,149818,149819],{},"日期格式不统一。",[24,149821,16936],{},[303,149823,149825],{"className":32174,"code":149824,"language":32176,"meta":308,"style":308},"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",[119,149826,149827,149836,149859,149879,149900,149904,149908,149916,149925,149929,149940,149954,149963,149968,149972,149980,149990,149994,150001],{"__ignoreMap":308},[312,149828,149829,149832,149834],{"class":314,"line":315},[312,149830,149831],{"class":324},"raw_data ",[312,149833,336],{"class":1436},[312,149835,57229],{"class":324},[312,149837,149838,149841,149843,149845,149847,149849,149852,149854,149857],{"class":314,"line":171},[312,149839,149840],{"class":324},"    {",[312,149842,149452],{"class":339},[312,149844,492],{"class":324},[312,149846,148720],{"class":339},[312,149848,733],{"class":324},[312,149850,149851],{"class":339},"\"sales\"",[312,149853,492],{"class":324},[312,149855,149856],{"class":339},"\"100\"",[312,149858,6735],{"class":324},[312,149860,149861,149863,149865,149867,149869,149871,149873,149875,149877],{"class":314,"line":274},[312,149862,149840],{"class":324},[312,149864,149452],{"class":339},[312,149866,492],{"class":324},[312,149868,148725],{"class":339},[312,149870,733],{"class":324},[312,149872,149851],{"class":339},[312,149874,492],{"class":324},[312,149876,495],{"class":339},[312,149878,6735],{"class":324},[312,149880,149881,149883,149885,149887,149889,149891,149893,149895,149898],{"class":314,"line":298},[312,149882,149840],{"class":324},[312,149884,149452],{"class":339},[312,149886,492],{"class":324},[312,149888,148730],{"class":339},[312,149890,733],{"class":324},[312,149892,149851],{"class":339},[312,149894,492],{"class":324},[312,149896,149897],{"class":339},"\"120\"",[312,149899,6735],{"class":324},[312,149901,149902],{"class":314,"line":974},[312,149903,35041],{"class":324},[312,149905,149906],{"class":314,"line":980},[312,149907,4205],{"emptyLinePlaceholder":1881},[312,149909,149910,149912,149914],{"class":314,"line":997},[312,149911,149255],{"class":324},[312,149913,336],{"class":1436},[312,149915,53624],{"class":324},[312,149917,149918,149921,149923],{"class":314,"line":1003},[312,149919,149920],{"class":324},"sales ",[312,149922,336],{"class":1436},[312,149924,53624],{"class":324},[312,149926,149927],{"class":314,"line":1020},[312,149928,4205],{"emptyLinePlaceholder":1881},[312,149930,149931,149933,149935,149937],{"class":314,"line":1026},[312,149932,4830],{"class":1436},[312,149934,149664],{"class":324},[312,149936,27839],{"class":1436},[312,149938,149939],{"class":324}," raw_data:\n",[312,149941,149942,149945,149947,149950,149952],{"class":314,"line":3418},[312,149943,149944],{"class":324},"    value ",[312,149946,336],{"class":1436},[312,149948,149949],{"class":324}," item.get(",[312,149951,149851],{"class":339},[312,149953,1959],{"class":324},[312,149955,149956,149958,149960],{"class":314,"line":3423},[312,149957,4906],{"class":1436},[312,149959,40725],{"class":1436},[312,149961,149962],{"class":324}," value:\n",[312,149964,149965],{"class":314,"line":3429},[312,149966,149967],{"class":1436},"        continue\n",[312,149969,149970],{"class":314,"line":3434},[312,149971,4205],{"emptyLinePlaceholder":1881},[312,149973,149974,149976,149978],{"class":314,"line":3448},[312,149975,149674],{"class":324},[312,149977,149452],{"class":339},[312,149979,6462],{"class":324},[312,149981,149982,149985,149987],{"class":314,"line":3453},[312,149983,149984],{"class":324},"    sales.append(",[312,149986,1956],{"class":488},[312,149988,149989],{"class":324},"(value))\n",[312,149991,149992],{"class":314,"line":3459},[312,149993,4205],{"emptyLinePlaceholder":1881},[312,149995,149996,149998],{"class":314,"line":3480},[312,149997,32211],{"class":488},[312,149999,150000],{"class":324},"(dates)\n",[312,150002,150003,150005],{"class":314,"line":3485},[312,150004,32211],{"class":488},[312,150006,150007],{"class":324},"(sales)\n",[14,150009,150011],{"id":150010},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[303,150013,150015],{"className":32174,"code":150014,"language":32176,"meta":308,"style":308},"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",[119,150016,150017,150031,150041,150045,150053,150074,150096,150118,150140,150162,150166,150170,150192,150213,150217,150225,150229,150233,150243,150252,150262,150278,150282,150286,150303,150319,150335,150351,150361,150365],{"__ignoreMap":308},[312,150018,150019,150021,150023,150025,150027,150029],{"class":314,"line":315},[312,150020,32533],{"class":1436},[312,150022,148834],{"class":324},[312,150024,32188],{"class":1436},[312,150026,148839],{"class":324},[312,150028,33178],{"class":1436},[312,150030,148844],{"class":324},[312,150032,150033,150035,150037,150039],{"class":314,"line":171},[312,150034,32533],{"class":1436},[312,150036,148693],{"class":324},[312,150038,32188],{"class":1436},[312,150040,148698],{"class":324},[312,150042,150043],{"class":314,"line":274},[312,150044,4205],{"emptyLinePlaceholder":1881},[312,150046,150047,150049,150051],{"class":314,"line":298},[312,150048,149920],{"class":324},[312,150050,336],{"class":1436},[312,150052,57229],{"class":324},[312,150054,150055,150057,150059,150061,150064,150066,150068,150070,150072],{"class":314,"line":974},[312,150056,149840],{"class":324},[312,150058,149452],{"class":339},[312,150060,492],{"class":324},[312,150062,150063],{"class":339},"\"2024-10-01\"",[312,150065,733],{"class":324},[312,150067,85855],{"class":339},[312,150069,492],{"class":324},[312,150071,93793],{"class":488},[312,150073,6735],{"class":324},[312,150075,150076,150078,150080,150082,150085,150087,150089,150091,150094],{"class":314,"line":980},[312,150077,149840],{"class":324},[312,150079,149452],{"class":339},[312,150081,492],{"class":324},[312,150083,150084],{"class":339},"\"2024-10-02\"",[312,150086,733],{"class":324},[312,150088,85855],{"class":339},[312,150090,492],{"class":324},[312,150092,150093],{"class":488},"1800",[312,150095,6735],{"class":324},[312,150097,150098,150100,150102,150104,150107,150109,150111,150113,150116],{"class":314,"line":997},[312,150099,149840],{"class":324},[312,150101,149452],{"class":339},[312,150103,492],{"class":324},[312,150105,150106],{"class":339},"\"2024-10-03\"",[312,150108,733],{"class":324},[312,150110,85855],{"class":339},[312,150112,492],{"class":324},[312,150114,150115],{"class":488},"1500",[312,150117,6735],{"class":324},[312,150119,150120,150122,150124,150126,150129,150131,150133,150135,150138],{"class":314,"line":1003},[312,150121,149840],{"class":324},[312,150123,149452],{"class":339},[312,150125,492],{"class":324},[312,150127,150128],{"class":339},"\"2024-10-04\"",[312,150130,733],{"class":324},[312,150132,85855],{"class":339},[312,150134,492],{"class":324},[312,150136,150137],{"class":488},"2100",[312,150139,6735],{"class":324},[312,150141,150142,150144,150146,150148,150151,150153,150155,150157,150160],{"class":314,"line":1020},[312,150143,149840],{"class":324},[312,150145,149452],{"class":339},[312,150147,492],{"class":324},[312,150149,150150],{"class":339},"\"2024-10-05\"",[312,150152,733],{"class":324},[312,150154,85855],{"class":339},[312,150156,492],{"class":324},[312,150158,150159],{"class":488},"2600",[312,150161,6735],{"class":324},[312,150163,150164],{"class":314,"line":1026},[312,150165,35041],{"class":324},[312,150167,150168],{"class":314,"line":3418},[312,150169,4205],{"emptyLinePlaceholder":1881},[312,150171,150172,150174,150176,150179,150181,150183,150185,150187,150189],{"class":314,"line":3423},[312,150173,149255],{"class":324},[312,150175,336],{"class":1436},[312,150177,150178],{"class":324}," [item[",[312,150180,149452],{"class":339},[312,150182,6248],{"class":324},[312,150184,4830],{"class":1436},[312,150186,149664],{"class":324},[312,150188,27839],{"class":1436},[312,150190,150191],{"class":324}," sales]\n",[312,150193,150194,150197,150199,150201,150203,150205,150207,150209,150211],{"class":314,"line":3429},[312,150195,150196],{"class":324},"amounts ",[312,150198,336],{"class":1436},[312,150200,150178],{"class":324},[312,150202,85855],{"class":339},[312,150204,6248],{"class":324},[312,150206,4830],{"class":1436},[312,150208,149664],{"class":324},[312,150210,27839],{"class":1436},[312,150212,150191],{"class":324},[312,150214,150215],{"class":314,"line":3434},[312,150216,4205],{"emptyLinePlaceholder":1881},[312,150218,150219,150221,150223],{"class":314,"line":3448},[312,150220,148707],{"class":324},[312,150222,336],{"class":1436},[312,150224,148712],{"class":324},[312,150226,150227],{"class":314,"line":3453},[312,150228,149296],{"class":324},[312,150230,150231],{"class":314,"line":3459},[312,150232,149104],{"class":324},[312,150234,150235,150237,150239,150241],{"class":314,"line":3480},[312,150236,149109],{"class":1579},[312,150238,336],{"class":1436},[312,150240,148750],{"class":339},[312,150242,33261],{"class":324},[312,150244,150245,150247,150249],{"class":314,"line":3485},[312,150246,149120],{"class":1579},[312,150248,336],{"class":1436},[312,150250,150251],{"class":324},"amounts,\n",[312,150253,150254,150256,150258,150260],{"class":314,"line":3499},[312,150255,149149],{"class":1579},[312,150257,336],{"class":1436},[312,150259,33271],{"class":488},[312,150261,33261],{"class":324},[312,150263,150264,150266,150268,150270,150272,150274,150276],{"class":314,"line":3504},[312,150265,149160],{"class":1579},[312,150267,336],{"class":1436},[312,150269,149165],{"class":324},[312,150271,149168],{"class":1579},[312,150273,336],{"class":1436},[312,150275,33271],{"class":488},[312,150277,39842],{"class":324},[312,150279,150280],{"class":314,"line":3533},[312,150281,1959],{"class":324},[312,150283,150284],{"class":314,"line":3538},[312,150285,148923],{"class":324},[312,150287,150288,150290,150292,150294,150296,150298,150301],{"class":314,"line":3555},[312,150289,148928],{"class":1579},[312,150291,336],{"class":1436},[312,150293,148933],{"class":324},[312,150295,628],{"class":1579},[312,150297,336],{"class":1436},[312,150299,150300],{"class":339},"\"每日销售额\"",[312,150302,39842],{"class":324},[312,150304,150305,150307,150309,150311,150313,150315,150317],{"class":314,"line":3560},[312,150306,148947],{"class":1579},[312,150308,336],{"class":1436},[312,150310,148952],{"class":324},[312,150312,81581],{"class":1579},[312,150314,336],{"class":1436},[312,150316,148959],{"class":339},[312,150318,39842],{"class":324},[312,150320,150321,150323,150325,150327,150329,150331,150333],{"class":314,"line":3565},[312,150322,148966],{"class":1579},[312,150324,336],{"class":1436},[312,150326,148952],{"class":324},[312,150328,81581],{"class":1579},[312,150330,336],{"class":1436},[312,150332,148977],{"class":339},[312,150334,39842],{"class":324},[312,150336,150337,150339,150341,150343,150345,150347,150349],{"class":314,"line":3570},[312,150338,148984],{"class":1579},[312,150340,336],{"class":1436},[312,150342,148989],{"class":324},[312,150344,148992],{"class":1579},[312,150346,336],{"class":1436},[312,150348,148997],{"class":339},[312,150350,39842],{"class":324},[312,150352,150353,150356,150358],{"class":314,"line":3584},[312,150354,150355],{"class":1579},"    datazoom_opts",[312,150357,336],{"class":1436},[312,150359,150360],{"class":324},"[opts.DataZoomOpts()],\n",[312,150362,150363],{"class":314,"line":3589},[312,150364,1959],{"class":324},[312,150366,150367,150369,150372],{"class":314,"line":4382},[312,150368,148779],{"class":324},[312,150370,150371],{"class":339},"\"daily_sales.html\"",[312,150373,1959],{"class":324},[24,150375,150376,150379],{},[119,150377,150378],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,150381,150383],{"id":150382},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[24,150385,150386],{},"如果数据结构如下：",[303,150388,150390],{"className":32174,"code":150389,"language":32176,"meta":308,"style":308},"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",[119,150391,150392,150400,150408,150430,150451,150456,150463,150483,150503,150507],{"__ignoreMap":308},[312,150393,150394,150396,150398],{"class":314,"line":315},[312,150395,103427],{"class":324},[312,150397,336],{"class":1436},[312,150399,483],{"class":324},[312,150401,150402,150405],{"class":314,"line":171},[312,150403,150404],{"class":339},"    \"北京\"",[312,150406,150407],{"class":324},": [\n",[312,150409,150410,150412,150414,150416,150419,150421,150424,150426,150428],{"class":314,"line":274},[312,150411,6722],{"class":324},[312,150413,149452],{"class":339},[312,150415,492],{"class":324},[312,150417,150418],{"class":339},"\"2024-01-01\"",[312,150420,733],{"class":324},[312,150422,150423],{"class":339},"\"confirm\"",[312,150425,492],{"class":324},[312,150427,2391],{"class":488},[312,150429,6735],{"class":324},[312,150431,150432,150434,150436,150438,150441,150443,150445,150447,150449],{"class":314,"line":298},[312,150433,6722],{"class":324},[312,150435,149452],{"class":339},[312,150437,492],{"class":324},[312,150439,150440],{"class":339},"\"2024-01-02\"",[312,150442,733],{"class":324},[312,150444,150423],{"class":339},[312,150446,492],{"class":324},[312,150448,2443],{"class":488},[312,150450,6735],{"class":324},[312,150452,150453],{"class":314,"line":974},[312,150454,150455],{"class":324},"    ],\n",[312,150457,150458,150461],{"class":314,"line":980},[312,150459,150460],{"class":339},"    \"上海\"",[312,150462,150407],{"class":324},[312,150464,150465,150467,150469,150471,150473,150475,150477,150479,150481],{"class":314,"line":997},[312,150466,6722],{"class":324},[312,150468,149452],{"class":339},[312,150470,492],{"class":324},[312,150472,150418],{"class":339},[312,150474,733],{"class":324},[312,150476,150423],{"class":339},[312,150478,492],{"class":324},[312,150480,2340],{"class":488},[312,150482,6735],{"class":324},[312,150484,150485,150487,150489,150491,150493,150495,150497,150499,150501],{"class":314,"line":1003},[312,150486,6722],{"class":324},[312,150488,149452],{"class":339},[312,150490,492],{"class":324},[312,150492,150440],{"class":339},[312,150494,733],{"class":324},[312,150496,150423],{"class":339},[312,150498,492],{"class":324},[312,150500,2468],{"class":488},[312,150502,6735],{"class":324},[312,150504,150505],{"class":314,"line":1020},[312,150506,150455],{"class":324},[312,150508,150509],{"class":314,"line":1026},[312,150510,515],{"class":324},[24,150512,150513],{},"绘制多地区趋势：",[303,150515,150517],{"className":32174,"code":150516,"language":32176,"meta":308,"style":308},"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",[119,150518,150519,150533,150543,150547,150572,150576,150584,150588,150592,150604,150626,150639,150643,150647,150664,150680,150684],{"__ignoreMap":308},[312,150520,150521,150523,150525,150527,150529,150531],{"class":314,"line":315},[312,150522,32533],{"class":1436},[312,150524,148834],{"class":324},[312,150526,32188],{"class":1436},[312,150528,148839],{"class":324},[312,150530,33178],{"class":1436},[312,150532,148844],{"class":324},[312,150534,150535,150537,150539,150541],{"class":314,"line":171},[312,150536,32533],{"class":1436},[312,150538,148693],{"class":324},[312,150540,32188],{"class":1436},[312,150542,148698],{"class":324},[312,150544,150545],{"class":314,"line":274},[312,150546,4205],{"emptyLinePlaceholder":1881},[312,150548,150549,150551,150553,150555,150557,150559,150561,150563,150565,150568,150570],{"class":314,"line":298},[312,150550,149255],{"class":324},[312,150552,336],{"class":1436},[312,150554,150178],{"class":324},[312,150556,149452],{"class":339},[312,150558,6248],{"class":324},[312,150560,4830],{"class":1436},[312,150562,149664],{"class":324},[312,150564,27839],{"class":1436},[312,150566,150567],{"class":324}," data[",[312,150569,71046],{"class":339},[312,150571,79299],{"class":324},[312,150573,150574],{"class":314,"line":974},[312,150575,4205],{"emptyLinePlaceholder":1881},[312,150577,150578,150580,150582],{"class":314,"line":980},[312,150579,148707],{"class":324},[312,150581,336],{"class":1436},[312,150583,148712],{"class":324},[312,150585,150586],{"class":314,"line":997},[312,150587,149296],{"class":324},[312,150589,150590],{"class":314,"line":1003},[312,150591,4205],{"emptyLinePlaceholder":1881},[312,150593,150594,150596,150599,150601],{"class":314,"line":1020},[312,150595,4830],{"class":1436},[312,150597,150598],{"class":324}," city, records ",[312,150600,27839],{"class":1436},[312,150602,150603],{"class":324}," data.items():\n",[312,150605,150606,150609,150611,150613,150615,150617,150619,150621,150623],{"class":314,"line":1026},[312,150607,150608],{"class":324},"    values ",[312,150610,336],{"class":1436},[312,150612,150178],{"class":324},[312,150614,150423],{"class":339},[312,150616,6248],{"class":324},[312,150618,4830],{"class":1436},[312,150620,149664],{"class":324},[312,150622,27839],{"class":1436},[312,150624,150625],{"class":324}," records]\n",[312,150627,150628,150631,150633,150635,150637],{"class":314,"line":3418},[312,150629,150630],{"class":324},"    line.add_yaxis(city, values, ",[312,150632,149200],{"class":1579},[312,150634,336],{"class":1436},[312,150636,33271],{"class":488},[312,150638,1959],{"class":324},[312,150640,150641],{"class":314,"line":3423},[312,150642,4205],{"emptyLinePlaceholder":1881},[312,150644,150645],{"class":314,"line":3429},[312,150646,148923],{"class":324},[312,150648,150649,150651,150653,150655,150657,150659,150662],{"class":314,"line":3434},[312,150650,148928],{"class":1579},[312,150652,336],{"class":1436},[312,150654,148933],{"class":324},[312,150656,628],{"class":1579},[312,150658,336],{"class":1436},[312,150660,150661],{"class":339},"\"多地区趋势图\"",[312,150663,39842],{"class":324},[312,150665,150666,150668,150670,150672,150674,150676,150678],{"class":314,"line":3448},[312,150667,148984],{"class":1579},[312,150669,336],{"class":1436},[312,150671,148989],{"class":324},[312,150673,148992],{"class":1579},[312,150675,336],{"class":1436},[312,150677,148997],{"class":339},[312,150679,39842],{"class":324},[312,150681,150682],{"class":314,"line":3453},[312,150683,1959],{"class":324},[312,150685,150686,150688,150691],{"class":314,"line":3459},[312,150687,148779],{"class":324},[312,150689,150690],{"class":339},"\"trend.html\"",[312,150692,1959],{"class":324},[24,150694,150695],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150697,150699],{"id":150698},"_1012-易错点","10.12 易错点",[140,150701,150702,150708,150714,150724,150730],{},[143,150703,150704,150707],{},[119,150705,150706],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[143,150709,150710,150713],{},[119,150711,150712],{},"render()"," 生成的是 HTML，不是图片。",[143,150715,150716,150717,150720,150721,30181],{},"JSON 字符串用 ",[119,150718,150719],{},"json.loads()","，JSON 文件用 ",[119,150722,150723],{},"json.load()",[143,150725,150726,150727,30181],{},"中文 JSON 保存时加 ",[119,150728,150729],{},"ensure_ascii=False",[143,150731,150732],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150734,150736],{"id":150735},"_1013-本章练习","10.13 本章练习",[140,150738,150739,150742,150745,150748,150751],{},[143,150740,150741],{},"安装 pyecharts 并生成第一个折线图。",[143,150743,150744],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[143,150746,150747],{},"绘制两条折线，对比线上和线下销售额。",[143,150749,150750],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[143,150752,150753],{},"对含有空值的销售数据进行清洗后再绘图。",[1856,150755,150756],{},"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":308,"searchDepth":171,"depth":171,"links":150758},[150759,150760,150761,150762,150763,150764,150765,150766,150767,150768,150769,150770,150771],{"id":148375,"depth":171,"text":148376},{"id":148450,"depth":171,"text":148451},{"id":148629,"depth":171,"text":148630},{"id":148680,"depth":171,"text":148681},{"id":148814,"depth":171,"text":148815},{"id":149090,"depth":171,"text":149091},{"id":149216,"depth":171,"text":149217},{"id":149427,"depth":171,"text":149428},{"id":149798,"depth":171,"text":149799},{"id":150010,"depth":171,"text":150011},{"id":150382,"depth":171,"text":150383},{"id":150698,"depth":171,"text":150699},{"id":150735,"depth":171,"text":150736},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148367,"description":1878},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150778,"title":150779,"body":150780,"description":1878,"extension":1879,"meta":153140,"navigation":1881,"path":153141,"seo":153142,"stem":153143,"__hash__":153144},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150781,"toc":153117},[150782,150785,150789,150792,150795,150871,150874,150965,150968,150972,150975,151019,151032,151036,151039,151106,151109,151113,151116,151200,151208,151212,151217,151358,151361,151372,151378,151384,151498,151502,151505,151508,151761,151764,151768,151771,151875,151878,151882,152033,152037,152044,152157,152161,152164,152270,152273,152277,152280,152311,152314,152419,152422,152426,152430,152440,152508,152512,152519,152583,152586,152590,152596,152692,152701,152705,153029,153038,153042,153070,153074,153114],[10,150783,150779],{"id":150784},"_11-面向对象基础",[14,150786,150788],{"id":150787},"_111-什么是面向对象","11.1 什么是面向对象",[24,150790,150791],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[24,150793,150794],{},"面向过程：",[303,150796,150798],{"className":32174,"code":150797,"language":32176,"meta":308,"style":308},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[119,150799,150800,150809,150817,150821,150831,150862,150866],{"__ignoreMap":308},[312,150801,150802,150804,150806],{"class":314,"line":315},[312,150803,147991],{"class":324},[312,150805,336],{"class":1436},[312,150807,150808],{"class":339}," \"小明\"\n",[312,150810,150811,150813,150815],{"class":314,"line":171},[312,150812,148001],{"class":324},[312,150814,336],{"class":1436},[312,150816,148006],{"class":488},[312,150818,150819],{"class":314,"line":274},[312,150820,4205],{"emptyLinePlaceholder":1881},[312,150822,150823,150825,150828],{"class":314,"line":298},[312,150824,33742],{"class":1436},[312,150826,150827],{"class":332}," introduce",[312,150829,150830],{"class":324},"(name, age):\n",[312,150832,150833,150835,150837,150839,150842,150844,150846,150848,150851,150853,150855,150857,150860],{"class":314,"line":974},[312,150834,33094],{"class":488},[312,150836,1576],{"class":324},[312,150838,2003],{"class":1436},[312,150840,150841],{"class":339},"\"我叫",[312,150843,2840],{"class":488},[312,150845,81581],{"class":324},[312,150847,2888],{"class":488},[312,150849,150850],{"class":339},"，今年",[312,150852,2840],{"class":488},[312,150854,71998],{"class":324},[312,150856,2888],{"class":488},[312,150858,150859],{"class":339},"岁\"",[312,150861,1959],{"class":324},[312,150863,150864],{"class":314,"line":980},[312,150865,4205],{"emptyLinePlaceholder":1881},[312,150867,150868],{"class":314,"line":997},[312,150869,150870],{"class":324},"introduce(name, age)\n",[24,150872,150873],{},"面向对象：",[303,150875,150877],{"className":32174,"code":150876,"language":32176,"meta":308,"style":308},"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",[119,150878,150879,150887,150895,150924,150928,150932,150942,150951,150960],{"__ignoreMap":308},[312,150880,150881,150883,150885],{"class":314,"line":315},[312,150882,16495],{"class":1436},[312,150884,9701],{"class":332},[312,150886,5544],{"class":324},[312,150888,150889,150891,150893],{"class":314,"line":171},[312,150890,32597],{"class":1436},[312,150892,150827],{"class":332},[312,150894,32603],{"class":324},[312,150896,150897,150899,150901,150903,150905,150908,150910,150912,150914,150916,150918,150920,150922],{"class":314,"line":274},[312,150898,34246],{"class":488},[312,150900,1576],{"class":324},[312,150902,2003],{"class":1436},[312,150904,150841],{"class":339},[312,150906,150907],{"class":488},"{self",[312,150909,82072],{"class":324},[312,150911,2888],{"class":488},[312,150913,150850],{"class":339},[312,150915,150907],{"class":488},[312,150917,82084],{"class":324},[312,150919,2888],{"class":488},[312,150921,150859],{"class":339},[312,150923,1959],{"class":324},[312,150925,150926],{"class":314,"line":298},[312,150927,4205],{"emptyLinePlaceholder":1881},[312,150929,150930],{"class":314,"line":974},[312,150931,4205],{"emptyLinePlaceholder":1881},[312,150933,150934,150937,150939],{"class":314,"line":980},[312,150935,150936],{"class":324},"student ",[312,150938,336],{"class":1436},[312,150940,150941],{"class":324}," Student()\n",[312,150943,150944,150947,150949],{"class":314,"line":997},[312,150945,150946],{"class":324},"student.name ",[312,150948,336],{"class":1436},[312,150950,150808],{"class":339},[312,150952,150953,150956,150958],{"class":314,"line":1003},[312,150954,150955],{"class":324},"student.age ",[312,150957,336],{"class":1436},[312,150959,148006],{"class":488},[312,150961,150962],{"class":314,"line":1020},[312,150963,150964],{"class":324},"student.introduce()\n",[24,150966,150967],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150969,150971],{"id":150970},"_112-类和对象","11.2 类和对象",[24,150973,150974],{},"类是模板，对象是根据模板创建出来的具体实例。",[303,150976,150978],{"className":32174,"code":150977,"language":32176,"meta":308,"style":308},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[119,150979,150980,150988,150993,150997,151001,151010],{"__ignoreMap":308},[312,150981,150982,150984,150986],{"class":314,"line":315},[312,150983,16495],{"class":1436},[312,150985,9701],{"class":332},[312,150987,5544],{"class":324},[312,150989,150990],{"class":314,"line":171},[312,150991,150992],{"class":1436},"    pass\n",[312,150994,150995],{"class":314,"line":274},[312,150996,4205],{"emptyLinePlaceholder":1881},[312,150998,150999],{"class":314,"line":298},[312,151000,4205],{"emptyLinePlaceholder":1881},[312,151002,151003,151006,151008],{"class":314,"line":974},[312,151004,151005],{"class":324},"student1 ",[312,151007,336],{"class":1436},[312,151009,150941],{"class":324},[312,151011,151012,151015,151017],{"class":314,"line":980},[312,151013,151014],{"class":324},"student2 ",[312,151016,336],{"class":1436},[312,151018,150941],{"class":324},[24,151020,151021,151024,151025,1167,151028,151031],{},[119,151022,151023],{},"Student"," 是类，",[119,151026,151027],{},"student1",[119,151029,151030],{},"student2"," 是对象。",[14,151033,151035],{"id":151034},"_113-属性","11.3 属性",[24,151037,151038],{},"属性是对象保存的数据。",[303,151040,151042],{"className":32174,"code":151041,"language":32176,"meta":308,"style":308},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[119,151043,151044,151052,151056,151060,151064,151072,151080,151088,151092,151099],{"__ignoreMap":308},[312,151045,151046,151048,151050],{"class":314,"line":315},[312,151047,16495],{"class":1436},[312,151049,9701],{"class":332},[312,151051,5544],{"class":324},[312,151053,151054],{"class":314,"line":171},[312,151055,150992],{"class":1436},[312,151057,151058],{"class":314,"line":274},[312,151059,4205],{"emptyLinePlaceholder":1881},[312,151061,151062],{"class":314,"line":298},[312,151063,4205],{"emptyLinePlaceholder":1881},[312,151065,151066,151068,151070],{"class":314,"line":974},[312,151067,150936],{"class":324},[312,151069,336],{"class":1436},[312,151071,150941],{"class":324},[312,151073,151074,151076,151078],{"class":314,"line":980},[312,151075,150946],{"class":324},[312,151077,336],{"class":1436},[312,151079,150808],{"class":339},[312,151081,151082,151084,151086],{"class":314,"line":997},[312,151083,150955],{"class":324},[312,151085,336],{"class":1436},[312,151087,148006],{"class":488},[312,151089,151090],{"class":314,"line":1003},[312,151091,4205],{"emptyLinePlaceholder":1881},[312,151093,151094,151096],{"class":314,"line":1020},[312,151095,32211],{"class":488},[312,151097,151098],{"class":324},"(student.name)\n",[312,151100,151101,151103],{"class":314,"line":1026},[312,151102,32211],{"class":488},[312,151104,151105],{"class":324},"(student.age)\n",[24,151107,151108],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,151110,151112],{"id":151111},"_114-方法","11.4 方法",[24,151114,151115],{},"类中的函数叫方法。",[303,151117,151118],{"className":32174,"code":150876,"language":32176,"meta":308,"style":308},[119,151119,151120,151128,151136,151164,151168,151172,151180,151188,151196],{"__ignoreMap":308},[312,151121,151122,151124,151126],{"class":314,"line":315},[312,151123,16495],{"class":1436},[312,151125,9701],{"class":332},[312,151127,5544],{"class":324},[312,151129,151130,151132,151134],{"class":314,"line":171},[312,151131,32597],{"class":1436},[312,151133,150827],{"class":332},[312,151135,32603],{"class":324},[312,151137,151138,151140,151142,151144,151146,151148,151150,151152,151154,151156,151158,151160,151162],{"class":314,"line":274},[312,151139,34246],{"class":488},[312,151141,1576],{"class":324},[312,151143,2003],{"class":1436},[312,151145,150841],{"class":339},[312,151147,150907],{"class":488},[312,151149,82072],{"class":324},[312,151151,2888],{"class":488},[312,151153,150850],{"class":339},[312,151155,150907],{"class":488},[312,151157,82084],{"class":324},[312,151159,2888],{"class":488},[312,151161,150859],{"class":339},[312,151163,1959],{"class":324},[312,151165,151166],{"class":314,"line":298},[312,151167,4205],{"emptyLinePlaceholder":1881},[312,151169,151170],{"class":314,"line":974},[312,151171,4205],{"emptyLinePlaceholder":1881},[312,151173,151174,151176,151178],{"class":314,"line":980},[312,151175,150936],{"class":324},[312,151177,336],{"class":1436},[312,151179,150941],{"class":324},[312,151181,151182,151184,151186],{"class":314,"line":997},[312,151183,150946],{"class":324},[312,151185,336],{"class":1436},[312,151187,150808],{"class":339},[312,151189,151190,151192,151194],{"class":314,"line":1003},[312,151191,150955],{"class":324},[312,151193,336],{"class":1436},[312,151195,148006],{"class":488},[312,151197,151198],{"class":314,"line":1020},[312,151199,150964],{"class":324},[24,151201,151202,151204,151205,151207],{},[119,151203,32619],{}," 表示当前对象。调用方法时不需要手动传入 ",[119,151206,32619],{},"，Python 会自动传。",[14,151209,151211],{"id":151210},"_115-构造方法__init__","11.5 构造方法__init__",[24,151213,151214,151216],{},[119,151215,32625],{}," 在对象创建时自动执行，用于初始化属性。",[303,151218,151220],{"className":32174,"code":151219,"language":32176,"meta":308,"style":308},"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",[119,151221,151222,151230,151239,151251,151263,151274,151278,151286,151324,151328,151332,151354],{"__ignoreMap":308},[312,151223,151224,151226,151228],{"class":314,"line":315},[312,151225,16495],{"class":1436},[312,151227,9701],{"class":332},[312,151229,5544],{"class":324},[312,151231,151232,151234,151236],{"class":314,"line":171},[312,151233,32597],{"class":1436},[312,151235,32600],{"class":488},[312,151237,151238],{"class":324},"(self, name, age, score):\n",[312,151240,151241,151243,151246,151248],{"class":314,"line":274},[312,151242,32641],{"class":488},[312,151244,151245],{"class":324},".name ",[312,151247,336],{"class":1436},[312,151249,151250],{"class":324}," name\n",[312,151252,151253,151255,151258,151260],{"class":314,"line":298},[312,151254,32641],{"class":488},[312,151256,151257],{"class":324},".age ",[312,151259,336],{"class":1436},[312,151261,151262],{"class":324}," age\n",[312,151264,151265,151267,151270,151272],{"class":314,"line":974},[312,151266,32641],{"class":488},[312,151268,151269],{"class":324},".score ",[312,151271,336],{"class":1436},[312,151273,3385],{"class":324},[312,151275,151276],{"class":314,"line":980},[312,151277,4205],{"emptyLinePlaceholder":1881},[312,151279,151280,151282,151284],{"class":314,"line":997},[312,151281,32597],{"class":1436},[312,151283,150827],{"class":332},[312,151285,32603],{"class":324},[312,151287,151288,151290,151292,151294,151296,151298,151300,151302,151304,151306,151308,151310,151313,151315,151318,151320,151322],{"class":314,"line":1003},[312,151289,34246],{"class":488},[312,151291,1576],{"class":324},[312,151293,2003],{"class":1436},[312,151295,150841],{"class":339},[312,151297,150907],{"class":488},[312,151299,82072],{"class":324},[312,151301,2888],{"class":488},[312,151303,150850],{"class":339},[312,151305,150907],{"class":488},[312,151307,82084],{"class":324},[312,151309,2888],{"class":488},[312,151311,151312],{"class":339},"岁，成绩",[312,151314,150907],{"class":488},[312,151316,151317],{"class":324},".score",[312,151319,2888],{"class":488},[312,151321,2196],{"class":339},[312,151323,1959],{"class":324},[312,151325,151326],{"class":314,"line":1020},[312,151327,4205],{"emptyLinePlaceholder":1881},[312,151329,151330],{"class":314,"line":1026},[312,151331,4205],{"emptyLinePlaceholder":1881},[312,151333,151334,151336,151338,151341,151344,151346,151348,151350,151352],{"class":314,"line":3418},[312,151335,150936],{"class":324},[312,151337,336],{"class":1436},[312,151339,151340],{"class":324}," Student(",[312,151342,151343],{"class":339},"\"小明\"",[312,151345,733],{"class":324},[312,151347,2595],{"class":488},[312,151349,733],{"class":324},[312,151351,2931],{"class":488},[312,151353,1959],{"class":324},[312,151355,151356],{"class":314,"line":3423},[312,151357,150964],{"class":324},[24,151359,151360],{},"构造方法的好处：",[140,151362,151363,151366,151369],{},[143,151364,151365],{},"创建对象时必须提供必要数据。",[143,151367,151368],{},"属性初始化集中，不容易漏。",[143,151370,151371],{},"对象状态更完整。",[14,151373,151375,151376],{"id":151374},"_116-str","11.6 ",[27,151377,3110],{},[24,151379,151380,151381,30181],{},"直接打印对象时，默认输出不直观。可以定义 ",[119,151382,151383],{},"__str__",[303,151385,151387],{"className":32174,"code":151386,"language":32176,"meta":308,"style":308},"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",[119,151388,151389,151397,151406,151416,151426,151430,151439,151467,151471,151475,151491],{"__ignoreMap":308},[312,151390,151391,151393,151395],{"class":314,"line":315},[312,151392,16495],{"class":1436},[312,151394,9701],{"class":332},[312,151396,5544],{"class":324},[312,151398,151399,151401,151403],{"class":314,"line":171},[312,151400,32597],{"class":1436},[312,151402,32600],{"class":488},[312,151404,151405],{"class":324},"(self, name, age):\n",[312,151407,151408,151410,151412,151414],{"class":314,"line":274},[312,151409,32641],{"class":488},[312,151411,151245],{"class":324},[312,151413,336],{"class":1436},[312,151415,151250],{"class":324},[312,151417,151418,151420,151422,151424],{"class":314,"line":298},[312,151419,32641],{"class":488},[312,151421,151257],{"class":324},[312,151423,336],{"class":1436},[312,151425,151262],{"class":324},[312,151427,151428],{"class":314,"line":974},[312,151429,4205],{"emptyLinePlaceholder":1881},[312,151431,151432,151434,151437],{"class":314,"line":980},[312,151433,32597],{"class":1436},[312,151435,151436],{"class":488}," __str__",[312,151438,32603],{"class":324},[312,151440,151441,151443,151446,151449,151451,151453,151455,151458,151460,151462,151464],{"class":314,"line":997},[312,151442,16553],{"class":1436},[312,151444,151445],{"class":1436}," f",[312,151447,151448],{"class":339},"\"Student(name=",[312,151450,150907],{"class":488},[312,151452,82072],{"class":324},[312,151454,2888],{"class":488},[312,151456,151457],{"class":339},", age=",[312,151459,150907],{"class":488},[312,151461,82084],{"class":324},[312,151463,2888],{"class":488},[312,151465,151466],{"class":339},")\"\n",[312,151468,151469],{"class":314,"line":1003},[312,151470,4205],{"emptyLinePlaceholder":1881},[312,151472,151473],{"class":314,"line":1020},[312,151474,4205],{"emptyLinePlaceholder":1881},[312,151476,151477,151479,151481,151483,151485,151487,151489],{"class":314,"line":1026},[312,151478,150936],{"class":324},[312,151480,336],{"class":1436},[312,151482,151340],{"class":324},[312,151484,151343],{"class":339},[312,151486,733],{"class":324},[312,151488,2595],{"class":488},[312,151490,1959],{"class":324},[312,151492,151493,151495],{"class":314,"line":3418},[312,151494,32211],{"class":488},[312,151496,151497],{"class":324},"(student)\n",[14,151499,151501],{"id":151500},"_117-封装","11.7 封装",[24,151503,151504],{},"封装就是把数据和方法放到类中，并控制访问方式。",[24,151506,151507],{},"Python 中以双下划线开头的属性通常视为私有属性。",[303,151509,151511],{"className":32174,"code":151510,"language":32176,"meta":308,"style":308},"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",[119,151512,151513,151522,151531,151543,151555,151559,151568,151577,151581,151591,151604,151615,151620,151631,151635,151644,151656,151667,151671,151684,151695,151699,151710,151714,151718,151736,151745,151754],{"__ignoreMap":308},[312,151514,151515,151517,151520],{"class":314,"line":315},[312,151516,16495],{"class":1436},[312,151518,151519],{"class":332}," Account",[312,151521,5544],{"class":324},[312,151523,151524,151526,151528],{"class":314,"line":171},[312,151525,32597],{"class":1436},[312,151527,32600],{"class":488},[312,151529,151530],{"class":324},"(self, owner, balance):\n",[312,151532,151533,151535,151538,151540],{"class":314,"line":274},[312,151534,32641],{"class":488},[312,151536,151537],{"class":324},".owner ",[312,151539,336],{"class":1436},[312,151541,151542],{"class":324}," owner\n",[312,151544,151545,151547,151550,151552],{"class":314,"line":298},[312,151546,32641],{"class":488},[312,151548,151549],{"class":324},".__balance ",[312,151551,336],{"class":1436},[312,151553,151554],{"class":324}," balance\n",[312,151556,151557],{"class":314,"line":974},[312,151558,4205],{"emptyLinePlaceholder":1881},[312,151560,151561,151563,151566],{"class":314,"line":980},[312,151562,32597],{"class":1436},[312,151564,151565],{"class":332}," get_balance",[312,151567,32603],{"class":324},[312,151569,151570,151572,151574],{"class":314,"line":997},[312,151571,16553],{"class":1436},[312,151573,40668],{"class":488},[312,151575,151576],{"class":324},".__balance\n",[312,151578,151579],{"class":314,"line":1003},[312,151580,4205],{"emptyLinePlaceholder":1881},[312,151582,151583,151585,151588],{"class":314,"line":1020},[312,151584,32597],{"class":1436},[312,151586,151587],{"class":332}," deposit",[312,151589,151590],{"class":324},"(self, money):\n",[312,151592,151593,151595,151598,151600,151602],{"class":314,"line":1026},[312,151594,4302],{"class":1436},[312,151596,151597],{"class":324}," money ",[312,151599,3394],{"class":1436},[312,151601,5898],{"class":488},[312,151603,5544],{"class":324},[312,151605,151606,151608,151610,151613],{"class":314,"line":3418},[312,151607,36445],{"class":488},[312,151609,1576],{"class":324},[312,151611,151612],{"class":339},"\"存款金额必须大于0\"",[312,151614,1959],{"class":324},[312,151616,151617],{"class":314,"line":3423},[312,151618,151619],{"class":1436},"            return\n",[312,151621,151622,151624,151626,151628],{"class":314,"line":3429},[312,151623,32641],{"class":488},[312,151625,151549],{"class":324},[312,151627,11280],{"class":1436},[312,151629,151630],{"class":324}," money\n",[312,151632,151633],{"class":314,"line":3434},[312,151634,4205],{"emptyLinePlaceholder":1881},[312,151636,151637,151639,151642],{"class":314,"line":3448},[312,151638,32597],{"class":1436},[312,151640,151641],{"class":332}," withdraw",[312,151643,151590],{"class":324},[312,151645,151646,151648,151650,151652,151654],{"class":314,"line":3453},[312,151647,4302],{"class":1436},[312,151649,151597],{"class":324},[312,151651,3394],{"class":1436},[312,151653,5898],{"class":488},[312,151655,5544],{"class":324},[312,151657,151658,151660,151662,151665],{"class":314,"line":3459},[312,151659,36445],{"class":488},[312,151661,1576],{"class":324},[312,151663,151664],{"class":339},"\"取款金额必须大于0\"",[312,151666,1959],{"class":324},[312,151668,151669],{"class":314,"line":3480},[312,151670,151619],{"class":1436},[312,151672,151673,151675,151677,151679,151681],{"class":314,"line":3485},[312,151674,4302],{"class":1436},[312,151676,151597],{"class":324},[312,151678,2902],{"class":1436},[312,151680,40668],{"class":488},[312,151682,151683],{"class":324},".__balance:\n",[312,151685,151686,151688,151690,151693],{"class":314,"line":3499},[312,151687,36445],{"class":488},[312,151689,1576],{"class":324},[312,151691,151692],{"class":339},"\"余额不足\"",[312,151694,1959],{"class":324},[312,151696,151697],{"class":314,"line":3504},[312,151698,151619],{"class":1436},[312,151700,151701,151703,151705,151708],{"class":314,"line":3533},[312,151702,32641],{"class":488},[312,151704,151549],{"class":324},[312,151706,151707],{"class":1436},"-=",[312,151709,151630],{"class":324},[312,151711,151712],{"class":314,"line":3538},[312,151713,4205],{"emptyLinePlaceholder":1881},[312,151715,151716],{"class":314,"line":3555},[312,151717,4205],{"emptyLinePlaceholder":1881},[312,151719,151720,151723,151725,151728,151730,151732,151734],{"class":314,"line":3560},[312,151721,151722],{"class":324},"account ",[312,151724,336],{"class":1436},[312,151726,151727],{"class":324}," Account(",[312,151729,151343],{"class":339},[312,151731,733],{"class":324},[312,151733,8214],{"class":488},[312,151735,1959],{"class":324},[312,151737,151738,151741,151743],{"class":314,"line":3565},[312,151739,151740],{"class":324},"account.deposit(",[312,151742,3528],{"class":488},[312,151744,1959],{"class":324},[312,151746,151747,151750,151752],{"class":314,"line":3570},[312,151748,151749],{"class":324},"account.withdraw(",[312,151751,2256],{"class":488},[312,151753,1959],{"class":324},[312,151755,151756,151758],{"class":314,"line":3584},[312,151757,32211],{"class":488},[312,151759,151760],{"class":324},"(account.get_balance())\n",[24,151762,151763],{},"封装的意义是避免外部随意修改内部状态。",[14,151765,151767],{"id":151766},"_118-继承","11.8 继承",[24,151769,151770],{},"继承可以让子类复用父类的属性和方法。",[303,151772,151774],{"className":32174,"code":151773,"language":32176,"meta":308,"style":308},"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",[119,151775,151776,151785,151794,151805,151809,151813,151827,151836,151847,151851,151855,151865,151870],{"__ignoreMap":308},[312,151777,151778,151780,151783],{"class":314,"line":315},[312,151779,16495],{"class":1436},[312,151781,151782],{"class":332}," Animal",[312,151784,5544],{"class":324},[312,151786,151787,151789,151792],{"class":314,"line":171},[312,151788,32597],{"class":1436},[312,151790,151791],{"class":332}," eat",[312,151793,32603],{"class":324},[312,151795,151796,151798,151800,151803],{"class":314,"line":274},[312,151797,34246],{"class":488},[312,151799,1576],{"class":324},[312,151801,151802],{"class":339},"\"吃东西\"",[312,151804,1959],{"class":324},[312,151806,151807],{"class":314,"line":298},[312,151808,4205],{"emptyLinePlaceholder":1881},[312,151810,151811],{"class":314,"line":974},[312,151812,4205],{"emptyLinePlaceholder":1881},[312,151814,151815,151817,151820,151822,151825],{"class":314,"line":980},[312,151816,16495],{"class":1436},[312,151818,151819],{"class":332}," Dog",[312,151821,1576],{"class":324},[312,151823,151824],{"class":332},"Animal",[312,151826,32582],{"class":324},[312,151828,151829,151831,151834],{"class":314,"line":997},[312,151830,32597],{"class":1436},[312,151832,151833],{"class":332}," bark",[312,151835,32603],{"class":324},[312,151837,151838,151840,151842,151845],{"class":314,"line":1003},[312,151839,34246],{"class":488},[312,151841,1576],{"class":324},[312,151843,151844],{"class":339},"\"汪汪\"",[312,151846,1959],{"class":324},[312,151848,151849],{"class":314,"line":1020},[312,151850,4205],{"emptyLinePlaceholder":1881},[312,151852,151853],{"class":314,"line":1026},[312,151854,4205],{"emptyLinePlaceholder":1881},[312,151856,151857,151860,151862],{"class":314,"line":3418},[312,151858,151859],{"class":324},"dog ",[312,151861,336],{"class":1436},[312,151863,151864],{"class":324}," Dog()\n",[312,151866,151867],{"class":314,"line":3423},[312,151868,151869],{"class":324},"dog.eat()\n",[312,151871,151872],{"class":314,"line":3429},[312,151873,151874],{"class":324},"dog.bark()\n",[24,151876,151877],{},"子类可以扩展新方法，也可以重写父类方法。",[14,151879,151881],{"id":151880},"_119-方法重写","11.9 方法重写",[303,151883,151885],{"className":32174,"code":151884,"language":32176,"meta":308,"style":308},"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",[119,151886,151887,151895,151904,151915,151919,151923,151935,151943,151953,151957,151961,151974,151982,151993,151997,152001,152009,152019,152023,152028],{"__ignoreMap":308},[312,151888,151889,151891,151893],{"class":314,"line":315},[312,151890,16495],{"class":1436},[312,151892,151782],{"class":332},[312,151894,5544],{"class":324},[312,151896,151897,151899,151902],{"class":314,"line":171},[312,151898,32597],{"class":1436},[312,151900,151901],{"class":332}," speak",[312,151903,32603],{"class":324},[312,151905,151906,151908,151910,151913],{"class":314,"line":274},[312,151907,34246],{"class":488},[312,151909,1576],{"class":324},[312,151911,151912],{"class":339},"\"动物叫\"",[312,151914,1959],{"class":324},[312,151916,151917],{"class":314,"line":298},[312,151918,4205],{"emptyLinePlaceholder":1881},[312,151920,151921],{"class":314,"line":974},[312,151922,4205],{"emptyLinePlaceholder":1881},[312,151924,151925,151927,151929,151931,151933],{"class":314,"line":980},[312,151926,16495],{"class":1436},[312,151928,151819],{"class":332},[312,151930,1576],{"class":324},[312,151932,151824],{"class":332},[312,151934,32582],{"class":324},[312,151936,151937,151939,151941],{"class":314,"line":997},[312,151938,32597],{"class":1436},[312,151940,151901],{"class":332},[312,151942,32603],{"class":324},[312,151944,151945,151947,151949,151951],{"class":314,"line":1003},[312,151946,34246],{"class":488},[312,151948,1576],{"class":324},[312,151950,151844],{"class":339},[312,151952,1959],{"class":324},[312,151954,151955],{"class":314,"line":1020},[312,151956,4205],{"emptyLinePlaceholder":1881},[312,151958,151959],{"class":314,"line":1026},[312,151960,4205],{"emptyLinePlaceholder":1881},[312,151962,151963,151965,151968,151970,151972],{"class":314,"line":3418},[312,151964,16495],{"class":1436},[312,151966,151967],{"class":332}," Cat",[312,151969,1576],{"class":324},[312,151971,151824],{"class":332},[312,151973,32582],{"class":324},[312,151975,151976,151978,151980],{"class":314,"line":3423},[312,151977,32597],{"class":1436},[312,151979,151901],{"class":332},[312,151981,32603],{"class":324},[312,151983,151984,151986,151988,151991],{"class":314,"line":3429},[312,151985,34246],{"class":488},[312,151987,1576],{"class":324},[312,151989,151990],{"class":339},"\"喵喵\"",[312,151992,1959],{"class":324},[312,151994,151995],{"class":314,"line":3434},[312,151996,4205],{"emptyLinePlaceholder":1881},[312,151998,151999],{"class":314,"line":3448},[312,152000,4205],{"emptyLinePlaceholder":1881},[312,152002,152003,152005,152007],{"class":314,"line":3453},[312,152004,151859],{"class":324},[312,152006,336],{"class":1436},[312,152008,151864],{"class":324},[312,152010,152011,152014,152016],{"class":314,"line":3459},[312,152012,152013],{"class":324},"cat ",[312,152015,336],{"class":1436},[312,152017,152018],{"class":324}," Cat()\n",[312,152020,152021],{"class":314,"line":3480},[312,152022,4205],{"emptyLinePlaceholder":1881},[312,152024,152025],{"class":314,"line":3485},[312,152026,152027],{"class":324},"dog.speak()\n",[312,152029,152030],{"class":314,"line":3499},[312,152031,152032],{"class":324},"cat.speak()\n",[14,152034,152036],{"id":152035},"_1110-super","11.10 super",[24,152038,152039,152040,152043],{},"子类可以通过 ",[119,152041,152042],{},"super()"," 调用父类方法。",[303,152045,152047],{"className":32174,"code":152046,"language":32176,"meta":308,"style":308},"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",[119,152048,152049,152057,152066,152076,152080,152084,152096,152105,152116,152126,152130,152134,152150],{"__ignoreMap":308},[312,152050,152051,152053,152055],{"class":314,"line":315},[312,152052,16495],{"class":1436},[312,152054,17370],{"class":332},[312,152056,5544],{"class":324},[312,152058,152059,152061,152063],{"class":314,"line":171},[312,152060,32597],{"class":1436},[312,152062,32600],{"class":488},[312,152064,152065],{"class":324},"(self, name):\n",[312,152067,152068,152070,152072,152074],{"class":314,"line":274},[312,152069,32641],{"class":488},[312,152071,151245],{"class":324},[312,152073,336],{"class":1436},[312,152075,151250],{"class":324},[312,152077,152078],{"class":314,"line":298},[312,152079,4205],{"emptyLinePlaceholder":1881},[312,152081,152082],{"class":314,"line":974},[312,152083,4205],{"emptyLinePlaceholder":1881},[312,152085,152086,152088,152090,152092,152094],{"class":314,"line":980},[312,152087,16495],{"class":1436},[312,152089,9701],{"class":332},[312,152091,1576],{"class":324},[312,152093,20845],{"class":332},[312,152095,32582],{"class":324},[312,152097,152098,152100,152102],{"class":314,"line":997},[312,152099,32597],{"class":1436},[312,152101,32600],{"class":488},[312,152103,152104],{"class":324},"(self, name, score):\n",[312,152106,152107,152109,152111,152113],{"class":314,"line":1003},[312,152108,32613],{"class":488},[312,152110,19061],{"class":324},[312,152112,32625],{"class":488},[312,152114,152115],{"class":324},"(name)\n",[312,152117,152118,152120,152122,152124],{"class":314,"line":1020},[312,152119,32641],{"class":488},[312,152121,151269],{"class":324},[312,152123,336],{"class":1436},[312,152125,3385],{"class":324},[312,152127,152128],{"class":314,"line":1026},[312,152129,4205],{"emptyLinePlaceholder":1881},[312,152131,152132],{"class":314,"line":3418},[312,152133,4205],{"emptyLinePlaceholder":1881},[312,152135,152136,152138,152140,152142,152144,152146,152148],{"class":314,"line":3423},[312,152137,150936],{"class":324},[312,152139,336],{"class":1436},[312,152141,151340],{"class":324},[312,152143,151343],{"class":339},[312,152145,733],{"class":324},[312,152147,2931],{"class":488},[312,152149,1959],{"class":324},[312,152151,152152,152154],{"class":314,"line":3429},[312,152153,32211],{"class":488},[312,152155,152156],{"class":324},"(student.name, student.score)\n",[14,152158,152160],{"id":152159},"_1111-多态","11.11 多态",[24,152162,152163],{},"多态指不同对象响应同一个方法，表现出不同结果。",[303,152165,152167],{"className":32174,"code":152166,"language":32176,"meta":308,"style":308},"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",[119,152168,152169,152177,152185,152195,152199,152203,152211,152219,152229,152233,152237,152247,152252,152256,152260,152265],{"__ignoreMap":308},[312,152170,152171,152173,152175],{"class":314,"line":315},[312,152172,16495],{"class":1436},[312,152174,151819],{"class":332},[312,152176,5544],{"class":324},[312,152178,152179,152181,152183],{"class":314,"line":171},[312,152180,32597],{"class":1436},[312,152182,151901],{"class":332},[312,152184,32603],{"class":324},[312,152186,152187,152189,152191,152193],{"class":314,"line":274},[312,152188,34246],{"class":488},[312,152190,1576],{"class":324},[312,152192,151844],{"class":339},[312,152194,1959],{"class":324},[312,152196,152197],{"class":314,"line":298},[312,152198,4205],{"emptyLinePlaceholder":1881},[312,152200,152201],{"class":314,"line":974},[312,152202,4205],{"emptyLinePlaceholder":1881},[312,152204,152205,152207,152209],{"class":314,"line":980},[312,152206,16495],{"class":1436},[312,152208,151967],{"class":332},[312,152210,5544],{"class":324},[312,152212,152213,152215,152217],{"class":314,"line":997},[312,152214,32597],{"class":1436},[312,152216,151901],{"class":332},[312,152218,32603],{"class":324},[312,152220,152221,152223,152225,152227],{"class":314,"line":1003},[312,152222,34246],{"class":488},[312,152224,1576],{"class":324},[312,152226,151990],{"class":339},[312,152228,1959],{"class":324},[312,152230,152231],{"class":314,"line":1020},[312,152232,4205],{"emptyLinePlaceholder":1881},[312,152234,152235],{"class":314,"line":1026},[312,152236,4205],{"emptyLinePlaceholder":1881},[312,152238,152239,152241,152244],{"class":314,"line":3418},[312,152240,33742],{"class":1436},[312,152242,152243],{"class":332}," make_sound",[312,152245,152246],{"class":324},"(animal):\n",[312,152248,152249],{"class":314,"line":3423},[312,152250,152251],{"class":324},"    animal.speak()\n",[312,152253,152254],{"class":314,"line":3429},[312,152255,4205],{"emptyLinePlaceholder":1881},[312,152257,152258],{"class":314,"line":3434},[312,152259,4205],{"emptyLinePlaceholder":1881},[312,152261,152262],{"class":314,"line":3448},[312,152263,152264],{"class":324},"make_sound(Dog())\n",[312,152266,152267],{"class":314,"line":3453},[312,152268,152269],{"class":324},"make_sound(Cat())\n",[24,152271,152272],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,152274,152276],{"id":152275},"_1112-类属性和实例属性","11.12 类属性和实例属性",[24,152278,152279],{},"实例属性属于对象：",[303,152281,152283],{"className":32174,"code":152282,"language":32176,"meta":308,"style":308},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[119,152284,152285,152293,152301],{"__ignoreMap":308},[312,152286,152287,152289,152291],{"class":314,"line":315},[312,152288,16495],{"class":1436},[312,152290,9701],{"class":332},[312,152292,5544],{"class":324},[312,152294,152295,152297,152299],{"class":314,"line":171},[312,152296,32597],{"class":1436},[312,152298,32600],{"class":488},[312,152300,152065],{"class":324},[312,152302,152303,152305,152307,152309],{"class":314,"line":274},[312,152304,32641],{"class":488},[312,152306,151245],{"class":324},[312,152308,336],{"class":1436},[312,152310,151250],{"class":324},[24,152312,152313],{},"类属性属于类，所有对象共享：",[303,152315,152317],{"className":32174,"code":152316,"language":32176,"meta":308,"style":308},"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",[119,152318,152319,152327,152337,152341,152349,152359,152363,152367,152380,152394,152398,152405,152412],{"__ignoreMap":308},[312,152320,152321,152323,152325],{"class":314,"line":315},[312,152322,16495],{"class":1436},[312,152324,9701],{"class":332},[312,152326,5544],{"class":324},[312,152328,152329,152332,152334],{"class":314,"line":171},[312,152330,152331],{"class":324},"    school ",[312,152333,336],{"class":1436},[312,152335,152336],{"class":339}," \"黑马学校\"\n",[312,152338,152339],{"class":314,"line":274},[312,152340,4205],{"emptyLinePlaceholder":1881},[312,152342,152343,152345,152347],{"class":314,"line":298},[312,152344,32597],{"class":1436},[312,152346,32600],{"class":488},[312,152348,152065],{"class":324},[312,152350,152351,152353,152355,152357],{"class":314,"line":974},[312,152352,32641],{"class":488},[312,152354,151245],{"class":324},[312,152356,336],{"class":1436},[312,152358,151250],{"class":324},[312,152360,152361],{"class":314,"line":980},[312,152362,4205],{"emptyLinePlaceholder":1881},[312,152364,152365],{"class":314,"line":997},[312,152366,4205],{"emptyLinePlaceholder":1881},[312,152368,152369,152372,152374,152376,152378],{"class":314,"line":1003},[312,152370,152371],{"class":324},"s1 ",[312,152373,336],{"class":1436},[312,152375,151340],{"class":324},[312,152377,151343],{"class":339},[312,152379,1959],{"class":324},[312,152381,152382,152385,152387,152389,152392],{"class":314,"line":1020},[312,152383,152384],{"class":324},"s2 ",[312,152386,336],{"class":1436},[312,152388,151340],{"class":324},[312,152390,152391],{"class":339},"\"小红\"",[312,152393,1959],{"class":324},[312,152395,152396],{"class":314,"line":1026},[312,152397,4205],{"emptyLinePlaceholder":1881},[312,152399,152400,152402],{"class":314,"line":3418},[312,152401,32211],{"class":488},[312,152403,152404],{"class":324},"(s1.school)\n",[312,152406,152407,152409],{"class":314,"line":3423},[312,152408,32211],{"class":488},[312,152410,152411],{"class":324},"(s2.school)\n",[312,152413,152414,152416],{"class":314,"line":3429},[312,152415,32211],{"class":488},[312,152417,152418],{"class":324},"(Student.school)\n",[24,152420,152421],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,152423,152425],{"id":152424},"_1113-类方法和静态方法","11.13 类方法和静态方法",[69,152427,152429],{"id":152428},"_11131-类方法","11.13.1 类方法",[24,152431,152432,152433,152436,152437,30181],{},"类方法使用 ",[119,152434,152435],{},"@classmethod","，第一个参数通常是 ",[119,152438,152439],{},"cls",[303,152441,152443],{"className":32174,"code":152442,"language":32176,"meta":308,"style":308},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[119,152444,152445,152453,152461,152465,152473,152483,152493,152497,152501],{"__ignoreMap":308},[312,152446,152447,152449,152451],{"class":314,"line":315},[312,152448,16495],{"class":1436},[312,152450,9701],{"class":332},[312,152452,5544],{"class":324},[312,152454,152455,152457,152459],{"class":314,"line":171},[312,152456,152331],{"class":324},[312,152458,336],{"class":1436},[312,152460,152336],{"class":339},[312,152462,152463],{"class":314,"line":274},[312,152464,4205],{"emptyLinePlaceholder":1881},[312,152466,152467,152470],{"class":314,"line":298},[312,152468,152469],{"class":332},"    @",[312,152471,152472],{"class":488},"classmethod\n",[312,152474,152475,152477,152480],{"class":314,"line":974},[312,152476,32597],{"class":1436},[312,152478,152479],{"class":332}," get_school",[312,152481,152482],{"class":324},"(cls):\n",[312,152484,152485,152487,152490],{"class":314,"line":980},[312,152486,16553],{"class":1436},[312,152488,152489],{"class":488}," cls",[312,152491,152492],{"class":324},".school\n",[312,152494,152495],{"class":314,"line":997},[312,152496,4205],{"emptyLinePlaceholder":1881},[312,152498,152499],{"class":314,"line":1003},[312,152500,4205],{"emptyLinePlaceholder":1881},[312,152502,152503,152505],{"class":314,"line":1020},[312,152504,32211],{"class":488},[312,152506,152507],{"class":324},"(Student.get_school())\n",[69,152509,152511],{"id":152510},"_11132-静态方法","11.13.2 静态方法",[24,152513,152514,152515,152518],{},"静态方法使用 ",[119,152516,152517],{},"@staticmethod","，不需要访问实例和类。",[303,152520,152522],{"className":32174,"code":152521,"language":32176,"meta":308,"style":308},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[119,152523,152524,152533,152540,152549,152560,152564,152568],{"__ignoreMap":308},[312,152525,152526,152528,152531],{"class":314,"line":315},[312,152527,16495],{"class":1436},[312,152529,152530],{"class":332}," MathUtils",[312,152532,5544],{"class":324},[312,152534,152535,152537],{"class":314,"line":171},[312,152536,152469],{"class":332},[312,152538,152539],{"class":488},"staticmethod\n",[312,152541,152542,152544,152546],{"class":314,"line":274},[312,152543,32597],{"class":1436},[312,152545,7014],{"class":332},[312,152547,152548],{"class":324},"(a, b):\n",[312,152550,152551,152553,152555,152557],{"class":314,"line":298},[312,152552,16553],{"class":1436},[312,152554,12672],{"class":324},[312,152556,2426],{"class":1436},[312,152558,152559],{"class":324}," b\n",[312,152561,152562],{"class":314,"line":974},[312,152563,4205],{"emptyLinePlaceholder":1881},[312,152565,152566],{"class":314,"line":980},[312,152567,4205],{"emptyLinePlaceholder":1881},[312,152569,152570,152572,152575,152577,152579,152581],{"class":314,"line":997},[312,152571,32211],{"class":488},[312,152573,152574],{"class":324},"(MathUtils.add(",[312,152576,1433],{"class":488},[312,152578,733],{"class":324},[312,152580,2027],{"class":488},[312,152582,32293],{"class":324},[24,152584,152585],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152587,152589],{"id":152588},"_1114-dataclass","11.14 dataclass",[24,152591,152592,152595],{},[119,152593,152594],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[303,152597,152599],{"className":32174,"code":152598,"language":32176,"meta":308,"style":308},"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",[119,152600,152601,152613,152617,152621,152626,152634,152642,152650,152658,152662,152666,152686],{"__ignoreMap":308},[312,152602,152603,152605,152608,152610],{"class":314,"line":315},[312,152604,32533],{"class":1436},[312,152606,152607],{"class":324}," dataclasses ",[312,152609,32188],{"class":1436},[312,152611,152612],{"class":324}," dataclass\n",[312,152614,152615],{"class":314,"line":171},[312,152616,4205],{"emptyLinePlaceholder":1881},[312,152618,152619],{"class":314,"line":274},[312,152620,4205],{"emptyLinePlaceholder":1881},[312,152622,152623],{"class":314,"line":298},[312,152624,152625],{"class":332},"@dataclass\n",[312,152627,152628,152630,152632],{"class":314,"line":974},[312,152629,16495],{"class":1436},[312,152631,9701],{"class":332},[312,152633,5544],{"class":324},[312,152635,152636,152639],{"class":314,"line":980},[312,152637,152638],{"class":324},"    name: ",[312,152640,152641],{"class":488},"str\n",[312,152643,152644,152647],{"class":314,"line":997},[312,152645,152646],{"class":324},"    age: ",[312,152648,152649],{"class":488},"int\n",[312,152651,152652,152655],{"class":314,"line":1003},[312,152653,152654],{"class":324},"    score: ",[312,152656,152657],{"class":488},"float\n",[312,152659,152660],{"class":314,"line":1020},[312,152661,4205],{"emptyLinePlaceholder":1881},[312,152663,152664],{"class":314,"line":1026},[312,152665,4205],{"emptyLinePlaceholder":1881},[312,152667,152668,152670,152672,152674,152676,152678,152680,152682,152684],{"class":314,"line":3418},[312,152669,150936],{"class":324},[312,152671,336],{"class":1436},[312,152673,151340],{"class":324},[312,152675,151343],{"class":339},[312,152677,733],{"class":324},[312,152679,2595],{"class":488},[312,152681,733],{"class":324},[312,152683,2931],{"class":488},[312,152685,1959],{"class":324},[312,152687,152688,152690],{"class":314,"line":3423},[312,152689,32211],{"class":488},[312,152691,151497],{"class":324},[24,152693,152694,152695,2159,152697,152700],{},"它会自动生成 ",[119,152696,32625],{},[119,152698,152699],{},"__repr__"," 等方法。适合数据模型类。",[14,152702,152704],{"id":152703},"_1115-小案例学生类","11.15 小案例：学生类",[303,152706,152708],{"className":32174,"code":152707,"language":32176,"meta":308,"style":308},"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",[119,152709,152710,152718,152727,152739,152749,152759,152769,152773,152782,152795,152799,152808,152814,152826,152838,152850,152862,152866,152870,152876,152886,152895,152905,152913,152921,152930,152934,152938,152946,152982,152986,152990,153015,153022],{"__ignoreMap":308},[312,152711,152712,152714,152716],{"class":314,"line":315},[312,152713,16495],{"class":1436},[312,152715,9701],{"class":332},[312,152717,5544],{"class":324},[312,152719,152720,152722,152724],{"class":314,"line":171},[312,152721,32597],{"class":1436},[312,152723,32600],{"class":488},[312,152725,152726],{"class":324},"(self, student_id, name, age, score):\n",[312,152728,152729,152731,152734,152736],{"class":314,"line":274},[312,152730,32641],{"class":488},[312,152732,152733],{"class":324},".student_id ",[312,152735,336],{"class":1436},[312,152737,152738],{"class":324}," student_id\n",[312,152740,152741,152743,152745,152747],{"class":314,"line":298},[312,152742,32641],{"class":488},[312,152744,151245],{"class":324},[312,152746,336],{"class":1436},[312,152748,151250],{"class":324},[312,152750,152751,152753,152755,152757],{"class":314,"line":974},[312,152752,32641],{"class":488},[312,152754,151257],{"class":324},[312,152756,336],{"class":1436},[312,152758,151262],{"class":324},[312,152760,152761,152763,152765,152767],{"class":314,"line":980},[312,152762,32641],{"class":488},[312,152764,151269],{"class":324},[312,152766,336],{"class":1436},[312,152768,3385],{"class":324},[312,152770,152771],{"class":314,"line":997},[312,152772,4205],{"emptyLinePlaceholder":1881},[312,152774,152775,152777,152780],{"class":314,"line":1003},[312,152776,32597],{"class":1436},[312,152778,152779],{"class":332}," is_passed",[312,152781,32603],{"class":324},[312,152783,152784,152786,152788,152790,152792],{"class":314,"line":1020},[312,152785,16553],{"class":1436},[312,152787,40668],{"class":488},[312,152789,151269],{"class":324},[312,152791,3516],{"class":1436},[312,152793,152794],{"class":488}," 60\n",[312,152796,152797],{"class":314,"line":1026},[312,152798,4205],{"emptyLinePlaceholder":1881},[312,152800,152801,152803,152806],{"class":314,"line":3418},[312,152802,32597],{"class":1436},[312,152804,152805],{"class":332}," to_dict",[312,152807,32603],{"class":324},[312,152809,152810,152812],{"class":314,"line":3423},[312,152811,16553],{"class":1436},[312,152813,483],{"class":324},[312,152815,152816,152819,152821,152823],{"class":314,"line":3429},[312,152817,152818],{"class":339},"            \"student_id\"",[312,152820,492],{"class":324},[312,152822,32619],{"class":488},[312,152824,152825],{"class":324},".student_id,\n",[312,152827,152828,152831,152833,152835],{"class":314,"line":3434},[312,152829,152830],{"class":339},"            \"name\"",[312,152832,492],{"class":324},[312,152834,32619],{"class":488},[312,152836,152837],{"class":324},".name,\n",[312,152839,152840,152843,152845,152847],{"class":314,"line":3448},[312,152841,152842],{"class":339},"            \"age\"",[312,152844,492],{"class":324},[312,152846,32619],{"class":488},[312,152848,152849],{"class":324},".age,\n",[312,152851,152852,152855,152857,152859],{"class":314,"line":3453},[312,152853,152854],{"class":339},"            \"score\"",[312,152856,492],{"class":324},[312,152858,32619],{"class":488},[312,152860,152861],{"class":324},".score,\n",[312,152863,152864],{"class":314,"line":3459},[312,152865,4334],{"class":324},[312,152867,152868],{"class":314,"line":3480},[312,152869,4205],{"emptyLinePlaceholder":1881},[312,152871,152872,152874],{"class":314,"line":3485},[312,152873,152469],{"class":332},[312,152875,152472],{"class":488},[312,152877,152878,152880,152883],{"class":314,"line":3499},[312,152879,32597],{"class":1436},[312,152881,152882],{"class":332}," from_dict",[312,152884,152885],{"class":324},"(cls, data):\n",[312,152887,152888,152890,152892],{"class":314,"line":3504},[312,152889,16553],{"class":1436},[312,152891,152489],{"class":488},[312,152893,152894],{"class":324},"(\n",[312,152896,152897,152900,152903],{"class":314,"line":3533},[312,152898,152899],{"class":324},"            data[",[312,152901,152902],{"class":339},"\"student_id\"",[312,152904,89606],{"class":324},[312,152906,152907,152909,152911],{"class":314,"line":3538},[312,152908,152899],{"class":324},[312,152910,64457],{"class":339},[312,152912,89606],{"class":324},[312,152914,152915,152917,152919],{"class":314,"line":3555},[312,152916,152899],{"class":324},[312,152918,70901],{"class":339},[312,152920,89606],{"class":324},[312,152922,152923,152925,152928],{"class":314,"line":3560},[312,152924,152899],{"class":324},[312,152926,152927],{"class":339},"\"score\"",[312,152929,89606],{"class":324},[312,152931,152932],{"class":314,"line":3565},[312,152933,39921],{"class":324},[312,152935,152936],{"class":314,"line":3570},[312,152937,4205],{"emptyLinePlaceholder":1881},[312,152939,152940,152942,152944],{"class":314,"line":3584},[312,152941,32597],{"class":1436},[312,152943,151436],{"class":488},[312,152945,32603],{"class":324},[312,152947,152948,152950,152952,152954,152956,152959,152961,152964,152966,152968,152970,152972,152974,152976,152978,152980],{"class":314,"line":3589},[312,152949,16553],{"class":1436},[312,152951,151445],{"class":1436},[312,152953,2196],{"class":339},[312,152955,150907],{"class":488},[312,152957,152958],{"class":324},".student_id",[312,152960,2888],{"class":488},[312,152962,152963],{"class":488}," {self",[312,152965,82072],{"class":324},[312,152967,2888],{"class":488},[312,152969,152963],{"class":488},[312,152971,82084],{"class":324},[312,152973,2888],{"class":488},[312,152975,152963],{"class":488},[312,152977,151317],{"class":324},[312,152979,2888],{"class":488},[312,152981,26929],{"class":339},[312,152983,152984],{"class":314,"line":4382},[312,152985,4205],{"emptyLinePlaceholder":1881},[312,152987,152988],{"class":314,"line":4396},[312,152989,4205],{"emptyLinePlaceholder":1881},[312,152991,152992,152994,152996,152998,153001,153003,153005,153007,153009,153011,153013],{"class":314,"line":4404},[312,152993,150936],{"class":324},[312,152995,336],{"class":1436},[312,152997,151340],{"class":324},[312,152999,153000],{"class":339},"\"001\"",[312,153002,733],{"class":324},[312,153004,151343],{"class":339},[312,153006,733],{"class":324},[312,153008,2595],{"class":488},[312,153010,733],{"class":324},[312,153012,2931],{"class":488},[312,153014,1959],{"class":324},[312,153016,153017,153019],{"class":314,"line":4409},[312,153018,32211],{"class":488},[312,153020,153021],{"class":324},"(student.is_passed())\n",[312,153023,153024,153026],{"class":314,"line":4415},[312,153025,32211],{"class":488},[312,153027,153028],{"class":324},"(student.to_dict())\n",[24,153030,153031,1167,153034,153037],{},[119,153032,153033],{},"to_dict()",[119,153035,153036],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,153039,153041],{"id":153040},"_1116-易错点","11.16 易错点",[140,153043,153044,153050,153056,153061,153064,153067],{},[143,153045,153046,153047,30181],{},"类名推荐使用大驼峰，如 ",[119,153048,153049],{},"StudentManager",[143,153051,153052,153053,153055],{},"方法第一个参数必须写 ",[119,153054,32619],{},"，调用时不用传。",[143,153057,153058,153060],{},[119,153059,32625],{}," 不是普通方法，它在创建对象时自动执行。",[143,153062,153063],{},"私有属性不是绝对安全，只是约定和名称改写。",[143,153065,153066],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[143,153068,153069],{},"类中方法太多时，说明职责可能过重。",[14,153071,153073],{"id":153072},"_1117-本章练习","11.17 本章练习",[140,153075,153076,153082,153088,153093,153106],{},[143,153077,153078,153079,153081],{},"定义 ",[119,153080,151023],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[143,153083,153078,153084,153087],{},[119,153085,153086],{},"Account"," 类，实现存款、取款、查询余额。",[143,153089,153078,153090,153092],{},[119,153091,19026],{}," 类，计算圆的周长和面积。",[143,153094,153078,153095,2159,153098,153101,153102,153105],{},[119,153096,153097],{},"Dog",[119,153099,153100],{},"Cat"," 类，并用同一个函数调用它们的 ",[119,153103,153104],{},"speak()"," 方法。",[143,153107,106135,153108,153110,153111,30181],{},[119,153109,152594],{}," 定义一个商品类 ",[119,153112,153113],{},"Product",[1856,153115,153116],{},"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":308,"searchDepth":171,"depth":171,"links":153118},[153119,153120,153121,153122,153123,153124,153126,153127,153128,153129,153130,153131,153132,153136,153137,153138,153139],{"id":150787,"depth":171,"text":150788},{"id":150970,"depth":171,"text":150971},{"id":151034,"depth":171,"text":151035},{"id":151111,"depth":171,"text":151112},{"id":151210,"depth":171,"text":151211},{"id":151374,"depth":171,"text":153125},"11.6 str",{"id":151500,"depth":171,"text":151501},{"id":151766,"depth":171,"text":151767},{"id":151880,"depth":171,"text":151881},{"id":152035,"depth":171,"text":152036},{"id":152159,"depth":171,"text":152160},{"id":152275,"depth":171,"text":152276},{"id":152424,"depth":171,"text":152425,"children":153133},[153134,153135],{"id":152428,"depth":274,"text":152429},{"id":152510,"depth":274,"text":152511},{"id":152588,"depth":171,"text":152589},{"id":152703,"depth":171,"text":152704},{"id":153040,"depth":171,"text":153041},{"id":153072,"depth":171,"text":153073},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150779,"description":1878},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153146,"title":153147,"body":153148,"description":1878,"extension":1879,"meta":156461,"navigation":1881,"path":156462,"seo":156463,"stem":156464,"__hash__":156465},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153149,"toc":156437},[153150,153153,153157,153160,153163,153192,153195,153203,153207,153211,153214,153237,153240,153246,153250,154696,154699,154720,154724,154727,154739,154742,154926,154929,155055,155058,155062,155066,155202,155206,155292,155296,155378,155382,155419,155423,155612,155616,155619,155849,155853,155856,156037,156040,156044,156047,156053,156056,156082,156086,156089,156103,156106,156131,156134,156148,156151,156168,156171,156188,156191,156208,156212,156238,156242,156265,156269,156272,156274,156280,156282,156303,156306,156312,156318,156322,156325,156401,156404,156408,156434],[10,153151,153147],{"id":153152},"_12-综合案例与复习路线",[14,153154,153156],{"id":153155},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[24,153158,153159],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[24,153161,153162],{},"一个合格的入门综合项目最好覆盖：",[140,153164,153165,153168,153171,153174,153177,153180,153183,153186,153189],{},[143,153166,153167],{},"输入输出。",[143,153169,153170],{},"判断和循环。",[143,153172,153173],{},"函数拆分。",[143,153175,153176],{},"列表、字典等容器。",[143,153178,153179],{},"文件持久化。",[143,153181,153182],{},"异常处理。",[143,153184,153185],{},"模块拆分。",[143,153187,153188],{},"可选：面向对象。",[143,153190,153191],{},"可选：数据可视化。",[24,153193,153194],{},"本章整理两个方向：",[140,153196,153197,153200],{},[143,153198,153199],{},"学生管理系统。",[143,153201,153202],{},"销售数据统计和可视化。",[14,153204,153206],{"id":153205},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[69,153208,153210],{"id":153209},"_1221-需求","12.2.1 需求",[24,153212,153213],{},"实现一个命令行学生管理系统：",[140,153215,153216,153219,153222,153225,153228,153231,153234],{},[143,153217,153218],{},"添加学生。",[143,153220,153221],{},"删除学生。",[143,153223,153224],{},"修改学生。",[143,153226,153227],{},"查询学生。",[143,153229,153230],{},"显示所有学生。",[143,153232,153233],{},"保存到 JSON 文件。",[143,153235,153236],{},"程序启动时自动读取 JSON 文件。",[24,153238,153239],{},"学生字段：",[303,153241,153244],{"className":153242,"code":153243,"language":6992,"meta":308},[6990],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[119,153245,153243],{"__ignoreMap":308},[14,153247,153249],{"id":153248},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[303,153251,153253],{"className":32174,"code":153252,"language":32176,"meta":308,"style":308},"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",[119,153254,153255,153261,153271,153275,153289,153293,153297,153306,153318,153324,153328,153334,153365,153375,153382,153393,153399,153403,153407,153417,153448,153474,153478,153482,153491,153502,153513,153524,153535,153546,153557,153568,153572,153576,153586,153598,153614,153621,153628,153632,153636,153646,153654,153661,153674,153684,153695,153699,153703,153712,153720,153726,153738,153746,153757,153761,153765,153774,153790,153794,153801,153812,153817,153821,153837,153852,153867,153871,153876,153884,153892,153900,153908,153912,153917,153928,153932,153936,153945,153960,153970,153974,153986,153997,154001,154005,154010,154014,154025,154029,154033,154042,154057,154065,154069,154081,154091,154095,154099,154114,154127,154140,154144,154157,154169,154181,154185,154189,154200,154204,154208,154217,154232,154240,154244,154256,154266,154270,154274,154279,154283,154287,154297,154303,154325,154344,154363,154382,154387,154391,154395,154404,154412,154423,154427,154431,154457,154467,154472,154476,154480,154488,154498,154502,154510,154515,154531,154535,154549,154554,154568,154573,154586,154591,154604,154609,154622,154627,154640,154651,154655,154661,154672,154676,154680,154692],{"__ignoreMap":308},[312,153256,153257,153259],{"class":314,"line":315},[312,153258,32188],{"class":1436},[312,153260,148546],{"class":324},[312,153262,153263,153265,153267,153269],{"class":314,"line":171},[312,153264,32533],{"class":1436},[312,153266,110080],{"class":324},[312,153268,32188],{"class":1436},[312,153270,110085],{"class":324},[312,153272,153273],{"class":314,"line":274},[312,153274,4205],{"emptyLinePlaceholder":1881},[312,153276,153277,153280,153282,153284,153287],{"class":314,"line":298},[312,153278,153279],{"class":488},"DATA_FILE",[312,153281,15366],{"class":1436},[312,153283,110314],{"class":324},[312,153285,153286],{"class":339},"\"students.json\"",[312,153288,1959],{"class":324},[312,153290,153291],{"class":314,"line":974},[312,153292,4205],{"emptyLinePlaceholder":1881},[312,153294,153295],{"class":314,"line":980},[312,153296,4205],{"emptyLinePlaceholder":1881},[312,153298,153299,153301,153304],{"class":314,"line":997},[312,153300,33742],{"class":1436},[312,153302,153303],{"class":332}," load_students",[312,153305,33748],{"class":324},[312,153307,153308,153310,153312,153315],{"class":314,"line":1003},[312,153309,4906],{"class":1436},[312,153311,40725],{"class":1436},[312,153313,153314],{"class":488}," DATA_FILE",[312,153316,153317],{"class":324},".exists():\n",[312,153319,153320,153322],{"class":314,"line":1020},[312,153321,16553],{"class":1436},[312,153323,53624],{"class":324},[312,153325,153326],{"class":314,"line":1026},[312,153327,4205],{"emptyLinePlaceholder":1881},[312,153329,153330,153332],{"class":314,"line":3418},[312,153331,127551],{"class":1436},[312,153333,5544],{"class":324},[312,153335,153336,153339,153341,153343,153345,153347,153349,153351,153353,153355,153357,153359,153361,153363],{"class":314,"line":3423},[312,153337,153338],{"class":1436},"        with",[312,153340,148246],{"class":488},[312,153342,1576],{"class":324},[312,153344,153279],{"class":488},[312,153346,733],{"class":324},[312,153348,148256],{"class":339},[312,153350,733],{"class":324},[312,153352,148261],{"class":1579},[312,153354,336],{"class":1436},[312,153356,148266],{"class":339},[312,153358,1583],{"class":324},[312,153360,33178],{"class":1436},[312,153362,149608],{"class":1579},[312,153364,5544],{"class":324},[312,153366,153367,153369,153371,153373],{"class":314,"line":3429},[312,153368,17532],{"class":1436},[312,153370,149619],{"class":324},[312,153372,47149],{"class":1579},[312,153374,1959],{"class":324},[312,153376,153377,153379],{"class":314,"line":3434},[312,153378,127579],{"class":1436},[312,153380,153381],{"class":324}," json.JSONDecodeError:\n",[312,153383,153384,153386,153388,153391],{"class":314,"line":3448},[312,153385,34246],{"class":488},[312,153387,1576],{"class":324},[312,153389,153390],{"class":339},"\"数据文件格式错误，已使用空数据启动\"",[312,153392,1959],{"class":324},[312,153394,153395,153397],{"class":314,"line":3453},[312,153396,16553],{"class":1436},[312,153398,53624],{"class":324},[312,153400,153401],{"class":314,"line":3459},[312,153402,4205],{"emptyLinePlaceholder":1881},[312,153404,153405],{"class":314,"line":3480},[312,153406,4205],{"emptyLinePlaceholder":1881},[312,153408,153409,153411,153414],{"class":314,"line":3485},[312,153410,33742],{"class":1436},[312,153412,153413],{"class":332}," save_students",[312,153415,153416],{"class":324},"(students):\n",[312,153418,153419,153421,153423,153425,153427,153429,153432,153434,153436,153438,153440,153442,153444,153446],{"class":314,"line":3499},[312,153420,35973],{"class":1436},[312,153422,148246],{"class":488},[312,153424,1576],{"class":324},[312,153426,153279],{"class":488},[312,153428,733],{"class":324},[312,153430,153431],{"class":339},"\"w\"",[312,153433,733],{"class":324},[312,153435,148261],{"class":1579},[312,153437,336],{"class":1436},[312,153439,148266],{"class":339},[312,153441,1583],{"class":324},[312,153443,33178],{"class":1436},[312,153445,149608],{"class":1579},[312,153447,5544],{"class":324},[312,153449,153450,153453,153455,153457,153459,153461,153463,153465,153468,153470,153472],{"class":314,"line":3504},[312,153451,153452],{"class":324},"        json.dump(students, ",[312,153454,47149],{"class":1579},[312,153456,733],{"class":324},[312,153458,148592],{"class":1579},[312,153460,336],{"class":1436},[312,153462,35782],{"class":488},[312,153464,733],{"class":324},[312,153466,153467],{"class":1579},"indent",[312,153469,336],{"class":1436},[312,153471,2027],{"class":488},[312,153473,1959],{"class":324},[312,153475,153476],{"class":314,"line":3533},[312,153477,4205],{"emptyLinePlaceholder":1881},[312,153479,153480],{"class":314,"line":3538},[312,153481,4205],{"emptyLinePlaceholder":1881},[312,153483,153484,153486,153489],{"class":314,"line":3555},[312,153485,33742],{"class":1436},[312,153487,153488],{"class":332}," show_menu",[312,153490,33748],{"class":324},[312,153492,153493,153495,153497,153500],{"class":314,"line":3560},[312,153494,33094],{"class":488},[312,153496,1576],{"class":324},[312,153498,153499],{"class":339},"\"====== 学生管理系统 ======\"",[312,153501,1959],{"class":324},[312,153503,153504,153506,153508,153511],{"class":314,"line":3565},[312,153505,33094],{"class":488},[312,153507,1576],{"class":324},[312,153509,153510],{"class":339},"\"1. 添加学生\"",[312,153512,1959],{"class":324},[312,153514,153515,153517,153519,153522],{"class":314,"line":3570},[312,153516,33094],{"class":488},[312,153518,1576],{"class":324},[312,153520,153521],{"class":339},"\"2. 删除学生\"",[312,153523,1959],{"class":324},[312,153525,153526,153528,153530,153533],{"class":314,"line":3584},[312,153527,33094],{"class":488},[312,153529,1576],{"class":324},[312,153531,153532],{"class":339},"\"3. 修改学生\"",[312,153534,1959],{"class":324},[312,153536,153537,153539,153541,153544],{"class":314,"line":3589},[312,153538,33094],{"class":488},[312,153540,1576],{"class":324},[312,153542,153543],{"class":339},"\"4. 查询学生\"",[312,153545,1959],{"class":324},[312,153547,153548,153550,153552,153555],{"class":314,"line":4382},[312,153549,33094],{"class":488},[312,153551,1576],{"class":324},[312,153553,153554],{"class":339},"\"5. 显示所有学生\"",[312,153556,1959],{"class":324},[312,153558,153559,153561,153563,153566],{"class":314,"line":4396},[312,153560,33094],{"class":488},[312,153562,1576],{"class":324},[312,153564,153565],{"class":339},"\"0. 退出系统\"",[312,153567,1959],{"class":324},[312,153569,153570],{"class":314,"line":4404},[312,153571,4205],{"emptyLinePlaceholder":1881},[312,153573,153574],{"class":314,"line":4409},[312,153575,4205],{"emptyLinePlaceholder":1881},[312,153577,153578,153580,153583],{"class":314,"line":4415},[312,153579,33742],{"class":1436},[312,153581,153582],{"class":332}," find_student",[312,153584,153585],{"class":324},"(students, student_id):\n",[312,153587,153588,153590,153593,153595],{"class":314,"line":4421},[312,153589,5006],{"class":1436},[312,153591,153592],{"class":324}," student ",[312,153594,27839],{"class":1436},[312,153596,153597],{"class":324}," students:\n",[312,153599,153600,153602,153605,153607,153609,153611],{"class":314,"line":4426},[312,153601,4302],{"class":1436},[312,153603,153604],{"class":324}," student[",[312,153606,152902],{"class":339},[312,153608,6248],{"class":324},[312,153610,4754],{"class":1436},[312,153612,153613],{"class":324}," student_id:\n",[312,153615,153616,153618],{"class":314,"line":9751},[312,153617,17532],{"class":1436},[312,153619,153620],{"class":324}," student\n",[312,153622,153623,153625],{"class":314,"line":9775},[312,153624,5895],{"class":1436},[312,153626,153627],{"class":488}," None\n",[312,153629,153630],{"class":314,"line":9780},[312,153631,4205],{"emptyLinePlaceholder":1881},[312,153633,153634],{"class":314,"line":9786},[312,153635,4205],{"emptyLinePlaceholder":1881},[312,153637,153638,153640,153643],{"class":314,"line":9813},[312,153639,33742],{"class":1436},[312,153641,153642],{"class":332}," input_int",[312,153644,153645],{"class":324},"(prompt):\n",[312,153647,153648,153650,153652],{"class":314,"line":9818},[312,153649,4056],{"class":1436},[312,153651,97062],{"class":488},[312,153653,5544],{"class":324},[312,153655,153656,153659],{"class":314,"line":9824},[312,153657,153658],{"class":1436},"        try",[312,153660,5544],{"class":324},[312,153662,153663,153665,153667,153669,153671],{"class":314,"line":9836},[312,153664,17532],{"class":1436},[312,153666,4187],{"class":488},[312,153668,1576],{"class":324},[312,153670,55605],{"class":488},[312,153672,153673],{"class":324},"(prompt))\n",[312,153675,153676,153679,153682],{"class":314,"line":9848},[312,153677,153678],{"class":1436},"        except",[312,153680,153681],{"class":488}," ValueError",[312,153683,5544],{"class":324},[312,153685,153686,153688,153690,153693],{"class":314,"line":9860},[312,153687,36445],{"class":488},[312,153689,1576],{"class":324},[312,153691,153692],{"class":339},"\"请输入整数\"",[312,153694,1959],{"class":324},[312,153696,153697],{"class":314,"line":11519},[312,153698,4205],{"emptyLinePlaceholder":1881},[312,153700,153701],{"class":314,"line":11544},[312,153702,4205],{"emptyLinePlaceholder":1881},[312,153704,153705,153707,153710],{"class":314,"line":11567},[312,153706,33742],{"class":1436},[312,153708,153709],{"class":332}," input_float",[312,153711,153645],{"class":324},[312,153713,153714,153716,153718],{"class":314,"line":11591},[312,153715,4056],{"class":1436},[312,153717,97062],{"class":488},[312,153719,5544],{"class":324},[312,153721,153722,153724],{"class":314,"line":11596},[312,153723,153658],{"class":1436},[312,153725,5544],{"class":324},[312,153727,153728,153730,153732,153734,153736],{"class":314,"line":11601},[312,153729,17532],{"class":1436},[312,153731,111566],{"class":488},[312,153733,1576],{"class":324},[312,153735,55605],{"class":488},[312,153737,153673],{"class":324},[312,153739,153740,153742,153744],{"class":314,"line":11606},[312,153741,153678],{"class":1436},[312,153743,153681],{"class":488},[312,153745,5544],{"class":324},[312,153747,153748,153750,153752,153755],{"class":314,"line":11615},[312,153749,36445],{"class":488},[312,153751,1576],{"class":324},[312,153753,153754],{"class":339},"\"请输入数字\"",[312,153756,1959],{"class":324},[312,153758,153759],{"class":314,"line":11620},[312,153760,4205],{"emptyLinePlaceholder":1881},[312,153762,153763],{"class":314,"line":11626},[312,153764,4205],{"emptyLinePlaceholder":1881},[312,153766,153767,153769,153772],{"class":314,"line":11647},[312,153768,33742],{"class":1436},[312,153770,153771],{"class":332}," add_student",[312,153773,153416],{"class":324},[312,153775,153776,153779,153781,153783,153785,153788],{"class":314,"line":11653},[312,153777,153778],{"class":324},"    student_id ",[312,153780,336],{"class":1436},[312,153782,62387],{"class":488},[312,153784,1576],{"class":324},[312,153786,153787],{"class":339},"\"请输入学号:\"",[312,153789,1959],{"class":324},[312,153791,153792],{"class":314,"line":11667},[312,153793,4205],{"emptyLinePlaceholder":1881},[312,153795,153796,153798],{"class":314,"line":11673},[312,153797,4906],{"class":1436},[312,153799,153800],{"class":324}," find_student(students, student_id):\n",[312,153802,153803,153805,153807,153810],{"class":314,"line":11700},[312,153804,34246],{"class":488},[312,153806,1576],{"class":324},[312,153808,153809],{"class":339},"\"学号已存在\"",[312,153811,1959],{"class":324},[312,153813,153814],{"class":314,"line":11709},[312,153815,153816],{"class":1436},"        return\n",[312,153818,153819],{"class":314,"line":11715},[312,153820,4205],{"emptyLinePlaceholder":1881},[312,153822,153823,153826,153828,153830,153832,153835],{"class":314,"line":11723},[312,153824,153825],{"class":324},"    name ",[312,153827,336],{"class":1436},[312,153829,62387],{"class":488},[312,153831,1576],{"class":324},[312,153833,153834],{"class":339},"\"请输入姓名:\"",[312,153836,1959],{"class":324},[312,153838,153839,153842,153844,153847,153850],{"class":314,"line":11728},[312,153840,153841],{"class":324},"    age ",[312,153843,336],{"class":1436},[312,153845,153846],{"class":324}," input_int(",[312,153848,153849],{"class":339},"\"请输入年龄:\"",[312,153851,1959],{"class":324},[312,153853,153854,153857,153859,153862,153865],{"class":314,"line":18404},[312,153855,153856],{"class":324},"    score ",[312,153858,336],{"class":1436},[312,153860,153861],{"class":324}," input_float(",[312,153863,153864],{"class":339},"\"请输入成绩:\"",[312,153866,1959],{"class":324},[312,153868,153869],{"class":314,"line":18410},[312,153870,4205],{"emptyLinePlaceholder":1881},[312,153872,153873],{"class":314,"line":18433},[312,153874,153875],{"class":324},"    students.append({\n",[312,153877,153878,153881],{"class":314,"line":18439},[312,153879,153880],{"class":339},"        \"student_id\"",[312,153882,153883],{"class":324},": student_id,\n",[312,153885,153886,153889],{"class":314,"line":18462},[312,153887,153888],{"class":339},"        \"name\"",[312,153890,153891],{"class":324},": name,\n",[312,153893,153894,153897],{"class":314,"line":18476},[312,153895,153896],{"class":339},"        \"age\"",[312,153898,153899],{"class":324},": age,\n",[312,153901,153902,153905],{"class":314,"line":18496},[312,153903,153904],{"class":339},"        \"score\"",[312,153906,153907],{"class":324},": score,\n",[312,153909,153910],{"class":314,"line":18502},[312,153911,35256],{"class":324},[312,153913,153914],{"class":314,"line":18513},[312,153915,153916],{"class":324},"    save_students(students)\n",[312,153918,153919,153921,153923,153926],{"class":314,"line":18536},[312,153920,33094],{"class":488},[312,153922,1576],{"class":324},[312,153924,153925],{"class":339},"\"添加成功\"",[312,153927,1959],{"class":324},[312,153929,153930],{"class":314,"line":18558},[312,153931,4205],{"emptyLinePlaceholder":1881},[312,153933,153934],{"class":314,"line":18563},[312,153935,4205],{"emptyLinePlaceholder":1881},[312,153937,153938,153940,153943],{"class":314,"line":18569},[312,153939,33742],{"class":1436},[312,153941,153942],{"class":332}," delete_student",[312,153944,153416],{"class":324},[312,153946,153947,153949,153951,153953,153955,153958],{"class":314,"line":18583},[312,153948,153778],{"class":324},[312,153950,336],{"class":1436},[312,153952,62387],{"class":488},[312,153954,1576],{"class":324},[312,153956,153957],{"class":339},"\"请输入要删除的学号:\"",[312,153959,1959],{"class":324},[312,153961,153962,153965,153967],{"class":314,"line":18596},[312,153963,153964],{"class":324},"    student ",[312,153966,336],{"class":1436},[312,153968,153969],{"class":324}," find_student(students, student_id)\n",[312,153971,153972],{"class":314,"line":18601},[312,153973,4205],{"emptyLinePlaceholder":1881},[312,153975,153976,153978,153980,153982,153984],{"class":314,"line":18615},[312,153977,4906],{"class":1436},[312,153979,153592],{"class":324},[312,153981,40722],{"class":1436},[312,153983,40728],{"class":488},[312,153985,5544],{"class":324},[312,153987,153988,153990,153992,153995],{"class":314,"line":18620},[312,153989,34246],{"class":488},[312,153991,1576],{"class":324},[312,153993,153994],{"class":339},"\"学生不存在\"",[312,153996,1959],{"class":324},[312,153998,153999],{"class":314,"line":18626},[312,154000,153816],{"class":1436},[312,154002,154003],{"class":314,"line":18631},[312,154004,4205],{"emptyLinePlaceholder":1881},[312,154006,154007],{"class":314,"line":18645},[312,154008,154009],{"class":324},"    students.remove(student)\n",[312,154011,154012],{"class":314,"line":18650},[312,154013,153916],{"class":324},[312,154015,154016,154018,154020,154023],{"class":314,"line":18655},[312,154017,33094],{"class":488},[312,154019,1576],{"class":324},[312,154021,154022],{"class":339},"\"删除成功\"",[312,154024,1959],{"class":324},[312,154026,154027],{"class":314,"line":18669},[312,154028,4205],{"emptyLinePlaceholder":1881},[312,154030,154031],{"class":314,"line":18681},[312,154032,4205],{"emptyLinePlaceholder":1881},[312,154034,154035,154037,154040],{"class":314,"line":18686},[312,154036,33742],{"class":1436},[312,154038,154039],{"class":332}," update_student",[312,154041,153416],{"class":324},[312,154043,154044,154046,154048,154050,154052,154055],{"class":314,"line":18699},[312,154045,153778],{"class":324},[312,154047,336],{"class":1436},[312,154049,62387],{"class":488},[312,154051,1576],{"class":324},[312,154053,154054],{"class":339},"\"请输入要修改的学号:\"",[312,154056,1959],{"class":324},[312,154058,154059,154061,154063],{"class":314,"line":18704},[312,154060,153964],{"class":324},[312,154062,336],{"class":1436},[312,154064,153969],{"class":324},[312,154066,154067],{"class":314,"line":18709},[312,154068,4205],{"emptyLinePlaceholder":1881},[312,154070,154071,154073,154075,154077,154079],{"class":314,"line":18714},[312,154072,4906],{"class":1436},[312,154074,153592],{"class":324},[312,154076,40722],{"class":1436},[312,154078,40728],{"class":488},[312,154080,5544],{"class":324},[312,154082,154083,154085,154087,154089],{"class":314,"line":18727},[312,154084,34246],{"class":488},[312,154086,1576],{"class":324},[312,154088,153994],{"class":339},[312,154090,1959],{"class":324},[312,154092,154093],{"class":314,"line":18732},[312,154094,153816],{"class":1436},[312,154096,154097],{"class":314,"line":34428},[312,154098,4205],{"emptyLinePlaceholder":1881},[312,154100,154101,154103,154105,154107,154109,154112],{"class":314,"line":34434},[312,154102,153825],{"class":324},[312,154104,336],{"class":1436},[312,154106,62387],{"class":488},[312,154108,1576],{"class":324},[312,154110,154111],{"class":339},"\"请输入新姓名:\"",[312,154113,1959],{"class":324},[312,154115,154116,154118,154120,154122,154125],{"class":314,"line":34440},[312,154117,153841],{"class":324},[312,154119,336],{"class":1436},[312,154121,153846],{"class":324},[312,154123,154124],{"class":339},"\"请输入新年龄:\"",[312,154126,1959],{"class":324},[312,154128,154129,154131,154133,154135,154138],{"class":314,"line":34446},[312,154130,153856],{"class":324},[312,154132,336],{"class":1436},[312,154134,153861],{"class":324},[312,154136,154137],{"class":339},"\"请输入新成绩:\"",[312,154139,1959],{"class":324},[312,154141,154142],{"class":314,"line":34452},[312,154143,4205],{"emptyLinePlaceholder":1881},[312,154145,154146,154149,154151,154153,154155],{"class":314,"line":34463},[312,154147,154148],{"class":324},"    student[",[312,154150,64457],{"class":339},[312,154152,6248],{"class":324},[312,154154,336],{"class":1436},[312,154156,151250],{"class":324},[312,154158,154159,154161,154163,154165,154167],{"class":314,"line":34469},[312,154160,154148],{"class":324},[312,154162,70901],{"class":339},[312,154164,6248],{"class":324},[312,154166,336],{"class":1436},[312,154168,151262],{"class":324},[312,154170,154171,154173,154175,154177,154179],{"class":314,"line":34489},[312,154172,154148],{"class":324},[312,154174,152927],{"class":339},[312,154176,6248],{"class":324},[312,154178,336],{"class":1436},[312,154180,3385],{"class":324},[312,154182,154183],{"class":314,"line":34495},[312,154184,4205],{"emptyLinePlaceholder":1881},[312,154186,154187],{"class":314,"line":34506},[312,154188,153916],{"class":324},[312,154190,154191,154193,154195,154198],{"class":314,"line":34512},[312,154192,33094],{"class":488},[312,154194,1576],{"class":324},[312,154196,154197],{"class":339},"\"修改成功\"",[312,154199,1959],{"class":324},[312,154201,154202],{"class":314,"line":34518},[312,154203,4205],{"emptyLinePlaceholder":1881},[312,154205,154206],{"class":314,"line":34524},[312,154207,4205],{"emptyLinePlaceholder":1881},[312,154209,154210,154212,154215],{"class":314,"line":34530},[312,154211,33742],{"class":1436},[312,154213,154214],{"class":332}," query_student",[312,154216,153416],{"class":324},[312,154218,154219,154221,154223,154225,154227,154230],{"class":314,"line":34536},[312,154220,153778],{"class":324},[312,154222,336],{"class":1436},[312,154224,62387],{"class":488},[312,154226,1576],{"class":324},[312,154228,154229],{"class":339},"\"请输入要查询的学号:\"",[312,154231,1959],{"class":324},[312,154233,154234,154236,154238],{"class":314,"line":34542},[312,154235,153964],{"class":324},[312,154237,336],{"class":1436},[312,154239,153969],{"class":324},[312,154241,154242],{"class":314,"line":34548},[312,154243,4205],{"emptyLinePlaceholder":1881},[312,154245,154246,154248,154250,154252,154254],{"class":314,"line":34568},[312,154247,4906],{"class":1436},[312,154249,153592],{"class":324},[312,154251,40722],{"class":1436},[312,154253,40728],{"class":488},[312,154255,5544],{"class":324},[312,154257,154258,154260,154262,154264],{"class":314,"line":34574},[312,154259,34246],{"class":488},[312,154261,1576],{"class":324},[312,154263,153994],{"class":339},[312,154265,1959],{"class":324},[312,154267,154268],{"class":314,"line":34590},[312,154269,153816],{"class":1436},[312,154271,154272],{"class":314,"line":34596},[312,154273,4205],{"emptyLinePlaceholder":1881},[312,154275,154276],{"class":314,"line":34610},[312,154277,154278],{"class":324},"    print_student(student)\n",[312,154280,154281],{"class":314,"line":34616},[312,154282,4205],{"emptyLinePlaceholder":1881},[312,154284,154285],{"class":314,"line":34631},[312,154286,4205],{"emptyLinePlaceholder":1881},[312,154288,154289,154291,154294],{"class":314,"line":34637},[312,154290,33742],{"class":1436},[312,154292,154293],{"class":332}," print_student",[312,154295,154296],{"class":324},"(student):\n",[312,154298,154299,154301],{"class":314,"line":34646},[312,154300,33094],{"class":488},[312,154302,152894],{"class":324},[312,154304,154305,154308,154310,154312,154315,154318,154320,154323],{"class":314,"line":34652},[312,154306,154307],{"class":1436},"        f",[312,154309,2196],{"class":339},[312,154311,2840],{"class":488},[312,154313,154314],{"class":324},"student[",[312,154316,154317],{"class":339},"'student_id'",[312,154319,2882],{"class":324},[312,154321,154322],{"class":488},"}\\t",[312,154324,26929],{"class":339},[312,154326,154327,154329,154331,154333,154335,154338,154340,154342],{"class":314,"line":34661},[312,154328,154307],{"class":1436},[312,154330,2196],{"class":339},[312,154332,2840],{"class":488},[312,154334,154314],{"class":324},[312,154336,154337],{"class":339},"'name'",[312,154339,2882],{"class":324},[312,154341,154322],{"class":488},[312,154343,26929],{"class":339},[312,154345,154346,154348,154350,154352,154354,154357,154359,154361],{"class":314,"line":34667},[312,154347,154307],{"class":1436},[312,154349,2196],{"class":339},[312,154351,2840],{"class":488},[312,154353,154314],{"class":324},[312,154355,154356],{"class":339},"'age'",[312,154358,2882],{"class":324},[312,154360,154322],{"class":488},[312,154362,26929],{"class":339},[312,154364,154365,154367,154369,154371,154373,154376,154378,154380],{"class":314,"line":34673},[312,154366,154307],{"class":1436},[312,154368,2196],{"class":339},[312,154370,2840],{"class":488},[312,154372,154314],{"class":324},[312,154374,154375],{"class":339},"'score'",[312,154377,2882],{"class":324},[312,154379,2888],{"class":488},[312,154381,26929],{"class":339},[312,154383,154384],{"class":314,"line":34682},[312,154385,154386],{"class":324},"    )\n",[312,154388,154389],{"class":314,"line":34688},[312,154390,4205],{"emptyLinePlaceholder":1881},[312,154392,154393],{"class":314,"line":34699},[312,154394,4205],{"emptyLinePlaceholder":1881},[312,154396,154397,154399,154402],{"class":314,"line":34705},[312,154398,33742],{"class":1436},[312,154400,154401],{"class":332}," show_all_students",[312,154403,153416],{"class":324},[312,154405,154406,154408,154410],{"class":314,"line":34724},[312,154407,4906],{"class":1436},[312,154409,40725],{"class":1436},[312,154411,153597],{"class":324},[312,154413,154414,154416,154418,154421],{"class":314,"line":34730},[312,154415,34246],{"class":488},[312,154417,1576],{"class":324},[312,154419,154420],{"class":339},"\"暂无学生\"",[312,154422,1959],{"class":324},[312,154424,154425],{"class":314,"line":34741},[312,154426,153816],{"class":1436},[312,154428,154429],{"class":314,"line":34747},[312,154430,4205],{"emptyLinePlaceholder":1881},[312,154432,154433,154435,154437,154440,154442,154445,154447,154450,154452,154455],{"class":314,"line":34767},[312,154434,33094],{"class":488},[312,154436,1576],{"class":324},[312,154438,154439],{"class":339},"\"学号",[312,154441,3042],{"class":488},[312,154443,154444],{"class":339},"姓名",[312,154446,3042],{"class":488},[312,154448,154449],{"class":339},"年龄",[312,154451,3042],{"class":488},[312,154453,154454],{"class":339},"成绩\"",[312,154456,1959],{"class":324},[312,154458,154459,154461,154463,154465],{"class":314,"line":34783},[312,154460,5006],{"class":1436},[312,154462,153592],{"class":324},[312,154464,27839],{"class":1436},[312,154466,153597],{"class":324},[312,154468,154469],{"class":314,"line":34789},[312,154470,154471],{"class":324},"        print_student(student)\n",[312,154473,154474],{"class":314,"line":34803},[312,154475,4205],{"emptyLinePlaceholder":1881},[312,154477,154478],{"class":314,"line":34809},[312,154479,4205],{"emptyLinePlaceholder":1881},[312,154481,154482,154484,154486],{"class":314,"line":34815},[312,154483,33742],{"class":1436},[312,154485,3778],{"class":332},[312,154487,33748],{"class":324},[312,154489,154490,154493,154495],{"class":314,"line":34826},[312,154491,154492],{"class":324},"    students ",[312,154494,336],{"class":1436},[312,154496,154497],{"class":324}," load_students()\n",[312,154499,154500],{"class":314,"line":34832},[312,154501,4205],{"emptyLinePlaceholder":1881},[312,154503,154504,154506,154508],{"class":314,"line":34838},[312,154505,4056],{"class":1436},[312,154507,97062],{"class":488},[312,154509,5544],{"class":324},[312,154511,154512],{"class":314,"line":34848},[312,154513,154514],{"class":324},"        show_menu()\n",[312,154516,154517,154520,154522,154524,154526,154529],{"class":314,"line":34854},[312,154518,154519],{"class":324},"        choice ",[312,154521,336],{"class":1436},[312,154523,62387],{"class":488},[312,154525,1576],{"class":324},[312,154527,154528],{"class":339},"\"请输入操作:\"",[312,154530,1959],{"class":324},[312,154532,154533],{"class":314,"line":34865},[312,154534,4205],{"emptyLinePlaceholder":1881},[312,154536,154537,154539,154542,154544,154547],{"class":314,"line":34871},[312,154538,4302],{"class":1436},[312,154540,154541],{"class":324}," choice ",[312,154543,4754],{"class":1436},[312,154545,154546],{"class":339}," \"1\"",[312,154548,5544],{"class":324},[312,154550,154551],{"class":314,"line":34881},[312,154552,154553],{"class":324},"            add_student(students)\n",[312,154555,154556,154559,154561,154563,154566],{"class":314,"line":34886},[312,154557,154558],{"class":1436},"        elif",[312,154560,154541],{"class":324},[312,154562,4754],{"class":1436},[312,154564,154565],{"class":339}," \"2\"",[312,154567,5544],{"class":324},[312,154569,154570],{"class":314,"line":34892},[312,154571,154572],{"class":324},"            delete_student(students)\n",[312,154574,154575,154577,154579,154581,154584],{"class":314,"line":34941},[312,154576,154558],{"class":1436},[312,154578,154541],{"class":324},[312,154580,4754],{"class":1436},[312,154582,154583],{"class":339}," \"3\"",[312,154585,5544],{"class":324},[312,154587,154588],{"class":314,"line":34988},[312,154589,154590],{"class":324},"            update_student(students)\n",[312,154592,154593,154595,154597,154599,154602],{"class":314,"line":34993},[312,154594,154558],{"class":1436},[312,154596,154541],{"class":324},[312,154598,4754],{"class":1436},[312,154600,154601],{"class":339}," \"4\"",[312,154603,5544],{"class":324},[312,154605,154606],{"class":314,"line":34999},[312,154607,154608],{"class":324},"            query_student(students)\n",[312,154610,154611,154613,154615,154617,154620],{"class":314,"line":35018},[312,154612,154558],{"class":1436},[312,154614,154541],{"class":324},[312,154616,4754],{"class":1436},[312,154618,154619],{"class":339}," \"5\"",[312,154621,5544],{"class":324},[312,154623,154624],{"class":314,"line":35024},[312,154625,154626],{"class":324},"            show_all_students(students)\n",[312,154628,154629,154631,154633,154635,154638],{"class":314,"line":35044},[312,154630,154558],{"class":1436},[312,154632,154541],{"class":324},[312,154634,4754],{"class":1436},[312,154636,154637],{"class":339}," \"0\"",[312,154639,5544],{"class":324},[312,154641,154642,154644,154646,154649],{"class":314,"line":35050},[312,154643,36445],{"class":488},[312,154645,1576],{"class":324},[312,154647,154648],{"class":339},"\"退出系统\"",[312,154650,1959],{"class":324},[312,154652,154653],{"class":314,"line":35056},[312,154654,116867],{"class":1436},[312,154656,154657,154659],{"class":314,"line":35066},[312,154658,4339],{"class":1436},[312,154660,5544],{"class":324},[312,154662,154663,154665,154667,154670],{"class":314,"line":35071},[312,154664,36445],{"class":488},[312,154666,1576],{"class":324},[312,154668,154669],{"class":339},"\"输入错误\"",[312,154671,1959],{"class":324},[312,154673,154674],{"class":314,"line":35077},[312,154675,4205],{"emptyLinePlaceholder":1881},[312,154677,154678],{"class":314,"line":35093},[312,154679,4205],{"emptyLinePlaceholder":1881},[312,154681,154682,154684,154686,154688,154690],{"class":314,"line":35138},[312,154683,3338],{"class":1436},[312,154685,33015],{"class":488},[312,154687,103328],{"class":1436},[312,154689,103331],{"class":339},[312,154691,5544],{"class":324},[312,154693,154694],{"class":314,"line":35144},[312,154695,103338],{"class":324},[24,154697,154698],{},"这个项目串联了：",[140,154700,154701,154704,154707,154710,154713,154715],{},[143,154702,154703],{},"菜单循环。",[143,154705,154706],{},"函数封装。",[143,154708,154709],{},"列表字典。",[143,154711,154712],{},"JSON 读写。",[143,154714,153182],{},[143,154716,154717,30181],{},[119,154718,154719],{},"if __name__ == \"__main__\"",[14,154721,154723],{"id":154722},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[24,154725,154726],{},"可以进一步拆成两个类：",[140,154728,154729,154734],{},[143,154730,154731,154733],{},[119,154732,151023],{},"：表示单个学生。",[143,154735,154736,154738],{},[119,154737,153049],{},"：负责学生增删改查和文件保存。",[24,154740,154741],{},"示意代码：",[303,154743,154745],{"className":32174,"code":154744,"language":32176,"meta":308,"style":308},"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",[119,154746,154747,154757,154761,154765,154769,154777,154784,154790,154796,154802,154806,154814,154820,154830,154840,154850,154860,154864,154868,154874,154882,154890,154898,154906,154914,154922],{"__ignoreMap":308},[312,154748,154749,154751,154753,154755],{"class":314,"line":315},[312,154750,32533],{"class":1436},[312,154752,152607],{"class":324},[312,154754,32188],{"class":1436},[312,154756,152612],{"class":324},[312,154758,154759],{"class":314,"line":171},[312,154760,4205],{"emptyLinePlaceholder":1881},[312,154762,154763],{"class":314,"line":274},[312,154764,4205],{"emptyLinePlaceholder":1881},[312,154766,154767],{"class":314,"line":298},[312,154768,152625],{"class":332},[312,154770,154771,154773,154775],{"class":314,"line":974},[312,154772,16495],{"class":1436},[312,154774,9701],{"class":332},[312,154776,5544],{"class":324},[312,154778,154779,154782],{"class":314,"line":980},[312,154780,154781],{"class":324},"    student_id: ",[312,154783,152641],{"class":488},[312,154785,154786,154788],{"class":314,"line":997},[312,154787,152638],{"class":324},[312,154789,152641],{"class":488},[312,154791,154792,154794],{"class":314,"line":1003},[312,154793,152646],{"class":324},[312,154795,152649],{"class":488},[312,154797,154798,154800],{"class":314,"line":1020},[312,154799,152654],{"class":324},[312,154801,152657],{"class":488},[312,154803,154804],{"class":314,"line":1026},[312,154805,4205],{"emptyLinePlaceholder":1881},[312,154807,154808,154810,154812],{"class":314,"line":3418},[312,154809,32597],{"class":1436},[312,154811,152805],{"class":332},[312,154813,32603],{"class":324},[312,154815,154816,154818],{"class":314,"line":3423},[312,154817,16553],{"class":1436},[312,154819,483],{"class":324},[312,154821,154822,154824,154826,154828],{"class":314,"line":3429},[312,154823,152818],{"class":339},[312,154825,492],{"class":324},[312,154827,32619],{"class":488},[312,154829,152825],{"class":324},[312,154831,154832,154834,154836,154838],{"class":314,"line":3434},[312,154833,152830],{"class":339},[312,154835,492],{"class":324},[312,154837,32619],{"class":488},[312,154839,152837],{"class":324},[312,154841,154842,154844,154846,154848],{"class":314,"line":3448},[312,154843,152842],{"class":339},[312,154845,492],{"class":324},[312,154847,32619],{"class":488},[312,154849,152849],{"class":324},[312,154851,154852,154854,154856,154858],{"class":314,"line":3453},[312,154853,152854],{"class":339},[312,154855,492],{"class":324},[312,154857,32619],{"class":488},[312,154859,152861],{"class":324},[312,154861,154862],{"class":314,"line":3459},[312,154863,4334],{"class":324},[312,154865,154866],{"class":314,"line":3480},[312,154867,4205],{"emptyLinePlaceholder":1881},[312,154869,154870,154872],{"class":314,"line":3485},[312,154871,152469],{"class":332},[312,154873,152472],{"class":488},[312,154875,154876,154878,154880],{"class":314,"line":3499},[312,154877,32597],{"class":1436},[312,154879,152882],{"class":332},[312,154881,152885],{"class":324},[312,154883,154884,154886,154888],{"class":314,"line":3504},[312,154885,16553],{"class":1436},[312,154887,152489],{"class":488},[312,154889,152894],{"class":324},[312,154891,154892,154894,154896],{"class":314,"line":3533},[312,154893,152899],{"class":324},[312,154895,152902],{"class":339},[312,154897,89606],{"class":324},[312,154899,154900,154902,154904],{"class":314,"line":3538},[312,154901,152899],{"class":324},[312,154903,64457],{"class":339},[312,154905,89606],{"class":324},[312,154907,154908,154910,154912],{"class":314,"line":3555},[312,154909,152899],{"class":324},[312,154911,70901],{"class":339},[312,154913,89606],{"class":324},[312,154915,154916,154918,154920],{"class":314,"line":3560},[312,154917,152899],{"class":324},[312,154919,152927],{"class":339},[312,154921,89606],{"class":324},[312,154923,154924],{"class":314,"line":3565},[312,154925,39921],{"class":324},[24,154927,154928],{},"管理器示意：",[303,154930,154932],{"className":32174,"code":154931,"language":32176,"meta":308,"style":308},"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",[119,154933,154934,154943,154951,154962,154966,154976,154989,155000,155007,155013,155017,155026,155035,155041,155048],{"__ignoreMap":308},[312,154935,154936,154938,154941],{"class":314,"line":315},[312,154937,16495],{"class":1436},[312,154939,154940],{"class":332}," StudentManager",[312,154942,5544],{"class":324},[312,154944,154945,154947,154949],{"class":314,"line":171},[312,154946,32597],{"class":1436},[312,154948,32600],{"class":488},[312,154950,32603],{"class":324},[312,154952,154953,154955,154958,154960],{"class":314,"line":274},[312,154954,32641],{"class":488},[312,154956,154957],{"class":324},".students ",[312,154959,336],{"class":1436},[312,154961,53624],{"class":324},[312,154963,154964],{"class":314,"line":298},[312,154965,4205],{"emptyLinePlaceholder":1881},[312,154967,154968,154970,154973],{"class":314,"line":974},[312,154969,32597],{"class":1436},[312,154971,154972],{"class":332}," find_by_id",[312,154974,154975],{"class":324},"(self, student_id):\n",[312,154977,154978,154980,154982,154984,154986],{"class":314,"line":980},[312,154979,5208],{"class":1436},[312,154981,153592],{"class":324},[312,154983,27839],{"class":1436},[312,154985,40668],{"class":488},[312,154987,154988],{"class":324},".students:\n",[312,154990,154991,154993,154996,154998],{"class":314,"line":997},[312,154992,6447],{"class":1436},[312,154994,154995],{"class":324}," student.student_id ",[312,154997,4754],{"class":1436},[312,154999,153613],{"class":324},[312,155001,155002,155005],{"class":314,"line":1003},[312,155003,155004],{"class":1436},"                return",[312,155006,153620],{"class":324},[312,155008,155009,155011],{"class":314,"line":1020},[312,155010,16553],{"class":1436},[312,155012,153627],{"class":488},[312,155014,155015],{"class":314,"line":1026},[312,155016,4205],{"emptyLinePlaceholder":1881},[312,155018,155019,155021,155023],{"class":314,"line":3418},[312,155020,32597],{"class":1436},[312,155022,7014],{"class":332},[312,155024,155025],{"class":324},"(self, student):\n",[312,155027,155028,155030,155032],{"class":314,"line":3423},[312,155029,4302],{"class":1436},[312,155031,40668],{"class":488},[312,155033,155034],{"class":324},".find_by_id(student.student_id):\n",[312,155036,155037,155039],{"class":314,"line":3429},[312,155038,17532],{"class":1436},[312,155040,127574],{"class":488},[312,155042,155043,155045],{"class":314,"line":3434},[312,155044,32641],{"class":488},[312,155046,155047],{"class":324},".students.append(student)\n",[312,155049,155050,155052],{"class":314,"line":3448},[312,155051,16553],{"class":1436},[312,155053,155054],{"class":488}," True\n",[24,155056,155057],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,155059,155061],{"id":155060},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[69,155063,155065],{"id":155064},"_1251-数据结构","12.5.1 数据结构",[303,155067,155069],{"className":32174,"code":155068,"language":32176,"meta":308,"style":308},"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",[119,155070,155071,155079,155110,155140,155169,155198],{"__ignoreMap":308},[312,155072,155073,155075,155077],{"class":314,"line":315},[312,155074,149920],{"class":324},[312,155076,336],{"class":1436},[312,155078,57229],{"class":324},[312,155080,155081,155083,155085,155087,155089,155091,155094,155096,155099,155101,155103,155105,155108],{"class":314,"line":171},[312,155082,149840],{"class":324},[312,155084,149452],{"class":339},[312,155086,492],{"class":324},[312,155088,150063],{"class":339},[312,155090,733],{"class":324},[312,155092,155093],{"class":339},"\"category\"",[312,155095,492],{"class":324},[312,155097,155098],{"class":339},"\"手机\"",[312,155100,733],{"class":324},[312,155102,85855],{"class":339},[312,155104,492],{"class":324},[312,155106,155107],{"class":488},"12000",[312,155109,6735],{"class":324},[312,155111,155112,155114,155116,155118,155120,155122,155124,155126,155129,155131,155133,155135,155138],{"class":314,"line":274},[312,155113,149840],{"class":324},[312,155115,149452],{"class":339},[312,155117,492],{"class":324},[312,155119,150063],{"class":339},[312,155121,733],{"class":324},[312,155123,155093],{"class":339},[312,155125,492],{"class":324},[312,155127,155128],{"class":339},"\"电脑\"",[312,155130,733],{"class":324},[312,155132,85855],{"class":339},[312,155134,492],{"class":324},[312,155136,155137],{"class":488},"18000",[312,155139,6735],{"class":324},[312,155141,155142,155144,155146,155148,155150,155152,155154,155156,155158,155160,155162,155164,155167],{"class":314,"line":298},[312,155143,149840],{"class":324},[312,155145,149452],{"class":339},[312,155147,492],{"class":324},[312,155149,150084],{"class":339},[312,155151,733],{"class":324},[312,155153,155093],{"class":339},[312,155155,492],{"class":324},[312,155157,155098],{"class":339},[312,155159,733],{"class":324},[312,155161,85855],{"class":339},[312,155163,492],{"class":324},[312,155165,155166],{"class":488},"15000",[312,155168,6735],{"class":324},[312,155170,155171,155173,155175,155177,155179,155181,155183,155185,155187,155189,155191,155193,155196],{"class":314,"line":974},[312,155172,149840],{"class":324},[312,155174,149452],{"class":339},[312,155176,492],{"class":324},[312,155178,150084],{"class":339},[312,155180,733],{"class":324},[312,155182,155093],{"class":339},[312,155184,492],{"class":324},[312,155186,155128],{"class":339},[312,155188,733],{"class":324},[312,155190,85855],{"class":339},[312,155192,492],{"class":324},[312,155194,155195],{"class":488},"16000",[312,155197,6735],{"class":324},[312,155199,155200],{"class":314,"line":980},[312,155201,35041],{"class":324},[69,155203,155205],{"id":155204},"_1252-按日期统计","12.5.2 按日期统计",[303,155207,155209],{"className":32174,"code":155208,"language":32176,"meta":308,"style":308},"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",[119,155210,155211,155220,155224,155235,155249,155262,155281,155285],{"__ignoreMap":308},[312,155212,155213,155216,155218],{"class":314,"line":315},[312,155214,155215],{"class":324},"daily_total ",[312,155217,336],{"class":1436},[312,155219,89638],{"class":324},[312,155221,155222],{"class":314,"line":171},[312,155223,4205],{"emptyLinePlaceholder":1881},[312,155225,155226,155228,155230,155232],{"class":314,"line":274},[312,155227,4830],{"class":1436},[312,155229,149664],{"class":324},[312,155231,27839],{"class":1436},[312,155233,155234],{"class":324}," sales:\n",[312,155236,155237,155240,155242,155245,155247],{"class":314,"line":298},[312,155238,155239],{"class":324},"    date ",[312,155241,336],{"class":1436},[312,155243,155244],{"class":324}," item[",[312,155246,149452],{"class":339},[312,155248,35041],{"class":324},[312,155250,155251,155254,155256,155258,155260],{"class":314,"line":974},[312,155252,155253],{"class":324},"    amount ",[312,155255,336],{"class":1436},[312,155257,155244],{"class":324},[312,155259,85855],{"class":339},[312,155261,35041],{"class":324},[312,155263,155264,155267,155269,155272,155274,155276,155278],{"class":314,"line":980},[312,155265,155266],{"class":324},"    daily_total[date] ",[312,155268,336],{"class":1436},[312,155270,155271],{"class":324}," daily_total.get(date, ",[312,155273,858],{"class":488},[312,155275,1583],{"class":324},[312,155277,2426],{"class":1436},[312,155279,155280],{"class":324}," amount\n",[312,155282,155283],{"class":314,"line":997},[312,155284,4205],{"emptyLinePlaceholder":1881},[312,155286,155287,155289],{"class":314,"line":1003},[312,155288,32211],{"class":488},[312,155290,155291],{"class":324},"(daily_total)\n",[69,155293,155295],{"id":155294},"_1253-按类别统计","12.5.3 按类别统计",[303,155297,155299],{"className":32174,"code":155298,"language":32176,"meta":308,"style":308},"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",[119,155300,155301,155310,155314,155324,155337,155349,155367,155371],{"__ignoreMap":308},[312,155302,155303,155306,155308],{"class":314,"line":315},[312,155304,155305],{"class":324},"category_total ",[312,155307,336],{"class":1436},[312,155309,89638],{"class":324},[312,155311,155312],{"class":314,"line":171},[312,155313,4205],{"emptyLinePlaceholder":1881},[312,155315,155316,155318,155320,155322],{"class":314,"line":274},[312,155317,4830],{"class":1436},[312,155319,149664],{"class":324},[312,155321,27839],{"class":1436},[312,155323,155234],{"class":324},[312,155325,155326,155329,155331,155333,155335],{"class":314,"line":298},[312,155327,155328],{"class":324},"    category ",[312,155330,336],{"class":1436},[312,155332,155244],{"class":324},[312,155334,155093],{"class":339},[312,155336,35041],{"class":324},[312,155338,155339,155341,155343,155345,155347],{"class":314,"line":974},[312,155340,155253],{"class":324},[312,155342,336],{"class":1436},[312,155344,155244],{"class":324},[312,155346,85855],{"class":339},[312,155348,35041],{"class":324},[312,155350,155351,155354,155356,155359,155361,155363,155365],{"class":314,"line":980},[312,155352,155353],{"class":324},"    category_total[category] ",[312,155355,336],{"class":1436},[312,155357,155358],{"class":324}," category_total.get(category, ",[312,155360,858],{"class":488},[312,155362,1583],{"class":324},[312,155364,2426],{"class":1436},[312,155366,155280],{"class":324},[312,155368,155369],{"class":314,"line":997},[312,155370,4205],{"emptyLinePlaceholder":1881},[312,155372,155373,155375],{"class":314,"line":1003},[312,155374,32211],{"class":488},[312,155376,155377],{"class":324},"(category_total)\n",[69,155379,155381],{"id":155380},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[303,155383,155385],{"className":32174,"code":155384,"language":32176,"meta":308,"style":308},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[119,155386,155387,155412],{"__ignoreMap":308},[312,155388,155389,155392,155394,155396,155399,155402,155405,155408,155410],{"class":314,"line":315},[312,155390,155391],{"class":324},"top_date, top_amount ",[312,155393,336],{"class":1436},[312,155395,7755],{"class":488},[312,155397,155398],{"class":324},"(daily_total.items(), ",[312,155400,155401],{"class":1579},"key",[312,155403,155404],{"class":1436},"=lambda",[312,155406,155407],{"class":324}," item: item[",[312,155409,1433],{"class":488},[312,155411,6462],{"class":324},[312,155413,155414,155416],{"class":314,"line":171},[312,155415,32211],{"class":488},[312,155417,155418],{"class":324},"(top_date, top_amount)\n",[14,155420,155422],{"id":155421},"_126-绘制柱状图","12.6 绘制柱状图",[303,155424,155426],{"className":32174,"code":155425,"language":32176,"meta":308,"style":308},"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",[119,155427,155428,155442,155453,155457,155465,155477,155489,155500,155504,155508,155518,155529,155543,155548,155565,155582,155598,155602],{"__ignoreMap":308},[312,155429,155430,155432,155434,155436,155438,155440],{"class":314,"line":315},[312,155431,32533],{"class":1436},[312,155433,148834],{"class":324},[312,155435,32188],{"class":1436},[312,155437,148839],{"class":324},[312,155439,33178],{"class":1436},[312,155441,148844],{"class":324},[312,155443,155444,155446,155448,155450],{"class":314,"line":171},[312,155445,32533],{"class":1436},[312,155447,148693],{"class":324},[312,155449,32188],{"class":1436},[312,155451,155452],{"class":324}," Bar\n",[312,155454,155455],{"class":314,"line":274},[312,155456,4205],{"emptyLinePlaceholder":1881},[312,155458,155459,155461,155463],{"class":314,"line":298},[312,155460,155305],{"class":324},[312,155462,336],{"class":1436},[312,155464,483],{"class":324},[312,155466,155467,155470,155472,155475],{"class":314,"line":974},[312,155468,155469],{"class":339},"    \"手机\"",[312,155471,492],{"class":324},[312,155473,155474],{"class":488},"27000",[312,155476,33261],{"class":324},[312,155478,155479,155482,155484,155487],{"class":314,"line":980},[312,155480,155481],{"class":339},"    \"电脑\"",[312,155483,492],{"class":324},[312,155485,155486],{"class":488},"34000",[312,155488,33261],{"class":324},[312,155490,155491,155494,155496,155498],{"class":314,"line":997},[312,155492,155493],{"class":339},"    \"耳机\"",[312,155495,492],{"class":324},[312,155497,126166],{"class":488},[312,155499,33261],{"class":324},[312,155501,155502],{"class":314,"line":1003},[312,155503,515],{"class":324},[312,155505,155506],{"class":314,"line":1020},[312,155507,4205],{"emptyLinePlaceholder":1881},[312,155509,155510,155513,155515],{"class":314,"line":1026},[312,155511,155512],{"class":324},"bar ",[312,155514,336],{"class":1436},[312,155516,155517],{"class":324}," Bar()\n",[312,155519,155520,155523,155526],{"class":314,"line":3418},[312,155521,155522],{"class":324},"bar.add_xaxis(",[312,155524,155525],{"class":488},"list",[312,155527,155528],{"class":324},"(category_total.keys()))\n",[312,155530,155531,155534,155536,155538,155540],{"class":314,"line":3423},[312,155532,155533],{"class":324},"bar.add_yaxis(",[312,155535,148750],{"class":339},[312,155537,733],{"class":324},[312,155539,155525],{"class":488},[312,155541,155542],{"class":324},"(category_total.values()))\n",[312,155544,155545],{"class":314,"line":3429},[312,155546,155547],{"class":324},"bar.set_global_opts(\n",[312,155549,155550,155552,155554,155556,155558,155560,155563],{"class":314,"line":3434},[312,155551,148928],{"class":1579},[312,155553,336],{"class":1436},[312,155555,148933],{"class":324},[312,155557,628],{"class":1579},[312,155559,336],{"class":1436},[312,155561,155562],{"class":339},"\"品类销售额\"",[312,155564,39842],{"class":324},[312,155566,155567,155569,155571,155573,155575,155577,155580],{"class":314,"line":3448},[312,155568,148947],{"class":1579},[312,155570,336],{"class":1436},[312,155572,148952],{"class":324},[312,155574,81581],{"class":1579},[312,155576,336],{"class":1436},[312,155578,155579],{"class":339},"\"品类\"",[312,155581,39842],{"class":324},[312,155583,155584,155586,155588,155590,155592,155594,155596],{"class":314,"line":3453},[312,155585,148966],{"class":1579},[312,155587,336],{"class":1436},[312,155589,148952],{"class":324},[312,155591,81581],{"class":1579},[312,155593,336],{"class":1436},[312,155595,148750],{"class":339},[312,155597,39842],{"class":324},[312,155599,155600],{"class":314,"line":3459},[312,155601,1959],{"class":324},[312,155603,155604,155607,155610],{"class":314,"line":3480},[312,155605,155606],{"class":324},"bar.render(",[312,155608,155609],{"class":339},"\"category_sales.html\"",[312,155611,1959],{"class":324},[14,155613,155615],{"id":155614},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[24,155617,155618],{},"时间线适合展示不同日期、月份、年份的数据变化。",[303,155620,155622],{"className":32174,"code":155621,"language":32176,"meta":308,"style":308},"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",[119,155623,155624,155638,155649,155653,155661,155685,155708,155733,155737,155741,155751,155755,155766,155775,155785,155799,155830,155835,155839],{"__ignoreMap":308},[312,155625,155626,155628,155630,155632,155634,155636],{"class":314,"line":315},[312,155627,32533],{"class":1436},[312,155629,148834],{"class":324},[312,155631,32188],{"class":1436},[312,155633,148839],{"class":324},[312,155635,33178],{"class":1436},[312,155637,148844],{"class":324},[312,155639,155640,155642,155644,155646],{"class":314,"line":171},[312,155641,32533],{"class":1436},[312,155643,148693],{"class":324},[312,155645,32188],{"class":1436},[312,155647,155648],{"class":324}," Bar, Timeline\n",[312,155650,155651],{"class":314,"line":274},[312,155652,4205],{"emptyLinePlaceholder":1881},[312,155654,155655,155657,155659],{"class":314,"line":298},[312,155656,103427],{"class":324},[312,155658,336],{"class":1436},[312,155660,483],{"class":324},[312,155662,155663,155666,155669,155671,155673,155675,155677,155679,155681,155683],{"class":314,"line":974},[312,155664,155665],{"class":339},"    \"2024-10-01\"",[312,155667,155668],{"class":324},": {",[312,155670,155098],{"class":339},[312,155672,492],{"class":324},[312,155674,155107],{"class":488},[312,155676,733],{"class":324},[312,155678,155128],{"class":339},[312,155680,492],{"class":324},[312,155682,155137],{"class":488},[312,155684,6735],{"class":324},[312,155686,155687,155690,155692,155694,155696,155698,155700,155702,155704,155706],{"class":314,"line":980},[312,155688,155689],{"class":339},"    \"2024-10-02\"",[312,155691,155668],{"class":324},[312,155693,155098],{"class":339},[312,155695,492],{"class":324},[312,155697,155166],{"class":488},[312,155699,733],{"class":324},[312,155701,155128],{"class":339},[312,155703,492],{"class":324},[312,155705,155195],{"class":488},[312,155707,6735],{"class":324},[312,155709,155710,155713,155715,155717,155719,155722,155724,155726,155728,155731],{"class":314,"line":997},[312,155711,155712],{"class":339},"    \"2024-10-03\"",[312,155714,155668],{"class":324},[312,155716,155098],{"class":339},[312,155718,492],{"class":324},[312,155720,155721],{"class":488},"17000",[312,155723,733],{"class":324},[312,155725,155128],{"class":339},[312,155727,492],{"class":324},[312,155729,155730],{"class":488},"19000",[312,155732,6735],{"class":324},[312,155734,155735],{"class":314,"line":1003},[312,155736,515],{"class":324},[312,155738,155739],{"class":314,"line":1020},[312,155740,4205],{"emptyLinePlaceholder":1881},[312,155742,155743,155746,155748],{"class":314,"line":1026},[312,155744,155745],{"class":324},"timeline ",[312,155747,336],{"class":1436},[312,155749,155750],{"class":324}," Timeline()\n",[312,155752,155753],{"class":314,"line":3418},[312,155754,4205],{"emptyLinePlaceholder":1881},[312,155756,155757,155759,155762,155764],{"class":314,"line":3423},[312,155758,4830],{"class":1436},[312,155760,155761],{"class":324}," date, category_data ",[312,155763,27839],{"class":1436},[312,155765,150603],{"class":324},[312,155767,155768,155771,155773],{"class":314,"line":3429},[312,155769,155770],{"class":324},"    bar ",[312,155772,336],{"class":1436},[312,155774,155517],{"class":324},[312,155776,155777,155780,155782],{"class":314,"line":3434},[312,155778,155779],{"class":324},"    bar.add_xaxis(",[312,155781,155525],{"class":488},[312,155783,155784],{"class":324},"(category_data.keys()))\n",[312,155786,155787,155790,155792,155794,155796],{"class":314,"line":3448},[312,155788,155789],{"class":324},"    bar.add_yaxis(",[312,155791,148750],{"class":339},[312,155793,733],{"class":324},[312,155795,155525],{"class":488},[312,155797,155798],{"class":324},"(category_data.values()))\n",[312,155800,155801,155804,155807,155809,155811,155813,155815,155817,155819,155821,155823,155825,155828],{"class":314,"line":3453},[312,155802,155803],{"class":324},"    bar.set_global_opts(",[312,155805,155806],{"class":1579},"title_opts",[312,155808,336],{"class":1436},[312,155810,148933],{"class":324},[312,155812,628],{"class":1579},[312,155814,336],{"class":1436},[312,155816,2003],{"class":1436},[312,155818,2196],{"class":339},[312,155820,2840],{"class":488},[312,155822,75698],{"class":324},[312,155824,2888],{"class":488},[312,155826,155827],{"class":339},"销售额\"",[312,155829,32293],{"class":324},[312,155831,155832],{"class":314,"line":3459},[312,155833,155834],{"class":324},"    timeline.add(bar, date)\n",[312,155836,155837],{"class":314,"line":3480},[312,155838,4205],{"emptyLinePlaceholder":1881},[312,155840,155841,155844,155847],{"class":314,"line":3485},[312,155842,155843],{"class":324},"timeline.render(",[312,155845,155846],{"class":339},"\"timeline_sales.html\"",[312,155848,1959],{"class":324},[14,155850,155852],{"id":155851},"_128-绘制地图","12.8 绘制地图",[24,155854,155855],{},"地图适合展示地区数据。",[303,155857,155859],{"className":32174,"code":155858,"language":32176,"meta":308,"style":308},"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",[119,155860,155861,155875,155886,155890,155898,155911,155923,155936,155949,155953,155957,155967,155982,155987,156004,156023,156027],{"__ignoreMap":308},[312,155862,155863,155865,155867,155869,155871,155873],{"class":314,"line":315},[312,155864,32533],{"class":1436},[312,155866,148834],{"class":324},[312,155868,32188],{"class":1436},[312,155870,148839],{"class":324},[312,155872,33178],{"class":1436},[312,155874,148844],{"class":324},[312,155876,155877,155879,155881,155883],{"class":314,"line":171},[312,155878,32533],{"class":1436},[312,155880,148693],{"class":324},[312,155882,32188],{"class":1436},[312,155884,155885],{"class":324}," Map\n",[312,155887,155888],{"class":314,"line":274},[312,155889,4205],{"emptyLinePlaceholder":1881},[312,155891,155892,155894,155896],{"class":314,"line":298},[312,155893,103427],{"class":324},[312,155895,336],{"class":1436},[312,155897,57229],{"class":324},[312,155899,155900,155903,155905,155907,155909],{"class":314,"line":974},[312,155901,155902],{"class":324},"    (",[312,155904,71046],{"class":339},[312,155906,733],{"class":324},[312,155908,2761],{"class":488},[312,155910,39842],{"class":324},[312,155912,155913,155915,155917,155919,155921],{"class":314,"line":980},[312,155914,155902],{"class":324},[312,155916,71066],{"class":339},[312,155918,733],{"class":324},[312,155920,148767],{"class":488},[312,155922,39842],{"class":324},[312,155924,155925,155927,155930,155932,155934],{"class":314,"line":997},[312,155926,155902],{"class":324},[312,155928,155929],{"class":339},"\"广东\"",[312,155931,733],{"class":324},[312,155933,3528],{"class":488},[312,155935,39842],{"class":324},[312,155937,155938,155940,155943,155945,155947],{"class":314,"line":1003},[312,155939,155902],{"class":324},[312,155941,155942],{"class":339},"\"浙江\"",[312,155944,733],{"class":324},[312,155946,148772],{"class":488},[312,155948,39842],{"class":324},[312,155950,155951],{"class":314,"line":1020},[312,155952,35041],{"class":324},[312,155954,155955],{"class":314,"line":1026},[312,155956,4205],{"emptyLinePlaceholder":1881},[312,155958,155959,155962,155964],{"class":314,"line":3418},[312,155960,155961],{"class":324},"map_chart ",[312,155963,336],{"class":1436},[312,155965,155966],{"class":324}," Map()\n",[312,155968,155969,155972,155974,155977,155980],{"class":314,"line":3423},[312,155970,155971],{"class":324},"map_chart.add(",[312,155973,148750],{"class":339},[312,155975,155976],{"class":324},", data, ",[312,155978,155979],{"class":339},"\"china\"",[312,155981,1959],{"class":324},[312,155983,155984],{"class":314,"line":3429},[312,155985,155986],{"class":324},"map_chart.set_global_opts(\n",[312,155988,155989,155991,155993,155995,155997,155999,156002],{"class":314,"line":3434},[312,155990,148928],{"class":1579},[312,155992,336],{"class":1436},[312,155994,148933],{"class":324},[312,155996,628],{"class":1579},[312,155998,336],{"class":1436},[312,156000,156001],{"class":339},"\"地区销售额\"",[312,156003,39842],{"class":324},[312,156005,156006,156009,156011,156014,156017,156019,156021],{"class":314,"line":3448},[312,156007,156008],{"class":1579},"    visualmap_opts",[312,156010,336],{"class":1436},[312,156012,156013],{"class":324},"opts.VisualMapOpts(",[312,156015,156016],{"class":1579},"max_",[312,156018,336],{"class":1436},[312,156020,3528],{"class":488},[312,156022,39842],{"class":324},[312,156024,156025],{"class":314,"line":3453},[312,156026,1959],{"class":324},[312,156028,156029,156032,156035],{"class":314,"line":3459},[312,156030,156031],{"class":324},"map_chart.render(",[312,156033,156034],{"class":339},"\"map_sales.html\"",[312,156036,1959],{"class":324},[24,156038,156039],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,156041,156043],{"id":156042},"_129-项目拆分建议","12.9 项目拆分建议",[24,156045,156046],{},"当代码超过一个文件时，可以这样组织：",[303,156048,156051],{"className":156049,"code":156050,"language":6992,"meta":308},[6990],"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",[119,156052,156050],{"__ignoreMap":308},[24,156054,156055],{},"职责：",[140,156057,156058,156064,156070,156076],{},[143,156059,156060,156063],{},[119,156061,156062],{},"main.py","：程序入口。",[143,156065,156066,156069],{},[119,156067,156068],{},"file_utils.py","：读写 JSON。",[143,156071,156072,156075],{},[119,156073,156074],{},"sales_service.py","：统计销售数据。",[143,156077,156078,156081],{},[119,156079,156080],{},"chart_builder.py","：生成图表。",[14,156083,156085],{"id":156084},"_1210-python基础复习清单","12.10 Python基础复习清单",[24,156087,156088],{},"语法基础：",[140,156090,156091,156094,156097,156100],{},[143,156092,156093],{},"会写变量、注释、输入输出。",[143,156095,156096],{},"会使用 int、float、str、bool。",[143,156098,156099],{},"会做类型转换。",[143,156101,156102],{},"会使用 f-string 格式化输出。",[24,156104,156105],{},"流程控制：",[140,156107,156108,156114,156120,156128],{},[143,156109,156110,156111,30181],{},"会写 ",[119,156112,156113],{},"if elif else",[143,156115,156110,156116,1167,156118,30181],{},[119,156117,110432],{},[119,156119,4830],{},[143,156121,156122,156123,1167,156125,30181],{},"理解 ",[119,156124,3858],{},[119,156126,156127],{},"continue",[143,156129,156130],{},"能写嵌套循环。",[24,156132,156133],{},"函数：",[140,156135,156136,156139,156142,156145],{},[143,156137,156138],{},"会定义和调用函数。",[143,156140,156141],{},"理解参数和返回值。",[143,156143,156144],{},"知道局部变量和全局变量。",[143,156146,156147],{},"会使用默认参数、关键字参数、不定长参数。",[24,156149,156150],{},"容器：",[140,156152,156153,156156,156159,156162,156165],{},[143,156154,156155],{},"会使用列表增删改查。",[143,156157,156158],{},"会遍历列表、字典。",[143,156160,156161],{},"会使用切片。",[143,156163,156164],{},"会用集合去重。",[143,156166,156167],{},"会处理列表嵌套字典。",[24,156169,156170],{},"文件和模块：",[140,156172,156173,156176,156179,156182,156185],{},[143,156174,156175],{},"会读写文本文件。",[143,156177,156178],{},"会读写 JSON。",[143,156180,156181],{},"会捕获常见异常。",[143,156183,156184],{},"会导入模块和第三方包。",[143,156186,156187],{},"会创建简单包结构。",[24,156189,156190],{},"项目能力：",[140,156192,156193,156196,156199,156202,156205],{},[143,156194,156195],{},"能把代码拆成函数。",[143,156197,156198],{},"能把数据保存到文件。",[143,156200,156201],{},"能处理用户输入错误。",[143,156203,156204],{},"能写一个完整菜单程序。",[143,156206,156207],{},"能用 pyecharts 生成图表。",[14,156209,156211],{"id":156210},"_1211-推荐练习顺序","12.11 推荐练习顺序",[140,156213,156214,156217,156220,156223,156226,156229,156232,156235],{},[143,156215,156216],{},"猜数字游戏。",[143,156218,156219],{},"ATM 菜单程序。",[143,156221,156222],{},"学生成绩统计。",[143,156224,156225],{},"学生管理系统函数版。",[143,156227,156228],{},"学生管理系统文件持久化版。",[143,156230,156231],{},"学生管理系统面向对象版。",[143,156233,156234],{},"销售数据统计。",[143,156236,156237],{},"销售数据可视化。",[14,156239,156241],{"id":156240},"_1212-常见学习误区","12.12 常见学习误区",[140,156243,156244,156247,156250,156253,156256,156259,156262],{},[143,156245,156246],{},"只看视频不敲代码。",[143,156248,156249],{},"一报错就复制错误去搜，不先读报错位置。",[143,156251,156252],{},"变量名随便写，后续自己看不懂。",[143,156254,156255],{},"所有代码都写在一个文件一个函数里。",[143,156257,156258],{},"不保存练习代码，复习时没有材料。",[143,156260,156261],{},"还没掌握列表字典就急着学框架。",[143,156263,156264],{},"不会读官方文档，只依赖教程。",[14,156266,156268],{"id":156267},"_1213-如何读报错","12.13 如何读报错",[24,156270,156271],{},"报错通常从下往上看最后几行。",[24,156273,16936],{},[303,156275,156278],{"className":156276,"code":156277,"language":6992,"meta":308},[6990],"ValueError: invalid literal for int() with base 10: 'abc'\n",[119,156279,156277],{"__ignoreMap":308},[24,156281,26395],{},[140,156283,156284,156290,156300],{},[143,156285,156286,156287,30181],{},"异常类型是 ",[119,156288,156289],{},"ValueError",[143,156291,109114,156292,156295,156296,156299],{},[119,156293,156294],{},"int()"," 无法把 ",[119,156297,156298],{},"'abc'"," 转成整数。",[143,156301,156302],{},"应该检查输入内容或增加异常处理。",[24,156304,156305],{},"再看文件名和行号：",[303,156307,156310],{"className":156308,"code":156309,"language":6992,"meta":308},[6990],"File \"main.py\", line 10, in \u003Cmodule>\n",[119,156311,156309],{"__ignoreMap":308},[24,156313,156314,156315,156317],{},"表示错误发生在 ",[119,156316,156062],{}," 第 10 行。",[14,156319,156321],{"id":156320},"_1214-后续学习方向","12.14 后续学习方向",[24,156323,156324],{},"Python 基础完成后，可以按兴趣选择方向：",[140,156326,156327,156339,156348,156360,156371,156380,156390],{},[143,156328,156329,156330,2159,156333,2159,156336,30181],{},"自动化办公：",[119,156331,156332],{},"openpyxl",[119,156334,156335],{},"python-docx",[119,156337,156338],{},"pdfplumber",[143,156340,156341,156342,2159,156344,2159,156346,30181],{},"数据分析：",[119,156343,102396],{},[119,156345,147640],{},[119,156347,147648],{},[143,156349,156350,156351,2159,156354,2159,156357,30181],{},"Web 后端：",[119,156352,156353],{},"Flask",[119,156355,156356],{},"FastAPI",[119,156358,156359],{},"Django",[143,156361,156362,156363,2159,156365,2159,156368,30181],{},"爬虫：",[119,156364,147625],{},[119,156366,156367],{},"BeautifulSoup",[119,156369,156370],{},"Scrapy",[143,156372,156373,156374,2159,156376,156379],{},"测试开发：",[119,156375,147672],{},[119,156377,156378],{},"selenium","、接口测试。",[143,156381,156382,156383,2159,156385,2159,156387,30181],{},"人工智能：",[119,156384,102396],{},[119,156386,147640],{},[119,156388,156389],{},"pytorch",[143,156391,156392,156393,2159,156395,2159,156398,30181],{},"运维脚本：",[119,156394,147241],{},[119,156396,156397],{},"subprocess",[119,156399,156400],{},"paramiko",[24,156402,156403],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,156405,156407],{"id":156406},"_1215-结课练习","12.15 结课练习",[140,156409,156410,156413,156416,156419,156422,156425,156428,156431],{},[143,156411,156412],{},"完成函数版学生管理系统。",[143,156414,156415],{},"给学生管理系统增加 JSON 持久化。",[143,156417,156418],{},"给学生管理系统增加异常处理。",[143,156420,156421],{},"把学生管理系统改成面向对象版。",[143,156423,156424],{},"使用 pyecharts 绘制学生成绩柱状图。",[143,156426,156427],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[143,156429,156430],{},"按品类统计销售额并绘制柱状图。",[143,156432,156433],{},"写一份自己的 Python 学习路线图。",[1856,156435,156436],{},"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":308,"searchDepth":171,"depth":171,"links":156438},[156439,156440,156443,156444,156445,156451,156452,156453,156454,156455,156456,156457,156458,156459,156460],{"id":153155,"depth":171,"text":153156},{"id":153205,"depth":171,"text":153206,"children":156441},[156442],{"id":153209,"depth":274,"text":153210},{"id":153248,"depth":171,"text":153249},{"id":154722,"depth":171,"text":154723},{"id":155060,"depth":171,"text":155061,"children":156446},[156447,156448,156449,156450],{"id":155064,"depth":274,"text":155065},{"id":155204,"depth":274,"text":155205},{"id":155294,"depth":274,"text":155295},{"id":155380,"depth":274,"text":155381},{"id":155421,"depth":171,"text":155422},{"id":155614,"depth":171,"text":155615},{"id":155851,"depth":171,"text":155852},{"id":156042,"depth":171,"text":156043},{"id":156084,"depth":171,"text":156085},{"id":156210,"depth":171,"text":156211},{"id":156240,"depth":171,"text":156241},{"id":156267,"depth":171,"text":156268},{"id":156320,"depth":171,"text":156321},{"id":156406,"depth":171,"text":156407},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153147,"description":1878},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156467,"title":156468,"body":156469,"description":1878,"extension":1879,"meta":158938,"navigation":1881,"path":158939,"seo":158940,"stem":158941,"__hash__":158942},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156470,"toc":158913},[156471,156474,156478,156481,156484,156504,156507,156530,156533,156536,156558,156561,156583,156587,156590,156630,156633,156754,156758,156761,156801,156804,156828,156831,156835,156838,156852,156885,156888,156923,156926,156949,156952,156985,156988,156990,156996,157071,157074,157080,157097,157137,157141,157144,157190,157192,157230,157233,157268,157271,157306,157309,157341,157344,157363,157367,157371,157484,157486,157561,157565,157611,157614,157640,157649,157653,157656,157719,157727,157755,157759,157799,157864,157868,157871,157910,157913,157958,157961,158022,158026,158053,158056,158084,158087,158091,158095,158160,158163,158201,158204,158236,158240,158339,158343,158346,158419,158422,158470,158474,158480,158520,158523,158570,158573,158622,158626,158628,158642,158644,158825,158829,158856,158876,158883,158887,158904,158910],[10,156472,156468],{"id":156473},"_2-基础语法变量与字符串",[14,156475,156477],{"id":156476},"_21-注释","2.1 注释",[24,156479,156480],{},"注释是给人看的说明文字，不会被 Python 执行。",[24,156482,156483],{},"单行注释：",[303,156485,156487],{"className":32174,"code":156486,"language":32176,"meta":308,"style":308},"# 这是单行注释\nprint(\"hello\")\n",[119,156488,156489,156494],{"__ignoreMap":308},[312,156490,156491],{"class":314,"line":315},[312,156492,156493],{"class":318},"# 这是单行注释\n",[312,156495,156496,156498,156500,156502],{"class":314,"line":171},[312,156497,32211],{"class":488},[312,156499,1576],{"class":324},[312,156501,7648],{"class":339},[312,156503,1959],{"class":324},[24,156505,156506],{},"多行说明常用三引号：",[303,156508,156510],{"className":32174,"code":156509,"language":32176,"meta":308,"style":308},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[119,156511,156512,156516,156521,156526],{"__ignoreMap":308},[312,156513,156514],{"class":314,"line":315},[312,156515,97468],{"class":339},[312,156517,156518],{"class":314,"line":171},[312,156519,156520],{"class":339},"这是多行说明。\n",[312,156522,156523],{"class":314,"line":274},[312,156524,156525],{"class":339},"常用于文件顶部说明、函数说明等。\n",[312,156527,156528],{"class":314,"line":298},[312,156529,97468],{"class":339},[24,156531,156532],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[24,156534,156535],{},"不好：",[303,156537,156539],{"className":32174,"code":156538,"language":32176,"meta":308,"style":308},"# age 加 1\nage = age + 1\n",[119,156540,156541,156546],{"__ignoreMap":308},[312,156542,156543],{"class":314,"line":315},[312,156544,156545],{"class":318},"# age 加 1\n",[312,156547,156548,156550,156552,156554,156556],{"class":314,"line":171},[312,156549,148001],{"class":324},[312,156551,336],{"class":1436},[312,156553,17507],{"class":324},[312,156555,2426],{"class":1436},[312,156557,57481],{"class":488},[24,156559,156560],{},"较好：",[303,156562,156564],{"className":32174,"code":156563,"language":32176,"meta":308,"style":308},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[119,156565,156566,156571],{"__ignoreMap":308},[312,156567,156568],{"class":314,"line":315},[312,156569,156570],{"class":318},"# 用户过完生日后，年龄增加一岁\n",[312,156572,156573,156575,156577,156579,156581],{"class":314,"line":171},[312,156574,148001],{"class":324},[312,156576,336],{"class":1436},[312,156578,17507],{"class":324},[312,156580,2426],{"class":1436},[312,156582,57481],{"class":488},[14,156584,156586],{"id":156585},"_22-字面量","2.2 字面量",[24,156588,156589],{},"字面量就是代码中直接写出来的数据。",[303,156591,156593],{"className":32174,"code":156592,"language":32176,"meta":308,"style":308},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[119,156594,156595,156602,156609,156616,156623],{"__ignoreMap":308},[312,156596,156597,156599],{"class":314,"line":315},[312,156598,2256],{"class":488},[312,156600,156601],{"class":318},"          # 整数\n",[312,156603,156604,156606],{"class":314,"line":171},[312,156605,2000],{"class":488},[312,156607,156608],{"class":318},"         # 小数\n",[312,156610,156611,156613],{"class":314,"line":274},[312,156612,7648],{"class":339},[312,156614,156615],{"class":318},"      # 字符串\n",[312,156617,156618,156620],{"class":314,"line":298},[312,156619,33271],{"class":488},[312,156621,156622],{"class":318},"         # 布尔值\n",[312,156624,156625,156627],{"class":314,"line":974},[312,156626,97456],{"class":488},[312,156628,156629],{"class":318},"         # 空值\n",[24,156631,156632],{},"常见字面量类型：",[2086,156634,156635,156645],{},[2089,156636,156637],{},[2092,156638,156639,156641,156643],{},[2095,156640,25533],{},[2095,156642,29288],{},[2095,156644,27665],{},[2132,156646,156647,156658,156669,156680,156692,156704,156716,156729,156741],{},[2092,156648,156649,156651,156655],{},[2137,156650,1956],{},[2137,156652,156653],{},[119,156654,2256],{},[2137,156656,156657],{},"整数",[2092,156659,156660,156662,156666],{},[2137,156661,1992],{},[2137,156663,156664],{},[119,156665,2000],{},[2137,156667,156668],{},"浮点数",[2092,156670,156671,156673,156677],{},[2137,156672,3110],{},[2137,156674,156675],{},[119,156676,7648],{},[2137,156678,156679],{},"字符串",[2092,156681,156682,156684,156690],{},[2137,156683,3162],{},[2137,156685,156686,2159,156688],{},[119,156687,33271],{},[119,156689,35782],{},[2137,156691,67793],{},[2092,156693,156694,156697,156701],{},[2137,156695,156696],{},"NoneType",[2137,156698,156699],{},[119,156700,97456],{},[2137,156702,156703],{},"空值",[2092,156705,156706,156708,156713],{},[2137,156707,155525],{},[2137,156709,156710],{},[119,156711,156712],{},"[1, 2, 3]",[2137,156714,156715],{},"列表",[2092,156717,156718,156721,156726],{},[2137,156719,156720],{},"tuple",[2137,156722,156723],{},[119,156724,156725],{},"(1, 2, 3)",[2137,156727,156728],{},"元组",[2092,156730,156731,156733,156738],{},[2137,156732,116315],{},[2137,156734,156735],{},[119,156736,156737],{},"{\"name\": \"张三\"}",[2137,156739,156740],{},"字典",[2092,156742,156743,156746,156751],{},[2137,156744,156745],{},"set",[2137,156747,156748],{},[119,156749,156750],{},"{1, 2, 3}",[2137,156752,156753],{},"集合",[14,156755,156757],{"id":156756},"_23-变量","2.3 变量",[24,156759,156760],{},"变量是保存数据的名字。",[303,156762,156764],{"className":32174,"code":156763,"language":32176,"meta":308,"style":308},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[119,156765,156766,156774,156782,156792],{"__ignoreMap":308},[312,156767,156768,156770,156772],{"class":314,"line":315},[312,156769,147991],{"class":324},[312,156771,336],{"class":1436},[312,156773,150808],{"class":339},[312,156775,156776,156778,156780],{"class":314,"line":171},[312,156777,148001],{"class":324},[312,156779,336],{"class":1436},[312,156781,148006],{"class":488},[312,156783,156784,156787,156789],{"class":314,"line":274},[312,156785,156786],{"class":324},"height ",[312,156788,336],{"class":1436},[312,156790,156791],{"class":488}," 1.75\n",[312,156793,156794,156797,156799],{"class":314,"line":298},[312,156795,156796],{"class":324},"is_student ",[312,156798,336],{"class":1436},[312,156800,155054],{"class":488},[24,156802,156803],{},"Python 的变量不需要提前声明类型：",[303,156805,156807],{"className":32174,"code":156806,"language":32176,"meta":308,"style":308},"score = 100\nscore = \"满分\"\n",[119,156808,156809,156819],{"__ignoreMap":308},[312,156810,156811,156814,156816],{"class":314,"line":315},[312,156812,156813],{"class":324},"score ",[312,156815,336],{"class":1436},[312,156817,156818],{"class":488}," 100\n",[312,156820,156821,156823,156825],{"class":314,"line":171},[312,156822,156813],{"class":324},[312,156824,336],{"class":1436},[312,156826,156827],{"class":339}," \"满分\"\n",[24,156829,156830],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156832,156834],{"id":156833},"_24-变量命名规则","2.4 变量命名规则",[24,156836,156837],{},"硬性规则：",[140,156839,156840,156843,156846,156849],{},[143,156841,156842],{},"只能由字母、数字、下划线组成。",[143,156844,156845],{},"不能以数字开头。",[143,156847,156848],{},"不能使用 Python 关键字。",[143,156850,156851],{},"区分大小写。",[303,156853,156855],{"className":32174,"code":156854,"language":32176,"meta":308,"style":308},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[119,156856,156857,156866,156875],{"__ignoreMap":308},[312,156858,156859,156862,156864],{"class":314,"line":315},[312,156860,156861],{"class":324},"user_name ",[312,156863,336],{"class":1436},[312,156865,147996],{"class":339},[312,156867,156868,156871,156873],{"class":314,"line":171},[312,156869,156870],{"class":324},"age2 ",[312,156872,336],{"class":1436},[312,156874,148006],{"class":488},[312,156876,156877,156880,156882],{"class":314,"line":274},[312,156878,156879],{"class":324},"_token ",[312,156881,336],{"class":1436},[312,156883,156884],{"class":339}," \"abc\"\n",[24,156886,156887],{},"错误写法：",[303,156889,156891],{"className":32174,"code":156890,"language":32176,"meta":308,"style":308},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[119,156892,156893,156902,156914],{"__ignoreMap":308},[312,156894,156895,156898,156900],{"class":314,"line":315},[312,156896,156897],{"class":79175},"2age",[312,156899,15366],{"class":1436},[312,156901,148006],{"class":488},[312,156903,156904,156906,156908,156910,156912],{"class":314,"line":171},[312,156905,133332],{"class":324},[312,156907,2477],{"class":1436},[312,156909,147991],{"class":324},[312,156911,336],{"class":1436},[312,156913,147996],{"class":339},[312,156915,156916,156918,156920],{"class":314,"line":274},[312,156917,16495],{"class":1436},[312,156919,15366],{"class":1436},[312,156921,156922],{"class":339}," \"一班\"\n",[24,156924,156925],{},"查看关键字：",[303,156927,156929],{"className":32174,"code":156928,"language":32176,"meta":308,"style":308},"import keyword\n\nprint(keyword.kwlist)\n",[119,156930,156931,156938,156942],{"__ignoreMap":308},[312,156932,156933,156935],{"class":314,"line":315},[312,156934,32188],{"class":1436},[312,156936,156937],{"class":324}," keyword\n",[312,156939,156940],{"class":314,"line":171},[312,156941,4205],{"emptyLinePlaceholder":1881},[312,156943,156944,156946],{"class":314,"line":274},[312,156945,32211],{"class":488},[312,156947,156948],{"class":324},"(keyword.kwlist)\n",[24,156950,156951],{},"推荐命名风格：",[303,156953,156955],{"className":32174,"code":156954,"language":32176,"meta":308,"style":308},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[119,156956,156957,156966,156976],{"__ignoreMap":308},[312,156958,156959,156962,156964],{"class":314,"line":315},[312,156960,156961],{"class":324},"student_name ",[312,156963,336],{"class":1436},[312,156965,150808],{"class":339},[312,156967,156968,156971,156973],{"class":314,"line":171},[312,156969,156970],{"class":324},"total_price ",[312,156972,336],{"class":1436},[312,156974,156975],{"class":488}," 99.8\n",[312,156977,156978,156981,156983],{"class":314,"line":274},[312,156979,156980],{"class":324},"is_finished ",[312,156982,336],{"class":1436},[312,156984,127574],{"class":488},[24,156986,156987],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156989,52527],{"id":52526},[24,156991,106135,156992,156995],{},[119,156993,156994],{},"type()"," 查看数据类型：",[303,156997,156999],{"className":32174,"code":156998,"language":32176,"meta":308,"style":308},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[119,157000,157001,157015,157029,157043,157057],{"__ignoreMap":308},[312,157002,157003,157005,157007,157009,157011,157013],{"class":314,"line":315},[312,157004,32211],{"class":488},[312,157006,1576],{"class":324},[312,157008,104876],{"class":488},[312,157010,1576],{"class":324},[312,157012,2256],{"class":488},[312,157014,32293],{"class":324},[312,157016,157017,157019,157021,157023,157025,157027],{"class":314,"line":171},[312,157018,32211],{"class":488},[312,157020,1576],{"class":324},[312,157022,104876],{"class":488},[312,157024,1576],{"class":324},[312,157026,2000],{"class":488},[312,157028,32293],{"class":324},[312,157030,157031,157033,157035,157037,157039,157041],{"class":314,"line":274},[312,157032,32211],{"class":488},[312,157034,1576],{"class":324},[312,157036,104876],{"class":488},[312,157038,1576],{"class":324},[312,157040,7648],{"class":339},[312,157042,32293],{"class":324},[312,157044,157045,157047,157049,157051,157053,157055],{"class":314,"line":298},[312,157046,32211],{"class":488},[312,157048,1576],{"class":324},[312,157050,104876],{"class":488},[312,157052,1576],{"class":324},[312,157054,33271],{"class":488},[312,157056,32293],{"class":324},[312,157058,157059,157061,157063,157065,157067,157069],{"class":314,"line":974},[312,157060,32211],{"class":488},[312,157062,1576],{"class":324},[312,157064,104876],{"class":488},[312,157066,1576],{"class":324},[312,157068,97456],{"class":488},[312,157070,32293],{"class":324},[24,157072,157073],{},"输出类似：",[303,157075,157078],{"className":157076,"code":157077,"language":6992,"meta":308},[6990],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[119,157079,157077],{"__ignoreMap":308},[24,157081,10828,157082,109052,157084,157086,157087,157089,157090,394,157092,157089,157094,157096],{},[119,157083,3162],{},[119,157085,1956],{}," 的子类，",[119,157088,33271],{}," 可以当作 ",[119,157091,1433],{},[119,157093,35782],{},[119,157095,858],{},"，但业务代码中不要滥用。",[303,157098,157100],{"className":32174,"code":157099,"language":32176,"meta":308,"style":308},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[119,157101,157102,157120],{"__ignoreMap":308},[312,157103,157104,157106,157108,157110,157112,157114,157117],{"class":314,"line":315},[312,157105,32211],{"class":488},[312,157107,1576],{"class":324},[312,157109,33271],{"class":488},[312,157111,47361],{"class":1436},[312,157113,26914],{"class":488},[312,157115,157116],{"class":324},")   ",[312,157118,157119],{"class":318},"# 2\n",[312,157121,157122,157124,157126,157128,157130,157132,157134],{"class":314,"line":171},[312,157123,32211],{"class":488},[312,157125,1576],{"class":324},[312,157127,35782],{"class":488},[312,157129,47361],{"class":1436},[312,157131,26914],{"class":488},[312,157133,47603],{"class":324},[312,157135,157136],{"class":318},"# 1\n",[14,157138,157140],{"id":157139},"_26-类型转换","2.6 类型转换",[24,157142,157143],{},"常用转换函数：",[303,157145,157147],{"className":32174,"code":157146,"language":32176,"meta":308,"style":308},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[119,157148,157149,157159,157170,157180],{"__ignoreMap":308},[312,157150,157151,157153,157155,157157],{"class":314,"line":315},[312,157152,1956],{"class":488},[312,157154,1576],{"class":324},[312,157156,56100],{"class":339},[312,157158,1959],{"class":324},[312,157160,157161,157163,157165,157168],{"class":314,"line":171},[312,157162,1992],{"class":488},[312,157164,1576],{"class":324},[312,157166,157167],{"class":339},"\"3.14\"",[312,157169,1959],{"class":324},[312,157171,157172,157174,157176,157178],{"class":314,"line":274},[312,157173,3110],{"class":488},[312,157175,1576],{"class":324},[312,157177,2256],{"class":488},[312,157179,1959],{"class":324},[312,157181,157182,157184,157186,157188],{"class":314,"line":298},[312,157183,3162],{"class":488},[312,157185,1576],{"class":324},[312,157187,1433],{"class":488},[312,157189,1959],{"class":324},[24,157191,16936],{},[303,157193,157195],{"className":32174,"code":157194,"language":32176,"meta":308,"style":308},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[119,157196,157197,157206,157217],{"__ignoreMap":308},[312,157198,157199,157201,157203],{"class":314,"line":315},[312,157200,148001],{"class":324},[312,157202,336],{"class":1436},[312,157204,157205],{"class":339}," \"18\"\n",[312,157207,157208,157210,157212,157214],{"class":314,"line":171},[312,157209,148001],{"class":324},[312,157211,336],{"class":1436},[312,157213,4187],{"class":488},[312,157215,157216],{"class":324},"(age)\n",[312,157218,157219,157221,157224,157226,157228],{"class":314,"line":274},[312,157220,32211],{"class":488},[312,157222,157223],{"class":324},"(age ",[312,157225,2426],{"class":1436},[312,157227,26914],{"class":488},[312,157229,1959],{"class":324},[24,157231,157232],{},"输入得到的内容永远是字符串：",[303,157234,157236],{"className":32174,"code":157235,"language":32176,"meta":308,"style":308},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[119,157237,157238,157254],{"__ignoreMap":308},[312,157239,157240,157243,157245,157247,157249,157252],{"class":314,"line":315},[312,157241,157242],{"class":324},"num ",[312,157244,336],{"class":1436},[312,157246,62387],{"class":488},[312,157248,1576],{"class":324},[312,157250,157251],{"class":339},"\"请输入数字:\"",[312,157253,1959],{"class":324},[312,157255,157256,157258,157260,157262,157265],{"class":314,"line":171},[312,157257,32211],{"class":488},[312,157259,1576],{"class":324},[312,157261,104876],{"class":488},[312,157263,157264],{"class":324},"(num))  ",[312,157266,157267],{"class":318},"# str\n",[24,157269,157270],{},"如果要做数学运算，必须转换：",[303,157272,157274],{"className":32174,"code":157273,"language":32176,"meta":308,"style":308},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[119,157275,157276,157294],{"__ignoreMap":308},[312,157277,157278,157280,157282,157284,157286,157288,157290,157292],{"class":314,"line":315},[312,157279,157242],{"class":324},[312,157281,336],{"class":1436},[312,157283,4187],{"class":488},[312,157285,1576],{"class":324},[312,157287,55605],{"class":488},[312,157289,1576],{"class":324},[312,157291,157251],{"class":339},[312,157293,32293],{"class":324},[312,157295,157296,157298,157300,157302,157304],{"class":314,"line":171},[312,157297,32211],{"class":488},[312,157299,47414],{"class":324},[312,157301,2426],{"class":1436},[312,157303,3843],{"class":488},[312,157305,1959],{"class":324},[24,157307,157308],{},"常见错误：",[303,157310,157312],{"className":32174,"code":157311,"language":32176,"meta":308,"style":308},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[119,157313,157314,157327],{"__ignoreMap":308},[312,157315,157316,157318,157320,157322,157324],{"class":314,"line":315},[312,157317,1956],{"class":488},[312,157319,1576],{"class":324},[312,157321,157167],{"class":339},[312,157323,157116],{"class":324},[312,157325,157326],{"class":318},"# 错误\n",[312,157328,157329,157331,157333,157336,157339],{"class":314,"line":171},[312,157330,1956],{"class":488},[312,157332,1576],{"class":324},[312,157334,157335],{"class":339},"\"abc\"",[312,157337,157338],{"class":324},")    ",[312,157340,157326],{"class":318},[24,157342,157343],{},"正确写法：",[303,157345,157347],{"className":32174,"code":157346,"language":32176,"meta":308,"style":308},"num = float(\"3.14\")\n",[119,157348,157349],{"__ignoreMap":308},[312,157350,157351,157353,157355,157357,157359,157361],{"class":314,"line":315},[312,157352,157242],{"class":324},[312,157354,336],{"class":1436},[312,157356,111566],{"class":488},[312,157358,1576],{"class":324},[312,157360,157167],{"class":339},[312,157362,1959],{"class":324},[14,157364,157366],{"id":157365},"_27-运算符","2.7 运算符",[69,157368,157370],{"id":157369},"_271-算术运算符","2.7.1 算术运算符",[2086,157372,157373,157384],{},[2089,157374,157375],{},[2092,157376,157377,157380,157382],{},[2095,157378,157379],{},"运算符",[2095,157381,27665],{},[2095,157383,29288],{},[2132,157385,157386,157400,157414,157428,157442,157456,157470],{},[2092,157387,157388,157392,157395],{},[2137,157389,157390],{},[119,157391,2426],{},[2137,157393,157394],{},"加法",[2137,157396,157397],{},[119,157398,157399],{},"1 + 2",[2092,157401,157402,157406,157409],{},[2137,157403,157404],{},[119,157405,2477],{},[2137,157407,157408],{},"减法",[2137,157410,157411],{},[119,157412,157413],{},"5 - 3",[2092,157415,157416,157420,157423],{},[2137,157417,157418],{},[119,157419,2400],{},[2137,157421,157422],{},"乘法",[2137,157424,157425],{},[119,157426,157427],{},"2 * 3",[2092,157429,157430,157434,157437],{},[2137,157431,157432],{},[119,157433,2529],{},[2137,157435,157436],{},"除法，结果是浮点数",[2137,157438,157439],{},[119,157440,157441],{},"5 \u002F 2",[2092,157443,157444,157448,157451],{},[2137,157445,157446],{},[119,157447,35124],{},[2137,157449,157450],{},"整除",[2137,157452,157453],{},[119,157454,157455],{},"5 \u002F\u002F 2",[2092,157457,157458,157462,157465],{},[2137,157459,157460],{},[119,157461,2273],{},[2137,157463,157464],{},"取余",[2137,157466,157467],{},[119,157468,157469],{},"5 % 2",[2092,157471,157472,157476,157479],{},[2137,157473,157474],{},[119,157475,12464],{},[2137,157477,157478],{},"幂运算",[2137,157480,157481],{},[119,157482,157483],{},"2 ** 3",[24,157485,16936],{},[303,157487,157489],{"className":32174,"code":157488,"language":32176,"meta":308,"style":308},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[119,157490,157491,157509,157526,157543],{"__ignoreMap":308},[312,157492,157493,157495,157497,157499,157502,157504,157506],{"class":314,"line":315},[312,157494,32211],{"class":488},[312,157496,1576],{"class":324},[312,157498,2264],{"class":488},[312,157500,157501],{"class":1436}," \u002F",[312,157503,16556],{"class":488},[312,157505,157116],{"class":324},[312,157507,157508],{"class":318},"# 2.5\n",[312,157510,157511,157513,157515,157517,157520,157522,157524],{"class":314,"line":171},[312,157512,32211],{"class":488},[312,157514,1576],{"class":324},[312,157516,2264],{"class":488},[312,157518,157519],{"class":1436}," \u002F\u002F",[312,157521,16556],{"class":488},[312,157523,47603],{"class":324},[312,157525,157119],{"class":318},[312,157527,157528,157530,157532,157534,157537,157539,157541],{"class":314,"line":274},[312,157529,32211],{"class":488},[312,157531,1576],{"class":324},[312,157533,2264],{"class":488},[312,157535,157536],{"class":1436}," %",[312,157538,16556],{"class":488},[312,157540,157116],{"class":324},[312,157542,157136],{"class":318},[312,157544,157545,157547,157549,157551,157554,157556,157558],{"class":314,"line":298},[312,157546,32211],{"class":488},[312,157548,1576],{"class":324},[312,157550,2027],{"class":488},[312,157552,157553],{"class":1436}," **",[312,157555,79842],{"class":488},[312,157557,47603],{"class":324},[312,157559,157560],{"class":318},"# 8\n",[69,157562,157564],{"id":157563},"_272-赋值运算符","2.7.2 赋值运算符",[303,157566,157568],{"className":32174,"code":157567,"language":32176,"meta":308,"style":308},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[119,157569,157570,157578,157586,157594,157602],{"__ignoreMap":308},[312,157571,157572,157574,157576],{"class":314,"line":315},[312,157573,157242],{"class":324},[312,157575,336],{"class":1436},[312,157577,60210],{"class":488},[312,157579,157580,157582,157584],{"class":314,"line":171},[312,157581,157242],{"class":324},[312,157583,11280],{"class":1436},[312,157585,56211],{"class":488},[312,157587,157588,157590,157592],{"class":314,"line":274},[312,157589,157242],{"class":324},[312,157591,151707],{"class":1436},[312,157593,49518],{"class":488},[312,157595,157596,157598,157600],{"class":314,"line":298},[312,157597,157242],{"class":324},[312,157599,138870],{"class":1436},[312,157601,121805],{"class":488},[312,157603,157604,157606,157609],{"class":314,"line":974},[312,157605,157242],{"class":324},[312,157607,157608],{"class":1436},"\u002F=",[312,157610,49518],{"class":488},[24,157612,157613],{},"等价关系：",[303,157615,157617],{"className":32174,"code":157616,"language":32176,"meta":308,"style":308},"num += 1\nnum = num + 1\n",[119,157618,157619,157627],{"__ignoreMap":308},[312,157620,157621,157623,157625],{"class":314,"line":315},[312,157622,157242],{"class":324},[312,157624,11280],{"class":1436},[312,157626,57481],{"class":488},[312,157628,157629,157631,157633,157636,157638],{"class":314,"line":171},[312,157630,157242],{"class":324},[312,157632,336],{"class":1436},[312,157634,157635],{"class":324}," num ",[312,157637,2426],{"class":1436},[312,157639,57481],{"class":488},[24,157641,157642,157643,1167,157646,30181],{},"Python 没有 ",[119,157644,157645],{},"num++",[119,157647,157648],{},"num--",[69,157650,157652],{"id":157651},"_273-比较运算符","2.7.3 比较运算符",[24,157654,157655],{},"比较运算结果是布尔值。",[303,157657,157659],{"className":32174,"code":157658,"language":32176,"meta":308,"style":308},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[119,157660,157661,157675,157690,157704],{"__ignoreMap":308},[312,157662,157663,157665,157667,157669,157671,157673],{"class":314,"line":315},[312,157664,32211],{"class":488},[312,157666,1576],{"class":324},[312,157668,2391],{"class":488},[312,157670,28018],{"class":1436},[312,157672,3953],{"class":488},[312,157674,1959],{"class":324},[312,157676,157677,157679,157681,157683,157686,157688],{"class":314,"line":171},[312,157678,32211],{"class":488},[312,157680,1576],{"class":324},[312,157682,2391],{"class":488},[312,157684,157685],{"class":1436}," >=",[312,157687,3843],{"class":488},[312,157689,1959],{"class":324},[312,157691,157692,157694,157696,157698,157700,157702],{"class":314,"line":274},[312,157693,32211],{"class":488},[312,157695,1576],{"class":324},[312,157697,2391],{"class":488},[312,157699,103328],{"class":1436},[312,157701,3888],{"class":488},[312,157703,1959],{"class":324},[312,157705,157706,157708,157710,157712,157715,157717],{"class":314,"line":298},[312,157707,32211],{"class":488},[312,157709,1576],{"class":324},[312,157711,2391],{"class":488},[312,157713,157714],{"class":1436}," !=",[312,157716,3888],{"class":488},[312,157718,1959],{"class":324},[24,157720,157721,157722,157724,157725,30181],{},"注意：判断相等用 ",[119,157723,4754],{},"，赋值用 ",[119,157726,336],{},[303,157728,157730],{"className":32174,"code":157729,"language":32176,"meta":308,"style":308},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[119,157731,157732,157744],{"__ignoreMap":308},[312,157733,157734,157736,157738,157741],{"class":314,"line":315},[312,157735,148001],{"class":324},[312,157737,336],{"class":1436},[312,157739,157740],{"class":488}," 18",[312,157742,157743],{"class":318},"       # 赋值\n",[312,157745,157746,157748,157750,157752],{"class":314,"line":171},[312,157747,148001],{"class":324},[312,157749,4754],{"class":1436},[312,157751,157740],{"class":488},[312,157753,157754],{"class":318},"      # 判断是否相等\n",[69,157756,157758],{"id":157757},"_274-逻辑运算符","2.7.4 逻辑运算符",[2086,157760,157761,157769],{},[2089,157762,157763],{},[2092,157764,157765,157767],{},[2095,157766,157379],{},[2095,157768,27665],{},[2132,157770,157771,157780,157789],{},[2092,157772,157773,157777],{},[2137,157774,157775],{},[119,157776,32258],{},[2137,157778,157779],{},"并且",[2092,157781,157782,157786],{},[2137,157783,157784],{},[119,157785,116859],{},[2137,157787,157788],{},"或者",[2092,157790,157791,157796],{},[2137,157792,157793],{},[119,157794,157795],{},"not",[2137,157797,157798],{},"取反",[303,157800,157802],{"className":32174,"code":157801,"language":32176,"meta":308,"style":308},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[119,157803,157804,157812,157821,157825,157840,157854],{"__ignoreMap":308},[312,157805,157806,157808,157810],{"class":314,"line":315},[312,157807,148001],{"class":324},[312,157809,336],{"class":1436},[312,157811,89835],{"class":488},[312,157813,157814,157817,157819],{"class":314,"line":171},[312,157815,157816],{"class":324},"has_ticket ",[312,157818,336],{"class":1436},[312,157820,155054],{"class":488},[312,157822,157823],{"class":314,"line":274},[312,157824,4205],{"emptyLinePlaceholder":1881},[312,157826,157827,157829,157831,157833,157835,157837],{"class":314,"line":298},[312,157828,32211],{"class":488},[312,157830,157223],{"class":324},[312,157832,3516],{"class":1436},[312,157834,157740],{"class":488},[312,157836,122197],{"class":1436},[312,157838,157839],{"class":324}," has_ticket)\n",[312,157841,157842,157844,157846,157848,157850,157852],{"class":314,"line":974},[312,157843,32211],{"class":488},[312,157845,157223],{"class":324},[312,157847,325],{"class":1436},[312,157849,157740],{"class":488},[312,157851,115970],{"class":1436},[312,157853,157839],{"class":324},[312,157855,157856,157858,157860,157862],{"class":314,"line":980},[312,157857,32211],{"class":488},[312,157859,1576],{"class":324},[312,157861,157795],{"class":1436},[312,157863,157839],{"class":324},[14,157865,157867],{"id":157866},"_28-字符串定义","2.8 字符串定义",[24,157869,157870],{},"三种常见写法：",[303,157872,157874],{"className":32174,"code":157873,"language":32176,"meta":308,"style":308},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[119,157875,157876,157886,157895,157905],{"__ignoreMap":308},[312,157877,157878,157881,157883],{"class":314,"line":315},[312,157879,157880],{"class":324},"name1 ",[312,157882,336],{"class":1436},[312,157884,157885],{"class":339}," '小明'\n",[312,157887,157888,157891,157893],{"class":314,"line":171},[312,157889,157890],{"class":324},"name2 ",[312,157892,336],{"class":1436},[312,157894,150808],{"class":339},[312,157896,157897,157900,157902],{"class":314,"line":274},[312,157898,157899],{"class":324},"text ",[312,157901,336],{"class":1436},[312,157903,157904],{"class":339}," \"\"\"这是多行字符串\n",[312,157906,157907],{"class":314,"line":298},[312,157908,157909],{"class":339},"可以换行\"\"\"\n",[24,157911,157912],{},"字符串中包含引号：",[303,157914,157916],{"className":32174,"code":157915,"language":32176,"meta":308,"style":308},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[119,157917,157918,157928,157938],{"__ignoreMap":308},[312,157919,157920,157923,157925],{"class":314,"line":315},[312,157921,157922],{"class":324},"msg ",[312,157924,336],{"class":1436},[312,157926,157927],{"class":339}," \"他说:'你好'\"\n",[312,157929,157930,157933,157935],{"class":314,"line":171},[312,157931,157932],{"class":324},"msg2 ",[312,157934,336],{"class":1436},[312,157936,157937],{"class":339}," '他说:\"你好\"'\n",[312,157939,157940,157943,157945,157948,157951,157954,157956],{"class":314,"line":274},[312,157941,157942],{"class":324},"msg3 ",[312,157944,336],{"class":1436},[312,157946,157947],{"class":339}," \"他说:",[312,157949,157950],{"class":488},"\\\"",[312,157952,157953],{"class":339},"你好",[312,157955,157950],{"class":488},[312,157957,26929],{"class":339},[24,157959,157960],{},"常见转义字符：",[2086,157962,157963,157972],{},[2089,157964,157965],{},[2092,157966,157967,157970],{},[2095,157968,157969],{},"写法",[2095,157971,102470],{},[2132,157973,157974,157984,157993,158003,158012],{},[2092,157975,157976,157981],{},[2137,157977,157978],{},[119,157979,157980],{},"\\n",[2137,157982,157983],{},"换行",[2092,157985,157986,157990],{},[2137,157987,157988],{},[119,157989,3042],{},[2137,157991,157992],{},"制表符",[2092,157994,157995,158000],{},[2137,157996,157997],{},[119,157998,157999],{},"\\\\",[2137,158001,158002],{},"反斜杠",[2092,158004,158005,158009],{},[2137,158006,158007],{},[119,158008,157950],{},[2137,158010,158011],{},"双引号",[2092,158013,158014,158019],{},[2137,158015,158016],{},[119,158017,158018],{},"\\'",[2137,158020,158021],{},"单引号",[14,158023,158025],{"id":158024},"_29-字符串拼接","2.9 字符串拼接",[303,158027,158029],{"className":32174,"code":158028,"language":32176,"meta":308,"style":308},"name = \"小明\"\nprint(\"你好，\" + name)\n",[119,158030,158031,158039],{"__ignoreMap":308},[312,158032,158033,158035,158037],{"class":314,"line":315},[312,158034,147991],{"class":324},[312,158036,336],{"class":1436},[312,158038,150808],{"class":339},[312,158040,158041,158043,158045,158048,158050],{"class":314,"line":171},[312,158042,32211],{"class":488},[312,158044,1576],{"class":324},[312,158046,158047],{"class":339},"\"你好，\"",[312,158049,47361],{"class":1436},[312,158051,158052],{"class":324}," name)\n",[24,158054,158055],{},"字符串只能和字符串拼接：",[303,158057,158059],{"className":32174,"code":158058,"language":32176,"meta":308,"style":308},"age = 18\nprint(\"年龄:\" + str(age))\n",[119,158060,158061,158069],{"__ignoreMap":308},[312,158062,158063,158065,158067],{"class":314,"line":315},[312,158064,148001],{"class":324},[312,158066,336],{"class":1436},[312,158068,148006],{"class":488},[312,158070,158071,158073,158075,158077,158079,158081],{"class":314,"line":171},[312,158072,32211],{"class":488},[312,158074,1576],{"class":324},[312,158076,147972],{"class":339},[312,158078,47361],{"class":1436},[312,158080,75691],{"class":488},[312,158082,158083],{"class":324},"(age))\n",[24,158085,158086],{},"更推荐使用格式化字符串。",[14,158088,158090],{"id":158089},"_210-字符串格式化","2.10 字符串格式化",[69,158092,158094],{"id":158093},"_2101-百分号格式化","2.10.1 百分号格式化",[303,158096,158098],{"className":32174,"code":158097,"language":32176,"meta":308,"style":308},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[119,158099,158100,158108,158116,158125,158129],{"__ignoreMap":308},[312,158101,158102,158104,158106],{"class":314,"line":315},[312,158103,147991],{"class":324},[312,158105,336],{"class":1436},[312,158107,150808],{"class":339},[312,158109,158110,158112,158114],{"class":314,"line":171},[312,158111,148001],{"class":324},[312,158113,336],{"class":1436},[312,158115,148006],{"class":488},[312,158117,158118,158120,158122],{"class":314,"line":274},[312,158119,156813],{"class":324},[312,158121,336],{"class":1436},[312,158123,158124],{"class":488}," 95.5\n",[312,158126,158127],{"class":314,"line":298},[312,158128,4205],{"emptyLinePlaceholder":1881},[312,158130,158131,158133,158135,158138,158141,158144,158147,158150,158153,158155,158157],{"class":314,"line":974},[312,158132,32211],{"class":488},[312,158134,1576],{"class":324},[312,158136,158137],{"class":339},"\"姓名:",[312,158139,158140],{"class":488},"%s",[312,158142,158143],{"class":339}," 年龄:",[312,158145,158146],{"class":488},"%d",[312,158148,158149],{"class":339}," 分数:",[312,158151,158152],{"class":488},"%.1f",[312,158154,2196],{"class":339},[312,158156,157536],{"class":1436},[312,158158,158159],{"class":324}," (name, age, score))\n",[24,158161,158162],{},"常用占位符：",[2086,158164,158165,158174],{},[2089,158166,158167],{},[2092,158168,158169,158172],{},[2095,158170,158171],{},"占位符",[2095,158173,27665],{},[2132,158175,158176,158184,158192],{},[2092,158177,158178,158182],{},[2137,158179,158180],{},[119,158181,158140],{},[2137,158183,156679],{},[2092,158185,158186,158190],{},[2137,158187,158188],{},[119,158189,158146],{},[2137,158191,156657],{},[2092,158193,158194,158199],{},[2137,158195,158196],{},[119,158197,158198],{},"%f",[2137,158200,156668],{},[24,158202,158203],{},"精度控制：",[303,158205,158207],{"className":32174,"code":158206,"language":32176,"meta":308,"style":308},"price = 12.3456\nprint(\"%.2f\" % price)\n",[119,158208,158209,158218],{"__ignoreMap":308},[312,158210,158211,158213,158215],{"class":314,"line":315},[312,158212,148136],{"class":324},[312,158214,336],{"class":1436},[312,158216,158217],{"class":488}," 12.3456\n",[312,158219,158220,158222,158224,158226,158229,158231,158233],{"class":314,"line":171},[312,158221,32211],{"class":488},[312,158223,1576],{"class":324},[312,158225,2196],{"class":339},[312,158227,158228],{"class":488},"%.2f",[312,158230,2196],{"class":339},[312,158232,157536],{"class":1436},[312,158234,158235],{"class":324}," price)\n",[69,158237,158239],{"id":158238},"_2102-format方法","2.10.2 format方法",[303,158241,158243],{"className":32174,"code":158242,"language":32176,"meta":308,"style":308},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[119,158244,158245,158253,158261,158265,158284,158304],{"__ignoreMap":308},[312,158246,158247,158249,158251],{"class":314,"line":315},[312,158248,147991],{"class":324},[312,158250,336],{"class":1436},[312,158252,150808],{"class":339},[312,158254,158255,158257,158259],{"class":314,"line":171},[312,158256,148001],{"class":324},[312,158258,336],{"class":1436},[312,158260,148006],{"class":488},[312,158262,158263],{"class":314,"line":274},[312,158264,4205],{"emptyLinePlaceholder":1881},[312,158266,158267,158269,158271,158273,158275,158277,158279,158281],{"class":314,"line":298},[312,158268,32211],{"class":488},[312,158270,1576],{"class":324},[312,158272,158137],{"class":339},[312,158274,34254],{"class":488},[312,158276,158143],{"class":339},[312,158278,34254],{"class":488},[312,158280,2196],{"class":339},[312,158282,158283],{"class":324},".format(name, age))\n",[312,158285,158286,158288,158290,158292,158295,158297,158300,158302],{"class":314,"line":974},[312,158287,32211],{"class":488},[312,158289,1576],{"class":324},[312,158291,158137],{"class":339},[312,158293,158294],{"class":488},"{0}",[312,158296,158143],{"class":339},[312,158298,158299],{"class":488},"{1}",[312,158301,2196],{"class":339},[312,158303,158283],{"class":324},[312,158305,158306,158308,158310,158312,158315,158317,158320,158322,158325,158327,158329,158332,158334,158336],{"class":314,"line":980},[312,158307,32211],{"class":488},[312,158309,1576],{"class":324},[312,158311,158137],{"class":339},[312,158313,158314],{"class":488},"{name}",[312,158316,158143],{"class":339},[312,158318,158319],{"class":488},"{age}",[312,158321,2196],{"class":339},[312,158323,158324],{"class":324},".format(",[312,158326,81581],{"class":1579},[312,158328,336],{"class":1436},[312,158330,158331],{"class":324},"name, ",[312,158333,71998],{"class":1579},[312,158335,336],{"class":1436},[312,158337,158338],{"class":324},"age))\n",[69,158340,158342],{"id":158341},"_2103-f-string","2.10.3 f-string",[24,158344,158345],{},"推荐写法：",[303,158347,158349],{"className":32174,"code":158348,"language":32176,"meta":308,"style":308},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[119,158350,158351,158359,158367,158375,158379],{"__ignoreMap":308},[312,158352,158353,158355,158357],{"class":314,"line":315},[312,158354,147991],{"class":324},[312,158356,336],{"class":1436},[312,158358,150808],{"class":339},[312,158360,158361,158363,158365],{"class":314,"line":171},[312,158362,148001],{"class":324},[312,158364,336],{"class":1436},[312,158366,148006],{"class":488},[312,158368,158369,158371,158373],{"class":314,"line":274},[312,158370,156813],{"class":324},[312,158372,336],{"class":1436},[312,158374,158124],{"class":488},[312,158376,158377],{"class":314,"line":298},[312,158378,4205],{"emptyLinePlaceholder":1881},[312,158380,158381,158383,158385,158387,158389,158391,158393,158395,158397,158399,158401,158403,158405,158407,158410,158413,158415,158417],{"class":314,"line":974},[312,158382,32211],{"class":488},[312,158384,1576],{"class":324},[312,158386,2003],{"class":1436},[312,158388,158137],{"class":339},[312,158390,2840],{"class":488},[312,158392,81581],{"class":324},[312,158394,2888],{"class":488},[312,158396,158143],{"class":339},[312,158398,2840],{"class":488},[312,158400,71998],{"class":324},[312,158402,2888],{"class":488},[312,158404,158149],{"class":339},[312,158406,2840],{"class":488},[312,158408,158409],{"class":324},"score",[312,158411,158412],{"class":1436},":.1f",[312,158414,2888],{"class":488},[312,158416,2196],{"class":339},[312,158418,1959],{"class":324},[24,158420,158421],{},"表达式也可以放进去：",[303,158423,158425],{"className":32174,"code":158424,"language":32176,"meta":308,"style":308},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[119,158426,158427,158435,158443],{"__ignoreMap":308},[312,158428,158429,158431,158433],{"class":314,"line":315},[312,158430,148136],{"class":324},[312,158432,336],{"class":1436},[312,158434,148141],{"class":488},[312,158436,158437,158439,158441],{"class":314,"line":171},[312,158438,148146],{"class":324},[312,158440,336],{"class":1436},[312,158442,56211],{"class":488},[312,158444,158445,158447,158449,158451,158454,158456,158458,158460,158463,158465,158468],{"class":314,"line":274},[312,158446,32211],{"class":488},[312,158448,1576],{"class":324},[312,158450,2003],{"class":1436},[312,158452,158453],{"class":339},"\"总价:",[312,158455,2840],{"class":488},[312,158457,148136],{"class":324},[312,158459,2400],{"class":1436},[312,158461,158462],{"class":324}," count",[312,158464,2888],{"class":488},[312,158466,158467],{"class":339},"元\"",[312,158469,1959],{"class":324},[14,158471,158473],{"id":158472},"_211-input输入","2.11 input输入",[24,158475,158476,158479],{},[119,158477,158478],{},"input()"," 会暂停程序，等待用户输入。",[303,158481,158483],{"className":32174,"code":158482,"language":32176,"meta":308,"style":308},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[119,158484,158485,158499],{"__ignoreMap":308},[312,158486,158487,158489,158491,158493,158495,158497],{"class":314,"line":315},[312,158488,147991],{"class":324},[312,158490,336],{"class":1436},[312,158492,62387],{"class":488},[312,158494,1576],{"class":324},[312,158496,153834],{"class":339},[312,158498,1959],{"class":324},[312,158500,158501,158503,158505,158507,158510,158512,158514,158516,158518],{"class":314,"line":171},[312,158502,32211],{"class":488},[312,158504,1576],{"class":324},[312,158506,2003],{"class":1436},[312,158508,158509],{"class":339},"\"你好，",[312,158511,2840],{"class":488},[312,158513,81581],{"class":324},[312,158515,2888],{"class":488},[312,158517,2196],{"class":339},[312,158519,1959],{"class":324},[24,158521,158522],{},"输入整数：",[303,158524,158526],{"className":32174,"code":158525,"language":32176,"meta":308,"style":308},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[119,158527,158528,158546],{"__ignoreMap":308},[312,158529,158530,158532,158534,158536,158538,158540,158542,158544],{"class":314,"line":315},[312,158531,148001],{"class":324},[312,158533,336],{"class":1436},[312,158535,4187],{"class":488},[312,158537,1576],{"class":324},[312,158539,55605],{"class":488},[312,158541,1576],{"class":324},[312,158543,153849],{"class":339},[312,158545,32293],{"class":324},[312,158547,158548,158550,158552,158554,158557,158559,158561,158563,158566,158568],{"class":314,"line":171},[312,158549,32211],{"class":488},[312,158551,1576],{"class":324},[312,158553,2003],{"class":1436},[312,158555,158556],{"class":339},"\"明年你",[312,158558,2840],{"class":488},[312,158560,148001],{"class":324},[312,158562,2426],{"class":1436},[312,158564,158565],{"class":488}," 1}",[312,158567,150859],{"class":339},[312,158569,1959],{"class":324},[24,158571,158572],{},"输入小数：",[303,158574,158576],{"className":32174,"code":158575,"language":32176,"meta":308,"style":308},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[119,158577,158578,158597],{"__ignoreMap":308},[312,158579,158580,158582,158584,158586,158588,158590,158592,158595],{"class":314,"line":315},[312,158581,156786],{"class":324},[312,158583,336],{"class":1436},[312,158585,111566],{"class":488},[312,158587,1576],{"class":324},[312,158589,55605],{"class":488},[312,158591,1576],{"class":324},[312,158593,158594],{"class":339},"\"请输入身高:\"",[312,158596,32293],{"class":324},[312,158598,158599,158601,158603,158605,158608,158610,158612,158615,158617,158620],{"class":314,"line":171},[312,158600,32211],{"class":488},[312,158602,1576],{"class":324},[312,158604,2003],{"class":1436},[312,158606,158607],{"class":339},"\"身高:",[312,158609,2840],{"class":488},[312,158611,26777],{"class":324},[312,158613,158614],{"class":1436},":.2f",[312,158616,2888],{"class":488},[312,158618,158619],{"class":339},"米\"",[312,158621,1959],{"class":324},[14,158623,158625],{"id":158624},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[24,158627,125060],{},[140,158629,158630,158633,158636,158639],{},[143,158631,158632],{},"输入商品单价。",[143,158634,158635],{},"输入购买数量。",[143,158637,158638],{},"输入折扣，例如 0.8 表示八折。",[143,158640,158641],{},"输出最终金额，保留两位小数。",[24,158643,11838],{},[303,158645,158647],{"className":32174,"code":158646,"language":32176,"meta":308,"style":308},"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",[119,158648,158649,158668,158687,158707,158711,158731,158735,158758,158779,158801],{"__ignoreMap":308},[312,158650,158651,158653,158655,158657,158659,158661,158663,158666],{"class":314,"line":315},[312,158652,148136],{"class":324},[312,158654,336],{"class":1436},[312,158656,111566],{"class":488},[312,158658,1576],{"class":324},[312,158660,55605],{"class":488},[312,158662,1576],{"class":324},[312,158664,158665],{"class":339},"\"请输入商品单价:\"",[312,158667,32293],{"class":324},[312,158669,158670,158672,158674,158676,158678,158680,158682,158685],{"class":314,"line":171},[312,158671,148146],{"class":324},[312,158673,336],{"class":1436},[312,158675,4187],{"class":488},[312,158677,1576],{"class":324},[312,158679,55605],{"class":488},[312,158681,1576],{"class":324},[312,158683,158684],{"class":339},"\"请输入购买数量:\"",[312,158686,32293],{"class":324},[312,158688,158689,158692,158694,158696,158698,158700,158702,158705],{"class":314,"line":274},[312,158690,158691],{"class":324},"discount ",[312,158693,336],{"class":1436},[312,158695,111566],{"class":488},[312,158697,1576],{"class":324},[312,158699,55605],{"class":488},[312,158701,1576],{"class":324},[312,158703,158704],{"class":339},"\"请输入折扣:\"",[312,158706,32293],{"class":324},[312,158708,158709],{"class":314,"line":298},[312,158710,4205],{"emptyLinePlaceholder":1881},[312,158712,158713,158716,158718,158721,158723,158726,158728],{"class":314,"line":974},[312,158714,158715],{"class":324},"total ",[312,158717,336],{"class":1436},[312,158719,158720],{"class":324}," price ",[312,158722,2400],{"class":1436},[312,158724,158725],{"class":324}," count ",[312,158727,2400],{"class":1436},[312,158729,158730],{"class":324}," discount\n",[312,158732,158733],{"class":314,"line":980},[312,158734,4205],{"emptyLinePlaceholder":1881},[312,158736,158737,158739,158741,158743,158746,158748,158750,158752,158754,158756],{"class":314,"line":997},[312,158738,32211],{"class":488},[312,158740,1576],{"class":324},[312,158742,2003],{"class":1436},[312,158744,158745],{"class":339},"\"商品单价:",[312,158747,2840],{"class":488},[312,158749,81586],{"class":324},[312,158751,158614],{"class":1436},[312,158753,2888],{"class":488},[312,158755,2196],{"class":339},[312,158757,1959],{"class":324},[312,158759,158760,158762,158764,158766,158769,158771,158773,158775,158777],{"class":314,"line":1003},[312,158761,32211],{"class":488},[312,158763,1576],{"class":324},[312,158765,2003],{"class":1436},[312,158767,158768],{"class":339},"\"购买数量:",[312,158770,2840],{"class":488},[312,158772,86205],{"class":324},[312,158774,2888],{"class":488},[312,158776,2196],{"class":339},[312,158778,1959],{"class":324},[312,158780,158781,158783,158785,158787,158790,158792,158795,158797,158799],{"class":314,"line":1020},[312,158782,32211],{"class":488},[312,158784,1576],{"class":324},[312,158786,2003],{"class":1436},[312,158788,158789],{"class":339},"\"折扣:",[312,158791,2840],{"class":488},[312,158793,158794],{"class":324},"discount",[312,158796,2888],{"class":488},[312,158798,2196],{"class":339},[312,158800,1959],{"class":324},[312,158802,158803,158805,158807,158809,158812,158814,158817,158819,158821,158823],{"class":314,"line":1026},[312,158804,32211],{"class":488},[312,158806,1576],{"class":324},[312,158808,2003],{"class":1436},[312,158810,158811],{"class":339},"\"应付金额:",[312,158813,2840],{"class":488},[312,158815,158816],{"class":324},"total",[312,158818,158614],{"class":1436},[312,158820,2888],{"class":488},[312,158822,158467],{"class":339},[312,158824,1959],{"class":324},[14,158826,158828],{"id":158827},"_213-易错点","2.13 易错点",[140,158830,158831,158836,158842,158850,158853],{},[143,158832,158833,158835],{},[119,158834,158478],{}," 的结果是字符串，做运算前要转换。",[143,158837,158838,158839,30181],{},"字符串拼接时，数字要先 ",[119,158840,158841],{},"str()",[143,158843,158844,158846,158847,158849],{},[119,158845,336],{}," 是赋值，",[119,158848,4754],{}," 是比较。",[143,158851,158852],{},"Python 没有自增自减运算符。",[143,158854,158855],{},"浮点数计算可能有精度误差：",[303,158857,158859],{"className":32174,"code":158858,"language":32176,"meta":308,"style":308},"print(0.1 + 0.2)\n",[119,158860,158861],{"__ignoreMap":308},[312,158862,158863,158865,158867,158869,158871,158874],{"class":314,"line":315},[312,158864,32211],{"class":488},[312,158866,1576],{"class":324},[312,158868,87981],{"class":488},[312,158870,47361],{"class":1436},[312,158872,158873],{"class":488}," 0.2",[312,158875,1959],{"class":324},[24,158877,158878,158879,158882],{},"金额计算如果要求严格，可以后续学习 ",[119,158880,158881],{},"decimal"," 模块。",[14,158884,158886],{"id":158885},"_214-本章练习","2.14 本章练习",[140,158888,158889,158892,158895,158898,158901],{},[143,158890,158891],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[143,158893,158894],{},"输入圆的半径，计算面积，保留两位小数。",[143,158896,158897],{},"输入工资和奖金，计算总收入。",[143,158899,158900],{},"输入摄氏温度，转换为华氏温度。",[143,158902,158903],{},"写一个 BMI 计算程序：",[303,158905,158908],{"className":158906,"code":158907,"language":6992,"meta":308},[6990],"BMI = 体重kg \u002F 身高m ** 2\n",[119,158909,158907],{"__ignoreMap":308},[1856,158911,158912],{},"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":308,"searchDepth":171,"depth":171,"links":158914},[158915,158916,158917,158918,158919,158920,158921,158927,158928,158929,158934,158935,158936,158937],{"id":156476,"depth":171,"text":156477},{"id":156585,"depth":171,"text":156586},{"id":156756,"depth":171,"text":156757},{"id":156833,"depth":171,"text":156834},{"id":52526,"depth":171,"text":52527},{"id":157139,"depth":171,"text":157140},{"id":157365,"depth":171,"text":157366,"children":158922},[158923,158924,158925,158926],{"id":157369,"depth":274,"text":157370},{"id":157563,"depth":274,"text":157564},{"id":157651,"depth":274,"text":157652},{"id":157757,"depth":274,"text":157758},{"id":157866,"depth":171,"text":157867},{"id":158024,"depth":171,"text":158025},{"id":158089,"depth":171,"text":158090,"children":158930},[158931,158932,158933],{"id":158093,"depth":274,"text":158094},{"id":158238,"depth":274,"text":158239},{"id":158341,"depth":274,"text":158342},{"id":158472,"depth":171,"text":158473},{"id":158624,"depth":171,"text":158625},{"id":158827,"depth":171,"text":158828},{"id":158885,"depth":171,"text":158886},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156468,"description":1878},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158944,"title":158945,"body":158946,"description":1878,"extension":1879,"meta":160582,"navigation":1881,"path":160583,"seo":160584,"stem":160585,"__hash__":160586},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158947,"toc":160563},[158948,158951,158955,158958,158973,158976,159004,159008,159058,159060,159076,159079,159105,159108,159112,159179,159182,159198,159202,159205,159323,159326,159333,159382,159388,159392,159395,159508,159511,159515,159519,159522,159572,159576,159579,159629,159633,159636,159674,159678,159681,159727,159730,159765,159769,159774,159777,159823,159825,159892,159896,159902,160013,160022,160026,160028,160039,160041,160207,160211,160213,160227,160229,160443,160447,160466,160483,160486,160532,160536,160560],[10,158949,158945],{"id":158950},"_3-判断语句",[14,158952,158954],{"id":158953},"_31-布尔值","3.1 布尔值",[24,158956,158957],{},"判断语句依赖布尔值：",[303,158959,158961],{"className":32174,"code":158960,"language":32176,"meta":308,"style":308},"True\nFalse\n",[119,158962,158963,158968],{"__ignoreMap":308},[312,158964,158965],{"class":314,"line":315},[312,158966,158967],{"class":488},"True\n",[312,158969,158970],{"class":314,"line":171},[312,158971,158972],{"class":488},"False\n",[24,158974,158975],{},"比较表达式会产生布尔值：",[303,158977,158979],{"className":32174,"code":158978,"language":32176,"meta":308,"style":308},"age = 18\nprint(age >= 18)  # True\n",[119,158980,158981,158989],{"__ignoreMap":308},[312,158982,158983,158985,158987],{"class":314,"line":315},[312,158984,148001],{"class":324},[312,158986,336],{"class":1436},[312,158988,148006],{"class":488},[312,158990,158991,158993,158995,158997,158999,159001],{"class":314,"line":171},[312,158992,32211],{"class":488},[312,158994,157223],{"class":324},[312,158996,3516],{"class":1436},[312,158998,157740],{"class":488},[312,159000,47603],{"class":324},[312,159002,159003],{"class":318},"# True\n",[14,159005,159007],{"id":159006},"_32-if基础语法","3.2 if基础语法",[303,159009,159011],{"className":32174,"code":159010,"language":32176,"meta":308,"style":308},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[119,159012,159013,159031,159035,159047],{"__ignoreMap":308},[312,159014,159015,159017,159019,159021,159023,159025,159027,159029],{"class":314,"line":315},[312,159016,148001],{"class":324},[312,159018,336],{"class":1436},[312,159020,4187],{"class":488},[312,159022,1576],{"class":324},[312,159024,55605],{"class":488},[312,159026,1576],{"class":324},[312,159028,153849],{"class":339},[312,159030,32293],{"class":324},[312,159032,159033],{"class":314,"line":171},[312,159034,4205],{"emptyLinePlaceholder":1881},[312,159036,159037,159039,159041,159043,159045],{"class":314,"line":274},[312,159038,3338],{"class":1436},[312,159040,17507],{"class":324},[312,159042,3516],{"class":1436},[312,159044,157740],{"class":488},[312,159046,5544],{"class":324},[312,159048,159049,159051,159053,159056],{"class":314,"line":298},[312,159050,33094],{"class":488},[312,159052,1576],{"class":324},[312,159054,159055],{"class":339},"\"可以进入网吧\"",[312,159057,1959],{"class":324},[24,159059,10828],{},[140,159061,159062,159067,159070,159073],{},[143,159063,159064,159066],{},[119,159065,3338],{}," 后面是条件表达式。",[143,159068,159069],{},"条件后面必须写冒号。",[143,159071,159072],{},"条件成立时执行缩进代码块。",[143,159074,159075],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[24,159077,159078],{},"错误示例：",[303,159080,159082],{"className":32174,"code":159081,"language":32176,"meta":308,"style":308},"if age >= 18\n    print(\"可以进入\")\n",[119,159083,159084,159094],{"__ignoreMap":308},[312,159085,159086,159088,159090,159092],{"class":314,"line":315},[312,159087,3338],{"class":1436},[312,159089,17507],{"class":324},[312,159091,3516],{"class":1436},[312,159093,148006],{"class":488},[312,159095,159096,159098,159100,159103],{"class":314,"line":171},[312,159097,33094],{"class":488},[312,159099,1576],{"class":324},[312,159101,159102],{"class":339},"\"可以进入\"",[312,159104,1959],{"class":324},[24,159106,159107],{},"缺少冒号。",[14,159109,159111],{"id":159110},"_33-if-else","3.3 if else",[303,159113,159115],{"className":32174,"code":159114,"language":32176,"meta":308,"style":308},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[119,159116,159117,159135,159139,159151,159162,159168],{"__ignoreMap":308},[312,159118,159119,159121,159123,159125,159127,159129,159131,159133],{"class":314,"line":315},[312,159120,148001],{"class":324},[312,159122,336],{"class":1436},[312,159124,4187],{"class":488},[312,159126,1576],{"class":324},[312,159128,55605],{"class":488},[312,159130,1576],{"class":324},[312,159132,153849],{"class":339},[312,159134,32293],{"class":324},[312,159136,159137],{"class":314,"line":171},[312,159138,4205],{"emptyLinePlaceholder":1881},[312,159140,159141,159143,159145,159147,159149],{"class":314,"line":274},[312,159142,3338],{"class":1436},[312,159144,17507],{"class":324},[312,159146,3516],{"class":1436},[312,159148,157740],{"class":488},[312,159150,5544],{"class":324},[312,159152,159153,159155,159157,159160],{"class":314,"line":298},[312,159154,33094],{"class":488},[312,159156,1576],{"class":324},[312,159158,159159],{"class":339},"\"成年人\"",[312,159161,1959],{"class":324},[312,159163,159164,159166],{"class":314,"line":974},[312,159165,3507],{"class":1436},[312,159167,5544],{"class":324},[312,159169,159170,159172,159174,159177],{"class":314,"line":980},[312,159171,33094],{"class":488},[312,159173,1576],{"class":324},[312,159175,159176],{"class":339},"\"未成年人\"",[312,159178,1959],{"class":324},[24,159180,159181],{},"执行逻辑：",[140,159183,159184,159190,159195],{},[143,159185,159186,159187,159189],{},"条件成立，执行 ",[119,159188,3338],{}," 代码块。",[143,159191,159192,159193,159189],{},"条件不成立，执行 ",[119,159194,3507],{},[143,159196,159197],{},"两个代码块只会执行其中一个。",[14,159199,159201],{"id":159200},"_34-if-elif-else","3.4 if elif else",[24,159203,159204],{},"多条件判断：",[303,159206,159208],{"className":32174,"code":159207,"language":32176,"meta":308,"style":308},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[119,159209,159210,159228,159232,159246,159257,159271,159282,159295,159306,159312],{"__ignoreMap":308},[312,159211,159212,159214,159216,159218,159220,159222,159224,159226],{"class":314,"line":315},[312,159213,156813],{"class":324},[312,159215,336],{"class":1436},[312,159217,4187],{"class":488},[312,159219,1576],{"class":324},[312,159221,55605],{"class":488},[312,159223,1576],{"class":324},[312,159225,153864],{"class":339},[312,159227,32293],{"class":324},[312,159229,159230],{"class":314,"line":171},[312,159231,4205],{"emptyLinePlaceholder":1881},[312,159233,159234,159236,159239,159241,159244],{"class":314,"line":274},[312,159235,3338],{"class":1436},[312,159237,159238],{"class":324}," score ",[312,159240,3516],{"class":1436},[312,159242,159243],{"class":488}," 90",[312,159245,5544],{"class":324},[312,159247,159248,159250,159252,159255],{"class":314,"line":298},[312,159249,33094],{"class":488},[312,159251,1576],{"class":324},[312,159253,159254],{"class":339},"\"优秀\"",[312,159256,1959],{"class":324},[312,159258,159259,159262,159264,159266,159269],{"class":314,"line":974},[312,159260,159261],{"class":1436},"elif",[312,159263,159238],{"class":324},[312,159265,3516],{"class":1436},[312,159267,159268],{"class":488}," 80",[312,159270,5544],{"class":324},[312,159272,159273,159275,159277,159280],{"class":314,"line":980},[312,159274,33094],{"class":488},[312,159276,1576],{"class":324},[312,159278,159279],{"class":339},"\"良好\"",[312,159281,1959],{"class":324},[312,159283,159284,159286,159288,159290,159293],{"class":314,"line":997},[312,159285,159261],{"class":1436},[312,159287,159238],{"class":324},[312,159289,3516],{"class":1436},[312,159291,159292],{"class":488}," 60",[312,159294,5544],{"class":324},[312,159296,159297,159299,159301,159304],{"class":314,"line":1003},[312,159298,33094],{"class":488},[312,159300,1576],{"class":324},[312,159302,159303],{"class":339},"\"及格\"",[312,159305,1959],{"class":324},[312,159307,159308,159310],{"class":314,"line":1020},[312,159309,3507],{"class":1436},[312,159311,5544],{"class":324},[312,159313,159314,159316,159318,159321],{"class":314,"line":1026},[312,159315,33094],{"class":488},[312,159317,1576],{"class":324},[312,159319,159320],{"class":339},"\"不及格\"",[312,159322,1959],{"class":324},[24,159324,159325],{},"注意判断顺序很重要。",[24,159327,159328,159329,159332],{},"如果把 ",[119,159330,159331],{},"score >= 60"," 放在最前面：",[303,159334,159336],{"className":32174,"code":159335,"language":32176,"meta":308,"style":308},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[119,159337,159338,159350,159360,159372],{"__ignoreMap":308},[312,159339,159340,159342,159344,159346,159348],{"class":314,"line":315},[312,159341,3338],{"class":1436},[312,159343,159238],{"class":324},[312,159345,3516],{"class":1436},[312,159347,159292],{"class":488},[312,159349,5544],{"class":324},[312,159351,159352,159354,159356,159358],{"class":314,"line":171},[312,159353,33094],{"class":488},[312,159355,1576],{"class":324},[312,159357,159303],{"class":339},[312,159359,1959],{"class":324},[312,159361,159362,159364,159366,159368,159370],{"class":314,"line":274},[312,159363,159261],{"class":1436},[312,159365,159238],{"class":324},[312,159367,3516],{"class":1436},[312,159369,159243],{"class":488},[312,159371,5544],{"class":324},[312,159373,159374,159376,159378,159380],{"class":314,"line":298},[312,159375,33094],{"class":488},[312,159377,1576],{"class":324},[312,159379,159254],{"class":339},[312,159381,1959],{"class":324},[24,159383,159384,159385,159387],{},"成绩 95 会先满足 ",[119,159386,159331],{},"，后面的优秀分支就不会执行。",[14,159389,159391],{"id":159390},"_35-判断语句嵌套","3.5 判断语句嵌套",[24,159393,159394],{},"嵌套判断就是在一个判断内部再写判断。",[303,159396,159398],{"className":32174,"code":159397,"language":32176,"meta":308,"style":308},"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",[119,159399,159400,159418,159433,159437,159449,159463,159473,159480,159491,159497],{"__ignoreMap":308},[312,159401,159402,159404,159406,159408,159410,159412,159414,159416],{"class":314,"line":315},[312,159403,148001],{"class":324},[312,159405,336],{"class":1436},[312,159407,4187],{"class":488},[312,159409,1576],{"class":324},[312,159411,55605],{"class":488},[312,159413,1576],{"class":324},[312,159415,153849],{"class":339},[312,159417,32293],{"class":324},[312,159419,159420,159422,159424,159426,159428,159431],{"class":314,"line":171},[312,159421,157816],{"class":324},[312,159423,336],{"class":1436},[312,159425,62387],{"class":488},[312,159427,1576],{"class":324},[312,159429,159430],{"class":339},"\"是否有票(y\u002Fn):\"",[312,159432,1959],{"class":324},[312,159434,159435],{"class":314,"line":274},[312,159436,4205],{"emptyLinePlaceholder":1881},[312,159438,159439,159441,159443,159445,159447],{"class":314,"line":298},[312,159440,3338],{"class":1436},[312,159442,17507],{"class":324},[312,159444,3516],{"class":1436},[312,159446,157740],{"class":488},[312,159448,5544],{"class":324},[312,159450,159451,159453,159456,159458,159461],{"class":314,"line":974},[312,159452,4906],{"class":1436},[312,159454,159455],{"class":324}," has_ticket ",[312,159457,4754],{"class":1436},[312,159459,159460],{"class":339}," \"y\"",[312,159462,5544],{"class":324},[312,159464,159465,159467,159469,159471],{"class":314,"line":980},[312,159466,34246],{"class":488},[312,159468,1576],{"class":324},[312,159470,159102],{"class":339},[312,159472,1959],{"class":324},[312,159474,159475,159478],{"class":314,"line":997},[312,159476,159477],{"class":1436},"    else",[312,159479,5544],{"class":324},[312,159481,159482,159484,159486,159489],{"class":314,"line":1003},[312,159483,34246],{"class":488},[312,159485,1576],{"class":324},[312,159487,159488],{"class":339},"\"请先买票\"",[312,159490,1959],{"class":324},[312,159492,159493,159495],{"class":314,"line":1020},[312,159494,3507],{"class":1436},[312,159496,5544],{"class":324},[312,159498,159499,159501,159503,159506],{"class":314,"line":1026},[312,159500,33094],{"class":488},[312,159502,1576],{"class":324},[312,159504,159505],{"class":339},"\"未成年人禁止进入\"",[312,159507,1959],{"class":324},[24,159509,159510],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159512,159514],{"id":159513},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[69,159516,159518],{"id":159517},"_361-and","3.6.1 and",[24,159520,159521],{},"两个条件都成立才成立。",[303,159523,159525],{"className":32174,"code":159524,"language":32176,"meta":308,"style":308},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[119,159526,159527,159535,159543,159547,159562],{"__ignoreMap":308},[312,159528,159529,159531,159533],{"class":314,"line":315},[312,159530,148001],{"class":324},[312,159532,336],{"class":1436},[312,159534,89835],{"class":488},[312,159536,159537,159539,159541],{"class":314,"line":171},[312,159538,157816],{"class":324},[312,159540,336],{"class":1436},[312,159542,155054],{"class":488},[312,159544,159545],{"class":314,"line":274},[312,159546,4205],{"emptyLinePlaceholder":1881},[312,159548,159549,159551,159553,159555,159557,159559],{"class":314,"line":298},[312,159550,3338],{"class":1436},[312,159552,17507],{"class":324},[312,159554,3516],{"class":1436},[312,159556,157740],{"class":488},[312,159558,122197],{"class":1436},[312,159560,159561],{"class":324}," has_ticket:\n",[312,159563,159564,159566,159568,159570],{"class":314,"line":974},[312,159565,33094],{"class":488},[312,159567,1576],{"class":324},[312,159569,159102],{"class":339},[312,159571,1959],{"class":324},[69,159573,159575],{"id":159574},"_362-or","3.6.2 or",[24,159577,159578],{},"只要一个条件成立就成立。",[303,159580,159582],{"className":32174,"code":159581,"language":32176,"meta":308,"style":308},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[119,159583,159584,159593,159602,159606,159618],{"__ignoreMap":308},[312,159585,159586,159589,159591],{"class":314,"line":315},[312,159587,159588],{"class":324},"is_vip ",[312,159590,336],{"class":1436},[312,159592,127574],{"class":488},[312,159594,159595,159598,159600],{"class":314,"line":171},[312,159596,159597],{"class":324},"coupon ",[312,159599,336],{"class":1436},[312,159601,155054],{"class":488},[312,159603,159604],{"class":314,"line":274},[312,159605,4205],{"emptyLinePlaceholder":1881},[312,159607,159608,159610,159613,159615],{"class":314,"line":298},[312,159609,3338],{"class":1436},[312,159611,159612],{"class":324}," is_vip ",[312,159614,116859],{"class":1436},[312,159616,159617],{"class":324}," coupon:\n",[312,159619,159620,159622,159624,159627],{"class":314,"line":974},[312,159621,33094],{"class":488},[312,159623,1576],{"class":324},[312,159625,159626],{"class":339},"\"可以享受优惠\"",[312,159628,1959],{"class":324},[69,159630,159632],{"id":159631},"_363-not","3.6.3 not",[24,159634,159635],{},"取反。",[303,159637,159639],{"className":32174,"code":159638,"language":32176,"meta":308,"style":308},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[119,159640,159641,159650,159654,159663],{"__ignoreMap":308},[312,159642,159643,159646,159648],{"class":314,"line":315},[312,159644,159645],{"class":324},"is_closed ",[312,159647,336],{"class":1436},[312,159649,127574],{"class":488},[312,159651,159652],{"class":314,"line":171},[312,159653,4205],{"emptyLinePlaceholder":1881},[312,159655,159656,159658,159660],{"class":314,"line":274},[312,159657,3338],{"class":1436},[312,159659,40725],{"class":1436},[312,159661,159662],{"class":324}," is_closed:\n",[312,159664,159665,159667,159669,159672],{"class":314,"line":298},[312,159666,33094],{"class":488},[312,159668,1576],{"class":324},[312,159670,159671],{"class":339},"\"店铺营业中\"",[312,159673,1959],{"class":324},[14,159675,159677],{"id":159676},"_37-链式比较","3.7 链式比较",[24,159679,159680],{},"Python 支持链式比较：",[303,159682,159684],{"className":32174,"code":159683,"language":32176,"meta":308,"style":308},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[119,159685,159686,159695,159699,159716],{"__ignoreMap":308},[312,159687,159688,159690,159692],{"class":314,"line":315},[312,159689,156813],{"class":324},[312,159691,336],{"class":1436},[312,159693,159694],{"class":488}," 85\n",[312,159696,159697],{"class":314,"line":171},[312,159698,4205],{"emptyLinePlaceholder":1881},[312,159700,159701,159703,159705,159708,159710,159712,159714],{"class":314,"line":274},[312,159702,3338],{"class":1436},[312,159704,5898],{"class":488},[312,159706,159707],{"class":1436}," \u003C=",[312,159709,159238],{"class":324},[312,159711,3394],{"class":1436},[312,159713,7558],{"class":488},[312,159715,5544],{"class":324},[312,159717,159718,159720,159722,159725],{"class":314,"line":298},[312,159719,33094],{"class":488},[312,159721,1576],{"class":324},[312,159723,159724],{"class":339},"\"成绩合法\"",[312,159726,1959],{"class":324},[24,159728,159729],{},"等价于：",[303,159731,159733],{"className":32174,"code":159732,"language":32176,"meta":308,"style":308},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[119,159734,159735,159755],{"__ignoreMap":308},[312,159736,159737,159739,159741,159743,159745,159747,159749,159751,159753],{"class":314,"line":315},[312,159738,3338],{"class":1436},[312,159740,159238],{"class":324},[312,159742,3516],{"class":1436},[312,159744,5898],{"class":488},[312,159746,122197],{"class":1436},[312,159748,159238],{"class":324},[312,159750,3394],{"class":1436},[312,159752,7558],{"class":488},[312,159754,5544],{"class":324},[312,159756,159757,159759,159761,159763],{"class":314,"line":171},[312,159758,33094],{"class":488},[312,159760,1576],{"class":324},[312,159762,159724],{"class":339},[312,159764,1959],{"class":324},[14,159766,159768],{"id":159767},"_38-真值和假值","3.8 真值和假值",[24,159770,118236,159771,159773],{},[119,159772,3338],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[24,159775,159776],{},"假值：",[303,159778,159780],{"className":32174,"code":159779,"language":32176,"meta":308,"style":308},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[119,159781,159782,159786,159791,159795,159799,159804,159808,159812,159817],{"__ignoreMap":308},[312,159783,159784],{"class":314,"line":315},[312,159785,158972],{"class":488},[312,159787,159788],{"class":314,"line":171},[312,159789,159790],{"class":488},"None\n",[312,159792,159793],{"class":314,"line":274},[312,159794,4890],{"class":488},[312,159796,159797],{"class":314,"line":298},[312,159798,34137],{"class":488},[312,159800,159801],{"class":314,"line":974},[312,159802,159803],{"class":339},"\"\"\n",[312,159805,159806],{"class":314,"line":980},[312,159807,34152],{"class":324},[312,159809,159810],{"class":314,"line":997},[312,159811,3781],{"class":324},[312,159813,159814],{"class":314,"line":1003},[312,159815,159816],{"class":324},"{}\n",[312,159818,159819,159821],{"class":314,"line":1020},[312,159820,156745],{"class":488},[312,159822,3781],{"class":324},[24,159824,16936],{},[303,159826,159828],{"className":32174,"code":159827,"language":32176,"meta":308,"style":308},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[119,159829,159830,159844,159848,159855,159875,159881],{"__ignoreMap":308},[312,159831,159832,159834,159836,159838,159840,159842],{"class":314,"line":315},[312,159833,147991],{"class":324},[312,159835,336],{"class":1436},[312,159837,62387],{"class":488},[312,159839,1576],{"class":324},[312,159841,153834],{"class":339},[312,159843,1959],{"class":324},[312,159845,159846],{"class":314,"line":171},[312,159847,4205],{"emptyLinePlaceholder":1881},[312,159849,159850,159852],{"class":314,"line":274},[312,159851,3338],{"class":1436},[312,159853,159854],{"class":324}," name:\n",[312,159856,159857,159859,159861,159863,159865,159867,159869,159871,159873],{"class":314,"line":298},[312,159858,33094],{"class":488},[312,159860,1576],{"class":324},[312,159862,2003],{"class":1436},[312,159864,158509],{"class":339},[312,159866,2840],{"class":488},[312,159868,81581],{"class":324},[312,159870,2888],{"class":488},[312,159872,2196],{"class":339},[312,159874,1959],{"class":324},[312,159876,159877,159879],{"class":314,"line":974},[312,159878,3507],{"class":1436},[312,159880,5544],{"class":324},[312,159882,159883,159885,159887,159890],{"class":314,"line":980},[312,159884,33094],{"class":488},[312,159886,1576],{"class":324},[312,159888,159889],{"class":339},"\"姓名不能为空\"",[312,159891,1959],{"class":324},[14,159893,159895],{"id":159894},"_39-match语句","3.9 match语句",[24,159897,159898,159899,159901],{},"Python 3.10 开始支持 ",[119,159900,73037],{},"。它适合处理固定选项。",[303,159903,159905],{"className":32174,"code":159904,"language":32176,"meta":308,"style":308},"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",[119,159906,159907,159923,159927,159934,159944,159955,159964,159975,159984,159995,160002],{"__ignoreMap":308},[312,159908,159909,159912,159914,159916,159918,159921],{"class":314,"line":315},[312,159910,159911],{"class":324},"command ",[312,159913,336],{"class":1436},[312,159915,62387],{"class":488},[312,159917,1576],{"class":324},[312,159919,159920],{"class":339},"\"请输入命令:\"",[312,159922,1959],{"class":324},[312,159924,159925],{"class":314,"line":171},[312,159926,4205],{"emptyLinePlaceholder":1881},[312,159928,159929,159931],{"class":314,"line":274},[312,159930,73037],{"class":1436},[312,159932,159933],{"class":324}," command:\n",[312,159935,159936,159939,159942],{"class":314,"line":298},[312,159937,159938],{"class":1436},"    case",[312,159940,159941],{"class":339}," \"start\"",[312,159943,5544],{"class":324},[312,159945,159946,159948,159950,159953],{"class":314,"line":974},[312,159947,34246],{"class":488},[312,159949,1576],{"class":324},[312,159951,159952],{"class":339},"\"启动\"",[312,159954,1959],{"class":324},[312,159956,159957,159959,159962],{"class":314,"line":980},[312,159958,159938],{"class":1436},[312,159960,159961],{"class":339}," \"stop\"",[312,159963,5544],{"class":324},[312,159965,159966,159968,159970,159973],{"class":314,"line":997},[312,159967,34246],{"class":488},[312,159969,1576],{"class":324},[312,159971,159972],{"class":339},"\"停止\"",[312,159974,1959],{"class":324},[312,159976,159977,159979,159982],{"class":314,"line":1003},[312,159978,159938],{"class":1436},[312,159980,159981],{"class":339}," \"restart\"",[312,159983,5544],{"class":324},[312,159985,159986,159988,159990,159993],{"class":314,"line":1020},[312,159987,34246],{"class":488},[312,159989,1576],{"class":324},[312,159991,159992],{"class":339},"\"重启\"",[312,159994,1959],{"class":324},[312,159996,159997,159999],{"class":314,"line":1026},[312,159998,159938],{"class":1436},[312,160000,160001],{"class":324}," _:\n",[312,160003,160004,160006,160008,160011],{"class":314,"line":3418},[312,160005,34246],{"class":488},[312,160007,1576],{"class":324},[312,160009,160010],{"class":339},"\"未知命令\"",[312,160012,1959],{"class":324},[24,160014,160015,160016,160018,160019,160021],{},"入门阶段掌握 ",[119,160017,156113],{}," 更重要，",[119,160020,73037],{}," 可以作为补充。",[14,160023,160025],{"id":160024},"_310-小案例成绩等级","3.10 小案例：成绩等级",[24,160027,125060],{},[140,160029,160030,160033,160036],{},[143,160031,160032],{},"输入成绩。",[143,160034,160035],{},"判断成绩是否合法。",[143,160037,160038],{},"输出等级。",[24,160040,11838],{},[303,160042,160044],{"className":32174,"code":160043,"language":32176,"meta":308,"style":308},"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",[119,160045,160046,160064,160068,160086,160097,160109,160120,160132,160143,160156,160167,160179,160190,160196],{"__ignoreMap":308},[312,160047,160048,160050,160052,160054,160056,160058,160060,160062],{"class":314,"line":315},[312,160049,156813],{"class":324},[312,160051,336],{"class":1436},[312,160053,111566],{"class":488},[312,160055,1576],{"class":324},[312,160057,55605],{"class":488},[312,160059,1576],{"class":324},[312,160061,153864],{"class":339},[312,160063,32293],{"class":324},[312,160065,160066],{"class":314,"line":171},[312,160067,4205],{"emptyLinePlaceholder":1881},[312,160069,160070,160072,160074,160076,160078,160080,160082,160084],{"class":314,"line":274},[312,160071,3338],{"class":1436},[312,160073,40725],{"class":1436},[312,160075,5898],{"class":488},[312,160077,159707],{"class":1436},[312,160079,159238],{"class":324},[312,160081,3394],{"class":1436},[312,160083,7558],{"class":488},[312,160085,5544],{"class":324},[312,160087,160088,160090,160092,160095],{"class":314,"line":298},[312,160089,33094],{"class":488},[312,160091,1576],{"class":324},[312,160093,160094],{"class":339},"\"成绩不合法\"",[312,160096,1959],{"class":324},[312,160098,160099,160101,160103,160105,160107],{"class":314,"line":974},[312,160100,159261],{"class":1436},[312,160102,159238],{"class":324},[312,160104,3516],{"class":1436},[312,160106,159243],{"class":488},[312,160108,5544],{"class":324},[312,160110,160111,160113,160115,160118],{"class":314,"line":980},[312,160112,33094],{"class":488},[312,160114,1576],{"class":324},[312,160116,160117],{"class":339},"\"等级:A\"",[312,160119,1959],{"class":324},[312,160121,160122,160124,160126,160128,160130],{"class":314,"line":997},[312,160123,159261],{"class":1436},[312,160125,159238],{"class":324},[312,160127,3516],{"class":1436},[312,160129,159268],{"class":488},[312,160131,5544],{"class":324},[312,160133,160134,160136,160138,160141],{"class":314,"line":1003},[312,160135,33094],{"class":488},[312,160137,1576],{"class":324},[312,160139,160140],{"class":339},"\"等级:B\"",[312,160142,1959],{"class":324},[312,160144,160145,160147,160149,160151,160154],{"class":314,"line":1020},[312,160146,159261],{"class":1436},[312,160148,159238],{"class":324},[312,160150,3516],{"class":1436},[312,160152,160153],{"class":488}," 70",[312,160155,5544],{"class":324},[312,160157,160158,160160,160162,160165],{"class":314,"line":1026},[312,160159,33094],{"class":488},[312,160161,1576],{"class":324},[312,160163,160164],{"class":339},"\"等级:C\"",[312,160166,1959],{"class":324},[312,160168,160169,160171,160173,160175,160177],{"class":314,"line":3418},[312,160170,159261],{"class":1436},[312,160172,159238],{"class":324},[312,160174,3516],{"class":1436},[312,160176,159292],{"class":488},[312,160178,5544],{"class":324},[312,160180,160181,160183,160185,160188],{"class":314,"line":3423},[312,160182,33094],{"class":488},[312,160184,1576],{"class":324},[312,160186,160187],{"class":339},"\"等级:D\"",[312,160189,1959],{"class":324},[312,160191,160192,160194],{"class":314,"line":3429},[312,160193,3507],{"class":1436},[312,160195,5544],{"class":324},[312,160197,160198,160200,160202,160205],{"class":314,"line":3434},[312,160199,33094],{"class":488},[312,160201,1576],{"class":324},[312,160203,160204],{"class":339},"\"等级:E\"",[312,160206,1959],{"class":324},[14,160208,160210],{"id":160209},"_311-小案例会员折扣","3.11 小案例：会员折扣",[24,160212,125060],{},[140,160214,160215,160218,160221,160224],{},[143,160216,160217],{},"输入消费金额。",[143,160219,160220],{},"输入会员等级，普通、银卡、金卡。",[143,160222,160223],{},"普通不打折，银卡 9 折，金卡 8 折。",[143,160225,160226],{},"满 500 再减 50。",[24,160228,11838],{},[303,160230,160232],{"className":32174,"code":160231,"language":32176,"meta":308,"style":308},"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",[119,160233,160234,160254,160270,160274,160282,160286,160300,160310,160323,160332,160345,160353,160359,160370,160374,160388,160392,160406,160416,160420],{"__ignoreMap":308},[312,160235,160236,160239,160241,160243,160245,160247,160249,160252],{"class":314,"line":315},[312,160237,160238],{"class":324},"amount ",[312,160240,336],{"class":1436},[312,160242,111566],{"class":488},[312,160244,1576],{"class":324},[312,160246,55605],{"class":488},[312,160248,1576],{"class":324},[312,160250,160251],{"class":339},"\"请输入消费金额:\"",[312,160253,32293],{"class":324},[312,160255,160256,160259,160261,160263,160265,160268],{"class":314,"line":171},[312,160257,160258],{"class":324},"level ",[312,160260,336],{"class":1436},[312,160262,62387],{"class":488},[312,160264,1576],{"class":324},[312,160266,160267],{"class":339},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[312,160269,1959],{"class":324},[312,160271,160272],{"class":314,"line":274},[312,160273,4205],{"emptyLinePlaceholder":1881},[312,160275,160276,160278,160280],{"class":314,"line":298},[312,160277,158691],{"class":324},[312,160279,336],{"class":1436},[312,160281,57481],{"class":488},[312,160283,160284],{"class":314,"line":974},[312,160285,4205],{"emptyLinePlaceholder":1881},[312,160287,160288,160290,160293,160295,160298],{"class":314,"line":980},[312,160289,3338],{"class":1436},[312,160291,160292],{"class":324}," level ",[312,160294,4754],{"class":1436},[312,160296,160297],{"class":339}," \"银卡\"",[312,160299,5544],{"class":324},[312,160301,160302,160305,160307],{"class":314,"line":997},[312,160303,160304],{"class":324},"    discount ",[312,160306,336],{"class":1436},[312,160308,160309],{"class":488}," 0.9\n",[312,160311,160312,160314,160316,160318,160321],{"class":314,"line":1003},[312,160313,159261],{"class":1436},[312,160315,160292],{"class":324},[312,160317,4754],{"class":1436},[312,160319,160320],{"class":339}," \"金卡\"",[312,160322,5544],{"class":324},[312,160324,160325,160327,160329],{"class":314,"line":1020},[312,160326,160304],{"class":324},[312,160328,336],{"class":1436},[312,160330,160331],{"class":488}," 0.8\n",[312,160333,160334,160336,160338,160340,160343],{"class":314,"line":1026},[312,160335,159261],{"class":1436},[312,160337,160292],{"class":324},[312,160339,4754],{"class":1436},[312,160341,160342],{"class":339}," \"普通\"",[312,160344,5544],{"class":324},[312,160346,160347,160349,160351],{"class":314,"line":3418},[312,160348,160304],{"class":324},[312,160350,336],{"class":1436},[312,160352,57481],{"class":488},[312,160354,160355,160357],{"class":314,"line":3423},[312,160356,3507],{"class":1436},[312,160358,5544],{"class":324},[312,160360,160361,160363,160365,160368],{"class":314,"line":3429},[312,160362,33094],{"class":488},[312,160364,1576],{"class":324},[312,160366,160367],{"class":339},"\"会员等级输入错误，按普通会员计算\"",[312,160369,1959],{"class":324},[312,160371,160372],{"class":314,"line":3434},[312,160373,4205],{"emptyLinePlaceholder":1881},[312,160375,160376,160379,160381,160384,160386],{"class":314,"line":3448},[312,160377,160378],{"class":324},"pay ",[312,160380,336],{"class":1436},[312,160382,160383],{"class":324}," amount ",[312,160385,2400],{"class":1436},[312,160387,158730],{"class":324},[312,160389,160390],{"class":314,"line":3453},[312,160391,4205],{"emptyLinePlaceholder":1881},[312,160393,160394,160396,160399,160401,160404],{"class":314,"line":3459},[312,160395,3338],{"class":1436},[312,160397,160398],{"class":324}," pay ",[312,160400,3516],{"class":1436},[312,160402,160403],{"class":488}," 500",[312,160405,5544],{"class":324},[312,160407,160408,160411,160413],{"class":314,"line":3480},[312,160409,160410],{"class":324},"    pay ",[312,160412,151707],{"class":1436},[312,160414,160415],{"class":488}," 50\n",[312,160417,160418],{"class":314,"line":3485},[312,160419,4205],{"emptyLinePlaceholder":1881},[312,160421,160422,160424,160426,160428,160430,160432,160435,160437,160439,160441],{"class":314,"line":3499},[312,160423,32211],{"class":488},[312,160425,1576],{"class":324},[312,160427,2003],{"class":1436},[312,160429,158811],{"class":339},[312,160431,2840],{"class":488},[312,160433,160434],{"class":324},"pay",[312,160436,158614],{"class":1436},[312,160438,2888],{"class":488},[312,160440,158467],{"class":339},[312,160442,1959],{"class":324},[14,160444,160446],{"id":160445},"_312-易错点","3.12 易错点",[140,160448,160449,160452,160455,160458,160463],{},[143,160450,160451],{},"冒号不能漏。",[143,160453,160454],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[143,160456,160457],{},"多分支判断要注意顺序。",[143,160459,160460,160461,30181],{},"判断相等用 ",[119,160462,4754],{},[143,160464,160465],{},"字符串比较区分大小写：",[303,160467,160469],{"className":32174,"code":160468,"language":32176,"meta":308,"style":308},"\"Y\" == \"y\"  # False\n",[119,160470,160471],{"__ignoreMap":308},[312,160472,160473,160476,160478,160480],{"class":314,"line":315},[312,160474,160475],{"class":339},"\"Y\"",[312,160477,103328],{"class":1436},[312,160479,159460],{"class":339},[312,160481,160482],{"class":318},"  # False\n",[24,160484,160485],{},"可转换后再判断：",[303,160487,160489],{"className":32174,"code":160488,"language":32176,"meta":308,"style":308},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[119,160490,160491,160508,160521],{"__ignoreMap":308},[312,160492,160493,160496,160498,160500,160502,160505],{"class":314,"line":315},[312,160494,160495],{"class":324},"answer ",[312,160497,336],{"class":1436},[312,160499,62387],{"class":488},[312,160501,1576],{"class":324},[312,160503,160504],{"class":339},"\"是否继续(y\u002Fn):\"",[312,160506,160507],{"class":324},").lower()\n",[312,160509,160510,160512,160515,160517,160519],{"class":314,"line":171},[312,160511,3338],{"class":1436},[312,160513,160514],{"class":324}," answer ",[312,160516,4754],{"class":1436},[312,160518,159460],{"class":339},[312,160520,5544],{"class":324},[312,160522,160523,160525,160527,160530],{"class":314,"line":274},[312,160524,33094],{"class":488},[312,160526,1576],{"class":324},[312,160528,160529],{"class":339},"\"继续\"",[312,160531,1959],{"class":324},[14,160533,160535],{"id":160534},"_313-本章练习","3.13 本章练习",[140,160537,160538,160541,160544,160547,160557],{},[143,160539,160540],{},"输入年龄，判断是否成年。",[143,160542,160543],{},"输入年份，判断是否为闰年。",[143,160545,160546],{},"输入三个数字，输出最大值。",[143,160548,160549,160550,160553,160554,160556],{},"写登录判断：用户名是 ",[119,160551,160552],{},"admin"," 且密码是 ",[119,160555,16885],{}," 才登录成功。",[143,160558,160559],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1856,160561,160562],{},"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":308,"searchDepth":171,"depth":171,"links":160564},[160565,160566,160567,160568,160569,160570,160575,160576,160577,160578,160579,160580,160581],{"id":158953,"depth":171,"text":158954},{"id":159006,"depth":171,"text":159007},{"id":159110,"depth":171,"text":159111},{"id":159200,"depth":171,"text":159201},{"id":159390,"depth":171,"text":159391},{"id":159513,"depth":171,"text":159514,"children":160571},[160572,160573,160574],{"id":159517,"depth":274,"text":159518},{"id":159574,"depth":274,"text":159575},{"id":159631,"depth":274,"text":159632},{"id":159676,"depth":171,"text":159677},{"id":159767,"depth":171,"text":159768},{"id":159894,"depth":171,"text":159895},{"id":160024,"depth":171,"text":160025},{"id":160209,"depth":171,"text":160210},{"id":160445,"depth":171,"text":160446},{"id":160534,"depth":171,"text":160535},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158945,"description":1878},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160588,"title":160589,"body":160590,"description":1878,"extension":1879,"meta":162359,"navigation":1881,"path":162360,"seo":162361,"stem":162362,"__hash__":162363},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160591,"toc":162339},[160592,160595,160599,160605,160608,160625,160629,160631,160648,160650,160695,160697,160714,160718,160721,160787,160790,160808,160812,160973,160982,160986,160990,160995,161042,161044,161050,161054,161059,161106,161108,161114,161118,161123,161159,161162,161209,161213,161219,161277,161282,161313,161318,161322,161377,161380,161452,161455,161514,161518,161521,161596,161599,161603,161709,161712,161738,161742,161754,161823,161826,161918,161922,161924,161935,161937,162067,162071,162273,162281,162285,162315,162319,162336],[10,160593,160589],{"id":160594},"_4-循环语句",[14,160596,160598],{"id":160597},"_41-为什么需要循环","4.1 为什么需要循环",[24,160600,160601,160602,160604],{},"如果要输出 1 到 100，不应该写 100 行 ",[119,160603,147927],{},"，而应该用循环。",[24,160606,160607],{},"循环适合处理重复任务：",[140,160609,160610,160613,160616,160619,160622],{},[143,160611,160612],{},"重复输出。",[143,160614,160615],{},"重复输入。",[143,160617,160618],{},"遍历数据。",[143,160620,160621],{},"持续执行菜单。",[143,160623,160624],{},"批量处理文件或数据。",[14,160626,160628],{"id":160627},"_42-while循环","4.2 while循环",[24,160630,6986],{},[303,160632,160634],{"className":32174,"code":160633,"language":32176,"meta":308,"style":308},"while 条件:\n    循环体\n",[119,160635,160636,160643],{"__ignoreMap":308},[312,160637,160638,160640],{"class":314,"line":315},[312,160639,110432],{"class":1436},[312,160641,160642],{"class":324}," 条件:\n",[312,160644,160645],{"class":314,"line":171},[312,160646,160647],{"class":324},"    循环体\n",[24,160649,16936],{},[303,160651,160653],{"className":32174,"code":160652,"language":32176,"meta":308,"style":308},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[119,160654,160655,160663,160667,160679,160686],{"__ignoreMap":308},[312,160656,160657,160659,160661],{"class":314,"line":315},[312,160658,101918],{"class":324},[312,160660,336],{"class":1436},[312,160662,57481],{"class":488},[312,160664,160665],{"class":314,"line":171},[312,160666,4205],{"emptyLinePlaceholder":1881},[312,160668,160669,160671,160673,160675,160677],{"class":314,"line":274},[312,160670,110432],{"class":1436},[312,160672,11241],{"class":324},[312,160674,3394],{"class":1436},[312,160676,3953],{"class":488},[312,160678,5544],{"class":324},[312,160680,160681,160683],{"class":314,"line":298},[312,160682,33094],{"class":488},[312,160684,160685],{"class":324},"(i)\n",[312,160687,160688,160691,160693],{"class":314,"line":974},[312,160689,160690],{"class":324},"    i ",[312,160692,11280],{"class":1436},[312,160694,57481],{"class":488},[24,160696,82700],{},[140,160698,160699,160705,160708,160711],{},[143,160700,160701,160702,30181],{},"判断条件 ",[119,160703,160704],{},"i \u003C= 5",[143,160706,160707],{},"条件成立，执行循环体。",[143,160709,160710],{},"执行完后回到条件判断。",[143,160712,160713],{},"条件不成立，退出循环。",[14,160715,160717],{"id":160716},"_43-while累加","4.3 while累加",[24,160719,160720],{},"计算 1 到 100 的和：",[303,160722,160724],{"className":32174,"code":160723,"language":32176,"meta":308,"style":308},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[119,160725,160726,160734,160742,160746,160758,160768,160776,160780],{"__ignoreMap":308},[312,160727,160728,160730,160732],{"class":314,"line":315},[312,160729,101918],{"class":324},[312,160731,336],{"class":1436},[312,160733,57481],{"class":488},[312,160735,160736,160738,160740],{"class":314,"line":171},[312,160737,158715],{"class":324},[312,160739,336],{"class":1436},[312,160741,49128],{"class":488},[312,160743,160744],{"class":314,"line":274},[312,160745,4205],{"emptyLinePlaceholder":1881},[312,160747,160748,160750,160752,160754,160756],{"class":314,"line":298},[312,160749,110432],{"class":1436},[312,160751,11241],{"class":324},[312,160753,3394],{"class":1436},[312,160755,7558],{"class":488},[312,160757,5544],{"class":324},[312,160759,160760,160763,160765],{"class":314,"line":974},[312,160761,160762],{"class":324},"    total ",[312,160764,11280],{"class":1436},[312,160766,160767],{"class":324}," i\n",[312,160769,160770,160772,160774],{"class":314,"line":980},[312,160771,160690],{"class":324},[312,160773,11280],{"class":1436},[312,160775,57481],{"class":488},[312,160777,160778],{"class":314,"line":997},[312,160779,4205],{"emptyLinePlaceholder":1881},[312,160781,160782,160784],{"class":314,"line":1003},[312,160783,32211],{"class":488},[312,160785,160786],{"class":324},"(total)\n",[24,160788,160789],{},"核心思想：",[140,160791,160792,160797,160802],{},[143,160793,160794,160796],{},[119,160795,2386],{}," 控制循环次数。",[143,160798,160799,160801],{},[119,160800,158816],{}," 保存累加结果。",[143,160803,160804,160805,160807],{},"每轮循环都要更新 ",[119,160806,2386],{},"，否则可能死循环。",[14,160809,160811],{"id":160810},"_44-while猜数字","4.4 while猜数字",[303,160813,160815],{"className":32174,"code":160814,"language":32176,"meta":308,"style":308},"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",[119,160816,160817,160823,160827,160844,160852,160856,160864,160884,160893,160897,160909,160920,160930,160941,160947,160969],{"__ignoreMap":308},[312,160818,160819,160821],{"class":314,"line":315},[312,160820,32188],{"class":1436},[312,160822,47123],{"class":324},[312,160824,160825],{"class":314,"line":171},[312,160826,4205],{"emptyLinePlaceholder":1881},[312,160828,160829,160831,160833,160836,160838,160840,160842],{"class":314,"line":274},[312,160830,160495],{"class":324},[312,160832,336],{"class":1436},[312,160834,160835],{"class":324}," random.randint(",[312,160837,1433],{"class":488},[312,160839,733],{"class":324},[312,160841,2256],{"class":488},[312,160843,1959],{"class":324},[312,160845,160846,160848,160850],{"class":314,"line":298},[312,160847,148146],{"class":324},[312,160849,336],{"class":1436},[312,160851,49128],{"class":488},[312,160853,160854],{"class":314,"line":974},[312,160855,4205],{"emptyLinePlaceholder":1881},[312,160857,160858,160860,160862],{"class":314,"line":980},[312,160859,110432],{"class":1436},[312,160861,97062],{"class":488},[312,160863,5544],{"class":324},[312,160865,160866,160869,160871,160873,160875,160877,160879,160882],{"class":314,"line":997},[312,160867,160868],{"class":324},"    guess ",[312,160870,336],{"class":1436},[312,160872,4187],{"class":488},[312,160874,1576],{"class":324},[312,160876,55605],{"class":488},[312,160878,1576],{"class":324},[312,160880,160881],{"class":339},"\"请输入1到100之间的数字:\"",[312,160883,32293],{"class":324},[312,160885,160886,160889,160891],{"class":314,"line":1003},[312,160887,160888],{"class":324},"    count ",[312,160890,11280],{"class":1436},[312,160892,57481],{"class":488},[312,160894,160895],{"class":314,"line":1020},[312,160896,4205],{"emptyLinePlaceholder":1881},[312,160898,160899,160901,160904,160906],{"class":314,"line":1026},[312,160900,4906],{"class":1436},[312,160902,160903],{"class":324}," guess ",[312,160905,2902],{"class":1436},[312,160907,160908],{"class":324}," answer:\n",[312,160910,160911,160913,160915,160918],{"class":314,"line":3418},[312,160912,34246],{"class":488},[312,160914,1576],{"class":324},[312,160916,160917],{"class":339},"\"猜大了\"",[312,160919,1959],{"class":324},[312,160921,160922,160924,160926,160928],{"class":314,"line":3423},[312,160923,41088],{"class":1436},[312,160925,160903],{"class":324},[312,160927,325],{"class":1436},[312,160929,160908],{"class":324},[312,160931,160932,160934,160936,160939],{"class":314,"line":3429},[312,160933,34246],{"class":488},[312,160935,1576],{"class":324},[312,160937,160938],{"class":339},"\"猜小了\"",[312,160940,1959],{"class":324},[312,160942,160943,160945],{"class":314,"line":3434},[312,160944,159477],{"class":1436},[312,160946,5544],{"class":324},[312,160948,160949,160951,160953,160955,160958,160960,160962,160964,160967],{"class":314,"line":3448},[312,160950,34246],{"class":488},[312,160952,1576],{"class":324},[312,160954,2003],{"class":1436},[312,160956,160957],{"class":339},"\"猜对了，一共猜了",[312,160959,2840],{"class":488},[312,160961,86205],{"class":324},[312,160963,2888],{"class":488},[312,160965,160966],{"class":339},"次\"",[312,160968,1959],{"class":324},[312,160970,160971],{"class":314,"line":3453},[312,160972,33422],{"class":1436},[24,160974,160975,160978,160979,160981],{},[119,160976,160977],{},"while True"," 表示无限循环，通常配合 ",[119,160980,3858],{}," 使用。",[14,160983,160985],{"id":160984},"_45-break和continue","4.5 break和continue",[69,160987,160989],{"id":160988},"_451-break","4.5.1 break",[24,160991,160992,160994],{},[119,160993,3858],{}," 直接结束整个循环。",[303,160996,160998],{"className":32174,"code":160997,"language":32176,"meta":308,"style":308},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[119,160999,161000,161020,161032,161036],{"__ignoreMap":308},[312,161001,161002,161004,161006,161008,161010,161012,161014,161016,161018],{"class":314,"line":315},[312,161003,4830],{"class":1436},[312,161005,11241],{"class":324},[312,161007,27839],{"class":1436},[312,161009,34238],{"class":488},[312,161011,1576],{"class":324},[312,161013,1433],{"class":488},[312,161015,733],{"class":324},[312,161017,2289],{"class":488},[312,161019,32582],{"class":324},[312,161021,161022,161024,161026,161028,161030],{"class":314,"line":171},[312,161023,4906],{"class":1436},[312,161025,11241],{"class":324},[312,161027,4754],{"class":1436},[312,161029,79842],{"class":488},[312,161031,5544],{"class":324},[312,161033,161034],{"class":314,"line":274},[312,161035,33422],{"class":1436},[312,161037,161038,161040],{"class":314,"line":298},[312,161039,33094],{"class":488},[312,161041,160685],{"class":324},[24,161043,147912],{},[303,161045,161048],{"className":161046,"code":161047,"language":6992,"meta":308},[6990],"1\n2\n",[119,161049,161047],{"__ignoreMap":308},[69,161051,161053],{"id":161052},"_452-continue","4.5.2 continue",[24,161055,161056,161058],{},[119,161057,156127],{}," 跳过本轮剩余代码，进入下一轮循环。",[303,161060,161062],{"className":32174,"code":161061,"language":32176,"meta":308,"style":308},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[119,161063,161064,161084,161096,161100],{"__ignoreMap":308},[312,161065,161066,161068,161070,161072,161074,161076,161078,161080,161082],{"class":314,"line":315},[312,161067,4830],{"class":1436},[312,161069,11241],{"class":324},[312,161071,27839],{"class":1436},[312,161073,34238],{"class":488},[312,161075,1576],{"class":324},[312,161077,1433],{"class":488},[312,161079,733],{"class":324},[312,161081,2289],{"class":488},[312,161083,32582],{"class":324},[312,161085,161086,161088,161090,161092,161094],{"class":314,"line":171},[312,161087,4906],{"class":1436},[312,161089,11241],{"class":324},[312,161091,4754],{"class":1436},[312,161093,79842],{"class":488},[312,161095,5544],{"class":324},[312,161097,161098],{"class":314,"line":274},[312,161099,149967],{"class":1436},[312,161101,161102,161104],{"class":314,"line":298},[312,161103,33094],{"class":488},[312,161105,160685],{"class":324},[24,161107,147912],{},[303,161109,161112],{"className":161110,"code":161111,"language":6992,"meta":308},[6990],"1\n2\n4\n5\n",[119,161113,161111],{"__ignoreMap":308},[14,161115,161117],{"id":161116},"_46-for循环","4.6 for循环",[24,161119,161120,161122],{},[119,161121,4830],{}," 常用于遍历序列。",[303,161124,161126],{"className":32174,"code":161125,"language":32176,"meta":308,"style":308},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[119,161127,161128,161137,161141,161152],{"__ignoreMap":308},[312,161129,161130,161132,161134],{"class":314,"line":315},[312,161131,147991],{"class":324},[312,161133,336],{"class":1436},[312,161135,161136],{"class":339}," \"python\"\n",[312,161138,161139],{"class":314,"line":171},[312,161140,4205],{"emptyLinePlaceholder":1881},[312,161142,161143,161145,161148,161150],{"class":314,"line":274},[312,161144,4830],{"class":1436},[312,161146,161147],{"class":324}," ch ",[312,161149,27839],{"class":1436},[312,161151,159854],{"class":324},[312,161153,161154,161156],{"class":314,"line":298},[312,161155,33094],{"class":488},[312,161157,161158],{"class":324},"(ch)\n",[24,161160,161161],{},"遍历列表：",[303,161163,161165],{"className":32174,"code":161164,"language":32176,"meta":308,"style":308},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[119,161166,161167,161189,161193,161203],{"__ignoreMap":308},[312,161168,161169,161172,161174,161176,161178,161180,161182,161184,161187],{"class":314,"line":315},[312,161170,161171],{"class":324},"students ",[312,161173,336],{"class":1436},[312,161175,54012],{"class":324},[312,161177,151343],{"class":339},[312,161179,733],{"class":324},[312,161181,152391],{"class":339},[312,161183,733],{"class":324},[312,161185,161186],{"class":339},"\"小刚\"",[312,161188,35041],{"class":324},[312,161190,161191],{"class":314,"line":171},[312,161192,4205],{"emptyLinePlaceholder":1881},[312,161194,161195,161197,161199,161201],{"class":314,"line":274},[312,161196,4830],{"class":1436},[312,161198,153592],{"class":324},[312,161200,27839],{"class":1436},[312,161202,153597],{"class":324},[312,161204,161205,161207],{"class":314,"line":298},[312,161206,33094],{"class":488},[312,161208,151497],{"class":324},[14,161210,161212],{"id":161211},"_47-range函数","4.7 range函数",[24,161214,161215,161218],{},[119,161216,161217],{},"range()"," 用于生成整数序列。",[303,161220,161222],{"className":32174,"code":161221,"language":32176,"meta":308,"style":308},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[119,161223,161224,161238,161256],{"__ignoreMap":308},[312,161225,161226,161228,161230,161232,161235],{"class":314,"line":315},[312,161227,35211],{"class":488},[312,161229,1576],{"class":324},[312,161231,2264],{"class":488},[312,161233,161234],{"class":324},")          ",[312,161236,161237],{"class":318},"# 0,1,2,3,4\n",[312,161239,161240,161242,161244,161246,161248,161250,161253],{"class":314,"line":171},[312,161241,35211],{"class":488},[312,161243,1576],{"class":324},[312,161245,1433],{"class":488},[312,161247,733],{"class":324},[312,161249,2264],{"class":488},[312,161251,161252],{"class":324},")       ",[312,161254,161255],{"class":318},"# 1,2,3,4\n",[312,161257,161258,161260,161262,161264,161266,161268,161270,161272,161274],{"class":314,"line":274},[312,161259,35211],{"class":488},[312,161261,1576],{"class":324},[312,161263,1433],{"class":488},[312,161265,733],{"class":324},[312,161267,2391],{"class":488},[312,161269,733],{"class":324},[312,161271,2027],{"class":488},[312,161273,157116],{"class":324},[312,161275,161276],{"class":318},"# 1,3,5,7,9\n",[24,161278,161279,161280,26414],{},"配合 ",[119,161281,4830],{},[303,161283,161285],{"className":32174,"code":161284,"language":32176,"meta":308,"style":308},"for i in range(1, 6):\n    print(i)\n",[119,161286,161287,161307],{"__ignoreMap":308},[312,161288,161289,161291,161293,161295,161297,161299,161301,161303,161305],{"class":314,"line":315},[312,161290,4830],{"class":1436},[312,161292,11241],{"class":324},[312,161294,27839],{"class":1436},[312,161296,34238],{"class":488},[312,161298,1576],{"class":324},[312,161300,1433],{"class":488},[312,161302,733],{"class":324},[312,161304,2289],{"class":488},[312,161306,32582],{"class":324},[312,161308,161309,161311],{"class":314,"line":171},[312,161310,33094],{"class":488},[312,161312,160685],{"class":324},[24,161314,10828,161315,161317],{},[119,161316,35211],{}," 的结束值不包含在内。",[14,161319,161321],{"id":161320},"_48-for循环求和","4.8 for循环求和",[303,161323,161325],{"className":32174,"code":161324,"language":32176,"meta":308,"style":308},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[119,161326,161327,161335,161339,161359,161367,161371],{"__ignoreMap":308},[312,161328,161329,161331,161333],{"class":314,"line":315},[312,161330,158715],{"class":324},[312,161332,336],{"class":1436},[312,161334,49128],{"class":488},[312,161336,161337],{"class":314,"line":171},[312,161338,4205],{"emptyLinePlaceholder":1881},[312,161340,161341,161343,161345,161347,161349,161351,161353,161355,161357],{"class":314,"line":274},[312,161342,4830],{"class":1436},[312,161344,11241],{"class":324},[312,161346,27839],{"class":1436},[312,161348,34238],{"class":488},[312,161350,1576],{"class":324},[312,161352,1433],{"class":488},[312,161354,733],{"class":324},[312,161356,2282],{"class":488},[312,161358,32582],{"class":324},[312,161360,161361,161363,161365],{"class":314,"line":298},[312,161362,160762],{"class":324},[312,161364,11280],{"class":1436},[312,161366,160767],{"class":324},[312,161368,161369],{"class":314,"line":974},[312,161370,4205],{"emptyLinePlaceholder":1881},[312,161372,161373,161375],{"class":314,"line":980},[312,161374,32211],{"class":488},[312,161376,160786],{"class":324},[24,161378,161379],{},"求偶数和：",[303,161381,161383],{"className":32174,"code":161382,"language":32176,"meta":308,"style":308},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[119,161384,161385,161393,161397,161417,161433,161442,161446],{"__ignoreMap":308},[312,161386,161387,161389,161391],{"class":314,"line":315},[312,161388,158715],{"class":324},[312,161390,336],{"class":1436},[312,161392,49128],{"class":488},[312,161394,161395],{"class":314,"line":171},[312,161396,4205],{"emptyLinePlaceholder":1881},[312,161398,161399,161401,161403,161405,161407,161409,161411,161413,161415],{"class":314,"line":274},[312,161400,4830],{"class":1436},[312,161402,11241],{"class":324},[312,161404,27839],{"class":1436},[312,161406,34238],{"class":488},[312,161408,1576],{"class":324},[312,161410,1433],{"class":488},[312,161412,733],{"class":324},[312,161414,2282],{"class":488},[312,161416,32582],{"class":324},[312,161418,161419,161421,161423,161425,161427,161429,161431],{"class":314,"line":298},[312,161420,4906],{"class":1436},[312,161422,11241],{"class":324},[312,161424,2273],{"class":1436},[312,161426,16556],{"class":488},[312,161428,103328],{"class":1436},[312,161430,5898],{"class":488},[312,161432,5544],{"class":324},[312,161434,161435,161438,161440],{"class":314,"line":974},[312,161436,161437],{"class":324},"        total ",[312,161439,11280],{"class":1436},[312,161441,160767],{"class":324},[312,161443,161444],{"class":314,"line":980},[312,161445,4205],{"emptyLinePlaceholder":1881},[312,161447,161448,161450],{"class":314,"line":997},[312,161449,32211],{"class":488},[312,161451,160786],{"class":324},[24,161453,161454],{},"也可以：",[303,161456,161458],{"className":32174,"code":161457,"language":32176,"meta":308,"style":308},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[119,161459,161460,161468,161472,161496,161504,161508],{"__ignoreMap":308},[312,161461,161462,161464,161466],{"class":314,"line":315},[312,161463,158715],{"class":324},[312,161465,336],{"class":1436},[312,161467,49128],{"class":488},[312,161469,161470],{"class":314,"line":171},[312,161471,4205],{"emptyLinePlaceholder":1881},[312,161473,161474,161476,161478,161480,161482,161484,161486,161488,161490,161492,161494],{"class":314,"line":274},[312,161475,4830],{"class":1436},[312,161477,11241],{"class":324},[312,161479,27839],{"class":1436},[312,161481,34238],{"class":488},[312,161483,1576],{"class":324},[312,161485,2027],{"class":488},[312,161487,733],{"class":324},[312,161489,2282],{"class":488},[312,161491,733],{"class":324},[312,161493,2027],{"class":488},[312,161495,32582],{"class":324},[312,161497,161498,161500,161502],{"class":314,"line":298},[312,161499,160762],{"class":324},[312,161501,11280],{"class":1436},[312,161503,160767],{"class":324},[312,161505,161506],{"class":314,"line":974},[312,161507,4205],{"emptyLinePlaceholder":1881},[312,161509,161510,161512],{"class":314,"line":980},[312,161511,32211],{"class":488},[312,161513,160786],{"class":324},[14,161515,161517],{"id":161516},"_49-循环嵌套","4.9 循环嵌套",[24,161519,161520],{},"嵌套循环就是循环里面再写循环。",[303,161522,161524],{"className":32174,"code":161523,"language":32176,"meta":308,"style":308},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[119,161525,161526,161546,161566],{"__ignoreMap":308},[312,161527,161528,161530,161532,161534,161536,161538,161540,161542,161544],{"class":314,"line":315},[312,161529,4830],{"class":1436},[312,161531,11241],{"class":324},[312,161533,27839],{"class":1436},[312,161535,34238],{"class":488},[312,161537,1576],{"class":324},[312,161539,1433],{"class":488},[312,161541,733],{"class":324},[312,161543,2238],{"class":488},[312,161545,32582],{"class":324},[312,161547,161548,161550,161552,161554,161556,161558,161560,161562,161564],{"class":314,"line":171},[312,161549,5006],{"class":1436},[312,161551,11303],{"class":324},[312,161553,27839],{"class":1436},[312,161555,34238],{"class":488},[312,161557,1576],{"class":324},[312,161559,1433],{"class":488},[312,161561,733],{"class":324},[312,161563,2238],{"class":488},[312,161565,32582],{"class":324},[312,161567,161568,161570,161572,161574,161577,161579,161581,161583,161586,161588,161590,161592,161594],{"class":314,"line":274},[312,161569,34246],{"class":488},[312,161571,1576],{"class":324},[312,161573,2003],{"class":1436},[312,161575,161576],{"class":339},"\"i=",[312,161578,2840],{"class":488},[312,161580,2386],{"class":324},[312,161582,2888],{"class":488},[312,161584,161585],{"class":339},", j=",[312,161587,2840],{"class":488},[312,161589,2412],{"class":324},[312,161591,2888],{"class":488},[312,161593,2196],{"class":339},[312,161595,1959],{"class":324},[24,161597,161598],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161600,161602],{"id":161601},"_410-九九乘法表","4.10 九九乘法表",[303,161604,161606],{"className":32174,"code":161605,"language":32176,"meta":308,"style":308},"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",[119,161607,161608,161628,161651,161703],{"__ignoreMap":308},[312,161609,161610,161612,161614,161616,161618,161620,161622,161624,161626],{"class":314,"line":315},[312,161611,4830],{"class":1436},[312,161613,11241],{"class":324},[312,161615,27839],{"class":1436},[312,161617,34238],{"class":488},[312,161619,1576],{"class":324},[312,161621,1433],{"class":488},[312,161623,733],{"class":324},[312,161625,2391],{"class":488},[312,161627,32582],{"class":324},[312,161629,161630,161632,161634,161636,161638,161640,161642,161645,161647,161649],{"class":314,"line":171},[312,161631,5006],{"class":1436},[312,161633,11303],{"class":324},[312,161635,27839],{"class":1436},[312,161637,34238],{"class":488},[312,161639,1576],{"class":324},[312,161641,1433],{"class":488},[312,161643,161644],{"class":324},", i ",[312,161646,2426],{"class":1436},[312,161648,26914],{"class":488},[312,161650,32582],{"class":324},[312,161652,161653,161655,161657,161659,161661,161663,161665,161667,161669,161671,161673,161675,161677,161679,161681,161683,161685,161687,161689,161691,161693,161695,161697,161699,161701],{"class":314,"line":274},[312,161654,34246],{"class":488},[312,161656,1576],{"class":324},[312,161658,2003],{"class":1436},[312,161660,2196],{"class":339},[312,161662,2840],{"class":488},[312,161664,2412],{"class":324},[312,161666,2888],{"class":488},[312,161668,2400],{"class":339},[312,161670,2840],{"class":488},[312,161672,2386],{"class":324},[312,161674,2888],{"class":488},[312,161676,336],{"class":339},[312,161678,2840],{"class":488},[312,161680,101918],{"class":324},[312,161682,2400],{"class":1436},[312,161684,5215],{"class":324},[312,161686,2888],{"class":488},[312,161688,2196],{"class":339},[312,161690,733],{"class":324},[312,161692,47596],{"class":1579},[312,161694,336],{"class":1436},[312,161696,2196],{"class":339},[312,161698,3042],{"class":488},[312,161700,2196],{"class":339},[312,161702,1959],{"class":324},[312,161704,161705,161707],{"class":314,"line":298},[312,161706,33094],{"class":488},[312,161708,3781],{"class":324},[24,161710,161711],{},"关键点：",[140,161713,161714,161720,161726,161732],{},[143,161715,161716,161717,161719],{},"外层 ",[119,161718,2386],{}," 控制行。",[143,161721,161722,161723,161725],{},"内层 ",[119,161724,2412],{}," 控制列。",[143,161727,161728,161729,161731],{},"每行结束后用 ",[119,161730,147927],{}," 换行。",[143,161733,161734,161737],{},[119,161735,161736],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161739,161741],{"id":161740},"_411-循环else","4.11 循环else",[24,161743,161744,161745,161747,161748,161750,161751,161753],{},"Python 的循环可以带 ",[119,161746,3507],{},"。当循环正常结束时执行 ",[119,161749,3507],{},"，如果被 ",[119,161752,3858],{}," 打断，则不执行。",[303,161755,161757],{"className":32174,"code":161756,"language":32176,"meta":308,"style":308},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[119,161758,161759,161779,161791,161802,161806,161812],{"__ignoreMap":308},[312,161760,161761,161763,161765,161767,161769,161771,161773,161775,161777],{"class":314,"line":315},[312,161762,4830],{"class":1436},[312,161764,11241],{"class":324},[312,161766,27839],{"class":1436},[312,161768,34238],{"class":488},[312,161770,1576],{"class":324},[312,161772,1433],{"class":488},[312,161774,733],{"class":324},[312,161776,2289],{"class":488},[312,161778,32582],{"class":324},[312,161780,161781,161783,161785,161787,161789],{"class":314,"line":171},[312,161782,4906],{"class":1436},[312,161784,11241],{"class":324},[312,161786,4754],{"class":1436},[312,161788,3843],{"class":488},[312,161790,5544],{"class":324},[312,161792,161793,161795,161797,161800],{"class":314,"line":274},[312,161794,34246],{"class":488},[312,161796,1576],{"class":324},[312,161798,161799],{"class":339},"\"找到了\"",[312,161801,1959],{"class":324},[312,161803,161804],{"class":314,"line":298},[312,161805,33422],{"class":1436},[312,161807,161808,161810],{"class":314,"line":974},[312,161809,3507],{"class":1436},[312,161811,5544],{"class":324},[312,161813,161814,161816,161818,161821],{"class":314,"line":980},[312,161815,33094],{"class":488},[312,161817,1576],{"class":324},[312,161819,161820],{"class":339},"\"没找到\"",[312,161822,1959],{"class":324},[24,161824,161825],{},"常用于搜索。",[303,161827,161829],{"className":32174,"code":161828,"language":32176,"meta":308,"style":308},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[119,161830,161831,161852,161861,161865,161877,161888,161898,161902,161908],{"__ignoreMap":308},[312,161832,161833,161836,161838,161840,161842,161844,161846,161848,161850],{"class":314,"line":315},[312,161834,161835],{"class":324},"names ",[312,161837,336],{"class":1436},[312,161839,54012],{"class":324},[312,161841,151343],{"class":339},[312,161843,733],{"class":324},[312,161845,152391],{"class":339},[312,161847,733],{"class":324},[312,161849,161186],{"class":339},[312,161851,35041],{"class":324},[312,161853,161854,161856,161858],{"class":314,"line":171},[312,161855,113347],{"class":324},[312,161857,336],{"class":1436},[312,161859,161860],{"class":339}," \"小李\"\n",[312,161862,161863],{"class":314,"line":274},[312,161864,4205],{"emptyLinePlaceholder":1881},[312,161866,161867,161869,161872,161874],{"class":314,"line":298},[312,161868,4830],{"class":1436},[312,161870,161871],{"class":324}," name ",[312,161873,27839],{"class":1436},[312,161875,161876],{"class":324}," names:\n",[312,161878,161879,161881,161883,161885],{"class":314,"line":974},[312,161880,4906],{"class":1436},[312,161882,161871],{"class":324},[312,161884,4754],{"class":1436},[312,161886,161887],{"class":324}," target:\n",[312,161889,161890,161892,161894,161896],{"class":314,"line":980},[312,161891,34246],{"class":488},[312,161893,1576],{"class":324},[312,161895,161799],{"class":339},[312,161897,1959],{"class":324},[312,161899,161900],{"class":314,"line":997},[312,161901,33422],{"class":1436},[312,161903,161904,161906],{"class":314,"line":1003},[312,161905,3507],{"class":1436},[312,161907,5544],{"class":324},[312,161909,161910,161912,161914,161916],{"class":314,"line":1020},[312,161911,33094],{"class":488},[312,161913,1576],{"class":324},[312,161915,161820],{"class":339},[312,161917,1959],{"class":324},[14,161919,161921],{"id":161920},"_412-小案例登录重试","4.12 小案例：登录重试",[24,161923,125060],{},[140,161925,161926,161929,161932],{},[143,161927,161928],{},"用户最多输入 3 次密码。",[143,161930,161931],{},"密码正确则登录成功。",[143,161933,161934],{},"3 次都错误则锁定账号。",[24,161936,11838],{},[303,161938,161940],{"className":32174,"code":161939,"language":32176,"meta":308,"style":308},"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",[119,161941,161942,161952,161956,161972,161988,161992,162004,162015,162019,162025,162050,162056],{"__ignoreMap":308},[312,161943,161944,161947,161949],{"class":314,"line":315},[312,161945,161946],{"class":324},"password ",[312,161948,336],{"class":1436},[312,161950,161951],{"class":339}," \"123456\"\n",[312,161953,161954],{"class":314,"line":171},[312,161955,4205],{"emptyLinePlaceholder":1881},[312,161957,161958,161960,161962,161964,161966,161968,161970],{"class":314,"line":274},[312,161959,4830],{"class":1436},[312,161961,11241],{"class":324},[312,161963,27839],{"class":1436},[312,161965,34238],{"class":488},[312,161967,1576],{"class":324},[312,161969,2021],{"class":488},[312,161971,32582],{"class":324},[312,161973,161974,161977,161979,161981,161983,161986],{"class":314,"line":298},[312,161975,161976],{"class":324},"    user_password ",[312,161978,336],{"class":1436},[312,161980,62387],{"class":488},[312,161982,1576],{"class":324},[312,161984,161985],{"class":339},"\"请输入密码:\"",[312,161987,1959],{"class":324},[312,161989,161990],{"class":314,"line":974},[312,161991,4205],{"emptyLinePlaceholder":1881},[312,161993,161994,161996,161999,162001],{"class":314,"line":980},[312,161995,4906],{"class":1436},[312,161997,161998],{"class":324}," user_password ",[312,162000,4754],{"class":1436},[312,162002,162003],{"class":324}," password:\n",[312,162005,162006,162008,162010,162013],{"class":314,"line":997},[312,162007,34246],{"class":488},[312,162009,1576],{"class":324},[312,162011,162012],{"class":339},"\"登录成功\"",[312,162014,1959],{"class":324},[312,162016,162017],{"class":314,"line":1003},[312,162018,33422],{"class":1436},[312,162020,162021,162023],{"class":314,"line":1020},[312,162022,159477],{"class":1436},[312,162024,5544],{"class":324},[312,162026,162027,162029,162031,162033,162036,162039,162041,162043,162045,162048],{"class":314,"line":1026},[312,162028,34246],{"class":488},[312,162030,1576],{"class":324},[312,162032,2003],{"class":1436},[312,162034,162035],{"class":339},"\"密码错误，还剩",[312,162037,162038],{"class":488},"{2",[312,162040,54057],{"class":1436},[312,162042,4837],{"class":324},[312,162044,2888],{"class":488},[312,162046,162047],{"class":339},"次机会\"",[312,162049,1959],{"class":324},[312,162051,162052,162054],{"class":314,"line":3418},[312,162053,3507],{"class":1436},[312,162055,5544],{"class":324},[312,162057,162058,162060,162062,162065],{"class":314,"line":3423},[312,162059,33094],{"class":488},[312,162061,1576],{"class":324},[312,162063,162064],{"class":339},"\"账号已锁定\"",[312,162066,1959],{"class":324},[14,162068,162070],{"id":162069},"_413-小案例菜单程序","4.13 小案例：菜单程序",[303,162072,162074],{"className":32174,"code":162073,"language":32176,"meta":308,"style":308},"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",[119,162075,162076,162084,162095,162106,162117,162128,162139,162143,162158,162162,162174,162185,162197,162208,162220,162231,162243,162253,162257,162263],{"__ignoreMap":308},[312,162077,162078,162080,162082],{"class":314,"line":315},[312,162079,110432],{"class":1436},[312,162081,97062],{"class":488},[312,162083,5544],{"class":324},[312,162085,162086,162088,162090,162093],{"class":314,"line":171},[312,162087,33094],{"class":488},[312,162089,1576],{"class":324},[312,162091,162092],{"class":339},"\"====== 菜单 ======\"",[312,162094,1959],{"class":324},[312,162096,162097,162099,162101,162104],{"class":314,"line":274},[312,162098,33094],{"class":488},[312,162100,1576],{"class":324},[312,162102,162103],{"class":339},"\"1. 查询余额\"",[312,162105,1959],{"class":324},[312,162107,162108,162110,162112,162115],{"class":314,"line":298},[312,162109,33094],{"class":488},[312,162111,1576],{"class":324},[312,162113,162114],{"class":339},"\"2. 存款\"",[312,162116,1959],{"class":324},[312,162118,162119,162121,162123,162126],{"class":314,"line":974},[312,162120,33094],{"class":488},[312,162122,1576],{"class":324},[312,162124,162125],{"class":339},"\"3. 取款\"",[312,162127,1959],{"class":324},[312,162129,162130,162132,162134,162137],{"class":314,"line":980},[312,162131,33094],{"class":488},[312,162133,1576],{"class":324},[312,162135,162136],{"class":339},"\"0. 退出\"",[312,162138,1959],{"class":324},[312,162140,162141],{"class":314,"line":997},[312,162142,4205],{"emptyLinePlaceholder":1881},[312,162144,162145,162148,162150,162152,162154,162156],{"class":314,"line":1003},[312,162146,162147],{"class":324},"    choice ",[312,162149,336],{"class":1436},[312,162151,62387],{"class":488},[312,162153,1576],{"class":324},[312,162155,154528],{"class":339},[312,162157,1959],{"class":324},[312,162159,162160],{"class":314,"line":1020},[312,162161,4205],{"emptyLinePlaceholder":1881},[312,162163,162164,162166,162168,162170,162172],{"class":314,"line":1026},[312,162165,4906],{"class":1436},[312,162167,154541],{"class":324},[312,162169,4754],{"class":1436},[312,162171,154546],{"class":339},[312,162173,5544],{"class":324},[312,162175,162176,162178,162180,162183],{"class":314,"line":3418},[312,162177,34246],{"class":488},[312,162179,1576],{"class":324},[312,162181,162182],{"class":339},"\"余额为1000元\"",[312,162184,1959],{"class":324},[312,162186,162187,162189,162191,162193,162195],{"class":314,"line":3423},[312,162188,41088],{"class":1436},[312,162190,154541],{"class":324},[312,162192,4754],{"class":1436},[312,162194,154565],{"class":339},[312,162196,5544],{"class":324},[312,162198,162199,162201,162203,162206],{"class":314,"line":3429},[312,162200,34246],{"class":488},[312,162202,1576],{"class":324},[312,162204,162205],{"class":339},"\"存款功能\"",[312,162207,1959],{"class":324},[312,162209,162210,162212,162214,162216,162218],{"class":314,"line":3434},[312,162211,41088],{"class":1436},[312,162213,154541],{"class":324},[312,162215,4754],{"class":1436},[312,162217,154583],{"class":339},[312,162219,5544],{"class":324},[312,162221,162222,162224,162226,162229],{"class":314,"line":3448},[312,162223,34246],{"class":488},[312,162225,1576],{"class":324},[312,162227,162228],{"class":339},"\"取款功能\"",[312,162230,1959],{"class":324},[312,162232,162233,162235,162237,162239,162241],{"class":314,"line":3453},[312,162234,41088],{"class":1436},[312,162236,154541],{"class":324},[312,162238,4754],{"class":1436},[312,162240,154637],{"class":339},[312,162242,5544],{"class":324},[312,162244,162245,162247,162249,162251],{"class":314,"line":3459},[312,162246,34246],{"class":488},[312,162248,1576],{"class":324},[312,162250,154648],{"class":339},[312,162252,1959],{"class":324},[312,162254,162255],{"class":314,"line":3480},[312,162256,33422],{"class":1436},[312,162258,162259,162261],{"class":314,"line":3485},[312,162260,159477],{"class":1436},[312,162262,5544],{"class":324},[312,162264,162265,162267,162269,162271],{"class":314,"line":3499},[312,162266,34246],{"class":488},[312,162268,1576],{"class":324},[312,162270,154669],{"class":339},[312,162272,1959],{"class":324},[24,162274,162275,162276,162278,162279,30181],{},"菜单类程序通常使用 ",[119,162277,160977],{},"，用户选择退出时 ",[119,162280,3858],{},[14,162282,162284],{"id":162283},"_414-易错点","4.14 易错点",[140,162286,162287,162292,162298,162306,162312],{},[143,162288,162289,162291],{},[119,162290,110432],{}," 循环必须更新控制变量。",[143,162293,162294,162297],{},[119,162295,162296],{},"range(1, 10)"," 不包含 10。",[143,162299,162300,162302,162303,162305],{},[119,162301,3858],{}," 结束整个循环，",[119,162304,156127],{}," 只跳过本轮。",[143,162307,162308,162309,162311],{},"嵌套循环中，",[119,162310,3858],{}," 只跳出当前所在的一层循环。",[143,162313,162314],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162316,162318],{"id":162317},"_415-本章练习","4.15 本章练习",[140,162320,162321,162324,162327,162330,162333],{},[143,162322,162323],{},"输出 1 到 100。",[143,162325,162326],{},"计算 1 到 100 的偶数和。",[143,162328,162329],{},"输出 100 以内能被 3 和 5 同时整除的数。",[143,162331,162332],{},"编写猜数字游戏，限制最多猜 7 次。",[143,162334,162335],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1856,162337,162338],{},"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":308,"searchDepth":171,"depth":171,"links":162340},[162341,162342,162343,162344,162345,162349,162350,162351,162352,162353,162354,162355,162356,162357,162358],{"id":160597,"depth":171,"text":160598},{"id":160627,"depth":171,"text":160628},{"id":160716,"depth":171,"text":160717},{"id":160810,"depth":171,"text":160811},{"id":160984,"depth":171,"text":160985,"children":162346},[162347,162348],{"id":160988,"depth":274,"text":160989},{"id":161052,"depth":274,"text":161053},{"id":161116,"depth":171,"text":161117},{"id":161211,"depth":171,"text":161212},{"id":161320,"depth":171,"text":161321},{"id":161516,"depth":171,"text":161517},{"id":161601,"depth":171,"text":161602},{"id":161740,"depth":171,"text":161741},{"id":161920,"depth":171,"text":161921},{"id":162069,"depth":171,"text":162070},{"id":162283,"depth":171,"text":162284},{"id":162317,"depth":171,"text":162318},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160589,"description":1878},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":162365,"title":162366,"body":162367,"description":1878,"extension":1879,"meta":164372,"navigation":1881,"path":164373,"seo":164374,"stem":164375,"__hash__":164376},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162368,"toc":164352},[162369,162372,162376,162379,162382,162396,162399,162413,162417,162419,162438,162440,162487,162489,162503,162507,162581,162584,162588,162591,162650,162658,162661,162714,162717,162721,162726,162781,162789,162839,162843,162848,162856,162955,162961,162965,162970,162973,162984,163025,163038,163042,163045,163081,163084,163097,163100,163160,163164,163168,163171,163222,163226,163229,163276,163282,163348,163351,163355,163358,163474,163477,163481,163484,163590,163594,163597,163635,163638,163680,163683,163743,163746,163750,164214,164217,164221,164248,164254,164315,164319,164349],[10,162370,162366],{"id":162371},"_5-函数基础",[14,162373,162375],{"id":162374},"_51-为什么需要函数","5.1 为什么需要函数",[24,162377,162378],{},"函数用于封装一段可以重复使用的代码。",[24,162380,162381],{},"不使用函数的问题：",[140,162383,162384,162387,162390,162393],{},[143,162385,162386],{},"重复代码多。",[143,162388,162389],{},"修改逻辑时容易漏改。",[143,162391,162392],{},"主流程不清晰。",[143,162394,162395],{},"程序越写越长，难以维护。",[24,162397,162398],{},"使用函数后的好处：",[140,162400,162401,162404,162407,162410],{},[143,162402,162403],{},"提高复用性。",[143,162405,162406],{},"提高可读性。",[143,162408,162409],{},"便于调试。",[143,162411,162412],{},"便于分工。",[14,162414,162416],{"id":162415},"_52-函数定义","5.2 函数定义",[24,162418,6986],{},[303,162420,162422],{"className":32174,"code":162421,"language":32176,"meta":308,"style":308},"def 函数名():\n    函数体\n",[119,162423,162424,162433],{"__ignoreMap":308},[312,162425,162426,162428,162431],{"class":314,"line":315},[312,162427,33742],{"class":1436},[312,162429,162430],{"class":332}," 函数名",[312,162432,33748],{"class":324},[312,162434,162435],{"class":314,"line":171},[312,162436,162437],{"class":324},"    函数体\n",[24,162439,16936],{},[303,162441,162443],{"className":32174,"code":162442,"language":32176,"meta":308,"style":308},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[119,162444,162445,162454,162464,162474,162478,162482],{"__ignoreMap":308},[312,162446,162447,162449,162452],{"class":314,"line":315},[312,162448,33742],{"class":1436},[312,162450,162451],{"class":332}," say_hello",[312,162453,33748],{"class":324},[312,162455,162456,162458,162460,162462],{"class":314,"line":171},[312,162457,33094],{"class":488},[312,162459,1576],{"class":324},[312,162461,7648],{"class":339},[312,162463,1959],{"class":324},[312,162465,162466,162468,162470,162472],{"class":314,"line":274},[312,162467,33094],{"class":488},[312,162469,1576],{"class":324},[312,162471,148094],{"class":339},[312,162473,1959],{"class":324},[312,162475,162476],{"class":314,"line":298},[312,162477,4205],{"emptyLinePlaceholder":1881},[312,162479,162480],{"class":314,"line":974},[312,162481,4205],{"emptyLinePlaceholder":1881},[312,162483,162484],{"class":314,"line":980},[312,162485,162486],{"class":324},"say_hello()\n",[24,162488,10828],{},[140,162490,162491,162494,162497,162500],{},[143,162492,162493],{},"函数必须先定义，再调用。",[143,162495,162496],{},"函数名遵循变量命名规则。",[143,162498,162499],{},"函数体需要缩进。",[143,162501,162502],{},"函数不调用就不会执行。",[14,162504,162506],{"id":162505},"_53-函数调用","5.3 函数调用",[303,162508,162510],{"className":32174,"code":162509,"language":32176,"meta":308,"style":308},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[119,162511,162512,162521,162532,162543,162554,162564,162568,162572,162577],{"__ignoreMap":308},[312,162513,162514,162516,162519],{"class":314,"line":315},[312,162515,33742],{"class":1436},[312,162517,162518],{"class":332}," print_menu",[312,162520,33748],{"class":324},[312,162522,162523,162525,162527,162530],{"class":314,"line":171},[312,162524,33094],{"class":488},[312,162526,1576],{"class":324},[312,162528,162529],{"class":339},"\"1. 查询\"",[312,162531,1959],{"class":324},[312,162533,162534,162536,162538,162541],{"class":314,"line":274},[312,162535,33094],{"class":488},[312,162537,1576],{"class":324},[312,162539,162540],{"class":339},"\"2. 添加\"",[312,162542,1959],{"class":324},[312,162544,162545,162547,162549,162552],{"class":314,"line":298},[312,162546,33094],{"class":488},[312,162548,1576],{"class":324},[312,162550,162551],{"class":339},"\"3. 删除\"",[312,162553,1959],{"class":324},[312,162555,162556,162558,162560,162562],{"class":314,"line":974},[312,162557,33094],{"class":488},[312,162559,1576],{"class":324},[312,162561,162136],{"class":339},[312,162563,1959],{"class":324},[312,162565,162566],{"class":314,"line":980},[312,162567,4205],{"emptyLinePlaceholder":1881},[312,162569,162570],{"class":314,"line":997},[312,162571,4205],{"emptyLinePlaceholder":1881},[312,162573,162574],{"class":314,"line":1003},[312,162575,162576],{"class":324},"print_menu()\n",[312,162578,162579],{"class":314,"line":1020},[312,162580,162576],{"class":324},[24,162582,162583],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162585,162587],{"id":162586},"_54-参数","5.4 参数",[24,162589,162590],{},"参数用于向函数传递数据。",[303,162592,162594],{"className":32174,"code":162593,"language":32176,"meta":308,"style":308},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[119,162595,162596,162605,162625,162629,162633,162642],{"__ignoreMap":308},[312,162597,162598,162600,162602],{"class":314,"line":315},[312,162599,33742],{"class":1436},[312,162601,162451],{"class":332},[312,162603,162604],{"class":324},"(name):\n",[312,162606,162607,162609,162611,162613,162615,162617,162619,162621,162623],{"class":314,"line":171},[312,162608,33094],{"class":488},[312,162610,1576],{"class":324},[312,162612,2003],{"class":1436},[312,162614,158509],{"class":339},[312,162616,2840],{"class":488},[312,162618,81581],{"class":324},[312,162620,2888],{"class":488},[312,162622,2196],{"class":339},[312,162624,1959],{"class":324},[312,162626,162627],{"class":314,"line":274},[312,162628,4205],{"emptyLinePlaceholder":1881},[312,162630,162631],{"class":314,"line":298},[312,162632,4205],{"emptyLinePlaceholder":1881},[312,162634,162635,162638,162640],{"class":314,"line":974},[312,162636,162637],{"class":324},"say_hello(",[312,162639,151343],{"class":339},[312,162641,1959],{"class":324},[312,162643,162644,162646,162648],{"class":314,"line":980},[312,162645,162637],{"class":324},[312,162647,152391],{"class":339},[312,162649,1959],{"class":324},[24,162651,162652,162654,162655,162657],{},[119,162653,81581],{}," 是形参，",[119,162656,151343],{}," 是实参。",[24,162659,162660],{},"多个参数：",[303,162662,162664],{"className":32174,"code":162663,"language":32176,"meta":308,"style":308},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[119,162665,162666,162674,162687,162693,162697,162701],{"__ignoreMap":308},[312,162667,162668,162670,162672],{"class":314,"line":315},[312,162669,33742],{"class":1436},[312,162671,7014],{"class":332},[312,162673,152548],{"class":324},[312,162675,162676,162679,162681,162683,162685],{"class":314,"line":171},[312,162677,162678],{"class":324},"    result ",[312,162680,336],{"class":1436},[312,162682,12672],{"class":324},[312,162684,2426],{"class":1436},[312,162686,152559],{"class":324},[312,162688,162689,162691],{"class":314,"line":274},[312,162690,33094],{"class":488},[312,162692,78357],{"class":324},[312,162694,162695],{"class":314,"line":298},[312,162696,4205],{"emptyLinePlaceholder":1881},[312,162698,162699],{"class":314,"line":974},[312,162700,4205],{"emptyLinePlaceholder":1881},[312,162702,162703,162706,162708,162710,162712],{"class":314,"line":980},[312,162704,162705],{"class":324},"add(",[312,162707,2391],{"class":488},[312,162709,733],{"class":324},[312,162711,1546],{"class":488},[312,162713,1959],{"class":324},[24,162715,162716],{},"调用时参数数量必须匹配。",[14,162718,162720],{"id":162719},"_55-返回值","5.5 返回值",[24,162722,162723,162725],{},[119,162724,18846],{}," 用于把函数内部的结果返回给调用者。",[303,162727,162729],{"className":32174,"code":162728,"language":32176,"meta":308,"style":308},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[119,162730,162731,162739,162749,162753,162757,162775],{"__ignoreMap":308},[312,162732,162733,162735,162737],{"class":314,"line":315},[312,162734,33742],{"class":1436},[312,162736,7014],{"class":332},[312,162738,152548],{"class":324},[312,162740,162741,162743,162745,162747],{"class":314,"line":171},[312,162742,5895],{"class":1436},[312,162744,12672],{"class":324},[312,162746,2426],{"class":1436},[312,162748,152559],{"class":324},[312,162750,162751],{"class":314,"line":274},[312,162752,4205],{"emptyLinePlaceholder":1881},[312,162754,162755],{"class":314,"line":298},[312,162756,4205],{"emptyLinePlaceholder":1881},[312,162758,162759,162762,162764,162767,162769,162771,162773],{"class":314,"line":974},[312,162760,162761],{"class":324},"result ",[312,162763,336],{"class":1436},[312,162765,162766],{"class":324}," add(",[312,162768,2391],{"class":488},[312,162770,733],{"class":324},[312,162772,1546],{"class":488},[312,162774,1959],{"class":324},[312,162776,162777,162779],{"class":314,"line":980},[312,162778,32211],{"class":488},[312,162780,78357],{"class":324},[24,162782,162783,162784,162786,162787,30181],{},"如果函数没有写 ",[119,162785,18846],{},"，默认返回 ",[119,162788,97456],{},[303,162790,162792],{"className":32174,"code":162791,"language":32176,"meta":308,"style":308},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[119,162793,162794,162802,162812,162816,162820,162829],{"__ignoreMap":308},[312,162795,162796,162798,162800],{"class":314,"line":315},[312,162797,33742],{"class":1436},[312,162799,162451],{"class":332},[312,162801,33748],{"class":324},[312,162803,162804,162806,162808,162810],{"class":314,"line":171},[312,162805,33094],{"class":488},[312,162807,1576],{"class":324},[312,162809,7648],{"class":339},[312,162811,1959],{"class":324},[312,162813,162814],{"class":314,"line":274},[312,162815,4205],{"emptyLinePlaceholder":1881},[312,162817,162818],{"class":314,"line":298},[312,162819,4205],{"emptyLinePlaceholder":1881},[312,162821,162822,162824,162826],{"class":314,"line":974},[312,162823,162761],{"class":324},[312,162825,336],{"class":1436},[312,162827,162828],{"class":324}," say_hello()\n",[312,162830,162831,162833,162836],{"class":314,"line":980},[312,162832,32211],{"class":488},[312,162834,162835],{"class":324},"(result)  ",[312,162837,162838],{"class":318},"# None\n",[14,162840,162842],{"id":162841},"_56-return的作用","5.6 return的作用",[24,162844,162845,162847],{},[119,162846,18846],{}," 有两个作用：",[140,162849,162850,162853],{},[143,162851,162852],{},"返回结果。",[143,162854,162855],{},"结束函数。",[303,162857,162859],{"className":32174,"code":162858,"language":32176,"meta":308,"style":308},"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",[119,162860,162861,162871,162883,162890,162894,162906,162913,162917,162924,162928,162932,162943],{"__ignoreMap":308},[312,162862,162863,162865,162868],{"class":314,"line":315},[312,162864,33742],{"class":1436},[312,162866,162867],{"class":332}," check_age",[312,162869,162870],{"class":324},"(age):\n",[312,162872,162873,162875,162877,162879,162881],{"class":314,"line":171},[312,162874,4906],{"class":1436},[312,162876,17507],{"class":324},[312,162878,325],{"class":1436},[312,162880,5898],{"class":488},[312,162882,5544],{"class":324},[312,162884,162885,162887],{"class":314,"line":274},[312,162886,16553],{"class":1436},[312,162888,162889],{"class":339}," \"年龄不合法\"\n",[312,162891,162892],{"class":314,"line":298},[312,162893,4205],{"emptyLinePlaceholder":1881},[312,162895,162896,162898,162900,162902,162904],{"class":314,"line":974},[312,162897,4906],{"class":1436},[312,162899,17507],{"class":324},[312,162901,3516],{"class":1436},[312,162903,157740],{"class":488},[312,162905,5544],{"class":324},[312,162907,162908,162910],{"class":314,"line":980},[312,162909,16553],{"class":1436},[312,162911,162912],{"class":339}," \"成年人\"\n",[312,162914,162915],{"class":314,"line":997},[312,162916,4205],{"emptyLinePlaceholder":1881},[312,162918,162919,162921],{"class":314,"line":1003},[312,162920,5895],{"class":1436},[312,162922,162923],{"class":339}," \"未成年人\"\n",[312,162925,162926],{"class":314,"line":1020},[312,162927,4205],{"emptyLinePlaceholder":1881},[312,162929,162930],{"class":314,"line":1026},[312,162931,4205],{"emptyLinePlaceholder":1881},[312,162933,162934,162936,162939,162941],{"class":314,"line":3418},[312,162935,32211],{"class":488},[312,162937,162938],{"class":324},"(check_age(",[312,162940,1546],{"class":488},[312,162942,32293],{"class":324},[312,162944,162945,162947,162949,162951,162953],{"class":314,"line":3423},[312,162946,32211],{"class":488},[312,162948,162938],{"class":324},[312,162950,2477],{"class":1436},[312,162952,1433],{"class":488},[312,162954,32293],{"class":324},[24,162956,162957,162958,162960],{},"函数执行到 ",[119,162959,18846],{}," 后，后面的代码不会继续执行。",[14,162962,162964],{"id":162963},"_57-none","5.7 None",[24,162966,162967,162969],{},[119,162968,97456],{}," 表示空值或没有结果。",[24,162971,162972],{},"常见使用场景：",[140,162974,162975,162978,162981],{},[143,162976,162977],{},"函数没有返回值。",[143,162979,162980],{},"变量暂时没有具体值。",[143,162982,162983],{},"表示查询不到结果。",[303,162985,162987],{"className":32174,"code":162986,"language":32176,"meta":308,"style":308},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[119,162988,162989,162997,163001,163014],{"__ignoreMap":308},[312,162990,162991,162993,162995],{"class":314,"line":315},[312,162992,162761],{"class":324},[312,162994,336],{"class":1436},[312,162996,153627],{"class":488},[312,162998,162999],{"class":314,"line":171},[312,163000,4205],{"emptyLinePlaceholder":1881},[312,163002,163003,163005,163008,163010,163012],{"class":314,"line":274},[312,163004,3338],{"class":1436},[312,163006,163007],{"class":324}," result ",[312,163009,40722],{"class":1436},[312,163011,40728],{"class":488},[312,163013,5544],{"class":324},[312,163015,163016,163018,163020,163023],{"class":314,"line":298},[312,163017,33094],{"class":488},[312,163019,1576],{"class":324},[312,163021,163022],{"class":339},"\"没有数据\"",[312,163024,1959],{"class":324},[24,163026,163027,163028,163030,163031,163034,163035,30181],{},"判断 ",[119,163029,97456],{}," 推荐使用 ",[119,163032,163033],{},"is None","，不要写成 ",[119,163036,163037],{},"== None",[14,163039,163041],{"id":163040},"_58-函数文档字符串","5.8 函数文档字符串",[24,163043,163044],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[303,163046,163048],{"className":32174,"code":163047,"language":32176,"meta":308,"style":308},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[119,163049,163050,163060,163065],{"__ignoreMap":308},[312,163051,163052,163054,163057],{"class":314,"line":315},[312,163053,33742],{"class":1436},[312,163055,163056],{"class":332}," calculate_bmi",[312,163058,163059],{"class":324},"(weight, height):\n",[312,163061,163062],{"class":314,"line":171},[312,163063,163064],{"class":339},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[312,163066,163067,163069,163072,163074,163077,163079],{"class":314,"line":274},[312,163068,5895],{"class":1436},[312,163070,163071],{"class":324}," weight ",[312,163073,2529],{"class":1436},[312,163075,163076],{"class":324}," height ",[312,163078,12464],{"class":1436},[312,163080,49518],{"class":488},[24,163082,163083],{},"查看说明：",[303,163085,163087],{"className":32174,"code":163086,"language":32176,"meta":308,"style":308},"help(calculate_bmi)\n",[119,163088,163089],{"__ignoreMap":308},[312,163090,163091,163094],{"class":314,"line":315},[312,163092,163093],{"class":488},"help",[312,163095,163096],{"class":324},"(calculate_bmi)\n",[24,163098,163099],{},"较完整的写法：",[303,163101,163103],{"className":32174,"code":163102,"language":32176,"meta":308,"style":308},"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",[119,163104,163105,163113,163118,163123,163127,163132,163137,163142,163146],{"__ignoreMap":308},[312,163106,163107,163109,163111],{"class":314,"line":315},[312,163108,33742],{"class":1436},[312,163110,163056],{"class":332},[312,163112,163059],{"class":324},[312,163114,163115],{"class":314,"line":171},[312,163116,163117],{"class":339},"    \"\"\"\n",[312,163119,163120],{"class":314,"line":274},[312,163121,163122],{"class":339},"    计算BMI。\n",[312,163124,163125],{"class":314,"line":298},[312,163126,4205],{"emptyLinePlaceholder":1881},[312,163128,163129],{"class":314,"line":974},[312,163130,163131],{"class":339},"    :param weight: 体重，单位kg\n",[312,163133,163134],{"class":314,"line":980},[312,163135,163136],{"class":339},"    :param height: 身高，单位m\n",[312,163138,163139],{"class":314,"line":997},[312,163140,163141],{"class":339},"    :return: BMI数值\n",[312,163143,163144],{"class":314,"line":1003},[312,163145,163117],{"class":339},[312,163147,163148,163150,163152,163154,163156,163158],{"class":314,"line":1020},[312,163149,5895],{"class":1436},[312,163151,163071],{"class":324},[312,163153,2529],{"class":1436},[312,163155,163076],{"class":324},[312,163157,12464],{"class":1436},[312,163159,49518],{"class":488},[14,163161,163163],{"id":163162},"_59-变量作用域","5.9 变量作用域",[69,163165,163167],{"id":163166},"_591-局部变量","5.9.1 局部变量",[24,163169,163170],{},"在函数内部定义的变量，只能在函数内部使用。",[303,163172,163174],{"className":32174,"code":163173,"language":32176,"meta":308,"style":308},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[119,163175,163176,163185,163193,163199,163203,163207,163212],{"__ignoreMap":308},[312,163177,163178,163180,163183],{"class":314,"line":315},[312,163179,33742],{"class":1436},[312,163181,163182],{"class":332}," test",[312,163184,33748],{"class":324},[312,163186,163187,163189,163191],{"class":314,"line":171},[312,163188,47388],{"class":324},[312,163190,336],{"class":1436},[312,163192,60210],{"class":488},[312,163194,163195,163197],{"class":314,"line":274},[312,163196,33094],{"class":488},[312,163198,1966],{"class":324},[312,163200,163201],{"class":314,"line":298},[312,163202,4205],{"emptyLinePlaceholder":1881},[312,163204,163205],{"class":314,"line":974},[312,163206,4205],{"emptyLinePlaceholder":1881},[312,163208,163209],{"class":314,"line":980},[312,163210,163211],{"class":324},"test()\n",[312,163213,163214,163216,163219],{"class":314,"line":997},[312,163215,32211],{"class":488},[312,163217,163218],{"class":324},"(num)  ",[312,163220,163221],{"class":318},"# 报错\n",[69,163223,163225],{"id":163224},"_592-全局变量","5.9.2 全局变量",[24,163227,163228],{},"在函数外部定义的变量，可以在函数内部读取。",[303,163230,163232],{"className":32174,"code":163231,"language":32176,"meta":308,"style":308},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[119,163233,163234,163242,163246,163250,163258,163264,163268,163272],{"__ignoreMap":308},[312,163235,163236,163238,163240],{"class":314,"line":315},[312,163237,147991],{"class":324},[312,163239,336],{"class":1436},[312,163241,150808],{"class":339},[312,163243,163244],{"class":314,"line":171},[312,163245,4205],{"emptyLinePlaceholder":1881},[312,163247,163248],{"class":314,"line":274},[312,163249,4205],{"emptyLinePlaceholder":1881},[312,163251,163252,163254,163256],{"class":314,"line":298},[312,163253,33742],{"class":1436},[312,163255,162451],{"class":332},[312,163257,33748],{"class":324},[312,163259,163260,163262],{"class":314,"line":974},[312,163261,33094],{"class":488},[312,163263,152115],{"class":324},[312,163265,163266],{"class":314,"line":980},[312,163267,4205],{"emptyLinePlaceholder":1881},[312,163269,163270],{"class":314,"line":997},[312,163271,4205],{"emptyLinePlaceholder":1881},[312,163273,163274],{"class":314,"line":1003},[312,163275,162486],{"class":324},[24,163277,163278,163279,30181],{},"如果要在函数内部修改全局变量，需要 ",[119,163280,163281],{},"global",[303,163283,163285],{"className":32174,"code":163284,"language":32176,"meta":308,"style":308},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[119,163286,163287,163295,163299,163303,163312,163320,163328,163332,163336,163341],{"__ignoreMap":308},[312,163288,163289,163291,163293],{"class":314,"line":315},[312,163290,148146],{"class":324},[312,163292,336],{"class":1436},[312,163294,49128],{"class":488},[312,163296,163297],{"class":314,"line":171},[312,163298,4205],{"emptyLinePlaceholder":1881},[312,163300,163301],{"class":314,"line":274},[312,163302,4205],{"emptyLinePlaceholder":1881},[312,163304,163305,163307,163310],{"class":314,"line":298},[312,163306,33742],{"class":1436},[312,163308,163309],{"class":332}," add_count",[312,163311,33748],{"class":324},[312,163313,163314,163317],{"class":314,"line":974},[312,163315,163316],{"class":1436},"    global",[312,163318,163319],{"class":324}," count\n",[312,163321,163322,163324,163326],{"class":314,"line":980},[312,163323,160888],{"class":324},[312,163325,11280],{"class":1436},[312,163327,57481],{"class":488},[312,163329,163330],{"class":314,"line":997},[312,163331,4205],{"emptyLinePlaceholder":1881},[312,163333,163334],{"class":314,"line":1003},[312,163335,4205],{"emptyLinePlaceholder":1881},[312,163337,163338],{"class":314,"line":1020},[312,163339,163340],{"class":324},"add_count()\n",[312,163342,163343,163345],{"class":314,"line":1026},[312,163344,32211],{"class":488},[312,163346,163347],{"class":324},"(count)\n",[24,163349,163350],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,163352,163354],{"id":163353},"_510-函数嵌套调用","5.10 函数嵌套调用",[24,163356,163357],{},"一个函数中可以调用另一个函数。",[303,163359,163361],{"className":32174,"code":163360,"language":32176,"meta":308,"style":308},"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",[119,163362,163363,163372,163386,163390,163394,163403,163408,163428,163449,163453,163457,163461],{"__ignoreMap":308},[312,163364,163365,163367,163370],{"class":314,"line":315},[312,163366,33742],{"class":1436},[312,163368,163369],{"class":332}," print_line",[312,163371,33748],{"class":324},[312,163373,163374,163376,163378,163380,163382,163384],{"class":314,"line":171},[312,163375,33094],{"class":488},[312,163377,1576],{"class":324},[312,163379,34278],{"class":339},[312,163381,8322],{"class":1436},[312,163383,80437],{"class":488},[312,163385,1959],{"class":324},[312,163387,163388],{"class":314,"line":274},[312,163389,4205],{"emptyLinePlaceholder":1881},[312,163391,163392],{"class":314,"line":298},[312,163393,4205],{"emptyLinePlaceholder":1881},[312,163395,163396,163398,163401],{"class":314,"line":974},[312,163397,33742],{"class":1436},[312,163399,163400],{"class":332}," print_info",[312,163402,150830],{"class":324},[312,163404,163405],{"class":314,"line":980},[312,163406,163407],{"class":324},"    print_line()\n",[312,163409,163410,163412,163414,163416,163418,163420,163422,163424,163426],{"class":314,"line":997},[312,163411,33094],{"class":488},[312,163413,1576],{"class":324},[312,163415,2003],{"class":1436},[312,163417,158137],{"class":339},[312,163419,2840],{"class":488},[312,163421,81581],{"class":324},[312,163423,2888],{"class":488},[312,163425,2196],{"class":339},[312,163427,1959],{"class":324},[312,163429,163430,163432,163434,163436,163439,163441,163443,163445,163447],{"class":314,"line":1003},[312,163431,33094],{"class":488},[312,163433,1576],{"class":324},[312,163435,2003],{"class":1436},[312,163437,163438],{"class":339},"\"年龄:",[312,163440,2840],{"class":488},[312,163442,71998],{"class":324},[312,163444,2888],{"class":488},[312,163446,2196],{"class":339},[312,163448,1959],{"class":324},[312,163450,163451],{"class":314,"line":1020},[312,163452,163407],{"class":324},[312,163454,163455],{"class":314,"line":1026},[312,163456,4205],{"emptyLinePlaceholder":1881},[312,163458,163459],{"class":314,"line":3418},[312,163460,4205],{"emptyLinePlaceholder":1881},[312,163462,163463,163466,163468,163470,163472],{"class":314,"line":3423},[312,163464,163465],{"class":324},"print_info(",[312,163467,151343],{"class":339},[312,163469,733],{"class":324},[312,163471,2595],{"class":488},[312,163473,1959],{"class":324},[24,163475,163476],{},"这种方式可以把小功能组合成大功能。",[14,163478,163480],{"id":163479},"_511-参数检查","5.11 参数检查",[24,163482,163483],{},"函数内部可以检查参数是否合法。",[303,163485,163487],{"className":32174,"code":163486,"language":32176,"meta":308,"style":308},"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",[119,163488,163489,163498,163510,163516,163526,163530,163534,163551,163555,163567,163578,163584],{"__ignoreMap":308},[312,163490,163491,163493,163496],{"class":314,"line":315},[312,163492,33742],{"class":1436},[312,163494,163495],{"class":332}," divide",[312,163497,152548],{"class":324},[312,163499,163500,163502,163504,163506,163508],{"class":314,"line":171},[312,163501,4906],{"class":1436},[312,163503,12685],{"class":324},[312,163505,4754],{"class":1436},[312,163507,5898],{"class":488},[312,163509,5544],{"class":324},[312,163511,163512,163514],{"class":314,"line":274},[312,163513,16553],{"class":1436},[312,163515,153627],{"class":488},[312,163517,163518,163520,163522,163524],{"class":314,"line":298},[312,163519,5895],{"class":1436},[312,163521,12672],{"class":324},[312,163523,2529],{"class":1436},[312,163525,152559],{"class":324},[312,163527,163528],{"class":314,"line":974},[312,163529,4205],{"emptyLinePlaceholder":1881},[312,163531,163532],{"class":314,"line":980},[312,163533,4205],{"emptyLinePlaceholder":1881},[312,163535,163536,163538,163540,163543,163545,163547,163549],{"class":314,"line":997},[312,163537,162761],{"class":324},[312,163539,336],{"class":1436},[312,163541,163542],{"class":324}," divide(",[312,163544,2391],{"class":488},[312,163546,733],{"class":324},[312,163548,858],{"class":488},[312,163550,1959],{"class":324},[312,163552,163553],{"class":314,"line":1003},[312,163554,4205],{"emptyLinePlaceholder":1881},[312,163556,163557,163559,163561,163563,163565],{"class":314,"line":1020},[312,163558,3338],{"class":1436},[312,163560,163007],{"class":324},[312,163562,40722],{"class":1436},[312,163564,40728],{"class":488},[312,163566,5544],{"class":324},[312,163568,163569,163571,163573,163576],{"class":314,"line":1026},[312,163570,33094],{"class":488},[312,163572,1576],{"class":324},[312,163574,163575],{"class":339},"\"除数不能为0\"",[312,163577,1959],{"class":324},[312,163579,163580,163582],{"class":314,"line":3418},[312,163581,3507],{"class":1436},[312,163583,5544],{"class":324},[312,163585,163586,163588],{"class":314,"line":3423},[312,163587,33094],{"class":488},[312,163589,78357],{"class":324},[14,163591,163593],{"id":163592},"_512-类型提示","5.12 类型提示",[24,163595,163596],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[303,163598,163600],{"className":32174,"code":163599,"language":32176,"meta":308,"style":308},"def add(a: int, b: int) -> int:\n    return a + b\n",[119,163601,163602,163625],{"__ignoreMap":308},[312,163603,163604,163606,163608,163611,163613,163616,163618,163621,163623],{"class":314,"line":315},[312,163605,33742],{"class":1436},[312,163607,7014],{"class":332},[312,163609,163610],{"class":324},"(a: ",[312,163612,1956],{"class":488},[312,163614,163615],{"class":324},", b: ",[312,163617,1956],{"class":488},[312,163619,163620],{"class":324},") -> ",[312,163622,1956],{"class":488},[312,163624,5544],{"class":324},[312,163626,163627,163629,163631,163633],{"class":314,"line":171},[312,163628,5895],{"class":1436},[312,163630,12672],{"class":324},[312,163632,2426],{"class":1436},[312,163634,152559],{"class":324},[24,163636,163637],{},"字符串参数：",[303,163639,163641],{"className":32174,"code":163640,"language":32176,"meta":308,"style":308},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[119,163642,163643,163660],{"__ignoreMap":308},[312,163644,163645,163647,163649,163652,163654,163656,163658],{"class":314,"line":315},[312,163646,33742],{"class":1436},[312,163648,162451],{"class":332},[312,163650,163651],{"class":324},"(name: ",[312,163653,3110],{"class":488},[312,163655,163620],{"class":324},[312,163657,97456],{"class":488},[312,163659,5544],{"class":324},[312,163661,163662,163664,163666,163668,163670,163672,163674,163676,163678],{"class":314,"line":171},[312,163663,33094],{"class":488},[312,163665,1576],{"class":324},[312,163667,2003],{"class":1436},[312,163669,158509],{"class":339},[312,163671,2840],{"class":488},[312,163673,81581],{"class":324},[312,163675,2888],{"class":488},[312,163677,2196],{"class":339},[312,163679,1959],{"class":324},[24,163681,163682],{},"列表参数：",[303,163684,163686],{"className":32174,"code":163685,"language":32176,"meta":308,"style":308},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[119,163687,163688,163707,163715,163727,163736],{"__ignoreMap":308},[312,163689,163690,163692,163695,163698,163700,163703,163705],{"class":314,"line":315},[312,163691,33742],{"class":1436},[312,163693,163694],{"class":332}," get_total",[312,163696,163697],{"class":324},"(numbers: list[",[312,163699,1956],{"class":488},[312,163701,163702],{"class":324},"]) -> ",[312,163704,1956],{"class":488},[312,163706,5544],{"class":324},[312,163708,163709,163711,163713],{"class":314,"line":171},[312,163710,160762],{"class":324},[312,163712,336],{"class":1436},[312,163714,49128],{"class":488},[312,163716,163717,163719,163722,163724],{"class":314,"line":274},[312,163718,5006],{"class":1436},[312,163720,163721],{"class":324}," number ",[312,163723,27839],{"class":1436},[312,163725,163726],{"class":324}," numbers:\n",[312,163728,163729,163731,163733],{"class":314,"line":298},[312,163730,161437],{"class":324},[312,163732,11280],{"class":1436},[312,163734,163735],{"class":324}," number\n",[312,163737,163738,163740],{"class":314,"line":974},[312,163739,5895],{"class":1436},[312,163741,163742],{"class":324}," total\n",[24,163744,163745],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163747,163749],{"id":163748},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[303,163751,163753],{"className":32174,"code":163752,"language":32176,"meta":308,"style":308},"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",[119,163754,163755,163765,163769,163773,163781,163792,163802,163812,163822,163832,163836,163840,163849,163871,163875,163879,163888,163894,163914,163926,163937,163941,163950,163961,163966,163970,163974,163983,163989,164008,164020,164030,164034,164045,164055,164059,164067,164078,164082,164086,164090,164098,164103,164117,164121,164133,164138,164150,164155,164167,164172,164184,164194,164198,164204],{"__ignoreMap":308},[312,163756,163757,163760,163762],{"class":314,"line":315},[312,163758,163759],{"class":324},"balance ",[312,163761,336],{"class":1436},[312,163763,163764],{"class":488}," 1000\n",[312,163766,163767],{"class":314,"line":171},[312,163768,4205],{"emptyLinePlaceholder":1881},[312,163770,163771],{"class":314,"line":274},[312,163772,4205],{"emptyLinePlaceholder":1881},[312,163774,163775,163777,163779],{"class":314,"line":298},[312,163776,33742],{"class":1436},[312,163778,153488],{"class":332},[312,163780,33748],{"class":324},[312,163782,163783,163785,163787,163790],{"class":314,"line":974},[312,163784,33094],{"class":488},[312,163786,1576],{"class":324},[312,163788,163789],{"class":339},"\"====== ATM ======\"",[312,163791,1959],{"class":324},[312,163793,163794,163796,163798,163800],{"class":314,"line":980},[312,163795,33094],{"class":488},[312,163797,1576],{"class":324},[312,163799,162103],{"class":339},[312,163801,1959],{"class":324},[312,163803,163804,163806,163808,163810],{"class":314,"line":997},[312,163805,33094],{"class":488},[312,163807,1576],{"class":324},[312,163809,162114],{"class":339},[312,163811,1959],{"class":324},[312,163813,163814,163816,163818,163820],{"class":314,"line":1003},[312,163815,33094],{"class":488},[312,163817,1576],{"class":324},[312,163819,162125],{"class":339},[312,163821,1959],{"class":324},[312,163823,163824,163826,163828,163830],{"class":314,"line":1020},[312,163825,33094],{"class":488},[312,163827,1576],{"class":324},[312,163829,162136],{"class":339},[312,163831,1959],{"class":324},[312,163833,163834],{"class":314,"line":1026},[312,163835,4205],{"emptyLinePlaceholder":1881},[312,163837,163838],{"class":314,"line":3418},[312,163839,4205],{"emptyLinePlaceholder":1881},[312,163841,163842,163844,163847],{"class":314,"line":3423},[312,163843,33742],{"class":1436},[312,163845,163846],{"class":332}," show_balance",[312,163848,33748],{"class":324},[312,163850,163851,163853,163855,163857,163860,163862,163865,163867,163869],{"class":314,"line":3429},[312,163852,33094],{"class":488},[312,163854,1576],{"class":324},[312,163856,2003],{"class":1436},[312,163858,163859],{"class":339},"\"当前余额:",[312,163861,2840],{"class":488},[312,163863,163864],{"class":324},"balance",[312,163866,2888],{"class":488},[312,163868,158467],{"class":339},[312,163870,1959],{"class":324},[312,163872,163873],{"class":314,"line":3434},[312,163874,4205],{"emptyLinePlaceholder":1881},[312,163876,163877],{"class":314,"line":3448},[312,163878,4205],{"emptyLinePlaceholder":1881},[312,163880,163881,163883,163886],{"class":314,"line":3453},[312,163882,33742],{"class":1436},[312,163884,163885],{"class":332}," save_money",[312,163887,33748],{"class":324},[312,163889,163890,163892],{"class":314,"line":3459},[312,163891,163316],{"class":1436},[312,163893,151554],{"class":324},[312,163895,163896,163899,163901,163903,163905,163907,163909,163912],{"class":314,"line":3480},[312,163897,163898],{"class":324},"    money ",[312,163900,336],{"class":1436},[312,163902,111566],{"class":488},[312,163904,1576],{"class":324},[312,163906,55605],{"class":488},[312,163908,1576],{"class":324},[312,163910,163911],{"class":339},"\"请输入存款金额:\"",[312,163913,32293],{"class":324},[312,163915,163916,163918,163920,163922,163924],{"class":314,"line":3485},[312,163917,4906],{"class":1436},[312,163919,151597],{"class":324},[312,163921,3394],{"class":1436},[312,163923,5898],{"class":488},[312,163925,5544],{"class":324},[312,163927,163928,163930,163932,163935],{"class":314,"line":3499},[312,163929,34246],{"class":488},[312,163931,1576],{"class":324},[312,163933,163934],{"class":339},"\"金额必须大于0\"",[312,163936,1959],{"class":324},[312,163938,163939],{"class":314,"line":3504},[312,163940,153816],{"class":1436},[312,163942,163943,163946,163948],{"class":314,"line":3533},[312,163944,163945],{"class":324},"    balance ",[312,163947,11280],{"class":1436},[312,163949,151630],{"class":324},[312,163951,163952,163954,163956,163959],{"class":314,"line":3538},[312,163953,33094],{"class":488},[312,163955,1576],{"class":324},[312,163957,163958],{"class":339},"\"存款成功\"",[312,163960,1959],{"class":324},[312,163962,163963],{"class":314,"line":3555},[312,163964,163965],{"class":324},"    show_balance()\n",[312,163967,163968],{"class":314,"line":3560},[312,163969,4205],{"emptyLinePlaceholder":1881},[312,163971,163972],{"class":314,"line":3565},[312,163973,4205],{"emptyLinePlaceholder":1881},[312,163975,163976,163978,163981],{"class":314,"line":3570},[312,163977,33742],{"class":1436},[312,163979,163980],{"class":332}," withdraw_money",[312,163982,33748],{"class":324},[312,163984,163985,163987],{"class":314,"line":3584},[312,163986,163316],{"class":1436},[312,163988,151554],{"class":324},[312,163990,163991,163993,163995,163997,163999,164001,164003,164006],{"class":314,"line":3589},[312,163992,163898],{"class":324},[312,163994,336],{"class":1436},[312,163996,111566],{"class":488},[312,163998,1576],{"class":324},[312,164000,55605],{"class":488},[312,164002,1576],{"class":324},[312,164004,164005],{"class":339},"\"请输入取款金额:\"",[312,164007,32293],{"class":324},[312,164009,164010,164012,164014,164016,164018],{"class":314,"line":4382},[312,164011,4906],{"class":1436},[312,164013,151597],{"class":324},[312,164015,3394],{"class":1436},[312,164017,5898],{"class":488},[312,164019,5544],{"class":324},[312,164021,164022,164024,164026,164028],{"class":314,"line":4396},[312,164023,34246],{"class":488},[312,164025,1576],{"class":324},[312,164027,163934],{"class":339},[312,164029,1959],{"class":324},[312,164031,164032],{"class":314,"line":4404},[312,164033,153816],{"class":1436},[312,164035,164036,164038,164040,164042],{"class":314,"line":4409},[312,164037,4906],{"class":1436},[312,164039,151597],{"class":324},[312,164041,2902],{"class":1436},[312,164043,164044],{"class":324}," balance:\n",[312,164046,164047,164049,164051,164053],{"class":314,"line":4415},[312,164048,34246],{"class":488},[312,164050,1576],{"class":324},[312,164052,151692],{"class":339},[312,164054,1959],{"class":324},[312,164056,164057],{"class":314,"line":4421},[312,164058,153816],{"class":1436},[312,164060,164061,164063,164065],{"class":314,"line":4426},[312,164062,163945],{"class":324},[312,164064,151707],{"class":1436},[312,164066,151630],{"class":324},[312,164068,164069,164071,164073,164076],{"class":314,"line":9751},[312,164070,33094],{"class":488},[312,164072,1576],{"class":324},[312,164074,164075],{"class":339},"\"取款成功\"",[312,164077,1959],{"class":324},[312,164079,164080],{"class":314,"line":9775},[312,164081,163965],{"class":324},[312,164083,164084],{"class":314,"line":9780},[312,164085,4205],{"emptyLinePlaceholder":1881},[312,164087,164088],{"class":314,"line":9786},[312,164089,4205],{"emptyLinePlaceholder":1881},[312,164091,164092,164094,164096],{"class":314,"line":9813},[312,164093,110432],{"class":1436},[312,164095,97062],{"class":488},[312,164097,5544],{"class":324},[312,164099,164100],{"class":314,"line":9818},[312,164101,164102],{"class":324},"    show_menu()\n",[312,164104,164105,164107,164109,164111,164113,164115],{"class":314,"line":9824},[312,164106,162147],{"class":324},[312,164108,336],{"class":1436},[312,164110,62387],{"class":488},[312,164112,1576],{"class":324},[312,164114,154528],{"class":339},[312,164116,1959],{"class":324},[312,164118,164119],{"class":314,"line":9836},[312,164120,4205],{"emptyLinePlaceholder":1881},[312,164122,164123,164125,164127,164129,164131],{"class":314,"line":9848},[312,164124,4906],{"class":1436},[312,164126,154541],{"class":324},[312,164128,4754],{"class":1436},[312,164130,154546],{"class":339},[312,164132,5544],{"class":324},[312,164134,164135],{"class":314,"line":9860},[312,164136,164137],{"class":324},"        show_balance()\n",[312,164139,164140,164142,164144,164146,164148],{"class":314,"line":11519},[312,164141,41088],{"class":1436},[312,164143,154541],{"class":324},[312,164145,4754],{"class":1436},[312,164147,154565],{"class":339},[312,164149,5544],{"class":324},[312,164151,164152],{"class":314,"line":11544},[312,164153,164154],{"class":324},"        save_money()\n",[312,164156,164157,164159,164161,164163,164165],{"class":314,"line":11567},[312,164158,41088],{"class":1436},[312,164160,154541],{"class":324},[312,164162,4754],{"class":1436},[312,164164,154583],{"class":339},[312,164166,5544],{"class":324},[312,164168,164169],{"class":314,"line":11591},[312,164170,164171],{"class":324},"        withdraw_money()\n",[312,164173,164174,164176,164178,164180,164182],{"class":314,"line":11596},[312,164175,41088],{"class":1436},[312,164177,154541],{"class":324},[312,164179,4754],{"class":1436},[312,164181,154637],{"class":339},[312,164183,5544],{"class":324},[312,164185,164186,164188,164190,164192],{"class":314,"line":11601},[312,164187,34246],{"class":488},[312,164189,1576],{"class":324},[312,164191,154648],{"class":339},[312,164193,1959],{"class":324},[312,164195,164196],{"class":314,"line":11606},[312,164197,33422],{"class":1436},[312,164199,164200,164202],{"class":314,"line":11615},[312,164201,159477],{"class":1436},[312,164203,5544],{"class":324},[312,164205,164206,164208,164210,164212],{"class":314,"line":11620},[312,164207,34246],{"class":488},[312,164209,1576],{"class":324},[312,164211,154669],{"class":339},[312,164213,1959],{"class":324},[24,164215,164216],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164218,164220],{"id":164219},"_514-易错点","5.14 易错点",[140,164222,164223,164226,164229,164234,164239,164242],{},[143,164224,164225],{},"函数定义后必须调用才会执行。",[143,164227,164228],{},"函数名后面有括号才是调用。",[143,164230,164231,164233],{},[119,164232,18846],{}," 后面的代码不会执行。",[143,164235,164236,164237,30181],{},"没有返回值的函数默认返回 ",[119,164238,97456],{},[143,164240,164241],{},"局部变量不能在函数外部访问。",[143,164243,164244,164245,164247],{},"不要滥用 ",[119,164246,163281],{},"，更好的方式是让函数返回新值。",[24,164249,164250,164251,164253],{},"例如不用 ",[119,164252,163281],{}," 改写存款：",[303,164255,164257],{"className":32174,"code":164256,"language":32176,"meta":308,"style":308},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[119,164258,164259,164268,164279,164283,164287,164295,164308],{"__ignoreMap":308},[312,164260,164261,164263,164265],{"class":314,"line":315},[312,164262,33742],{"class":1436},[312,164264,163885],{"class":332},[312,164266,164267],{"class":324},"(balance, money):\n",[312,164269,164270,164272,164275,164277],{"class":314,"line":171},[312,164271,5895],{"class":1436},[312,164273,164274],{"class":324}," balance ",[312,164276,2426],{"class":1436},[312,164278,151630],{"class":324},[312,164280,164281],{"class":314,"line":274},[312,164282,4205],{"emptyLinePlaceholder":1881},[312,164284,164285],{"class":314,"line":298},[312,164286,4205],{"emptyLinePlaceholder":1881},[312,164288,164289,164291,164293],{"class":314,"line":974},[312,164290,163759],{"class":324},[312,164292,336],{"class":1436},[312,164294,163764],{"class":488},[312,164296,164297,164299,164301,164304,164306],{"class":314,"line":980},[312,164298,163759],{"class":324},[312,164300,336],{"class":1436},[312,164302,164303],{"class":324}," save_money(balance, ",[312,164305,3528],{"class":488},[312,164307,1959],{"class":324},[312,164309,164310,164312],{"class":314,"line":997},[312,164311,32211],{"class":488},[312,164313,164314],{"class":324},"(balance)\n",[14,164316,164318],{"id":164317},"_515-本章练习","5.15 本章练习",[140,164320,164321,164328,164334,164340,164346],{},[143,164322,164323,164324,164327],{},"定义函数 ",[119,164325,164326],{},"print_student(name, age)","，输出学生信息。",[143,164329,164323,164330,164333],{},[119,164331,164332],{},"get_max(a, b, c)","，返回三个数中的最大值。",[143,164335,164323,164336,164339],{},[119,164337,164338],{},"is_even(num)","，判断一个数是否为偶数。",[143,164341,164323,164342,164345],{},[119,164343,164344],{},"calculate_bmi(weight, height)","，返回 BMI。",[143,164347,164348],{},"把第 4 章的菜单程序拆分成多个函数。",[1856,164350,164351],{},"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":308,"searchDepth":171,"depth":171,"links":164353},[164354,164355,164356,164357,164358,164359,164360,164361,164362,164366,164367,164368,164369,164370,164371],{"id":162374,"depth":171,"text":162375},{"id":162415,"depth":171,"text":162416},{"id":162505,"depth":171,"text":162506},{"id":162586,"depth":171,"text":162587},{"id":162719,"depth":171,"text":162720},{"id":162841,"depth":171,"text":162842},{"id":162963,"depth":171,"text":162964},{"id":163040,"depth":171,"text":163041},{"id":163162,"depth":171,"text":163163,"children":164363},[164364,164365],{"id":163166,"depth":274,"text":163167},{"id":163224,"depth":274,"text":163225},{"id":163353,"depth":171,"text":163354},{"id":163479,"depth":171,"text":163480},{"id":163592,"depth":171,"text":163593},{"id":163748,"depth":171,"text":163749},{"id":164219,"depth":171,"text":164220},{"id":164317,"depth":171,"text":164318},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162366,"description":1878},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164378,"title":164379,"body":164380,"description":1878,"extension":1879,"meta":167424,"navigation":1881,"path":167425,"seo":167426,"stem":167427,"__hash__":167428},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164381,"toc":167405},[164382,164385,164389,164392,164395,164499,164502,164506,164509,164589,164592,164596,164599,164659,164662,164698,164701,164716,164720,164793,164796,164851,164854,164924,164927,165011,165021,165079,165083,165128,165131,165157,165160,165266,165270,165273,165315,165318,165382,165385,165389,165392,165453,165456,165486,165489,165527,165531,165534,165543,165546,165670,165673,165714,165718,165721,165732,165772,165775,165790,165795,165798,165865,165868,165958,165962,165965,166013,166016,166043,166045,166075,166078,166098,166101,166132,166135,166168,166172,166175,166199,166202,166226,166229,166253,166257,166260,166390,166393,166473,166476,166551,166555,166558,166608,166611,166653,166656,166680,166682,166706,166709,166764,166767,166833,166837,166840,166843,166881,166884,166937,166940,166986,166989,167022,167025,167029,167348,167352,167381,167385,167402],[10,164383,164379],{"id":164384},"_6-数据容器",[14,164386,164388],{"id":164387},"_61-什么是数据容器","6.1 什么是数据容器",[24,164390,164391],{},"数据容器用于一次保存多个数据。",[24,164393,164394],{},"常见容器：",[2086,164396,164397,164414],{},[2089,164398,164399],{},[2092,164400,164401,164403,164406,164409,164412],{},[2095,164402,27567],{},[2095,164404,164405],{},"是否有序",[2095,164407,164408],{},"是否可变",[2095,164410,164411],{},"是否允许重复",[2095,164413,29288],{},[2132,164415,164416,164434,164450,164465,164482],{},[2092,164417,164418,164421,164424,164427,164430],{},[2137,164419,164420],{},"list列表",[2137,164422,164423],{},"有序",[2137,164425,164426],{},"可变",[2137,164428,164429],{},"允许",[2137,164431,164432],{},[119,164433,156712],{},[2092,164435,164436,164439,164441,164444,164446],{},[2137,164437,164438],{},"tuple元组",[2137,164440,164423],{},[2137,164442,164443],{},"不可变",[2137,164445,164429],{},[2137,164447,164448],{},[119,164449,156725],{},[2092,164451,164452,164455,164457,164459,164461],{},[2137,164453,164454],{},"str字符串",[2137,164456,164423],{},[2137,164458,164443],{},[2137,164460,164429],{},[2137,164462,164463],{},[119,164464,157335],{},[2092,164466,164467,164470,164473,164475,164478],{},[2137,164468,164469],{},"set集合",[2137,164471,164472],{},"无序",[2137,164474,164426],{},[2137,164476,164477],{},"不允许",[2137,164479,164480],{},[119,164481,156750],{},[2092,164483,164484,164487,164489,164491,164494],{},[2137,164485,164486],{},"dict字典",[2137,164488,164423],{},[2137,164490,164426],{},[2137,164492,164493],{},"key不允许重复",[2137,164495,164496],{},[119,164497,164498],{},"{\"name\": \"小明\"}",[24,164500,164501],{},"Python 3.7 之后，字典保持插入顺序。",[14,164503,164505],{"id":164504},"_62-列表list","6.2 列表list",[24,164507,164508],{},"列表用于保存一组有顺序的数据。",[303,164510,164512],{"className":32174,"code":164511,"language":32176,"meta":308,"style":308},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[119,164513,164514,164534,164559,164580],{"__ignoreMap":308},[312,164515,164516,164518,164520,164522,164524,164526,164528,164530,164532],{"class":314,"line":315},[312,164517,161835],{"class":324},[312,164519,336],{"class":1436},[312,164521,54012],{"class":324},[312,164523,151343],{"class":339},[312,164525,733],{"class":324},[312,164527,152391],{"class":339},[312,164529,733],{"class":324},[312,164531,161186],{"class":339},[312,164533,35041],{"class":324},[312,164535,164536,164539,164541,164543,164545,164547,164549,164551,164553,164555,164557],{"class":314,"line":171},[312,164537,164538],{"class":324},"numbers ",[312,164540,336],{"class":1436},[312,164542,54012],{"class":324},[312,164544,1433],{"class":488},[312,164546,733],{"class":324},[312,164548,2027],{"class":488},[312,164550,733],{"class":324},[312,164552,2021],{"class":488},[312,164554,733],{"class":324},[312,164556,2238],{"class":488},[312,164558,35041],{"class":324},[312,164560,164561,164564,164566,164568,164570,164572,164574,164576,164578],{"class":314,"line":274},[312,164562,164563],{"class":324},"mixed ",[312,164565,336],{"class":1436},[312,164567,54012],{"class":324},[312,164569,151343],{"class":339},[312,164571,733],{"class":324},[312,164573,2595],{"class":488},[312,164575,733],{"class":324},[312,164577,33271],{"class":488},[312,164579,35041],{"class":324},[312,164581,164582,164585,164587],{"class":314,"line":298},[312,164583,164584],{"class":324},"empty ",[312,164586,336],{"class":1436},[312,164588,53624],{"class":324},[24,164590,164591],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164593,164595],{"id":164594},"_63-列表索引","6.3 列表索引",[24,164597,164598],{},"正向索引从 0 开始：",[303,164600,164602],{"className":32174,"code":164601,"language":32176,"meta":308,"style":308},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[119,164603,164604,164624,164628,164639,164649],{"__ignoreMap":308},[312,164605,164606,164608,164610,164612,164614,164616,164618,164620,164622],{"class":314,"line":315},[312,164607,161835],{"class":324},[312,164609,336],{"class":1436},[312,164611,54012],{"class":324},[312,164613,151343],{"class":339},[312,164615,733],{"class":324},[312,164617,152391],{"class":339},[312,164619,733],{"class":324},[312,164621,161186],{"class":339},[312,164623,35041],{"class":324},[312,164625,164626],{"class":314,"line":171},[312,164627,4205],{"emptyLinePlaceholder":1881},[312,164629,164630,164632,164635,164637],{"class":314,"line":274},[312,164631,32211],{"class":488},[312,164633,164634],{"class":324},"(names[",[312,164636,858],{"class":488},[312,164638,6462],{"class":324},[312,164640,164641,164643,164645,164647],{"class":314,"line":298},[312,164642,32211],{"class":488},[312,164644,164634],{"class":324},[312,164646,1433],{"class":488},[312,164648,6462],{"class":324},[312,164650,164651,164653,164655,164657],{"class":314,"line":974},[312,164652,32211],{"class":488},[312,164654,164634],{"class":324},[312,164656,2027],{"class":488},[312,164658,6462],{"class":324},[24,164660,164661],{},"反向索引从 -1 开始：",[303,164663,164665],{"className":32174,"code":164664,"language":32176,"meta":308,"style":308},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[119,164666,164667,164683],{"__ignoreMap":308},[312,164668,164669,164671,164673,164675,164677,164680],{"class":314,"line":315},[312,164670,32211],{"class":488},[312,164672,164634],{"class":324},[312,164674,2477],{"class":1436},[312,164676,1433],{"class":488},[312,164678,164679],{"class":324},"])  ",[312,164681,164682],{"class":318},"# 小刚\n",[312,164684,164685,164687,164689,164691,164693,164695],{"class":314,"line":171},[312,164686,32211],{"class":488},[312,164688,164634],{"class":324},[312,164690,2477],{"class":1436},[312,164692,2027],{"class":488},[312,164694,164679],{"class":324},[312,164696,164697],{"class":318},"# 小红\n",[24,164699,164700],{},"索引越界会报错：",[303,164702,164704],{"className":32174,"code":164703,"language":32176,"meta":308,"style":308},"print(names[3])\n",[119,164705,164706],{"__ignoreMap":308},[312,164707,164708,164710,164712,164714],{"class":314,"line":315},[312,164709,32211],{"class":488},[312,164711,164634],{"class":324},[312,164713,2021],{"class":488},[312,164715,6462],{"class":324},[14,164717,164719],{"id":164718},"_64-列表常用方法","6.4 列表常用方法",[303,164721,164723],{"className":32174,"code":164722,"language":32176,"meta":308,"style":308},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[119,164724,164725,164741,164745,164754,164768,164782,164786],{"__ignoreMap":308},[312,164726,164727,164729,164731,164733,164735,164737,164739],{"class":314,"line":315},[312,164728,161835],{"class":324},[312,164730,336],{"class":1436},[312,164732,54012],{"class":324},[312,164734,151343],{"class":339},[312,164736,733],{"class":324},[312,164738,152391],{"class":339},[312,164740,35041],{"class":324},[312,164742,164743],{"class":314,"line":171},[312,164744,4205],{"emptyLinePlaceholder":1881},[312,164746,164747,164750,164752],{"class":314,"line":274},[312,164748,164749],{"class":324},"names.append(",[312,164751,161186],{"class":339},[312,164753,1959],{"class":324},[312,164755,164756,164759,164761,164763,164766],{"class":314,"line":298},[312,164757,164758],{"class":324},"names.insert(",[312,164760,1433],{"class":488},[312,164762,733],{"class":324},[312,164764,164765],{"class":339},"\"小李\"",[312,164767,1959],{"class":324},[312,164769,164770,164773,164775,164777,164780],{"class":314,"line":974},[312,164771,164772],{"class":324},"names.extend([",[312,164774,10486],{"class":339},[312,164776,733],{"class":324},[312,164778,164779],{"class":339},"\"小赵\"",[312,164781,6462],{"class":324},[312,164783,164784],{"class":314,"line":980},[312,164785,4205],{"emptyLinePlaceholder":1881},[312,164787,164788,164790],{"class":314,"line":997},[312,164789,32211],{"class":488},[312,164791,164792],{"class":324},"(names)\n",[24,164794,164795],{},"删除元素：",[303,164797,164799],{"className":32174,"code":164798,"language":32176,"meta":308,"style":308},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[119,164800,164801,164810,164820,164834,164846],{"__ignoreMap":308},[312,164802,164803,164806,164808],{"class":314,"line":315},[312,164804,164805],{"class":324},"names.remove(",[312,164807,152391],{"class":339},[312,164809,1959],{"class":324},[312,164811,164812,164815,164817],{"class":314,"line":171},[312,164813,164814],{"class":324},"last ",[312,164816,336],{"class":1436},[312,164818,164819],{"class":324}," names.pop()\n",[312,164821,164822,164825,164827,164830,164832],{"class":314,"line":274},[312,164823,164824],{"class":324},"first ",[312,164826,336],{"class":1436},[312,164828,164829],{"class":324}," names.pop(",[312,164831,858],{"class":488},[312,164833,1959],{"class":324},[312,164835,164836,164839,164842,164844],{"class":314,"line":298},[312,164837,164838],{"class":1436},"del",[312,164840,164841],{"class":324}," names[",[312,164843,858],{"class":488},[312,164845,35041],{"class":324},[312,164847,164848],{"class":314,"line":974},[312,164849,164850],{"class":324},"names.clear()\n",[24,164852,164853],{},"查询和统计：",[303,164855,164857],{"className":32174,"code":164856,"language":32176,"meta":308,"style":308},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[119,164858,164859,164887,164891,164902,164913],{"__ignoreMap":308},[312,164860,164861,164863,164865,164867,164869,164871,164873,164875,164877,164879,164881,164883,164885],{"class":314,"line":315},[312,164862,164538],{"class":324},[312,164864,336],{"class":1436},[312,164866,54012],{"class":324},[312,164868,1433],{"class":488},[312,164870,733],{"class":324},[312,164872,2027],{"class":488},[312,164874,733],{"class":324},[312,164876,2021],{"class":488},[312,164878,733],{"class":324},[312,164880,2027],{"class":488},[312,164882,733],{"class":324},[312,164884,2238],{"class":488},[312,164886,35041],{"class":324},[312,164888,164889],{"class":314,"line":171},[312,164890,4205],{"emptyLinePlaceholder":1881},[312,164892,164893,164895,164898,164900],{"class":314,"line":274},[312,164894,32211],{"class":488},[312,164896,164897],{"class":324},"(numbers.index(",[312,164899,2021],{"class":488},[312,164901,32293],{"class":324},[312,164903,164904,164906,164909,164911],{"class":314,"line":298},[312,164905,32211],{"class":488},[312,164907,164908],{"class":324},"(numbers.count(",[312,164910,2027],{"class":488},[312,164912,32293],{"class":324},[312,164914,164915,164917,164919,164921],{"class":314,"line":974},[312,164916,32211],{"class":488},[312,164918,1576],{"class":324},[312,164920,9162],{"class":488},[312,164922,164923],{"class":324},"(numbers))\n",[24,164925,164926],{},"排序：",[303,164928,164930],{"className":32174,"code":164929,"language":32176,"meta":308,"style":308},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[119,164931,164932,164956,164960,164965,164972,164976,164990,164996,165000,165005],{"__ignoreMap":308},[312,164933,164934,164936,164938,164940,164942,164944,164946,164948,164950,164952,164954],{"class":314,"line":315},[312,164935,164538],{"class":324},[312,164937,336],{"class":1436},[312,164939,54012],{"class":324},[312,164941,2021],{"class":488},[312,164943,733],{"class":324},[312,164945,1433],{"class":488},[312,164947,733],{"class":324},[312,164949,2264],{"class":488},[312,164951,733],{"class":324},[312,164953,2027],{"class":488},[312,164955,35041],{"class":324},[312,164957,164958],{"class":314,"line":171},[312,164959,4205],{"emptyLinePlaceholder":1881},[312,164961,164962],{"class":314,"line":274},[312,164963,164964],{"class":324},"numbers.sort()\n",[312,164966,164967,164969],{"class":314,"line":298},[312,164968,32211],{"class":488},[312,164970,164971],{"class":324},"(numbers)\n",[312,164973,164974],{"class":314,"line":974},[312,164975,4205],{"emptyLinePlaceholder":1881},[312,164977,164978,164981,164984,164986,164988],{"class":314,"line":980},[312,164979,164980],{"class":324},"numbers.sort(",[312,164982,164983],{"class":1579},"reverse",[312,164985,336],{"class":1436},[312,164987,33271],{"class":488},[312,164989,1959],{"class":324},[312,164991,164992,164994],{"class":314,"line":997},[312,164993,32211],{"class":488},[312,164995,164971],{"class":324},[312,164997,164998],{"class":314,"line":1003},[312,164999,4205],{"emptyLinePlaceholder":1881},[312,165001,165002],{"class":314,"line":1020},[312,165003,165004],{"class":324},"numbers.reverse()\n",[312,165006,165007,165009],{"class":314,"line":1026},[312,165008,32211],{"class":488},[312,165010,164971],{"class":324},[24,165012,165013,165016,165017,165020],{},[119,165014,165015],{},"sort()"," 会修改原列表，",[119,165018,165019],{},"sorted()"," 返回新列表。",[303,165022,165024],{"className":32174,"code":165023,"language":32176,"meta":308,"style":308},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[119,165025,165026,165050,165062,165066,165072],{"__ignoreMap":308},[312,165027,165028,165030,165032,165034,165036,165038,165040,165042,165044,165046,165048],{"class":314,"line":315},[312,165029,164538],{"class":324},[312,165031,336],{"class":1436},[312,165033,54012],{"class":324},[312,165035,2021],{"class":488},[312,165037,733],{"class":324},[312,165039,1433],{"class":488},[312,165041,733],{"class":324},[312,165043,2264],{"class":488},[312,165045,733],{"class":324},[312,165047,2027],{"class":488},[312,165049,35041],{"class":324},[312,165051,165052,165055,165057,165060],{"class":314,"line":171},[312,165053,165054],{"class":324},"new_numbers ",[312,165056,336],{"class":1436},[312,165058,165059],{"class":488}," sorted",[312,165061,164971],{"class":324},[312,165063,165064],{"class":314,"line":274},[312,165065,4205],{"emptyLinePlaceholder":1881},[312,165067,165068,165070],{"class":314,"line":298},[312,165069,32211],{"class":488},[312,165071,164971],{"class":324},[312,165073,165074,165076],{"class":314,"line":974},[312,165075,32211],{"class":488},[312,165077,165078],{"class":324},"(new_numbers)\n",[14,165080,165082],{"id":165081},"_65-列表遍历","6.5 列表遍历",[303,165084,165086],{"className":32174,"code":165085,"language":32176,"meta":308,"style":308},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[119,165087,165088,165108,165112,165122],{"__ignoreMap":308},[312,165089,165090,165092,165094,165096,165098,165100,165102,165104,165106],{"class":314,"line":315},[312,165091,161835],{"class":324},[312,165093,336],{"class":1436},[312,165095,54012],{"class":324},[312,165097,151343],{"class":339},[312,165099,733],{"class":324},[312,165101,152391],{"class":339},[312,165103,733],{"class":324},[312,165105,161186],{"class":339},[312,165107,35041],{"class":324},[312,165109,165110],{"class":314,"line":171},[312,165111,4205],{"emptyLinePlaceholder":1881},[312,165113,165114,165116,165118,165120],{"class":314,"line":274},[312,165115,4830],{"class":1436},[312,165117,161871],{"class":324},[312,165119,27839],{"class":1436},[312,165121,161876],{"class":324},[312,165123,165124,165126],{"class":314,"line":298},[312,165125,33094],{"class":488},[312,165127,152115],{"class":324},[24,165129,165130],{},"需要索引时：",[303,165132,165134],{"className":32174,"code":165133,"language":32176,"meta":308,"style":308},"for index, name in enumerate(names):\n    print(index, name)\n",[119,165135,165136,165150],{"__ignoreMap":308},[312,165137,165138,165140,165143,165145,165147],{"class":314,"line":315},[312,165139,4830],{"class":1436},[312,165141,165142],{"class":324}," index, name ",[312,165144,27839],{"class":1436},[312,165146,33401],{"class":488},[312,165148,165149],{"class":324},"(names):\n",[312,165151,165152,165154],{"class":314,"line":171},[312,165153,33094],{"class":488},[312,165155,165156],{"class":324},"(index, name)\n",[24,165158,165159],{},"统计总分：",[303,165161,165163],{"className":32174,"code":165162,"language":32176,"meta":308,"style":308},"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",[119,165164,165165,165190,165198,165202,165213,165221,165225,165242],{"__ignoreMap":308},[312,165166,165167,165170,165172,165174,165176,165178,165180,165182,165184,165186,165188],{"class":314,"line":315},[312,165168,165169],{"class":324},"scores ",[312,165171,336],{"class":1436},[312,165173,54012],{"class":324},[312,165175,2806],{"class":488},[312,165177,733],{"class":324},[312,165179,2680],{"class":488},[312,165181,733],{"class":324},[312,165183,2199],{"class":488},[312,165185,733],{"class":324},[312,165187,2506],{"class":488},[312,165189,35041],{"class":324},[312,165191,165192,165194,165196],{"class":314,"line":171},[312,165193,158715],{"class":324},[312,165195,336],{"class":1436},[312,165197,49128],{"class":488},[312,165199,165200],{"class":314,"line":274},[312,165201,4205],{"emptyLinePlaceholder":1881},[312,165203,165204,165206,165208,165210],{"class":314,"line":298},[312,165205,4830],{"class":1436},[312,165207,159238],{"class":324},[312,165209,27839],{"class":1436},[312,165211,165212],{"class":324}," scores:\n",[312,165214,165215,165217,165219],{"class":314,"line":974},[312,165216,160762],{"class":324},[312,165218,11280],{"class":1436},[312,165220,3385],{"class":324},[312,165222,165223],{"class":314,"line":980},[312,165224,4205],{"emptyLinePlaceholder":1881},[312,165226,165227,165230,165232,165235,165237,165239],{"class":314,"line":997},[312,165228,165229],{"class":324},"avg ",[312,165231,336],{"class":1436},[312,165233,165234],{"class":324}," total ",[312,165236,2529],{"class":1436},[312,165238,9135],{"class":488},[312,165240,165241],{"class":324},"(scores)\n",[312,165243,165244,165246,165248,165250,165253,165255,165258,165260,165262,165264],{"class":314,"line":1003},[312,165245,32211],{"class":488},[312,165247,1576],{"class":324},[312,165249,2003],{"class":1436},[312,165251,165252],{"class":339},"\"平均分:",[312,165254,2840],{"class":488},[312,165256,165257],{"class":324},"avg",[312,165259,158614],{"class":1436},[312,165261,2888],{"class":488},[312,165263,2196],{"class":339},[312,165265,1959],{"class":324},[14,165267,165269],{"id":165268},"_66-元组tuple","6.6 元组tuple",[24,165271,165272],{},"元组和列表类似，但不可修改。",[303,165274,165276],{"className":32174,"code":165275,"language":32176,"meta":308,"style":308},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[119,165277,165278,165295],{"__ignoreMap":308},[312,165279,165280,165283,165285,165287,165289,165291,165293],{"class":314,"line":315},[312,165281,165282],{"class":324},"point ",[312,165284,336],{"class":1436},[312,165286,3464],{"class":324},[312,165288,2391],{"class":488},[312,165290,733],{"class":324},[312,165292,1546],{"class":488},[312,165294,1959],{"class":324},[312,165296,165297,165299,165301,165303,165305,165307,165309,165311,165313],{"class":314,"line":171},[312,165298,118083],{"class":324},[312,165300,336],{"class":1436},[312,165302,3464],{"class":324},[312,165304,151343],{"class":339},[312,165306,733],{"class":324},[312,165308,2595],{"class":488},[312,165310,733],{"class":324},[312,165312,71046],{"class":339},[312,165314,1959],{"class":324},[24,165316,165317],{},"单元素元组必须加逗号：",[303,165319,165321],{"className":32174,"code":165320,"language":32176,"meta":308,"style":308},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[119,165322,165323,165337,165350,165354,165368],{"__ignoreMap":308},[312,165324,165325,165328,165330,165332,165334],{"class":314,"line":315},[312,165326,165327],{"class":324},"t1 ",[312,165329,336],{"class":1436},[312,165331,3464],{"class":324},[312,165333,2391],{"class":488},[312,165335,165336],{"class":324},",)\n",[312,165338,165339,165342,165344,165346,165348],{"class":314,"line":171},[312,165340,165341],{"class":324},"t2 ",[312,165343,336],{"class":1436},[312,165345,3464],{"class":324},[312,165347,2391],{"class":488},[312,165349,1959],{"class":324},[312,165351,165352],{"class":314,"line":274},[312,165353,4205],{"emptyLinePlaceholder":1881},[312,165355,165356,165358,165360,165362,165365],{"class":314,"line":298},[312,165357,32211],{"class":488},[312,165359,1576],{"class":324},[312,165361,104876],{"class":488},[312,165363,165364],{"class":324},"(t1))  ",[312,165366,165367],{"class":318},"# tuple\n",[312,165369,165370,165372,165374,165376,165379],{"class":314,"line":974},[312,165371,32211],{"class":488},[312,165373,1576],{"class":324},[312,165375,104876],{"class":488},[312,165377,165378],{"class":324},"(t2))  ",[312,165380,165381],{"class":318},"# int\n",[24,165383,165384],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,165386,165388],{"id":165387},"_67-字符串str","6.7 字符串str",[24,165390,165391],{},"字符串也是序列，可以索引、切片和遍历。",[303,165393,165395],{"className":32174,"code":165394,"language":32176,"meta":308,"style":308},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[119,165396,165397,165405,165409,165420,165432,165436,165447],{"__ignoreMap":308},[312,165398,165399,165401,165403],{"class":314,"line":315},[312,165400,157899],{"class":324},[312,165402,336],{"class":1436},[312,165404,161136],{"class":339},[312,165406,165407],{"class":314,"line":171},[312,165408,4205],{"emptyLinePlaceholder":1881},[312,165410,165411,165413,165416,165418],{"class":314,"line":274},[312,165412,32211],{"class":488},[312,165414,165415],{"class":324},"(text[",[312,165417,858],{"class":488},[312,165419,6462],{"class":324},[312,165421,165422,165424,165426,165428,165430],{"class":314,"line":298},[312,165423,32211],{"class":488},[312,165425,165415],{"class":324},[312,165427,2477],{"class":1436},[312,165429,1433],{"class":488},[312,165431,6462],{"class":324},[312,165433,165434],{"class":314,"line":974},[312,165435,4205],{"emptyLinePlaceholder":1881},[312,165437,165438,165440,165442,165444],{"class":314,"line":980},[312,165439,4830],{"class":1436},[312,165441,161147],{"class":324},[312,165443,27839],{"class":1436},[312,165445,165446],{"class":324}," text:\n",[312,165448,165449,165451],{"class":314,"line":997},[312,165450,33094],{"class":488},[312,165452,161158],{"class":324},[24,165454,165455],{},"字符串不可变：",[303,165457,165459],{"className":32174,"code":165458,"language":32176,"meta":308,"style":308},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[119,165460,165461,165469],{"__ignoreMap":308},[312,165462,165463,165465,165467],{"class":314,"line":315},[312,165464,157899],{"class":324},[312,165466,336],{"class":1436},[312,165468,161136],{"class":339},[312,165470,165471,165474,165476,165478,165480,165483],{"class":314,"line":171},[312,165472,165473],{"class":324},"text[",[312,165475,858],{"class":488},[312,165477,6248],{"class":324},[312,165479,336],{"class":1436},[312,165481,165482],{"class":339}," \"P\"",[312,165484,165485],{"class":318},"  # 报错\n",[24,165487,165488],{},"如果要得到新字符串：",[303,165490,165492],{"className":32174,"code":165491,"language":32176,"meta":308,"style":308},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[119,165493,165494,165502,165520],{"__ignoreMap":308},[312,165495,165496,165498,165500],{"class":314,"line":315},[312,165497,157899],{"class":324},[312,165499,336],{"class":1436},[312,165501,161136],{"class":339},[312,165503,165504,165506,165508,165510,165512,165515,165517],{"class":314,"line":171},[312,165505,157899],{"class":324},[312,165507,336],{"class":1436},[312,165509,165482],{"class":339},[312,165511,47361],{"class":1436},[312,165513,165514],{"class":324}," text[",[312,165516,1433],{"class":488},[312,165518,165519],{"class":324},":]\n",[312,165521,165522,165524],{"class":314,"line":274},[312,165523,32211],{"class":488},[312,165525,165526],{"class":324},"(text)\n",[14,165528,165530],{"id":165529},"_68-切片","6.8 切片",[24,165532,165533],{},"切片用于从序列中取一部分。",[303,165535,165537],{"className":32174,"code":165536,"language":32176,"meta":308,"style":308},"序列[开始:结束:步长]\n",[119,165538,165539],{"__ignoreMap":308},[312,165540,165541],{"class":314,"line":315},[312,165542,165536],{"class":324},[24,165544,165545],{},"结束位置不包含。",[303,165547,165549],{"className":32174,"code":165548,"language":32176,"meta":308,"style":308},"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",[119,165550,165551,165588,165592,165611,165626,165640,165654],{"__ignoreMap":308},[312,165552,165553,165556,165558,165560,165562,165564,165566,165568,165570,165572,165574,165576,165578,165580,165582,165584,165586],{"class":314,"line":315},[312,165554,165555],{"class":324},"nums ",[312,165557,336],{"class":1436},[312,165559,54012],{"class":324},[312,165561,858],{"class":488},[312,165563,733],{"class":324},[312,165565,1433],{"class":488},[312,165567,733],{"class":324},[312,165569,2027],{"class":488},[312,165571,733],{"class":324},[312,165573,2021],{"class":488},[312,165575,733],{"class":324},[312,165577,2238],{"class":488},[312,165579,733],{"class":324},[312,165581,2264],{"class":488},[312,165583,733],{"class":324},[312,165585,2289],{"class":488},[312,165587,35041],{"class":324},[312,165589,165590],{"class":314,"line":171},[312,165591,4205],{"emptyLinePlaceholder":1881},[312,165593,165594,165596,165599,165601,165603,165605,165608],{"class":314,"line":274},[312,165595,32211],{"class":488},[312,165597,165598],{"class":324},"(nums[",[312,165600,1433],{"class":488},[312,165602,2803],{"class":324},[312,165604,2238],{"class":488},[312,165606,165607],{"class":324},"])    ",[312,165609,165610],{"class":318},"# [1, 2, 3]\n",[312,165612,165613,165615,165618,165620,165623],{"class":314,"line":298},[312,165614,32211],{"class":488},[312,165616,165617],{"class":324},"(nums[:",[312,165619,2021],{"class":488},[312,165621,165622],{"class":324},"])     ",[312,165624,165625],{"class":318},"# [0, 1, 2]\n",[312,165627,165628,165630,165632,165634,165637],{"class":314,"line":974},[312,165629,32211],{"class":488},[312,165631,165598],{"class":324},[312,165633,2021],{"class":488},[312,165635,165636],{"class":324},":])     ",[312,165638,165639],{"class":318},"# [3, 4, 5, 6]\n",[312,165641,165642,165644,165647,165649,165651],{"class":314,"line":980},[312,165643,32211],{"class":488},[312,165645,165646],{"class":324},"(nums[::",[312,165648,2027],{"class":488},[312,165650,165607],{"class":324},[312,165652,165653],{"class":318},"# [0, 2, 4, 6]\n",[312,165655,165656,165658,165660,165662,165664,165667],{"class":314,"line":997},[312,165657,32211],{"class":488},[312,165659,165646],{"class":324},[312,165661,2477],{"class":1436},[312,165663,1433],{"class":488},[312,165665,165666],{"class":324},"])   ",[312,165668,165669],{"class":318},"# 反转\n",[24,165671,165672],{},"字符串切片：",[303,165674,165676],{"className":32174,"code":165675,"language":32176,"meta":308,"style":308},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[119,165677,165678,165687,165701],{"__ignoreMap":308},[312,165679,165680,165682,165684],{"class":314,"line":315},[312,165681,157899],{"class":324},[312,165683,336],{"class":1436},[312,165685,165686],{"class":339}," \"abcdef\"\n",[312,165688,165689,165691,165693,165695,165697,165699],{"class":314,"line":171},[312,165690,32211],{"class":488},[312,165692,165415],{"class":324},[312,165694,1433],{"class":488},[312,165696,2803],{"class":324},[312,165698,2238],{"class":488},[312,165700,6462],{"class":324},[312,165702,165703,165705,165708,165710,165712],{"class":314,"line":274},[312,165704,32211],{"class":488},[312,165706,165707],{"class":324},"(text[::",[312,165709,2477],{"class":1436},[312,165711,1433],{"class":488},[312,165713,6462],{"class":324},[14,165715,165717],{"id":165716},"_69-集合set","6.9 集合set",[24,165719,165720],{},"集合特点：",[140,165722,165723,165726,165729],{},[143,165724,165725],{},"无序。",[143,165727,165728],{},"元素不重复。",[143,165730,165731],{},"可以做交集、并集、差集。",[303,165733,165735],{"className":32174,"code":165734,"language":32176,"meta":308,"style":308},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[119,165736,165737,165765],{"__ignoreMap":308},[312,165738,165739,165741,165743,165745,165747,165749,165751,165753,165755,165757,165759,165761,165763],{"class":314,"line":315},[312,165740,165555],{"class":324},[312,165742,336],{"class":1436},[312,165744,6253],{"class":324},[312,165746,1433],{"class":488},[312,165748,733],{"class":324},[312,165750,2027],{"class":488},[312,165752,733],{"class":324},[312,165754,2021],{"class":488},[312,165756,733],{"class":324},[312,165758,2021],{"class":488},[312,165760,733],{"class":324},[312,165762,2238],{"class":488},[312,165764,515],{"class":324},[312,165766,165767,165769],{"class":314,"line":171},[312,165768,32211],{"class":488},[312,165770,165771],{"class":324},"(nums)\n",[24,165773,165774],{},"创建空集合：",[303,165776,165778],{"className":32174,"code":165777,"language":32176,"meta":308,"style":308},"s = set()\n",[119,165779,165780],{"__ignoreMap":308},[312,165781,165782,165784,165786,165788],{"class":314,"line":315},[312,165783,12382],{"class":324},[312,165785,336],{"class":1436},[312,165787,121491],{"class":488},[312,165789,3781],{"class":324},[24,165791,10828,165792,165794],{},[119,165793,34254],{}," 是空字典，不是空集合。",[24,165796,165797],{},"集合常用操作：",[303,165799,165801],{"className":32174,"code":165800,"language":32176,"meta":308,"style":308},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[119,165802,165803,165823,165827,165836,165845,165854],{"__ignoreMap":308},[312,165804,165805,165807,165809,165811,165813,165815,165817,165819,165821],{"class":314,"line":315},[312,165806,12382],{"class":324},[312,165808,336],{"class":1436},[312,165810,6253],{"class":324},[312,165812,1433],{"class":488},[312,165814,733],{"class":324},[312,165816,2027],{"class":488},[312,165818,733],{"class":324},[312,165820,2021],{"class":488},[312,165822,515],{"class":324},[312,165824,165825],{"class":314,"line":171},[312,165826,4205],{"emptyLinePlaceholder":1881},[312,165828,165829,165832,165834],{"class":314,"line":274},[312,165830,165831],{"class":324},"s.add(",[312,165833,2238],{"class":488},[312,165835,1959],{"class":324},[312,165837,165838,165841,165843],{"class":314,"line":298},[312,165839,165840],{"class":324},"s.remove(",[312,165842,2027],{"class":488},[312,165844,1959],{"class":324},[312,165846,165847,165850,165852],{"class":314,"line":974},[312,165848,165849],{"class":324},"s.discard(",[312,165851,2391],{"class":488},[312,165853,1959],{"class":324},[312,165855,165856,165858,165860,165862],{"class":314,"line":980},[312,165857,32211],{"class":488},[312,165859,1576],{"class":324},[312,165861,9162],{"class":488},[312,165863,165864],{"class":324},"(s))\n",[24,165866,165867],{},"交并差：",[303,165869,165871],{"className":32174,"code":165870,"language":32176,"meta":308,"style":308},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[119,165872,165873,165893,165913,165917,165932,165945],{"__ignoreMap":308},[312,165874,165875,165877,165879,165881,165883,165885,165887,165889,165891],{"class":314,"line":315},[312,165876,12722],{"class":324},[312,165878,336],{"class":1436},[312,165880,6253],{"class":324},[312,165882,1433],{"class":488},[312,165884,733],{"class":324},[312,165886,2027],{"class":488},[312,165888,733],{"class":324},[312,165890,2021],{"class":488},[312,165892,515],{"class":324},[312,165894,165895,165897,165899,165901,165903,165905,165907,165909,165911],{"class":314,"line":171},[312,165896,12748],{"class":324},[312,165898,336],{"class":1436},[312,165900,6253],{"class":324},[312,165902,2021],{"class":488},[312,165904,733],{"class":324},[312,165906,2238],{"class":488},[312,165908,733],{"class":324},[312,165910,2264],{"class":488},[312,165912,515],{"class":324},[312,165914,165915],{"class":314,"line":274},[312,165916,4205],{"emptyLinePlaceholder":1881},[312,165918,165919,165921,165924,165926,165929],{"class":314,"line":298},[312,165920,32211],{"class":488},[312,165922,165923],{"class":324},"(a ",[312,165925,2298],{"class":1436},[312,165927,165928],{"class":324}," b)  ",[312,165930,165931],{"class":318},"# 交集\n",[312,165933,165934,165936,165938,165940,165942],{"class":314,"line":974},[312,165935,32211],{"class":488},[312,165937,165923],{"class":324},[312,165939,425],{"class":1436},[312,165941,165928],{"class":324},[312,165943,165944],{"class":318},"# 并集\n",[312,165946,165947,165949,165951,165953,165955],{"class":314,"line":980},[312,165948,32211],{"class":488},[312,165950,165923],{"class":324},[312,165952,2477],{"class":1436},[312,165954,165928],{"class":324},[312,165956,165957],{"class":318},"# 差集\n",[14,165959,165961],{"id":165960},"_610-字典dict","6.10 字典dict",[24,165963,165964],{},"字典通过 key-value 保存数据。",[303,165966,165968],{"className":32174,"code":165967,"language":32176,"meta":308,"style":308},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[119,165969,165970,165978,165988,165999,166009],{"__ignoreMap":308},[312,165971,165972,165974,165976],{"class":314,"line":315},[312,165973,150936],{"class":324},[312,165975,336],{"class":1436},[312,165977,483],{"class":324},[312,165979,165980,165982,165984,165986],{"class":314,"line":171},[312,165981,148475],{"class":339},[312,165983,492],{"class":324},[312,165985,151343],{"class":339},[312,165987,33261],{"class":324},[312,165989,165990,165993,165995,165997],{"class":314,"line":274},[312,165991,165992],{"class":339},"    \"age\"",[312,165994,492],{"class":324},[312,165996,2595],{"class":488},[312,165998,33261],{"class":324},[312,166000,166001,166004,166006],{"class":314,"line":298},[312,166002,166003],{"class":339},"    \"score\"",[312,166005,492],{"class":324},[312,166007,166008],{"class":488},"95\n",[312,166010,166011],{"class":314,"line":974},[312,166012,515],{"class":324},[24,166014,166015],{},"获取值：",[303,166017,166019],{"className":32174,"code":166018,"language":32176,"meta":308,"style":308},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[119,166020,166021,166032],{"__ignoreMap":308},[312,166022,166023,166025,166028,166030],{"class":314,"line":315},[312,166024,32211],{"class":488},[312,166026,166027],{"class":324},"(student[",[312,166029,64457],{"class":339},[312,166031,6462],{"class":324},[312,166033,166034,166036,166039,166041],{"class":314,"line":171},[312,166035,32211],{"class":488},[312,166037,166038],{"class":324},"(student.get(",[312,166040,64457],{"class":339},[312,166042,32293],{"class":324},[24,166044,17189],{},[303,166046,166048],{"className":32174,"code":166047,"language":32176,"meta":308,"style":308},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[119,166049,166050,166063],{"__ignoreMap":308},[312,166051,166052,166054,166057,166060],{"class":314,"line":315},[312,166053,154314],{"class":324},[312,166055,166056],{"class":339},"\"address\"",[312,166058,166059],{"class":324},"]     ",[312,166061,166062],{"class":318},"# key不存在会报错\n",[312,166064,166065,166068,166070,166072],{"class":314,"line":171},[312,166066,166067],{"class":324},"student.get(",[312,166069,166056],{"class":339},[312,166071,1583],{"class":324},[312,166073,166074],{"class":318},"# key不存在返回None\n",[24,166076,166077],{},"设置默认值：",[303,166079,166081],{"className":32174,"code":166080,"language":32176,"meta":308,"style":308},"print(student.get(\"address\", \"未知\"))\n",[119,166082,166083],{"__ignoreMap":308},[312,166084,166085,166087,166089,166091,166093,166096],{"class":314,"line":315},[312,166086,32211],{"class":488},[312,166088,166038],{"class":324},[312,166090,166056],{"class":339},[312,166092,733],{"class":324},[312,166094,166095],{"class":339},"\"未知\"",[312,166097,32293],{"class":324},[24,166099,166100],{},"新增和修改：",[303,166102,166104],{"className":32174,"code":166103,"language":32176,"meta":308,"style":308},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[119,166105,166106,166119],{"__ignoreMap":308},[312,166107,166108,166110,166112,166114,166116],{"class":314,"line":315},[312,166109,154314],{"class":324},[312,166111,70901],{"class":339},[312,166113,6248],{"class":324},[312,166115,336],{"class":1436},[312,166117,166118],{"class":488}," 19\n",[312,166120,166121,166123,166125,166127,166129],{"class":314,"line":171},[312,166122,154314],{"class":324},[312,166124,166056],{"class":339},[312,166126,6248],{"class":324},[312,166128,336],{"class":1436},[312,166130,166131],{"class":339}," \"北京\"\n",[24,166133,166134],{},"删除：",[303,166136,166138],{"className":32174,"code":166137,"language":32176,"meta":308,"style":308},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[119,166139,166140,166153,166163],{"__ignoreMap":308},[312,166141,166142,166144,166146,166149,166151],{"class":314,"line":315},[312,166143,156813],{"class":324},[312,166145,336],{"class":1436},[312,166147,166148],{"class":324}," student.pop(",[312,166150,152927],{"class":339},[312,166152,1959],{"class":324},[312,166154,166155,166157,166159,166161],{"class":314,"line":171},[312,166156,164838],{"class":1436},[312,166158,153604],{"class":324},[312,166160,70901],{"class":339},[312,166162,35041],{"class":324},[312,166164,166165],{"class":314,"line":274},[312,166166,166167],{"class":324},"student.clear()\n",[14,166169,166171],{"id":166170},"_611-字典遍历","6.11 字典遍历",[24,166173,166174],{},"遍历 key：",[303,166176,166178],{"className":32174,"code":166177,"language":32176,"meta":308,"style":308},"for key in student:\n    print(key, student[key])\n",[119,166179,166180,166192],{"__ignoreMap":308},[312,166181,166182,166184,166187,166189],{"class":314,"line":315},[312,166183,4830],{"class":1436},[312,166185,166186],{"class":324}," key ",[312,166188,27839],{"class":1436},[312,166190,166191],{"class":324}," student:\n",[312,166193,166194,166196],{"class":314,"line":171},[312,166195,33094],{"class":488},[312,166197,166198],{"class":324},"(key, student[key])\n",[24,166200,166201],{},"遍历 value：",[303,166203,166205],{"className":32174,"code":166204,"language":32176,"meta":308,"style":308},"for value in student.values():\n    print(value)\n",[119,166206,166207,166219],{"__ignoreMap":308},[312,166208,166209,166211,166214,166216],{"class":314,"line":315},[312,166210,4830],{"class":1436},[312,166212,166213],{"class":324}," value ",[312,166215,27839],{"class":1436},[312,166217,166218],{"class":324}," student.values():\n",[312,166220,166221,166223],{"class":314,"line":171},[312,166222,33094],{"class":488},[312,166224,166225],{"class":324},"(value)\n",[24,166227,166228],{},"遍历 key 和 value：",[303,166230,166232],{"className":32174,"code":166231,"language":32176,"meta":308,"style":308},"for key, value in student.items():\n    print(key, value)\n",[119,166233,166234,166246],{"__ignoreMap":308},[312,166235,166236,166238,166241,166243],{"class":314,"line":315},[312,166237,4830],{"class":1436},[312,166239,166240],{"class":324}," key, value ",[312,166242,27839],{"class":1436},[312,166244,166245],{"class":324}," student.items():\n",[312,166247,166248,166250],{"class":314,"line":171},[312,166249,33094],{"class":488},[312,166251,166252],{"class":324},"(key, value)\n",[14,166254,166256],{"id":166255},"_612-嵌套容器","6.12 嵌套容器",[24,166258,166259],{},"列表中保存字典，是项目中最常见的结构之一。",[303,166261,166263],{"className":32174,"code":166262,"language":32176,"meta":308,"style":308},"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",[119,166264,166265,166273,166301,166329,166357,166361,166365,166375],{"__ignoreMap":308},[312,166266,166267,166269,166271],{"class":314,"line":315},[312,166268,161171],{"class":324},[312,166270,336],{"class":1436},[312,166272,57229],{"class":324},[312,166274,166275,166277,166279,166281,166283,166285,166287,166289,166291,166293,166295,166297,166299],{"class":314,"line":171},[312,166276,149840],{"class":324},[312,166278,64457],{"class":339},[312,166280,492],{"class":324},[312,166282,151343],{"class":339},[312,166284,733],{"class":324},[312,166286,70901],{"class":339},[312,166288,492],{"class":324},[312,166290,2595],{"class":488},[312,166292,733],{"class":324},[312,166294,152927],{"class":339},[312,166296,492],{"class":324},[312,166298,2931],{"class":488},[312,166300,6735],{"class":324},[312,166302,166303,166305,166307,166309,166311,166313,166315,166317,166319,166321,166323,166325,166327],{"class":314,"line":274},[312,166304,149840],{"class":324},[312,166306,64457],{"class":339},[312,166308,492],{"class":324},[312,166310,152391],{"class":339},[312,166312,733],{"class":324},[312,166314,70901],{"class":339},[312,166316,492],{"class":324},[312,166318,2570],{"class":488},[312,166320,733],{"class":324},[312,166322,152927],{"class":339},[312,166324,492],{"class":324},[312,166326,2755],{"class":488},[312,166328,6735],{"class":324},[312,166330,166331,166333,166335,166337,166339,166341,166343,166345,166347,166349,166351,166353,166355],{"class":314,"line":298},[312,166332,149840],{"class":324},[312,166334,64457],{"class":339},[312,166336,492],{"class":324},[312,166338,161186],{"class":339},[312,166340,733],{"class":324},[312,166342,70901],{"class":339},[312,166344,492],{"class":324},[312,166346,2620],{"class":488},[312,166348,733],{"class":324},[312,166350,152927],{"class":339},[312,166352,492],{"class":324},[312,166354,2351],{"class":488},[312,166356,6735],{"class":324},[312,166358,166359],{"class":314,"line":974},[312,166360,35041],{"class":324},[312,166362,166363],{"class":314,"line":980},[312,166364,4205],{"emptyLinePlaceholder":1881},[312,166366,166367,166369,166371,166373],{"class":314,"line":997},[312,166368,4830],{"class":1436},[312,166370,153592],{"class":324},[312,166372,27839],{"class":1436},[312,166374,153597],{"class":324},[312,166376,166377,166379,166381,166383,166386,166388],{"class":314,"line":1003},[312,166378,33094],{"class":488},[312,166380,166027],{"class":324},[312,166382,64457],{"class":339},[312,166384,166385],{"class":324},"], student[",[312,166387,152927],{"class":339},[312,166389,6462],{"class":324},[24,166391,166392],{},"统计平均分：",[303,166394,166396],{"className":32174,"code":166395,"language":32176,"meta":308,"style":308},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[119,166397,166398,166406,166410,166420,166432,166436,166451],{"__ignoreMap":308},[312,166399,166400,166402,166404],{"class":314,"line":315},[312,166401,158715],{"class":324},[312,166403,336],{"class":1436},[312,166405,49128],{"class":488},[312,166407,166408],{"class":314,"line":171},[312,166409,4205],{"emptyLinePlaceholder":1881},[312,166411,166412,166414,166416,166418],{"class":314,"line":274},[312,166413,4830],{"class":1436},[312,166415,153592],{"class":324},[312,166417,27839],{"class":1436},[312,166419,153597],{"class":324},[312,166421,166422,166424,166426,166428,166430],{"class":314,"line":298},[312,166423,160762],{"class":324},[312,166425,11280],{"class":1436},[312,166427,153604],{"class":324},[312,166429,152927],{"class":339},[312,166431,35041],{"class":324},[312,166433,166434],{"class":314,"line":974},[312,166435,4205],{"emptyLinePlaceholder":1881},[312,166437,166438,166440,166442,166444,166446,166448],{"class":314,"line":980},[312,166439,165229],{"class":324},[312,166441,336],{"class":1436},[312,166443,165234],{"class":324},[312,166445,2529],{"class":1436},[312,166447,9135],{"class":488},[312,166449,166450],{"class":324},"(students)\n",[312,166452,166453,166455,166457,166459,166461,166463,166465,166467,166469,166471],{"class":314,"line":997},[312,166454,32211],{"class":488},[312,166456,1576],{"class":324},[312,166458,2003],{"class":1436},[312,166460,165252],{"class":339},[312,166462,2840],{"class":488},[312,166464,165257],{"class":324},[312,166466,158614],{"class":1436},[312,166468,2888],{"class":488},[312,166470,2196],{"class":339},[312,166472,1959],{"class":324},[24,166474,166475],{},"查找学生：",[303,166477,166479],{"className":32174,"code":166478,"language":32176,"meta":308,"style":308},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[119,166480,166481,166496,166500,166510,166524,166530,166534,166540],{"__ignoreMap":308},[312,166482,166483,166485,166487,166489,166491,166494],{"class":314,"line":315},[312,166484,113347],{"class":324},[312,166486,336],{"class":1436},[312,166488,62387],{"class":488},[312,166490,1576],{"class":324},[312,166492,166493],{"class":339},"\"请输入学生姓名:\"",[312,166495,1959],{"class":324},[312,166497,166498],{"class":314,"line":171},[312,166499,4205],{"emptyLinePlaceholder":1881},[312,166501,166502,166504,166506,166508],{"class":314,"line":274},[312,166503,4830],{"class":1436},[312,166505,153592],{"class":324},[312,166507,27839],{"class":1436},[312,166509,153597],{"class":324},[312,166511,166512,166514,166516,166518,166520,166522],{"class":314,"line":298},[312,166513,4906],{"class":1436},[312,166515,153604],{"class":324},[312,166517,64457],{"class":339},[312,166519,6248],{"class":324},[312,166521,4754],{"class":1436},[312,166523,161887],{"class":324},[312,166525,166526,166528],{"class":314,"line":974},[312,166527,34246],{"class":488},[312,166529,151497],{"class":324},[312,166531,166532],{"class":314,"line":980},[312,166533,33422],{"class":1436},[312,166535,166536,166538],{"class":314,"line":997},[312,166537,3507],{"class":1436},[312,166539,5544],{"class":324},[312,166541,166542,166544,166546,166549],{"class":314,"line":1003},[312,166543,33094],{"class":488},[312,166545,1576],{"class":324},[312,166547,166548],{"class":339},"\"没有找到\"",[312,166550,1959],{"class":324},[14,166552,166554],{"id":166553},"_613-容器通用操作","6.13 容器通用操作",[24,166556,166557],{},"长度：",[303,166559,166561],{"className":32174,"code":166560,"language":32176,"meta":308,"style":308},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[119,166562,166563,166582,166592],{"__ignoreMap":308},[312,166564,166565,166567,166570,166572,166574,166576,166578,166580],{"class":314,"line":315},[312,166566,9162],{"class":488},[312,166568,166569],{"class":324},"([",[312,166571,1433],{"class":488},[312,166573,733],{"class":324},[312,166575,2027],{"class":488},[312,166577,733],{"class":324},[312,166579,2021],{"class":488},[312,166581,6462],{"class":324},[312,166583,166584,166586,166588,166590],{"class":314,"line":171},[312,166585,9162],{"class":488},[312,166587,1576],{"class":324},[312,166589,157335],{"class":339},[312,166591,1959],{"class":324},[312,166593,166594,166596,166599,166601,166603,166605],{"class":314,"line":274},[312,166595,9162],{"class":488},[312,166597,166598],{"class":324},"({",[312,166600,64457],{"class":339},[312,166602,492],{"class":324},[312,166604,151343],{"class":339},[312,166606,166607],{"class":324},"})\n",[24,166609,166610],{},"最大最小：",[303,166612,166614],{"className":32174,"code":166613,"language":32176,"meta":308,"style":308},"max([1, 2, 3])\nmin([1, 2, 3])\n",[119,166615,166616,166634],{"__ignoreMap":308},[312,166617,166618,166620,166622,166624,166626,166628,166630,166632],{"class":314,"line":315},[312,166619,7819],{"class":488},[312,166621,166569],{"class":324},[312,166623,1433],{"class":488},[312,166625,733],{"class":324},[312,166627,2027],{"class":488},[312,166629,733],{"class":324},[312,166631,2021],{"class":488},[312,166633,6462],{"class":324},[312,166635,166636,166639,166641,166643,166645,166647,166649,166651],{"class":314,"line":171},[312,166637,166638],{"class":488},"min",[312,166640,166569],{"class":324},[312,166642,1433],{"class":488},[312,166644,733],{"class":324},[312,166646,2027],{"class":488},[312,166648,733],{"class":324},[312,166650,2021],{"class":488},[312,166652,6462],{"class":324},[24,166654,166655],{},"求和：",[303,166657,166659],{"className":32174,"code":166658,"language":32176,"meta":308,"style":308},"sum([1, 2, 3])\n",[119,166660,166661],{"__ignoreMap":308},[312,166662,166663,166666,166668,166670,166672,166674,166676,166678],{"class":314,"line":315},[312,166664,166665],{"class":488},"sum",[312,166667,166569],{"class":324},[312,166669,1433],{"class":488},[312,166671,733],{"class":324},[312,166673,2027],{"class":488},[312,166675,733],{"class":324},[312,166677,2021],{"class":488},[312,166679,6462],{"class":324},[24,166681,164926],{},[303,166683,166685],{"className":32174,"code":166684,"language":32176,"meta":308,"style":308},"sorted([3, 1, 2])\n",[119,166686,166687],{"__ignoreMap":308},[312,166688,166689,166692,166694,166696,166698,166700,166702,166704],{"class":314,"line":315},[312,166690,166691],{"class":488},"sorted",[312,166693,166569],{"class":324},[312,166695,2021],{"class":488},[312,166697,733],{"class":324},[312,166699,1433],{"class":488},[312,166701,733],{"class":324},[312,166703,2027],{"class":488},[312,166705,6462],{"class":324},[24,166707,166708],{},"类型转换：",[303,166710,166712],{"className":32174,"code":166711,"language":32176,"meta":308,"style":308},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[119,166713,166714,166724,166742],{"__ignoreMap":308},[312,166715,166716,166718,166720,166722],{"class":314,"line":315},[312,166717,155525],{"class":488},[312,166719,1576],{"class":324},[312,166721,157335],{"class":339},[312,166723,1959],{"class":324},[312,166725,166726,166728,166730,166732,166734,166736,166738,166740],{"class":314,"line":171},[312,166727,156720],{"class":488},[312,166729,166569],{"class":324},[312,166731,1433],{"class":488},[312,166733,733],{"class":324},[312,166735,2027],{"class":488},[312,166737,733],{"class":324},[312,166739,2021],{"class":488},[312,166741,6462],{"class":324},[312,166743,166744,166746,166748,166750,166752,166754,166756,166758,166760,166762],{"class":314,"line":274},[312,166745,156745],{"class":488},[312,166747,166569],{"class":324},[312,166749,1433],{"class":488},[312,166751,733],{"class":324},[312,166753,1433],{"class":488},[312,166755,733],{"class":324},[312,166757,2027],{"class":488},[312,166759,733],{"class":324},[312,166761,2021],{"class":488},[312,166763,6462],{"class":324},[24,166765,166766],{},"成员判断：",[303,166768,166770],{"className":32174,"code":166769,"language":32176,"meta":308,"style":308},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[119,166771,166772,166789,166813],{"__ignoreMap":308},[312,166773,166774,166776,166778,166781,166784,166787],{"class":314,"line":315},[312,166775,32211],{"class":488},[312,166777,1576],{"class":324},[312,166779,166780],{"class":339},"\"a\"",[312,166782,166783],{"class":1436}," in",[312,166785,166786],{"class":339}," \"abc\"",[312,166788,1959],{"class":324},[312,166790,166791,166793,166795,166797,166799,166801,166803,166805,166807,166809,166811],{"class":314,"line":171},[312,166792,32211],{"class":488},[312,166794,1576],{"class":324},[312,166796,1433],{"class":488},[312,166798,166783],{"class":1436},[312,166800,54012],{"class":324},[312,166802,1433],{"class":488},[312,166804,733],{"class":324},[312,166806,2027],{"class":488},[312,166808,733],{"class":324},[312,166810,2021],{"class":488},[312,166812,6462],{"class":324},[312,166814,166815,166817,166819,166821,166823,166825,166827,166829,166831],{"class":314,"line":274},[312,166816,32211],{"class":488},[312,166818,1576],{"class":324},[312,166820,64457],{"class":339},[312,166822,166783],{"class":1436},[312,166824,6253],{"class":324},[312,166826,64457],{"class":339},[312,166828,492],{"class":324},[312,166830,151343],{"class":339},[312,166832,166607],{"class":324},[14,166834,166836],{"id":166835},"_614-推导式","6.14 推导式",[24,166838,166839],{},"推导式用于快速生成容器。",[24,166841,166842],{},"列表推导式：",[303,166844,166846],{"className":32174,"code":166845,"language":32176,"meta":308,"style":308},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[119,166847,166848,166875],{"__ignoreMap":308},[312,166849,166850,166852,166854,166857,166859,166861,166863,166865,166867,166869,166871,166873],{"class":314,"line":315},[312,166851,165555],{"class":324},[312,166853,336],{"class":1436},[312,166855,166856],{"class":324}," [i ",[312,166858,4830],{"class":1436},[312,166860,11241],{"class":324},[312,166862,27839],{"class":1436},[312,166864,34238],{"class":488},[312,166866,1576],{"class":324},[312,166868,1433],{"class":488},[312,166870,733],{"class":324},[312,166872,2289],{"class":488},[312,166874,99070],{"class":324},[312,166876,166877,166879],{"class":314,"line":171},[312,166878,32211],{"class":488},[312,166880,165771],{"class":324},[24,166882,166883],{},"带条件：",[303,166885,166887],{"className":32174,"code":166886,"language":32176,"meta":308,"style":308},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[119,166888,166889,166930],{"__ignoreMap":308},[312,166890,166891,166894,166896,166898,166900,166902,166904,166906,166908,166910,166912,166914,166916,166918,166920,166922,166924,166926,166928],{"class":314,"line":315},[312,166892,166893],{"class":324},"even_nums ",[312,166895,336],{"class":1436},[312,166897,166856],{"class":324},[312,166899,4830],{"class":1436},[312,166901,11241],{"class":324},[312,166903,27839],{"class":1436},[312,166905,34238],{"class":488},[312,166907,1576],{"class":324},[312,166909,1433],{"class":488},[312,166911,733],{"class":324},[312,166913,2282],{"class":488},[312,166915,1583],{"class":324},[312,166917,3338],{"class":1436},[312,166919,11241],{"class":324},[312,166921,2273],{"class":1436},[312,166923,16556],{"class":488},[312,166925,103328],{"class":1436},[312,166927,5898],{"class":488},[312,166929,35041],{"class":324},[312,166931,166932,166934],{"class":314,"line":171},[312,166933,32211],{"class":488},[312,166935,166936],{"class":324},"(even_nums)\n",[24,166938,166939],{},"字典推导式：",[303,166941,166943],{"className":32174,"code":166942,"language":32176,"meta":308,"style":308},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[119,166944,166945,166979],{"__ignoreMap":308},[312,166946,166947,166950,166952,166955,166957,166959,166962,166964,166966,166968,166970,166972,166974,166976],{"class":314,"line":315},[312,166948,166949],{"class":324},"squares ",[312,166951,336],{"class":1436},[312,166953,166954],{"class":324}," {i: i ",[312,166956,12464],{"class":1436},[312,166958,16556],{"class":488},[312,166960,166961],{"class":1436}," for",[312,166963,11241],{"class":324},[312,166965,27839],{"class":1436},[312,166967,34238],{"class":488},[312,166969,1576],{"class":324},[312,166971,1433],{"class":488},[312,166973,733],{"class":324},[312,166975,2289],{"class":488},[312,166977,166978],{"class":324},")}\n",[312,166980,166981,166983],{"class":314,"line":171},[312,166982,32211],{"class":488},[312,166984,166985],{"class":324},"(squares)\n",[24,166987,166988],{},"集合推导式：",[303,166990,166992],{"className":32174,"code":166991,"language":32176,"meta":308,"style":308},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[119,166993,166994,167015],{"__ignoreMap":308},[312,166995,166996,166999,167001,167004,167006,167008,167010,167013],{"class":314,"line":315},[312,166997,166998],{"class":324},"chars ",[312,167000,336],{"class":1436},[312,167002,167003],{"class":324}," {ch ",[312,167005,4830],{"class":1436},[312,167007,161147],{"class":324},[312,167009,27839],{"class":1436},[312,167011,167012],{"class":339}," \"hello\"",[312,167014,515],{"class":324},[312,167016,167017,167019],{"class":314,"line":171},[312,167018,32211],{"class":488},[312,167020,167021],{"class":324},"(chars)\n",[24,167023,167024],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,167026,167028],{"id":167027},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[303,167030,167032],{"className":32174,"code":167031,"language":32176,"meta":308,"style":308},"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",[119,167033,167034,167042,167062,167082,167102,167122,167126,167130,167138,167152,167161,167165,167175,167187,167191,167211,167220,167224,167240,167245,167249,167263,167267,167289,167325],{"__ignoreMap":308},[312,167035,167036,167038,167040],{"class":314,"line":315},[312,167037,161171],{"class":324},[312,167039,336],{"class":1436},[312,167041,57229],{"class":324},[312,167043,167044,167046,167048,167050,167052,167054,167056,167058,167060],{"class":314,"line":171},[312,167045,149840],{"class":324},[312,167047,64457],{"class":339},[312,167049,492],{"class":324},[312,167051,151343],{"class":339},[312,167053,733],{"class":324},[312,167055,152927],{"class":339},[312,167057,492],{"class":324},[312,167059,2931],{"class":488},[312,167061,6735],{"class":324},[312,167063,167064,167066,167068,167070,167072,167074,167076,167078,167080],{"class":314,"line":274},[312,167065,149840],{"class":324},[312,167067,64457],{"class":339},[312,167069,492],{"class":324},[312,167071,152391],{"class":339},[312,167073,733],{"class":324},[312,167075,152927],{"class":339},[312,167077,492],{"class":324},[312,167079,2755],{"class":488},[312,167081,6735],{"class":324},[312,167083,167084,167086,167088,167090,167092,167094,167096,167098,167100],{"class":314,"line":298},[312,167085,149840],{"class":324},[312,167087,64457],{"class":339},[312,167089,492],{"class":324},[312,167091,161186],{"class":339},[312,167093,733],{"class":324},[312,167095,152927],{"class":339},[312,167097,492],{"class":324},[312,167099,2351],{"class":488},[312,167101,6735],{"class":324},[312,167103,167104,167106,167108,167110,167112,167114,167116,167118,167120],{"class":314,"line":974},[312,167105,149840],{"class":324},[312,167107,64457],{"class":339},[312,167109,492],{"class":324},[312,167111,164765],{"class":339},[312,167113,733],{"class":324},[312,167115,152927],{"class":339},[312,167117,492],{"class":324},[312,167119,2826],{"class":488},[312,167121,6735],{"class":324},[312,167123,167124],{"class":314,"line":980},[312,167125,35041],{"class":324},[312,167127,167128],{"class":314,"line":997},[312,167129,4205],{"emptyLinePlaceholder":1881},[312,167131,167132,167134,167136],{"class":314,"line":1003},[312,167133,158715],{"class":324},[312,167135,336],{"class":1436},[312,167137,49128],{"class":488},[312,167139,167140,167143,167145,167148,167150],{"class":314,"line":1020},[312,167141,167142],{"class":324},"max_student ",[312,167144,336],{"class":1436},[312,167146,167147],{"class":324}," students[",[312,167149,858],{"class":488},[312,167151,35041],{"class":324},[312,167153,167154,167157,167159],{"class":314,"line":1026},[312,167155,167156],{"class":324},"passed ",[312,167158,336],{"class":1436},[312,167160,53624],{"class":324},[312,167162,167163],{"class":314,"line":3418},[312,167164,4205],{"emptyLinePlaceholder":1881},[312,167166,167167,167169,167171,167173],{"class":314,"line":3423},[312,167168,4830],{"class":1436},[312,167170,153592],{"class":324},[312,167172,27839],{"class":1436},[312,167174,153597],{"class":324},[312,167176,167177,167179,167181,167183,167185],{"class":314,"line":3429},[312,167178,160762],{"class":324},[312,167180,11280],{"class":1436},[312,167182,153604],{"class":324},[312,167184,152927],{"class":339},[312,167186,35041],{"class":324},[312,167188,167189],{"class":314,"line":3434},[312,167190,4205],{"emptyLinePlaceholder":1881},[312,167192,167193,167195,167197,167199,167201,167203,167206,167208],{"class":314,"line":3448},[312,167194,4906],{"class":1436},[312,167196,153604],{"class":324},[312,167198,152927],{"class":339},[312,167200,6248],{"class":324},[312,167202,2902],{"class":1436},[312,167204,167205],{"class":324}," max_student[",[312,167207,152927],{"class":339},[312,167209,167210],{"class":324},"]:\n",[312,167212,167213,167216,167218],{"class":314,"line":3453},[312,167214,167215],{"class":324},"        max_student ",[312,167217,336],{"class":1436},[312,167219,153620],{"class":324},[312,167221,167222],{"class":314,"line":3459},[312,167223,4205],{"emptyLinePlaceholder":1881},[312,167225,167226,167228,167230,167232,167234,167236,167238],{"class":314,"line":3480},[312,167227,4906],{"class":1436},[312,167229,153604],{"class":324},[312,167231,152927],{"class":339},[312,167233,6248],{"class":324},[312,167235,3516],{"class":1436},[312,167237,159292],{"class":488},[312,167239,5544],{"class":324},[312,167241,167242],{"class":314,"line":3485},[312,167243,167244],{"class":324},"        passed.append(student)\n",[312,167246,167247],{"class":314,"line":3499},[312,167248,4205],{"emptyLinePlaceholder":1881},[312,167250,167251,167253,167255,167257,167259,167261],{"class":314,"line":3504},[312,167252,165229],{"class":324},[312,167254,336],{"class":1436},[312,167256,165234],{"class":324},[312,167258,2529],{"class":1436},[312,167260,9135],{"class":488},[312,167262,166450],{"class":324},[312,167264,167265],{"class":314,"line":3533},[312,167266,4205],{"emptyLinePlaceholder":1881},[312,167268,167269,167271,167273,167275,167277,167279,167281,167283,167285,167287],{"class":314,"line":3538},[312,167270,32211],{"class":488},[312,167272,1576],{"class":324},[312,167274,2003],{"class":1436},[312,167276,165252],{"class":339},[312,167278,2840],{"class":488},[312,167280,165257],{"class":324},[312,167282,158614],{"class":1436},[312,167284,2888],{"class":488},[312,167286,2196],{"class":339},[312,167288,1959],{"class":324},[312,167290,167291,167293,167295,167297,167300,167302,167305,167307,167309,167311,167313,167315,167317,167319,167321,167323],{"class":314,"line":3555},[312,167292,32211],{"class":488},[312,167294,1576],{"class":324},[312,167296,2003],{"class":1436},[312,167298,167299],{"class":339},"\"最高分学生:",[312,167301,2840],{"class":488},[312,167303,167304],{"class":324},"max_student[",[312,167306,154337],{"class":339},[312,167308,2882],{"class":324},[312,167310,2888],{"class":488},[312,167312,6253],{"class":488},[312,167314,167304],{"class":324},[312,167316,154375],{"class":339},[312,167318,2882],{"class":324},[312,167320,2888],{"class":488},[312,167322,2196],{"class":339},[312,167324,1959],{"class":324},[312,167326,167327,167329,167331,167333,167336,167339,167342,167344,167346],{"class":314,"line":3560},[312,167328,32211],{"class":488},[312,167330,1576],{"class":324},[312,167332,2003],{"class":1436},[312,167334,167335],{"class":339},"\"及格人数:",[312,167337,167338],{"class":488},"{len",[312,167340,167341],{"class":324},"(passed)",[312,167343,2888],{"class":488},[312,167345,2196],{"class":339},[312,167347,1959],{"class":324},[14,167349,167351],{"id":167350},"_616-易错点","6.16 易错点",[140,167353,167354,167357,167360,167363,167369,167378],{},[143,167355,167356],{},"列表可变，元组和字符串不可变。",[143,167358,167359],{},"切片结束位置不包含。",[143,167361,167362],{},"字典通过 key 取值，不是通过索引。",[143,167364,167365,167366,30181],{},"空集合要用 ",[119,167367,167368],{},"set()",[143,167370,106135,167371,167374,167375,30181],{},[119,167372,167373],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[119,167376,167377],{},"get()",[143,167379,167380],{},"嵌套容器要先看清楚每一层是什么类型。",[14,167382,167384],{"id":167383},"_617-本章练习","6.17 本章练习",[140,167386,167387,167390,167393,167396,167399],{},[143,167388,167389],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[143,167391,167392],{},"输入一句话，统计每个字符出现次数。",[143,167394,167395],{},"使用集合去除列表中的重复元素。",[143,167397,167398],{},"使用字典保存一个学生的信息，并实现修改成绩。",[143,167400,167401],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1856,167403,167404],{},"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":308,"searchDepth":171,"depth":171,"links":167406},[167407,167408,167409,167410,167411,167412,167413,167414,167415,167416,167417,167418,167419,167420,167421,167422,167423],{"id":164387,"depth":171,"text":164388},{"id":164504,"depth":171,"text":164505},{"id":164594,"depth":171,"text":164595},{"id":164718,"depth":171,"text":164719},{"id":165081,"depth":171,"text":165082},{"id":165268,"depth":171,"text":165269},{"id":165387,"depth":171,"text":165388},{"id":165529,"depth":171,"text":165530},{"id":165716,"depth":171,"text":165717},{"id":165960,"depth":171,"text":165961},{"id":166170,"depth":171,"text":166171},{"id":166255,"depth":171,"text":166256},{"id":166553,"depth":171,"text":166554},{"id":166835,"depth":171,"text":166836},{"id":167027,"depth":171,"text":167028},{"id":167350,"depth":171,"text":167351},{"id":167383,"depth":171,"text":167384},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164379,"description":1878},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167430,"title":167431,"body":167432,"description":1878,"extension":1879,"meta":169604,"navigation":1881,"path":169605,"seo":169606,"stem":169607,"__hash__":169608},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167433,"toc":169579},[167434,167437,167441,167444,167524,167527,167548,167551,167555,167558,167620,167623,167640,167644,167647,167692,167694,167702,167706,167709,167791,167794,167797,167822,167825,167848,167852,167855,167857,167919,167922,167924,167975,167979,167983,167989,168094,168098,168104,168175,168179,168182,168250,168253,168333,168337,168343,168379,168382,168385,168495,168501,168505,168508,168580,168583,168587,168591,168596,168658,168662,168667,168735,168739,168744,168860,168864,168867,168947,168950,168954,168957,169061,169063,169078,169081,169085,169223,169231,169235,169237,169248,169250,169508,169512,169544,169548,169576],[10,167435,167431],{"id":167436},"_7-函数进阶",[14,167438,167440],{"id":167439},"_71-多返回值","7.1 多返回值",[24,167442,167443],{},"Python 函数可以返回多个值，本质上返回的是元组。",[303,167445,167447],{"className":32174,"code":167446,"language":32176,"meta":308,"style":308},"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",[119,167448,167449,167458,167466,167474,167483,167490,167494,167498,167507,167513],{"__ignoreMap":308},[312,167450,167451,167453,167456],{"class":314,"line":315},[312,167452,33742],{"class":1436},[312,167454,167455],{"class":332}," get_info",[312,167457,33748],{"class":324},[312,167459,167460,167462,167464],{"class":314,"line":171},[312,167461,153825],{"class":324},[312,167463,336],{"class":1436},[312,167465,150808],{"class":339},[312,167467,167468,167470,167472],{"class":314,"line":274},[312,167469,153841],{"class":324},[312,167471,336],{"class":1436},[312,167473,148006],{"class":488},[312,167475,167476,167478,167480],{"class":314,"line":298},[312,167477,153856],{"class":324},[312,167479,336],{"class":1436},[312,167481,167482],{"class":488}," 95\n",[312,167484,167485,167487],{"class":314,"line":974},[312,167486,5895],{"class":1436},[312,167488,167489],{"class":324}," name, age, score\n",[312,167491,167492],{"class":314,"line":980},[312,167493,4205],{"emptyLinePlaceholder":1881},[312,167495,167496],{"class":314,"line":997},[312,167497,4205],{"emptyLinePlaceholder":1881},[312,167499,167500,167502,167504],{"class":314,"line":1003},[312,167501,162761],{"class":324},[312,167503,336],{"class":1436},[312,167505,167506],{"class":324}," get_info()\n",[312,167508,167509,167511],{"class":314,"line":1020},[312,167510,32211],{"class":488},[312,167512,78357],{"class":324},[312,167514,167515,167517,167519,167521],{"class":314,"line":1026},[312,167516,32211],{"class":488},[312,167518,1576],{"class":324},[312,167520,104876],{"class":488},[312,167522,167523],{"class":324},"(result))\n",[24,167525,167526],{},"可以直接解包：",[303,167528,167530],{"className":32174,"code":167529,"language":32176,"meta":308,"style":308},"name, age, score = get_info()\nprint(name, age, score)\n",[119,167531,167532,167541],{"__ignoreMap":308},[312,167533,167534,167537,167539],{"class":314,"line":315},[312,167535,167536],{"class":324},"name, age, score ",[312,167538,336],{"class":1436},[312,167540,167506],{"class":324},[312,167542,167543,167545],{"class":314,"line":171},[312,167544,32211],{"class":488},[312,167546,167547],{"class":324},"(name, age, score)\n",[24,167549,167550],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167552,167554],{"id":167553},"_72-位置参数","7.2 位置参数",[24,167556,167557],{},"位置参数按顺序传递。",[303,167559,167561],{"className":32174,"code":167560,"language":32176,"meta":308,"style":308},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[119,167562,167563,167571,167599,167603,167607],{"__ignoreMap":308},[312,167564,167565,167567,167569],{"class":314,"line":315},[312,167566,33742],{"class":1436},[312,167568,150827],{"class":332},[312,167570,150830],{"class":324},[312,167572,167573,167575,167577,167579,167581,167583,167585,167587,167589,167591,167593,167595,167597],{"class":314,"line":171},[312,167574,33094],{"class":488},[312,167576,1576],{"class":324},[312,167578,2003],{"class":1436},[312,167580,150841],{"class":339},[312,167582,2840],{"class":488},[312,167584,81581],{"class":324},[312,167586,2888],{"class":488},[312,167588,150850],{"class":339},[312,167590,2840],{"class":488},[312,167592,71998],{"class":324},[312,167594,2888],{"class":488},[312,167596,150859],{"class":339},[312,167598,1959],{"class":324},[312,167600,167601],{"class":314,"line":274},[312,167602,4205],{"emptyLinePlaceholder":1881},[312,167604,167605],{"class":314,"line":298},[312,167606,4205],{"emptyLinePlaceholder":1881},[312,167608,167609,167612,167614,167616,167618],{"class":314,"line":974},[312,167610,167611],{"class":324},"introduce(",[312,167613,151343],{"class":339},[312,167615,733],{"class":324},[312,167617,2595],{"class":488},[312,167619,1959],{"class":324},[24,167621,167622],{},"顺序错了就会得到错误含义：",[303,167624,167626],{"className":32174,"code":167625,"language":32176,"meta":308,"style":308},"introduce(18, \"小明\")\n",[119,167627,167628],{"__ignoreMap":308},[312,167629,167630,167632,167634,167636,167638],{"class":314,"line":315},[312,167631,167611],{"class":324},[312,167633,2595],{"class":488},[312,167635,733],{"class":324},[312,167637,151343],{"class":339},[312,167639,1959],{"class":324},[14,167641,167643],{"id":167642},"_73-关键字参数","7.3 关键字参数",[24,167645,167646],{},"关键字参数按参数名传递。",[303,167648,167650],{"className":32174,"code":167649,"language":32176,"meta":308,"style":308},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[119,167651,167652,167672],{"__ignoreMap":308},[312,167653,167654,167656,167658,167660,167662,167664,167666,167668,167670],{"class":314,"line":315},[312,167655,167611],{"class":324},[312,167657,81581],{"class":1579},[312,167659,336],{"class":1436},[312,167661,151343],{"class":339},[312,167663,733],{"class":324},[312,167665,71998],{"class":1579},[312,167667,336],{"class":1436},[312,167669,2595],{"class":488},[312,167671,1959],{"class":324},[312,167673,167674,167676,167678,167680,167682,167684,167686,167688,167690],{"class":314,"line":171},[312,167675,167611],{"class":324},[312,167677,71998],{"class":1579},[312,167679,336],{"class":1436},[312,167681,2595],{"class":488},[312,167683,733],{"class":324},[312,167685,81581],{"class":1579},[312,167687,336],{"class":1436},[312,167689,151343],{"class":339},[312,167691,1959],{"class":324},[24,167693,119703],{},[140,167695,167696,167699],{},[143,167697,167698],{},"顺序不容易错。",[143,167700,167701],{},"调用时可读性更强。",[14,167703,167705],{"id":167704},"_74-默认参数","7.4 默认参数",[24,167707,167708],{},"默认参数给参数设置默认值。",[303,167710,167712],{"className":32174,"code":167711,"language":32176,"meta":308,"style":308},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[119,167713,167714,167730,167760,167764,167768,167778],{"__ignoreMap":308},[312,167715,167716,167718,167720,167723,167725,167728],{"class":314,"line":315},[312,167717,33742],{"class":1436},[312,167719,123861],{"class":332},[312,167721,167722],{"class":324},"(host, port",[312,167724,336],{"class":1436},[312,167726,167727],{"class":488},"3306",[312,167729,32582],{"class":324},[312,167731,167732,167734,167736,167738,167741,167743,167745,167747,167749,167751,167754,167756,167758],{"class":314,"line":171},[312,167733,33094],{"class":488},[312,167735,1576],{"class":324},[312,167737,2003],{"class":1436},[312,167739,167740],{"class":339},"\"连接",[312,167742,2840],{"class":488},[312,167744,29191],{"class":324},[312,167746,2888],{"class":488},[312,167748,2803],{"class":339},[312,167750,2840],{"class":488},[312,167752,167753],{"class":324},"port",[312,167755,2888],{"class":488},[312,167757,2196],{"class":339},[312,167759,1959],{"class":324},[312,167761,167762],{"class":314,"line":274},[312,167763,4205],{"emptyLinePlaceholder":1881},[312,167765,167766],{"class":314,"line":298},[312,167767,4205],{"emptyLinePlaceholder":1881},[312,167769,167770,167773,167776],{"class":314,"line":974},[312,167771,167772],{"class":324},"connect(",[312,167774,167775],{"class":339},"\"localhost\"",[312,167777,1959],{"class":324},[312,167779,167780,167782,167784,167786,167789],{"class":314,"line":980},[312,167781,167772],{"class":324},[312,167783,167775],{"class":339},[312,167785,733],{"class":324},[312,167787,167788],{"class":488},"6379",[312,167790,1959],{"class":324},[24,167792,167793],{},"注意：默认参数必须放在非默认参数后面。",[24,167795,167796],{},"错误：",[303,167798,167800],{"className":32174,"code":167799,"language":32176,"meta":308,"style":308},"def connect(port=3306, host):\n    pass\n",[119,167801,167802,167818],{"__ignoreMap":308},[312,167803,167804,167806,167808,167811,167813,167815],{"class":314,"line":315},[312,167805,33742],{"class":1436},[312,167807,123861],{"class":332},[312,167809,167810],{"class":324},"(port",[312,167812,336],{"class":1436},[312,167814,167727],{"class":488},[312,167816,167817],{"class":324},", host):\n",[312,167819,167820],{"class":314,"line":171},[312,167821,150992],{"class":1436},[24,167823,167824],{},"正确：",[303,167826,167828],{"className":32174,"code":167827,"language":32176,"meta":308,"style":308},"def connect(host, port=3306):\n    pass\n",[119,167829,167830,167844],{"__ignoreMap":308},[312,167831,167832,167834,167836,167838,167840,167842],{"class":314,"line":315},[312,167833,33742],{"class":1436},[312,167835,123861],{"class":332},[312,167837,167722],{"class":324},[312,167839,336],{"class":1436},[312,167841,167727],{"class":488},[312,167843,32582],{"class":324},[312,167845,167846],{"class":314,"line":171},[312,167847,150992],{"class":1436},[14,167849,167851],{"id":167850},"_75-默认参数的坑","7.5 默认参数的坑",[24,167853,167854],{},"不要使用可变对象作为默认参数。",[24,167856,159078],{},[303,167858,167860],{"className":32174,"code":167859,"language":32176,"meta":308,"style":308},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[119,167861,167862,167877,167882,167889,167893,167897,167908],{"__ignoreMap":308},[312,167863,167864,167866,167869,167872,167874],{"class":314,"line":315},[312,167865,33742],{"class":1436},[312,167867,167868],{"class":332}," add_item",[312,167870,167871],{"class":324},"(item, items",[312,167873,336],{"class":1436},[312,167875,167876],{"class":324},"[]):\n",[312,167878,167879],{"class":314,"line":171},[312,167880,167881],{"class":324},"    items.append(item)\n",[312,167883,167884,167886],{"class":314,"line":274},[312,167885,5895],{"class":1436},[312,167887,167888],{"class":324}," items\n",[312,167890,167891],{"class":314,"line":298},[312,167892,4205],{"emptyLinePlaceholder":1881},[312,167894,167895],{"class":314,"line":974},[312,167896,4205],{"emptyLinePlaceholder":1881},[312,167898,167899,167901,167904,167906],{"class":314,"line":980},[312,167900,32211],{"class":488},[312,167902,167903],{"class":324},"(add_item(",[312,167905,166780],{"class":339},[312,167907,32293],{"class":324},[312,167909,167910,167912,167914,167917],{"class":314,"line":997},[312,167911,32211],{"class":488},[312,167913,167903],{"class":324},[312,167915,167916],{"class":339},"\"b\"",[312,167918,32293],{"class":324},[24,167920,167921],{},"第二次调用会复用第一次的列表。",[24,167923,157343],{},[303,167925,167927],{"className":32174,"code":167926,"language":32176,"meta":308,"style":308},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[119,167928,167929,167943,167956,167965,167969],{"__ignoreMap":308},[312,167930,167931,167933,167935,167937,167939,167941],{"class":314,"line":315},[312,167932,33742],{"class":1436},[312,167934,167868],{"class":332},[312,167936,167871],{"class":324},[312,167938,336],{"class":1436},[312,167940,97456],{"class":488},[312,167942,32582],{"class":324},[312,167944,167945,167947,167950,167952,167954],{"class":314,"line":171},[312,167946,4906],{"class":1436},[312,167948,167949],{"class":324}," items ",[312,167951,40722],{"class":1436},[312,167953,40728],{"class":488},[312,167955,5544],{"class":324},[312,167957,167958,167961,167963],{"class":314,"line":274},[312,167959,167960],{"class":324},"        items ",[312,167962,336],{"class":1436},[312,167964,53624],{"class":324},[312,167966,167967],{"class":314,"line":298},[312,167968,167881],{"class":324},[312,167970,167971,167973],{"class":314,"line":974},[312,167972,5895],{"class":1436},[312,167974,167888],{"class":324},[14,167976,167978],{"id":167977},"_76-不定长参数","7.6 不定长参数",[69,167980,167982],{"id":167981},"_761-args","7.6.1 *args",[24,167984,167985,167988],{},[119,167986,167987],{},"*args"," 接收任意数量的位置参数，得到元组。",[303,167990,167992],{"className":32174,"code":167991,"language":32176,"meta":308,"style":308},"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",[119,167993,167994,168007,168015,168026,168035,168041,168045,168049,168068],{"__ignoreMap":308},[312,167995,167996,167998,168000,168002,168004],{"class":314,"line":315},[312,167997,33742],{"class":1436},[312,167999,7014],{"class":332},[312,168001,1576],{"class":324},[312,168003,2400],{"class":1436},[312,168005,168006],{"class":324},"args):\n",[312,168008,168009,168011,168013],{"class":314,"line":171},[312,168010,160762],{"class":324},[312,168012,336],{"class":1436},[312,168014,49128],{"class":488},[312,168016,168017,168019,168021,168023],{"class":314,"line":274},[312,168018,5006],{"class":1436},[312,168020,157635],{"class":324},[312,168022,27839],{"class":1436},[312,168024,168025],{"class":324}," args:\n",[312,168027,168028,168030,168032],{"class":314,"line":298},[312,168029,161437],{"class":324},[312,168031,11280],{"class":1436},[312,168033,168034],{"class":324}," num\n",[312,168036,168037,168039],{"class":314,"line":974},[312,168038,5895],{"class":1436},[312,168040,163742],{"class":324},[312,168042,168043],{"class":314,"line":980},[312,168044,4205],{"emptyLinePlaceholder":1881},[312,168046,168047],{"class":314,"line":997},[312,168048,4205],{"emptyLinePlaceholder":1881},[312,168050,168051,168053,168056,168058,168060,168062,168064,168066],{"class":314,"line":1003},[312,168052,32211],{"class":488},[312,168054,168055],{"class":324},"(add(",[312,168057,1433],{"class":488},[312,168059,733],{"class":324},[312,168061,2027],{"class":488},[312,168063,733],{"class":324},[312,168065,2021],{"class":488},[312,168067,32293],{"class":324},[312,168069,168070,168072,168074,168076,168078,168080,168082,168084,168086,168088,168090,168092],{"class":314,"line":1020},[312,168071,32211],{"class":488},[312,168073,168055],{"class":324},[312,168075,1433],{"class":488},[312,168077,733],{"class":324},[312,168079,2027],{"class":488},[312,168081,733],{"class":324},[312,168083,2021],{"class":488},[312,168085,733],{"class":324},[312,168087,2238],{"class":488},[312,168089,733],{"class":324},[312,168091,2264],{"class":488},[312,168093,32293],{"class":324},[69,168095,168097],{"id":168096},"_762-kwargs","7.6.2 **kwargs",[24,168099,168100,168103],{},[119,168101,168102],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[303,168105,168107],{"className":32174,"code":168106,"language":32176,"meta":308,"style":308},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[119,168108,168109,168122,168133,168139,168143,168147],{"__ignoreMap":308},[312,168110,168111,168113,168115,168117,168119],{"class":314,"line":315},[312,168112,33742],{"class":1436},[312,168114,163400],{"class":332},[312,168116,1576],{"class":324},[312,168118,12464],{"class":1436},[312,168120,168121],{"class":324},"kwargs):\n",[312,168123,168124,168126,168128,168130],{"class":314,"line":171},[312,168125,5006],{"class":1436},[312,168127,166240],{"class":324},[312,168129,27839],{"class":1436},[312,168131,168132],{"class":324}," kwargs.items():\n",[312,168134,168135,168137],{"class":314,"line":274},[312,168136,34246],{"class":488},[312,168138,166252],{"class":324},[312,168140,168141],{"class":314,"line":298},[312,168142,4205],{"emptyLinePlaceholder":1881},[312,168144,168145],{"class":314,"line":974},[312,168146,4205],{"emptyLinePlaceholder":1881},[312,168148,168149,168151,168153,168155,168157,168159,168161,168163,168165,168167,168169,168171,168173],{"class":314,"line":980},[312,168150,163465],{"class":324},[312,168152,81581],{"class":1579},[312,168154,336],{"class":1436},[312,168156,151343],{"class":339},[312,168158,733],{"class":324},[312,168160,71998],{"class":1579},[312,168162,336],{"class":1436},[312,168164,2595],{"class":488},[312,168166,733],{"class":324},[312,168168,72049],{"class":1579},[312,168170,336],{"class":1436},[312,168172,71046],{"class":339},[312,168174,1959],{"class":324},[14,168176,168178],{"id":168177},"_77-参数解包","7.7 参数解包",[24,168180,168181],{},"列表或元组解包为位置参数：",[303,168183,168185],{"className":32174,"code":168184,"language":32176,"meta":308,"style":308},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[119,168186,168187,168196,168211,168215,168219,168239],{"__ignoreMap":308},[312,168188,168189,168191,168193],{"class":314,"line":315},[312,168190,33742],{"class":1436},[312,168192,7014],{"class":332},[312,168194,168195],{"class":324},"(a, b, c):\n",[312,168197,168198,168200,168202,168204,168206,168208],{"class":314,"line":171},[312,168199,5895],{"class":1436},[312,168201,12672],{"class":324},[312,168203,2426],{"class":1436},[312,168205,12685],{"class":324},[312,168207,2426],{"class":1436},[312,168209,168210],{"class":324}," c\n",[312,168212,168213],{"class":314,"line":274},[312,168214,4205],{"emptyLinePlaceholder":1881},[312,168216,168217],{"class":314,"line":298},[312,168218,4205],{"emptyLinePlaceholder":1881},[312,168220,168221,168223,168225,168227,168229,168231,168233,168235,168237],{"class":314,"line":974},[312,168222,165555],{"class":324},[312,168224,336],{"class":1436},[312,168226,54012],{"class":324},[312,168228,1433],{"class":488},[312,168230,733],{"class":324},[312,168232,2027],{"class":488},[312,168234,733],{"class":324},[312,168236,2021],{"class":488},[312,168238,35041],{"class":324},[312,168240,168241,168243,168245,168247],{"class":314,"line":980},[312,168242,32211],{"class":488},[312,168244,168055],{"class":324},[312,168246,2400],{"class":1436},[312,168248,168249],{"class":324},"nums))\n",[24,168251,168252],{},"字典解包为关键字参数：",[303,168254,168256],{"className":32174,"code":168255,"language":32176,"meta":308,"style":308},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[119,168257,168258,168266,168292,168296,168300,168324],{"__ignoreMap":308},[312,168259,168260,168262,168264],{"class":314,"line":315},[312,168261,33742],{"class":1436},[312,168263,150827],{"class":332},[312,168265,150830],{"class":324},[312,168267,168268,168270,168272,168274,168276,168278,168280,168282,168284,168286,168288,168290],{"class":314,"line":171},[312,168269,33094],{"class":488},[312,168271,1576],{"class":324},[312,168273,2003],{"class":1436},[312,168275,2196],{"class":339},[312,168277,2840],{"class":488},[312,168279,81581],{"class":324},[312,168281,2888],{"class":488},[312,168283,6253],{"class":488},[312,168285,71998],{"class":324},[312,168287,2888],{"class":488},[312,168289,2196],{"class":339},[312,168291,1959],{"class":324},[312,168293,168294],{"class":314,"line":274},[312,168295,4205],{"emptyLinePlaceholder":1881},[312,168297,168298],{"class":314,"line":298},[312,168299,4205],{"emptyLinePlaceholder":1881},[312,168301,168302,168304,168306,168308,168310,168312,168314,168316,168318,168320,168322],{"class":314,"line":974},[312,168303,118083],{"class":324},[312,168305,336],{"class":1436},[312,168307,6253],{"class":324},[312,168309,64457],{"class":339},[312,168311,492],{"class":324},[312,168313,151343],{"class":339},[312,168315,733],{"class":324},[312,168317,70901],{"class":339},[312,168319,492],{"class":324},[312,168321,2595],{"class":488},[312,168323,515],{"class":324},[312,168325,168326,168328,168330],{"class":314,"line":980},[312,168327,167611],{"class":324},[312,168329,12464],{"class":1436},[312,168331,168332],{"class":324},"info)\n",[14,168334,168336],{"id":168335},"_78-匿名函数lambda","7.8 匿名函数lambda",[24,168338,168339,168342],{},[119,168340,168341],{},"lambda"," 用于定义简单匿名函数。",[303,168344,168346],{"className":32174,"code":168345,"language":32176,"meta":308,"style":308},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[119,168347,168348,168365],{"__ignoreMap":308},[312,168349,168350,168353,168355,168358,168361,168363],{"class":314,"line":315},[312,168351,168352],{"class":324},"add ",[312,168354,336],{"class":1436},[312,168356,168357],{"class":1436}," lambda",[312,168359,168360],{"class":324}," a, b: a ",[312,168362,2426],{"class":1436},[312,168364,152559],{"class":324},[312,168366,168367,168369,168371,168373,168375,168377],{"class":314,"line":171},[312,168368,32211],{"class":488},[312,168370,168055],{"class":324},[312,168372,1433],{"class":488},[312,168374,733],{"class":324},[312,168376,2027],{"class":488},[312,168378,32293],{"class":324},[24,168380,168381],{},"常和排序、过滤等函数一起使用。",[24,168383,168384],{},"按分数排序：",[303,168386,168388],{"className":32174,"code":168387,"language":32176,"meta":308,"style":308},"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",[119,168389,168390,168398,168418,168438,168458,168462,168466,168489],{"__ignoreMap":308},[312,168391,168392,168394,168396],{"class":314,"line":315},[312,168393,161171],{"class":324},[312,168395,336],{"class":1436},[312,168397,57229],{"class":324},[312,168399,168400,168402,168404,168406,168408,168410,168412,168414,168416],{"class":314,"line":171},[312,168401,149840],{"class":324},[312,168403,64457],{"class":339},[312,168405,492],{"class":324},[312,168407,151343],{"class":339},[312,168409,733],{"class":324},[312,168411,152927],{"class":339},[312,168413,492],{"class":324},[312,168415,2931],{"class":488},[312,168417,6735],{"class":324},[312,168419,168420,168422,168424,168426,168428,168430,168432,168434,168436],{"class":314,"line":274},[312,168421,149840],{"class":324},[312,168423,64457],{"class":339},[312,168425,492],{"class":324},[312,168427,152391],{"class":339},[312,168429,733],{"class":324},[312,168431,152927],{"class":339},[312,168433,492],{"class":324},[312,168435,2755],{"class":488},[312,168437,6735],{"class":324},[312,168439,168440,168442,168444,168446,168448,168450,168452,168454,168456],{"class":314,"line":298},[312,168441,149840],{"class":324},[312,168443,64457],{"class":339},[312,168445,492],{"class":324},[312,168447,161186],{"class":339},[312,168449,733],{"class":324},[312,168451,152927],{"class":339},[312,168453,492],{"class":324},[312,168455,2351],{"class":488},[312,168457,6735],{"class":324},[312,168459,168460],{"class":314,"line":974},[312,168461,35041],{"class":324},[312,168463,168464],{"class":314,"line":980},[312,168465,4205],{"emptyLinePlaceholder":1881},[312,168467,168468,168471,168473,168475,168477,168479,168481,168483,168485,168487],{"class":314,"line":997},[312,168469,168470],{"class":324},"students.sort(",[312,168472,155401],{"class":1579},[312,168474,155404],{"class":1436},[312,168476,155407],{"class":324},[312,168478,152927],{"class":339},[312,168480,113971],{"class":324},[312,168482,164983],{"class":1579},[312,168484,336],{"class":1436},[312,168486,33271],{"class":488},[312,168488,1959],{"class":324},[312,168490,168491,168493],{"class":314,"line":1003},[312,168492,32211],{"class":488},[312,168494,166450],{"class":324},[24,168496,168497,168498,168500],{},"如果逻辑复杂，不要硬写 ",[119,168499,168341],{},"，定义普通函数更清晰。",[14,168502,168504],{"id":168503},"_79-函数作为参数","7.9 函数作为参数",[24,168506,168507],{},"函数可以作为参数传给另一个函数。",[303,168509,168511],{"className":32174,"code":168510,"language":32176,"meta":308,"style":308},"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",[119,168512,168513,168521,168531,168535,168539,168549,168556,168560,168564],{"__ignoreMap":308},[312,168514,168515,168517,168519],{"class":314,"line":315},[312,168516,33742],{"class":1436},[312,168518,7014],{"class":332},[312,168520,152548],{"class":324},[312,168522,168523,168525,168527,168529],{"class":314,"line":171},[312,168524,5895],{"class":1436},[312,168526,12672],{"class":324},[312,168528,2426],{"class":1436},[312,168530,152559],{"class":324},[312,168532,168533],{"class":314,"line":274},[312,168534,4205],{"emptyLinePlaceholder":1881},[312,168536,168537],{"class":314,"line":298},[312,168538,4205],{"emptyLinePlaceholder":1881},[312,168540,168541,168543,168546],{"class":314,"line":974},[312,168542,33742],{"class":1436},[312,168544,168545],{"class":332}," calculate",[312,168547,168548],{"class":324},"(a, b, func):\n",[312,168550,168551,168553],{"class":314,"line":980},[312,168552,5895],{"class":1436},[312,168554,168555],{"class":324}," func(a, b)\n",[312,168557,168558],{"class":314,"line":997},[312,168559,4205],{"emptyLinePlaceholder":1881},[312,168561,168562],{"class":314,"line":1003},[312,168563,4205],{"emptyLinePlaceholder":1881},[312,168565,168566,168568,168571,168573,168575,168577],{"class":314,"line":1020},[312,168567,32211],{"class":488},[312,168569,168570],{"class":324},"(calculate(",[312,168572,2391],{"class":488},[312,168574,733],{"class":324},[312,168576,1546],{"class":488},[312,168578,168579],{"class":324},", add))\n",[24,168581,168582],{},"这种思想在排序、回调、框架中经常出现。",[14,168584,168586],{"id":168585},"_710-mapfiltersorted","7.10 map、filter、sorted",[69,168588,168590],{"id":168589},"_7101-map","7.10.1 map",[24,168592,168593,168595],{},[119,168594,75816],{}," 对每个元素执行函数。",[303,168597,168599],{"className":32174,"code":168598,"language":32176,"meta":308,"style":308},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[119,168600,168601,168625,168648],{"__ignoreMap":308},[312,168602,168603,168605,168607,168609,168611,168613,168615,168617,168619,168621,168623],{"class":314,"line":315},[312,168604,165555],{"class":324},[312,168606,336],{"class":1436},[312,168608,54012],{"class":324},[312,168610,1433],{"class":488},[312,168612,733],{"class":324},[312,168614,2027],{"class":488},[312,168616,733],{"class":324},[312,168618,2021],{"class":488},[312,168620,733],{"class":324},[312,168622,2238],{"class":488},[312,168624,35041],{"class":324},[312,168626,168627,168629,168631,168634,168636,168638,168641,168643,168645],{"class":314,"line":171},[312,168628,162761],{"class":324},[312,168630,336],{"class":1436},[312,168632,168633],{"class":488}," map",[312,168635,1576],{"class":324},[312,168637,168341],{"class":1436},[312,168639,168640],{"class":324}," x: x ",[312,168642,2400],{"class":1436},[312,168644,16556],{"class":488},[312,168646,168647],{"class":324},", nums)\n",[312,168649,168650,168652,168654,168656],{"class":314,"line":274},[312,168651,32211],{"class":488},[312,168653,1576],{"class":324},[312,168655,155525],{"class":488},[312,168657,167523],{"class":324},[69,168659,168661],{"id":168660},"_7102-filter","7.10.2 filter",[24,168663,168664,168666],{},[119,168665,81822],{}," 保留满足条件的元素。",[303,168668,168670],{"className":32174,"code":168669,"language":32176,"meta":308,"style":308},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[119,168671,168672,168700,168725],{"__ignoreMap":308},[312,168673,168674,168676,168678,168680,168682,168684,168686,168688,168690,168692,168694,168696,168698],{"class":314,"line":315},[312,168675,165555],{"class":324},[312,168677,336],{"class":1436},[312,168679,54012],{"class":324},[312,168681,1433],{"class":488},[312,168683,733],{"class":324},[312,168685,2027],{"class":488},[312,168687,733],{"class":324},[312,168689,2021],{"class":488},[312,168691,733],{"class":324},[312,168693,2238],{"class":488},[312,168695,733],{"class":324},[312,168697,2264],{"class":488},[312,168699,35041],{"class":324},[312,168701,168702,168704,168706,168709,168711,168713,168715,168717,168719,168721,168723],{"class":314,"line":171},[312,168703,162761],{"class":324},[312,168705,336],{"class":1436},[312,168707,168708],{"class":488}," filter",[312,168710,1576],{"class":324},[312,168712,168341],{"class":1436},[312,168714,168640],{"class":324},[312,168716,2273],{"class":1436},[312,168718,16556],{"class":488},[312,168720,103328],{"class":1436},[312,168722,5898],{"class":488},[312,168724,168647],{"class":324},[312,168726,168727,168729,168731,168733],{"class":314,"line":274},[312,168728,32211],{"class":488},[312,168730,1576],{"class":324},[312,168732,155525],{"class":488},[312,168734,167523],{"class":324},[69,168736,168738],{"id":168737},"_7103-sorted","7.10.3 sorted",[24,168740,168741,168743],{},[119,168742,166691],{}," 返回排序后的新列表。",[303,168745,168747],{"className":32174,"code":168746,"language":32176,"meta":308,"style":308},"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",[119,168748,168749,168757,168777,168797,168817,168821,168825,168854],{"__ignoreMap":308},[312,168750,168751,168753,168755],{"class":314,"line":315},[312,168752,161171],{"class":324},[312,168754,336],{"class":1436},[312,168756,57229],{"class":324},[312,168758,168759,168761,168763,168765,168767,168769,168771,168773,168775],{"class":314,"line":171},[312,168760,149840],{"class":324},[312,168762,64457],{"class":339},[312,168764,492],{"class":324},[312,168766,151343],{"class":339},[312,168768,733],{"class":324},[312,168770,152927],{"class":339},[312,168772,492],{"class":324},[312,168774,2931],{"class":488},[312,168776,6735],{"class":324},[312,168778,168779,168781,168783,168785,168787,168789,168791,168793,168795],{"class":314,"line":274},[312,168780,149840],{"class":324},[312,168782,64457],{"class":339},[312,168784,492],{"class":324},[312,168786,152391],{"class":339},[312,168788,733],{"class":324},[312,168790,152927],{"class":339},[312,168792,492],{"class":324},[312,168794,2755],{"class":488},[312,168796,6735],{"class":324},[312,168798,168799,168801,168803,168805,168807,168809,168811,168813,168815],{"class":314,"line":298},[312,168800,149840],{"class":324},[312,168802,64457],{"class":339},[312,168804,492],{"class":324},[312,168806,161186],{"class":339},[312,168808,733],{"class":324},[312,168810,152927],{"class":339},[312,168812,492],{"class":324},[312,168814,2351],{"class":488},[312,168816,6735],{"class":324},[312,168818,168819],{"class":314,"line":974},[312,168820,35041],{"class":324},[312,168822,168823],{"class":314,"line":980},[312,168824,4205],{"emptyLinePlaceholder":1881},[312,168826,168827,168829,168831,168833,168836,168838,168840,168842,168844,168846,168848,168850,168852],{"class":314,"line":997},[312,168828,162761],{"class":324},[312,168830,336],{"class":1436},[312,168832,165059],{"class":488},[312,168834,168835],{"class":324},"(students, ",[312,168837,155401],{"class":1579},[312,168839,155404],{"class":1436},[312,168841,155407],{"class":324},[312,168843,152927],{"class":339},[312,168845,113971],{"class":324},[312,168847,164983],{"class":1579},[312,168849,336],{"class":1436},[312,168851,33271],{"class":488},[312,168853,1959],{"class":324},[312,168855,168856,168858],{"class":314,"line":1003},[312,168857,32211],{"class":488},[312,168859,78357],{"class":324},[14,168861,168863],{"id":168862},"_711-闭包入门","7.11 闭包入门",[24,168865,168866],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[303,168868,168870],{"className":32174,"code":168869,"language":32176,"meta":308,"style":308},"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",[119,168871,168872,168882,168892,168903,168907,168914,168918,168922,168936],{"__ignoreMap":308},[312,168873,168874,168876,168879],{"class":314,"line":315},[312,168875,33742],{"class":1436},[312,168877,168878],{"class":332}," outer",[312,168880,168881],{"class":324},"(base):\n",[312,168883,168884,168886,168889],{"class":314,"line":171},[312,168885,32597],{"class":1436},[312,168887,168888],{"class":332}," inner",[312,168890,168891],{"class":324},"(num):\n",[312,168893,168894,168896,168899,168901],{"class":314,"line":274},[312,168895,16553],{"class":1436},[312,168897,168898],{"class":324}," base ",[312,168900,2426],{"class":1436},[312,168902,168034],{"class":324},[312,168904,168905],{"class":314,"line":298},[312,168906,4205],{"emptyLinePlaceholder":1881},[312,168908,168909,168911],{"class":314,"line":974},[312,168910,5895],{"class":1436},[312,168912,168913],{"class":324}," inner\n",[312,168915,168916],{"class":314,"line":980},[312,168917,4205],{"emptyLinePlaceholder":1881},[312,168919,168920],{"class":314,"line":997},[312,168921,4205],{"emptyLinePlaceholder":1881},[312,168923,168924,168927,168929,168932,168934],{"class":314,"line":1003},[312,168925,168926],{"class":324},"add_10 ",[312,168928,336],{"class":1436},[312,168930,168931],{"class":324}," outer(",[312,168933,2391],{"class":488},[312,168935,1959],{"class":324},[312,168937,168938,168940,168943,168945],{"class":314,"line":1020},[312,168939,32211],{"class":488},[312,168941,168942],{"class":324},"(add_10(",[312,168944,2264],{"class":488},[312,168946,32293],{"class":324},[24,168948,168949],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168951,168953],{"id":168952},"_712-装饰器入门","7.12 装饰器入门",[24,168955,168956],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[303,168958,168960],{"className":32174,"code":168959,"language":32176,"meta":308,"style":308},"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",[119,168961,168962,168971,168980,168991,168996,169007,169011,169018,169022,169026,169031,169039,169049,169053,169057],{"__ignoreMap":308},[312,168963,168964,168966,168968],{"class":314,"line":315},[312,168965,33742],{"class":1436},[312,168967,88961],{"class":332},[312,168969,168970],{"class":324},"(func):\n",[312,168972,168973,168975,168978],{"class":314,"line":171},[312,168974,32597],{"class":1436},[312,168976,168977],{"class":332}," wrapper",[312,168979,33748],{"class":324},[312,168981,168982,168984,168986,168989],{"class":314,"line":274},[312,168983,34246],{"class":488},[312,168985,1576],{"class":324},[312,168987,168988],{"class":339},"\"函数开始执行\"",[312,168990,1959],{"class":324},[312,168992,168993],{"class":314,"line":298},[312,168994,168995],{"class":324},"        func()\n",[312,168997,168998,169000,169002,169005],{"class":314,"line":974},[312,168999,34246],{"class":488},[312,169001,1576],{"class":324},[312,169003,169004],{"class":339},"\"函数执行结束\"",[312,169006,1959],{"class":324},[312,169008,169009],{"class":314,"line":980},[312,169010,4205],{"emptyLinePlaceholder":1881},[312,169012,169013,169015],{"class":314,"line":997},[312,169014,5895],{"class":1436},[312,169016,169017],{"class":324}," wrapper\n",[312,169019,169020],{"class":314,"line":1003},[312,169021,4205],{"emptyLinePlaceholder":1881},[312,169023,169024],{"class":314,"line":1020},[312,169025,4205],{"emptyLinePlaceholder":1881},[312,169027,169028],{"class":314,"line":1026},[312,169029,169030],{"class":332},"@log\n",[312,169032,169033,169035,169037],{"class":314,"line":3418},[312,169034,33742],{"class":1436},[312,169036,162451],{"class":332},[312,169038,33748],{"class":324},[312,169040,169041,169043,169045,169047],{"class":314,"line":3423},[312,169042,33094],{"class":488},[312,169044,1576],{"class":324},[312,169046,7648],{"class":339},[312,169048,1959],{"class":324},[312,169050,169051],{"class":314,"line":3429},[312,169052,4205],{"emptyLinePlaceholder":1881},[312,169054,169055],{"class":314,"line":3434},[312,169056,4205],{"emptyLinePlaceholder":1881},[312,169058,169059],{"class":314,"line":3448},[312,169060,162486],{"class":324},[24,169062,159729],{},[303,169064,169066],{"className":32174,"code":169065,"language":32176,"meta":308,"style":308},"say_hello = log(say_hello)\n",[119,169067,169068],{"__ignoreMap":308},[312,169069,169070,169073,169075],{"class":314,"line":315},[312,169071,169072],{"class":324},"say_hello ",[312,169074,336],{"class":1436},[312,169076,169077],{"class":324}," log(say_hello)\n",[24,169079,169080],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,169082,169084],{"id":169083},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[303,169086,169088],{"className":32174,"code":169087,"language":32176,"meta":308,"style":308},"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",[119,169089,169090,169098,169115,169125,169144,169154,169161,169165,169171,169175,169179,169183,169191,169201,169205,169209],{"__ignoreMap":308},[312,169091,169092,169094,169096],{"class":314,"line":315},[312,169093,33742],{"class":1436},[312,169095,88961],{"class":332},[312,169097,168970],{"class":324},[312,169099,169100,169102,169104,169106,169108,169111,169113],{"class":314,"line":171},[312,169101,32597],{"class":1436},[312,169103,168977],{"class":332},[312,169105,1576],{"class":324},[312,169107,2400],{"class":1436},[312,169109,169110],{"class":324},"args, ",[312,169112,12464],{"class":1436},[312,169114,168121],{"class":324},[312,169116,169117,169119,169121,169123],{"class":314,"line":274},[312,169118,34246],{"class":488},[312,169120,1576],{"class":324},[312,169122,168988],{"class":339},[312,169124,1959],{"class":324},[312,169126,169127,169130,169132,169135,169137,169139,169141],{"class":314,"line":298},[312,169128,169129],{"class":324},"        result ",[312,169131,336],{"class":1436},[312,169133,169134],{"class":324}," func(",[312,169136,2400],{"class":1436},[312,169138,169110],{"class":324},[312,169140,12464],{"class":1436},[312,169142,169143],{"class":324},"kwargs)\n",[312,169145,169146,169148,169150,169152],{"class":314,"line":974},[312,169147,34246],{"class":488},[312,169149,1576],{"class":324},[312,169151,169004],{"class":339},[312,169153,1959],{"class":324},[312,169155,169156,169158],{"class":314,"line":980},[312,169157,16553],{"class":1436},[312,169159,169160],{"class":324}," result\n",[312,169162,169163],{"class":314,"line":997},[312,169164,4205],{"emptyLinePlaceholder":1881},[312,169166,169167,169169],{"class":314,"line":1003},[312,169168,5895],{"class":1436},[312,169170,169017],{"class":324},[312,169172,169173],{"class":314,"line":1020},[312,169174,4205],{"emptyLinePlaceholder":1881},[312,169176,169177],{"class":314,"line":1026},[312,169178,4205],{"emptyLinePlaceholder":1881},[312,169180,169181],{"class":314,"line":3418},[312,169182,169030],{"class":332},[312,169184,169185,169187,169189],{"class":314,"line":3423},[312,169186,33742],{"class":1436},[312,169188,7014],{"class":332},[312,169190,152548],{"class":324},[312,169192,169193,169195,169197,169199],{"class":314,"line":3429},[312,169194,5895],{"class":1436},[312,169196,12672],{"class":324},[312,169198,2426],{"class":1436},[312,169200,152559],{"class":324},[312,169202,169203],{"class":314,"line":3434},[312,169204,4205],{"emptyLinePlaceholder":1881},[312,169206,169207],{"class":314,"line":3448},[312,169208,4205],{"emptyLinePlaceholder":1881},[312,169210,169211,169213,169215,169217,169219,169221],{"class":314,"line":3453},[312,169212,32211],{"class":488},[312,169214,168055],{"class":324},[312,169216,2391],{"class":488},[312,169218,733],{"class":324},[312,169220,1546],{"class":488},[312,169222,32293],{"class":324},[24,169224,169225,169226,1167,169228,169230],{},"这个写法使用 ",[119,169227,167987],{},[119,169229,168102],{}," 接收原函数的所有参数。",[14,169232,169234],{"id":169233},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[24,169236,125060],{},[140,169238,169239,169242,169245],{},[143,169240,169241],{},"给定一组学生数据。",[143,169243,169244],{},"封装函数，根据传入规则筛选学生。",[143,169246,169247],{},"筛选及格、优秀、未成年学生。",[24,169249,11838],{},[303,169251,169253],{"className":32174,"code":169252,"language":32176,"meta":308,"style":308},"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",[119,169254,169255,169263,169291,169319,169347,169351,169355,169359,169369,169377,169387,169394,169399,169405,169409,169413,169437,169460,169483,169487,169494,169501],{"__ignoreMap":308},[312,169256,169257,169259,169261],{"class":314,"line":315},[312,169258,161171],{"class":324},[312,169260,336],{"class":1436},[312,169262,57229],{"class":324},[312,169264,169265,169267,169269,169271,169273,169275,169277,169279,169281,169283,169285,169287,169289],{"class":314,"line":171},[312,169266,149840],{"class":324},[312,169268,64457],{"class":339},[312,169270,492],{"class":324},[312,169272,151343],{"class":339},[312,169274,733],{"class":324},[312,169276,70901],{"class":339},[312,169278,492],{"class":324},[312,169280,2595],{"class":488},[312,169282,733],{"class":324},[312,169284,152927],{"class":339},[312,169286,492],{"class":324},[312,169288,2931],{"class":488},[312,169290,6735],{"class":324},[312,169292,169293,169295,169297,169299,169301,169303,169305,169307,169309,169311,169313,169315,169317],{"class":314,"line":274},[312,169294,149840],{"class":324},[312,169296,64457],{"class":339},[312,169298,492],{"class":324},[312,169300,152391],{"class":339},[312,169302,733],{"class":324},[312,169304,70901],{"class":339},[312,169306,492],{"class":324},[312,169308,2570],{"class":488},[312,169310,733],{"class":324},[312,169312,152927],{"class":339},[312,169314,492],{"class":324},[312,169316,2755],{"class":488},[312,169318,6735],{"class":324},[312,169320,169321,169323,169325,169327,169329,169331,169333,169335,169337,169339,169341,169343,169345],{"class":314,"line":298},[312,169322,149840],{"class":324},[312,169324,64457],{"class":339},[312,169326,492],{"class":324},[312,169328,161186],{"class":339},[312,169330,733],{"class":324},[312,169332,70901],{"class":339},[312,169334,492],{"class":324},[312,169336,2620],{"class":488},[312,169338,733],{"class":324},[312,169340,152927],{"class":339},[312,169342,492],{"class":324},[312,169344,2826],{"class":488},[312,169346,6735],{"class":324},[312,169348,169349],{"class":314,"line":974},[312,169350,35041],{"class":324},[312,169352,169353],{"class":314,"line":980},[312,169354,4205],{"emptyLinePlaceholder":1881},[312,169356,169357],{"class":314,"line":997},[312,169358,4205],{"emptyLinePlaceholder":1881},[312,169360,169361,169363,169366],{"class":314,"line":1003},[312,169362,33742],{"class":1436},[312,169364,169365],{"class":332}," filter_students",[312,169367,169368],{"class":324},"(students, condition):\n",[312,169370,169371,169373,169375],{"class":314,"line":1020},[312,169372,162678],{"class":324},[312,169374,336],{"class":1436},[312,169376,53624],{"class":324},[312,169378,169379,169381,169383,169385],{"class":314,"line":1026},[312,169380,5006],{"class":1436},[312,169382,153592],{"class":324},[312,169384,27839],{"class":1436},[312,169386,153597],{"class":324},[312,169388,169389,169391],{"class":314,"line":3418},[312,169390,4302],{"class":1436},[312,169392,169393],{"class":324}," condition(student):\n",[312,169395,169396],{"class":314,"line":3423},[312,169397,169398],{"class":324},"            result.append(student)\n",[312,169400,169401,169403],{"class":314,"line":3429},[312,169402,5895],{"class":1436},[312,169404,169160],{"class":324},[312,169406,169407],{"class":314,"line":3434},[312,169408,4205],{"emptyLinePlaceholder":1881},[312,169410,169411],{"class":314,"line":3448},[312,169412,4205],{"emptyLinePlaceholder":1881},[312,169414,169415,169417,169419,169422,169424,169427,169429,169431,169433,169435],{"class":314,"line":3453},[312,169416,167156],{"class":324},[312,169418,336],{"class":1436},[312,169420,169421],{"class":324}," filter_students(students, ",[312,169423,168341],{"class":1436},[312,169425,169426],{"class":324}," s: s[",[312,169428,152927],{"class":339},[312,169430,6248],{"class":324},[312,169432,3516],{"class":1436},[312,169434,159292],{"class":488},[312,169436,1959],{"class":324},[312,169438,169439,169442,169444,169446,169448,169450,169452,169454,169456,169458],{"class":314,"line":3459},[312,169440,169441],{"class":324},"excellent ",[312,169443,336],{"class":1436},[312,169445,169421],{"class":324},[312,169447,168341],{"class":1436},[312,169449,169426],{"class":324},[312,169451,152927],{"class":339},[312,169453,6248],{"class":324},[312,169455,3516],{"class":1436},[312,169457,159243],{"class":488},[312,169459,1959],{"class":324},[312,169461,169462,169465,169467,169469,169471,169473,169475,169477,169479,169481],{"class":314,"line":3480},[312,169463,169464],{"class":324},"under_age ",[312,169466,336],{"class":1436},[312,169468,169421],{"class":324},[312,169470,168341],{"class":1436},[312,169472,169426],{"class":324},[312,169474,70901],{"class":339},[312,169476,6248],{"class":324},[312,169478,325],{"class":1436},[312,169480,157740],{"class":488},[312,169482,1959],{"class":324},[312,169484,169485],{"class":314,"line":3485},[312,169486,4205],{"emptyLinePlaceholder":1881},[312,169488,169489,169491],{"class":314,"line":3499},[312,169490,32211],{"class":488},[312,169492,169493],{"class":324},"(passed)\n",[312,169495,169496,169498],{"class":314,"line":3504},[312,169497,32211],{"class":488},[312,169499,169500],{"class":324},"(excellent)\n",[312,169502,169503,169505],{"class":314,"line":3533},[312,169504,32211],{"class":488},[312,169506,169507],{"class":324},"(under_age)\n",[14,169509,169511],{"id":169510},"_715-易错点","7.15 易错点",[140,169513,169514,169517,169525,169530,169541],{},[143,169515,169516],{},"默认参数不要写可变对象。",[143,169518,169519,169521,169522,169524],{},[119,169520,167987],{}," 是元组，",[119,169523,168102],{}," 是字典。",[143,169526,169527,169529],{},[119,169528,168341],{}," 只适合简单表达式。",[143,169531,169532,1167,169534,169536,169537,169540],{},[119,169533,75816],{},[119,169535,81822],{}," 的结果是迭代器，常用 ",[119,169538,169539],{},"list()"," 转换查看。",[143,169542,169543],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169545,169547],{"id":169546},"_716-本章练习","7.16 本章练习",[140,169549,169550,169557,169563,169568,169573],{},[143,169551,169552,169553,169556],{},"写函数 ",[119,169554,169555],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[143,169558,169552,169559,169562],{},[119,169560,169561],{},"print_user(**kwargs)","，输出用户所有字段。",[143,169564,106135,169565,169567],{},[119,169566,168341],{}," 对学生列表按年龄排序。",[143,169569,106135,169570,169572],{},[119,169571,81822],{}," 找出成绩不及格的学生。",[143,169574,169575],{},"写一个装饰器，统计函数执行前后的提示信息。",[1856,169577,169578],{},"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":308,"searchDepth":171,"depth":171,"links":169580},[169581,169582,169583,169584,169585,169586,169590,169591,169592,169593,169598,169599,169600,169601,169602,169603],{"id":167439,"depth":171,"text":167440},{"id":167553,"depth":171,"text":167554},{"id":167642,"depth":171,"text":167643},{"id":167704,"depth":171,"text":167705},{"id":167850,"depth":171,"text":167851},{"id":167977,"depth":171,"text":167978,"children":169587},[169588,169589],{"id":167981,"depth":274,"text":167982},{"id":168096,"depth":274,"text":168097},{"id":168177,"depth":171,"text":168178},{"id":168335,"depth":171,"text":168336},{"id":168503,"depth":171,"text":168504},{"id":168585,"depth":171,"text":168586,"children":169594},[169595,169596,169597],{"id":168589,"depth":274,"text":168590},{"id":168660,"depth":274,"text":168661},{"id":168737,"depth":274,"text":168738},{"id":168862,"depth":171,"text":168863},{"id":168952,"depth":171,"text":168953},{"id":169083,"depth":171,"text":169084},{"id":169233,"depth":171,"text":169234},{"id":169510,"depth":171,"text":169511},{"id":169546,"depth":171,"text":169547},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167431,"description":1878},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169610,"title":169611,"body":169612,"description":1878,"extension":1879,"meta":172131,"navigation":1881,"path":172132,"seo":172133,"stem":172134,"__hash__":172135},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169613,"toc":172106},[169614,169617,169621,169624,169627,169658,169662,169666,169669,169696,169700,169703,169754,169757,169772,169775,169810,169814,169816,169840,169843,169903,169907,169911,169914,169971,169974,169994,169998,170001,170064,170068,170071,170127,170134,170158,170162,170165,170228,170232,170237,170288,170291,170295,170300,170367,170370,170452,170456,170461,170512,170515,170519,170522,170525,170533,170536,170582,170585,170631,170635,170641,170685,170688,170734,170737,170777,170780,170841,170845,170848,170938,170941,171083,171086,171153,171157,171160,171163,171304,171307,171385,171388,171564,171568,171570,171581,171583,171782,171786,172030,172034,172068,172072,172103],[10,169615,169611],{"id":169616},"_8-文件操作",[14,169618,169620],{"id":169619},"_81-文件操作的意义","8.1 文件操作的意义",[24,169622,169623],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[24,169625,169626],{},"常见文件类型：",[140,169628,169629,169635,169641,169647,169653],{},[143,169630,169631,169634],{},[119,169632,169633],{},".txt","：普通文本。",[143,169636,169637,169640],{},[119,169638,169639],{},".csv","：表格文本。",[143,169642,169643,169646],{},[119,169644,169645],{},".json","：结构化数据。",[143,169648,169649,169652],{},[119,169650,169651],{},".log","：日志文件。",[143,169654,169655,169657],{},[119,169656,147807],{},"：Python 源代码。",[14,169659,169661],{"id":169660},"_82-路径","8.2 路径",[69,169663,169665],{"id":169664},"_821-相对路径","8.2.1 相对路径",[24,169667,169668],{},"相对当前运行目录：",[303,169670,169672],{"className":32174,"code":169671,"language":32176,"meta":308,"style":308},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[119,169673,169674],{"__ignoreMap":308},[312,169675,169676,169678,169680,169682,169684,169686,169688,169690,169692,169694],{"class":314,"line":315},[312,169677,88685],{"class":488},[312,169679,1576],{"class":324},[312,169681,148251],{"class":339},[312,169683,733],{"class":324},[312,169685,148256],{"class":339},[312,169687,733],{"class":324},[312,169689,148261],{"class":1579},[312,169691,336],{"class":1436},[312,169693,148266],{"class":339},[312,169695,1959],{"class":324},[69,169697,169699],{"id":169698},"_822-绝对路径","8.2.2 绝对路径",[24,169701,169702],{},"从根目录或盘符开始：",[303,169704,169706],{"className":32174,"code":169705,"language":32176,"meta":308,"style":308},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[119,169707,169708,169731],{"__ignoreMap":308},[312,169709,169710,169712,169714,169717,169719,169721,169723,169725,169727,169729],{"class":314,"line":315},[312,169711,88685],{"class":488},[312,169713,1576],{"class":324},[312,169715,169716],{"class":339},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[312,169718,733],{"class":324},[312,169720,148256],{"class":339},[312,169722,733],{"class":324},[312,169724,148261],{"class":1579},[312,169726,336],{"class":1436},[312,169728,148266],{"class":339},[312,169730,1959],{"class":324},[312,169732,169733,169735,169737,169740,169742,169744,169746,169748,169750,169752],{"class":314,"line":171},[312,169734,88685],{"class":488},[312,169736,1576],{"class":324},[312,169738,169739],{"class":339},"\"D:\u002Fdata\u002Fdata.txt\"",[312,169741,733],{"class":324},[312,169743,148256],{"class":339},[312,169745,733],{"class":324},[312,169747,148261],{"class":1579},[312,169749,336],{"class":1436},[312,169751,148266],{"class":339},[312,169753,1959],{"class":324},[24,169755,169756],{},"Windows 路径建议写成：",[303,169758,169760],{"className":32174,"code":169759,"language":32176,"meta":308,"style":308},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[119,169761,169762],{"__ignoreMap":308},[312,169763,169764,169767,169769],{"class":314,"line":315},[312,169765,169766],{"class":324},"path ",[312,169768,336],{"class":1436},[312,169770,169771],{"class":339}," \"D:\u002Fdata\u002Fdata.txt\"\n",[24,169773,169774],{},"或原始字符串：",[303,169776,169778],{"className":32174,"code":169777,"language":32176,"meta":308,"style":308},"path = r\"D:\\data\\data.txt\"\n",[119,169779,169780],{"__ignoreMap":308},[312,169781,169782,169784,169786,169788,169790,169793,169796,169799,169801,169803,169805,169808],{"class":314,"line":315},[312,169783,169766],{"class":324},[312,169785,336],{"class":1436},[312,169787,18921],{"class":1436},[312,169789,2196],{"class":339},[312,169791,169792],{"class":49772},"D:",[312,169794,169795],{"class":488},"\\d",[312,169797,169798],{"class":49772},"ata",[312,169800,169795],{"class":488},[312,169802,169798],{"class":49772},[312,169804,2503],{"class":488},[312,169806,169807],{"class":49772},"txt",[312,169809,26929],{"class":339},[14,169811,169813],{"id":169812},"_83-open函数","8.3 open函数",[24,169815,6986],{},[303,169817,169819],{"className":32174,"code":169818,"language":32176,"meta":308,"style":308},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[119,169820,169821],{"__ignoreMap":308},[312,169822,169823,169825,169827,169829,169832,169834,169836,169838],{"class":314,"line":315},[312,169824,47149],{"class":1579},[312,169826,15366],{"class":1436},[312,169828,148246],{"class":488},[312,169830,169831],{"class":324},"(文件路径, 打开模式, ",[312,169833,148261],{"class":1579},[312,169835,336],{"class":1436},[312,169837,148266],{"class":339},[312,169839,1959],{"class":324},[24,169841,169842],{},"常见模式：",[2086,169844,169845,169854],{},[2089,169846,169847],{},[2092,169848,169849,169852],{},[2095,169850,169851],{},"模式",[2095,169853,27665],{},[2132,169855,169856,169865,169874,169883,169893],{},[2092,169857,169858,169862],{},[2137,169859,169860],{},[119,169861,2615],{},[2137,169863,169864],{},"只读，文件不存在会报错",[2092,169866,169867,169871],{},[2137,169868,169869],{},[119,169870,2739],{},[2137,169872,169873],{},"只写，文件不存在会创建，存在会清空",[2092,169875,169876,169880],{},[2137,169877,169878],{},[119,169879,164],{},[2137,169881,169882],{},"追加，文件不存在会创建",[2092,169884,169885,169890],{},[2137,169886,169887],{},[119,169888,169889],{},"rb",[2137,169891,169892],{},"二进制只读",[2092,169894,169895,169900],{},[2137,169896,169897],{},[119,169898,169899],{},"wb",[2137,169901,169902],{},"二进制只写",[14,169904,169906],{"id":169905},"_84-读取文件","8.4 读取文件",[69,169908,169910],{"id":169909},"_841-read","8.4.1 read",[24,169912,169913],{},"一次读取全部内容：",[303,169915,169917],{"className":32174,"code":169916,"language":32176,"meta":308,"style":308},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[119,169918,169919,169945,169957,169964],{"__ignoreMap":308},[312,169920,169921,169923,169925,169927,169929,169931,169933,169935,169937,169939,169941,169943],{"class":314,"line":315},[312,169922,47149],{"class":1579},[312,169924,15366],{"class":1436},[312,169926,148246],{"class":488},[312,169928,1576],{"class":324},[312,169930,148251],{"class":339},[312,169932,733],{"class":324},[312,169934,148256],{"class":339},[312,169936,733],{"class":324},[312,169938,148261],{"class":1579},[312,169940,336],{"class":1436},[312,169942,148266],{"class":339},[312,169944,1959],{"class":324},[312,169946,169947,169950,169952,169954],{"class":314,"line":171},[312,169948,169949],{"class":324},"content ",[312,169951,336],{"class":1436},[312,169953,149608],{"class":1579},[312,169955,169956],{"class":324},".read()\n",[312,169958,169959,169961],{"class":314,"line":274},[312,169960,32211],{"class":488},[312,169962,169963],{"class":324},"(content)\n",[312,169965,169966,169968],{"class":314,"line":298},[312,169967,47149],{"class":1579},[312,169969,169970],{"class":324},".close()\n",[24,169972,169973],{},"可以指定读取字符数：",[303,169975,169977],{"className":32174,"code":169976,"language":32176,"meta":308,"style":308},"content = file.read(10)\n",[119,169978,169979],{"__ignoreMap":308},[312,169980,169981,169983,169985,169987,169990,169992],{"class":314,"line":315},[312,169982,169949],{"class":324},[312,169984,336],{"class":1436},[312,169986,149608],{"class":1579},[312,169988,169989],{"class":324},".read(",[312,169991,2391],{"class":488},[312,169993,1959],{"class":324},[69,169995,169997],{"id":169996},"_842-readline","8.4.2 readline",[24,169999,170000],{},"一次读取一行：",[303,170002,170004],{"className":32174,"code":170003,"language":32176,"meta":308,"style":308},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[119,170005,170006,170032,170036,170047,170054,170058],{"__ignoreMap":308},[312,170007,170008,170010,170012,170014,170016,170018,170020,170022,170024,170026,170028,170030],{"class":314,"line":315},[312,170009,47149],{"class":1579},[312,170011,15366],{"class":1436},[312,170013,148246],{"class":488},[312,170015,1576],{"class":324},[312,170017,148251],{"class":339},[312,170019,733],{"class":324},[312,170021,148256],{"class":339},[312,170023,733],{"class":324},[312,170025,148261],{"class":1579},[312,170027,336],{"class":1436},[312,170029,148266],{"class":339},[312,170031,1959],{"class":324},[312,170033,170034],{"class":314,"line":171},[312,170035,4205],{"emptyLinePlaceholder":1881},[312,170037,170038,170040,170042,170044],{"class":314,"line":274},[312,170039,148707],{"class":324},[312,170041,336],{"class":1436},[312,170043,149608],{"class":1579},[312,170045,170046],{"class":324},".readline()\n",[312,170048,170049,170051],{"class":314,"line":298},[312,170050,32211],{"class":488},[312,170052,170053],{"class":324},"(line)\n",[312,170055,170056],{"class":314,"line":974},[312,170057,4205],{"emptyLinePlaceholder":1881},[312,170059,170060,170062],{"class":314,"line":980},[312,170061,47149],{"class":1579},[312,170063,169970],{"class":324},[69,170065,170067],{"id":170066},"_843-readlines","8.4.3 readlines",[24,170069,170070],{},"读取所有行，返回列表：",[303,170072,170074],{"className":32174,"code":170073,"language":32176,"meta":308,"style":308},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[119,170075,170076,170102,170114,170121],{"__ignoreMap":308},[312,170077,170078,170080,170082,170084,170086,170088,170090,170092,170094,170096,170098,170100],{"class":314,"line":315},[312,170079,47149],{"class":1579},[312,170081,15366],{"class":1436},[312,170083,148246],{"class":488},[312,170085,1576],{"class":324},[312,170087,148251],{"class":339},[312,170089,733],{"class":324},[312,170091,148256],{"class":339},[312,170093,733],{"class":324},[312,170095,148261],{"class":1579},[312,170097,336],{"class":1436},[312,170099,148266],{"class":339},[312,170101,1959],{"class":324},[312,170103,170104,170107,170109,170111],{"class":314,"line":171},[312,170105,170106],{"class":324},"lines ",[312,170108,336],{"class":1436},[312,170110,149608],{"class":1579},[312,170112,170113],{"class":324},".readlines()\n",[312,170115,170116,170118],{"class":314,"line":274},[312,170117,32211],{"class":488},[312,170119,170120],{"class":324},"(lines)\n",[312,170122,170123,170125],{"class":314,"line":298},[312,170124,47149],{"class":1579},[312,170126,169970],{"class":324},[24,170128,170129,170130,170133],{},"每一行通常带有换行符，可以用 ",[119,170131,170132],{},"strip()"," 去掉：",[303,170135,170137],{"className":32174,"code":170136,"language":32176,"meta":308,"style":308},"for line in lines:\n    print(line.strip())\n",[119,170138,170139,170151],{"__ignoreMap":308},[312,170140,170141,170143,170146,170148],{"class":314,"line":315},[312,170142,4830],{"class":1436},[312,170144,170145],{"class":324}," line ",[312,170147,27839],{"class":1436},[312,170149,170150],{"class":324}," lines:\n",[312,170152,170153,170155],{"class":314,"line":171},[312,170154,33094],{"class":488},[312,170156,170157],{"class":324},"(line.strip())\n",[69,170159,170161],{"id":170160},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[24,170163,170164],{},"推荐读取大文件时使用：",[303,170166,170168],{"className":32174,"code":170167,"language":32176,"meta":308,"style":308},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[119,170169,170170,170196,170200,170212,170218,170222],{"__ignoreMap":308},[312,170171,170172,170174,170176,170178,170180,170182,170184,170186,170188,170190,170192,170194],{"class":314,"line":315},[312,170173,47149],{"class":1579},[312,170175,15366],{"class":1436},[312,170177,148246],{"class":488},[312,170179,1576],{"class":324},[312,170181,148251],{"class":339},[312,170183,733],{"class":324},[312,170185,148256],{"class":339},[312,170187,733],{"class":324},[312,170189,148261],{"class":1579},[312,170191,336],{"class":1436},[312,170193,148266],{"class":339},[312,170195,1959],{"class":324},[312,170197,170198],{"class":314,"line":171},[312,170199,4205],{"emptyLinePlaceholder":1881},[312,170201,170202,170204,170206,170208,170210],{"class":314,"line":274},[312,170203,4830],{"class":1436},[312,170205,170145],{"class":324},[312,170207,27839],{"class":1436},[312,170209,149608],{"class":1579},[312,170211,5544],{"class":324},[312,170213,170214,170216],{"class":314,"line":298},[312,170215,33094],{"class":488},[312,170217,170157],{"class":324},[312,170219,170220],{"class":314,"line":974},[312,170221,4205],{"emptyLinePlaceholder":1881},[312,170223,170224,170226],{"class":314,"line":980},[312,170225,47149],{"class":1579},[312,170227,169970],{"class":324},[14,170229,170231],{"id":170230},"_85-with语句","8.5 with语句",[24,170233,170234,170236],{},[119,170235,109602],{}," 会自动关闭文件，推荐使用。",[303,170238,170240],{"className":32174,"code":170239,"language":32176,"meta":308,"style":308},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[119,170241,170242,170272,170282],{"__ignoreMap":308},[312,170243,170244,170246,170248,170250,170252,170254,170256,170258,170260,170262,170264,170266,170268,170270],{"class":314,"line":315},[312,170245,109602],{"class":1436},[312,170247,148246],{"class":488},[312,170249,1576],{"class":324},[312,170251,148251],{"class":339},[312,170253,733],{"class":324},[312,170255,148256],{"class":339},[312,170257,733],{"class":324},[312,170259,148261],{"class":1579},[312,170261,336],{"class":1436},[312,170263,148266],{"class":339},[312,170265,1583],{"class":324},[312,170267,33178],{"class":1436},[312,170269,149608],{"class":1579},[312,170271,5544],{"class":324},[312,170273,170274,170276,170278,170280],{"class":314,"line":171},[312,170275,148278],{"class":324},[312,170277,336],{"class":1436},[312,170279,149608],{"class":1579},[312,170281,169956],{"class":324},[312,170283,170284,170286],{"class":314,"line":274},[312,170285,33094],{"class":488},[312,170287,169963],{"class":324},[24,170289,170290],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170292,170294],{"id":170293},"_86-写入文件","8.6 写入文件",[24,170296,170297,170299],{},[119,170298,2739],{}," 模式会清空原文件。",[303,170301,170303],{"className":32174,"code":170302,"language":32176,"meta":308,"style":308},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[119,170304,170305,170335,170352],{"__ignoreMap":308},[312,170306,170307,170309,170311,170313,170315,170317,170319,170321,170323,170325,170327,170329,170331,170333],{"class":314,"line":315},[312,170308,109602],{"class":1436},[312,170310,148246],{"class":488},[312,170312,1576],{"class":324},[312,170314,148251],{"class":339},[312,170316,733],{"class":324},[312,170318,153431],{"class":339},[312,170320,733],{"class":324},[312,170322,148261],{"class":1579},[312,170324,336],{"class":1436},[312,170326,148266],{"class":339},[312,170328,1583],{"class":324},[312,170330,33178],{"class":1436},[312,170332,149608],{"class":1579},[312,170334,5544],{"class":324},[312,170336,170337,170340,170343,170346,170348,170350],{"class":314,"line":171},[312,170338,170339],{"class":1579},"    file",[312,170341,170342],{"class":324},".write(",[312,170344,170345],{"class":339},"\"hello",[312,170347,157980],{"class":488},[312,170349,2196],{"class":339},[312,170351,1959],{"class":324},[312,170353,170354,170356,170358,170361,170363,170365],{"class":314,"line":274},[312,170355,170339],{"class":1579},[312,170357,170342],{"class":324},[312,170359,170360],{"class":339},"\"python",[312,170362,157980],{"class":488},[312,170364,2196],{"class":339},[312,170366,1959],{"class":324},[24,170368,170369],{},"写入多行：",[303,170371,170373],{"className":32174,"code":170372,"language":32176,"meta":308,"style":308},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[119,170374,170375,170410,170414,170445],{"__ignoreMap":308},[312,170376,170377,170379,170381,170383,170386,170388,170390,170392,170395,170397,170399,170401,170404,170406,170408],{"class":314,"line":315},[312,170378,170106],{"class":324},[312,170380,336],{"class":1436},[312,170382,54012],{"class":324},[312,170384,170385],{"class":339},"\"小明,18",[312,170387,157980],{"class":488},[312,170389,2196],{"class":339},[312,170391,733],{"class":324},[312,170393,170394],{"class":339},"\"小红,17",[312,170396,157980],{"class":488},[312,170398,2196],{"class":339},[312,170400,733],{"class":324},[312,170402,170403],{"class":339},"\"小刚,19",[312,170405,157980],{"class":488},[312,170407,2196],{"class":339},[312,170409,35041],{"class":324},[312,170411,170412],{"class":314,"line":171},[312,170413,4205],{"emptyLinePlaceholder":1881},[312,170415,170416,170418,170420,170422,170425,170427,170429,170431,170433,170435,170437,170439,170441,170443],{"class":314,"line":274},[312,170417,109602],{"class":1436},[312,170419,148246],{"class":488},[312,170421,1576],{"class":324},[312,170423,170424],{"class":339},"\"students.txt\"",[312,170426,733],{"class":324},[312,170428,153431],{"class":339},[312,170430,733],{"class":324},[312,170432,148261],{"class":1579},[312,170434,336],{"class":1436},[312,170436,148266],{"class":339},[312,170438,1583],{"class":324},[312,170440,33178],{"class":1436},[312,170442,149608],{"class":1579},[312,170444,5544],{"class":324},[312,170446,170447,170449],{"class":314,"line":298},[312,170448,170339],{"class":1579},[312,170450,170451],{"class":324},".writelines(lines)\n",[14,170453,170455],{"id":170454},"_87-追加文件","8.7 追加文件",[24,170457,170458,170460],{},[119,170459,164],{}," 模式不会清空原内容，而是在末尾追加。",[303,170462,170464],{"className":32174,"code":170463,"language":32176,"meta":308,"style":308},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[119,170465,170466,170497],{"__ignoreMap":308},[312,170467,170468,170470,170472,170474,170477,170479,170481,170483,170485,170487,170489,170491,170493,170495],{"class":314,"line":315},[312,170469,109602],{"class":1436},[312,170471,148246],{"class":488},[312,170473,1576],{"class":324},[312,170475,170476],{"class":339},"\"log.txt\"",[312,170478,733],{"class":324},[312,170480,166780],{"class":339},[312,170482,733],{"class":324},[312,170484,148261],{"class":1579},[312,170486,336],{"class":1436},[312,170488,148266],{"class":339},[312,170490,1583],{"class":324},[312,170492,33178],{"class":1436},[312,170494,149608],{"class":1579},[312,170496,5544],{"class":324},[312,170498,170499,170501,170503,170506,170508,170510],{"class":314,"line":171},[312,170500,170339],{"class":1579},[312,170502,170342],{"class":324},[312,170504,170505],{"class":339},"\"程序启动",[312,170507,157980],{"class":488},[312,170509,2196],{"class":339},[312,170511,1959],{"class":324},[24,170513,170514],{},"日志类文件常用追加模式。",[14,170516,170518],{"id":170517},"_88-文件编码","8.8 文件编码",[24,170520,170521],{},"编码决定文字如何保存为字节。",[24,170523,170524],{},"常见编码：",[140,170526,170527,170530],{},[143,170528,170529],{},"UTF-8：推荐。",[143,170531,170532],{},"GBK：部分 Windows 中文文件常见。",[24,170534,170535],{},"读取文件乱码时，可以尝试：",[303,170537,170539],{"className":32174,"code":170538,"language":32176,"meta":308,"style":308},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[119,170540,170541,170572],{"__ignoreMap":308},[312,170542,170543,170545,170547,170549,170551,170553,170555,170557,170559,170561,170564,170566,170568,170570],{"class":314,"line":315},[312,170544,109602],{"class":1436},[312,170546,148246],{"class":488},[312,170548,1576],{"class":324},[312,170550,148251],{"class":339},[312,170552,733],{"class":324},[312,170554,148256],{"class":339},[312,170556,733],{"class":324},[312,170558,148261],{"class":1579},[312,170560,336],{"class":1436},[312,170562,170563],{"class":339},"\"gbk\"",[312,170565,1583],{"class":324},[312,170567,33178],{"class":1436},[312,170569,149608],{"class":1579},[312,170571,5544],{"class":324},[312,170573,170574,170576,170578,170580],{"class":314,"line":171},[312,170575,148278],{"class":324},[312,170577,336],{"class":1436},[312,170579,149608],{"class":1579},[312,170581,169956],{"class":324},[24,170583,170584],{},"写文件时建议统一 UTF-8：",[303,170586,170588],{"className":32174,"code":170587,"language":32176,"meta":308,"style":308},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[119,170589,170590,170620],{"__ignoreMap":308},[312,170591,170592,170594,170596,170598,170600,170602,170604,170606,170608,170610,170612,170614,170616,170618],{"class":314,"line":315},[312,170593,109602],{"class":1436},[312,170595,148246],{"class":488},[312,170597,1576],{"class":324},[312,170599,148251],{"class":339},[312,170601,733],{"class":324},[312,170603,153431],{"class":339},[312,170605,733],{"class":324},[312,170607,148261],{"class":1579},[312,170609,336],{"class":1436},[312,170611,148266],{"class":339},[312,170613,1583],{"class":324},[312,170615,33178],{"class":1436},[312,170617,149608],{"class":1579},[312,170619,5544],{"class":324},[312,170621,170622,170624,170626,170629],{"class":314,"line":171},[312,170623,170339],{"class":1579},[312,170625,170342],{"class":324},[312,170627,170628],{"class":339},"\"中文内容\"",[312,170630,1959],{"class":324},[14,170632,170634],{"id":170633},"_89-pathlib","8.9 pathlib",[24,170636,170637,170640],{},[119,170638,170639],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[303,170642,170644],{"className":32174,"code":170643,"language":32176,"meta":308,"style":308},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[119,170645,170646,170656,170660,170678],{"__ignoreMap":308},[312,170647,170648,170650,170652,170654],{"class":314,"line":315},[312,170649,32533],{"class":1436},[312,170651,110080],{"class":324},[312,170653,32188],{"class":1436},[312,170655,110085],{"class":324},[312,170657,170658],{"class":314,"line":171},[312,170659,4205],{"emptyLinePlaceholder":1881},[312,170661,170662,170664,170666,170668,170671,170673,170675],{"class":314,"line":274},[312,170663,169766],{"class":324},[312,170665,336],{"class":1436},[312,170667,110314],{"class":324},[312,170669,170670],{"class":339},"\"data\"",[312,170672,1583],{"class":324},[312,170674,2529],{"class":1436},[312,170676,170677],{"class":339}," \"students.txt\"\n",[312,170679,170680,170682],{"class":314,"line":298},[312,170681,32211],{"class":488},[312,170683,170684],{"class":324},"(path)\n",[24,170686,170687],{},"创建目录：",[303,170689,170691],{"className":32174,"code":170690,"language":32176,"meta":308,"style":308},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[119,170692,170693,170703,170707,170720],{"__ignoreMap":308},[312,170694,170695,170697,170699,170701],{"class":314,"line":315},[312,170696,32533],{"class":1436},[312,170698,110080],{"class":324},[312,170700,32188],{"class":1436},[312,170702,110085],{"class":324},[312,170704,170705],{"class":314,"line":171},[312,170706,4205],{"emptyLinePlaceholder":1881},[312,170708,170709,170712,170714,170716,170718],{"class":314,"line":274},[312,170710,170711],{"class":324},"data_dir ",[312,170713,336],{"class":1436},[312,170715,110314],{"class":324},[312,170717,170670],{"class":339},[312,170719,1959],{"class":324},[312,170721,170722,170725,170728,170730,170732],{"class":314,"line":298},[312,170723,170724],{"class":324},"data_dir.mkdir(",[312,170726,170727],{"class":1579},"exist_ok",[312,170729,336],{"class":1436},[312,170731,33271],{"class":488},[312,170733,1959],{"class":324},[24,170735,170736],{},"判断文件是否存在：",[303,170738,170740],{"className":32174,"code":170739,"language":32176,"meta":308,"style":308},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[119,170741,170742,170755,170759,170766],{"__ignoreMap":308},[312,170743,170744,170746,170748,170750,170753],{"class":314,"line":315},[312,170745,169766],{"class":324},[312,170747,336],{"class":1436},[312,170749,110314],{"class":324},[312,170751,170752],{"class":339},"\"data\u002Fstudents.txt\"",[312,170754,1959],{"class":324},[312,170756,170757],{"class":314,"line":171},[312,170758,4205],{"emptyLinePlaceholder":1881},[312,170760,170761,170763],{"class":314,"line":274},[312,170762,3338],{"class":1436},[312,170764,170765],{"class":324}," path.exists():\n",[312,170767,170768,170770,170772,170775],{"class":314,"line":298},[312,170769,33094],{"class":488},[312,170771,1576],{"class":324},[312,170773,170774],{"class":339},"\"文件存在\"",[312,170776,1959],{"class":324},[24,170778,170779],{},"读写文本：",[303,170781,170783],{"className":32174,"code":170782,"language":32176,"meta":308,"style":308},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[119,170784,170785,170797,170801,170818,170835],{"__ignoreMap":308},[312,170786,170787,170789,170791,170793,170795],{"class":314,"line":315},[312,170788,169766],{"class":324},[312,170790,336],{"class":1436},[312,170792,110314],{"class":324},[312,170794,148251],{"class":339},[312,170796,1959],{"class":324},[312,170798,170799],{"class":314,"line":171},[312,170800,4205],{"emptyLinePlaceholder":1881},[312,170802,170803,170806,170808,170810,170812,170814,170816],{"class":314,"line":274},[312,170804,170805],{"class":324},"path.write_text(",[312,170807,147331],{"class":339},[312,170809,733],{"class":324},[312,170811,148261],{"class":1579},[312,170813,336],{"class":1436},[312,170815,148266],{"class":339},[312,170817,1959],{"class":324},[312,170819,170820,170822,170824,170827,170829,170831,170833],{"class":314,"line":298},[312,170821,169949],{"class":324},[312,170823,336],{"class":1436},[312,170825,170826],{"class":324}," path.read_text(",[312,170828,148261],{"class":1579},[312,170830,336],{"class":1436},[312,170832,148266],{"class":339},[312,170834,1959],{"class":324},[312,170836,170837,170839],{"class":314,"line":974},[312,170838,32211],{"class":488},[312,170840,169963],{"class":324},[14,170842,170844],{"id":170843},"_810-json文件","8.10 JSON文件",[24,170846,170847],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[303,170849,170851],{"className":32174,"code":170850,"language":32176,"meta":308,"style":308},"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",[119,170852,170853,170859,170863,170871,170881,170891,170899,170903,170907,170932],{"__ignoreMap":308},[312,170854,170855,170857],{"class":314,"line":315},[312,170856,32188],{"class":1436},[312,170858,148546],{"class":324},[312,170860,170861],{"class":314,"line":171},[312,170862,4205],{"emptyLinePlaceholder":1881},[312,170864,170865,170867,170869],{"class":314,"line":274},[312,170866,150936],{"class":324},[312,170868,336],{"class":1436},[312,170870,483],{"class":324},[312,170872,170873,170875,170877,170879],{"class":314,"line":298},[312,170874,148475],{"class":339},[312,170876,492],{"class":324},[312,170878,151343],{"class":339},[312,170880,33261],{"class":324},[312,170882,170883,170885,170887,170889],{"class":314,"line":974},[312,170884,165992],{"class":339},[312,170886,492],{"class":324},[312,170888,2595],{"class":488},[312,170890,33261],{"class":324},[312,170892,170893,170895,170897],{"class":314,"line":980},[312,170894,166003],{"class":339},[312,170896,492],{"class":324},[312,170898,166008],{"class":488},[312,170900,170901],{"class":314,"line":997},[312,170902,515],{"class":324},[312,170904,170905],{"class":314,"line":1003},[312,170906,4205],{"emptyLinePlaceholder":1881},[312,170908,170909,170911,170913,170916,170918,170920,170922,170924,170926,170928,170930],{"class":314,"line":1020},[312,170910,157899],{"class":324},[312,170912,336],{"class":1436},[312,170914,170915],{"class":324}," json.dumps(student, ",[312,170917,148592],{"class":1579},[312,170919,336],{"class":1436},[312,170921,35782],{"class":488},[312,170923,733],{"class":324},[312,170925,153467],{"class":1579},[312,170927,336],{"class":1436},[312,170929,2027],{"class":488},[312,170931,1959],{"class":324},[312,170933,170934,170936],{"class":314,"line":1026},[312,170935,32211],{"class":488},[312,170937,165526],{"class":324},[24,170939,170940],{},"写入 JSON 文件：",[303,170942,170944],{"className":32174,"code":170943,"language":32176,"meta":308,"style":308},"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",[119,170945,170946,170952,170956,170964,170992,171020,171024,171028,171058],{"__ignoreMap":308},[312,170947,170948,170950],{"class":314,"line":315},[312,170949,32188],{"class":1436},[312,170951,148546],{"class":324},[312,170953,170954],{"class":314,"line":171},[312,170955,4205],{"emptyLinePlaceholder":1881},[312,170957,170958,170960,170962],{"class":314,"line":274},[312,170959,161171],{"class":324},[312,170961,336],{"class":1436},[312,170963,57229],{"class":324},[312,170965,170966,170968,170970,170972,170974,170976,170978,170980,170982,170984,170986,170988,170990],{"class":314,"line":298},[312,170967,149840],{"class":324},[312,170969,64457],{"class":339},[312,170971,492],{"class":324},[312,170973,151343],{"class":339},[312,170975,733],{"class":324},[312,170977,70901],{"class":339},[312,170979,492],{"class":324},[312,170981,2595],{"class":488},[312,170983,733],{"class":324},[312,170985,152927],{"class":339},[312,170987,492],{"class":324},[312,170989,2931],{"class":488},[312,170991,6735],{"class":324},[312,170993,170994,170996,170998,171000,171002,171004,171006,171008,171010,171012,171014,171016,171018],{"class":314,"line":974},[312,170995,149840],{"class":324},[312,170997,64457],{"class":339},[312,170999,492],{"class":324},[312,171001,152391],{"class":339},[312,171003,733],{"class":324},[312,171005,70901],{"class":339},[312,171007,492],{"class":324},[312,171009,2570],{"class":488},[312,171011,733],{"class":324},[312,171013,152927],{"class":339},[312,171015,492],{"class":324},[312,171017,2755],{"class":488},[312,171019,6735],{"class":324},[312,171021,171022],{"class":314,"line":980},[312,171023,35041],{"class":324},[312,171025,171026],{"class":314,"line":997},[312,171027,4205],{"emptyLinePlaceholder":1881},[312,171029,171030,171032,171034,171036,171038,171040,171042,171044,171046,171048,171050,171052,171054,171056],{"class":314,"line":1003},[312,171031,109602],{"class":1436},[312,171033,148246],{"class":488},[312,171035,1576],{"class":324},[312,171037,153286],{"class":339},[312,171039,733],{"class":324},[312,171041,153431],{"class":339},[312,171043,733],{"class":324},[312,171045,148261],{"class":1579},[312,171047,336],{"class":1436},[312,171049,148266],{"class":339},[312,171051,1583],{"class":324},[312,171053,33178],{"class":1436},[312,171055,149608],{"class":1579},[312,171057,5544],{"class":324},[312,171059,171060,171063,171065,171067,171069,171071,171073,171075,171077,171079,171081],{"class":314,"line":1020},[312,171061,171062],{"class":324},"    json.dump(students, ",[312,171064,47149],{"class":1579},[312,171066,733],{"class":324},[312,171068,148592],{"class":1579},[312,171070,336],{"class":1436},[312,171072,35782],{"class":488},[312,171074,733],{"class":324},[312,171076,153467],{"class":1579},[312,171078,336],{"class":1436},[312,171080,2027],{"class":488},[312,171082,1959],{"class":324},[24,171084,171085],{},"读取 JSON 文件：",[303,171087,171089],{"className":32174,"code":171088,"language":32176,"meta":308,"style":308},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[119,171090,171091,171097,171101,171131,171143,171147],{"__ignoreMap":308},[312,171092,171093,171095],{"class":314,"line":315},[312,171094,32188],{"class":1436},[312,171096,148546],{"class":324},[312,171098,171099],{"class":314,"line":171},[312,171100,4205],{"emptyLinePlaceholder":1881},[312,171102,171103,171105,171107,171109,171111,171113,171115,171117,171119,171121,171123,171125,171127,171129],{"class":314,"line":274},[312,171104,109602],{"class":1436},[312,171106,148246],{"class":488},[312,171108,1576],{"class":324},[312,171110,153286],{"class":339},[312,171112,733],{"class":324},[312,171114,148256],{"class":339},[312,171116,733],{"class":324},[312,171118,148261],{"class":1579},[312,171120,336],{"class":1436},[312,171122,148266],{"class":339},[312,171124,1583],{"class":324},[312,171126,33178],{"class":1436},[312,171128,149608],{"class":1579},[312,171130,5544],{"class":324},[312,171132,171133,171135,171137,171139,171141],{"class":314,"line":298},[312,171134,154492],{"class":324},[312,171136,336],{"class":1436},[312,171138,149619],{"class":324},[312,171140,47149],{"class":1579},[312,171142,1959],{"class":324},[312,171144,171145],{"class":314,"line":974},[312,171146,4205],{"emptyLinePlaceholder":1881},[312,171148,171149,171151],{"class":314,"line":980},[312,171150,32211],{"class":488},[312,171152,166450],{"class":324},[14,171154,171156],{"id":171155},"_811-csv文件","8.11 CSV文件",[24,171158,171159],{},"CSV 是逗号分隔值，常用于表格数据。",[24,171161,171162],{},"写入 CSV：",[303,171164,171166],{"className":32174,"code":171165,"language":32176,"meta":308,"style":308},"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",[119,171167,171168,171175,171179,171187,171205,171221,171237,171241,171245,171285,171299],{"__ignoreMap":308},[312,171169,171170,171172],{"class":314,"line":315},[312,171171,32188],{"class":1436},[312,171173,171174],{"class":324}," csv\n",[312,171176,171177],{"class":314,"line":171},[312,171178,4205],{"emptyLinePlaceholder":1881},[312,171180,171181,171183,171185],{"class":314,"line":274},[312,171182,161171],{"class":324},[312,171184,336],{"class":1436},[312,171186,57229],{"class":324},[312,171188,171189,171192,171194,171196,171198,171200,171203],{"class":314,"line":298},[312,171190,171191],{"class":324},"    [",[312,171193,74871],{"class":339},[312,171195,733],{"class":324},[312,171197,74904],{"class":339},[312,171199,733],{"class":324},[312,171201,171202],{"class":339},"\"成绩\"",[312,171204,89606],{"class":324},[312,171206,171207,171209,171211,171213,171215,171217,171219],{"class":314,"line":974},[312,171208,171191],{"class":324},[312,171210,151343],{"class":339},[312,171212,733],{"class":324},[312,171214,2595],{"class":488},[312,171216,733],{"class":324},[312,171218,2931],{"class":488},[312,171220,89606],{"class":324},[312,171222,171223,171225,171227,171229,171231,171233,171235],{"class":314,"line":980},[312,171224,171191],{"class":324},[312,171226,152391],{"class":339},[312,171228,733],{"class":324},[312,171230,2570],{"class":488},[312,171232,733],{"class":324},[312,171234,2755],{"class":488},[312,171236,89606],{"class":324},[312,171238,171239],{"class":314,"line":997},[312,171240,35041],{"class":324},[312,171242,171243],{"class":314,"line":1003},[312,171244,4205],{"emptyLinePlaceholder":1881},[312,171246,171247,171249,171251,171253,171256,171258,171260,171262,171264,171266,171268,171270,171273,171275,171277,171279,171281,171283],{"class":314,"line":1020},[312,171248,109602],{"class":1436},[312,171250,148246],{"class":488},[312,171252,1576],{"class":324},[312,171254,171255],{"class":339},"\"students.csv\"",[312,171257,733],{"class":324},[312,171259,153431],{"class":339},[312,171261,733],{"class":324},[312,171263,148261],{"class":1579},[312,171265,336],{"class":1436},[312,171267,148266],{"class":339},[312,171269,733],{"class":324},[312,171271,171272],{"class":1579},"newline",[312,171274,336],{"class":1436},[312,171276,495],{"class":339},[312,171278,1583],{"class":324},[312,171280,33178],{"class":1436},[312,171282,149608],{"class":1579},[312,171284,5544],{"class":324},[312,171286,171287,171290,171292,171295,171297],{"class":314,"line":1026},[312,171288,171289],{"class":324},"    writer ",[312,171291,336],{"class":1436},[312,171293,171294],{"class":324}," csv.writer(",[312,171296,47149],{"class":1579},[312,171298,1959],{"class":324},[312,171300,171301],{"class":314,"line":3418},[312,171302,171303],{"class":324},"    writer.writerows(students)\n",[24,171305,171306],{},"读取 CSV：",[303,171308,171310],{"className":32174,"code":171309,"language":32176,"meta":308,"style":308},"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",[119,171311,171312,171318,171322,171352,171366,171378],{"__ignoreMap":308},[312,171313,171314,171316],{"class":314,"line":315},[312,171315,32188],{"class":1436},[312,171317,171174],{"class":324},[312,171319,171320],{"class":314,"line":171},[312,171321,4205],{"emptyLinePlaceholder":1881},[312,171323,171324,171326,171328,171330,171332,171334,171336,171338,171340,171342,171344,171346,171348,171350],{"class":314,"line":274},[312,171325,109602],{"class":1436},[312,171327,148246],{"class":488},[312,171329,1576],{"class":324},[312,171331,171255],{"class":339},[312,171333,733],{"class":324},[312,171335,148256],{"class":339},[312,171337,733],{"class":324},[312,171339,148261],{"class":1579},[312,171341,336],{"class":1436},[312,171343,148266],{"class":339},[312,171345,1583],{"class":324},[312,171347,33178],{"class":1436},[312,171349,149608],{"class":1579},[312,171351,5544],{"class":324},[312,171353,171354,171357,171359,171362,171364],{"class":314,"line":298},[312,171355,171356],{"class":324},"    reader ",[312,171358,336],{"class":1436},[312,171360,171361],{"class":324}," csv.reader(",[312,171363,47149],{"class":1579},[312,171365,1959],{"class":324},[312,171367,171368,171370,171373,171375],{"class":314,"line":974},[312,171369,5006],{"class":1436},[312,171371,171372],{"class":324}," row ",[312,171374,27839],{"class":1436},[312,171376,171377],{"class":324}," reader:\n",[312,171379,171380,171382],{"class":314,"line":980},[312,171381,34246],{"class":488},[312,171383,171384],{"class":324},"(row)\n",[24,171386,171387],{},"使用字典写入：",[303,171389,171391],{"className":32174,"code":171390,"language":32176,"meta":308,"style":308},"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",[119,171392,171393,171399,171403,171411,171439,171467,171471,171475,171513,171534,171555,171560],{"__ignoreMap":308},[312,171394,171395,171397],{"class":314,"line":315},[312,171396,32188],{"class":1436},[312,171398,171174],{"class":324},[312,171400,171401],{"class":314,"line":171},[312,171402,4205],{"emptyLinePlaceholder":1881},[312,171404,171405,171407,171409],{"class":314,"line":274},[312,171406,161171],{"class":324},[312,171408,336],{"class":1436},[312,171410,57229],{"class":324},[312,171412,171413,171415,171417,171419,171421,171423,171425,171427,171429,171431,171433,171435,171437],{"class":314,"line":298},[312,171414,149840],{"class":324},[312,171416,64457],{"class":339},[312,171418,492],{"class":324},[312,171420,151343],{"class":339},[312,171422,733],{"class":324},[312,171424,70901],{"class":339},[312,171426,492],{"class":324},[312,171428,2595],{"class":488},[312,171430,733],{"class":324},[312,171432,152927],{"class":339},[312,171434,492],{"class":324},[312,171436,2931],{"class":488},[312,171438,6735],{"class":324},[312,171440,171441,171443,171445,171447,171449,171451,171453,171455,171457,171459,171461,171463,171465],{"class":314,"line":974},[312,171442,149840],{"class":324},[312,171444,64457],{"class":339},[312,171446,492],{"class":324},[312,171448,152391],{"class":339},[312,171450,733],{"class":324},[312,171452,70901],{"class":339},[312,171454,492],{"class":324},[312,171456,2570],{"class":488},[312,171458,733],{"class":324},[312,171460,152927],{"class":339},[312,171462,492],{"class":324},[312,171464,2755],{"class":488},[312,171466,6735],{"class":324},[312,171468,171469],{"class":314,"line":980},[312,171470,35041],{"class":324},[312,171472,171473],{"class":314,"line":997},[312,171474,4205],{"emptyLinePlaceholder":1881},[312,171476,171477,171479,171481,171483,171485,171487,171489,171491,171493,171495,171497,171499,171501,171503,171505,171507,171509,171511],{"class":314,"line":1003},[312,171478,109602],{"class":1436},[312,171480,148246],{"class":488},[312,171482,1576],{"class":324},[312,171484,171255],{"class":339},[312,171486,733],{"class":324},[312,171488,153431],{"class":339},[312,171490,733],{"class":324},[312,171492,148261],{"class":1579},[312,171494,336],{"class":1436},[312,171496,148266],{"class":339},[312,171498,733],{"class":324},[312,171500,171272],{"class":1579},[312,171502,336],{"class":1436},[312,171504,495],{"class":339},[312,171506,1583],{"class":324},[312,171508,33178],{"class":1436},[312,171510,149608],{"class":1579},[312,171512,5544],{"class":324},[312,171514,171515,171518,171520,171522,171524,171526,171528,171530,171532],{"class":314,"line":1020},[312,171516,171517],{"class":324},"    fieldnames ",[312,171519,336],{"class":1436},[312,171521,54012],{"class":324},[312,171523,64457],{"class":339},[312,171525,733],{"class":324},[312,171527,70901],{"class":339},[312,171529,733],{"class":324},[312,171531,152927],{"class":339},[312,171533,35041],{"class":324},[312,171535,171536,171538,171540,171543,171545,171547,171550,171552],{"class":314,"line":1026},[312,171537,171289],{"class":324},[312,171539,336],{"class":1436},[312,171541,171542],{"class":324}," csv.DictWriter(",[312,171544,47149],{"class":1579},[312,171546,733],{"class":324},[312,171548,171549],{"class":1579},"fieldnames",[312,171551,336],{"class":1436},[312,171553,171554],{"class":324},"fieldnames)\n",[312,171556,171557],{"class":314,"line":3418},[312,171558,171559],{"class":324},"    writer.writeheader()\n",[312,171561,171562],{"class":314,"line":3423},[312,171563,171303],{"class":324},[14,171565,171567],{"id":171566},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[24,171569,125060],{},[140,171571,171572,171575,171578],{},[143,171573,171574],{},"读取文本文件。",[143,171576,171577],{},"统计每个单词出现次数。",[143,171579,171580],{},"输出出现次数最多的前 10 个单词。",[24,171582,11838],{},[303,171584,171586],{"className":32174,"code":171585,"language":32176,"meta":308,"style":308},"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",[119,171587,171588,171598,171602,171615,171631,171635,171645,171654,171658,171670,171690,171699,171703,171721,171725,171755,171759,171775],{"__ignoreMap":308},[312,171589,171590,171592,171594,171596],{"class":314,"line":315},[312,171591,32533],{"class":1436},[312,171593,110080],{"class":324},[312,171595,32188],{"class":1436},[312,171597,110085],{"class":324},[312,171599,171600],{"class":314,"line":171},[312,171601,4205],{"emptyLinePlaceholder":1881},[312,171603,171604,171606,171608,171610,171613],{"class":314,"line":274},[312,171605,169766],{"class":324},[312,171607,336],{"class":1436},[312,171609,110314],{"class":324},[312,171611,171612],{"class":339},"\"article.txt\"",[312,171614,1959],{"class":324},[312,171616,171617,171619,171621,171623,171625,171627,171629],{"class":314,"line":298},[312,171618,169949],{"class":324},[312,171620,336],{"class":1436},[312,171622,170826],{"class":324},[312,171624,148261],{"class":1579},[312,171626,336],{"class":1436},[312,171628,148266],{"class":339},[312,171630,1959],{"class":324},[312,171632,171633],{"class":314,"line":974},[312,171634,4205],{"emptyLinePlaceholder":1881},[312,171636,171637,171640,171642],{"class":314,"line":980},[312,171638,171639],{"class":324},"words ",[312,171641,336],{"class":1436},[312,171643,171644],{"class":324}," content.lower().split()\n",[312,171646,171647,171650,171652],{"class":314,"line":997},[312,171648,171649],{"class":324},"counter ",[312,171651,336],{"class":1436},[312,171653,89638],{"class":324},[312,171655,171656],{"class":314,"line":1003},[312,171657,4205],{"emptyLinePlaceholder":1881},[312,171659,171660,171662,171665,171667],{"class":314,"line":1020},[312,171661,4830],{"class":1436},[312,171663,171664],{"class":324}," word ",[312,171666,27839],{"class":1436},[312,171668,171669],{"class":324}," words:\n",[312,171671,171672,171675,171677,171680,171683,171685,171688],{"class":314,"line":1026},[312,171673,171674],{"class":324},"    word ",[312,171676,336],{"class":1436},[312,171678,171679],{"class":324}," word.strip(",[312,171681,171682],{"class":339},"\".,!?;:",[312,171684,157950],{"class":488},[312,171686,171687],{"class":339},"'()[]\"",[312,171689,1959],{"class":324},[312,171691,171692,171694,171696],{"class":314,"line":3418},[312,171693,4906],{"class":1436},[312,171695,40725],{"class":1436},[312,171697,171698],{"class":324}," word:\n",[312,171700,171701],{"class":314,"line":3423},[312,171702,149967],{"class":1436},[312,171704,171705,171708,171710,171713,171715,171717,171719],{"class":314,"line":3429},[312,171706,171707],{"class":324},"    counter[word] ",[312,171709,336],{"class":1436},[312,171711,171712],{"class":324}," counter.get(word, ",[312,171714,858],{"class":488},[312,171716,1583],{"class":324},[312,171718,2426],{"class":1436},[312,171720,57481],{"class":488},[312,171722,171723],{"class":314,"line":3434},[312,171724,4205],{"emptyLinePlaceholder":1881},[312,171726,171727,171730,171732,171734,171737,171739,171741,171743,171745,171747,171749,171751,171753],{"class":314,"line":3448},[312,171728,171729],{"class":324},"items ",[312,171731,336],{"class":1436},[312,171733,165059],{"class":488},[312,171735,171736],{"class":324},"(counter.items(), ",[312,171738,155401],{"class":1579},[312,171740,155404],{"class":1436},[312,171742,155407],{"class":324},[312,171744,1433],{"class":488},[312,171746,113971],{"class":324},[312,171748,164983],{"class":1579},[312,171750,336],{"class":1436},[312,171752,33271],{"class":488},[312,171754,1959],{"class":324},[312,171756,171757],{"class":314,"line":3453},[312,171758,4205],{"emptyLinePlaceholder":1881},[312,171760,171761,171763,171766,171768,171771,171773],{"class":314,"line":3459},[312,171762,4830],{"class":1436},[312,171764,171765],{"class":324}," word, count ",[312,171767,27839],{"class":1436},[312,171769,171770],{"class":324}," items[:",[312,171772,2391],{"class":488},[312,171774,167210],{"class":324},[312,171776,171777,171779],{"class":314,"line":3480},[312,171778,33094],{"class":488},[312,171780,171781],{"class":324},"(word, count)\n",[14,171783,171785],{"id":171784},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[303,171787,171789],{"className":32174,"code":171788,"language":32176,"meta":308,"style":308},"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",[119,171790,171791,171797,171807,171811,171823,171827,171831,171839,171849,171855,171859,171889,171899,171903,171907,171915,171945,171969,171973,171977,171985,172014,172019],{"__ignoreMap":308},[312,171792,171793,171795],{"class":314,"line":315},[312,171794,32188],{"class":1436},[312,171796,148546],{"class":324},[312,171798,171799,171801,171803,171805],{"class":314,"line":171},[312,171800,32533],{"class":1436},[312,171802,110080],{"class":324},[312,171804,32188],{"class":1436},[312,171806,110085],{"class":324},[312,171808,171809],{"class":314,"line":274},[312,171810,4205],{"emptyLinePlaceholder":1881},[312,171812,171813,171815,171817,171819,171821],{"class":314,"line":298},[312,171814,153279],{"class":488},[312,171816,15366],{"class":1436},[312,171818,110314],{"class":324},[312,171820,153286],{"class":339},[312,171822,1959],{"class":324},[312,171824,171825],{"class":314,"line":974},[312,171826,4205],{"emptyLinePlaceholder":1881},[312,171828,171829],{"class":314,"line":980},[312,171830,4205],{"emptyLinePlaceholder":1881},[312,171832,171833,171835,171837],{"class":314,"line":997},[312,171834,33742],{"class":1436},[312,171836,153303],{"class":332},[312,171838,33748],{"class":324},[312,171840,171841,171843,171845,171847],{"class":314,"line":1003},[312,171842,4906],{"class":1436},[312,171844,40725],{"class":1436},[312,171846,153314],{"class":488},[312,171848,153317],{"class":324},[312,171850,171851,171853],{"class":314,"line":1020},[312,171852,16553],{"class":1436},[312,171854,53624],{"class":324},[312,171856,171857],{"class":314,"line":1026},[312,171858,4205],{"emptyLinePlaceholder":1881},[312,171860,171861,171863,171865,171867,171869,171871,171873,171875,171877,171879,171881,171883,171885,171887],{"class":314,"line":3418},[312,171862,35973],{"class":1436},[312,171864,148246],{"class":488},[312,171866,1576],{"class":324},[312,171868,153279],{"class":488},[312,171870,733],{"class":324},[312,171872,148256],{"class":339},[312,171874,733],{"class":324},[312,171876,148261],{"class":1579},[312,171878,336],{"class":1436},[312,171880,148266],{"class":339},[312,171882,1583],{"class":324},[312,171884,33178],{"class":1436},[312,171886,149608],{"class":1579},[312,171888,5544],{"class":324},[312,171890,171891,171893,171895,171897],{"class":314,"line":3423},[312,171892,16553],{"class":1436},[312,171894,149619],{"class":324},[312,171896,47149],{"class":1579},[312,171898,1959],{"class":324},[312,171900,171901],{"class":314,"line":3429},[312,171902,4205],{"emptyLinePlaceholder":1881},[312,171904,171905],{"class":314,"line":3434},[312,171906,4205],{"emptyLinePlaceholder":1881},[312,171908,171909,171911,171913],{"class":314,"line":3448},[312,171910,33742],{"class":1436},[312,171912,153413],{"class":332},[312,171914,153416],{"class":324},[312,171916,171917,171919,171921,171923,171925,171927,171929,171931,171933,171935,171937,171939,171941,171943],{"class":314,"line":3453},[312,171918,35973],{"class":1436},[312,171920,148246],{"class":488},[312,171922,1576],{"class":324},[312,171924,153279],{"class":488},[312,171926,733],{"class":324},[312,171928,153431],{"class":339},[312,171930,733],{"class":324},[312,171932,148261],{"class":1579},[312,171934,336],{"class":1436},[312,171936,148266],{"class":339},[312,171938,1583],{"class":324},[312,171940,33178],{"class":1436},[312,171942,149608],{"class":1579},[312,171944,5544],{"class":324},[312,171946,171947,171949,171951,171953,171955,171957,171959,171961,171963,171965,171967],{"class":314,"line":3459},[312,171948,153452],{"class":324},[312,171950,47149],{"class":1579},[312,171952,733],{"class":324},[312,171954,148592],{"class":1579},[312,171956,336],{"class":1436},[312,171958,35782],{"class":488},[312,171960,733],{"class":324},[312,171962,153467],{"class":1579},[312,171964,336],{"class":1436},[312,171966,2027],{"class":488},[312,171968,1959],{"class":324},[312,171970,171971],{"class":314,"line":3480},[312,171972,4205],{"emptyLinePlaceholder":1881},[312,171974,171975],{"class":314,"line":3485},[312,171976,4205],{"emptyLinePlaceholder":1881},[312,171978,171979,171981,171983],{"class":314,"line":3499},[312,171980,161171],{"class":324},[312,171982,336],{"class":1436},[312,171984,154497],{"class":324},[312,171986,171987,171990,171992,171994,171996,171998,172000,172002,172004,172006,172008,172010,172012],{"class":314,"line":3504},[312,171988,171989],{"class":324},"students.append({",[312,171991,64457],{"class":339},[312,171993,492],{"class":324},[312,171995,151343],{"class":339},[312,171997,733],{"class":324},[312,171999,70901],{"class":339},[312,172001,492],{"class":324},[312,172003,2595],{"class":488},[312,172005,733],{"class":324},[312,172007,152927],{"class":339},[312,172009,492],{"class":324},[312,172011,2931],{"class":488},[312,172013,166607],{"class":324},[312,172015,172016],{"class":314,"line":3533},[312,172017,172018],{"class":324},"save_students(students)\n",[312,172020,172021,172023,172025,172028],{"class":314,"line":3538},[312,172022,32211],{"class":488},[312,172024,1576],{"class":324},[312,172026,172027],{"class":339},"\"保存成功\"",[312,172029,1959],{"class":324},[14,172031,172033],{"id":172032},"_814-易错点","8.14 易错点",[140,172035,172036,172040,172046,172051,172058,172065],{},[143,172037,172038,170299],{},[119,172039,2739],{},[143,172041,172042,172043,30181],{},"读写中文要指定 ",[119,172044,172045],{},"encoding=\"utf-8\"",[143,172047,172048,172049,30181],{},"打开文件后要关闭，推荐使用 ",[119,172050,109602],{},[143,172052,172053,172054,172057],{},"读取大文件不要直接 ",[119,172055,172056],{},"read()"," 全部内容。",[143,172059,172060,172061,172064],{},"Windows 写 CSV 时建议加 ",[119,172062,172063],{},"newline=\"\"","，避免空行。",[143,172066,172067],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,172069,172071],{"id":172070},"_815-本章练习","8.15 本章练习",[140,172073,172074,172081,172086,172089,172092],{},[143,172075,172076,172077,172080],{},"写入一个 ",[119,172078,172079],{},"students.txt","，每行保存一个学生姓名。",[143,172082,106124,172083,172085],{},[119,172084,172079],{}," 并输出所有学生。",[143,172087,172088],{},"把学生列表保存为 JSON 文件。",[143,172090,172091],{},"从 JSON 文件读取学生数据，计算平均分。",[143,172093,172094,172095,172098,172099,172102],{},"写一个日志函数 ",[119,172096,172097],{},"write_log(message)","，每次调用向 ",[119,172100,172101],{},"app.log"," 追加一行。",[1856,172104,172105],{},"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":308,"searchDepth":171,"depth":171,"links":172107},[172108,172109,172113,172114,172120,172121,172122,172123,172124,172125,172126,172127,172128,172129,172130],{"id":169619,"depth":171,"text":169620},{"id":169660,"depth":171,"text":169661,"children":172110},[172111,172112],{"id":169664,"depth":274,"text":169665},{"id":169698,"depth":274,"text":169699},{"id":169812,"depth":171,"text":169813},{"id":169905,"depth":171,"text":169906,"children":172115},[172116,172117,172118,172119],{"id":169909,"depth":274,"text":169910},{"id":169996,"depth":274,"text":169997},{"id":170066,"depth":274,"text":170067},{"id":170160,"depth":274,"text":170161},{"id":170230,"depth":171,"text":170231},{"id":170293,"depth":171,"text":170294},{"id":170454,"depth":171,"text":170455},{"id":170517,"depth":171,"text":170518},{"id":170633,"depth":171,"text":170634},{"id":170843,"depth":171,"text":170844},{"id":171155,"depth":171,"text":171156},{"id":171566,"depth":171,"text":171567},{"id":171784,"depth":171,"text":171785},{"id":172032,"depth":171,"text":172033},{"id":172070,"depth":171,"text":172071},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169611,"description":1878},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172137,"title":172138,"body":172139,"description":1878,"extension":1879,"meta":174325,"navigation":1881,"path":174326,"seo":174327,"stem":174328,"__hash__":174329},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172140,"toc":174292},[172141,172144,172148,172151,172154,172246,172248,172267,172272,172276,172279,172282,172311,172318,172321,172325,172328,172357,172359,172411,172417,172470,172474,172572,172575,172642,172646,172703,172705,172711,172715,172720,172726,172817,172822,172826,172829,172907,172910,172948,172952,173070,173073,173077,173080,173125,173128,173132,173137,173143,173193,173196,173227,173231,173235,173265,173269,173304,173308,173343,173383,173387,173403,173406,173410,173414,173493,173497,173538,173542,173597,173601,173635,173639,173669,173678,173685,173691,173748,173751,173759,173762,173766,173773,173776,173782,173785,173802,173807,173811,173817,173830,173833,173870,173873,173884,173887,173901,173904,173918,173922,173929,173962,173965,173967,173973,173976,173980,173982,173988,173993,174166,174170,174233,174237,174261,174265,174289],[10,172142,172138],{"id":172143},"_9-异常模块与包",[14,172145,172147],{"id":172146},"_91-什么是异常","9.1 什么是异常",[24,172149,172150],{},"异常是程序运行过程中出现的错误。",[24,172152,172153],{},"常见异常：",[2086,172155,172156,172165],{},[2089,172157,172158],{},[2092,172159,172160,172163],{},[2095,172161,172162],{},"异常",[2095,172164,27665],{},[2132,172166,172167,172177,172187,172196,172206,172216,172226,172236],{},[2092,172168,172169,172174],{},[2137,172170,172171],{},[119,172172,172173],{},"NameError",[2137,172175,172176],{},"使用了未定义变量",[2092,172178,172179,172184],{},[2137,172180,172181],{},[119,172182,172183],{},"TypeError",[2137,172185,172186],{},"类型不匹配",[2092,172188,172189,172193],{},[2137,172190,172191],{},[119,172192,156289],{},[2137,172194,172195],{},"值不合法",[2092,172197,172198,172203],{},[2137,172199,172200],{},[119,172201,172202],{},"IndexError",[2137,172204,172205],{},"列表索引越界",[2092,172207,172208,172213],{},[2137,172209,172210],{},[119,172211,172212],{},"KeyError",[2137,172214,172215],{},"字典 key 不存在",[2092,172217,172218,172223],{},[2137,172219,172220],{},[119,172221,172222],{},"FileNotFoundError",[2137,172224,172225],{},"文件不存在",[2092,172227,172228,172233],{},[2137,172229,172230],{},[119,172231,172232],{},"ZeroDivisionError",[2137,172234,172235],{},"除数为 0",[2092,172237,172238,172243],{},[2137,172239,172240],{},[119,172241,172242],{},"ImportError",[2137,172244,172245],{},"导入失败",[24,172247,16936],{},[303,172249,172251],{"className":32174,"code":172250,"language":32176,"meta":308,"style":308},"num = int(\"abc\")\n",[119,172252,172253],{"__ignoreMap":308},[312,172254,172255,172257,172259,172261,172263,172265],{"class":314,"line":315},[312,172256,157242],{"class":324},[312,172258,336],{"class":1436},[312,172260,4187],{"class":488},[312,172262,1576],{"class":324},[312,172264,157335],{"class":339},[312,172266,1959],{"class":324},[24,172268,172269,172270,30181],{},"会触发 ",[119,172271,156289],{},[14,172273,172275],{"id":172274},"_92-为什么要处理异常","9.2 为什么要处理异常",[24,172277,172278],{},"如果不处理异常，程序会直接终止。",[24,172280,172281],{},"例如用户输入年龄：",[303,172283,172285],{"className":32174,"code":172284,"language":32176,"meta":308,"style":308},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[119,172286,172287,172305],{"__ignoreMap":308},[312,172288,172289,172291,172293,172295,172297,172299,172301,172303],{"class":314,"line":315},[312,172290,148001],{"class":324},[312,172292,336],{"class":1436},[312,172294,4187],{"class":488},[312,172296,1576],{"class":324},[312,172298,55605],{"class":488},[312,172300,1576],{"class":324},[312,172302,153849],{"class":339},[312,172304,32293],{"class":324},[312,172306,172307,172309],{"class":314,"line":171},[312,172308,32211],{"class":488},[312,172310,157216],{"class":324},[24,172312,172313,172314,172317],{},"用户输入 ",[119,172315,172316],{},"abc","，程序就会报错退出。",[24,172319,172320],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172322,172324],{"id":172323},"_93-try-except","9.3 try except",[24,172326,172327],{},"基础语法：",[303,172329,172331],{"className":32174,"code":172330,"language":32176,"meta":308,"style":308},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[119,172332,172333,172340,172345,172352],{"__ignoreMap":308},[312,172334,172335,172338],{"class":314,"line":315},[312,172336,172337],{"class":1436},"try",[312,172339,5544],{"class":324},[312,172341,172342],{"class":314,"line":171},[312,172343,172344],{"class":324},"    可能出错的代码\n",[312,172346,172347,172350],{"class":314,"line":274},[312,172348,172349],{"class":1436},"except",[312,172351,5544],{"class":324},[312,172353,172354],{"class":314,"line":298},[312,172355,172356],{"class":324},"    出错后的处理代码\n",[24,172358,16936],{},[303,172360,172362],{"className":32174,"code":172361,"language":32176,"meta":308,"style":308},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[119,172363,172364,172370,172388,172394,172400],{"__ignoreMap":308},[312,172365,172366,172368],{"class":314,"line":315},[312,172367,172337],{"class":1436},[312,172369,5544],{"class":324},[312,172371,172372,172374,172376,172378,172380,172382,172384,172386],{"class":314,"line":171},[312,172373,153841],{"class":324},[312,172375,336],{"class":1436},[312,172377,4187],{"class":488},[312,172379,1576],{"class":324},[312,172381,55605],{"class":488},[312,172383,1576],{"class":324},[312,172385,153849],{"class":339},[312,172387,32293],{"class":324},[312,172389,172390,172392],{"class":314,"line":274},[312,172391,33094],{"class":488},[312,172393,157216],{"class":324},[312,172395,172396,172398],{"class":314,"line":298},[312,172397,172349],{"class":1436},[312,172399,5544],{"class":324},[312,172401,172402,172404,172406,172409],{"class":314,"line":974},[312,172403,33094],{"class":488},[312,172405,1576],{"class":324},[312,172407,172408],{"class":339},"\"年龄必须是数字\"",[312,172410,1959],{"class":324},[24,172412,172413,172414,172416],{},"不建议裸写 ",[119,172415,172349],{},"，最好指定异常类型。",[303,172418,172420],{"className":32174,"code":172419,"language":32176,"meta":308,"style":308},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[119,172421,172422,172428,172446,172452,172460],{"__ignoreMap":308},[312,172423,172424,172426],{"class":314,"line":315},[312,172425,172337],{"class":1436},[312,172427,5544],{"class":324},[312,172429,172430,172432,172434,172436,172438,172440,172442,172444],{"class":314,"line":171},[312,172431,153841],{"class":324},[312,172433,336],{"class":1436},[312,172435,4187],{"class":488},[312,172437,1576],{"class":324},[312,172439,55605],{"class":488},[312,172441,1576],{"class":324},[312,172443,153849],{"class":339},[312,172445,32293],{"class":324},[312,172447,172448,172450],{"class":314,"line":274},[312,172449,33094],{"class":488},[312,172451,157216],{"class":324},[312,172453,172454,172456,172458],{"class":314,"line":298},[312,172455,172349],{"class":1436},[312,172457,153681],{"class":488},[312,172459,5544],{"class":324},[312,172461,172462,172464,172466,172468],{"class":314,"line":974},[312,172463,33094],{"class":488},[312,172465,1576],{"class":324},[312,172467,172408],{"class":339},[312,172469,1959],{"class":324},[14,172471,172473],{"id":172472},"_94-捕获多个异常","9.4 捕获多个异常",[303,172475,172477],{"className":32174,"code":172476,"language":32176,"meta":308,"style":308},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[119,172478,172479,172485,172506,172526,172533,172541,172552,172561],{"__ignoreMap":308},[312,172480,172481,172483],{"class":314,"line":315},[312,172482,172337],{"class":1436},[312,172484,5544],{"class":324},[312,172486,172487,172490,172492,172494,172496,172498,172500,172502,172504],{"class":314,"line":171},[312,172488,172489],{"class":324},"    nums ",[312,172491,336],{"class":1436},[312,172493,54012],{"class":324},[312,172495,1433],{"class":488},[312,172497,733],{"class":324},[312,172499,2027],{"class":488},[312,172501,733],{"class":324},[312,172503,2021],{"class":488},[312,172505,35041],{"class":324},[312,172507,172508,172511,172513,172515,172517,172519,172521,172524],{"class":314,"line":274},[312,172509,172510],{"class":324},"    index ",[312,172512,336],{"class":1436},[312,172514,4187],{"class":488},[312,172516,1576],{"class":324},[312,172518,55605],{"class":488},[312,172520,1576],{"class":324},[312,172522,172523],{"class":339},"\"请输入索引:\"",[312,172525,32293],{"class":324},[312,172527,172528,172530],{"class":314,"line":298},[312,172529,33094],{"class":488},[312,172531,172532],{"class":324},"(nums[index])\n",[312,172534,172535,172537,172539],{"class":314,"line":974},[312,172536,172349],{"class":1436},[312,172538,153681],{"class":488},[312,172540,5544],{"class":324},[312,172542,172543,172545,172547,172550],{"class":314,"line":980},[312,172544,33094],{"class":488},[312,172546,1576],{"class":324},[312,172548,172549],{"class":339},"\"索引必须是整数\"",[312,172551,1959],{"class":324},[312,172553,172554,172556,172559],{"class":314,"line":997},[312,172555,172349],{"class":1436},[312,172557,172558],{"class":488}," IndexError",[312,172560,5544],{"class":324},[312,172562,172563,172565,172567,172570],{"class":314,"line":1003},[312,172564,33094],{"class":488},[312,172566,1576],{"class":324},[312,172568,172569],{"class":339},"\"索引越界\"",[312,172571,1959],{"class":324},[24,172573,172574],{},"多个异常使用相同处理逻辑：",[303,172576,172578],{"className":32174,"code":172577,"language":32176,"meta":308,"style":308},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[119,172579,172580,172586,172604,172617,172631],{"__ignoreMap":308},[312,172581,172582,172584],{"class":314,"line":315},[312,172583,172337],{"class":1436},[312,172585,5544],{"class":324},[312,172587,172588,172590,172592,172594,172596,172598,172600,172602],{"class":314,"line":171},[312,172589,47388],{"class":324},[312,172591,336],{"class":1436},[312,172593,4187],{"class":488},[312,172595,1576],{"class":324},[312,172597,55605],{"class":488},[312,172599,1576],{"class":324},[312,172601,157251],{"class":339},[312,172603,32293],{"class":324},[312,172605,172606,172608,172610,172612,172614],{"class":314,"line":274},[312,172607,33094],{"class":488},[312,172609,1576],{"class":324},[312,172611,2391],{"class":488},[312,172613,157501],{"class":1436},[312,172615,172616],{"class":324}," num)\n",[312,172618,172619,172621,172623,172625,172627,172629],{"class":314,"line":298},[312,172620,172349],{"class":1436},[312,172622,3464],{"class":324},[312,172624,156289],{"class":488},[312,172626,733],{"class":324},[312,172628,172232],{"class":488},[312,172630,32582],{"class":324},[312,172632,172633,172635,172637,172640],{"class":314,"line":974},[312,172634,33094],{"class":488},[312,172636,1576],{"class":324},[312,172638,172639],{"class":339},"\"输入不合法\"",[312,172641,1959],{"class":324},[14,172643,172645],{"id":172644},"_95-获取异常信息","9.5 获取异常信息",[303,172647,172649],{"className":32174,"code":172648,"language":32176,"meta":308,"style":308},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[119,172650,172651,172657,172671,172682],{"__ignoreMap":308},[312,172652,172653,172655],{"class":314,"line":315},[312,172654,172337],{"class":1436},[312,172656,5544],{"class":324},[312,172658,172659,172661,172663,172665,172667,172669],{"class":314,"line":171},[312,172660,47388],{"class":324},[312,172662,336],{"class":1436},[312,172664,4187],{"class":488},[312,172666,1576],{"class":324},[312,172668,157335],{"class":339},[312,172670,1959],{"class":324},[312,172672,172673,172675,172677,172679],{"class":314,"line":274},[312,172674,172349],{"class":1436},[312,172676,153681],{"class":488},[312,172678,66382],{"class":1436},[312,172680,172681],{"class":324}," e:\n",[312,172683,172684,172686,172688,172690,172693,172695,172697,172699,172701],{"class":314,"line":298},[312,172685,33094],{"class":488},[312,172687,1576],{"class":324},[312,172689,2003],{"class":1436},[312,172691,172692],{"class":339},"\"出错了:",[312,172694,2840],{"class":488},[312,172696,2024],{"class":324},[312,172698,2888],{"class":488},[312,172700,2196],{"class":339},[312,172702,1959],{"class":324},[24,172704,147912],{},[303,172706,172709],{"className":172707,"code":172708,"language":6992,"meta":308},[6990],"出错了:invalid literal for int() with base 10: 'abc'\n",[119,172710,172708],{"__ignoreMap":308},[14,172712,172714],{"id":172713},"_96-else和finally","9.6 else和finally",[24,172716,172717,172719],{},[119,172718,3507],{},"：没有异常时执行。",[24,172721,172722,172725],{},[119,172723,172724],{},"finally","：无论是否异常都会执行。",[303,172727,172729],{"className":32174,"code":172728,"language":32176,"meta":308,"style":308},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[119,172730,172731,172737,172755,172763,172773,172779,172800,172806],{"__ignoreMap":308},[312,172732,172733,172735],{"class":314,"line":315},[312,172734,172337],{"class":1436},[312,172736,5544],{"class":324},[312,172738,172739,172741,172743,172745,172747,172749,172751,172753],{"class":314,"line":171},[312,172740,47388],{"class":324},[312,172742,336],{"class":1436},[312,172744,4187],{"class":488},[312,172746,1576],{"class":324},[312,172748,55605],{"class":488},[312,172750,1576],{"class":324},[312,172752,157251],{"class":339},[312,172754,32293],{"class":324},[312,172756,172757,172759,172761],{"class":314,"line":274},[312,172758,172349],{"class":1436},[312,172760,153681],{"class":488},[312,172762,5544],{"class":324},[312,172764,172765,172767,172769,172771],{"class":314,"line":298},[312,172766,33094],{"class":488},[312,172768,1576],{"class":324},[312,172770,154669],{"class":339},[312,172772,1959],{"class":324},[312,172774,172775,172777],{"class":314,"line":974},[312,172776,3507],{"class":1436},[312,172778,5544],{"class":324},[312,172780,172781,172783,172785,172787,172790,172792,172794,172796,172798],{"class":314,"line":980},[312,172782,33094],{"class":488},[312,172784,1576],{"class":324},[312,172786,2003],{"class":1436},[312,172788,172789],{"class":339},"\"输入正确:",[312,172791,2840],{"class":488},[312,172793,3471],{"class":324},[312,172795,2888],{"class":488},[312,172797,2196],{"class":339},[312,172799,1959],{"class":324},[312,172801,172802,172804],{"class":314,"line":997},[312,172803,172724],{"class":1436},[312,172805,5544],{"class":324},[312,172807,172808,172810,172812,172815],{"class":314,"line":1003},[312,172809,33094],{"class":488},[312,172811,1576],{"class":324},[312,172813,172814],{"class":339},"\"程序结束\"",[312,172816,1959],{"class":324},[24,172818,172819,172821],{},[119,172820,172724],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172823,172825],{"id":172824},"_97-抛出异常","9.7 抛出异常",[24,172827,172828],{},"程序可以主动抛出异常。",[303,172830,172832],{"className":32174,"code":172831,"language":32176,"meta":308,"style":308},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[119,172833,172834,172843,172855,172868,172888,172892,172896],{"__ignoreMap":308},[312,172835,172836,172838,172841],{"class":314,"line":315},[312,172837,33742],{"class":1436},[312,172839,172840],{"class":332}," set_age",[312,172842,162870],{"class":324},[312,172844,172845,172847,172849,172851,172853],{"class":314,"line":171},[312,172846,4906],{"class":1436},[312,172848,17507],{"class":324},[312,172850,325],{"class":1436},[312,172852,5898],{"class":488},[312,172854,5544],{"class":324},[312,172856,172857,172859,172861,172863,172866],{"class":314,"line":274},[312,172858,105201],{"class":1436},[312,172860,153681],{"class":488},[312,172862,1576],{"class":324},[312,172864,172865],{"class":339},"\"年龄不能为负数\"",[312,172867,1959],{"class":324},[312,172869,172870,172872,172874,172876,172878,172880,172882,172884,172886],{"class":314,"line":298},[312,172871,33094],{"class":488},[312,172873,1576],{"class":324},[312,172875,2003],{"class":1436},[312,172877,163438],{"class":339},[312,172879,2840],{"class":488},[312,172881,71998],{"class":324},[312,172883,2888],{"class":488},[312,172885,2196],{"class":339},[312,172887,1959],{"class":324},[312,172889,172890],{"class":314,"line":974},[312,172891,4205],{"emptyLinePlaceholder":1881},[312,172893,172894],{"class":314,"line":980},[312,172895,4205],{"emptyLinePlaceholder":1881},[312,172897,172898,172901,172903,172905],{"class":314,"line":997},[312,172899,172900],{"class":324},"set_age(",[312,172902,2477],{"class":1436},[312,172904,1433],{"class":488},[312,172906,1959],{"class":324},[24,172908,172909],{},"调用者可以捕获：",[303,172911,172913],{"className":32174,"code":172912,"language":32176,"meta":308,"style":308},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[119,172914,172915,172921,172932,172942],{"__ignoreMap":308},[312,172916,172917,172919],{"class":314,"line":315},[312,172918,172337],{"class":1436},[312,172920,5544],{"class":324},[312,172922,172923,172926,172928,172930],{"class":314,"line":171},[312,172924,172925],{"class":324},"    set_age(",[312,172927,2477],{"class":1436},[312,172929,1433],{"class":488},[312,172931,1959],{"class":324},[312,172933,172934,172936,172938,172940],{"class":314,"line":274},[312,172935,172349],{"class":1436},[312,172937,153681],{"class":488},[312,172939,66382],{"class":1436},[312,172941,172681],{"class":324},[312,172943,172944,172946],{"class":314,"line":298},[312,172945,33094],{"class":488},[312,172947,68777],{"class":324},[14,172949,172951],{"id":172950},"_98-自定义异常","9.8 自定义异常",[303,172953,172955],{"className":32174,"code":172954,"language":32176,"meta":308,"style":308},"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",[119,172956,172957,172971,172975,172979,172983,172991,173001,173012,173022,173026,173030,173036,173053,173064],{"__ignoreMap":308},[312,172958,172959,172961,172964,172966,172969],{"class":314,"line":315},[312,172960,16495],{"class":1436},[312,172962,172963],{"class":332}," BalanceNotEnoughError",[312,172965,1576],{"class":324},[312,172967,172968],{"class":488},"Exception",[312,172970,32582],{"class":324},[312,172972,172973],{"class":314,"line":171},[312,172974,150992],{"class":1436},[312,172976,172977],{"class":314,"line":274},[312,172978,4205],{"emptyLinePlaceholder":1881},[312,172980,172981],{"class":314,"line":298},[312,172982,4205],{"emptyLinePlaceholder":1881},[312,172984,172985,172987,172989],{"class":314,"line":974},[312,172986,33742],{"class":1436},[312,172988,151641],{"class":332},[312,172990,164267],{"class":324},[312,172992,172993,172995,172997,172999],{"class":314,"line":980},[312,172994,4906],{"class":1436},[312,172996,151597],{"class":324},[312,172998,2902],{"class":1436},[312,173000,164044],{"class":324},[312,173002,173003,173005,173008,173010],{"class":314,"line":997},[312,173004,105201],{"class":1436},[312,173006,173007],{"class":324}," BalanceNotEnoughError(",[312,173009,151692],{"class":339},[312,173011,1959],{"class":324},[312,173013,173014,173016,173018,173020],{"class":314,"line":1003},[312,173015,5895],{"class":1436},[312,173017,164274],{"class":324},[312,173019,2477],{"class":1436},[312,173021,151630],{"class":324},[312,173023,173024],{"class":314,"line":1020},[312,173025,4205],{"emptyLinePlaceholder":1881},[312,173027,173028],{"class":314,"line":1026},[312,173029,4205],{"emptyLinePlaceholder":1881},[312,173031,173032,173034],{"class":314,"line":3418},[312,173033,172337],{"class":1436},[312,173035,5544],{"class":324},[312,173037,173038,173040,173042,173045,173047,173049,173051],{"class":314,"line":3423},[312,173039,163945],{"class":324},[312,173041,336],{"class":1436},[312,173043,173044],{"class":324}," withdraw(",[312,173046,2256],{"class":488},[312,173048,733],{"class":324},[312,173050,3528],{"class":488},[312,173052,1959],{"class":324},[312,173054,173055,173057,173060,173062],{"class":314,"line":3429},[312,173056,172349],{"class":1436},[312,173058,173059],{"class":324}," BalanceNotEnoughError ",[312,173061,33178],{"class":1436},[312,173063,172681],{"class":324},[312,173065,173066,173068],{"class":314,"line":3434},[312,173067,33094],{"class":488},[312,173069,68777],{"class":324},[24,173071,173072],{},"入门阶段大多数情况使用内置异常即可。",[14,173074,173076],{"id":173075},"_99-traceback","9.9 traceback",[24,173078,173079],{},"调试时可以输出完整异常堆栈。",[303,173081,173083],{"className":32174,"code":173082,"language":32176,"meta":308,"style":308},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[119,173084,173085,173092,173096,173102,173112,173120],{"__ignoreMap":308},[312,173086,173087,173089],{"class":314,"line":315},[312,173088,32188],{"class":1436},[312,173090,173091],{"class":324}," traceback\n",[312,173093,173094],{"class":314,"line":171},[312,173095,4205],{"emptyLinePlaceholder":1881},[312,173097,173098,173100],{"class":314,"line":274},[312,173099,172337],{"class":1436},[312,173101,5544],{"class":324},[312,173103,173104,173106,173108,173110],{"class":314,"line":298},[312,173105,3790],{"class":488},[312,173107,1576],{"class":324},[312,173109,157335],{"class":339},[312,173111,1959],{"class":324},[312,173113,173114,173116,173118],{"class":314,"line":974},[312,173115,172349],{"class":1436},[312,173117,153681],{"class":488},[312,173119,5544],{"class":324},[312,173121,173122],{"class":314,"line":980},[312,173123,173124],{"class":324},"    traceback.print_exc()\n",[24,173126,173127],{},"日志系统中常把异常堆栈记录到文件。",[14,173129,173131],{"id":173130},"_910-什么是模块","9.10 什么是模块",[24,173133,173134,173135,127750],{},"模块就是一个 ",[119,173136,147807],{},[24,173138,173139,173140,26414],{},"例如创建 ",[119,173141,173142],{},"my_math.py",[303,173144,173146],{"className":32174,"code":173145,"language":32176,"meta":308,"style":308},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[119,173147,173148,173156,173166,173170,173174,173183],{"__ignoreMap":308},[312,173149,173150,173152,173154],{"class":314,"line":315},[312,173151,33742],{"class":1436},[312,173153,7014],{"class":332},[312,173155,152548],{"class":324},[312,173157,173158,173160,173162,173164],{"class":314,"line":171},[312,173159,5895],{"class":1436},[312,173161,12672],{"class":324},[312,173163,2426],{"class":1436},[312,173165,152559],{"class":324},[312,173167,173168],{"class":314,"line":274},[312,173169,4205],{"emptyLinePlaceholder":1881},[312,173171,173172],{"class":314,"line":298},[312,173173,4205],{"emptyLinePlaceholder":1881},[312,173175,173176,173178,173181],{"class":314,"line":974},[312,173177,33742],{"class":1436},[312,173179,173180],{"class":332}," sub",[312,173182,152548],{"class":324},[312,173184,173185,173187,173189,173191],{"class":314,"line":980},[312,173186,5895],{"class":1436},[312,173188,12672],{"class":324},[312,173190,2477],{"class":1436},[312,173192,152559],{"class":324},[24,173194,173195],{},"在另一个文件中导入：",[303,173197,173199],{"className":32174,"code":173198,"language":32176,"meta":308,"style":308},"import my_math\n\nprint(my_math.add(1, 2))\n",[119,173200,173201,173208,173212],{"__ignoreMap":308},[312,173202,173203,173205],{"class":314,"line":315},[312,173204,32188],{"class":1436},[312,173206,173207],{"class":324}," my_math\n",[312,173209,173210],{"class":314,"line":171},[312,173211,4205],{"emptyLinePlaceholder":1881},[312,173213,173214,173216,173219,173221,173223,173225],{"class":314,"line":274},[312,173215,32211],{"class":488},[312,173217,173218],{"class":324},"(my_math.add(",[312,173220,1433],{"class":488},[312,173222,733],{"class":324},[312,173224,2027],{"class":488},[312,173226,32293],{"class":324},[14,173228,173230],{"id":173229},"_911-import导入","9.11 import导入",[69,173232,173234],{"id":173233},"_9111-导入模块","9.11.1 导入模块",[303,173236,173238],{"className":32174,"code":173237,"language":32176,"meta":308,"style":308},"import random\n\nprint(random.randint(1, 10))\n",[119,173239,173240,173246,173250],{"__ignoreMap":308},[312,173241,173242,173244],{"class":314,"line":315},[312,173243,32188],{"class":1436},[312,173245,47123],{"class":324},[312,173247,173248],{"class":314,"line":171},[312,173249,4205],{"emptyLinePlaceholder":1881},[312,173251,173252,173254,173257,173259,173261,173263],{"class":314,"line":274},[312,173253,32211],{"class":488},[312,173255,173256],{"class":324},"(random.randint(",[312,173258,1433],{"class":488},[312,173260,733],{"class":324},[312,173262,2391],{"class":488},[312,173264,32293],{"class":324},[69,173266,173268],{"id":173267},"_9112-导入指定内容","9.11.2 导入指定内容",[303,173270,173272],{"className":32174,"code":173271,"language":32176,"meta":308,"style":308},"from random import randint\n\nprint(randint(1, 10))\n",[119,173273,173274,173285,173289],{"__ignoreMap":308},[312,173275,173276,173278,173280,173282],{"class":314,"line":315},[312,173277,32533],{"class":1436},[312,173279,59578],{"class":324},[312,173281,32188],{"class":1436},[312,173283,173284],{"class":324}," randint\n",[312,173286,173287],{"class":314,"line":171},[312,173288,4205],{"emptyLinePlaceholder":1881},[312,173290,173291,173293,173296,173298,173300,173302],{"class":314,"line":274},[312,173292,32211],{"class":488},[312,173294,173295],{"class":324},"(randint(",[312,173297,1433],{"class":488},[312,173299,733],{"class":324},[312,173301,2391],{"class":488},[312,173303,32293],{"class":324},[69,173305,173307],{"id":173306},"_9113-起别名","9.11.3 起别名",[303,173309,173311],{"className":32174,"code":173310,"language":32176,"meta":308,"style":308},"import random as rd\n\nprint(rd.randint(1, 10))\n",[119,173312,173313,173324,173328],{"__ignoreMap":308},[312,173314,173315,173317,173319,173321],{"class":314,"line":315},[312,173316,32188],{"class":1436},[312,173318,59578],{"class":324},[312,173320,33178],{"class":1436},[312,173322,173323],{"class":324}," rd\n",[312,173325,173326],{"class":314,"line":171},[312,173327,4205],{"emptyLinePlaceholder":1881},[312,173329,173330,173332,173335,173337,173339,173341],{"class":314,"line":274},[312,173331,32211],{"class":488},[312,173333,173334],{"class":324},"(rd.randint(",[312,173336,1433],{"class":488},[312,173338,733],{"class":324},[312,173340,2391],{"class":488},[312,173342,32293],{"class":324},[303,173344,173346],{"className":32174,"code":173345,"language":32176,"meta":308,"style":308},"from random import randint as rint\n\nprint(rint(1, 10))\n",[119,173347,173348,173364,173368],{"__ignoreMap":308},[312,173349,173350,173352,173354,173356,173359,173361],{"class":314,"line":315},[312,173351,32533],{"class":1436},[312,173353,59578],{"class":324},[312,173355,32188],{"class":1436},[312,173357,173358],{"class":324}," randint ",[312,173360,33178],{"class":1436},[312,173362,173363],{"class":324}," rint\n",[312,173365,173366],{"class":314,"line":171},[312,173367,4205],{"emptyLinePlaceholder":1881},[312,173369,173370,173372,173375,173377,173379,173381],{"class":314,"line":274},[312,173371,32211],{"class":488},[312,173373,173374],{"class":324},"(rint(",[312,173376,1433],{"class":488},[312,173378,733],{"class":324},[312,173380,2391],{"class":488},[312,173382,32293],{"class":324},[69,173384,173386],{"id":173385},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[303,173388,173390],{"className":32174,"code":173389,"language":32176,"meta":308,"style":308},"from random import *\n",[119,173391,173392],{"__ignoreMap":308},[312,173393,173394,173396,173398,173400],{"class":314,"line":315},[312,173395,32533],{"class":1436},[312,173397,59578],{"class":324},[312,173399,32188],{"class":1436},[312,173401,173402],{"class":1436}," *\n",[24,173404,173405],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,173407,173409],{"id":173408},"_912-常用内置模块","9.12 常用内置模块",[69,173411,173413],{"id":173412},"_9121-random","9.12.1 random",[303,173415,173417],{"className":32174,"code":173416,"language":32176,"meta":308,"style":308},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[119,173418,173419,173425,173429,173443,173462],{"__ignoreMap":308},[312,173420,173421,173423],{"class":314,"line":315},[312,173422,32188],{"class":1436},[312,173424,47123],{"class":324},[312,173426,173427],{"class":314,"line":171},[312,173428,4205],{"emptyLinePlaceholder":1881},[312,173430,173431,173433,173435,173437,173439,173441],{"class":314,"line":274},[312,173432,32211],{"class":488},[312,173434,173256],{"class":324},[312,173436,1433],{"class":488},[312,173438,733],{"class":324},[312,173440,2391],{"class":488},[312,173442,32293],{"class":324},[312,173444,173445,173447,173450,173452,173454,173456,173458,173460],{"class":314,"line":298},[312,173446,32211],{"class":488},[312,173448,173449],{"class":324},"(random.choice([",[312,173451,151343],{"class":339},[312,173453,733],{"class":324},[312,173455,152391],{"class":339},[312,173457,733],{"class":324},[312,173459,161186],{"class":339},[312,173461,34938],{"class":324},[312,173463,173464,173466,173469,173471,173473,173475,173477,173479,173481,173483,173485,173487,173489,173491],{"class":314,"line":974},[312,173465,32211],{"class":488},[312,173467,173468],{"class":324},"(random.sample([",[312,173470,1433],{"class":488},[312,173472,733],{"class":324},[312,173474,2027],{"class":488},[312,173476,733],{"class":324},[312,173478,2021],{"class":488},[312,173480,733],{"class":324},[312,173482,2238],{"class":488},[312,173484,733],{"class":324},[312,173486,2264],{"class":488},[312,173488,113971],{"class":324},[312,173490,2027],{"class":488},[312,173492,32293],{"class":324},[69,173494,173496],{"id":173495},"_9122-time","9.12.2 time",[303,173498,173500],{"className":32174,"code":173499,"language":32176,"meta":308,"style":308},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[119,173501,173502,173508,173512,173519,173527],{"__ignoreMap":308},[312,173503,173504,173506],{"class":314,"line":315},[312,173505,32188],{"class":1436},[312,173507,33624],{"class":324},[312,173509,173510],{"class":314,"line":171},[312,173511,4205],{"emptyLinePlaceholder":1881},[312,173513,173514,173516],{"class":314,"line":274},[312,173515,32211],{"class":488},[312,173517,173518],{"class":324},"(time.time())\n",[312,173520,173521,173523,173525],{"class":314,"line":298},[312,173522,96841],{"class":324},[312,173524,1433],{"class":488},[312,173526,1959],{"class":324},[312,173528,173529,173531,173533,173536],{"class":314,"line":974},[312,173530,32211],{"class":488},[312,173532,1576],{"class":324},[312,173534,173535],{"class":339},"\"1秒后执行\"",[312,173537,1959],{"class":324},[69,173539,173541],{"id":173540},"_9123-datetime","9.12.3 datetime",[303,173543,173545],{"className":32174,"code":173544,"language":32176,"meta":308,"style":308},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[119,173546,173547,173559,173563,173573,173580],{"__ignoreMap":308},[312,173548,173549,173551,173554,173556],{"class":314,"line":315},[312,173550,32533],{"class":1436},[312,173552,173553],{"class":324}," datetime ",[312,173555,32188],{"class":1436},[312,173557,173558],{"class":324}," datetime\n",[312,173560,173561],{"class":314,"line":171},[312,173562,4205],{"emptyLinePlaceholder":1881},[312,173564,173565,173568,173570],{"class":314,"line":274},[312,173566,173567],{"class":324},"now ",[312,173569,336],{"class":1436},[312,173571,173572],{"class":324}," datetime.now()\n",[312,173574,173575,173577],{"class":314,"line":298},[312,173576,32211],{"class":488},[312,173578,173579],{"class":324},"(now)\n",[312,173581,173582,173584,173587,173590,173592,173595],{"class":314,"line":974},[312,173583,32211],{"class":488},[312,173585,173586],{"class":324},"(now.strftime(",[312,173588,173589],{"class":339},"\"%Y-%m-",[312,173591,158146],{"class":488},[312,173593,173594],{"class":339}," %H:%M:%S\"",[312,173596,32293],{"class":324},[69,173598,173600],{"id":173599},"_9124-os","9.12.4 os",[303,173602,173604],{"className":32174,"code":173603,"language":32176,"meta":308,"style":308},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[119,173605,173606,173612,173616,173623],{"__ignoreMap":308},[312,173607,173608,173610],{"class":314,"line":315},[312,173609,32188],{"class":1436},[312,173611,47100],{"class":324},[312,173613,173614],{"class":314,"line":171},[312,173615,4205],{"emptyLinePlaceholder":1881},[312,173617,173618,173620],{"class":314,"line":274},[312,173619,32211],{"class":488},[312,173621,173622],{"class":324},"(os.getcwd())\n",[312,173624,173625,173627,173630,173633],{"class":314,"line":298},[312,173626,32211],{"class":488},[312,173628,173629],{"class":324},"(os.listdir(",[312,173631,173632],{"class":339},"\".\"",[312,173634,32293],{"class":324},[69,173636,173638],{"id":173637},"_9125-sys","9.12.5 sys",[303,173640,173642],{"className":32174,"code":173641,"language":32176,"meta":308,"style":308},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[119,173643,173644,173651,173655,173662],{"__ignoreMap":308},[312,173645,173646,173648],{"class":314,"line":315},[312,173647,32188],{"class":1436},[312,173649,173650],{"class":324}," sys\n",[312,173652,173653],{"class":314,"line":171},[312,173654,4205],{"emptyLinePlaceholder":1881},[312,173656,173657,173659],{"class":314,"line":274},[312,173658,32211],{"class":488},[312,173660,173661],{"class":324},"(sys.version)\n",[312,173663,173664,173666],{"class":314,"line":298},[312,173665,32211],{"class":488},[312,173667,173668],{"class":324},"(sys.path)\n",[14,173670,173672,173673,173675,173676,2196],{"id":173671},"_913-if-name-main","9.13 if ",[27,173674,81581],{}," == \"",[27,173677,103827],{},[24,173679,173680,173681,173684],{},"模块被直接运行和被导入时，",[119,173682,173683],{},"__name__"," 的值不同。",[24,173686,173687,173688,26414],{},"创建 ",[119,173689,173690],{},"my_module.py",[303,173692,173694],{"className":32174,"code":173693,"language":32176,"meta":308,"style":308},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[119,173695,173696,173704,173714,173718,173722,173734],{"__ignoreMap":308},[312,173697,173698,173700,173702],{"class":314,"line":315},[312,173699,33742],{"class":1436},[312,173701,7014],{"class":332},[312,173703,152548],{"class":324},[312,173705,173706,173708,173710,173712],{"class":314,"line":171},[312,173707,5895],{"class":1436},[312,173709,12672],{"class":324},[312,173711,2426],{"class":1436},[312,173713,152559],{"class":324},[312,173715,173716],{"class":314,"line":274},[312,173717,4205],{"emptyLinePlaceholder":1881},[312,173719,173720],{"class":314,"line":298},[312,173721,4205],{"emptyLinePlaceholder":1881},[312,173723,173724,173726,173728,173730,173732],{"class":314,"line":974},[312,173725,3338],{"class":1436},[312,173727,33015],{"class":488},[312,173729,103328],{"class":1436},[312,173731,103331],{"class":339},[312,173733,5544],{"class":324},[312,173735,173736,173738,173740,173742,173744,173746],{"class":314,"line":980},[312,173737,33094],{"class":488},[312,173739,168055],{"class":324},[312,173741,1433],{"class":488},[312,173743,733],{"class":324},[312,173745,2027],{"class":488},[312,173747,32293],{"class":324},[24,173749,173750],{},"作用：",[140,173752,173753,173756],{},[143,173754,173755],{},"直接运行该文件时，执行测试代码。",[143,173757,173758],{},"被其他文件导入时，不执行测试代码。",[24,173760,173761],{},"这是写模块时很常用的习惯。",[14,173763,173765],{"id":173764},"_914-包","9.14 包",[24,173767,173768,173769,173772],{},"包是包含 ",[119,173770,173771],{},"__init__.py"," 的目录，用于组织多个模块。",[24,173774,173775],{},"目录结构：",[303,173777,173780],{"className":173778,"code":173779,"language":6992,"meta":308},[6990],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[119,173781,173779],{"__ignoreMap":308},[24,173783,173784],{},"导入：",[303,173786,173788],{"className":32174,"code":173787,"language":32176,"meta":308,"style":308},"from utils.file_utils import read_file\n",[119,173789,173790],{"__ignoreMap":308},[312,173791,173792,173794,173797,173799],{"class":314,"line":315},[312,173793,32533],{"class":1436},[312,173795,173796],{"class":324}," utils.file_utils ",[312,173798,32188],{"class":1436},[312,173800,173801],{"class":324}," read_file\n",[24,173803,173804,173806],{},[119,173805,173771],{}," 可以为空，也可以写包初始化逻辑。",[14,173808,173810],{"id":173809},"_915-第三方包","9.15 第三方包",[24,173812,173813,173814,173816],{},"第三方包通过 ",[119,173815,25627],{}," 安装。",[303,173818,173820],{"className":25618,"code":173819,"language":25620,"meta":308,"style":308},"pip install requests\n",[119,173821,173822],{"__ignoreMap":308},[312,173823,173824,173826,173828],{"class":314,"line":315},[312,173825,25627],{"class":332},[312,173827,25630],{"class":339},[312,173829,147553],{"class":339},[24,173831,173832],{},"使用：",[303,173834,173836],{"className":32174,"code":173835,"language":32176,"meta":308,"style":308},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[119,173837,173838,173844,173848,173863],{"__ignoreMap":308},[312,173839,173840,173842],{"class":314,"line":315},[312,173841,32188],{"class":1436},[312,173843,147553],{"class":324},[312,173845,173846],{"class":314,"line":171},[312,173847,4205],{"emptyLinePlaceholder":1881},[312,173849,173850,173853,173855,173858,173861],{"class":314,"line":274},[312,173851,173852],{"class":324},"response ",[312,173854,336],{"class":1436},[312,173856,173857],{"class":324}," requests.get(",[312,173859,173860],{"class":339},"\"https:\u002F\u002Fwww.example.com\"",[312,173862,1959],{"class":324},[312,173864,173865,173867],{"class":314,"line":298},[312,173866,32211],{"class":488},[312,173868,173869],{"class":324},"(response.status_code)\n",[24,173871,173872],{},"查看已安装包：",[303,173874,173876],{"className":25618,"code":173875,"language":25620,"meta":308,"style":308},"pip list\n",[119,173877,173878],{"__ignoreMap":308},[312,173879,173880,173882],{"class":314,"line":315},[312,173881,25627],{"class":332},[312,173883,120724],{"class":339},[24,173885,173886],{},"导出项目依赖：",[303,173888,173889],{"className":25618,"code":147748,"language":25620,"meta":308,"style":308},[119,173890,173891],{"__ignoreMap":308},[312,173892,173893,173895,173897,173899],{"class":314,"line":315},[312,173894,25627],{"class":332},[312,173896,147757],{"class":339},[312,173898,28018],{"class":1436},[312,173900,147762],{"class":339},[24,173902,173903],{},"安装项目依赖：",[303,173905,173906],{"className":25618,"code":147768,"language":25620,"meta":308,"style":308},[119,173907,173908],{"__ignoreMap":308},[312,173909,173910,173912,173914,173916],{"class":314,"line":315},[312,173911,25627],{"class":332},[312,173913,25630],{"class":339},[312,173915,121408],{"class":488},[312,173917,147762],{"class":339},[14,173919,173921],{"id":173920},"_916-模块搜索路径","9.16 模块搜索路径",[24,173923,173924,173925,173928],{},"Python 导入模块时会在 ",[119,173926,173927],{},"sys.path"," 中查找。",[303,173930,173932],{"className":32174,"code":173931,"language":32176,"meta":308,"style":308},"import sys\n\nfor path in sys.path:\n    print(path)\n",[119,173933,173934,173940,173944,173956],{"__ignoreMap":308},[312,173935,173936,173938],{"class":314,"line":315},[312,173937,32188],{"class":1436},[312,173939,173650],{"class":324},[312,173941,173942],{"class":314,"line":171},[312,173943,4205],{"emptyLinePlaceholder":1881},[312,173945,173946,173948,173951,173953],{"class":314,"line":274},[312,173947,4830],{"class":1436},[312,173949,173950],{"class":324}," path ",[312,173952,27839],{"class":1436},[312,173954,173955],{"class":324}," sys.path:\n",[312,173957,173958,173960],{"class":314,"line":298},[312,173959,33094],{"class":488},[312,173961,170684],{"class":324},[24,173963,173964],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[24,173966,159078],{},[303,173968,173971],{"className":173969,"code":173970,"language":6992,"meta":308},[6990],"random.py\njson.py\ntime.py\n",[119,173972,173970],{"__ignoreMap":308},[24,173974,173975],{},"这些文件名可能导致导入异常。",[14,173977,173979],{"id":173978},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[24,173981,173775],{},[303,173983,173986],{"className":173984,"code":173985,"language":6992,"meta":308},[6990],"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",[119,173987,173985],{"__ignoreMap":308},[24,173989,173990,26414],{},[119,173991,173992],{},"utils\u002Ffile_utils.py",[303,173994,173996],{"className":32174,"code":173995,"language":32176,"meta":308,"style":308},"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",[119,173997,173998,174004,174014,174018,174022,174032,174042,174050,174056,174060,174087,174097,174101,174105,174115,174141],{"__ignoreMap":308},[312,173999,174000,174002],{"class":314,"line":315},[312,174001,32188],{"class":1436},[312,174003,148546],{"class":324},[312,174005,174006,174008,174010,174012],{"class":314,"line":171},[312,174007,32533],{"class":1436},[312,174009,110080],{"class":324},[312,174011,32188],{"class":1436},[312,174013,110085],{"class":324},[312,174015,174016],{"class":314,"line":274},[312,174017,4205],{"emptyLinePlaceholder":1881},[312,174019,174020],{"class":314,"line":298},[312,174021,4205],{"emptyLinePlaceholder":1881},[312,174023,174024,174026,174029],{"class":314,"line":974},[312,174025,33742],{"class":1436},[312,174027,174028],{"class":332}," read_json",[312,174030,174031],{"class":324},"(path):\n",[312,174033,174034,174037,174039],{"class":314,"line":980},[312,174035,174036],{"class":324},"    path ",[312,174038,336],{"class":1436},[312,174040,174041],{"class":324}," Path(path)\n",[312,174043,174044,174046,174048],{"class":314,"line":997},[312,174045,4906],{"class":1436},[312,174047,40725],{"class":1436},[312,174049,170765],{"class":324},[312,174051,174052,174054],{"class":314,"line":1003},[312,174053,16553],{"class":1436},[312,174055,53624],{"class":324},[312,174057,174058],{"class":314,"line":1020},[312,174059,4205],{"emptyLinePlaceholder":1881},[312,174061,174062,174064,174066,174069,174071,174073,174075,174077,174079,174081,174083,174085],{"class":314,"line":1026},[312,174063,35973],{"class":1436},[312,174065,148246],{"class":488},[312,174067,174068],{"class":324},"(path, ",[312,174070,148256],{"class":339},[312,174072,733],{"class":324},[312,174074,148261],{"class":1579},[312,174076,336],{"class":1436},[312,174078,148266],{"class":339},[312,174080,1583],{"class":324},[312,174082,33178],{"class":1436},[312,174084,149608],{"class":1579},[312,174086,5544],{"class":324},[312,174088,174089,174091,174093,174095],{"class":314,"line":3418},[312,174090,16553],{"class":1436},[312,174092,149619],{"class":324},[312,174094,47149],{"class":1579},[312,174096,1959],{"class":324},[312,174098,174099],{"class":314,"line":3423},[312,174100,4205],{"emptyLinePlaceholder":1881},[312,174102,174103],{"class":314,"line":3429},[312,174104,4205],{"emptyLinePlaceholder":1881},[312,174106,174107,174109,174112],{"class":314,"line":3434},[312,174108,33742],{"class":1436},[312,174110,174111],{"class":332}," write_json",[312,174113,174114],{"class":324},"(path, data):\n",[312,174116,174117,174119,174121,174123,174125,174127,174129,174131,174133,174135,174137,174139],{"class":314,"line":3448},[312,174118,35973],{"class":1436},[312,174120,148246],{"class":488},[312,174122,174068],{"class":324},[312,174124,153431],{"class":339},[312,174126,733],{"class":324},[312,174128,148261],{"class":1579},[312,174130,336],{"class":1436},[312,174132,148266],{"class":339},[312,174134,1583],{"class":324},[312,174136,33178],{"class":1436},[312,174138,149608],{"class":1579},[312,174140,5544],{"class":324},[312,174142,174143,174146,174148,174150,174152,174154,174156,174158,174160,174162,174164],{"class":314,"line":3453},[312,174144,174145],{"class":324},"        json.dump(data, ",[312,174147,47149],{"class":1579},[312,174149,733],{"class":324},[312,174151,148592],{"class":1579},[312,174153,336],{"class":1436},[312,174155,35782],{"class":488},[312,174157,733],{"class":324},[312,174159,153467],{"class":1579},[312,174161,336],{"class":1436},[312,174163,2027],{"class":488},[312,174165,1959],{"class":324},[24,174167,174168,26414],{},[119,174169,156062],{},[303,174171,174173],{"className":32174,"code":174172,"language":32176,"meta":308,"style":308},"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",[119,174174,174175,174186,174190,174203,174223],{"__ignoreMap":308},[312,174176,174177,174179,174181,174183],{"class":314,"line":315},[312,174178,32533],{"class":1436},[312,174180,173796],{"class":324},[312,174182,32188],{"class":1436},[312,174184,174185],{"class":324}," read_json, write_json\n",[312,174187,174188],{"class":314,"line":171},[312,174189,4205],{"emptyLinePlaceholder":1881},[312,174191,174192,174194,174196,174199,174201],{"class":314,"line":274},[312,174193,161171],{"class":324},[312,174195,336],{"class":1436},[312,174197,174198],{"class":324}," read_json(",[312,174200,153286],{"class":339},[312,174202,1959],{"class":324},[312,174204,174205,174207,174209,174211,174213,174215,174217,174219,174221],{"class":314,"line":298},[312,174206,171989],{"class":324},[312,174208,64457],{"class":339},[312,174210,492],{"class":324},[312,174212,151343],{"class":339},[312,174214,733],{"class":324},[312,174216,152927],{"class":339},[312,174218,492],{"class":324},[312,174220,2931],{"class":488},[312,174222,166607],{"class":324},[312,174224,174225,174228,174230],{"class":314,"line":974},[312,174226,174227],{"class":324},"write_json(",[312,174229,153286],{"class":339},[312,174231,174232],{"class":324},", students)\n",[14,174234,174236],{"id":174235},"_918-易错点","9.18 易错点",[140,174238,174239,174242,174247,174252,174255,174258],{},[143,174240,174241],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[143,174243,174244,174245,30181],{},"能指定异常类型就不要裸写 ",[119,174246,172349],{},[143,174248,174249,174251],{},[119,174250,172724],{}," 无论是否出错都会执行。",[143,174253,174254],{},"模块文件名不要和标准库重名。",[143,174256,174257],{},"导入自己写的模块时，要注意运行目录。",[143,174259,174260],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174262,174264],{"id":174263},"_919-本章练习","9.19 本章练习",[140,174266,174267,174270,174273,174279,174286],{},[143,174268,174269],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[143,174271,174272],{},"写函数读取文件，如果文件不存在则返回空字符串。",[143,174274,173687,174275,174278],{},[119,174276,174277],{},"math_utils.py","，实现加减乘除函数并导入使用。",[143,174280,174281,174282,174285],{},"创建一个 ",[119,174283,174284],{},"utils"," 包，把 JSON 读写函数放进去。",[143,174287,174288],{},"写一个程序，捕获除零异常和输入格式异常。",[1856,174290,174291],{},"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":308,"searchDepth":171,"depth":171,"links":174293},[174294,174295,174296,174297,174298,174299,174300,174301,174302,174303,174304,174310,174317,174319,174320,174321,174322,174323,174324],{"id":172146,"depth":171,"text":172147},{"id":172274,"depth":171,"text":172275},{"id":172323,"depth":171,"text":172324},{"id":172472,"depth":171,"text":172473},{"id":172644,"depth":171,"text":172645},{"id":172713,"depth":171,"text":172714},{"id":172824,"depth":171,"text":172825},{"id":172950,"depth":171,"text":172951},{"id":173075,"depth":171,"text":173076},{"id":173130,"depth":171,"text":173131},{"id":173229,"depth":171,"text":173230,"children":174305},[174306,174307,174308,174309],{"id":173233,"depth":274,"text":173234},{"id":173267,"depth":274,"text":173268},{"id":173306,"depth":274,"text":173307},{"id":173385,"depth":274,"text":173386},{"id":173408,"depth":171,"text":173409,"children":174311},[174312,174313,174314,174315,174316],{"id":173412,"depth":274,"text":173413},{"id":173495,"depth":274,"text":173496},{"id":173540,"depth":274,"text":173541},{"id":173599,"depth":274,"text":173600},{"id":173637,"depth":274,"text":173638},{"id":173671,"depth":171,"text":174318},"9.13 if name == \"main\"",{"id":173764,"depth":171,"text":173765},{"id":173809,"depth":171,"text":173810},{"id":173920,"depth":171,"text":173921},{"id":173978,"depth":171,"text":173979},{"id":174235,"depth":171,"text":174236},{"id":174263,"depth":171,"text":174264},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172138,"description":1878},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174331,"title":174332,"body":174333,"description":174496,"extension":1879,"meta":174497,"navigation":1881,"path":174498,"seo":174499,"stem":174500,"__hash__":174501},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174334,"toc":174491},[174335,174338,174341,174344,174355,174357,174431,174434,174437,174440,174443,174446,174449,174452,174455,174458,174461],[10,174336,174332],{"id":174337},"python教程",[24,174339,174340],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[24,174342,174343],{},"建议学习环境：",[140,174345,174346,174349,174352],{},[143,174347,174348],{},"Python 版本：Python 3.10 及以上。",[143,174350,174351],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[143,174353,174354],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174356,118847],{"id":118847},[140,174358,174359,174365,174371,174377,174383,174389,174395,174401,174407,174413,174419,174425],{},[143,174360,174361],{},[164,174362,174364],{"href":174363},".\u002Fch1-Python","Python环境与第一个程序",[143,174366,174367],{},[164,174368,174370],{"href":174369},".\u002Fch2","基础语法、变量与字符串",[143,174372,174373],{},[164,174374,174376],{"href":174375},".\u002Fch3","判断语句",[143,174378,174379],{},[164,174380,174382],{"href":174381},".\u002Fch4","循环语句",[143,174384,174385],{},[164,174386,174388],{"href":174387},".\u002Fch5","函数基础",[143,174390,174391],{},[164,174392,174394],{"href":174393},".\u002Fch6","数据容器",[143,174396,174397],{},[164,174398,174400],{"href":174399},".\u002Fch7","函数进阶",[143,174402,174403],{},[164,174404,174406],{"href":174405},".\u002Fch8","文件操作",[143,174408,174409],{},[164,174410,174412],{"href":174411},".\u002Fch9","异常、模块与包",[143,174414,174415],{},[164,174416,174418],{"href":174417},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[143,174420,174421],{},[164,174422,174424],{"href":174423},".\u002Fch11","面向对象基础",[143,174426,174427],{},[164,174428,174430],{"href":174429},".\u002Fch12","综合案例与复习路线",[14,174432,174433],{"id":174433},"学习路线",[24,174435,174436],{},"第一阶段：能运行程序。",[24,174438,174439],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[24,174441,174442],{},"第二阶段：能组织数据。",[24,174444,174445],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[24,174447,174448],{},"第三阶段：能封装逻辑。",[24,174450,174451],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[24,174453,174454],{},"第四阶段：能做小项目。",[24,174456,174457],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174459,174460],{"id":174460},"参考资料",[140,174462,174463,174470,174477,174484],{},[143,174464,174465,174466],{},"黑马程序员 Python 入门教程推荐：",[164,174467,174468],{"href":174468,"rel":174469},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[168],[143,174471,174472,174473],{},"Python 官方中文教程：",[164,174474,174475],{"href":174475,"rel":174476},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[168],[143,174478,174479,174480],{},"Python 标准库文档：",[164,174481,174482],{"href":174482,"rel":174483},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[168],[143,174485,174486,174487],{},"pyecharts 文档：",[164,174488,174489],{"href":174489,"rel":174490},"https:\u002F\u002Fpyecharts.org\u002F",[168],{"title":308,"searchDepth":171,"depth":171,"links":174492},[174493,174494,174495],{"id":118847,"depth":171,"text":118847},{"id":174433,"depth":171,"text":174433},{"id":174460,"depth":171,"text":174460},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":25175},"\u002Fwiki\u002F2024-10-10-python",{"title":174332,"description":174496},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331437995]